diff -u --recursive --new-file v2.3.43/linux/MAINTAINERS linux/MAINTAINERS --- v2.3.43/linux/MAINTAINERS Thu Feb 10 17:11:02 2000 +++ linux/MAINTAINERS Fri Feb 11 16:10:03 2000 @@ -806,6 +806,7 @@ P: Anders Larsen M: al@alarsen.net L: linux-kernel@vger.rutgers.edu +W: http://www.alarsen.net/linux/qnx4fs/ S: Maintained REAL TIME CLOCK DRIVER diff -u --recursive --new-file v2.3.43/linux/Makefile linux/Makefile --- v2.3.43/linux/Makefile Thu Feb 10 17:11:02 2000 +++ linux/Makefile Thu Feb 10 14:54:16 2000 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 3 -SUBLEVEL = 43 +SUBLEVEL = 44 EXTRAVERSION = ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) diff -u --recursive --new-file v2.3.43/linux/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S --- v2.3.43/linux/arch/alpha/kernel/entry.S Thu Feb 10 17:11:02 2000 +++ linux/arch/alpha/kernel/entry.S Thu Feb 10 19:00:35 2000 @@ -573,7 +573,7 @@ .align 3 ret_from_sys_call: cmovne $26,0,$19 /* $19 = 0 => non-restartable */ - ldq $3,TASK_PROCESSOR($8) + ldl $3,TASK_PROCESSOR($8) lda $4,softirq_state sll $3,5,$3 addq $3,$4,$4 diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/apic.c linux/arch/i386/kernel/apic.c --- v2.3.43/linux/arch/i386/kernel/apic.c Fri Jan 21 18:19:16 2000 +++ linux/arch/i386/kernel/apic.c Fri Feb 11 08:19:45 2000 @@ -3,6 +3,8 @@ * * (c) 1999, 2000 Ingo Molnar * + * Fixes + * Maciej W. Rozycki : Bits for genuine 82489DX timers */ #include diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/i8259.c linux/arch/i386/kernel/i8259.c --- v2.3.43/linux/arch/i386/kernel/i8259.c Fri Jan 21 18:19:16 2000 +++ linux/arch/i386/kernel/i8259.c Fri Feb 11 11:30:10 2000 @@ -311,7 +311,7 @@ } } -void init_8259A(int auto_eoi) +void __init init_8259A(int auto_eoi) { unsigned long flags; @@ -384,7 +384,7 @@ #endif -void init_ISA_irqs (void) +void __init init_ISA_irqs (void) { int i; diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/io_apic.c linux/arch/i386/kernel/io_apic.c --- v2.3.43/linux/arch/i386/kernel/io_apic.c Thu Feb 10 17:11:03 2000 +++ linux/arch/i386/kernel/io_apic.c Sat Feb 12 09:06:29 2000 @@ -11,6 +11,9 @@ * Hidemi Kishimoto , * further tested and cleaned up by Zach Brown * and Ingo Molnar + * + * Fixes + * Maciej W. Rozycki : Bits for genuine 82489DX APICs */ #include @@ -249,7 +252,7 @@ best_guess = irq; } } - return -1; + return best_guess; } /* @@ -906,40 +909,6 @@ } } -static void __init setup_ioapic_default_id(void) -{ - struct IO_APIC_reg_00 reg_00; - - /* - * 'default' mptable configurations mean a hardwired setup, - * 2 CPUs, 16 APIC registers. IO-APIC ID is usually set to 0, - * setting it to ID 2 should be fine. - */ - - /* - * Sanity check, is ID 2 really free? Every APIC in the - * system must have a unique ID or we get lots of nice - * 'stuck on smp_invalidate_needed IPI wait' messages. - */ - if (phys_cpu_present_map & (1<<0x2)) - panic("APIC ID 2 already used"); - - /* - * Set the ID - */ - *(int *)®_00 = io_apic_read(0, 0); - printk("...changing IO-APIC physical APIC ID to 2...\n"); - reg_00.ID = 0x2; - io_apic_write(0, 0, *(int *)®_00); - - /* - * Sanity check - */ - *(int *)®_00 = io_apic_read(0, 0); - if (reg_00.ID != 0x2) - panic("could not set ID"); -} - /* * function to set the IO-APIC physical IDs based on the * values stored in the MPC table. @@ -967,6 +936,15 @@ printk("...changing IO-APIC physical APIC ID to %d ...", mp_ioapics[apic].mpc_apicid); + /* + * Sanity check, is the ID really free? Every APIC in the + * system must have a unique ID or we get lots of nice + * 'stuck on smp_invalidate_needed IPI wait' messages. + */ + if (phys_cpu_present_map & (1< @@ -339,6 +339,8 @@ * Now see if we need to read further. */ if (mpf->mpf_feature1 != 0) { + printk("Default MP configuration #%d\n", mpf->mpf_feature1); + /* * local APIC has default address */ @@ -352,6 +354,7 @@ nr_ioapics = 1; mp_ioapics[0].mpc_apicaddr = 0xFEC00000; + mp_ioapics[0].mpc_apicid = 2; /* * Save the default type number, we * need it later to set the IO-APIC diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c --- v2.3.43/linux/arch/i386/kernel/pci-pc.c Thu Feb 10 17:11:03 2000 +++ linux/arch/i386/kernel/pci-pc.c Sat Feb 12 09:27:14 2000 @@ -883,6 +883,18 @@ } } +static void __init pci_fixup_i450gx(struct pci_dev *d) +{ + /* + * i450GX and i450KX -- Find and scan all secondary buses. + * (called separately for each PCI bridge found) + */ + u8 busno; + pci_read_config_byte(d, 0x4a, &busno); + printk("PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno); + pci_scan_bus(busno, pci_root_ops, NULL); +} + static void __init pci_fixup_rcc(struct pci_dev *d) { /* @@ -954,6 +966,7 @@ struct pci_fixup pcibios_fixups[] = { { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx }, + { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_RCC, PCI_DEVICE_ID_RCC_HE, pci_fixup_rcc }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_RCC, PCI_DEVICE_ID_RCC_LE, pci_fixup_rcc }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_6010, pci_fixup_compaq }, @@ -1036,6 +1049,18 @@ * table, but unfortunately we have to know the interrupt router chip. */ +/* + * Never use: 0, 1, 2 (timer, keyboard, and cascade) + * Avoid using: 13, 14 and 15 (FP error and IDE). + * Penalize: 3, 4, 7, 12 (known ISA uses: serial, parallel and mouse) + */ +static unsigned int pcibios_irq_mask = 0xfff8; + +static unsigned pcibios_irq_penalty[16] = { + 1000, 1000, 1000, 10, 10, 0, 0, 10, + 0, 0, 0, 0, 10, 100, 100, 100 +}; + static char *pcibios_lookup_irq(struct pci_dev *dev, struct irq_routing_table *rt, int pin, int assign) { struct irq_info *q; @@ -1043,6 +1068,7 @@ int i, pirq, newirq; u32 rtrid, mask; u8 x; + char *msg = NULL; pin--; DBG("IRQ for %s(%d)", dev->slot_name, pin); @@ -1066,10 +1092,15 @@ return NULL; } DBG(" -> PIRQ %02x, mask %04x", pirq, mask); - if (!assign || (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) - newirq = 0; - else for(newirq = 13; newirq && !(mask & (1 << newirq)); newirq--) - ; + newirq = 0; + if (assign && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { + for (i = 0; i < 16; i++) { + if (!(mask & pcibios_irq_mask & (1 << i))) + continue; + if (pcibios_irq_penalty[i] < pcibios_irq_penalty[newirq]) + newirq = i; + } + } if (!(router = pci_find_slot(rt->rtr_bus, rt->rtr_devfn))) { DBG(" -> router not found\n"); return NULL; @@ -1094,27 +1125,30 @@ pci_read_config_byte(router, pirq, &x); if (x < 16) { DBG(" -> [PIIX] %02x\n", x); - dev->irq = x; - return "PIIX"; + newirq = x; + msg = "PIIX"; } else if (newirq) { DBG(" -> [PIIX] set to %02x\n", newirq); pci_write_config_byte(router, pirq, newirq); - dev->irq = newirq; - return "PIIX-NEW"; - } - DBG(" -> [PIIX] sink\n"); - return NULL; + msg = "PIIX-NEW"; + } else + DBG(" -> [PIIX] sink\n"); + break; case ID(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533): default: DBG(" -> unknown router %04x/%04x\n", rt->rtr_vendor, rt->rtr_device); if (newirq && mask == (1 << newirq)) { /* Only one IRQ available -> use it */ - dev->irq = newirq; - return "guess"; + msg = "guess"; } - return NULL; } #undef ID + + if (msg) { + dev->irq = newirq; + pcibios_irq_penalty[newirq]++; + } + return msg; } static void __init pcibios_fixup_irqs(void) @@ -1134,6 +1168,18 @@ pcibios_irq_peer_trick(rtable); pci_for_each_dev(dev) { + /* + * If the BIOS has set an out of range IRQ number, just ignore it. + * Also keep track of which IRQ's are already in use. + */ + if (dev->irq >= 16) { + DBG("%s: ignoring bogus IRQ %d\n", dev->slot_name, dev->irq); + dev->irq = 0; + } + pcibios_irq_penalty[dev->irq]++; + } + + pci_for_each_dev(dev) { pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); #if defined(CONFIG_X86_IO_APIC) /* @@ -1171,10 +1217,8 @@ } #endif /* - * Fix out-of-range IRQ numbers and missing IRQs. + * Still no IRQ? Try to assign one... */ - if (dev->irq >= NR_IRQS) - dev->irq = 0; if (pin && !dev->irq && pirq_table) { char *msg = pcibios_lookup_irq(dev, pirq_table, pin, 0); if (msg) @@ -1279,6 +1323,9 @@ return NULL; } else if (!strcmp(str, "rom")) { pci_probe |= PCI_ASSIGN_ROMS; + return NULL; + } else if (!strncmp(str, "irqmask=", 8)) { + pcibios_irq_mask = simple_strtol(str+8, NULL, 0); return NULL; } return str; diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/setup.c linux/arch/i386/kernel/setup.c --- v2.3.43/linux/arch/i386/kernel/setup.c Thu Feb 10 17:11:03 2000 +++ linux/arch/i386/kernel/setup.c Thu Feb 10 14:54:11 2000 @@ -1515,7 +1515,7 @@ * and IDT. We reload them nevertheless, this function acts as a * 'CPU state barrier', nothing should get across. */ -void cpu_init (void) +void __init cpu_init (void) { int nr = smp_processor_id(); struct tss_struct * t = &init_tss[nr]; diff -u --recursive --new-file v2.3.43/linux/arch/i386/kernel/smp.c linux/arch/i386/kernel/smp.c --- v2.3.43/linux/arch/i386/kernel/smp.c Thu Feb 10 17:11:03 2000 +++ linux/arch/i386/kernel/smp.c Fri Feb 11 08:19:45 2000 @@ -103,7 +103,7 @@ /* The 'big kernel lock' */ spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED; -struct tlb_state cpu_tlbstate[NR_CPUS]; +struct tlb_state cpu_tlbstate[NR_CPUS] = {[0 ... NR_CPUS-1] = { &init_mm, 0 }}; /* * the following functions deal with sending IPIs between CPUs. @@ -347,12 +347,7 @@ __flush_tlb_one(flush_va); } else leave_mm(cpu); - } else { - extern void show_stack (void *); - printk("hm #1: %p, %p.\n", flush_mm, cpu_tlbstate[cpu].active_mm); - show_stack(NULL); } - __flush_tlb(); ack_APIC_irq(); clear_bit(cpu, &flush_cpumask); } @@ -382,7 +377,7 @@ * Temporarily this turns IRQs off, so that lockups are * detected by the NMI watchdog. */ - spin_lock_irq(&tlbstate_lock); + spin_lock(&tlbstate_lock); flush_mm = mm; flush_va = va; @@ -398,7 +393,7 @@ flush_mm = NULL; flush_va = 0; - spin_unlock_irq(&tlbstate_lock); + spin_unlock(&tlbstate_lock); } void flush_tlb_current_task(void) diff -u --recursive --new-file v2.3.43/linux/arch/sparc64/kernel/irq.c linux/arch/sparc64/kernel/irq.c --- v2.3.43/linux/arch/sparc64/kernel/irq.c Thu Feb 10 17:11:06 2000 +++ linux/arch/sparc64/kernel/irq.c Sat Feb 12 09:52:04 2000 @@ -1,4 +1,4 @@ -/* $Id: irq.c,v 1.82 2000/02/09 11:15:07 davem Exp $ +/* $Id: irq.c,v 1.83 2000/02/11 06:57:17 jj Exp $ * irq.c: UltraSparc IRQ handling/init/registry. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) @@ -57,7 +57,7 @@ #ifndef __SMP__ unsigned int __up_workvec[16] __attribute__ ((aligned (64))); -#define irq_work(__cpu, __pil) &(__up_workvec[(__pil)]) +#define irq_work(__cpu, __pil) &(__up_workvec[(void)(__cpu), (__pil)]) #else #define irq_work(__cpu, __pil) &(cpu_data[(__cpu)].irq_worklists[(__pil)]) #endif diff -u --recursive --new-file v2.3.43/linux/drivers/block/loop.c linux/drivers/block/loop.c --- v2.3.43/linux/drivers/block/loop.c Thu Feb 10 17:11:07 2000 +++ linux/drivers/block/loop.c Sat Feb 12 09:05:18 2000 @@ -40,6 +40,10 @@ * it passes the underlying device's block number instead of the * offset. This makes it change for a given block when the file is * moved/restored/copied and also doesn't work over NFS. + * AV, Feb 11, 2000: for files we pass the page index now. It should fix the + * problem above. Since the granularity is PAGE_CACHE_SIZE now it seems to + * be correct way. OTOH, taking the thing from x86 to Alpha may become + * interesting, so we might want to rethink it. */ #include @@ -77,10 +81,6 @@ #define FALSE 0 #define TRUE (!FALSE) -/* Forward declaration of function to create missing blocks in the - backing file (can happen if the backing file is sparse) */ -static int create_missing_block(struct loop_device *lo, int block, int blksize); - /* * Transfer functions */ @@ -164,14 +164,109 @@ loop_sizes[lo->lo_number] = size; } +static int lo_send(struct loop_device *lo, char *data, int len, loff_t pos) +{ + struct file *file = lo->lo_backing_file; /* kudos to NFsckingS */ + struct address_space *mapping = lo->lo_dentry->d_inode->i_mapping; + struct address_space_operations *aops = mapping->a_ops; + struct page *page; + char *kaddr; + unsigned long index; + unsigned size, offset; + + index = pos >> PAGE_CACHE_SHIFT; + offset = pos & (PAGE_CACHE_SIZE - 1); + while (len > 0) { + size = PAGE_CACHE_SIZE - offset; + if (size > len) + size = len; + + page = grab_cache_page(mapping, index); + if (!page) + goto fail; + if (aops->prepare_write(page, offset, offset+size)) + goto unlock; + kaddr = (char*)page_address(page); + if ((lo->transfer)(lo, WRITE, kaddr+offset, data, size, index)) + goto write_fail; + if (aops->commit_write(file, page, offset, offset+size)) + goto unlock; + data += size; + len -= size; + offset = 0; + index++; + pos += size; + if (pos > lo->lo_dentry->d_inode->i_size) + lo->lo_dentry->d_inode->i_size = pos; + UnlockPage(page); + page_cache_release(page); + } + return 0; + +write_fail: + printk(KERN_ERR "loop: transfer error block %ld\n", index); + ClearPageUptodate(page); + kunmap(page); +unlock: + UnlockPage(page); + page_cache_release(page); +fail: + return -1; +} + +struct lo_read_data { + struct loop_device *lo; + char *data; +}; + +static int lo_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size) +{ + char *kaddr; + unsigned long count = desc->count; + struct lo_read_data *p = (struct lo_read_data*)desc->buf; + struct loop_device *lo = p->lo; + + if (size > count) + size = count; + + kaddr = (char*)kmap(page); + if ((lo->transfer)(lo,READ,kaddr+offset,p->data,size,page->index)) { + size = 0; + printk(KERN_ERR "loop: transfer error block %ld\n",page->index); + desc->error = -EINVAL; + } + kunmap(page); + + desc->count = count - size; + desc->written += size; + p->data += size; + return size; +} + +static int lo_receive(struct loop_device *lo, char *data, int len, loff_t pos) +{ + struct file *file = lo->lo_backing_file; + struct lo_read_data cookie; + read_descriptor_t desc; + + cookie.lo = lo; + cookie.data = data; + desc.written = 0; + desc.count = len; + desc.buf = (char*)&cookie; + desc.error = 0; + do_generic_file_read(file, &pos, &desc, lo_read_actor); + return desc.error; +} + static void do_lo_request(request_queue_t * q) { - int real_block, block, offset, len, blksize, size; + int block, offset, len, blksize, size; char *dest_addr; struct loop_device *lo; struct buffer_head *bh; struct request *current_request; - int block_present; + loff_t pos; repeat: INIT_REQUEST; @@ -182,6 +277,18 @@ lo = &loop_dev[MINOR(current_request->rq_dev)]; if (!lo->lo_dentry || !lo->transfer) goto error_out; + if (current_request->cmd == WRITE) { + if (lo->lo_flags & LO_FLAGS_READ_ONLY) + goto error_out; + } else if (current_request->cmd != READ) { + printk(KERN_ERR "unknown loop device command (%d)?!?", current_request->cmd); + goto error_out; + } + + dest_addr = current_request->buffer; + len = current_request->current_nr_sectors << 9; + if (lo->lo_flags & LO_FLAGS_DO_BMAP) + goto file_backed; blksize = BLOCK_SIZE; if (blksize_size[MAJOR(lo->lo_device)]) { @@ -189,9 +296,6 @@ if (!blksize) blksize = BLOCK_SIZE; } - - dest_addr = current_request->buffer; - if (blksize < 512) { block = current_request->sector * (512/blksize); offset = 0; @@ -201,87 +305,68 @@ } block += lo->lo_offset / blksize; offset += lo->lo_offset % blksize; - if (offset > blksize) { + if (offset >= blksize) { block++; offset -= blksize; } - len = current_request->current_nr_sectors << 9; - - if (current_request->cmd == WRITE) { - if (lo->lo_flags & LO_FLAGS_READ_ONLY) - goto error_out; - } else if (current_request->cmd != READ) { - printk(KERN_ERR "unknown loop device command (%d)?!?", current_request->cmd); - goto error_out; - } spin_unlock_irq(&io_request_lock); + while (len > 0) { size = blksize - offset; if (size > len) size = len; - real_block = block; - block_present = TRUE; - - if (lo->lo_flags & LO_FLAGS_DO_BMAP) { - real_block = bmap(lo->lo_dentry->d_inode, block); - if (!real_block) { - - /* The backing file is a sparse file and this block - doesn't exist. If reading, return zeros. If - writing, force the underlying FS to create - the block */ - if (current_request->cmd == READ) { - memset(dest_addr, 0, size); - block_present = FALSE; - } else { - if (!create_missing_block(lo, block, blksize)) { - goto error_out_lock; - } - real_block = bmap(lo->lo_dentry->d_inode, block); - } - - } + bh = getblk(lo->lo_device, block, blksize); + if (!bh) { + printk(KERN_ERR "loop: device %s: getblk(-, %d, %d) returned NULL", + kdevname(lo->lo_device), + block, blksize); + goto error_out_lock; } - - if (block_present) { - bh = getblk(lo->lo_device, real_block, blksize); - if (!bh) { - printk(KERN_ERR "loop: device %s: getblk(-, %d, %d) returned NULL", - kdevname(lo->lo_device), - block, blksize); - goto error_out_lock; - } - if (!buffer_uptodate(bh) && ((current_request->cmd == READ) || - (offset || (len < blksize)))) { - ll_rw_block(READ, 1, &bh); - wait_on_buffer(bh); - if (!buffer_uptodate(bh)) { - brelse(bh); - goto error_out_lock; - } - } - - if ((lo->transfer)(lo, current_request->cmd, bh->b_data + offset, - dest_addr, size, real_block)) { - printk(KERN_ERR "loop: transfer error block %d\n", block); + if (!buffer_uptodate(bh) && ((current_request->cmd == READ) || + (offset || (len < blksize)))) { + ll_rw_block(READ, 1, &bh); + wait_on_buffer(bh); + if (!buffer_uptodate(bh)) { brelse(bh); goto error_out_lock; } + } - if (current_request->cmd == WRITE) { - mark_buffer_uptodate(bh, 1); - mark_buffer_dirty(bh, 1); - } + if ((lo->transfer)(lo, current_request->cmd, bh->b_data + offset, + dest_addr, size, block)) { + printk(KERN_ERR "loop: transfer error block %d\n", block); brelse(bh); + goto error_out_lock; } + + if (current_request->cmd == WRITE) { + mark_buffer_uptodate(bh, 1); + mark_buffer_dirty(bh, 1); + } + brelse(bh); dest_addr += size; len -= size; offset = 0; block++; } + goto done; + +file_backed: + pos = ((loff_t)current_request->sector << 9) + lo->lo_offset; + spin_unlock_irq(&io_request_lock); + if (current_request->cmd == WRITE) { + if (lo_send(lo, dest_addr, len, pos)) + goto error_out_lock; + } else { + if (lo_receive(lo, dest_addr, len, pos)) + goto error_out_lock; + } +done: spin_lock_irq(&io_request_lock); + current_request->sector += current_request->current_nr_sectors; + current_request->nr_sectors -= current_request->current_nr_sectors; current_request->next=CURRENT; CURRENT=current_request; end_request(1); @@ -295,61 +380,6 @@ goto repeat; } -static int create_missing_block(struct loop_device *lo, int block, int blksize) -{ - struct file *file; - loff_t new_offset; - char zero_buf[1] = { 0 }; - ssize_t retval; - mm_segment_t old_fs; - struct inode *inode; - - file = lo->lo_backing_file; - if (file == NULL) { - printk(KERN_WARNING "loop: cannot create block - no backing file\n"); - return FALSE; - } - - if (file->f_op == NULL) { - printk(KERN_WARNING "loop: cannot create block - no file ops\n"); - return FALSE; - } - - new_offset = block * blksize; - - if (file->f_op->llseek != NULL) { - file->f_op->llseek(file, new_offset, 0); - } else { - /* Do what the default llseek() code would have done */ - file->f_pos = new_offset; - file->f_reada = 0; - file->f_version = ++event; - } - - if (file->f_op->write == NULL) { - printk(KERN_WARNING "loop: cannot create block - file not writeable\n"); - return FALSE; - } - - old_fs = get_fs(); - set_fs(get_ds()); - - inode = file->f_dentry->d_inode; - down(&inode->i_sem); - retval = file->f_op->write(file, zero_buf, 1, &file->f_pos); - up(&inode->i_sem); - - set_fs(old_fs); - - if (retval < 0) { - printk(KERN_WARNING "loop: cannot create block - FS write failed: code %Zi\n", - retval); - return FALSE; - } else { - return TRUE; - } -} - static int loop_set_fd(struct loop_device *lo, kdev_t dev, unsigned int arg) { struct file *file; @@ -386,22 +416,12 @@ a file structure */ lo->lo_backing_file = NULL; } else if (S_ISREG(inode->i_mode)) { - /* - * Total crap. We should just use pagecache instead of trying - * to redirect on block level. - */ - if (!inode->i_mapping->a_ops->bmap) { - printk(KERN_ERR "loop: device has no block access/not implemented\n"); - goto out_putf; - } - - /* Backed by a regular file - we need to hold onto - a file structure for this file. We'll use it to - write to blocks that are not already present in - a sparse file. We create a new file structure - based on the one passed to us via 'arg'. This is - to avoid changing the file structure that the - caller is using */ + /* Backed by a regular file - we need to hold onto a file + structure for this file. Friggin' NFS can't live without + it on write and for reading we use do_generic_file_read(), + so... We create a new file structure based on the one + passed to us via 'arg'. This is to avoid changing the file + structure that the caller is using */ lo->lo_device = inode->i_dev; lo->lo_flags = LO_FLAGS_DO_BMAP; @@ -432,7 +452,6 @@ lo->lo_flags |= LO_FLAGS_READ_ONLY; set_device_ro(dev, 1); } else { - vmtruncate (inode, 0); set_device_ro(dev, 0); } diff -u --recursive --new-file v2.3.43/linux/drivers/block/rd.c linux/drivers/block/rd.c --- v2.3.43/linux/drivers/block/rd.c Thu Feb 10 17:11:07 2000 +++ linux/drivers/block/rd.c Thu Feb 10 19:09:10 2000 @@ -362,6 +362,7 @@ if (DEVICE_NR(inode->i_rdev) >= NUM_RAMDISKS) return -ENXIO; + filp->f_op = &def_blk_fops; MOD_INC_USE_COUNT; return 0; @@ -560,7 +561,7 @@ */ static void __init rd_load_image(kdev_t device, int offset, int unit) { - struct inode inode, out_inode; + struct inode *inode, *out_inode; struct file infile, outfile; struct dentry in_dentry, out_dentry; mm_segment_t fs; @@ -574,25 +575,27 @@ ram_device = MKDEV(MAJOR_NR, unit); memset(&infile, 0, sizeof(infile)); - memset(&inode, 0, sizeof(inode)); memset(&in_dentry, 0, sizeof(in_dentry)); - inode.i_rdev = device; - init_waitqueue_head(&inode.i_wait); + inode = get_empty_inode(); + inode->i_rdev = device; + inode->i_bdev = bdget(kdev_t_to_nr(device)); infile.f_mode = 1; /* read only */ infile.f_dentry = &in_dentry; - in_dentry.d_inode = &inode; + in_dentry.d_inode = inode; memset(&outfile, 0, sizeof(outfile)); - memset(&out_inode, 0, sizeof(out_inode)); memset(&out_dentry, 0, sizeof(out_dentry)); - out_inode.i_rdev = ram_device; - init_waitqueue_head(&out_inode.i_wait); + out_inode = get_empty_inode(); + out_inode->i_rdev = ram_device; + out_inode->i_bdev = bdget(kdev_t_to_nr(ram_device)); outfile.f_mode = 3; /* read/write */ outfile.f_dentry = &out_dentry; - out_dentry.d_inode = &out_inode; + out_dentry.d_inode = out_inode; - if (blkdev_open(&inode, &infile) != 0) return; - if (blkdev_open(&out_inode, &outfile) != 0) return; + if (blkdev_open(inode, &infile) != 0) + goto free_inodes; + if (blkdev_open(out_inode, &outfile) != 0) + goto free_inodes; fs = get_fs(); set_fs(KERNEL_DS); @@ -655,10 +658,10 @@ rotate = 0; invalidate_buffers(device); if (infile.f_op->release) - infile.f_op->release(&inode, &infile); + infile.f_op->release(inode, &infile); printk("Please insert disk #%d and press ENTER\n", i/devblocks+1); wait_for_keypress(); - if (blkdev_open(&inode, &infile) != 0) { + if (blkdev_open(inode, &infile) != 0) { printk("Error opening disk.\n"); goto done; } @@ -681,8 +684,11 @@ done: if (infile.f_op->release) - infile.f_op->release(&inode, &infile); + infile.f_op->release(inode, &infile); set_fs(fs); +free_inodes: + iput(inode); + iput(out_inode); } diff -u --recursive --new-file v2.3.43/linux/drivers/char/agp/agp.h linux/drivers/char/agp/agp.h --- v2.3.43/linux/drivers/char/agp/agp.h Thu Feb 10 17:11:07 2000 +++ linux/drivers/char/agp/agp.h Sat Feb 12 09:55:02 2000 @@ -27,8 +27,6 @@ #ifndef _AGP_BACKEND_PRIV_H #define _AGP_BACKEND_PRIV_H 1 -#include - enum aper_size_type { U8_APER_SIZE, U16_APER_SIZE, diff -u --recursive --new-file v2.3.43/linux/drivers/char/keyboard.c linux/drivers/char/keyboard.c --- v2.3.43/linux/drivers/char/keyboard.c Thu Feb 10 17:11:08 2000 +++ linux/drivers/char/keyboard.c Thu Feb 10 17:07:26 2000 @@ -909,6 +909,7 @@ } } +EXPORT_SYMBOL(keyboard_tasklet); DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh, 0); int __init kbd_init(void) diff -u --recursive --new-file v2.3.43/linux/drivers/char/lp.c linux/drivers/char/lp.c --- v2.3.43/linux/drivers/char/lp.c Thu Feb 10 17:11:08 2000 +++ linux/drivers/char/lp.c Fri Feb 11 08:28:41 2000 @@ -409,11 +409,6 @@ return retv; } -static long long lp_lseek(struct file * file, long long offset, int origin) -{ - return -ESPIPE; -} - #ifdef CONFIG_PARPORT_1284 /* Status readback conforming to ieee1284 */ diff -u --recursive --new-file v2.3.43/linux/drivers/char/mem.c linux/drivers/char/mem.c --- v2.3.43/linux/drivers/char/mem.c Thu Feb 10 17:11:08 2000 +++ linux/drivers/char/mem.c Fri Feb 11 11:19:59 2000 @@ -58,9 +58,6 @@ #if defined(CONFIG_ADB) extern void adbdev_init(void); #endif -#ifdef CONFIG_USB -extern void usb_init(void); -#endif #ifdef CONFIG_PHONE extern void telephony_init(void); #endif @@ -248,14 +245,16 @@ if (p < PAGE_SIZE && read > 0) { size_t tmp = PAGE_SIZE - p; if (tmp > read) tmp = read; - clear_user(buf, tmp); + if (clear_user(buf, tmp)) + return -EFAULT; buf += tmp; p += tmp; read -= tmp; count -= tmp; } #endif - copy_to_user(buf, (char *)p, read); + if (copy_to_user(buf, (char *)p, read)) + return -EFAULT; p += read; buf += read; count -= read; @@ -581,9 +580,6 @@ printk("unable to get major %d for memory devs\n", MEM_MAJOR); rand_initialize(); raw_init(); -#ifdef CONFIG_USB - usb_init(); -#endif #ifdef CONFIG_I2C i2c_init_all(); #endif diff -u --recursive --new-file v2.3.43/linux/drivers/char/pc_keyb.c linux/drivers/char/pc_keyb.c --- v2.3.43/linux/drivers/char/pc_keyb.c Thu Feb 10 17:11:08 2000 +++ linux/drivers/char/pc_keyb.c Thu Feb 10 17:07:26 2000 @@ -413,9 +413,12 @@ #endif } +static unsigned char kbd_exists = 1; + static inline void handle_keyboard_event(unsigned char scancode) { #ifdef CONFIG_VT + kbd_exists = 1; if (do_acknowledge(scancode)) handle_scancode(scancode, !(scancode & 0x80)); #endif @@ -512,8 +515,10 @@ void pckbd_leds(unsigned char leds) { - if (!send_data(KBD_CMD_SET_LEDS) || !send_data(leds)) - send_data(KBD_CMD_ENABLE); /* re-enable kbd if any errors */ + if (kbd_exists && (!send_data(KBD_CMD_SET_LEDS) || !send_data(leds))) { + send_data(KBD_CMD_ENABLE); /* re-enable kbd if any errors */ + kbd_exists = 0; + } } /* diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c505.c linux/drivers/net/3c505.c --- v2.3.43/linux/drivers/net/3c505.c Wed Aug 18 11:36:41 1999 +++ linux/drivers/net/3c505.c Fri Feb 11 08:25:33 2000 @@ -705,7 +705,7 @@ outb_control(adapter->hcr_val & ~(DMAE | TCEN | DIR), dev); if (adapter->current_dma.direction) { - dev_kfree_skb(adapter->current_dma.skb); + dev_kfree_skb_irq(adapter->current_dma.skb); } else { struct sk_buff *skb = adapter->current_dma.skb; if (skb) { diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c507.c linux/drivers/net/3c507.c --- v2.3.43/linux/drivers/net/3c507.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/3c507.c Fri Feb 11 13:19:52 2000 @@ -199,6 +199,8 @@ #define RX_BUF_SIZE (1518+14+18) /* packet+header+RBD */ #define RX_BUF_END (dev->mem_end - dev->mem_start) +#define TX_TIMEOUT 5 + /* That's it: only 86 bytes to set up the beast, including every extra command available. The 170 byte buffer at DUMP_DATA is shared between the @@ -287,6 +289,7 @@ static void el16_rx(struct net_device *dev); static int el16_close(struct net_device *dev); static struct net_device_stats *el16_get_stats(struct net_device *dev); +static void el16_tx_timeout (struct net_device *dev); static void hardware_send_packet(struct net_device *dev, void *buf, short length); static void init_82586_mem(struct net_device *dev); @@ -325,7 +328,7 @@ return ENODEV; } -int __init el16_probe1(struct net_device *dev, int ioaddr) +static int __init el16_probe1(struct net_device *dev, int ioaddr) { static unsigned char init_ID_done = 0, version_printed = 0; int i, irq, irqval; @@ -423,6 +426,8 @@ dev->stop = el16_close; dev->hard_start_xmit = el16_send_packet; dev->get_stats = el16_get_stats; + dev->tx_timeout = el16_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; ether_setup(dev); /* Generic ethernet behaviour */ @@ -443,62 +448,59 @@ return 0; } -static int el16_send_packet(struct sk_buff *skb, struct net_device *dev) + +static void el16_tx_timeout (struct net_device *dev) { - struct net_local *lp = (struct net_local *)dev->priv; + struct net_local *lp = (struct net_local *) dev->priv; int ioaddr = dev->base_addr; unsigned long shmem = dev->mem_start; - unsigned long flags; -#if 0 /* LINK_STATE_XOFF is never set when we reach here */ - if (test_bit(LINK_STATE_XOFF, &dev->flags)) - { - /* If we get here, some higher level has decided we are broken. - There should really be a "kick me" function call instead. */ - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; + if (net_debug > 1) + printk ("%s: transmit timed out, %s? ", dev->name, + isa_readw (shmem + iSCB_STATUS) & 0x8000 ? "IRQ conflict" : + "network cable problem"); + /* Try to restart the adaptor. */ + if (lp->last_restart == lp->stats.tx_packets) { if (net_debug > 1) - printk("%s: transmit timed out, %s? ", dev->name, - isa_readw(shmem+iSCB_STATUS) & 0x8000 ? "IRQ conflict" : - "network cable problem"); - /* Try to restart the adaptor. */ - if (lp->last_restart == lp->stats.tx_packets) { - if (net_debug > 1) printk("Resetting board.\n"); - /* Completely reset the adaptor. */ - init_82586_mem(dev); - } else { - /* Issue the channel attention signal and hope it "gets better". */ - if (net_debug > 1) printk("Kicking board.\n"); - isa_writew(0xf000|CUC_START|RX_START,shmem+iSCB_CMD); - outb(0, ioaddr + SIGNAL_CA); /* Issue channel-attn. */ - lp->last_restart = lp->stats.tx_packets; - } - netif_start_queue(dev); - dev->trans_start = jiffies; + printk ("Resetting board.\n"); + /* Completely reset the adaptor. */ + init_82586_mem (dev); + } else { + /* Issue the channel attention signal and hope it "gets better". */ + if (net_debug > 1) + printk ("Kicking board.\n"); + isa_writew (0xf000 | CUC_START | RX_START, shmem + iSCB_CMD); + outb (0, ioaddr + SIGNAL_CA); /* Issue channel-attn. */ + lp->last_restart = lp->stats.tx_packets; } -#endif + dev->trans_start = jiffies; + netif_wake_queue (dev); +} - { - short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - unsigned char *buf = skb->data; - spin_lock_irqsave(&lp->lock, flags); +static int el16_send_packet (struct sk_buff *skb, struct net_device *dev) +{ + struct net_local *lp = (struct net_local *) dev->priv; + int ioaddr = dev->base_addr; + unsigned long flags; + short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + unsigned char *buf = skb->data; - lp->stats.tx_bytes+=length; - /* Disable the 82586's input to the interrupt line. */ - outb(0x80, ioaddr + MISC_CTRL); + netif_stop_queue (dev); - hardware_send_packet(dev, buf, length); + spin_lock_irqsave (&lp->lock, flags); - dev->trans_start = jiffies; - /* Enable the 82586 interrupt input. */ - outb(0x84, ioaddr + MISC_CTRL); + lp->stats.tx_bytes += length; + /* Disable the 82586's input to the interrupt line. */ + outb (0x80, ioaddr + MISC_CTRL); - spin_unlock_irqrestore(&lp->lock, flags); + hardware_send_packet (dev, buf, length); - netif_stop_queue(dev); - } + dev->trans_start = jiffies; + /* Enable the 82586 interrupt input. */ + outb (0x84, ioaddr + MISC_CTRL); + + spin_unlock_irqrestore (&lp->lock, flags); dev_kfree_skb (skb); @@ -788,7 +790,7 @@ } if (lp->tx_head != lp->tx_reap) - netif_start_queue(dev); + netif_wake_queue(dev); } static void el16_rx(struct net_device *dev) diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c509.c linux/drivers/net/3c509.c --- v2.3.43/linux/drivers/net/3c509.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/3c509.c Fri Feb 11 08:25:33 2000 @@ -412,6 +412,9 @@ } } + if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509")) + return -EBUSY; + /* Set the adaptor tag so that the next card can be found. */ outb(0xd0 + ++current_tag, id_port); @@ -419,22 +422,26 @@ outb((ioaddr >> 4) | 0xe0, id_port); EL3WINDOW(0); - if (inw(ioaddr) != 0x6d50) + if (inw(ioaddr) != 0x6d50) { + release_region(ioaddr, EL3_IO_EXTENT); return -ENODEV; + } /* Free the interrupt so that some other card can use it. */ outw(0x0f00, ioaddr + WN0_IRQ); found: if (dev == NULL) { dev = init_etherdev(dev, sizeof(struct el3_private)); + if (dev == NULL) { + release_region(ioaddr, EL3_IO_EXTENT); + return -ENOMEM; + } } memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr)); dev->base_addr = ioaddr; dev->irq = irq; dev->if_port = (dev->mem_start & 0x1f) ? dev->mem_start & 3 : if_port; - request_region(dev->base_addr, EL3_IO_EXTENT, "3c509"); - { const char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"}; printk("%s: 3c509 at %#3.3lx, %s port, address ", @@ -599,7 +606,7 @@ /* Issue TX_RESET and TX_START commands. */ outw(TxReset, ioaddr + EL3_CMD); outw(TxEnable, ioaddr + EL3_CMD); - netif_start_queue(dev); + netif_wake_queue(dev); } @@ -609,6 +616,8 @@ struct el3_private *lp = (struct el3_private *)dev->priv; int ioaddr = dev->base_addr; unsigned long flags; + + netif_stop_queue (dev); lp->stats.tx_bytes += skb->len; diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c515.c linux/drivers/net/3c515.c --- v2.3.43/linux/drivers/net/3c515.c Tue Nov 23 22:42:20 1999 +++ linux/drivers/net/3c515.c Fri Feb 11 13:21:09 2000 @@ -10,17 +10,22 @@ The author may be reached as becker@CESDIS.gsfc.nasa.gov, or C/O Center of Excellence in Space Data and Information Sciences Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771 + + Cleaned up for 2.3.x/softnet by Jeff Garzik and Alan Cox. */ -static char *version = "3c515.c:v0.99 4/7/98 becker@cesdis.gsfc.nasa.gov\n"; +static char *version = "3c515.c:v0.99-sn 2000/02/12 becker@cesdis.gsfc.nasa.gov and others\n"; + #define CORKSCREW 1 /* "Knobs" that adjust features and parameters. */ /* Set the copy breakpoint for the copy-only-tiny-frames scheme. Setting to > 1512 effectively disables this feature. */ static const int rx_copybreak = 200; + /* Allow setting MTU to a larger size, bypassing the normal ethernet setup. */ static const int mtu = 1500; + /* Maximum events (Rx packets, etc.) to handle at each interrupt. */ static int max_interrupt_work = 20; @@ -37,7 +42,7 @@ /* Keep the ring sizes a power of two for efficiency. */ #define TX_RING_SIZE 16 #define RX_RING_SIZE 16 -#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ +#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer. */ #include #include @@ -65,15 +70,10 @@ /* Kernel version compatibility functions. */ #define RUN_AT(x) (jiffies + (x)) -#define DEV_ALLOC_SKB(len) dev_alloc_skb(len + 2) -#define FREE_IRQ(irqnum, dev) free_irq(irqnum, dev) #define REQUEST_IRQ(i,h,f,n, instance) request_irq(i,h,f,n, instance) #define IRQ(irq, dev_id, pt_regs) (irq, dev_id, pt_regs) -#if (LINUX_VERSION_CODE < 0x20123) -#define test_and_set_bit(val, addr) set_bit(val, addr) -#elif defined(MODULE) MODULE_AUTHOR("Donald Becker "); MODULE_DESCRIPTION("3Com 3c515 Corkscrew driver"); MODULE_PARM(debug, "i"); @@ -81,7 +81,6 @@ MODULE_PARM(full_duplex, "1-" __MODULE_STRING(8) "i"); MODULE_PARM(rx_copybreak, "i"); MODULE_PARM(max_interrupt_work, "i"); -#endif /* "Knobs" for adjusting internal parameters. */ /* Put out somewhat more debugging messages. (0 - no msg, 1 minimal msgs). */ @@ -102,15 +101,10 @@ */ #define CORKSCREW_TOTAL_SIZE 0x20 -#ifdef HAVE_DEVLIST -struct netdev_entry tc515_drv = -{"3c515", tc515_probe, CORKSCREW_TOTAL_SIZE, NULL}; -#endif - #ifdef DRIVER_DEBUG -int vortex_debug = DRIVER_DEBUG; +int corkscrew_debug = DRIVER_DEBUG; #else -int vortex_debug = 1; +int corkscrew_debug = 1; #endif #define CORKSCREW_ID 10 @@ -149,8 +143,8 @@ IIIC. Synchronization The driver runs as two independent, single-threaded flows of control. One -is the send-packet routine, which enforces single-threaded use by the -dev->tbusy flag. The other thread is the interrupt handler, which is single +is the send-packet routine, which enforces single-threaded use by the netif +layer. The other thread is the interrupt handler, which is single threaded by the hardware and other software. IV. Notes @@ -184,87 +178,98 @@ can handle FDDI length frames (~4500 octets) and now parameters count 32-bit 'Dwords' rather than octets. */ -enum vortex_cmd { - TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11, - RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, - UpStall = 6<<11, UpUnstall = (6<<11)+1, - DownStall = (6<<11)+2, DownUnstall = (6<<11)+3, - RxDiscard = 8<<11, TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11, - FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11, - SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11, - SetTxThreshold = 18<<11, SetTxStart = 19<<11, - StartDMAUp = 20<<11, StartDMADown = (20<<11)+1, StatsEnable = 21<<11, - StatsDisable = 22<<11, StopCoax = 23<<11,}; +enum corkscrew_cmd { + TotalReset = 0 << 11, SelectWindow = 1 << 11, StartCoax = 2 << 11, + RxDisable = 3 << 11, RxEnable = 4 << 11, RxReset = 5 << 11, + UpStall = 6 << 11, UpUnstall = (6 << 11) + 1, + DownStall = (6 << 11) + 2, DownUnstall = (6 << 11) + 3, + RxDiscard = 8 << 11, TxEnable = 9 << 11, TxDisable = + 10 << 11, TxReset = 11 << 11, + FakeIntr = 12 << 11, AckIntr = 13 << 11, SetIntrEnb = 14 << 11, + SetStatusEnb = 15 << 11, SetRxFilter = 16 << 11, SetRxThreshold = + 17 << 11, + SetTxThreshold = 18 << 11, SetTxStart = 19 << 11, + StartDMAUp = 20 << 11, StartDMADown = (20 << 11) + 1, StatsEnable = + 21 << 11, + StatsDisable = 22 << 11, StopCoax = 23 << 11, +}; /* The SetRxFilter command accepts the following classes: */ enum RxFilter { - RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 }; + RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 +}; /* Bits in the general status register. */ -enum vortex_status { +enum corkscrew_status { IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004, TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020, IntReq = 0x0040, StatsFull = 0x0080, - DMADone = 1<<8, DownComplete = 1<<9, UpComplete = 1<<10, - DMAInProgress = 1<<11, /* DMA controller is still busy.*/ - CmdInProgress = 1<<12, /* EL3_CMD is still busy.*/ + DMADone = 1 << 8, DownComplete = 1 << 9, UpComplete = 1 << 10, + DMAInProgress = 1 << 11, /* DMA controller is still busy. */ + CmdInProgress = 1 << 12, /* EL3_CMD is still busy. */ }; /* Register window 1 offsets, the window used in normal operation. On the Corkscrew this window is always mapped at offsets 0x10-0x1f. */ enum Window1 { - TX_FIFO = 0x10, RX_FIFO = 0x10, RxErrors = 0x14, - RxStatus = 0x18, Timer=0x1A, TxStatus = 0x1B, - TxFree = 0x1C, /* Remaining free bytes in Tx buffer. */ + TX_FIFO = 0x10, RX_FIFO = 0x10, RxErrors = 0x14, + RxStatus = 0x18, Timer = 0x1A, TxStatus = 0x1B, + TxFree = 0x1C, /* Remaining free bytes in Tx buffer. */ }; enum Window0 { - Wn0IRQ = 0x08, + Wn0IRQ = 0x08, #if defined(CORKSCREW) - Wn0EepromCmd = 0x200A, /* Corkscrew EEPROM command register. */ - Wn0EepromData = 0x200C, /* Corkscrew EEPROM results register. */ + Wn0EepromCmd = 0x200A, /* Corkscrew EEPROM command register. */ + Wn0EepromData = 0x200C, /* Corkscrew EEPROM results register. */ #else - Wn0EepromCmd = 10, /* Window 0: EEPROM command register. */ - Wn0EepromData = 12, /* Window 0: EEPROM results register. */ + Wn0EepromCmd = 10, /* Window 0: EEPROM command register. */ + Wn0EepromData = 12, /* Window 0: EEPROM results register. */ #endif }; enum Win0_EEPROM_bits { EEPROM_Read = 0x80, EEPROM_WRITE = 0x40, EEPROM_ERASE = 0xC0, - EEPROM_EWENB = 0x30, /* Enable erasing/writing for 10 msec. */ - EEPROM_EWDIS = 0x00, /* Disable EWENB before 10 msec timeout. */ + EEPROM_EWENB = 0x30, /* Enable erasing/writing for 10 msec. */ + EEPROM_EWDIS = 0x00, /* Disable EWENB before 10 msec timeout. */ }; + /* EEPROM locations. */ enum eeprom_offset { - PhysAddr01=0, PhysAddr23=1, PhysAddr45=2, ModelID=3, - EtherLink3ID=7, }; + PhysAddr01 = 0, PhysAddr23 = 1, PhysAddr45 = 2, ModelID = 3, + EtherLink3ID = 7, +}; enum Window3 { /* Window 3: MAC/config bits. */ - Wn3_Config=0, Wn3_MAC_Ctrl=6, Wn3_Options=8, + Wn3_Config = 0, Wn3_MAC_Ctrl = 6, Wn3_Options = 8, }; union wn3_config { int i; struct w3_config_fields { - unsigned int ram_size:3, ram_width:1, ram_speed:2, rom_size:2; + unsigned int ram_size:3, ram_width:1, ram_speed:2, + rom_size:2; int pad8:8; - unsigned int ram_split:2, pad18:2, xcvr:3, pad21:1, autoselect:1; + unsigned int ram_split:2, pad18:2, xcvr:3, pad21:1, + autoselect:1; int pad24:7; } u; }; enum Window4 { - Wn4_NetDiag = 6, Wn4_Media = 10, /* Window 4: Xcvr/media bits. */ + Wn4_NetDiag = 6, Wn4_Media = 10, /* Window 4: Xcvr/media bits. */ }; enum Win4_Media_bits { - Media_SQE = 0x0008, /* Enable SQE error counting for AUI. */ + Media_SQE = 0x0008, /* Enable SQE error counting for AUI. */ Media_10TP = 0x00C0, /* Enable link beat and jabber for 10baseT. */ - Media_Lnk = 0x0080, /* Enable just link beat for 100TX/100FX. */ + Media_Lnk = 0x0080, /* Enable just link beat for 100TX/100FX. */ Media_LnkBeat = 0x0800, }; -enum Window7 { /* Window 7: Bus Master control. */ +enum Window7 { /* Window 7: Bus Master control. */ Wn7_MasterAddr = 0, Wn7_MasterLen = 6, Wn7_MasterStatus = 12, }; + /* Boomerang-style bus master control registers. Note ISA aliases! */ enum MasterCtrl { - PktStatus = 0x400, DownListPtr = 0x404, FragAddr = 0x408, FragLen = 0x40c, + PktStatus = 0x400, DownListPtr = 0x404, FragAddr = 0x408, FragLen = + 0x40c, TxFreeThreshold = 0x40f, UpPktStatus = 0x410, UpListPtr = 0x418, }; @@ -277,9 +282,10 @@ u32 addr; s32 length; }; + /* Values for the Rx status entry. */ enum rx_desc_status { - RxDComplete=0x00008000, RxDError=0x4000, + RxDComplete = 0x00008000, RxDError = 0x4000, /* See boomerang_rx() for actual error bits */ }; @@ -290,111 +296,112 @@ s32 length; }; -struct vortex_private { - char devname[8]; /* "ethN" string, also for kernel debug. */ +struct corkscrew_private { + char devname[8]; /* "ethN" string, also for kernel debug. */ const char *product_name; struct net_device *next_module; /* The Rx and Tx rings are here to keep them quad-word-aligned. */ struct boom_rx_desc rx_ring[RX_RING_SIZE]; struct boom_tx_desc tx_ring[TX_RING_SIZE]; /* The addresses of transmit- and receive-in-place skbuffs. */ - struct sk_buff* rx_skbuff[RX_RING_SIZE]; - struct sk_buff* tx_skbuff[TX_RING_SIZE]; - unsigned int cur_rx, cur_tx; /* The next free ring entry */ - unsigned int dirty_rx, dirty_tx; /* The ring entries to be free()ed. */ + struct sk_buff *rx_skbuff[RX_RING_SIZE]; + struct sk_buff *tx_skbuff[TX_RING_SIZE]; + unsigned int cur_rx, cur_tx; /* The next free ring entry */ + unsigned int dirty_rx, dirty_tx;/* The ring entries to be free()ed. */ struct enet_statistics stats; - struct sk_buff *tx_skb; /* Packet being eaten by bus master ctrl. */ + struct sk_buff *tx_skb; /* Packet being eaten by bus master ctrl. */ struct timer_list timer; /* Media selection timer. */ - int capabilities; /* Adapter capabilities word. */ - int options; /* User-settable misc. driver options. */ + int capabilities ; /* Adapter capabilities word. */ + int options; /* User-settable misc. driver options. */ int last_rx_packets; /* For media autoselection. */ unsigned int available_media:8, /* From Wn3_Options */ - media_override:3, /* Passed-in media type. */ - default_media:3, /* Read from the EEPROM. */ - full_duplex:1, autoselect:1, - bus_master:1, /* Vortex can only do a fragment bus-m. */ - full_bus_master_tx:1, full_bus_master_rx:1, /* Boomerang */ - tx_full:1; + media_override:3, /* Passed-in media type. */ + default_media:3, /* Read from the EEPROM. */ + full_duplex:1, autoselect:1, bus_master:1, /* Vortex can only do a fragment bus-m. */ + full_bus_master_tx:1, full_bus_master_rx:1, /* Boomerang */ + tx_full:1; }; /* The action to take with a media selection timer tick. Note that we deviate from the 3Com order by checking 10base2 before AUI. */ enum xcvr_types { - XCVR_10baseT=0, XCVR_AUI, XCVR_10baseTOnly, XCVR_10base2, XCVR_100baseTx, - XCVR_100baseFx, XCVR_MII=6, XCVR_Default=8, + XCVR_10baseT = + 0, XCVR_AUI, XCVR_10baseTOnly, XCVR_10base2, XCVR_100baseTx, + XCVR_100baseFx, XCVR_MII = 6, XCVR_Default = 8, }; static struct media_table { - char *name; - unsigned int media_bits:16, /* Bits to set in Wn4_Media register. */ - mask:8, /* The transceiver-present bit in Wn3_Config.*/ - next:8; /* The media type to try next. */ - short wait; /* Time before we check media status. */ -} media_tbl[] = { - { "10baseT", Media_10TP,0x08, XCVR_10base2, (14*HZ)/10}, - { "10Mbs AUI", Media_SQE, 0x20, XCVR_Default, (1*HZ)/10}, - { "undefined", 0, 0x80, XCVR_10baseT, 10000}, - { "10base2", 0, 0x10, XCVR_AUI, (1*HZ)/10}, - { "100baseTX", Media_Lnk, 0x02, XCVR_100baseFx, (14*HZ)/10}, - { "100baseFX", Media_Lnk, 0x04, XCVR_MII, (14*HZ)/10}, - { "MII", 0, 0x40, XCVR_10baseT, 3*HZ }, - { "undefined", 0, 0x01, XCVR_10baseT, 10000}, - { "Default", 0, 0xFF, XCVR_10baseT, 10000}, + char *name; + unsigned int media_bits:16, /* Bits to set in Wn4_Media register. */ + mask:8, /* The transceiver-present bit in Wn3_Config. */ + next:8; /* The media type to try next. */ + short wait; /* Time before we check media status. */ +} media_tbl[] = { + { "10baseT", Media_10TP, 0x08, XCVR_10base2, (14 * HZ) / 10 }, + { "10Mbs AUI", Media_SQE, 0x20, XCVR_Default, (1 * HZ) / 10}, + { "undefined", 0, 0x80, XCVR_10baseT, 10000}, + { "10base2", 0, 0x10, XCVR_AUI, (1 * HZ) / 10}, + { "100baseTX", Media_Lnk, 0x02, XCVR_100baseFx, (14 * HZ) / 10}, + { "100baseFX", Media_Lnk, 0x04, XCVR_MII, (14 * HZ) / 10}, + { "MII", 0, 0x40, XCVR_10baseT, 3 * HZ}, + { "undefined", 0, 0x01, XCVR_10baseT, 10000}, + { "Default", 0, 0xFF, XCVR_10baseT, 10000}, }; -static int vortex_scan(struct net_device *dev); -static struct net_device *vortex_found_device(struct net_device *dev, int ioaddr, - int irq, int product_index, - int options); -static int vortex_probe1(struct net_device *dev); -static int vortex_open(struct net_device *dev); -static void vortex_timer(unsigned long arg); -static int vortex_start_xmit(struct sk_buff *skb, struct net_device *dev); -static int vortex_rx(struct net_device *dev); +static int corkscrew_scan(struct net_device *dev); +static struct net_device *corkscrew_found_device(struct net_device *dev, + int ioaddr, int irq, + int product_index, + int options); +static int corkscrew_probe1(struct net_device *dev); +static int corkscrew_open(struct net_device *dev); +static void corkscrew_timer(unsigned long arg); +static int corkscrew_start_xmit(struct sk_buff *skb, + struct net_device *dev); +static int corkscrew_rx(struct net_device *dev); +static void corkscrew_timeout(struct net_device *dev); static int boomerang_rx(struct net_device *dev); -static void vortex_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs); -static int vortex_close(struct net_device *dev); +static void corkscrew_interrupt(int irq, void *dev_id, + struct pt_regs *regs); +static int corkscrew_close(struct net_device *dev); static void update_stats(int addr, struct net_device *dev); -static struct enet_statistics *vortex_get_stats(struct net_device *dev); +static struct enet_statistics *corkscrew_get_stats(struct net_device *dev); static void set_rx_mode(struct net_device *dev); -/* Unlike the other PCI cards the 59x cards don't need a large contiguous - memory region, so making the driver a loadable module is feasible. - +/* Unfortunately maximizing the shared code between the integrated and module version of the driver results in a complicated set of initialization procedures. init_module() -- modules / tc59x_init() -- built-in - The wrappers for vortex_scan() - vortex_scan() The common routine that scans for PCI and EISA cards - vortex_found_device() Allocate a device structure when we find a card. + The wrappers for corkscrew_scan() + corkscrew_scan() The common routine that scans for PCI and EISA cards + corkscrew_found_device() Allocate a device structure when we find a card. Different versions exist for modules and built-in. - vortex_probe1() Fill in the device structure -- this is separated + corkscrew_probe1() Fill in the device structure -- this is separated so that the modules code can put it in dev->init. */ /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */ /* Note: this is the only limit on the number of cards supported!! */ -static int options[8] = { -1, -1, -1, -1, -1, -1, -1, -1,}; +static int options[8] = { -1, -1, -1, -1, -1, -1, -1, -1, }; #ifdef MODULE static int debug = -1; /* A list of all installed Vortex devices, for removing the driver module. */ -static struct net_device *root_vortex_dev = NULL; +static struct net_device *root_corkscrew_dev = NULL; -int -init_module(void) +int init_module(void) { int cards_found; if (debug >= 0) - vortex_debug = debug; - if (vortex_debug) + corkscrew_debug = debug; + if (corkscrew_debug) printk(version); - root_vortex_dev = NULL; - cards_found = vortex_scan(0); + root_corkscrew_dev = NULL; + cards_found = corkscrew_scan(0); return cards_found ? 0 : -ENODEV; } @@ -403,80 +410,86 @@ { int cards_found = 0; - cards_found = vortex_scan(dev); + cards_found = corkscrew_scan(dev); - if (vortex_debug > 0 && cards_found) + if (corkscrew_debug > 0 && cards_found) printk(version); return cards_found ? 0 : -ENODEV; } -#endif /* not MODULE */ +#endif /* not MODULE */ -static int vortex_scan(struct net_device *dev) +static int corkscrew_scan(struct net_device *dev) { int cards_found = 0; static int ioaddr = 0x100; /* Check all locations on the ISA bus -- evil! */ for (; ioaddr < 0x400; ioaddr += 0x20) { - int irq; - if (check_region(ioaddr, CORKSCREW_TOTAL_SIZE)) - continue; - /* Check the resource configuration for a matching ioaddr. */ - if ((inw(ioaddr + 0x2002) & 0x1f0) != (ioaddr & 0x1f0)) - continue; - /* Verify by reading the device ID from the EEPROM. */ - { - int timer; - outw(EEPROM_Read + 7, ioaddr + Wn0EepromCmd); - /* Pause for at least 162 us. for the read to take place. */ - for (timer = 4; timer >= 0; timer--) { - udelay(162); - if ((inw(ioaddr + Wn0EepromCmd) & 0x0200) == 0) - break; + int irq; + if (check_region(ioaddr, CORKSCREW_TOTAL_SIZE)) + continue; + /* Check the resource configuration for a matching ioaddr. */ + if ((inw(ioaddr + 0x2002) & 0x1f0) != (ioaddr & 0x1f0)) + continue; + /* Verify by reading the device ID from the EEPROM. */ + { + int timer; + outw(EEPROM_Read + 7, ioaddr + Wn0EepromCmd); + /* Pause for at least 162 us. for the read to take place. */ + for (timer = 4; timer >= 0; timer--) { + udelay(162); + if ((inw(ioaddr + Wn0EepromCmd) & 0x0200) + == 0) + break; + } + if (inw(ioaddr + Wn0EepromData) != 0x6d50) + continue; } - if (inw(ioaddr + Wn0EepromData) != 0x6d50) - continue; - } - printk("3c515 Resource configuraiton register %#4.4x, DCR %4.4x.\n", - inl(ioaddr + 0x2002), inw(ioaddr + 0x2000)); - irq = inw(ioaddr + 0x2002) & 15; - vortex_found_device(dev, ioaddr, irq, CORKSCREW_ID, dev && dev->mem_start - ? dev->mem_start : options[cards_found]); - dev = 0; - cards_found++; + printk(KERN_INFO "3c515 Resource configuraiton register %#4.4x, DCR %4.4x.\n", + inl(ioaddr + 0x2002), inw(ioaddr + 0x2000)); + irq = inw(ioaddr + 0x2002) & 15; + corkscrew_found_device(dev, ioaddr, irq, CORKSCREW_ID, dev + && dev->mem_start ? dev-> + mem_start : options[cards_found]); + dev = 0; + cards_found++; } - if (vortex_debug) - printk("%d 3c515 cards found.\n", cards_found); + if (corkscrew_debug) + printk(KERN_INFO "%d 3c515 cards found.\n", cards_found); return cards_found; } -static struct net_device *vortex_found_device(struct net_device *dev, int ioaddr, - int irq, int product_index, - int options) +static struct net_device *corkscrew_found_device(struct net_device *dev, + int ioaddr, int irq, + int product_index, + int options) { - struct vortex_private *vp; + struct corkscrew_private *vp; #ifdef MODULE /* Allocate and fill new device structure. */ int dev_size = sizeof(struct net_device) + - sizeof(struct vortex_private) + 15; /* Pad for alignment */ - + sizeof(struct corkscrew_private) + 15; /* Pad for alignment */ + dev = (struct net_device *) kmalloc(dev_size, GFP_KERNEL); memset(dev, 0, dev_size); /* Align the Rx and Tx ring entries. */ - dev->priv = (void *)(((long)dev + sizeof(struct net_device) + 15) & ~15); - vp = (struct vortex_private *)dev->priv; - dev->name = vp->devname; /* An empty string. */ + dev->priv = + (void *) (((long) dev + sizeof(struct net_device) + 15) & ~15); + vp = (struct corkscrew_private *) dev->priv; + dev->name = vp->devname; /* An empty string. */ dev->base_addr = ioaddr; dev->irq = irq; - dev->dma = (product_index == CORKSCREW_ID ? inw(ioaddr + 0x2000) & 7 : 0); - dev->init = vortex_probe1; + dev->dma = + (product_index == CORKSCREW_ID ? inw(ioaddr + 0x2000) & 7 : 0); + dev->init = corkscrew_probe1; vp->product_name = "3c515"; vp->options = options; if (options >= 0) { - vp->media_override = ((options & 7) == 2) ? 0 : options & 7; + vp->media_override = + ((options & 7) == 2) ? 0 : options & 7; vp->full_duplex = (options & 8) ? 1 : 0; vp->bus_master = (options & 16) ? 1 : 0; } else { @@ -485,25 +498,28 @@ vp->bus_master = 0; } ether_setup(dev); - vp->next_module = root_vortex_dev; - root_vortex_dev = dev; + vp->next_module = root_corkscrew_dev; + root_corkscrew_dev = dev; if (register_netdev(dev) != 0) return 0; -#else /* not a MODULE */ +#else /* not a MODULE */ if (dev) { /* Caution: quad-word alignment required for rings! */ - dev->priv = kmalloc(sizeof (struct vortex_private), GFP_KERNEL); - memset(dev->priv, 0, sizeof (struct vortex_private)); + dev->priv = + kmalloc(sizeof(struct corkscrew_private), GFP_KERNEL); + memset(dev->priv, 0, sizeof(struct corkscrew_private)); } - dev = init_etherdev(dev, sizeof(struct vortex_private)); + dev = init_etherdev(dev, sizeof(struct corkscrew_private)); dev->base_addr = ioaddr; dev->irq = irq; - dev->dma = (product_index == CORKSCREW_ID ? inw(ioaddr + 0x2000) & 7 : 0); - vp = (struct vortex_private *)dev->priv; + dev->dma = + (product_index == CORKSCREW_ID ? inw(ioaddr + 0x2000) & 7 : 0); + vp = (struct corkscrew_private *) dev->priv; vp->product_name = "3c515"; vp->options = options; if (options >= 0) { - vp->media_override = ((options & 7) == 2) ? 0 : options & 7; + vp->media_override = + ((options & 7) == 2) ? 0 : options & 7; vp->full_duplex = (options & 8) ? 1 : 0; vp->bus_master = (options & 16) ? 1 : 0; } else { @@ -512,25 +528,26 @@ vp->bus_master = 0; } - vortex_probe1(dev); -#endif /* MODULE */ + corkscrew_probe1(dev); +#endif /* MODULE */ return dev; } -static int vortex_probe1(struct net_device *dev) +static int corkscrew_probe1(struct net_device *dev) { int ioaddr = dev->base_addr; - struct vortex_private *vp = (struct vortex_private *)dev->priv; - unsigned int eeprom[0x40], checksum = 0; /* EEPROM contents */ + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; + unsigned int eeprom[0x40], checksum = 0; /* EEPROM contents */ int i; - printk("%s: 3Com %s at %#3x,", dev->name, - vp->product_name, ioaddr); + printk(KERN_INFO "%s: 3Com %s at %#3x,", dev->name, + vp->product_name, ioaddr); /* Read the station address from the EEPROM. */ EL3WINDOW(0); for (i = 0; i < 0x18; i++) { - short *phys_addr = (short *)dev->dev_addr; + short *phys_addr = (short *) dev->dev_addr; int timer; outw(EEPROM_Read + i, ioaddr + Wn0EepromCmd); /* Pause for at least 162 us. for the read to take place. */ @@ -549,97 +566,100 @@ printk(" ***INVALID CHECKSUM %4.4x*** ", checksum); for (i = 0; i < 6; i++) printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]); - if (eeprom[16] == 0x11c7) { /* Corkscrew */ - if (request_dma(dev->dma, "3c515")) { - printk(", DMA %d allocation failed", dev->dma); - dev->dma = 0; - } else - printk(", DMA %d", dev->dma); + if (eeprom[16] == 0x11c7) { /* Corkscrew */ + if (request_dma(dev->dma, "3c515")) { + printk(", DMA %d allocation failed", dev->dma); + dev->dma = 0; + } else + printk(", DMA %d", dev->dma); } printk(", IRQ %d\n", dev->irq); /* Tell them about an invalid IRQ. */ - if (vortex_debug && (dev->irq <= 0 || dev->irq > 15)) - printk(" *** Warning: this IRQ is unlikely to work! ***\n"); + if (corkscrew_debug && (dev->irq <= 0 || dev->irq > 15)) + printk(KERN_WARNING " *** Warning: this IRQ is unlikely to work! ***\n"); { - char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"}; + char *ram_split[] = { "5:3", "3:1", "1:1", "3:5" }; union wn3_config config; EL3WINDOW(3); vp->available_media = inw(ioaddr + Wn3_Options); config.i = inl(ioaddr + Wn3_Config); - if (vortex_debug > 1) - printk(" Internal config register is %4.4x, transceivers %#x.\n", - config.i, inw(ioaddr + Wn3_Options)); - printk(" %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", - 8 << config.u.ram_size, - config.u.ram_width ? "word" : "byte", - ram_split[config.u.ram_split], - config.u.autoselect ? "autoselect/" : "", - media_tbl[config.u.xcvr].name); + if (corkscrew_debug > 1) + printk(KERN_INFO " Internal config register is %4.4x, transceivers %#x.\n", + config.i, inw(ioaddr + Wn3_Options)); + printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", + 8 << config.u.ram_size, + config.u.ram_width ? "word" : "byte", + ram_split[config.u.ram_split], + config.u.autoselect ? "autoselect/" : "", + media_tbl[config.u.xcvr].name); dev->if_port = config.u.xcvr; vp->default_media = config.u.xcvr; vp->autoselect = config.u.autoselect; } if (vp->media_override != 7) { - printk(" Media override to transceiver type %d (%s).\n", - vp->media_override, media_tbl[vp->media_override].name); + printk(KERN_INFO " Media override to transceiver type %d (%s).\n", + vp->media_override, + media_tbl[vp->media_override].name); dev->if_port = vp->media_override; } vp->capabilities = eeprom[16]; vp->full_bus_master_tx = (vp->capabilities & 0x20) ? 1 : 0; /* Rx is broken at 10mbps, so we always disable it. */ - /* vp->full_bus_master_rx = 0;*/ + /* vp->full_bus_master_rx = 0; */ vp->full_bus_master_rx = (vp->capabilities & 0x20) ? 1 : 0; /* We do a request_region() to register /proc/ioports info. */ request_region(ioaddr, CORKSCREW_TOTAL_SIZE, vp->product_name); - /* The 3c59x-specific entries in the device structure. */ - dev->open = &vortex_open; - dev->hard_start_xmit = &vortex_start_xmit; - dev->stop = &vortex_close; - dev->get_stats = &vortex_get_stats; + /* The 3c51x-specific entries in the device structure. */ + dev->open = &corkscrew_open; + dev->hard_start_xmit = &corkscrew_start_xmit; + dev->tx_timeout = &corkscrew_timeout; + dev->watchdog_timeo = (400 * HZ) / 1000; + dev->stop = &corkscrew_close; + dev->get_stats = &corkscrew_get_stats; dev->set_multicast_list = &set_rx_mode; return 0; } - -static int -vortex_open(struct net_device *dev) + +static int corkscrew_open(struct net_device *dev) { int ioaddr = dev->base_addr; - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; union wn3_config config; int i; /* Before initializing select the active media port. */ EL3WINDOW(3); if (vp->full_duplex) - outb(0x20, ioaddr + Wn3_MAC_Ctrl); /* Set the full-duplex bit. */ + outb(0x20, ioaddr + Wn3_MAC_Ctrl); /* Set the full-duplex bit. */ config.i = inl(ioaddr + Wn3_Config); if (vp->media_override != 7) { - if (vortex_debug > 1) - printk("%s: Media override to transceiver %d (%s).\n", - dev->name, vp->media_override, - media_tbl[vp->media_override].name); + if (corkscrew_debug > 1) + printk(KERN_INFO "%s: Media override to transceiver %d (%s).\n", + dev->name, vp->media_override, + media_tbl[vp->media_override].name); dev->if_port = vp->media_override; } else if (vp->autoselect) { /* Find first available media type, starting with 100baseTx. */ dev->if_port = 4; - while (! (vp->available_media & media_tbl[dev->if_port].mask)) + while (!(vp->available_media & media_tbl[dev->if_port].mask)) dev->if_port = media_tbl[dev->if_port].next; - if (vortex_debug > 1) + if (corkscrew_debug > 1) printk("%s: Initial media type %s.\n", - dev->name, media_tbl[dev->if_port].name); + dev->name, media_tbl[dev->if_port].name); init_timer(&vp->timer); vp->timer.expires = RUN_AT(media_tbl[dev->if_port].wait); - vp->timer.data = (unsigned long)dev; - vp->timer.function = &vortex_timer; /* timer handler */ + vp->timer.data = (unsigned long) dev; + vp->timer.function = &corkscrew_timer; /* timer handler */ add_timer(&vp->timer); } else dev->if_port = vp->default_media; @@ -647,63 +667,62 @@ config.u.xcvr = dev->if_port; outl(config.i, ioaddr + Wn3_Config); - if (vortex_debug > 1) { - printk("%s: vortex_open() InternalConfig %8.8x.\n", - dev->name, config.i); + if (corkscrew_debug > 1) { + printk("%s: corkscrew_open() InternalConfig %8.8x.\n", + dev->name, config.i); } outw(TxReset, ioaddr + EL3_CMD); - for (i = 20; i >= 0 ; i--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) + for (i = 20; i >= 0; i--) + if (!(inw(ioaddr + EL3_STATUS) & CmdInProgress)) break; outw(RxReset, ioaddr + EL3_CMD); /* Wait a few ticks for the RxReset command to complete. */ - for (i = 20; i >= 0 ; i--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) + for (i = 20; i >= 0; i--) + if (!(inw(ioaddr + EL3_STATUS) & CmdInProgress)) break; outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD); /* Use the now-standard shared IRQ implementation. */ if (vp->capabilities == 0x11c7) { - /* Corkscrew: Cannot share ISA resources. */ - if (dev->irq == 0 - || dev->dma == 0 - || request_irq(dev->irq, &vortex_interrupt, 0, - vp->product_name, dev)) + /* Corkscrew: Cannot share ISA resources. */ + if (dev->irq == 0 + || dev->dma == 0 + || request_irq(dev->irq, &corkscrew_interrupt, 0, + vp->product_name, dev)) return -EAGAIN; + enable_dma(dev->dma); + set_dma_mode(dev->dma, DMA_MODE_CASCADE); + } else if (request_irq(dev->irq, &corkscrew_interrupt, SA_SHIRQ, + vp->product_name, dev)) { return -EAGAIN; - enable_dma(dev->dma); - set_dma_mode(dev->dma, DMA_MODE_CASCADE); - } else if (request_irq(dev->irq, &vortex_interrupt, SA_SHIRQ, - vp->product_name, dev)) { - return -EAGAIN; } - if (vortex_debug > 1) { + if (corkscrew_debug > 1) { EL3WINDOW(4); - printk("%s: vortex_open() irq %d media status %4.4x.\n", - dev->name, dev->irq, inw(ioaddr + Wn4_Media)); + printk("%s: corkscrew_open() irq %d media status %4.4x.\n", + dev->name, dev->irq, inw(ioaddr + Wn4_Media)); } /* Set the station address and mask in window 2 each time opened. */ EL3WINDOW(2); for (i = 0; i < 6; i++) outb(dev->dev_addr[i], ioaddr + i); - for (; i < 12; i+=2) + for (; i < 12; i += 2) outw(0, ioaddr + i); if (dev->if_port == 3) - /* Start the thinnet transceiver. We should really wait 50ms...*/ + /* Start the thinnet transceiver. We should really wait 50ms... */ outw(StartCoax, ioaddr + EL3_CMD); EL3WINDOW(4); - outw((inw(ioaddr + Wn4_Media) & ~(Media_10TP|Media_SQE)) | - media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); + outw((inw(ioaddr + Wn4_Media) & ~(Media_10TP | Media_SQE)) | + media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); /* Switch to the stats window, and clear all stats by reading. */ outw(StatsDisable, ioaddr + EL3_CMD); EL3WINDOW(6); - for (i = 0; i < 10; i++) + for (i = 0; i < 10; i++) inb(ioaddr + i); inw(ioaddr + 10); inw(ioaddr + 12); @@ -716,32 +735,34 @@ /* Switch to register set 7 for normal use. */ EL3WINDOW(7); - if (vp->full_bus_master_rx) { /* Boomerang bus master. */ + if (vp->full_bus_master_rx) { /* Boomerang bus master. */ vp->cur_rx = vp->dirty_rx = 0; - if (vortex_debug > 2) - printk("%s: Filling in the Rx ring.\n", dev->name); + if (corkscrew_debug > 2) + printk("%s: Filling in the Rx ring.\n", + dev->name); for (i = 0; i < RX_RING_SIZE; i++) { struct sk_buff *skb; if (i < (RX_RING_SIZE - 1)) - vp->rx_ring[i].next = virt_to_bus(&vp->rx_ring[i+1]); + vp->rx_ring[i].next = + virt_to_bus(&vp->rx_ring[i + 1]); else - vp->rx_ring[i].next = 0; + vp->rx_ring[i].next = 0; vp->rx_ring[i].status = 0; /* Clear complete bit. */ vp->rx_ring[i].length = PKT_BUF_SZ | 0x80000000; skb = dev_alloc_skb(PKT_BUF_SZ); vp->rx_skbuff[i] = skb; if (skb == NULL) - break; /* Bad news! */ - skb->dev = dev; /* Mark as being used by this device. */ + break; /* Bad news! */ + skb->dev = dev; /* Mark as being used by this device. */ skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ vp->rx_ring[i].addr = virt_to_bus(skb->tail); } - vp->rx_ring[i-1].next = virt_to_bus(&vp->rx_ring[0]); /* Wrap the ring. */ + vp->rx_ring[i - 1].next = virt_to_bus(&vp->rx_ring[0]); /* Wrap the ring. */ outl(virt_to_bus(&vp->rx_ring[0]), ioaddr + UpListPtr); } - if (vp->full_bus_master_tx) { /* Boomerang bus master Tx. */ + if (vp->full_bus_master_tx) { /* Boomerang bus master Tx. */ vp->cur_tx = vp->dirty_tx = 0; - outb(PKT_BUF_SZ>>8, ioaddr + TxFreeThreshold); /* Room for a packet. */ + outb(PKT_BUF_SZ >> 8, ioaddr + TxFreeThreshold); /* Room for a packet. */ /* Clear the Tx ring. */ for (i = 0; i < TX_RING_SIZE; i++) vp->tx_skbuff[i] = 0; @@ -749,175 +770,188 @@ } /* Set receiver mode: presumably accept b-case and phys addr only. */ set_rx_mode(dev); - outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ + outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue(dev); - outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ - outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ + outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ + outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ /* Allow status bits to be seen. */ - outw(SetStatusEnb | AdapterFailure|IntReq|StatsFull | - (vp->full_bus_master_tx ? DownComplete : TxAvailable) | - (vp->full_bus_master_rx ? UpComplete : RxComplete) | - (vp->bus_master ? DMADone : 0), - ioaddr + EL3_CMD); + outw(SetStatusEnb | AdapterFailure | IntReq | StatsFull | + (vp->full_bus_master_tx ? DownComplete : TxAvailable) | + (vp->full_bus_master_rx ? UpComplete : RxComplete) | + (vp->bus_master ? DMADone : 0), ioaddr + EL3_CMD); /* Ack all pending events, and set active indicator mask. */ outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq, - ioaddr + EL3_CMD); + ioaddr + EL3_CMD); outw(SetIntrEnb | IntLatch | TxAvailable | RxComplete | StatsFull - | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete, - ioaddr + EL3_CMD); + | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete, + ioaddr + EL3_CMD); MOD_INC_USE_COUNT; return 0; } -static void vortex_timer(unsigned long data) +static void corkscrew_timer(unsigned long data) { #ifdef AUTOMEDIA - struct net_device *dev = (struct net_device *)data; - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct net_device *dev = (struct net_device *) data; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; int ioaddr = dev->base_addr; unsigned long flags; int ok = 0; - if (vortex_debug > 1) + if (corkscrew_debug > 1) printk("%s: Media selection timer tick happened, %s.\n", - dev->name, media_tbl[dev->if_port].name); + dev->name, media_tbl[dev->if_port].name); - save_flags(flags); cli(); { - int old_window = inw(ioaddr + EL3_CMD) >> 13; - int media_status; - EL3WINDOW(4); - media_status = inw(ioaddr + Wn4_Media); - switch (dev->if_port) { - case 0: case 4: case 5: /* 10baseT, 100baseTX, 100baseFX */ - if (media_status & Media_LnkBeat) { - ok = 1; - if (vortex_debug > 1) - printk("%s: Media %s has link beat, %x.\n", - dev->name, media_tbl[dev->if_port].name, media_status); - } else if (vortex_debug > 1) - printk("%s: Media %s is has no link beat, %x.\n", - dev->name, media_tbl[dev->if_port].name, media_status); - - break; - default: /* Other media types handled by Tx timeouts. */ - if (vortex_debug > 1) - printk("%s: Media %s is has no indication, %x.\n", - dev->name, media_tbl[dev->if_port].name, media_status); - ok = 1; - } - if ( ! ok) { - union wn3_config config; + save_flags(flags); + cli(); { + int old_window = inw(ioaddr + EL3_CMD) >> 13; + int media_status; + EL3WINDOW(4); + media_status = inw(ioaddr + Wn4_Media); + switch (dev->if_port) { + case 0: + case 4: + case 5: /* 10baseT, 100baseTX, 100baseFX */ + if (media_status & Media_LnkBeat) { + ok = 1; + if (corkscrew_debug > 1) + printk("%s: Media %s has link beat, %x.\n", + dev->name, + media_tbl[dev->if_port].name, + media_status); + } else if (corkscrew_debug > 1) + printk("%s: Media %s is has no link beat, %x.\n", + dev->name, + media_tbl[dev->if_port].name, + media_status); - do { - dev->if_port = media_tbl[dev->if_port].next; - } while ( ! (vp->available_media & media_tbl[dev->if_port].mask)); - if (dev->if_port == 8) { /* Go back to default. */ - dev->if_port = vp->default_media; - if (vortex_debug > 1) - printk("%s: Media selection failing, using default %s port.\n", - dev->name, media_tbl[dev->if_port].name); - } else { - if (vortex_debug > 1) - printk("%s: Media selection failed, now trying %s port.\n", - dev->name, media_tbl[dev->if_port].name); - vp->timer.expires = RUN_AT(media_tbl[dev->if_port].wait); - add_timer(&vp->timer); + break; + default: /* Other media types handled by Tx timeouts. */ + if (corkscrew_debug > 1) + printk("%s: Media %s is has no indication, %x.\n", + dev->name, + media_tbl[dev->if_port].name, + media_status); + ok = 1; } - outw((media_status & ~(Media_10TP|Media_SQE)) | - media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media); + if (!ok) { + union wn3_config config; - EL3WINDOW(3); - config.i = inl(ioaddr + Wn3_Config); - config.u.xcvr = dev->if_port; - outl(config.i, ioaddr + Wn3_Config); + do { + dev->if_port = + media_tbl[dev->if_port].next; + } + while (!(vp->available_media & media_tbl[dev->if_port].mask)); + + if (dev->if_port == 8) { /* Go back to default. */ + dev->if_port = vp->default_media; + if (corkscrew_debug > 1) + printk("%s: Media selection failing, using default %s port.\n", + dev->name, + media_tbl[dev->if_port].name); + } else { + if (corkscrew_debug > 1) + printk("%s: Media selection failed, now trying %s port.\n", + dev->name, + media_tbl[dev->if_port].name); + vp->timer.expires = RUN_AT(media_tbl[dev->if_port].wait); + add_timer(&vp->timer); + } + outw((media_status & ~(Media_10TP | Media_SQE)) | + media_tbl[dev->if_port].media_bits, + ioaddr + Wn4_Media); + + EL3WINDOW(3); + config.i = inl(ioaddr + Wn3_Config); + config.u.xcvr = dev->if_port; + outl(config.i, ioaddr + Wn3_Config); - outw(dev->if_port == 3 ? StartCoax : StopCoax, ioaddr + EL3_CMD); - } - EL3WINDOW(old_window); - } restore_flags(flags); - if (vortex_debug > 1) - printk("%s: Media selection timer finished, %s.\n", - dev->name, media_tbl[dev->if_port].name); + outw(dev->if_port == 3 ? StartCoax : StopCoax, + ioaddr + EL3_CMD); + } + EL3WINDOW(old_window); + } + restore_flags(flags); + if (corkscrew_debug > 1) + printk("%s: Media selection timer finished, %s.\n", + dev->name, media_tbl[dev->if_port].name); -#endif /* AUTOMEDIA*/ +#endif /* AUTOMEDIA */ return; } -static int -vortex_start_xmit(struct sk_buff *skb, struct net_device *dev) +static void corkscrew_timeout(struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + int i; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; int ioaddr = dev->base_addr; - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - int i; - - /* Min. wait before assuming a Tx failed == 400ms. */ - - if (tickssofar < 400*HZ/1000) /* We probably aren't empty. */ - return 1; - printk("%s: transmit timed out, tx_status %2.2x status %4.4x.\n", - dev->name, inb(ioaddr + TxStatus), - inw(ioaddr + EL3_STATUS)); - /* Slight code bloat to be user friendly. */ - if ((inb(ioaddr + TxStatus) & 0x88) == 0x88) - printk("%s: Transmitter encountered 16 collisions -- network" - " network cable problem?\n", dev->name); + printk(KERN_WARNING + "%s: transmit timed out, tx_status %2.2x status %4.4x.\n", + dev->name, inb(ioaddr + TxStatus), + inw(ioaddr + EL3_STATUS)); + /* Slight code bloat to be user friendly. */ + if ((inb(ioaddr + TxStatus) & 0x88) == 0x88) + printk(KERN_WARNING + "%s: Transmitter encountered 16 collisions -- network" + " network cable problem?\n", dev->name); #ifndef final_version - printk(" Flags; bus-master %d, full %d; dirty %d current %d.\n", - vp->full_bus_master_tx, vp->tx_full, vp->dirty_tx, vp->cur_tx); - printk(" Down list %8.8x vs. %p.\n", inl(ioaddr + DownListPtr), - &vp->tx_ring[0]); - for (i = 0; i < TX_RING_SIZE; i++) { - printk(" %d: %p length %8.8x status %8.8x\n", i, - &vp->tx_ring[i], - vp->tx_ring[i].length, - vp->tx_ring[i].status); - } -#endif - /* Issue TX_RESET and TX_START commands. */ - outw(TxReset, ioaddr + EL3_CMD); - for (i = 20; i >= 0 ; i--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) - break; - outw(TxEnable, ioaddr + EL3_CMD); - dev->trans_start = jiffies; - /* dev->tbusy = 0;*/ - vp->stats.tx_errors++; - vp->stats.tx_dropped++; - return 0; /* Yes, silently *drop* the packet! */ + printk(" Flags; bus-master %d, full %d; dirty %d current %d.\n", + vp->full_bus_master_tx, vp->tx_full, vp->dirty_tx, + vp->cur_tx); + printk(" Down list %8.8x vs. %p.\n", inl(ioaddr + DownListPtr), + &vp->tx_ring[0]); + for (i = 0; i < TX_RING_SIZE; i++) { + printk(" %d: %p length %8.8x status %8.8x\n", i, + &vp->tx_ring[i], + vp->tx_ring[i].length, vp->tx_ring[i].status); } +#endif + /* Issue TX_RESET and TX_START commands. */ + outw(TxReset, ioaddr + EL3_CMD); + for (i = 20; i >= 0; i--) + if (!(inw(ioaddr + EL3_STATUS) & CmdInProgress)) + break; + outw(TxEnable, ioaddr + EL3_CMD); + dev->trans_start = jiffies; + vp->stats.tx_errors++; + vp->stats.tx_dropped++; + netif_wake_queue(dev); +} - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. - If this ever occurs the queue layer is doing something evil! */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk("%s: Transmitter access conflict.\n", dev->name); - return 1; - } +static int corkscrew_start_xmit(struct sk_buff *skb, + struct net_device *dev) +{ + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; + int ioaddr = dev->base_addr; + + /* Block a timer-based transmit from overlapping. */ - if (vp->full_bus_master_tx) { /* BOOMERANG bus-master */ + netif_stop_queue(dev); + + if (vp->full_bus_master_tx) { /* BOOMERANG bus-master */ /* Calculate the next Tx descriptor entry. */ int entry = vp->cur_tx % TX_RING_SIZE; struct boom_tx_desc *prev_entry; unsigned long flags, i; - if (vp->tx_full) /* No room to transmit with */ - return 1; + if (vp->tx_full) /* No room to transmit with */ + return 1; if (vp->cur_tx != 0) - prev_entry = &vp->tx_ring[(vp->cur_tx-1) % TX_RING_SIZE]; + prev_entry = + &vp->tx_ring[(vp->cur_tx - 1) % TX_RING_SIZE]; else - prev_entry = NULL; - if (vortex_debug > 3) + prev_entry = NULL; + if (corkscrew_debug > 3) printk("%s: Trying to send a packet, Tx index %d.\n", - dev->name, vp->cur_tx); + dev->name, vp->cur_tx); /* vp->tx_full = 1; */ vp->tx_skbuff[entry] = skb; vp->tx_ring[entry].next = 0; @@ -929,13 +963,15 @@ cli(); outw(DownStall, ioaddr + EL3_CMD); /* Wait for the stall to complete. */ - for (i = 20; i >= 0 ; i--) - if ( (inw(ioaddr + EL3_STATUS) & CmdInProgress) == 0) - break; + for (i = 20; i >= 0; i--) + if ((inw(ioaddr + EL3_STATUS) & CmdInProgress) == + 0) break; if (prev_entry) - prev_entry->next = virt_to_bus(&vp->tx_ring[entry]); + prev_entry->next = + virt_to_bus(&vp->tx_ring[entry]); if (inl(ioaddr + DownListPtr) == 0) { - outl(virt_to_bus(&vp->tx_ring[entry]), ioaddr + DownListPtr); + outl(virt_to_bus(&vp->tx_ring[entry]), + ioaddr + DownListPtr); queued_packet++; } outw(DownUnstall, ioaddr + EL3_CMD); @@ -944,10 +980,10 @@ vp->cur_tx++; if (vp->cur_tx - vp->dirty_tx > TX_RING_SIZE - 1) vp->tx_full = 1; - else { /* Clear previous interrupt enable. */ - if (prev_entry) - prev_entry->status &= ~0x80000000; - dev->tbusy = 0; + else { /* Clear previous interrupt enable. */ + if (prev_entry) + prev_entry->status &= ~0x80000000; + netif_wake_queue(dev); } dev->trans_start = jiffies; return 0; @@ -957,31 +993,32 @@ #ifdef VORTEX_BUS_MASTER if (vp->bus_master) { /* Set the bus-master controller to transfer the packet. */ - outl((int)(skb->data), ioaddr + Wn7_MasterAddr); + outl((int) (skb->data), ioaddr + Wn7_MasterAddr); outw((skb->len + 3) & ~3, ioaddr + Wn7_MasterLen); vp->tx_skb = skb; outw(StartDMADown, ioaddr + EL3_CMD); - /* dev->tbusy will be cleared at the DMADone interrupt. */ + /* queue will be woken at the DMADone interrupt. */ } else { /* ... and the packet rounded to a doubleword. */ outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); - dev_kfree_skb (skb); + dev_kfree_skb(skb); if (inw(ioaddr + TxFree) > 1536) { - dev->tbusy = 0; + netif_wake_queue(dev); } else /* Interrupt us when the FIFO has room for max-sized packet. */ - outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); + outw(SetTxThreshold + (1536 >> 2), + ioaddr + EL3_CMD); } #else /* ... and the packet rounded to a doubleword. */ outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2); - dev_kfree_skb (skb); + dev_kfree_skb(skb); if (inw(ioaddr + TxFree) > 1536) { - dev->tbusy = 0; + netif_wake_queue(dev); } else /* Interrupt us when the FIFO has room for max-sized packet. */ - outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD); -#endif /* bus master */ + outw(SetTxThreshold + (1536 >> 2), ioaddr + EL3_CMD); +#endif /* bus master */ dev->trans_start = jiffies; @@ -990,80 +1027,80 @@ short tx_status; int i = 4; - while (--i > 0 && (tx_status = inb(ioaddr + TxStatus)) > 0) { - if (tx_status & 0x3C) { /* A Tx-disabling error occurred. */ - if (vortex_debug > 2) - printk("%s: Tx error, status %2.2x.\n", - dev->name, tx_status); - if (tx_status & 0x04) vp->stats.tx_fifo_errors++; - if (tx_status & 0x38) vp->stats.tx_aborted_errors++; + while (--i > 0 && (tx_status = inb(ioaddr + TxStatus)) > 0) { + if (tx_status & 0x3C) { /* A Tx-disabling error occurred. */ + if (corkscrew_debug > 2) + printk("%s: Tx error, status %2.2x.\n", + dev->name, tx_status); + if (tx_status & 0x04) + vp->stats.tx_fifo_errors++; + if (tx_status & 0x38) + vp->stats.tx_aborted_errors++; if (tx_status & 0x30) { int j; outw(TxReset, ioaddr + EL3_CMD); - for (j = 20; j >= 0 ; j--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) + for (j = 20; j >= 0; j--) + if (!(inw(ioaddr + EL3_STATUS) & CmdInProgress)) break; } outw(TxEnable, ioaddr + EL3_CMD); } - outb(0x00, ioaddr + TxStatus); /* Pop the status stack. */ + outb(0x00, ioaddr + TxStatus); /* Pop the status stack. */ } } - vp->stats.tx_bytes+=skb->len; + vp->stats.tx_bytes += skb->len; return 0; } /* The interrupt handler does all of the Rx thread work and cleans up after the Tx thread. */ -static void vortex_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs) + +static void corkscrew_interrupt(int irq, void *dev_id, + struct pt_regs *regs) { /* Use the now-standard shared IRQ implementation. */ struct net_device *dev = dev_id; - struct vortex_private *lp; + struct corkscrew_private *lp; int ioaddr, status; int latency; int i = max_interrupt_work; - if (test_and_set_bit(0, (void*)&dev->interrupt)) { - printk("%s: Re-entering the interrupt handler.\n", dev->name); - return; - } - ioaddr = dev->base_addr; latency = inb(ioaddr + Timer); - lp = (struct vortex_private *)dev->priv; + lp = (struct corkscrew_private *) dev->priv; status = inw(ioaddr + EL3_STATUS); - if (vortex_debug > 4) - printk("%s: interrupt, status %4.4x, timer %d.\n", dev->name, - status, latency); + if (corkscrew_debug > 4) + printk("%s: interrupt, status %4.4x, timer %d.\n", + dev->name, status, latency); if ((status & 0xE000) != 0xE000) { - static int donedidthis=0; + static int donedidthis = 0; /* Some interrupt controllers store a bogus interrupt from boot-time. Ignore a single early interrupt, but don't hang the machine for other interrupt problems. */ if (donedidthis++ > 100) { - printk("%s: Bogus interrupt, bailing. Status %4.4x, start=%d.\n", - dev->name, status, dev->start); - FREE_IRQ(dev->irq, dev); + printk(KERN_ERR "%s: Bogus interrupt, bailing. Status %4.4x, start=%d.\n", + dev->name, status, + test_bit(LINK_STATE_START, &dev->state)); + free_irq(dev->irq, dev); } } do { - if (vortex_debug > 5) - printk("%s: In interrupt loop, status %4.4x.\n", - dev->name, status); + if (corkscrew_debug > 5) + printk("%s: In interrupt loop, status %4.4x.\n", + dev->name, status); if (status & RxComplete) - vortex_rx(dev); + corkscrew_rx(dev); if (status & TxAvailable) { - if (vortex_debug > 5) - printk(" TX room bit was handled.\n"); + if (corkscrew_debug > 5) + printk + (" TX room bit was handled.\n"); /* There's room in the FIFO for a full-sized packet. */ outw(AckIntr | TxAvailable, ioaddr + EL3_CMD); - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } if (status & DownComplete) { unsigned int dirty_tx = lp->dirty_tx; @@ -1071,28 +1108,29 @@ while (lp->cur_tx - dirty_tx > 0) { int entry = dirty_tx % TX_RING_SIZE; if (inl(ioaddr + DownListPtr) == - virt_to_bus(&lp->tx_ring[entry])) - break; /* It still hasn't been processed. */ + virt_to_bus(&lp->tx_ring[entry])) + break; /* It still hasn't been processed. */ if (lp->tx_skbuff[entry]) { - dev_kfree_skb(lp->tx_skbuff[entry]); + dev_kfree_skb_irq(lp-> + tx_skbuff + [entry]); lp->tx_skbuff[entry] = 0; } dirty_tx++; } lp->dirty_tx = dirty_tx; outw(AckIntr | DownComplete, ioaddr + EL3_CMD); - if (lp->tx_full && (lp->cur_tx - dirty_tx <= TX_RING_SIZE - 1)) { - lp->tx_full= 0; - dev->tbusy = 0; - mark_bh(NET_BH); + if (lp->tx_full + && (lp->cur_tx - dirty_tx <= TX_RING_SIZE - 1)) { + lp->tx_full = 0; + netif_wake_queue(dev); } } #ifdef VORTEX_BUS_MASTER if (status & DMADone) { - outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */ - dev->tbusy = 0; - dev_kfree_skb (lp->tx_skb); /* Release the transfered buffer */ - mark_bh(NET_BH); + outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */ + dev_kfree_skb_irq(lp->tx_skb); /* Release the transfered buffer */ + netif_wake_queue(dev); } #endif if (status & UpComplete) { @@ -1101,32 +1139,36 @@ } if (status & (AdapterFailure | RxEarly | StatsFull)) { /* Handle all uncommon interrupts at once. */ - if (status & RxEarly) { /* Rx early is unused. */ - vortex_rx(dev); + if (status & RxEarly) { /* Rx early is unused. */ + corkscrew_rx(dev); outw(AckIntr | RxEarly, ioaddr + EL3_CMD); } - if (status & StatsFull) { /* Empty statistics. */ + if (status & StatsFull) { /* Empty statistics. */ static int DoneDidThat = 0; - if (vortex_debug > 4) - printk("%s: Updating stats.\n", dev->name); + if (corkscrew_debug > 4) + printk("%s: Updating stats.\n", + dev->name); update_stats(ioaddr, dev); /* DEBUG HACK: Disable statistics as an interrupt source. */ /* This occurs when we have the wrong media type! */ - if (DoneDidThat == 0 && - inw(ioaddr + EL3_STATUS) & StatsFull) { + if (DoneDidThat == 0 && + inw(ioaddr + EL3_STATUS) & StatsFull) { int win, reg; printk("%s: Updating stats failed, disabling stats as an" - " interrupt source.\n", dev->name); + " interrupt source.\n", + dev->name); for (win = 0; win < 8; win++) { EL3WINDOW(win); printk("\n Vortex window %d:", win); for (reg = 0; reg < 16; reg++) - printk(" %2.2x", inb(ioaddr+reg)); + printk(" %2.2x", + inb(ioaddr + reg)); } EL3WINDOW(7); - outw(SetIntrEnb | TxAvailable | RxComplete | AdapterFailure - | UpComplete | DownComplete | TxComplete, - ioaddr + EL3_CMD); + outw(SetIntrEnb | TxAvailable | + RxComplete | AdapterFailure | + UpComplete | DownComplete | + TxComplete, ioaddr + EL3_CMD); DoneDidThat++; } } @@ -1135,139 +1177,150 @@ outw(RxReset, ioaddr + EL3_CMD); /* Set the Rx filter to the current state. */ set_rx_mode(dev); - outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */ - outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD); + outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */ + outw(AckIntr | AdapterFailure, + ioaddr + EL3_CMD); } } if (--i < 0) { - printk("%s: Too much work in interrupt, status %4.4x. " - "Disabling functions (%4.4x).\n", - dev->name, status, SetStatusEnb | ((~status) & 0x7FE)); + printk(KERN_ERR "%s: Too much work in interrupt, status %4.4x. " + "Disabling functions (%4.4x).\n", dev->name, + status, SetStatusEnb | ((~status) & 0x7FE)); /* Disable all pending interrupts. */ - outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD); + outw(SetStatusEnb | ((~status) & 0x7FE), + ioaddr + EL3_CMD); outw(AckIntr | 0x7FF, ioaddr + EL3_CMD); break; } /* Acknowledge the IRQ. */ outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); - } while ((status = inw(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete)); + } while ((status = inw(ioaddr + EL3_STATUS)) & + (IntLatch | RxComplete)); - if (vortex_debug > 4) - printk("%s: exiting interrupt, status %4.4x.\n", dev->name, status); - - dev->interrupt = 0; - return; + if (corkscrew_debug > 4) + printk("%s: exiting interrupt, status %4.4x.\n", dev->name, + status); } -static int -vortex_rx(struct net_device *dev) +static int corkscrew_rx(struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = (struct corkscrew_private *) dev->priv; int ioaddr = dev->base_addr; int i; short rx_status; - if (vortex_debug > 5) + if (corkscrew_debug > 5) printk(" In rx_packet(), status %4.4x, rx_status %4.4x.\n", - inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); + inw(ioaddr + EL3_STATUS), inw(ioaddr + RxStatus)); while ((rx_status = inw(ioaddr + RxStatus)) > 0) { - if (rx_status & 0x4000) { /* Error, update stats. */ + if (rx_status & 0x4000) { /* Error, update stats. */ unsigned char rx_error = inb(ioaddr + RxErrors); - if (vortex_debug > 2) - printk(" Rx error: status %2.2x.\n", rx_error); + if (corkscrew_debug > 2) + printk(" Rx error: status %2.2x.\n", + rx_error); vp->stats.rx_errors++; - if (rx_error & 0x01) vp->stats.rx_over_errors++; - if (rx_error & 0x02) vp->stats.rx_length_errors++; - if (rx_error & 0x04) vp->stats.rx_frame_errors++; - if (rx_error & 0x08) vp->stats.rx_crc_errors++; - if (rx_error & 0x10) vp->stats.rx_length_errors++; + if (rx_error & 0x01) + vp->stats.rx_over_errors++; + if (rx_error & 0x02) + vp->stats.rx_length_errors++; + if (rx_error & 0x04) + vp->stats.rx_frame_errors++; + if (rx_error & 0x08) + vp->stats.rx_crc_errors++; + if (rx_error & 0x10) + vp->stats.rx_length_errors++; } else { /* The packet length: up to 4.5K!. */ short pkt_len = rx_status & 0x1fff; struct sk_buff *skb; - skb = DEV_ALLOC_SKB(pkt_len + 5); - if (vortex_debug > 4) + skb = dev_alloc_skb(pkt_len + 5 + 2); + if (corkscrew_debug > 4) printk("Receiving packet size %d status %4.4x.\n", - pkt_len, rx_status); + pkt_len, rx_status); if (skb != NULL) { skb->dev = dev; skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ /* 'skb_put()' points to the start of sk_buff data area. */ - insl(ioaddr + RX_FIFO, skb_put(skb, pkt_len), - (pkt_len + 3) >> 2); - outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ + insl(ioaddr + RX_FIFO, + skb_put(skb, pkt_len), + (pkt_len + 3) >> 2); + outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */ skb->protocol = eth_type_trans(skb, dev); netif_rx(skb); dev->last_rx = jiffies; vp->stats.rx_packets++; - vp->stats.rx_bytes+=skb->len; + vp->stats.rx_bytes += skb->len; /* Wait a limited time to go to next packet. */ for (i = 200; i >= 0; i--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) + if (! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) break; continue; - } else if (vortex_debug) - printk("%s: Couldn't allocate a sk_buff of size %d.\n", - dev->name, pkt_len); + } else if (corkscrew_debug) + printk("%s: Couldn't allocate a sk_buff of size %d.\n", dev->name, pkt_len); } outw(RxDiscard, ioaddr + EL3_CMD); vp->stats.rx_dropped++; /* Wait a limited time to skip this packet. */ for (i = 200; i >= 0; i--) - if ( ! (inw(ioaddr + EL3_STATUS) & CmdInProgress)) + if (!(inw(ioaddr + EL3_STATUS) & CmdInProgress)) break; } - return 0; } -static int -boomerang_rx(struct net_device *dev) +static int boomerang_rx(struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; int entry = vp->cur_rx % RX_RING_SIZE; int ioaddr = dev->base_addr; int rx_status; - if (vortex_debug > 5) + if (corkscrew_debug > 5) printk(" In boomerang_rx(), status %4.4x, rx_status %4.4x.\n", - inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); + inw(ioaddr + EL3_STATUS), inw(ioaddr + RxStatus)); while ((rx_status = vp->rx_ring[entry].status) & RxDComplete) { - if (rx_status & RxDError) { /* Error, update stats. */ + if (rx_status & RxDError) { /* Error, update stats. */ unsigned char rx_error = rx_status >> 16; - if (vortex_debug > 2) - printk(" Rx error: status %2.2x.\n", rx_error); + if (corkscrew_debug > 2) + printk(" Rx error: status %2.2x.\n", + rx_error); vp->stats.rx_errors++; - if (rx_error & 0x01) vp->stats.rx_over_errors++; - if (rx_error & 0x02) vp->stats.rx_length_errors++; - if (rx_error & 0x04) vp->stats.rx_frame_errors++; - if (rx_error & 0x08) vp->stats.rx_crc_errors++; - if (rx_error & 0x10) vp->stats.rx_length_errors++; + if (rx_error & 0x01) + vp->stats.rx_over_errors++; + if (rx_error & 0x02) + vp->stats.rx_length_errors++; + if (rx_error & 0x04) + vp->stats.rx_frame_errors++; + if (rx_error & 0x08) + vp->stats.rx_crc_errors++; + if (rx_error & 0x10) + vp->stats.rx_length_errors++; } else { /* The packet length: up to 4.5K!. */ short pkt_len = rx_status & 0x1fff; struct sk_buff *skb; - vp->stats.rx_bytes+=pkt_len; - if (vortex_debug > 4) + vp->stats.rx_bytes += pkt_len; + if (corkscrew_debug > 4) printk("Receiving packet size %d status %4.4x.\n", - pkt_len, rx_status); + pkt_len, rx_status); /* Check if the packet is long enough to just accept without copying to a properly sized skbuff. */ if (pkt_len < rx_copybreak - && (skb = DEV_ALLOC_SKB(pkt_len + 2)) != 0) { + && (skb = dev_alloc_skb(pkt_len + 4)) != 0) { skb->dev = dev; skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ /* 'skb_put()' points to the start of sk_buff data area. */ memcpy(skb_put(skb, pkt_len), - bus_to_virt(vp->rx_ring[entry].addr), - pkt_len); + bus_to_virt(vp->rx_ring[entry]. + addr), pkt_len); rx_copy++; - } else{ + } else { void *temp; /* Pass up the skbuff already on the Rx ring. */ skb = vp->rx_skbuff[entry]; @@ -1275,10 +1328,13 @@ temp = skb_put(skb, pkt_len); /* Remove this checking code for final release. */ if (bus_to_virt(vp->rx_ring[entry].addr) != temp) - printk("%s: Warning -- the skbuff addresses do not match" - " in boomerang_rx: %p vs. %p / %p.\n", dev->name, - bus_to_virt(vp->rx_ring[entry].addr), - skb->head, temp); + printk("%s: Warning -- the skbuff addresses do not match" + " in boomerang_rx: %p vs. %p / %p.\n", + dev->name, + bus_to_virt(vp-> + rx_ring[entry]. + addr), skb->head, + temp); rx_nocopy++; } skb->protocol = eth_type_trans(skb, dev); @@ -1295,8 +1351,8 @@ if (vp->rx_skbuff[entry] == NULL) { skb = dev_alloc_skb(PKT_BUF_SZ); if (skb == NULL) - break; /* Bad news! */ - skb->dev = dev; /* Mark as being used by this device. */ + break; /* Bad news! */ + skb->dev = dev; /* Mark as being used by this device. */ skb_reserve(skb, 2); /* Align IP on 16 byte boundaries */ vp->rx_ring[entry].addr = virt_to_bus(skb->tail); vp->rx_skbuff[entry] = skb; @@ -1306,22 +1362,22 @@ return 0; } -static int -vortex_close(struct net_device *dev) +static int corkscrew_close(struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; int ioaddr = dev->base_addr; int i; - dev->start = 0; - dev->tbusy = 1; + netif_stop_queue(dev); - if (vortex_debug > 1) { - printk("%s: vortex_close() status %4.4x, Tx status %2.2x.\n", - dev->name, inw(ioaddr + EL3_STATUS), inb(ioaddr + TxStatus)); - printk("%s: vortex close stats: rx_nocopy %d rx_copy %d" - " tx_queued %d.\n", - dev->name, rx_nocopy, rx_copy, queued_packet); + if (corkscrew_debug > 1) { + printk("%s: corkscrew_close() status %4.4x, Tx status %2.2x.\n", + dev->name, inw(ioaddr + EL3_STATUS), + inb(ioaddr + TxStatus)); + printk("%s: corkscrew close stats: rx_nocopy %d rx_copy %d" + " tx_queued %d.\n", dev->name, rx_nocopy, rx_copy, + queued_packet); } del_timer(&vp->timer); @@ -1337,28 +1393,20 @@ /* Turn off thinnet power. Green! */ outw(StopCoax, ioaddr + EL3_CMD); -#ifdef SA_SHIRQ free_irq(dev->irq, dev); -#else - free_irq(dev->irq); - irq2dev_map[dev->irq] = 0; -#endif outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD); update_stats(ioaddr, dev); - if (vp->full_bus_master_rx) { /* Free Boomerang bus master Rx buffers. */ + if (vp->full_bus_master_rx) { /* Free Boomerang bus master Rx buffers. */ outl(0, ioaddr + UpListPtr); for (i = 0; i < RX_RING_SIZE; i++) if (vp->rx_skbuff[i]) { -#if LINUX_VERSION_CODE < 0x20100 - vp->rx_skbuff[i]->free = 1; -#endif - dev_kfree_skb (vp->rx_skbuff[i]); + dev_kfree_skb(vp->rx_skbuff[i]); vp->rx_skbuff[i] = 0; } } - if (vp->full_bus_master_tx) { /* Free Boomerang bus master Tx buffers. */ + if (vp->full_bus_master_tx) { /* Free Boomerang bus master Tx buffers. */ outl(0, ioaddr + DownListPtr); for (i = 0; i < TX_RING_SIZE; i++) if (vp->tx_skbuff[i]) { @@ -1372,13 +1420,13 @@ return 0; } -static struct enet_statistics * -vortex_get_stats(struct net_device *dev) +static struct enet_statistics *corkscrew_get_stats(struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; unsigned long flags; - if (dev->start) { + if (test_bit(LINK_STATE_START, &dev->state)) { save_flags(flags); cli(); update_stats(dev->base_addr, dev); @@ -1396,21 +1444,23 @@ */ static void update_stats(int ioaddr, struct net_device *dev) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; + struct corkscrew_private *vp = + (struct corkscrew_private *) dev->priv; /* Unlike the 3c5x9 we need not turn off stats updates while reading. */ /* Switch to the stats window, and read everything. */ EL3WINDOW(6); - vp->stats.tx_carrier_errors += inb(ioaddr + 0); - vp->stats.tx_heartbeat_errors += inb(ioaddr + 1); - /* Multiple collisions. */ inb(ioaddr + 2); - vp->stats.collisions += inb(ioaddr + 3); - vp->stats.tx_window_errors += inb(ioaddr + 4); - vp->stats.rx_fifo_errors += inb(ioaddr + 5); - vp->stats.tx_packets += inb(ioaddr + 6); - vp->stats.tx_packets += (inb(ioaddr + 9)&0x30) << 4; - /* Rx packets */ inb(ioaddr + 7); /* Must read to clear */ - /* Tx deferrals */ inb(ioaddr + 8); + vp->stats.tx_carrier_errors += inb(ioaddr + 0); + vp->stats.tx_heartbeat_errors += inb(ioaddr + 1); + /* Multiple collisions. */ inb(ioaddr + 2); + vp->stats.collisions += inb(ioaddr + 3); + vp->stats.tx_window_errors += inb(ioaddr + 4); + vp->stats.rx_fifo_errors += inb(ioaddr + 5); + vp->stats.tx_packets += inb(ioaddr + 6); + vp->stats.tx_packets += (inb(ioaddr + 9) & 0x30) << 4; + /* Rx packets */ inb(ioaddr + 7); + /* Must read to clear */ + /* Tx deferrals */ inb(ioaddr + 8); /* Don't bother with register 9, an extension of registers 6&7. If we do use the 6&7 values the atomic update assumption above is invalid. */ @@ -1429,18 +1479,18 @@ The Vortex chip has no documented multicast filter, so the only multicast setting is to receive all multicast frames. At least the chip has a very clean way to set the mode, unlike many others. */ -static void -set_rx_mode(struct net_device *dev) +static void set_rx_mode(struct net_device *dev) { int ioaddr = dev->base_addr; short new_mode; if (dev->flags & IFF_PROMISC) { - if (vortex_debug > 3) - printk("%s: Setting promiscuous mode.\n", dev->name); - new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast|RxProm; - } else if ((dev->mc_list) || (dev->flags & IFF_ALLMULTI)) { - new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast; + if (corkscrew_debug > 3) + printk("%s: Setting promiscuous mode.\n", + dev->name); + new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm; + } else if ((dev->mc_list) || (dev->flags & IFF_ALLMULTI)) { + new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast; } else new_mode = SetRxFilter | RxStation | RxBroadcast; @@ -1448,24 +1498,26 @@ } #ifdef MODULE -void -cleanup_module(void) +void cleanup_module(void) { struct net_device *next_dev; /* No need to check MOD_IN_USE, as sys_delete_module() checks. */ - while (root_vortex_dev) { - next_dev = ((struct vortex_private *)root_vortex_dev->priv)->next_module; - if (root_vortex_dev->dma) - free_dma(root_vortex_dev->dma); - unregister_netdev(root_vortex_dev); - outw(TotalReset, root_vortex_dev->base_addr + EL3_CMD); - release_region(root_vortex_dev->base_addr, CORKSCREW_TOTAL_SIZE); - kfree(root_vortex_dev); - root_vortex_dev = next_dev; + while (root_corkscrew_dev) { + next_dev = + ((struct corkscrew_private *) root_corkscrew_dev-> + priv)->next_module; + if (root_corkscrew_dev->dma) + free_dma(root_corkscrew_dev->dma); + unregister_netdev(root_corkscrew_dev); + outw(TotalReset, root_corkscrew_dev->base_addr + EL3_CMD); + release_region(root_corkscrew_dev->base_addr, + CORKSCREW_TOTAL_SIZE); + kfree(root_corkscrew_dev); + root_corkscrew_dev = next_dev; } } -#endif /* MODULE */ +#endif /* MODULE */ /* * Local variables: diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c523.c linux/drivers/net/3c523.c --- v2.3.43/linux/drivers/net/3c523.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/3c523.c Thu Feb 10 14:54:11 2000 @@ -297,7 +297,7 @@ alloc586(dev); init586(dev); startrecv586(dev); - netif_wake_queue(dev); + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; /* most done by init */ } diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c527.c linux/drivers/net/3c527.c --- v2.3.43/linux/drivers/net/3c527.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/3c527.c Fri Feb 11 11:30:10 2000 @@ -902,7 +902,7 @@ mc32_rx_begin(dev); mc32_tx_begin(dev); - netif_wake_queue(dev); + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; @@ -1156,7 +1156,7 @@ basically a FIFO queue of buffers matching the card ring */ lp->net_stats.tx_bytes+=lp->tx_skb[lp->tx_skb_top]->len; - dev_kfree_skb(lp->tx_skb[lp->tx_skb_top]); + dev_kfree_skb_irq(lp->tx_skb[lp->tx_skb_top]); lp->tx_skb[lp->tx_skb_top]=NULL; lp->tx_skb_top++; lp->tx_skb_top&=(TX_RING_MAX-1); diff -u --recursive --new-file v2.3.43/linux/drivers/net/3c59x.c linux/drivers/net/3c59x.c --- v2.3.43/linux/drivers/net/3c59x.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/3c59x.c Fri Feb 11 08:25:33 2000 @@ -14,6 +14,7 @@ Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771 Version history: + 0.99H+lk0.9 - David S. Miller - softnet, PCI DMA updates 0.99H+lk1.0 - Jeff Garzik Remove compatibility defines for kernel versions < 2.2.x. Update for new 2.3.x module interface diff -u --recursive --new-file v2.3.43/linux/drivers/net/82596.c linux/drivers/net/82596.c --- v2.3.43/linux/drivers/net/82596.c Thu Nov 11 20:11:39 1999 +++ linux/drivers/net/82596.c Fri Feb 11 08:25:33 2000 @@ -164,6 +164,8 @@ #define RX_SUSPEND 0x0030 #define RX_ABORT 0x0040 +#define TX_TIMEOUT 5 + struct i596_reg { unsigned short porthi; unsigned short portlo; @@ -267,6 +269,7 @@ struct tx_cmd tx_cmds[TX_RING_SIZE]; struct i596_tbd tbds[TX_RING_SIZE]; int next_tx_cmd; + spinlock_t lock; }; char init_setup[] = @@ -296,6 +299,7 @@ static int i596_close(struct net_device *dev); static struct net_device_stats *i596_get_stats(struct net_device *dev); static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd); +static void i596_tx_timeout (struct net_device *dev); static void print_eth(char *); static void set_multicast_list(struct net_device *dev); @@ -561,8 +565,7 @@ boguscnt = 200000; - save_flags(flags); - cli(); + spin_lock_irqsave (&lp->lock, flags); while (lp->scb.command) if (--boguscnt == 0) { @@ -573,7 +576,7 @@ lp->scb.command = RX_START; CA(dev); - restore_flags(flags); + spin_unlock_irqrestore (&lp->lock, flags); boguscnt = 2000; while (lp->scb.command) @@ -778,8 +781,7 @@ if (i596_debug > 1) printk("i596_reset\n"); - save_flags(flags); - cli(); + spin_lock_irqsave (&lp->lock, flags); while (lp->scb.command) if (--boguscnt == 0) { @@ -787,8 +789,8 @@ lp->scb.status, lp->scb.command); break; } - dev->start = 0; - dev->tbusy = 1; + + netif_stop_queue(dev); lp->scb.command = CUC_ABORT | RX_ABORT; CA(dev); @@ -802,14 +804,12 @@ lp->scb.status, lp->scb.command); break; } - restore_flags(flags); + spin_unlock_irqrestore (&lp->lock, flags); i596_cleanup_cmd(lp); i596_rx(dev); - dev->start = 1; - dev->tbusy = 0; - dev->interrupt = 0; + netif_start_queue(dev); init_i596_mem(dev); } @@ -826,8 +826,8 @@ cmd->status = 0; cmd->command |= (CMD_EOL | CMD_INTR); cmd->next = (struct i596_cmd *) I596_NULL; - save_flags(flags); - cli(); + + spin_lock_irqsave (&lp->lock, flags); /* * RGH 300597: Looks to me like there could be a race condition @@ -857,7 +857,8 @@ lp->cmd_backlog++; lp->cmd_head = WSWAPcmd(lp->scb.cmd); /* Is this redundant? RGH 300597 */ - restore_flags(flags); + + spin_unlock_irqrestore (&lp->lock, flags); if (lp->cmd_backlog > max_cmd_backlog) { unsigned long tickssofar = jiffies - lp->last_cmd; @@ -886,9 +887,8 @@ #endif init_rx_bufs(dev); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue(dev); + MOD_INC_USE_COUNT; /* Initialize the 82596 memory */ @@ -897,51 +897,53 @@ return 0; /* Always succeed */ } -static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev) +static void i596_tx_timeout (struct net_device *dev) { struct i596_private *lp = (struct i596_private *) dev->priv; int ioaddr = dev->base_addr; + + /* Transmitter timeout, serious problems. */ + printk ("%s: transmit timed out, status resetting.\n", dev->name); + + lp->stats.tx_errors++; + + /* Try to restart the adaptor */ + if (lp->last_restart == lp->stats.tx_packets) { + if (i596_debug > 1) + printk ("Resetting board.\n"); + + /* Shutdown and restart */ + i596_reset (dev, lp, ioaddr); + } else { + /* Issue a channel attention signal */ + if (i596_debug > 1) + printk ("Kicking board.\n"); + lp->scb.command = CUC_START | RX_START; + CA (dev); + lp->last_restart = lp->stats.tx_packets; + } + + dev->trans_start = jiffies; + netif_wake_queue (dev); +} + + +static int i596_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct i596_private *lp = (struct i596_private *) dev->priv; struct tx_cmd *tx_cmd; struct i596_tbd *tbd; if (i596_debug > 2) printk("%s: 82596 start xmit\n", dev->name); - /* Transmitter timeout, serious problems. */ - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; - printk("%s: transmit timed out, status resetting.\n", - dev->name); - lp->stats.tx_errors++; - /* Try to restart the adaptor */ - if (lp->last_restart == lp->stats.tx_packets) { - if (i596_debug > 1) - printk("Resetting board.\n"); - - /* Shutdown and restart */ - i596_reset(dev, lp, ioaddr); - } else { - /* Issue a channel attention signal */ - if (i596_debug > 1) - printk("Kicking board.\n"); - lp->scb.command = CUC_START | RX_START; - CA(dev); - lp->last_restart = lp->stats.tx_packets; - } - dev->tbusy = 0; - dev->trans_start = jiffies; - } if (i596_debug > 3) printk("%s: i596_start_xmit(%x,%x) called\n", dev->name, skb->len, (unsigned int)skb->data); - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void *) &dev->tbusy) != 0) - printk("%s: Transmitter access conflict.\n", dev->name); - else { + netif_stop_queue(dev); + + { short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; dev->trans_start = jiffies; @@ -982,7 +984,7 @@ } } - dev->tbusy = 0; + netif_start_queue(dev); return 0; } @@ -1086,11 +1088,14 @@ printk(version); /* The 82596-specific entries in the device structure. */ - dev->open = &i596_open; - dev->stop = &i596_close; - dev->hard_start_xmit = &i596_start_xmit; - dev->get_stats = &i596_get_stats; - dev->set_multicast_list = &set_multicast_list; + dev->open = i596_open; + dev->stop = i596_close; + dev->hard_start_xmit = i596_start_xmit; + dev->get_stats = i596_get_stats; + dev->set_multicast_list = set_multicast_list; + dev->tx_timeout = i596_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; + dev->mem_start = (int)__get_free_pages(GFP_ATOMIC, 0); dev->priv = (void *)(dev->mem_start); @@ -1110,6 +1115,7 @@ lp->scb.command = 0; lp->scb.cmd = (struct i596_cmd *) I596_NULL; lp->scb.rfd = (struct i596_rfd *) I596_NULL; + lp->lock = SPIN_LOCK_UNLOCKED; return 0; } @@ -1137,14 +1143,10 @@ if (i596_debug > 3) printk("%s: i596_interrupt(): irq %d\n", dev->name, irq); - if (dev->interrupt) - printk("%s: Re-entering the interrupt handler.\n", dev->name); - - dev->interrupt = 1; - ioaddr = dev->base_addr; - lp = (struct i596_private *) dev->priv; + + spin_lock (&lp->lock); while (lp->scb.command) if (--boguscnt == 0) { @@ -1248,7 +1250,8 @@ ptr = WSWAPcmd(ptr->next); } - if ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && (dev->start)) + if ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && + (test_bit(LINK_STATE_START, &dev->state))) ack_cmd |= CUC_START; lp->scb.cmd = WSWAPcmd(lp->cmd_head); } @@ -1257,7 +1260,7 @@ printk("%s: i596 interrupt received a frame.\n", dev->name); /* Only RX_START if stopped - RGH 07-07-96 */ if (status & 0x1000) { - if (dev->start) + if (test_bit(LINK_STATE_START, &dev->state)) ack_cmd |= RX_START; if (i596_debug > 1) printk("%s: i596 interrupt receive unit inactive %x.\n", dev->name, status & 0x00f0); @@ -1304,7 +1307,8 @@ if (i596_debug > 4) printk("%s: exiting interrupt.\n", dev->name); - dev->interrupt = 0; + spin_unlock (&lp->lock); + return; } @@ -1314,8 +1318,7 @@ int boguscnt = 2000; unsigned long flags; - dev->start = 0; - dev->tbusy = 1; + netif_stop_queue(dev); if (i596_debug > 1) printk("%s: Shutting down ethercard, status was %4.4x.\n", diff -u --recursive --new-file v2.3.43/linux/drivers/net/8390.c linux/drivers/net/8390.c --- v2.3.43/linux/drivers/net/8390.c Thu Feb 10 17:11:09 2000 +++ linux/drivers/net/8390.c Sat Feb 12 09:52:30 2000 @@ -567,7 +567,6 @@ printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n", ei_local->name, ei_local->lasttx, ei_local->tx1); ei_local->tx1 = 0; - netif_start_queue(dev); if (ei_local->tx2 > 0) { ei_local->txing = 1; @@ -584,7 +583,6 @@ printk("%s: bogus last_tx_buffer %d, tx2=%d.\n", ei_local->name, ei_local->lasttx, ei_local->tx2); ei_local->tx2 = 0; - netif_start_queue(dev); if (ei_local->tx1 > 0) { ei_local->txing = 1; @@ -604,7 +602,6 @@ * Single Tx buffer: mark it free so another packet can be loaded. */ ei_local->txing = 0; - netif_start_queue(dev); #endif /* Minimize Tx latency: update the statistics after we restart TXing. */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/acenic.c linux/drivers/net/acenic.c --- v2.3.43/linux/drivers/net/acenic.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/acenic.c Fri Feb 11 11:20:12 2000 @@ -2,7 +2,7 @@ * acenic.c: Linux driver for the Alteon AceNIC Gigabit Ethernet card * and other Tigon based cards. * - * Copyright 1998, 1999 by Jes Sorensen, . + * Copyright 1998-2000 by Jes Sorensen, . * * Thanks to Alteon and 3Com for providing hardware and documentation * enabling me to write this driver. @@ -17,16 +17,21 @@ * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * - * Additional work by Pete Wyckoff for initial - * Alpha and trace dump support. The trace dump support has not been - * integrated yet however. - * - * Big-endian+Sparc fixes and conversion to new PCI dma mapping - * infrastructure by David S. Miller . + * Additional credits: + * Pete Wyckoff : Initial Linux/Alpha and trace + * dump support. The trace dump support has not been + * integrated yet however. + * Troy Benjegerdes: Big Endian (PPC) patches. + * Nate Stahl: Better out of memory handling and stats support. + * Aman Singla: Nasty race between interrupt handler and tx code dealing + * with 'testing the tx_ret_csm and setting tx_full' + * David S. Miller : conversion to new PCI dma mapping + * infrastructure and Sparc support */ #include #include +#include #include #include #include @@ -38,6 +43,10 @@ #include #include #include + +#undef ETHTOOL +#undef INDEX_DEBUG + #ifdef ETHTOOL #include #endif @@ -50,7 +59,6 @@ #include #include - #ifdef CONFIG_ACENIC_OMIT_TIGON_I #define ACE_IS_TIGON_I(ap) 0 #else @@ -85,6 +93,62 @@ #define wmb() mb() #endif +#ifndef __exit +#define __exit +#endif + +#if (LINUX_VERSION_CODE < 0x02030e) +#define net_device device +#endif + +#if (LINUX_VERSION_CODE >= 0x02031b) +#define NEW_NETINIT +#endif + +#if (LINUX_VERSION_CODE < 0x02032a) +typedef u32 dma_addr_t; + +static inline void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, + dma_addr_t *dma_handle) +{ + void *virt_ptr; + + virt_ptr = kmalloc(size, GFP_KERNEL); + *dma_handle = virt_to_bus(virt_ptr); + return virt_ptr; +} +#define pci_free_consistent(cookie, size, ptr, dma_ptr) kfree(ptr) +#define pci_map_single(cookie, address, size) virt_to_bus(address) +#define pci_unmap_single(cookie, address, size) +#endif + +#if (LINUX_VERSION_CODE < 0x02032b) +/* + * SoftNet + */ +#define dev_kfree_skb_irq(a) dev_kfree_skb(a) +#define netif_wake_queue(dev) clear_bit(0, &dev->tbusy) +#define netif_stop_queue(dev) set_bit(0, &dev->tbusy) + +static inline void netif_start_queue(struct net_device *dev) +{ + dev->tbusy = 0; + dev->interrupt = 0; + dev->start = 1; +} + +#define ace_mark_net_bh(foo) mark_bh(foo) +#define ace_if_busy(dev) dev->tbusy +#define ace_if_running(dev) dev->start +#define ace_if_down(dev) {do{dev->start = 0;}while (0);} +#else +#define NET_BH 0 +#define ace_mark_net_bh(foo) {do{} while(0);} +#define ace_if_busy(dev) test_bit(LINK_STATE_XOFF, &dev->state) +#define ace_if_running(dev) test_bit(LINK_STATE_START, &dev->state) +#define ace_if_down(dev) {do{} while(0);} +#endif + #include "acenic.h" /* @@ -98,9 +162,10 @@ /* * This driver currently supports Tigon I and Tigon II based cards - * including the Alteon AceNIC and the 3Com 3C985. The driver should - * also work on the NetGear GA620, however I have not been able to - * test that myself. + * including the Alteon AceNIC, the 3Com 3C985[B] and NetGear + * GA620. The driver should also work on the SGI, DEC and Farallon + * versions of the card, however I have not been able to test that + * myself. * * This card is really neat, it supports receive hardware checksumming * and jumbo frames (up to 9000 bytes) and does a lot of work in the @@ -286,115 +351,29 @@ static int tx_ratio[8] = {0, }; static int dis_pci_mem_inval[8] = {1, 1, 1, 1, 1, 1, 1, 1}; -static const char __initdata *version = "acenic.c: v0.34 09/03/99 Jes Sorensen (Jes.Sorensen@cern.ch)\n"; +static const char __initdata *version = + "acenic.c: v0.39 02/11/2000 Jes Sorensen, linux-acenic@SunSITE.auc.dk\n" + " http://home.cern.ch/~jes/gige/acenic.html\n"; static struct net_device *root_dev = NULL; static int probed __initdata = 0; -void ace_free_descriptors(struct net_device *dev) -{ - struct ace_private *ap = dev->priv; - int size; - if (ap->rx_std_ring != NULL) { - size = (sizeof(struct rx_desc) * - (RX_STD_RING_ENTRIES + - RX_JUMBO_RING_ENTRIES + - RX_MINI_RING_ENTRIES + - RX_RETURN_RING_ENTRIES)); - pci_free_consistent(ap->pdev, size, - ap->rx_std_ring, - ap->rx_ring_base_dma); - ap->rx_std_ring = NULL; - ap->rx_jumbo_ring = NULL; - ap->rx_mini_ring = NULL; - ap->rx_return_ring = NULL; - } - if (ap->evt_ring != NULL) { - size = (sizeof(struct event) * EVT_RING_ENTRIES); - pci_free_consistent(ap->pdev, size, - ap->evt_ring, - ap->evt_ring_dma); - ap->evt_ring = NULL; - } - if (ap->evt_prd != NULL) { - pci_free_consistent(ap->pdev, sizeof(u32), - (void *)ap->evt_prd, ap->evt_prd_dma); - ap->evt_prd = NULL; - } - if (ap->rx_ret_prd != NULL) { - pci_free_consistent(ap->pdev, sizeof(u32), - (void *)ap->rx_ret_prd, ap->rx_ret_prd_dma); - ap->rx_ret_prd = NULL; - } - if (ap->tx_csm != NULL) { - pci_free_consistent(ap->pdev, sizeof(u32), - (void *)ap->tx_csm, ap->tx_csm_dma); - ap->tx_csm = NULL; - } -} - -int ace_allocate_descriptors(struct net_device *dev) +#ifdef NEW_NETINIT +int __init acenic_probe (void) +#else +int __init acenic_probe (struct net_device *dev) +#endif { - struct ace_private *ap = dev->priv; - int size; - - size = (sizeof(struct rx_desc) * - (RX_STD_RING_ENTRIES + - RX_JUMBO_RING_ENTRIES + - RX_MINI_RING_ENTRIES + - RX_RETURN_RING_ENTRIES)); - - ap->rx_std_ring = pci_alloc_consistent(ap->pdev, size, - &ap->rx_ring_base_dma); - if (ap->rx_std_ring == NULL) - goto fail; - - ap->rx_jumbo_ring = ap->rx_std_ring + RX_STD_RING_ENTRIES; - ap->rx_mini_ring = ap->rx_jumbo_ring + RX_JUMBO_RING_ENTRIES; - ap->rx_return_ring = ap->rx_mini_ring + RX_MINI_RING_ENTRIES; - - size = (sizeof(struct event) * EVT_RING_ENTRIES); - - ap->evt_ring = pci_alloc_consistent(ap->pdev, size, - &ap->evt_ring_dma); - - if (ap->evt_ring == NULL) - goto fail; - - ap->evt_prd = pci_alloc_consistent(ap->pdev, sizeof(u32), - &ap->evt_prd_dma); - if (ap->evt_prd == NULL) - goto fail; - - ap->rx_ret_prd = pci_alloc_consistent(ap->pdev, sizeof(u32), - &ap->rx_ret_prd_dma); - if (ap->rx_ret_prd == NULL) - goto fail; - - ap->tx_csm = pci_alloc_consistent(ap->pdev, sizeof(u32), - &ap->tx_csm_dma); - if (ap->tx_csm == NULL) - goto fail; - - return 0; - -fail: - /* Clean up. */ - ace_free_descriptors(dev); - iounmap(ap->regs); - unregister_netdev(dev); - return 1; -} +#ifdef NEW_NETINIT + struct net_device *dev; +#endif -static int __init acenic_probe(void) -{ - int boards_found = 0; - int version_disp; struct ace_private *ap; struct pci_dev *pdev = NULL; - struct net_device *dev; + int boards_found = 0; + int version_disp; if (probed) return -ENODEV; @@ -405,7 +384,7 @@ version_disp = 0; - while ((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET<<8, pdev))){ + while ((pdev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET<<8, pdev))) { if (!((pdev->vendor == PCI_VENDOR_ID_ALTEON) && (pdev->device == PCI_DEVICE_ID_ALTEON_ACENIC)) && @@ -425,19 +404,19 @@ dev = init_etherdev(NULL, sizeof(struct ace_private)); - if (dev == NULL){ - printk(KERN_ERR "acenic: Unable to allocate net_device " - "structure!\n"); + if (dev == NULL) { + printk(KERN_ERR "acenic: Unable to allocate " + "net_device structure!\n"); break; } if (!dev->priv) dev->priv = kmalloc(sizeof(*ap), GFP_KERNEL); - if (!dev->priv) - { - printk(KERN_ERR "acenic: Unable to allocate memory.\n"); + if (!dev->priv) { + printk(KERN_ERR "acenic: Unable to allocate memory\n"); return -ENOMEM; } + ap = dev->priv; ap->pdev = pdev; @@ -463,9 +442,20 @@ pci_read_config_word(pdev, PCI_COMMAND, &ap->pci_command); + /* OpenFirmware on Mac's does not set this - DOH.. */ + if (!ap->pci_command & PCI_COMMAND_MEMORY) { + printk(KERN_INFO "%s: Enabling PCI Memory Mapped " + "access - was not enabled by BIOS/Firmware\n", + dev->name); + ap->pci_command = ap->pci_command | PCI_COMMAND_MEMORY; + pci_write_config_word(ap->pdev, PCI_COMMAND, + ap->pci_command); + wmb(); + } + pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &ap->pci_latency); - if (ap->pci_latency <= 0x40){ + if (ap->pci_latency <= 0x40) { ap->pci_latency = 0x40; pci_write_config_byte(pdev, PCI_LATENCY_TIMER, ap->pci_latency); @@ -477,51 +467,62 @@ /* NOTE: Cache line size is in 32-bit word units. */ pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x10); #endif + /* * Remap the regs into kernel space - this is abuse of * dev->base_addr since it was means for I/O port * addresses but who gives a damn. */ +#if (LINUX_VERSION_CODE < 0x02030d) + dev->base_addr = pdev->base_address[0]; +#else dev->base_addr = pdev->resource[0].start; +#endif ap->regs = (struct ace_regs *)ioremap(dev->base_addr, 0x4000); - if (!ap->regs){ + if (!ap->regs) { printk(KERN_ERR "%s: Unable to map I/O register, " "AceNIC %i will be disabled.\n", dev->name, boards_found); break; } - switch(pdev->vendor){ + switch(pdev->vendor) { case PCI_VENDOR_ID_ALTEON: - sprintf(ap->name, "AceNIC Gigabit Ethernet"); + strncpy(ap->name, "AceNIC Gigabit Ethernet", + sizeof (ap->name)); printk(KERN_INFO "%s: Alteon AceNIC ", dev->name); break; case PCI_VENDOR_ID_3COM: - sprintf(ap->name, "3Com 3C985 Gigabit Ethernet"); + strncpy(ap->name, "3Com 3C985 Gigabit Ethernet", + sizeof (ap->name)); printk(KERN_INFO "%s: 3Com 3C985 ", dev->name); break; case PCI_VENDOR_ID_NETGEAR: - sprintf(ap->name, "NetGear GA620 Gigabit Ethernet"); + strncpy(ap->name, "NetGear GA620 Gigabit Ethernet", + sizeof (ap->name)); printk(KERN_INFO "%s: NetGear GA620 ", dev->name); break; case PCI_VENDOR_ID_DEC: if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9000SX) { - sprintf(ap->name, "Farallon PN9000-SX " - "Gigabit Ethernet"); + strncpy(ap->name, "Farallon PN9000-SX " + "Gigabit Ethernet", sizeof (ap->name)); printk(KERN_INFO "%s: Farallon PN9000-SX ", dev->name); break; } case PCI_VENDOR_ID_SGI: - sprintf(ap->name, "SGI AceNIC Gigabit Ethernet"); + strncpy(ap->name, "SGI AceNIC Gigabit Ethernet", + sizeof (ap->name)); printk(KERN_INFO "%s: SGI AceNIC ", dev->name); break; default: - sprintf(ap->name, "Unknown AceNIC based Gigabit Ethernet"); + strncpy(ap->name, "Unknown AceNIC based Gigabit " + "Ethernet", sizeof (ap->name)); printk(KERN_INFO "%s: Unknown AceNIC ", dev->name); break; } + ap->name [sizeof (ap->name) - 1] = '\0'; printk("Gigabit Ethernet at 0x%08lx, irq %i\n", dev->base_addr, dev->irq); @@ -566,6 +567,7 @@ } +#ifdef MODULE MODULE_AUTHOR("Jes Sorensen "); MODULE_DESCRIPTION("AceNIC/3C985 Gigabit Ethernet driver"); MODULE_PARM(link, "1-" __MODULE_STRING(8) "i"); @@ -576,25 +578,14 @@ MODULE_PARM(max_rx_desc, "1-" __MODULE_STRING(8) "i"); -static int __init acenic_init_module (void) -{ - int cards; - - root_dev = NULL; - - cards = acenic_probe(); - return cards ? 0 : -ENODEV; -} - - -static void __exit acenic_cleanup_module (void) +void __exit ace_module_cleanup(void) { struct ace_private *ap; struct ace_regs *regs; struct net_device *next; short i; - while (root_dev){ + while (root_dev) { next = ((struct ace_private *)root_dev->priv)->next; ap = (struct ace_private *)root_dev->priv; @@ -629,11 +620,10 @@ mapping = ap->skb->rx_std_skbuff[i].mapping; ap->rx_std_ring[i].size = 0; - set_aceaddr(&ap->rx_std_ring[i].addr, 0); + ap->skb->rx_std_skbuff[i].skb = NULL; pci_unmap_single(ap->pdev, mapping, ACE_STD_BUFSIZE - (2 + 16)); dev_kfree_skb(skb); - ap->skb->rx_std_skbuff[i].skb = NULL; } } if (ap->version >= 2) { @@ -644,25 +634,41 @@ dma_addr_t mapping; mapping = ap->skb->rx_mini_skbuff[i].mapping; - ap->rx_mini_ring[i].size = 0; - set_aceaddr(&ap->rx_mini_ring[i].addr, 0); + ap->skb->rx_mini_skbuff[i].skb = NULL; pci_unmap_single(ap->pdev, mapping, ACE_MINI_BUFSIZE - (2 + 16)); dev_kfree_skb(skb); } } } + for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) { + struct sk_buff *skb = ap->skb->rx_jumbo_skbuff[i].skb; + if (skb) { + dma_addr_t mapping; + + mapping = ap->skb->rx_jumbo_skbuff[i].mapping; + + ap->rx_jumbo_ring[i].size = 0; + ap->skb->rx_jumbo_skbuff[i].skb = NULL; + pci_unmap_single(ap->pdev, mapping, + ACE_JUMBO_BUFSIZE - (2 + 16)); + dev_kfree_skb(skb); + } + } ace_free_descriptors(root_dev); - iounmap(regs); - if(ap->trace_buf) + if (ap->trace_buf) kfree(ap->trace_buf); - pci_free_consistent(ap->pdev, sizeof(struct ace_info), - ap->info, ap->info_dma); - kfree(ap->skb); - free_irq(root_dev->irq, root_dev); + if (ap->info) + pci_free_consistent(ap->pdev, sizeof(struct ace_info), + ap->info, ap->info_dma); + if (ap->skb) + kfree(ap->skb); + if (root_dev->irq) + free_irq(root_dev->irq, root_dev); + iounmap(regs); unregister_netdev(root_dev); kfree(root_dev); @@ -670,8 +676,137 @@ } } -module_init(acenic_init_module); -module_exit(acenic_cleanup_module); + +#if (LINUX_VERSION_CODE < 0x02032b) +int init_module(void) +{ + return ace_module_init(); +} + + +void cleanup_module(void) +{ + ace_module_cleanup(); +} +#endif +#endif + +int __init ace_module_init(void) +{ + int cards; + + root_dev = NULL; + +#ifdef NEW_NETINIT + cards = acenic_probe(); +#else + cards = acenic_probe(NULL); +#endif + return cards ? 0 : -ENODEV; +} + + +#if (LINUX_VERSION_CODE >= 0x02032b) +module_init(ace_module_init); +module_exit(ace_module_cleanup); +#endif + + +static void ace_free_descriptors(struct net_device *dev) +{ + struct ace_private *ap = dev->priv; + int size; + + if (ap->rx_std_ring != NULL) { + size = (sizeof(struct rx_desc) * + (RX_STD_RING_ENTRIES + + RX_JUMBO_RING_ENTRIES + + RX_MINI_RING_ENTRIES + + RX_RETURN_RING_ENTRIES)); + pci_free_consistent(ap->pdev, size, + ap->rx_std_ring, + ap->rx_ring_base_dma); + ap->rx_jumbo_ring = NULL; + ap->rx_mini_ring = NULL; + ap->rx_return_ring = NULL; + } + if (ap->evt_ring != NULL) { + size = (sizeof(struct event) * EVT_RING_ENTRIES); + pci_free_consistent(ap->pdev, size, + ap->evt_ring, + ap->evt_ring_dma); + ap->evt_ring = NULL; + } + if (ap->evt_prd != NULL) { + pci_free_consistent(ap->pdev, sizeof(u32), + (void *)ap->evt_prd, ap->evt_prd_dma); + ap->evt_prd = NULL; + } + if (ap->rx_ret_prd != NULL) { + pci_free_consistent(ap->pdev, sizeof(u32), + (void *)ap->rx_ret_prd, ap->rx_ret_prd_dma); + ap->rx_ret_prd = NULL; + } + if (ap->tx_csm != NULL) { + pci_free_consistent(ap->pdev, sizeof(u32), + (void *)ap->tx_csm, ap->tx_csm_dma); + ap->tx_csm = NULL; + } +} + + +static int ace_allocate_descriptors(struct net_device *dev) +{ + struct ace_private *ap = dev->priv; + int size; + + size = (sizeof(struct rx_desc) * + (RX_STD_RING_ENTRIES + + RX_JUMBO_RING_ENTRIES + + RX_MINI_RING_ENTRIES + + RX_RETURN_RING_ENTRIES)); + + ap->rx_std_ring = pci_alloc_consistent(ap->pdev, size, + &ap->rx_ring_base_dma); + if (ap->rx_std_ring == NULL) + goto fail; + + ap->rx_jumbo_ring = ap->rx_std_ring + RX_STD_RING_ENTRIES; + ap->rx_mini_ring = ap->rx_jumbo_ring + RX_JUMBO_RING_ENTRIES; + ap->rx_return_ring = ap->rx_mini_ring + RX_MINI_RING_ENTRIES; + + size = (sizeof(struct event) * EVT_RING_ENTRIES); + + ap->evt_ring = pci_alloc_consistent(ap->pdev, size, + &ap->evt_ring_dma); + + if (ap->evt_ring == NULL) + goto fail; + + ap->evt_prd = pci_alloc_consistent(ap->pdev, sizeof(u32), + &ap->evt_prd_dma); + if (ap->evt_prd == NULL) + goto fail; + + ap->rx_ret_prd = pci_alloc_consistent(ap->pdev, sizeof(u32), + &ap->rx_ret_prd_dma); + if (ap->rx_ret_prd == NULL) + goto fail; + + ap->tx_csm = pci_alloc_consistent(ap->pdev, sizeof(u32), + &ap->tx_csm_dma); + if (ap->tx_csm == NULL) + goto fail; + + return 0; + +fail: + /* Clean up. */ + ace_free_descriptors(dev); + iounmap(ap->regs); + unregister_netdev(dev); + return 1; +} /* @@ -694,19 +829,38 @@ { struct ace_private *ap; struct ace_regs *regs; - struct ace_info *info; + struct ace_info *info = NULL; unsigned long tmp_ptr, myjif; u32 tig_ver, mac1, mac2, tmp, pci_state; + int ecode = 0; short i; ap = dev->priv; regs = ap->regs; /* + * aman@sgi.com - its useful to do a NIC reset here to + * address the `Firmware not running' problem subsequent + * to any crashes involving the NIC + */ + writel(HW_RESET, ®s->HostCtrl); + wmb(); + + /* * Don't access any other registes before this point! */ +#ifdef __BIG_ENDIAN + /* + * This will most likely need BYTE_SWAP once we switch + * to using __raw_writel() + */ + writel(((WORD_SWAP | CLR_INT) | + ((WORD_SWAP | CLR_INT) << 24)), + ®s->HostCtrl); +#else writel((CLR_INT | WORD_SWAP | ((CLR_INT | WORD_SWAP) << 24)), ®s->HostCtrl); +#endif mb(); /* @@ -720,7 +874,7 @@ switch(tig_ver){ #ifndef CONFIG_ACENIC_OMIT_TIGON_I case 4: - printk(KERN_INFO" Tigon I (Rev. 4), Firmware: %i.%i.%i, ", + printk(KERN_INFO" Tigon I (Rev. 4), Firmware: %i.%i.%i, ", tigonFwReleaseMajor, tigonFwReleaseMinor, tigonFwReleaseFix); writel(0, ®s->LocalCtrl); @@ -732,6 +886,11 @@ tig_ver, tigon2FwReleaseMajor, tigon2FwReleaseMinor, tigon2FwReleaseFix); writel(readl(®s->CpuBCtrl) | CPU_HALT, ®s->CpuBCtrl); + /* + * The SRAM bank size does _not_ indicate the amount + * of memory on the card, it controls the bank size! + * Ie. a 1MB AceNIC will have two banks of 512KB. + */ writel(SRAM_BANK_512K, ®s->LocalCtrl); writel(SYNC_SRAM_TIMING, ®s->MiscCfg); ap->version = 2; @@ -739,7 +898,8 @@ default: printk(KERN_INFO" Unsupported Tigon version detected (%i), ", tig_ver); - return -ENODEV; + ecode = -ENODEV; + goto init_error; } /* @@ -749,18 +909,33 @@ * value a second time works as well. This is what caused the * `Firmware not running' problem on the Tigon II. */ +#ifdef __LITTLE_ENDIAN writel(ACE_BYTE_SWAP_DATA | ACE_WARN | ACE_FATAL | ACE_WORD_SWAP | ACE_NO_JUMBO_FRAG, ®s->ModeStat); +#else + writel(ACE_BYTE_SWAP_DATA | ACE_WARN | ACE_FATAL | ACE_BYTE_SWAP | + ACE_WORD_SWAP | ACE_NO_JUMBO_FRAG, ®s->ModeStat); +#endif mac1 = 0; - for(i = 0; i < 4; i++){ + for(i = 0; i < 4; i++) { mac1 = mac1 << 8; - mac1 |= read_eeprom_byte(regs, 0x8c+i); + tmp = read_eeprom_byte(dev, 0x8c+i); + if (tmp < 0) { + ecode = -EIO; + goto init_error; + } else + mac1 |= (tmp & 0xff); } mac2 = 0; - for(i = 4; i < 8; i++){ + for(i = 4; i < 8; i++) { mac2 = mac2 << 8; - mac2 |= read_eeprom_byte(regs, 0x8c+i); + tmp = read_eeprom_byte(dev, 0x8c+i); + if (tmp < 0) { + ecode = -EIO; + goto init_error; + } else + mac2 |= (tmp & 0xff); } writel(mac1, ®s->MacAddrHi); @@ -778,8 +953,11 @@ dev->dev_addr[5] = mac2 & 0xff; pci_state = readl(®s->PciState); - printk(KERN_INFO " PCI bus speed: %iMHz, latency: %i clks\n", - (pci_state & PCI_66MHZ) ? 66 : 33, ap->pci_latency); + printk(KERN_INFO " PCI bus width: %i bits, speed: %iMHz, " + "latency: %i clks\n", + (pci_state & PCI_32BIT) ? 32 : 64, + (pci_state & PCI_66MHZ) ? 66 : 33, + ap->pci_latency); /* * Set the max DMA transfer size. Seems that for most systems @@ -792,7 +970,7 @@ * - that is what Alteon does for NT. */ tmp = READ_CMD_MEM | WRITE_CMD_MEM; - if (ap->version >= 2){ + if (ap->version >= 2) { tmp |= (MEM_READ_MULTIPLE | (pci_state & PCI_66MHZ)); /* * Tuning parameters only supported for 8 cards @@ -805,11 +983,11 @@ printk(KERN_INFO "%s: disabling PCI memory " "write and invalidate\n", dev->name); } - } else if (ap->pci_command & PCI_COMMAND_INVALIDATE){ + } else if (ap->pci_command & PCI_COMMAND_INVALIDATE) { printk(KERN_INFO "%s: PCI memory write & invalidate " "enabled by BIOS, enabling counter " "measures\n", dev->name); - switch(L1_CACHE_BYTES){ + switch(L1_CACHE_BYTES) { case 16: tmp |= DMA_WRITE_MAX_16; break; @@ -836,23 +1014,26 @@ * and the control blocks for the transmit and receive rings * as they need to be setup once and for all. */ - info = pci_alloc_consistent(ap->pdev, sizeof(struct ace_info), - &ap->info_dma); - if (info == NULL) - goto fail; + if (!(info = pci_alloc_consistent(ap->pdev, sizeof(struct ace_info), + &ap->info_dma))) { + ecode = -EAGAIN; + goto init_error; + } + ap->info = info; /* * Get the memory for the skb rings. */ - if (!(ap->skb = kmalloc(sizeof(struct ace_skb), GFP_KERNEL))) - goto fail; - - memset(ap->skb, 0, sizeof(struct ace_skb)); + if (!(ap->skb = kmalloc(sizeof(struct ace_skb), GFP_KERNEL))) { + ecode = -EAGAIN; + goto init_error; + } if (request_irq(dev->irq, ace_interrupt, SA_SHIRQ, ap->name, dev)) { printk(KERN_WARNING "%s: Requested IRQ %d is busy\n", dev->name, dev->irq); - goto fail; + ecode = -EAGAIN; + goto init_error; } /* @@ -862,7 +1043,15 @@ ap->next = root_dev; root_dev = dev; - ap->info = info; +#ifdef INDEX_DEBUG + spin_lock_init(&ap->debug_lock); + ap->last_tx = TX_RING_ENTRIES - 1; + ap->last_std_rx = 0; + ap->last_mini_rx = 0; +#endif + + memset(ap->info, 0, sizeof(struct ace_info)); + memset(ap->skb, 0, sizeof(struct ace_skb)); ace_load_firmware(dev); ap->fw_running = 0; @@ -900,14 +1089,14 @@ set_aceaddr(&info->stats2_ptr, (dma_addr_t) tmp_ptr); set_aceaddr(&info->rx_std_ctrl.rngptr, ap->rx_ring_base_dma); - info->rx_std_ctrl.max_len = cpu_to_le16(ACE_STD_MTU + ETH_HLEN + 4); - info->rx_std_ctrl.flags = cpu_to_le16(RCB_FLG_TCP_UDP_SUM); + info->rx_std_ctrl.max_len = ACE_STD_MTU + ETH_HLEN + 4; + info->rx_std_ctrl.flags = RCB_FLG_TCP_UDP_SUM; memset(ap->rx_std_ring, 0, RX_STD_RING_ENTRIES * sizeof(struct rx_desc)); for (i = 0; i < RX_STD_RING_ENTRIES; i++) - ap->rx_std_ring[i].flags = cpu_to_le16(BD_FLG_TCP_UDP_SUM); + ap->rx_std_ring[i].flags = BD_FLG_TCP_UDP_SUM; ap->rx_std_skbprd = 0; atomic_set(&ap->cur_rx_bufs, 0); @@ -916,14 +1105,13 @@ (ap->rx_ring_base_dma + (sizeof(struct rx_desc) * RX_STD_RING_ENTRIES))); info->rx_jumbo_ctrl.max_len = 0; - info->rx_jumbo_ctrl.flags = cpu_to_le16(RCB_FLG_TCP_UDP_SUM); + info->rx_jumbo_ctrl.flags = RCB_FLG_TCP_UDP_SUM; memset(ap->rx_jumbo_ring, 0, RX_JUMBO_RING_ENTRIES * sizeof(struct rx_desc)); for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) - ap->rx_jumbo_ring[i].flags = - cpu_to_le16(BD_FLG_TCP_UDP_SUM | BD_FLG_JUMBO); + ap->rx_jumbo_ring[i].flags = BD_FLG_TCP_UDP_SUM | BD_FLG_JUMBO; ap->rx_jumbo_skbprd = 0; atomic_set(&ap->cur_jumbo_bufs, 0); @@ -937,15 +1125,15 @@ (sizeof(struct rx_desc) * (RX_STD_RING_ENTRIES + RX_JUMBO_RING_ENTRIES)))); - info->rx_mini_ctrl.max_len = cpu_to_le16(ACE_MINI_SIZE); - info->rx_mini_ctrl.flags = cpu_to_le16(RCB_FLG_TCP_UDP_SUM); + info->rx_mini_ctrl.max_len = ACE_MINI_SIZE; + info->rx_mini_ctrl.flags = RCB_FLG_TCP_UDP_SUM; for (i = 0; i < RX_MINI_RING_ENTRIES; i++) ap->rx_mini_ring[i].flags = - cpu_to_le16(BD_FLG_TCP_UDP_SUM | BD_FLG_MINI); + BD_FLG_TCP_UDP_SUM | BD_FLG_MINI; } else { set_aceaddr(&info->rx_mini_ctrl.rngptr, 0); - info->rx_mini_ctrl.flags = cpu_to_le16(RCB_FLG_RNG_DISABLE); + info->rx_mini_ctrl.flags = RCB_FLG_RNG_DISABLE; info->rx_mini_ctrl.max_len = 0; } @@ -959,7 +1147,7 @@ RX_JUMBO_RING_ENTRIES + RX_MINI_RING_ENTRIES)))); info->rx_return_ctrl.flags = 0; - info->rx_return_ctrl.max_len = cpu_to_le16(RX_RETURN_RING_ENTRIES); + info->rx_return_ctrl.max_len = RX_RETURN_RING_ENTRIES; memset(ap->rx_return_ring, 0, RX_RETURN_RING_ENTRIES * sizeof(struct rx_desc)); @@ -969,14 +1157,14 @@ writel(TX_RING_BASE, ®s->WinBase); ap->tx_ring = (struct tx_desc *)regs->Window; - for (i = 0; i < (TX_RING_ENTRIES * sizeof(struct tx_desc) / 4); i++){ + for (i = 0; i < (TX_RING_ENTRIES * sizeof(struct tx_desc) / 4); i++) { writel(0, (unsigned long)ap->tx_ring + i * 4); } set_aceaddr(&info->tx_ctrl.rngptr, TX_RING_BASE); - info->tx_ctrl.max_len = cpu_to_le16(TX_RING_ENTRIES); + info->tx_ctrl.max_len = TX_RING_ENTRIES; #if TX_COAL_INTS_ONLY - info->tx_ctrl.flags = cpu_to_le16(RCB_FLG_COAL_INT_ONLY); + info->tx_ctrl.flags = RCB_FLG_COAL_INT_ONLY; #else info->tx_ctrl.flags = 0; #endif @@ -1044,7 +1232,7 @@ tmp = LNK_ENABLE; - if (option & 0x01){ + if (option & 0x01) { printk(KERN_INFO "%s: Setting half duplex link\n", dev->name); tmp &= ~LNK_FULL_DUPLEX; @@ -1057,7 +1245,7 @@ tmp |= LNK_100MB; if (option & 0x40) tmp |= LNK_1000MB; - if ((option & 0x70) == 0){ + if ((option & 0x70) == 0) { printk(KERN_WARNING "%s: No media speed specified, " "forcing auto negotiation\n", dev->name); tmp |= LNK_NEGOTIATE | LNK_1000MB | @@ -1070,7 +1258,7 @@ "negotiation\n", dev->name); if (option & 0x200) tmp |= LNK_RX_FLOW_CTL_Y; - if ((option & 0x400) && (ap->version >= 2)){ + if ((option & 0x400) && (ap->version >= 2)) { printk(KERN_INFO "%s: Enabling TX flow control\n", dev->name); tmp |= LNK_TX_FLOW_CTL_Y; @@ -1100,7 +1288,7 @@ ap->tx_prd = *(ap->tx_csm) = ap->tx_ret_csm = 0; wmb(); - writel(0, ®s->TxPrd); + ace_set_txprd(regs, ap, 0); writel(0, ®s->RxRetCsm); /* @@ -1113,11 +1301,29 @@ */ myjif = jiffies + 3 * HZ; while (time_before(jiffies, myjif) && !ap->fw_running); - if (!ap->fw_running){ + if (!ap->fw_running) { printk(KERN_ERR "%s: Firmware NOT running!\n", dev->name); ace_dump_trace(ap); writel(readl(®s->CpuCtrl) | CPU_HALT, ®s->CpuCtrl); - return -EBUSY; + + /* aman@sgi.com - account for badly behaving firmware/NIC: + * - have observed that the NIC may continue to generate + * interrupts for some reason; attempt to stop it - halt + * second CPU for Tigon II cards, and also clear Mb0 + * - if we're a module, we'll fail to load if this was + * the only GbE card in the system => if the kernel does + * see an interrupt from the NIC, code to handle it is + * gone and OOps! - so free_irq also + */ + if (ap->version >= 2) + writel(readl(®s->CpuBCtrl) | CPU_HALT, + ®s->CpuBCtrl); + writel(0, ®s->Mb0Lo); + free_irq(dev->irq, dev); + dev->irq = 0; + + ecode = -EBUSY; + goto init_error; } /* @@ -1137,17 +1343,15 @@ "the RX mini ring\n", dev->name); } return 0; - -fail: - if (info != NULL) - pci_free_consistent(ap->pdev, sizeof(struct ace_info), - info, ap->info_dma); - if (ap->skb != NULL) { + init_error: + if (ap->skb) { kfree(ap->skb); ap->skb = NULL; } - - return -EAGAIN; + if (ap->info) + pci_free_consistent(ap->pdev, sizeof(struct ace_info), + info, ap->info_dma); + return ecode; } @@ -1165,7 +1369,7 @@ * seconds and there is data in the transmit queue, thus we * asume the card is stuck. */ - if (le32_to_cpu(*(ap->tx_csm)) != ap->tx_ret_csm){ + if (*ap->tx_csm != ap->tx_ret_csm) { printk(KERN_WARNING "%s: Transmitter is stuck, %08x\n", dev->name, (unsigned int)readl(®s->HostCtrl)); } @@ -1248,6 +1452,9 @@ dma_addr_t mapping; skb = alloc_skb(ACE_STD_BUFSIZE, GFP_ATOMIC); + if (!skb) + break; + /* * Make sure IP header starts on a fresh cache line. */ @@ -1259,12 +1466,15 @@ rd = &ap->rx_std_ring[idx]; set_aceaddr(&rd->addr, mapping); - rd->size = cpu_to_le16(ACE_STD_MTU + ETH_HLEN + 4); - rd->idx = cpu_to_le16(idx); + rd->size = ACE_STD_MTU + ETH_HLEN + 4; + rd->idx = idx; idx = (idx + 1) % RX_STD_RING_ENTRIES; } - atomic_add(nr_bufs, &ap->cur_rx_bufs); + if (!i) + goto error_out; + + atomic_add(i, &ap->cur_rx_bufs); ap->rx_std_skbprd = idx; if (ACE_IS_TIGON_I(ap)) { @@ -1278,8 +1488,14 @@ wmb(); } + out: clear_bit(0, &ap->std_refill_busy); return; + + error_out: + printk(KERN_INFO "Out of memory when allocating " + "standard receive buffers\n"); + goto out; } @@ -1297,6 +1513,9 @@ dma_addr_t mapping; skb = alloc_skb(ACE_MINI_BUFSIZE, GFP_ATOMIC); + if (!skb) + break; + /* * Make sure the IP header ends up on a fresh cache line */ @@ -1308,20 +1527,28 @@ rd = &ap->rx_mini_ring[idx]; set_aceaddr(&rd->addr, mapping); - rd->size = cpu_to_le16(ACE_MINI_SIZE); - rd->idx = cpu_to_le16(idx); + rd->size = ACE_MINI_SIZE; + rd->idx = idx; idx = (idx + 1) % RX_MINI_RING_ENTRIES; } - atomic_add(nr_bufs, &ap->cur_mini_bufs); + if (!i) + goto error_out; + + atomic_add(i, &ap->cur_mini_bufs); ap->rx_mini_skbprd = idx; writel(idx, ®s->RxMiniPrd); wmb(); + out: clear_bit(0, &ap->mini_refill_busy); return; + error_out: + printk(KERN_INFO "Out of memory when allocating " + "mini receive buffers\n"); + goto out; } @@ -1344,6 +1571,9 @@ dma_addr_t mapping; skb = alloc_skb(ACE_JUMBO_BUFSIZE, GFP_ATOMIC); + if (!skb) + break; + /* * Make sure the IP header ends up on a fresh cache line */ @@ -1355,12 +1585,15 @@ rd = &ap->rx_jumbo_ring[idx]; set_aceaddr(&rd->addr, mapping); - rd->size = cpu_to_le16(ACE_JUMBO_MTU + ETH_HLEN + 4); - rd->idx = cpu_to_le16(idx); + rd->size = ACE_JUMBO_MTU + ETH_HLEN + 4; + rd->idx = idx; idx = (idx + 1) % RX_JUMBO_RING_ENTRIES; } - atomic_add(nr_bufs, &ap->cur_jumbo_bufs); + if (!i) + goto error_out; + + atomic_add(i, &ap->cur_jumbo_bufs); ap->rx_jumbo_skbprd = idx; if (ACE_IS_TIGON_I(ap)) { @@ -1374,52 +1607,13 @@ wmb(); } + out: clear_bit(0, &ap->jumbo_refill_busy); return; -} - - -/* - * Tell the firmware not to accept jumbos and flush the jumbo ring. - */ -static int ace_flush_jumbo_rx_ring(struct net_device *dev) -{ - struct ace_private *ap; - struct ace_regs *regs; - struct cmd cmd; - short i; - - ap = (struct ace_private *)dev->priv; - regs = ap->regs; - - if (ap->jumbo){ - cmd.evt = C_RESET_JUMBO_RNG; - cmd.code = 0; - cmd.idx = 0; - ace_issue_cmd(regs, &cmd); - - for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) { - struct sk_buff *skb; - - skb = ap->skb->rx_jumbo_skbuff[i].skb; - if (skb) { - dma_addr_t mapping; - - mapping = ap->skb->rx_jumbo_skbuff[i].mapping; - - ap->rx_jumbo_ring[i].size = 0; - set_aceaddr(&ap->rx_jumbo_ring[i].addr, 0); - pci_unmap_single(ap->pdev, mapping, - ACE_JUMBO_BUFSIZE - (2 + 16)); - dev_kfree_skb(skb); - ap->skb->rx_jumbo_skbuff[i].skb = NULL; - } - } - }else - printk(KERN_ERR "%s: Trying to flush Jumbo ring without " - "Jumbo support enabled\n", dev->name); - - return 0; + error_out: + printk(KERN_INFO "Out of memory when allocating " + "jumbo receive buffers\n"); + goto out; } @@ -1434,12 +1628,8 @@ ap = (struct ace_private *)dev->priv; - while (evtcsm != evtprd){ - struct event evt_local; - - memcpy(&evt_local, &ap->evt_ring[evtcsm], sizeof(evt_local)); - evt_local.u.word = le32_to_cpu(evt_local.u.word); - switch (evt_local.u.data.evt){ + while (evtcsm != evtprd) { + switch (ap->evt_ring[evtcsm].evt) { case E_FW_RUNNING: printk(KERN_INFO "%s: Firmware up and running\n", dev->name); @@ -1449,8 +1639,8 @@ break; case E_LNK_STATE: { - u16 code = evt_local.u.data.code; - if (code == E_C_LINK_UP){ + u16 code = ap->evt_ring[evtcsm].code; + if (code == E_C_LINK_UP) { printk(KERN_WARNING "%s: Optical link UP\n", dev->name); } @@ -1463,7 +1653,7 @@ break; } case E_ERROR: - switch(evt_local.u.data.code){ + switch(ap->evt_ring[evtcsm].code) { case E_C_ERR_INVAL_CMD: printk(KERN_ERR "%s: invalid command error\n", dev->name); @@ -1478,14 +1668,31 @@ break; default: printk(KERN_ERR "%s: unknown error %02x\n", - dev->name, evt_local.u.data.code); + dev->name, ap->evt_ring[evtcsm].code); } break; case E_RESET_JUMBO_RNG: + { + int i; + for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) { + if (ap->skb->rx_jumbo_skbuff[i].skb) { + ap->rx_jumbo_ring[i].size = 0; + set_aceaddr(&ap->rx_jumbo_ring[i].addr, 0); + dev_kfree_skb(ap->skb->rx_jumbo_skbuff[i].skb); + ap->skb->rx_jumbo_skbuff[i].skb = NULL; + } + } + ap->jumbo = 0; + printk(KERN_INFO "%s: Jumbo ring flushed\n", + dev->name); + if (!ap->tx_full) + netif_wake_queue(dev); + clear_bit(0, &ap->jumbo_refill_busy); break; + } default: printk(KERN_ERR "%s: Unhandled event 0x%02x\n", - dev->name, evt_local.u.data.evt); + dev->name, ap->evt_ring[evtcsm].evt); } evtcsm = (evtcsm + 1) % EVT_RING_ENTRIES; } @@ -1502,18 +1709,17 @@ idx = rxretcsm; - while (idx != rxretprd){ + while (idx != rxretprd) { struct ring_info *rip; struct sk_buff *skb; - struct rx_desc *rxdesc; - dma_addr_t mapping; + struct rx_desc *rxdesc, *retdesc; u32 skbidx; int desc_type, mapsize; u16 csum; - skbidx = le16_to_cpu(ap->rx_return_ring[idx].idx); - desc_type = le16_to_cpu(ap->rx_return_ring[idx].flags) & - (BD_FLG_JUMBO | BD_FLG_MINI); + retdesc = &ap->rx_return_ring[idx]; + skbidx = retdesc->idx; + desc_type = retdesc->flags & (BD_FLG_JUMBO | BD_FLG_MINI); switch(desc_type) { /* @@ -1544,27 +1750,24 @@ default: printk(KERN_INFO "%s: unknown frame type (0x%02x) " "returned by NIC\n", dev->name, - le16_to_cpu(ap->rx_return_ring[idx].flags)); + retdesc->flags); goto error; } skb = rip->skb; - mapping = rip->mapping; -#if DEBUG - if (skb == NULL) { - printk("Mayday! illegal skb received! (idx %i)\n", skbidx); - goto error; - } -#endif rip->skb = NULL; - pci_unmap_single(ap->pdev, mapping, mapsize); - skb_put(skb, le16_to_cpu(rxdesc->size)); + pci_unmap_single(ap->pdev, rip->mapping, mapsize); + rxdesc->size = 0; + skb_put(skb, retdesc->size); +#if 0 + /* unncessary */ rxdesc->size = 0; +#endif /* * Fly baby, fly! */ - csum = le16_to_cpu(ap->rx_return_ring[idx].tcp_udp_csum); + csum = retdesc->tcp_udp_csum; skb->dev = dev; skb->protocol = eth_type_trans(skb, dev); @@ -1583,7 +1786,7 @@ netif_rx(skb); /* send it up */ ap->stats.rx_packets++; - ap->stats.rx_bytes += skb->len; + ap->stats.rx_bytes += retdesc->size; idx = (idx + 1) % RX_RETURN_RING_ENTRIES; } @@ -1642,13 +1845,13 @@ * working on the other stuff - hey we don't need a spin lock * anymore. */ - rxretprd = le32_to_cpu(*(ap->rx_ret_prd)); + rxretprd = *ap->rx_ret_prd; rxretcsm = ap->cur_rx; if (rxretprd != rxretcsm) ace_rx_int(dev, rxretprd, rxretcsm); - txcsm = le32_to_cpu(*(ap->tx_csm)); + txcsm = *ap->tx_csm; idx = ap->tx_ret_csm; if (txcsm != idx) { @@ -1661,9 +1864,8 @@ ap->stats.tx_packets++; ap->stats.tx_bytes += skb->len; - pci_unmap_single(ap->pdev, mapping, skb->len); - dev_kfree_skb(skb); + dev_kfree_skb_irq(skb); ap->skb->tx_skbuff[idx].skb = NULL; @@ -1688,14 +1890,13 @@ * Ie. skip the comparison of the tx producer vs. the * consumer. */ - if (ap->tx_full && - test_bit(LINK_STATE_XOFF, &dev->state)) { - ap->tx_full = 0; + if (ace_if_busy(dev) && xchg(&ap->tx_full, 0)) { /* * This does not need to be atomic (and expensive), * I've seen cases where it would fail otherwise ;-( */ netif_wake_queue(dev); + ace_mark_net_bh(NET_BH); /* * TX ring is no longer full, aka the @@ -1709,7 +1910,7 @@ } evtcsm = readl(®s->EvtCsm); - evtprd = le32_to_cpu(*(ap->evt_prd)); + evtprd = *ap->evt_prd; if (evtcsm != evtprd) { evtcsm = ace_handle_event(dev, evtcsm, evtprd); @@ -1720,7 +1921,7 @@ * This has to go last in the interrupt handler and run with * the spin lock released ... what lock? */ - if (test_bit(LINK_STATE_START, &dev->state)) { + if (ace_if_running(dev)) { int cur_size; int run_bh = 0; @@ -1733,7 +1934,7 @@ #endif ace_load_std_rx_ring(ap, RX_RING_SIZE - cur_size); - } + } else run_bh = 1; } @@ -1791,13 +1992,23 @@ ap = dev->priv; regs = ap->regs; - if (!(ap->fw_running)){ + if (!(ap->fw_running)) { printk(KERN_WARNING "%s: Firmware not running!\n", dev->name); return -EBUSY; } writel(dev->mtu + ETH_HLEN + 4, ®s->IfMtu); + /* + * Zero the stats when restarting the interface... + */ + memset(&ap->stats, 0, sizeof(ap->stats)); + + cmd.evt = C_CLEAR_STATS; + cmd.code = 0; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + cmd.evt = C_HOST_STATE; cmd.code = C_C_STACK_UP; cmd.idx = 0; @@ -1807,7 +2018,7 @@ !test_and_set_bit(0, &ap->jumbo_refill_busy)) ace_load_jumbo_rx_ring(ap, RX_JUMBO_SIZE); - if (dev->flags & IFF_PROMISC){ + if (dev->flags & IFF_PROMISC) { cmd.evt = C_SET_PROMISC_MODE; cmd.code = C_C_PROMISC_ENABLE; cmd.idx = 0; @@ -1825,6 +2036,8 @@ ace_issue_cmd(regs, &cmd); #endif + netif_start_queue(dev); + MOD_INC_USE_COUNT; /* @@ -1854,6 +2067,7 @@ unsigned long flags; short i; + ace_if_down(dev); netif_stop_queue(dev); ap = (struct ace_private *)dev->priv; @@ -1861,7 +2075,7 @@ del_timer(&ap->timer); - if (ap->promisc){ + if (ap->promisc) { cmd.evt = C_SET_PROMISC_MODE; cmd.code = C_C_PROMISC_DISABLE; cmd.idx = 0; @@ -1893,11 +2107,16 @@ writel(0, &ap->tx_ring[i].flagsize); pci_unmap_single(ap->pdev, mapping, skb->len); dev_kfree_skb(skb); + ap->skb->tx_skbuff[i].skb = NULL; } } - if (ap->jumbo) - ace_flush_jumbo_rx_ring(dev); + if (ap->jumbo) { + cmd.evt = C_RESET_JUMBO_RNG; + cmd.code = 0; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); + } restore_flags(flags); @@ -1913,6 +2132,16 @@ unsigned long addr; u32 idx, flagsize; + /* + * ARGH, there is just no pretty way to do this + */ +#if (LINUX_VERSION_CODE < 0x02032b) + if (test_and_set_bit(0, &dev->tbusy)) + return 1; +#else + netif_stop_queue(dev); +#endif + idx = ap->tx_prd; if ((idx + 1) % TX_RING_ENTRIES == ap->tx_ret_csm) { @@ -1938,14 +2167,13 @@ idx = (idx + 1) % TX_RING_ENTRIES; ap->tx_prd = idx; - writel(idx, ®s->TxPrd); - wmb(); + ace_set_txprd(regs, ap, idx); /* * tx_csm is set by the NIC whereas we set tx_ret_csm which * is always trying to catch tx_csm */ - if ((idx + 2) % TX_RING_ENTRIES == ap->tx_ret_csm){ + if ((idx + 2) % TX_RING_ENTRIES == ap->tx_ret_csm) { ap->tx_full = 1; /* * Queue is full, add timer to detect whether the @@ -1954,11 +2182,25 @@ * timers. */ mod_timer(&ap->timer, jiffies + (3 * HZ)); + + /* The following check will fix a race between the interrupt + * handler increasing the tx_ret_csm and testing for tx_full + * and this tx routine's testing the tx_ret_csm and setting + * the tx_full; note that this fix makes assumptions on the + * ordering of writes (sequential consistency will fly; TSO + * processor order would work too) but that's what lock-less + * programming is all about + */ + if (((idx + 2) % TX_RING_ENTRIES != ap->tx_ret_csm) + && xchg(&ap->tx_full, 0)) { + del_timer(&ap->timer); + netif_wake_queue(dev); + } } else { /* * No need for it to be atomic - seems it needs to be */ - netif_stop_queue(dev); + netif_wake_queue(dev); } dev->trans_start = jiffies; @@ -1977,23 +2219,27 @@ writel(new_mtu + ETH_HLEN + 4, ®s->IfMtu); dev->mtu = new_mtu; - if (new_mtu > ACE_STD_MTU){ - if (!(ap->jumbo)){ + if (new_mtu > ACE_STD_MTU) { + if (!(ap->jumbo)) { printk(KERN_INFO "%s: Enabling Jumbo frame " "support\n", dev->name); ap->jumbo = 1; if (!test_and_set_bit(0, &ap->jumbo_refill_busy)) ace_load_jumbo_rx_ring(ap, RX_JUMBO_SIZE); + ap->jumbo = 1; } - ap->jumbo = 1; - }else{ + } else { + netif_stop_queue(dev); + while (test_and_set_bit(0, &ap->jumbo_refill_busy)); + synchronize_irq(); if (ap->jumbo){ - ace_flush_jumbo_rx_ring(dev); + struct cmd cmd; - printk(KERN_INFO "%s: Disabling Jumbo frame support\n", - dev->name); + cmd.evt = C_RESET_JUMBO_RNG; + cmd.code = 0; + cmd.idx = 0; + ace_issue_cmd(regs, &cmd); } - ap->jumbo = 0; } return 0; @@ -2008,6 +2254,21 @@ struct ethtool_cmd ecmd; u32 link, speed; +#ifdef SPIN_DEBUG + if (cmd == (SIOCDEVPRIVATE+0x0e)) { + printk(KERN_NOTICE "%s: dumping debug info\n", dev->name); + printk(KERN_NOTICE "%s: tbusy %li, tx_ret_csm %i, " + "tx_prd %i\n", dev->name, dev->tbusy, + ap->tx_ret_csm, ap->tx_prd); + printk(KERN_NOTICE "%s: cur_rx %i, std_refill %li, " + "mini_rx %i, mini_refill %li\n", dev->name, + atomic_read(&ap->cur_rx_bufs), ap->std_refill_busy, + atomic_read(&ap->cur_mini_bufs), ap->mini_refill_busy); + printk(KERN_NOTICE "%s: CpuCtrl %08x\n", + dev->name, readl(®s->CpuCtrl)); + return 0; + } +#endif if (cmd != SIOCETHTOOL) return -EOPNOTSUPP; if (copy_from_user(&ecmd, ifr->ifr_data, sizeof(ecmd))) @@ -2130,7 +2391,7 @@ u16 *da; struct cmd cmd; - if(test_bit(LINK_STATE_START, &dev->state)) + if(ace_if_running(dev)) return -EBUSY; memcpy(dev->dev_addr, addr->sa_data,dev->addr_len); @@ -2162,9 +2423,9 @@ cmd.idx = 0; ace_issue_cmd(regs, &cmd); ap->mcast_all = 1; - } else if (ap->mcast_all){ + } else if (ap->mcast_all) { cmd.evt = C_SET_MULTICAST_MODE; - cmd.code = C_C_MCAST_ENABLE; + cmd.code = C_C_MCAST_DISABLE; cmd.idx = 0; ace_issue_cmd(regs, &cmd); ap->mcast_all = 0; @@ -2176,7 +2437,7 @@ cmd.idx = 0; ace_issue_cmd(regs, &cmd); ap->promisc = 1; - }else if (!(dev->flags & IFF_PROMISC) && (ap->promisc)){ + }else if (!(dev->flags & IFF_PROMISC) && (ap->promisc)) { cmd.evt = C_SET_PROMISC_MODE; cmd.code = C_C_PROMISC_DISABLE; cmd.idx = 0; @@ -2207,28 +2468,38 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev) { struct ace_private *ap = dev->priv; + struct ace_mac_stats *mac_stats = + (struct ace_mac_stats *)ap->regs->Stats; + + ap->stats.rx_missed_errors = readl(&mac_stats->drop_space); + ap->stats.multicast = readl(&mac_stats->kept_mc); + ap->stats.collisions = readl(&mac_stats->coll); return(&ap->stats); } -void __init ace_copy(struct ace_regs *regs, void *src, unsigned long dest, int size) +void __init ace_copy(struct ace_regs *regs, void *src, u32 dest, int size) { unsigned long tdest; u32 *wsrc; - unsigned long tsize, i; + short tsize, i; if (size <= 0) return; - while (size > 0){ + while (size > 0) { tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), min(size, ACE_WINDOW_SIZE)); tdest = (unsigned long)®s->Window + (dest & (ACE_WINDOW_SIZE - 1)); writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); + /* + * This requires byte swapping on big endian, however + * writel does that for us + */ wsrc = src; - for (i = 0; i < (tsize / 4); i++){ + for (i = 0; i < (tsize / 4); i++) { writel(wsrc[i], tdest + i*4); } dest += tsize; @@ -2240,22 +2511,22 @@ } -void __init ace_clear(struct ace_regs *regs, unsigned long dest, int size) +void __init ace_clear(struct ace_regs *regs, u32 dest, int size) { unsigned long tdest; - unsigned long tsize = 0, i; + short tsize = 0, i; if (size <= 0) return; - while (size > 0){ + while (size > 0) { tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), min(size, ACE_WINDOW_SIZE)); tdest = (unsigned long)®s->Window + (dest & (ACE_WINDOW_SIZE - 1)); writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); - for (i = 0; i < (tsize / 4); i++){ + for (i = 0; i < (tsize / 4); i++) { writel(0, tdest + i*4); } @@ -2281,7 +2552,7 @@ ap = (struct ace_private *)dev->priv; regs = ap->regs; - if (!(readl(®s->CpuCtrl) & CPU_HALTED)){ + if (!(readl(®s->CpuCtrl) & CPU_HALTED)) { printk(KERN_ERR "%s: trying to download firmware while the " "CPU is running!\n", dev->name); return -EFAULT; @@ -2292,14 +2563,14 @@ * funny things on NICs with only 512KB SRAM */ ace_clear(regs, 0x2000, 0x80000-0x2000); - if (ACE_IS_TIGON_I(ap)){ + if (ACE_IS_TIGON_I(ap)) { ace_copy(regs, tigonFwText, tigonFwTextAddr, tigonFwTextLen); ace_copy(regs, tigonFwData, tigonFwDataAddr, tigonFwDataLen); ace_copy(regs, tigonFwRodata, tigonFwRodataAddr, tigonFwRodataLen); ace_clear(regs, tigonFwBssAddr, tigonFwBssLen); ace_clear(regs, tigonFwSbssAddr, tigonFwSbssLen); - }else if (ap->version == 2){ + }else if (ap->version == 2) { ace_clear(regs, tigon2FwBssAddr, tigon2FwBssLen); ace_clear(regs, tigon2FwSbssAddr, tigon2FwSbssLen); ace_copy(regs, tigon2FwText, tigon2FwTextAddr,tigon2FwTextLen); @@ -2323,24 +2594,28 @@ * specs. * * Oh yes, this is only the beginning! + * + * Thanks to Stevarino Webinski for helping tracking down the bugs in the + * code i2c readout code by beta testing all my hacks. */ static void __init eeprom_start(struct ace_regs *regs) { - u32 local = readl(®s->LocalCtrl); + u32 local; - udelay(1); + udelay(ACE_SHORT_DELAY); + local = readl(®s->LocalCtrl); local |= EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local |= EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local &= ~EEPROM_DATA_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local &= ~EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); @@ -2352,7 +2627,7 @@ short i; u32 local; - udelay(2); + udelay(ACE_SHORT_DELAY); local = readl(®s->LocalCtrl); local &= ~EEPROM_DATA_OUT; local |= EEPROM_WRITE_ENABLE; @@ -2360,7 +2635,7 @@ mb(); for (i = 0; i < 8; i++, magic <<= 1) { - udelay(2); + udelay(ACE_SHORT_DELAY); if (magic & 0x80) local |= EEPROM_DATA_OUT; else @@ -2368,11 +2643,11 @@ writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local |= EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT); writel(local, ®s->LocalCtrl); mb(); @@ -2389,14 +2664,14 @@ local &= ~EEPROM_WRITE_ENABLE; writel(local, ®s->LocalCtrl); mb(); - udelay(2); + udelay(ACE_LONG_DELAY); local |= EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); /* sample data in middle of high clk */ state = (readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0; - udelay(1); + udelay(ACE_SHORT_DELAY); mb(); writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl); mb(); @@ -2409,23 +2684,24 @@ { u32 local; + udelay(ACE_SHORT_DELAY); local = readl(®s->LocalCtrl); local |= EEPROM_WRITE_ENABLE; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local &= ~EEPROM_DATA_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local |= EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(1); + udelay(ACE_SHORT_DELAY); local |= EEPROM_DATA_OUT; writel(local, ®s->LocalCtrl); mb(); - udelay(2); + udelay(ACE_LONG_DELAY); local &= ~EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); mb(); @@ -2435,73 +2711,115 @@ /* * Read a whole byte from the EEPROM. */ -static u8 __init read_eeprom_byte(struct ace_regs *regs, unsigned long offset) +static int __init read_eeprom_byte(struct net_device *dev, + unsigned long offset) { + struct ace_regs *regs; + unsigned long flags; u32 local; + int result = 0; short i; - u8 result = 0; - if (!regs){ - printk(KERN_ERR "No regs!\n"); - return 0; + if (!dev) { + printk(KERN_ERR "No device!\n"); + result = -ENODEV; + goto eeprom_read_error; } + regs = ((struct ace_private *)dev->priv)->regs; + + /* + * Don't take interrupts on this CPU will bit banging + * the %#%#@$ I2C device + */ + __save_flags(flags); + __cli(); + eeprom_start(regs); eeprom_prep(regs, EEPROM_WRITE_SELECT); - if (eeprom_check_ack(regs)){ - printk("Unable to sync eeprom\n"); - return 0; + if (eeprom_check_ack(regs)) { + __restore_flags(flags); + printk(KERN_ERR "%s: Unable to sync eeprom\n", dev->name); + result = -EIO; + goto eeprom_read_error; } eeprom_prep(regs, (offset >> 8) & 0xff); - if (eeprom_check_ack(regs)) - return 0; + if (eeprom_check_ack(regs)) { + __restore_flags(flags); + printk(KERN_ERR "%s: Unable to set address byte 0\n", + dev->name); + result = -EIO; + goto eeprom_read_error; + } eeprom_prep(regs, offset & 0xff); - if (eeprom_check_ack(regs)) - return 0; + if (eeprom_check_ack(regs)) { + __restore_flags(flags); + printk(KERN_ERR "%s: Unable to set address byte 1\n", + dev->name); + result = -EIO; + goto eeprom_read_error; + } eeprom_start(regs); eeprom_prep(regs, EEPROM_READ_SELECT); - if (eeprom_check_ack(regs)) - return 0; + if (eeprom_check_ack(regs)) { + __restore_flags(flags); + printk(KERN_ERR "%s: Unable to set READ_SELECT\n", + dev->name); + result = -EIO; + goto eeprom_read_error; + } for (i = 0; i < 8; i++) { local = readl(®s->LocalCtrl); local &= ~EEPROM_WRITE_ENABLE; writel(local, ®s->LocalCtrl); - udelay(2); + udelay(ACE_LONG_DELAY); mb(); local |= EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); - udelay(1); mb(); + udelay(ACE_SHORT_DELAY); /* sample data mid high clk */ result = (result << 1) | ((readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0); - udelay(1); + udelay(ACE_SHORT_DELAY); mb(); local = readl(®s->LocalCtrl); local &= ~EEPROM_CLK_OUT; writel(local, ®s->LocalCtrl); + udelay(ACE_SHORT_DELAY); mb(); - if (i == 7){ + if (i == 7) { local |= EEPROM_WRITE_ENABLE; writel(local, ®s->LocalCtrl); mb(); + udelay(ACE_SHORT_DELAY); } } local |= EEPROM_DATA_OUT; writel(local, ®s->LocalCtrl); - udelay(1); + mb(); + udelay(ACE_SHORT_DELAY); writel(readl(®s->LocalCtrl) | EEPROM_CLK_OUT, ®s->LocalCtrl); - udelay(2); + udelay(ACE_LONG_DELAY); writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl); + mb(); + udelay(ACE_SHORT_DELAY); eeprom_stop(regs); + __restore_flags(flags); + out: return result; + + eeprom_read_error: + printk(KERN_ERR "%s: Unable to read eeprom byte 0x%02lx\n", + dev->name, offset); + goto out; } diff -u --recursive --new-file v2.3.43/linux/drivers/net/acenic.h linux/drivers/net/acenic.h --- v2.3.43/linux/drivers/net/acenic.h Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/acenic.h Fri Feb 11 11:20:12 2000 @@ -18,25 +18,6 @@ * modified to deal properly with readl/writel usage. */ -typedef struct { - u32 addrhi; - u32 addrlo; -} aceaddr; - - -static inline void set_aceaddr(aceaddr *aa, dma_addr_t addr) -{ - unsigned long baddr = (unsigned long) addr; -#if (BITS_PER_LONG == 64) - aa->addrlo = cpu_to_le32(baddr & 0xffffffff); - aa->addrhi = cpu_to_le32(baddr >> 32); -#else - /* Don't bother setting zero every time */ - aa->addrlo = cpu_to_le32(baddr); -#endif - mb(); -} - struct ace_regs { u32 pad0[16]; /* PCI control registers */ @@ -167,6 +148,13 @@ u32 Window[0x200]; }; + +typedef struct { + u32 addrhi; + u32 addrlo; +} aceaddr; + + #define ACE_WINDOW_SIZE 0x800 #define ACE_JUMBO_MTU 9000 @@ -180,6 +168,7 @@ #define IN_INT 0x01 #define CLR_INT 0x02 +#define HW_RESET 0x08 #define BYTE_SWAP 0x10 #define WORD_SWAP 0x20 #define MASK_INTS 0x40 @@ -202,6 +191,13 @@ /* + * udelay() values for when clocking the eeprom + */ +#define ACE_SHORT_DELAY 1 +#define ACE_LONG_DELAY 2 + + +/* * Misc Config bits */ @@ -239,6 +235,7 @@ #define DMA_WRITE_MAX_1K 0xe0 #define MEM_READ_MULTIPLE 0x00020000 #define PCI_66MHZ 0x00080000 +#define PCI_32BIT 0x00100000 #define DMA_WRITE_ALL_ALIGN 0x00800000 #define READ_CMD_MEM 0x06000000 #define WRITE_CMD_MEM 0x70000000 @@ -251,6 +248,7 @@ #define ACE_BYTE_SWAP_DATA 0x10 #define ACE_WARN 0x08 #define ACE_WORD_SWAP 0x04 +#define ACE_BYTE_SWAP 0x02 #define ACE_NO_JUMBO_FRAG 0x200 #define ACE_FATAL 0x40000000 @@ -300,20 +298,15 @@ #define EVT_RING_SIZE (EVT_RING_ENTRIES * sizeof(struct event)) struct event { - union { - u32 word; - struct { -#if defined(__LITTLE_ENDIAN_BITFIELD) - u32 idx:12; - u32 code:12; - u32 evt:8; -#else - u32 evt:8; - u32 code:12; - u32 idx:12; +#ifdef __LITTLE_ENDIAN + u32 idx:12; + u32 code:12; + u32 evt:8; +#else + u32 evt:8; + u32 code:12; + u32 idx:12; #endif - } data; - } u; u32 pad; }; @@ -351,7 +344,7 @@ #define CMD_RING_ENTRIES 64 struct cmd { -#if defined(__LITTLE_ENDIAN_BITFIELD) +#ifdef __LITTLE_ENDIAN u32 idx:12; u32 code:12; u32 evt:8; @@ -435,10 +428,17 @@ * This is in PCI shared mem and must be accessed with readl/writel * real layout is: */ +#if __LITTLE_ENDIAN u16 flags; u16 size; u16 vlan; u16 reserved; +#else + u16 size; + u16 flags; + u16 reserved; + u16 vlan; +#endif #endif u32 vlanres; }; @@ -459,14 +459,34 @@ struct rx_desc{ aceaddr addr; +#ifdef __LITTLE_ENDIAN u16 size; u16 idx; +#else + u16 idx; + u16 size; +#endif +#ifdef __LITTLE_ENDIAN u16 flags; u16 type; +#else + u16 type; + u16 flags; +#endif +#ifdef __LITTLE_ENDIAN u16 tcp_udp_csum; u16 ip_csum; +#else + u16 ip_csum; + u16 tcp_udp_csum; +#endif +#ifdef __LITTLE_ENDIAN u16 vlan; u16 err_flags; +#else + u16 err_flags; + u16 vlan; +#endif u32 reserved; u32 opague; }; @@ -477,8 +497,13 @@ */ struct ring_ctrl { aceaddr rngptr; +#ifdef __LITTLE_ENDIAN u16 flags; u16 max_len; +#else + u16 max_len; + u16 flags; +#endif u32 pad; }; @@ -535,16 +560,17 @@ }; -/* - * struct ace_skb holding the rings of skb's. This is an awful lot of - * pointers, but I don't see any other smart mode to do this in an - * efficient manner ;-( - */ struct ring_info { struct sk_buff *skb; dma_addr_t mapping; }; + +/* + * struct ace_skb holding the rings of skb's. This is an awful lot of + * pointers, but I don't see any other smart mode to do this in an + * efficient manner ;-( + */ struct ace_skb { struct ring_info tx_skbuff[TX_RING_ENTRIES]; @@ -568,16 +594,16 @@ { struct ace_skb *skb; struct ace_regs *regs; /* register base */ - volatile int fw_running; - int version, fw_up, link; + int version, fw_running, fw_up, link; int promisc, mcast_all; /* * The send ring is located in the shared memory window */ struct ace_info *info; - dma_addr_t info_dma; struct tx_desc *tx_ring; - u32 tx_prd, tx_full, tx_ret_csm; + dma_addr_t info_dma; + u32 tx_prd; + volatile u32 tx_full, tx_ret_csm; struct timer_list timer; unsigned long std_refill_busy @@ -590,9 +616,8 @@ u32 cur_rx; struct tq_struct immediate; int bh_pending, jumbo; - - /* These elements are allocated using consistent PCI - * dma memory. + /* + * These elements are allocated using consistent PCI dma memory. */ struct rx_desc *rx_std_ring; struct rx_desc *rx_jumbo_ring; @@ -611,10 +636,74 @@ struct net_device *next; u16 pci_command; u8 pci_latency; - char name[24]; + char name[48]; +#ifdef INDEX_DEBUG + spinlock_t debug_lock + __attribute__ ((aligned (L1_CACHE_BYTES)));; + u32 last_tx, last_std_rx, last_mini_rx; +#endif struct net_device_stats stats; }; + +static inline void set_aceaddr(aceaddr *aa, dma_addr_t addr) +{ +#if (BITS_PER_LONG == 64) + aa->addrlo = addr & 0xffffffff; + aa->addrhi = addr >> 32; +#else + /* Don't bother setting zero every time */ + aa->addrlo = addr; +#endif + mb(); +} + + +static inline void *get_aceaddr(aceaddr *aa) +{ + unsigned long addr; + mb(); +#if (BITS_PER_LONG == 64) + addr = (u64)aa->addrhi << 32 | aa->addrlo; +#else + addr = aa->addrlo; +#endif + return bus_to_virt(addr); +} + + +static inline void *get_aceaddr_bus(aceaddr *aa) +{ + unsigned long addr; + mb(); +#if (BITS_PER_LONG == 64) + addr = (u64)aa->addrhi << 32 | aa->addrlo; +#else + addr = aa->addrlo; +#endif + return (void *)addr; +} + + +static inline void ace_set_txprd(struct ace_regs *regs, + struct ace_private *ap, u32 value) +{ +#ifdef INDEX_DEBUG + unsigned long flags; + spin_lock_irqsave(&ap->debug_lock, flags); + writel(value, ®s->TxPrd); + if (value == ap->last_tx) + printk(KERN_ERR "AceNIC RACE ALERT! writing identical value " + "to tx producer (%i)\n", value); + ap->last_tx = value; + spin_unlock_irqrestore(&ap->debug_lock, flags); +#else + writel(value, ®s->TxPrd); +#endif + wmb(); +} + + /* * Prototypes */ @@ -622,7 +711,6 @@ static void ace_load_std_rx_ring(struct ace_private *ap, int nr_bufs); static void ace_load_mini_rx_ring(struct ace_private *ap, int nr_bufs); static void ace_load_jumbo_rx_ring(struct ace_private *ap, int nr_bufs); -static int ace_flush_jumbo_rx_ring(struct net_device *dev); static void ace_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int ace_load_firmware(struct net_device *dev); static int ace_open(struct net_device *dev); @@ -638,7 +726,9 @@ #endif static int ace_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); static int ace_set_mac_addr(struct net_device *dev, void *p); +static int ace_allocate_descriptors(struct net_device *dev); +static void ace_free_descriptors(struct net_device *dev); static struct net_device_stats *ace_get_stats(struct net_device *dev); -static u8 read_eeprom_byte(struct ace_regs *regs, unsigned long offset); +static int read_eeprom_byte(struct net_device *dev, unsigned long offset); #endif /* _ACENIC_H_ */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/acenic_firmware.h linux/drivers/net/acenic_firmware.h --- v2.3.43/linux/drivers/net/acenic_firmware.h Thu Nov 18 20:25:37 1999 +++ linux/drivers/net/acenic_firmware.h Sat Feb 12 09:55:02 2000 @@ -4,38 +4,37 @@ * the compiler complaining about undefined symbols. */ #define tigonFwReleaseMajor 0xc -#define tigonFwReleaseMinor 0x3 -#define tigonFwReleaseFix 0xd +#define tigonFwReleaseMinor 0x4 +#define tigonFwReleaseFix 0x5 #define tigonFwStartAddr 0x00004000 #define tigonFwTextAddr 0x00004000 -#define tigonFwTextLen 0x10920 -#define tigonFwRodataAddr 0x00014920 -#define tigonFwRodataLen 0xaa0 -#define tigonFwDataAddr 0x000153e0 -#define tigonFwDataLen 0x150 -#define tigonFwSbssAddr 0x00015530 -#define tigonFwSbssLen 0x2c -#define tigonFwBssAddr 0x00015560 +#define tigonFwTextLen 0x11190 +#define tigonFwRodataAddr 0x00015190 +#define tigonFwRodataLen 0xac0 +#define tigonFwDataAddr 0x00015c80 +#define tigonFwDataLen 0x170 +#define tigonFwSbssAddr 0x00015df0 +#define tigonFwSbssLen 0x34 +#define tigonFwBssAddr 0x00015e30 #define tigonFwBssLen 0x2080 u32 tigonFwText[]; u32 tigonFwData[]; u32 tigonFwRodata[]; - #ifndef CONFIG_ACENIC_OMIT_TIGON_I /* Generated by genfw.c */ u32 tigonFwText[(MAX_TEXT_LEN/4) + 1] __initdata = { 0x10000003, 0x0, 0xd, 0xd, 0x3c1d0001, -0x8fbd5414, 0x3a0f021, 0x3c100000, 0x26104000, +0x8fbd5cb4, 0x3a0f021, 0x3c100000, 0x26104000, 0xc00100c, 0x0, 0xd, 0x27bdffd8, 0x3c1cc000, 0x3c1b0013, 0x377bd800, 0xd021, 0x3c170013, 0x36f75418, 0x2e02021, 0x340583e8, 0xafbf0024, 0xc002488, 0xafb00020, 0xc0023e8, -0x0, 0x3c040001, 0x24844984, 0x24050001, -0x2e03021, 0x3821, 0x3c100001, 0x261075e0, +0x0, 0x3c040001, 0x248451f4, 0x24050001, +0x2e03021, 0x3821, 0x3c100001, 0x26107eb0, 0xafb00010, 0xc002403, 0xafbb0014, 0x3c02000f, 0x3442ffff, 0x2021024, 0x362102b, 0x10400009, -0x24050003, 0x3c040001, 0x24844990, 0x2003021, +0x24050003, 0x3c040001, 0x24845200, 0x2003021, 0x3603821, 0x3c020010, 0xafa20010, 0xc002403, 0xafa00014, 0x2021, 0x3405c000, 0x3c010001, 0x370821, 0xa02083b0, 0x3c010001, 0x370821, @@ -73,7 +72,7 @@ 0x0, 0x8ee20450, 0x8ee30454, 0xaee304fc, 0x8ee204fc, 0x2442e000, 0x2c422001, 0x1440000d, 0x26e40030, 0x8ee20450, 0x8ee30454, 0x3c040001, -0x2484499c, 0x3c050001, 0xafa00010, 0xafa00014, +0x2484520c, 0x3c050001, 0xafa00010, 0xafa00014, 0x8ee704fc, 0x34a5f000, 0xc002403, 0x603021, 0x26e40030, 0xc002488, 0x24050400, 0x27440080, 0xc002488, 0x24050080, 0x26e4777c, 0xc002488, @@ -83,7 +82,7 @@ 0x3442ca00, 0x2021, 0x24030002, 0xaee30074, 0xaee30070, 0xaee2006c, 0x240203e8, 0xaee20104, 0x24020001, 0xaee30100, 0xaee2010c, 0x3c030001, -0x641821, 0x906353e0, 0x2e41021, 0x24840001, +0x641821, 0x90635c80, 0x2e41021, 0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8, 0x0, 0x8f820040, 0x2e41821, 0x24840001, 0x21702, 0x24420030, 0xa062009c, 0x2e41021, 0xa040009c, @@ -129,7 +128,7 @@ 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x54c0000c, -0xaee90608, 0x3c040001, 0x248449a8, 0xafa00010, +0xaee90608, 0x3c040001, 0x24845218, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f000, 0x8001223, 0x0, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, @@ -155,21 +154,21 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, -0x3c040001, 0x248449b0, 0xafa00010, 0xafa00014, +0x3c040001, 0x24845220, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, -0x8001223, 0x8ee201b0, 0x3c040001, 0x248449bc, +0x8001223, 0x8ee201b0, 0x3c040001, 0x2484522c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20160, 0x3c040001, -0x248449c8, 0x3405f001, 0x24420001, 0xaee20160, +0x24845238, 0x3405f001, 0x24420001, 0xaee20160, 0x8ee20160, 0x3021, 0x3821, 0xafa00010, 0xc002403, 0xafa00014, 0x8001238, 0x0, 0x3c020001, 0x2442f5a8, 0x21100, 0x21182, 0x431025, 0x3c010001, 0xac221278, 0x96e2045a, 0x30420003, 0x10400025, 0x3c050fff, 0x8ee204c8, 0x34a5ffff, 0x34420a00, 0xaee204c8, 0x8ee304c8, -0x3c040001, 0x248449d4, 0x24020001, 0xa2e204ec, +0x3c040001, 0x24845244, 0x24020001, 0xa2e204ec, 0xa2e204ed, 0x3c020002, 0x621825, 0x3c020001, 0x2442a390, 0x451024, 0x21082, 0xaee304c8, 0x3c030800, 0x431025, 0x3c010001, 0xac221220, @@ -212,7 +211,7 @@ 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001, -0x248449a8, 0xafa00010, 0xafa00014, 0x8ee60608, +0x24845218, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f000, 0x800136d, 0x0, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, @@ -237,17 +236,17 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, -0x14c0001b, 0x0, 0x3c040001, 0x248449b0, +0x14c0001b, 0x0, 0x3c040001, 0x24845220, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, 0x800136d, 0x8ee201b0, -0x3c040001, 0x248449bc, 0xafa00014, 0x8ee60608, +0x3c040001, 0x2484522c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, -0x8ee20160, 0x3c040001, 0x248449c8, 0x3405f002, +0x8ee20160, 0x3c040001, 0x24845238, 0x3405f002, 0x24420001, 0xaee20160, 0x8ee20160, 0x3021, 0x3821, 0xafa00010, 0xc002403, 0xafa00014, -0x96e6047a, 0x96e7046a, 0x3c040001, 0x248449e0, +0x96e6047a, 0x96e7046a, 0x3c040001, 0x24845250, 0x24050012, 0xafa00010, 0xc002403, 0xafa00014, 0xc004500, 0x0, 0xc002318, 0x0, 0x3c060001, 0x34c63800, 0xaee00608, 0xaf400228, @@ -290,7 +289,7 @@ 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001, -0x248449a8, 0xafa00010, 0xafa00014, 0x8ee60608, +0x24845218, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f000, 0x80014a5, 0x0, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, @@ -315,11 +314,11 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, -0x14c0001b, 0x0, 0x3c040001, 0x248449b0, +0x14c0001b, 0x0, 0x3c040001, 0x24845220, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, 0x80014a5, 0x8ee201b0, -0x3c040001, 0x248449bc, 0xafa00014, 0x8ee60608, +0x3c040001, 0x2484522c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20154, 0x24420001, 0xaee20154, 0xc0014dc, @@ -341,7 +340,7 @@ 0xaee07b8c, 0xaee07b84, 0x3c010001, 0x370821, 0xac2083bc, 0x3c010001, 0x370821, 0x3e00008, 0xa02083b9, 0x27bdffd8, 0xafbf0024, 0xafb00020, -0x8f820054, 0x3c030001, 0x8c635498, 0x24420067, +0x8f820054, 0x3c030001, 0x8c635d38, 0x24420067, 0x1060000d, 0xaf820058, 0x3c020001, 0x571021, 0x904283b8, 0x10400005, 0x3c030200, 0x3c010001, 0x370821, 0x8001503, 0xa02083b8, 0x8ee20000, @@ -359,7 +358,7 @@ 0x0, 0x3c030001, 0x771821, 0x8c6383d4, 0x8f8200b4, 0x1462007c, 0x0, 0x3c070001, 0xf73821, 0x8ce783d0, 0x8f8200b0, 0x3c040001, -0x24844a50, 0xafa00014, 0xafa20010, 0x8f8600b0, +0x248452c0, 0xafa00014, 0xafa20010, 0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0, 0xaf830104, 0x8f830120, @@ -387,10 +386,10 @@ 0xac820000, 0x24020001, 0xac820004, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201e4, 0x3c070001, 0xf73821, 0x8ce783d0, 0x24420001, -0xaee201e4, 0x8ee201e4, 0x3c040001, 0x24844a5c, +0xaee201e4, 0x8ee201e4, 0x3c040001, 0x248452cc, 0x80015bd, 0xafa00010, 0x8f820104, 0x3c010001, 0x370821, 0xac2283d0, 0x8f8200b4, 0x3c070001, -0xf73821, 0x8ce783d0, 0x3c040001, 0x24844a64, +0xf73821, 0x8ce783d0, 0x3c040001, 0x248452d4, 0x3c010001, 0x370821, 0xac2283d4, 0xafa00010, 0xafa00014, 0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900, 0x80015cc, 0x0, 0x8f820104, @@ -423,7 +422,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600000b, 0x24100001, -0x8ee204e4, 0x3c040001, 0x24844a6c, 0xafa00014, +0x8ee204e4, 0x3c040001, 0x248452dc, 0xafa00014, 0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f006, 0x16000003, 0x24020001, 0x8001650, 0xa2e204f4, 0x8ee20170, 0x24420001, @@ -453,7 +452,7 @@ 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600000b, 0x24100001, 0x8ee2724c, 0x3c040001, -0x24844a78, 0xafa00014, 0xafa20010, 0x8ee6724c, +0x248452e8, 0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x56000001, 0xaee00e1c, 0x8ee20174, 0x24420001, 0xaee20174, 0x8ee20174, 0x8ee24e24, 0x10400019, @@ -564,11 +563,11 @@ 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x14620003, 0x3c050009, 0x800197c, 0x24100001, 0x3c040001, -0x24844a84, 0xafa00010, 0xafa00014, 0x8f860120, +0x248452f4, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x800187b, 0x34a5f011, 0x3c040001, -0x24844a90, 0xafa00010, 0xafa00014, 0x8f860120, +0x24845300, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x34a5f010, 0xc002403, 0x8021, -0x800197c, 0x0, 0x3c040001, 0x24844a9c, +0x800197c, 0x0, 0x3c040001, 0x2484530c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0x8001975, 0x34a5f00f, 0x8ee20608, 0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, @@ -599,7 +598,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x5600000c, 0xaee90608, -0x3c040001, 0x24844aa8, 0xafa00010, 0xafa00014, +0x3c040001, 0x24845318, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f000, 0x800197c, 0x0, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, @@ -625,10 +624,10 @@ 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600001d, 0x24100001, 0x3c040001, -0x24844ab0, 0xafa00010, 0xafa00014, 0x8ee60608, +0x24845320, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, 0x800197c, -0x8ee201b0, 0x3c040001, 0x24844abc, 0xafa00014, +0x8ee201b0, 0x3c040001, 0x2484532c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f005, 0xc002403, 0x0, 0x8ee201ac, 0x8021, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x1200000c, @@ -636,7 +635,7 @@ 0x8f420238, 0x8ee30158, 0x24630001, 0xaee30158, 0x8ee30158, 0x800198c, 0xaee27278, 0x24020001, 0x3c010001, 0x370821, 0xa02283b0, 0x3c020001, -0x8c425498, 0x10400187, 0x0, 0x8ee27b84, +0x8c425d38, 0x10400187, 0x0, 0x8ee27b84, 0x24430001, 0x284200c9, 0x144001a4, 0xaee37b84, 0x8ee204d4, 0x30420002, 0x14400119, 0xaee07b84, 0x8ee204d4, 0x3c030600, 0x34631000, 0x34420002, @@ -700,12 +699,12 @@ 0x56000006, 0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022, 0x0, 0x3c040001, -0x24844a84, 0xafa00010, 0xafa00014, 0x8f860120, +0x248452f4, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, -0x8001aad, 0x0, 0x3c040001, 0x24844a90, +0x8001aad, 0x0, 0x3c040001, 0x24845300, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x8001aad, 0x0, -0x3c040001, 0x24844a9c, 0xafa00014, 0x8ee60608, +0x3c040001, 0x2484530c, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c, @@ -742,7 +741,7 @@ 0xaf820044, 0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b88, 0x24430001, 0x28421389, 0x14400005, 0xaee37b88, 0x8f820044, 0x38420020, 0xaf820044, -0xaee07b88, 0xc0045c2, 0x0, 0x8fbf0024, +0xaee07b88, 0xc0045f4, 0x0, 0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028, 0x27bdffb8, 0xafbf0044, 0xafb60040, 0xafb5003c, 0xafb40038, 0xafb30034, 0xafb20030, 0xafb1002c, 0xafb00028, @@ -752,18 +751,18 @@ 0xaee2016c, 0x80022f4, 0x8ee2016c, 0x32c20001, 0x10400004, 0x24020001, 0xaf820064, 0x80022f4, 0x0, 0x32c20002, 0x1440000c, 0x3c050003, -0x3c040001, 0x24844b34, 0x34a50001, 0x2c03021, +0x3c040001, 0x248453a4, 0x34a50001, 0x2c03021, 0x3821, 0xafa00010, 0xc002403, 0xafa00014, 0x2402fff8, 0x80022f4, 0xaf820064, 0x8f43022c, 0x8f42010c, 0x5062000c, 0xafa00010, 0x8f42022c, 0x21080, 0x5a1021, 0x8c420300, 0xafa20020, 0x8f42022c, 0x24070001, 0x24420001, 0x3042003f, -0x8001b80, 0xaf42022c, 0x3c040001, 0x24844b40, +0x8001b80, 0xaf42022c, 0x3c040001, 0x248453b0, 0xafa00014, 0x8f46022c, 0x8f47010c, 0x3c050003, 0xc002403, 0x34a5f01f, 0x3821, 0x14e00003, 0x0, 0x80022ed, 0xaf960064, 0x93a20020, 0x2443ffff, 0x2c620011, 0x10400658, 0x31080, -0x3c010001, 0x220821, 0x8c224bf8, 0x400008, +0x3c010001, 0x220821, 0x8c225468, 0x400008, 0x0, 0x8fa20020, 0x30420fff, 0xaee20e0c, 0x8f820060, 0x34420200, 0xaf820060, 0x8ee20118, 0x24420001, 0xaee20118, 0x80022e8, 0x8ee20118, @@ -779,7 +778,7 @@ 0x8f840054, 0x41442, 0x41c82, 0x431021, 0x41cc2, 0x431023, 0x41d02, 0x431021, 0x41d42, 0x431023, 0x8001bd0, 0xaee20078, -0x3c040001, 0x24844b4c, 0xafa00014, 0x8fa60020, +0x3c040001, 0x248453bc, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a50004, 0x8ee20110, 0x24420001, 0xaee20110, 0x80022e8, 0x8ee20110, 0x27440212, 0xc0022fe, 0x24050006, 0x3049001f, @@ -795,7 +794,7 @@ 0x2c820080, 0x1440fff8, 0x410c0, 0x4c10010, 0x618c0, 0x610c0, 0x571821, 0x8c63737c, 0x571021, 0xafa30010, 0x8c427380, 0x3c040001, -0x24844b58, 0xafa20014, 0x8f470214, 0x3c050003, +0x248453c8, 0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a50013, 0x8001c90, 0x3c020800, 0x97440212, 0x771021, 0xa444737e, 0x8f440214, 0x771021, 0x2e31821, 0xac447380, 0x34028000, @@ -813,7 +812,7 @@ 0x24840001, 0x2c820080, 0x1440fff8, 0x410c0, 0x4c10023, 0x618c0, 0x910c0, 0x571821, 0x8c63727c, 0x571021, 0xafa30010, 0x8c427280, -0x3c040001, 0x24844b64, 0xafa20014, 0x8f470214, +0x3c040001, 0x248453d4, 0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a5f017, 0x8001c90, 0x3c020800, 0x8f430210, 0xb71021, 0xac43777c, 0x8f430214, 0xb71021, 0xac437780, 0x3c020001, @@ -888,13 +887,13 @@ 0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, -0x10620022, 0x0, 0x3c040001, 0x24844b70, +0x10620022, 0x0, 0x3c040001, 0x248453e0, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001da0, -0x0, 0x3c040001, 0x24844b7c, 0xafa00014, +0x0, 0x3c040001, 0x248453ec, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x8001da0, 0x0, 0x3c040001, -0x24844b88, 0xafa00014, 0x8ee60608, 0x8f470228, +0x248453f8, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20124, 0x24420001, 0xaee20124, 0x8001f97, 0x8ee20124, @@ -909,7 +908,7 @@ 0x1221004, 0x21027, 0x621824, 0xaf830228, 0x910c0, 0x2e21821, 0x3402c000, 0x8001e4e, 0xa462727c, 0x8f420214, 0xafa20010, 0x910c0, -0x571021, 0x8c42727c, 0x3c040001, 0x24844b94, +0x571021, 0x8c42727c, 0x3c040001, 0x24845404, 0x3c050003, 0xafa20014, 0x8f470210, 0x34a5f01c, 0xc002403, 0x1203021, 0x8001e83, 0x3c020800, 0xb71021, 0x9443727e, 0x97420212, 0x14620019, @@ -937,7 +936,7 @@ 0x910c0, 0x2e41821, 0x3402c000, 0x15000015, 0xa462737c, 0x910c0, 0x2e21821, 0x34028000, 0x8001e4e, 0xa462727c, 0x571021, 0x8c42727c, -0x3c040001, 0x24844ba0, 0x3c050003, 0xafa20010, +0x3c040001, 0x24845410, 0x3c050003, 0xafa20010, 0x710c0, 0x571021, 0x8c42737c, 0x34a5001e, 0x1203021, 0xc002403, 0xafa20014, 0x8001e83, 0x3c020800, 0x2021, 0x428c0, 0xb71021, @@ -1013,12 +1012,12 @@ 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022, -0x0, 0x3c040001, 0x24844b70, 0xafa00010, +0x0, 0x3c040001, 0x248453e0, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001f93, 0x0, -0x3c040001, 0x24844b7c, 0xafa00014, 0x8f860120, +0x3c040001, 0x248453ec, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, -0x8001f93, 0x0, 0x3c040001, 0x24844b88, +0x8001f93, 0x0, 0x3c040001, 0x248453f8, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20128, 0x24420001, @@ -1030,7 +1029,7 @@ 0x8f820228, 0xaee204dc, 0x2402ffff, 0xaf820228, 0x24020001, 0x8001fbe, 0xa2e204d8, 0x92e204d8, 0x5040000c, 0xa2e004d8, 0x8ee204dc, 0xaf820228, -0x8001fbe, 0xa2e004d8, 0x3c040001, 0x24844ba8, +0x8001fbe, 0xa2e004d8, 0x3c040001, 0x24845418, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f009, 0x8ee2013c, 0x24420001, 0xaee2013c, 0x80022e8, 0x8ee2013c, 0x8fa20020, 0x21200, @@ -1041,7 +1040,7 @@ 0x370821, 0xa02283b2, 0x8001fea, 0xaee40108, 0x8f820220, 0x3c0308ff, 0x3463fff7, 0x431024, 0xaf820220, 0x3c010001, 0x370821, 0xa02083b2, -0x8001fea, 0xaee40108, 0x3c040001, 0x24844bb4, +0x8001fea, 0xaee40108, 0x3c040001, 0x24845424, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00a, 0x8ee2012c, 0x24420001, 0xaee2012c, 0x80022e8, 0x8ee2012c, 0x8fa20020, 0x21200, @@ -1053,13 +1052,13 @@ 0x571021, 0x904283b2, 0x3c010001, 0x370821, 0x1440000e, 0xa02083b3, 0x8f820220, 0x3c0308ff, 0x3463fff7, 0x431024, 0x8002018, 0xaf820220, -0x3c040001, 0x24844bc0, 0xafa00014, 0x8fa60020, +0x3c040001, 0x24845430, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00b, 0x8ee20114, 0x24420001, 0xaee20114, 0x80022e8, 0x8ee20114, 0x27840208, 0x27450200, 0xc00249a, 0x24060008, 0x26e40094, 0x27450200, 0xc00249a, 0x24060008, 0x8ee20134, 0x24420001, 0xaee20134, 0x80022e8, -0x8ee20134, 0x8f460248, 0x2021, 0xc004fa8, +0x8ee20134, 0x8f460248, 0x2021, 0xc0050e0, 0x24050004, 0x8ee20130, 0x24420001, 0xaee20130, 0x80022e8, 0x8ee20130, 0x8ef301cc, 0x8ef401d0, 0x8ef501d8, 0x8ee20140, 0x26e40030, 0x24420001, @@ -1073,7 +1072,7 @@ 0xaee20104, 0xaee40100, 0xaee3010c, 0x8f820220, 0x30420008, 0x10400004, 0x0, 0xaee30108, 0x8002061, 0x2021, 0xaee40108, 0x2021, -0x3c030001, 0x641821, 0x906353f0, 0x2e41021, +0x3c030001, 0x641821, 0x90635c90, 0x2e41021, 0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8, 0x0, 0x8f820040, 0x2e41821, 0x24840001, 0x21702, 0x24420030, 0xa062009c, 0x2e41021, @@ -1153,13 +1152,13 @@ 0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, -0x10620022, 0x0, 0x3c040001, 0x24844b70, +0x10620022, 0x0, 0x3c040001, 0x248453e0, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x80021c4, -0x0, 0x3c040001, 0x24844b7c, 0xafa00014, +0x0, 0x3c040001, 0x248453ec, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80021c4, 0x0, 0x3c040001, -0x24844b88, 0xafa00014, 0x8ee60608, 0x8f470228, +0x248453f8, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20120, 0x24420001, 0xaee20120, 0x8ee20120, 0x8ee20168, @@ -1169,7 +1168,7 @@ 0x8f820220, 0x30420008, 0x14400002, 0x24020001, 0x24020002, 0xaee20108, 0x8ee2011c, 0x24420001, 0xaee2011c, 0x80022e8, 0x8ee2011c, 0x3c040001, -0x24844bcc, 0xafa00010, 0xafa00014, 0x8fa60020, +0x2484543c, 0xafa00010, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00f, 0x93a20020, 0x3c030700, 0x34631000, 0x431025, 0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001, 0x304900ff, @@ -1200,7 +1199,7 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, -0x54e0000c, 0xaee90608, 0x3c040001, 0x24844bd4, +0x54e0000c, 0xaee90608, 0x3c040001, 0x24845444, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f000, 0x80022e0, 0x0, 0x8f830120, 0x27623800, 0x24660020, @@ -1226,11 +1225,11 @@ 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x14e0001b, -0x0, 0x3c040001, 0x24844bdc, 0xafa00010, +0x0, 0x3c040001, 0x2484544c, 0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0, 0x80022e0, 0x8ee201b0, 0x3c040001, -0x24844be8, 0xafa00014, 0x8ee60608, 0x8f470228, +0x24845458, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20150, 0x24420001, 0xaee20150, 0x8ee20150, 0x8ee20160, @@ -1257,7 +1256,7 @@ 0xaf82011c, 0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0xafbf0018, 0x8f820104, 0xafa20010, 0x8f820100, 0x3c050002, 0xafa20014, 0x8f8600b0, -0x8f87011c, 0x3c040001, 0x24844ca0, 0xc002403, +0x8f87011c, 0x3c040001, 0x24845510, 0xc002403, 0x34a5f000, 0x8f8300b0, 0x3c027f00, 0x621824, 0x3c020400, 0x10620029, 0x43102b, 0x14400008, 0x3c022000, 0x3c020100, 0x10620024, 0x3c020200, @@ -1274,7 +1273,7 @@ 0x27bd0020, 0x27bdffe0, 0xafbf001c, 0xafb00018, 0x8f820120, 0xafa20010, 0x8f820124, 0x3c050001, 0xafa20014, 0x8f8600a0, 0x8f87011c, 0x3c040001, -0x24844cac, 0xc002403, 0x34a5f000, 0x8f8300a0, +0x2484551c, 0xc002403, 0x34a5f000, 0x8f8300a0, 0x3c027f00, 0x621824, 0x3c020400, 0x10620053, 0x8021, 0x43102b, 0x14400008, 0x3c042000, 0x3c020100, 0x1062004d, 0x3c020200, 0x1062003a, @@ -1299,43 +1298,43 @@ 0xaee2019c, 0x80023e3, 0x8ee2019c, 0x8f8200a0, 0x34420001, 0xaf8200a0, 0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, 0x0, 0x3c020001, -0x8c425418, 0x27bdffe8, 0xafbf0014, 0x14400012, -0xafb00010, 0x3c100001, 0x26105560, 0x2002021, +0x8c425cb8, 0x27bdffe8, 0xafbf0014, 0x14400012, +0xafb00010, 0x3c100001, 0x26105e30, 0x2002021, 0xc002488, 0x24052000, 0x26021fe0, 0x3c010001, -0xac225534, 0x3c010001, 0xac225530, 0xaf420250, +0xac225df4, 0x3c010001, 0xac225df0, 0xaf420250, 0x24022000, 0xaf500254, 0xaf420258, 0x24020001, -0x3c010001, 0xac225418, 0x8fbf0014, 0x8fb00010, -0x3e00008, 0x27bd0018, 0x3c030001, 0x8c635534, +0x3c010001, 0xac225cb8, 0x8fbf0014, 0x8fb00010, +0x3e00008, 0x27bd0018, 0x3c030001, 0x8c635df4, 0x8c820000, 0x8fa80010, 0x8fa90014, 0xac620000, -0x3c020001, 0x8c425534, 0x8c830004, 0xac430004, +0x3c020001, 0x8c425df4, 0x8c830004, 0xac430004, 0xac450008, 0x8f840054, 0x2443ffe0, 0xac460010, 0xac470014, 0xac480018, 0xac49001c, 0x3c010001, -0xac235534, 0xac44000c, 0x3c020001, 0x24425560, +0xac235df4, 0xac44000c, 0x3c020001, 0x24425e30, 0x62182b, 0x10600005, 0x0, 0x3c020001, -0x8c425530, 0x3c010001, 0xac225534, 0x3c030001, -0x8c635534, 0x3c020001, 0x8c425400, 0xac620000, -0x3c030001, 0x8c635534, 0x3c020001, 0x8c425400, +0x8c425df0, 0x3c010001, 0xac225df4, 0x3c030001, +0x8c635df4, 0x3c020001, 0x8c425ca0, 0xac620000, +0x3c030001, 0x8c635df4, 0x3c020001, 0x8c425ca0, 0xac620004, 0x3e00008, 0xaf430250, 0x3c030001, -0x8c635534, 0x3c020001, 0x8c425400, 0x27bdffd0, +0x8c635df4, 0x3c020001, 0x8c425ca0, 0x27bdffd0, 0xafb40020, 0x8fb40040, 0xafb00010, 0x808021, 0xafb50024, 0x8fb50044, 0x8fa40048, 0xafb10014, 0xa08821, 0xafbf0028, 0xafb3001c, 0xafb20018, -0xac620000, 0x3c050001, 0x8ca55534, 0x3c020001, -0x8c425400, 0xc09021, 0xe09821, 0x10800006, +0xac620000, 0x3c050001, 0x8ca55df4, 0x3c020001, +0x8c425ca0, 0xc09021, 0xe09821, 0x10800006, 0xaca20004, 0x24a50008, 0xc002490, 0x24060018, 0x800244e, 0x0, 0x24a40008, 0xc002488, -0x24050018, 0x3c020001, 0x8c425534, 0x3c050001, -0x24a55560, 0x2442ffe0, 0x3c010001, 0xac225534, +0x24050018, 0x3c020001, 0x8c425df4, 0x3c050001, +0x24a55e30, 0x2442ffe0, 0x3c010001, 0xac225df4, 0x45102b, 0x10400005, 0x0, 0x3c020001, -0x8c425530, 0x3c010001, 0xac225534, 0x3c030001, -0x8c635534, 0x8e020000, 0xac620000, 0x3c030001, -0x8c635534, 0x8e020004, 0xac620004, 0xac710008, -0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225534, +0x8c425df0, 0x3c010001, 0xac225df4, 0x3c030001, +0x8c635df4, 0x8e020000, 0xac620000, 0x3c030001, +0x8c635df4, 0x8e020004, 0xac620004, 0xac710008, +0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225df4, 0x45102b, 0xac720010, 0xac730014, 0xac740018, 0xac75001c, 0x10400005, 0xac64000c, 0x3c020001, -0x8c425530, 0x3c010001, 0xac225534, 0x3c030001, -0x8c635534, 0x3c020001, 0x8c425400, 0xac620000, -0x3c030001, 0x8c635534, 0x3c020001, 0x8c425400, +0x8c425df0, 0x3c010001, 0xac225df4, 0x3c030001, +0x8c635df4, 0x3c020001, 0x8c425ca0, 0xac620000, +0x3c030001, 0x8c635df4, 0x3c020001, 0x8c425ca0, 0xac620004, 0xaf430250, 0x8fbf0028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0030, 0x10a00005, @@ -1381,7 +1380,7 @@ 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x3c040001, 0xafab0010, 0x8ee27264, 0x3c040001, -0x24844f10, 0x3c050004, 0xafa20014, 0x8ee604e4, +0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f114, 0x8ee27264, 0x34843800, 0x3641821, 0x24420010, 0x43102b, 0x14400073, 0x0, 0x8ee27264, 0x24480010, 0x3641021, @@ -1410,7 +1409,7 @@ 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x2508fffc, 0xafab0010, 0x8ee27264, 0x3c040001, -0x24844f10, 0x3c050004, 0xafa20014, 0x8ee604e4, +0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f125, 0x34028100, 0xa5020000, 0x9582000e, 0x800261d, 0xa5020002, 0x8f850100, 0x27623000, 0x24a60020, 0xc2102b, 0x50400001, @@ -1437,7 +1436,7 @@ 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x34028100, 0xafab0010, 0x8ee27264, -0x3c040001, 0x24844f10, 0x3c050004, 0xafa20014, +0x3c040001, 0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f015, 0x8ee37264, 0xa462000c, 0x8ee37264, 0x9582000e, 0xa462000e, 0x8002681, 0x24e70004, 0x8f840100, 0x27623000, @@ -1463,7 +1462,7 @@ 0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x15200009, 0x3c050004, -0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f10, +0xafab0010, 0x8ee27264, 0x3c040001, 0x24845780, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f004, 0x8ee2725c, 0x30e7ffff, 0x471021, 0xaee2725c, 0x8ee204e4, 0x8ee304fc, 0x8ee47258, 0x21100, @@ -1483,7 +1482,7 @@ 0x8f8200f0, 0x24090001, 0x8fa30018, 0x8fa4001c, 0xac430000, 0xac440004, 0xaf8700f0, 0x15200012, 0xd1142, 0x8f8200f0, 0xafa20010, 0x8f8200f4, -0x3c040001, 0x24844f1c, 0xafa20014, 0x8fa60018, +0x3c040001, 0x2484578c, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050004, 0xc002403, 0x34a5f005, 0x8ee20088, 0x24420001, 0xaee20088, 0x8ee20088, 0x80028d3, 0xaee0725c, 0x30430003, 0x24020002, @@ -1525,7 +1524,7 @@ 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x3c040001, 0xafab0010, -0x8ee27264, 0x3c040001, 0x24844f10, 0x3c050004, +0x8ee27264, 0x3c040001, 0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f014, 0x8ee27264, 0x34843800, 0x3641821, 0x24420010, 0x43102b, 0x14400073, 0x0, 0x8ee27264, @@ -1554,7 +1553,7 @@ 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x2508fffc, 0xafab0010, -0x8ee27264, 0x3c040001, 0x24844f10, 0x3c050004, +0x8ee27264, 0x3c040001, 0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f015, 0x34028100, 0xa5020000, 0x9582000e, 0x800285f, 0xa5020002, 0x8f850100, 0x27623000, 0x24a60020, @@ -1581,7 +1580,7 @@ 0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x34028100, -0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f10, +0xafab0010, 0x8ee27264, 0x3c040001, 0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028be, 0x34a5f016, 0x8ee37264, 0xa462000c, 0x8ee37264, 0x9582000e, 0xa462000e, 0x80028c2, 0x24e70004, @@ -1607,7 +1606,7 @@ 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000b, 0x3c050004, 0x3c040001, -0x24844f28, 0xafab0010, 0xafa00014, 0x8ee604e4, +0x24845798, 0xafab0010, 0xafa00014, 0x8ee604e4, 0x34a5f017, 0xc002403, 0x30e7ffff, 0x80028e1, 0x0, 0x8ee27264, 0x3c050001, 0x30e4ffff, 0x441021, 0xaee27264, 0x8ee2725c, 0x8ee37264, @@ -1673,7 +1672,7 @@ 0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1540000a, 0x24020001, -0xafa90010, 0x8ee27264, 0x3c040001, 0x24844f10, +0xafa90010, 0x8ee27264, 0x3c040001, 0x24845780, 0x3c050004, 0xafa20014, 0x8ee604e4, 0x8002a4f, 0x34a5f204, 0xa2e204ed, 0x8ee204e8, 0x8ee304fc, 0x8ee47258, 0x3c060001, 0x34c63800, 0x3c010001, @@ -1707,7 +1706,7 @@ 0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1540000c, 0x30e5ffff, 0x3c040001, -0x24844f28, 0x3c050004, 0xafa90010, 0xafa00014, +0x24845798, 0x3c050004, 0xafa90010, 0xafa00014, 0x8ee604e4, 0x34a5f237, 0xc002403, 0x30e7ffff, 0x8002a72, 0x0, 0x8ee27264, 0x451021, 0xaee27264, 0x8ee2726c, 0x8ee37264, 0x3c040001, @@ -1731,7 +1730,7 @@ 0x8f830108, 0x21140, 0x621821, 0xaf830108, 0xac800000, 0x8cc20018, 0x2443fffe, 0x2c620013, 0x104000c1, 0x31080, 0x3c010001, 0x220821, -0x8c224f50, 0x400008, 0x0, 0x8ee204f0, +0x8c2257c0, 0x400008, 0x0, 0x8ee204f0, 0x471021, 0xaee204f0, 0x8ee204f0, 0x8f43023c, 0x43102b, 0x144000be, 0x0, 0x8ee304e4, 0x8ee204f8, 0x506200ba, 0xa2e004f4, 0x8f830120, @@ -1758,7 +1757,7 @@ 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600000b, 0x24100001, 0x8ee204e4, -0x3c040001, 0x24844f34, 0xafa00014, 0xafa20010, +0x3c040001, 0x248457a4, 0xafa00014, 0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f006, 0x16000003, 0x24020001, 0x8002b71, 0xa2e204f4, 0x8ee20170, 0x24420001, 0xaee20170, @@ -1779,7 +1778,7 @@ 0x8002b71, 0xaee20000, 0x8ee2014c, 0x3c010001, 0x370821, 0xa02083e0, 0x24420001, 0xaee2014c, 0x8002b71, 0x8ee2014c, 0x94c7000e, 0x8cc2001c, -0x3c040001, 0x24844f40, 0xafa60014, 0xafa20010, +0x3c040001, 0x248457b0, 0xafa60014, 0xafa20010, 0x8cc60018, 0x3c050008, 0xc002403, 0x34a50910, 0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, 0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb60058, @@ -1788,7 +1787,7 @@ 0xafa00024, 0x106203e7, 0xafa0002c, 0x3c1e0001, 0x37de3800, 0x3c0bffff, 0x8f930108, 0x8e620018, 0x8f830104, 0x2443fffe, 0x2c620014, 0x104003cf, -0x31080, 0x3c010001, 0x220821, 0x8c224fa0, +0x31080, 0x3c010001, 0x220821, 0x8c225810, 0x400008, 0x0, 0x9663000e, 0x8ee2725c, 0x8ee404f0, 0x431021, 0xaee2725c, 0x8e63001c, 0x96e20458, 0x24840001, 0xaee404f0, 0x24630001, @@ -1817,7 +1816,7 @@ 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0x240c0001, 0xac820000, 0xac8c0004, 0x5600000d, 0x24100001, 0x8ee204e4, -0x3c040001, 0x24844f34, 0xafa00014, 0xafa20010, +0x3c040001, 0x248457a4, 0xafa00014, 0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f006, 0xc002403, 0xafab0038, 0x8fab0038, 0x1200030a, 0x240c0001, 0x8002f19, 0x0, 0x966c001c, @@ -2011,7 +2010,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020012, 0x240c0001, 0xac820000, 0xac8c0004, 0x5600000d, 0x24100001, -0x8ee204e4, 0x3c040001, 0x24844f34, 0xafa00014, +0x8ee204e4, 0x3c040001, 0x248457a4, 0xafa00014, 0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f006, 0xc002403, 0xafab0038, 0x8fab0038, 0x16000003, 0x240c0001, 0x8002f5c, 0xa2ec04f4, @@ -2066,7 +2065,7 @@ 0x8821, 0x8f8200e4, 0x24110001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x1620000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, -0x3c040001, 0x24845050, 0xafa20014, 0x8f8600e0, +0x3c040001, 0x248458c0, 0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f000, 0x80034cc, 0x0, 0x8fa3001c, 0x8fb20018, 0x3074ffff, 0x2694fffc, 0x621024, 0x10400058, @@ -2164,11 +2163,11 @@ 0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, -0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845058, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x248458c8, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, 0xc002403, 0x34a5f003, 0x80034cc, 0x0, 0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, -0x24845064, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0x248458d4, 0xafa20014, 0x8ee60e10, 0x8ee70e18, 0x3c050006, 0xc002403, 0x34a5f002, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x8ee20000, 0x8ee301c0, 0x2403ffbf, 0x431024, 0x8003470, 0xaee20000, @@ -2220,7 +2219,7 @@ 0x50550003, 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0xac960000, 0xac9e0004, 0x16200018, -0x3c050006, 0x8e020018, 0x3c040001, 0x24845070, +0x3c050006, 0x8e020018, 0x3c040001, 0x248458e0, 0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021, 0xc002403, 0xafa30014, 0x93a20037, 0x10400216, 0x340f8100, 0x8e420004, 0x8e430008, @@ -2253,7 +2252,7 @@ 0x210c0, 0x24425038, 0x2e22021, 0xac960000, 0xac9e0004, 0x1620000d, 0x0, 0xa60c000a, 0xa60a000e, 0x8f820100, 0xafa20010, 0x8f820104, -0x3c040001, 0x2484507c, 0x3c050006, 0xafa20014, +0x3c040001, 0x248458ec, 0x3c050006, 0xafa20014, 0x8ee6724c, 0x800343b, 0x34a5f00b, 0x3c010001, 0x370821, 0xa02083c0, 0xadab0000, 0x8ee201d8, 0x8ee3724c, 0x2442ffff, 0xaee201d8, 0x8ee201d8, @@ -2285,7 +2284,7 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x5620000d, 0x24110001, -0x8ee2724c, 0x3c040001, 0x24845088, 0xafa00014, +0x8ee2724c, 0x3c040001, 0x248458f8, 0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048, 0x8fae0048, 0x56200001, 0xaee00e1c, 0x8ee20188, 0x24420001, @@ -2312,7 +2311,7 @@ 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x1620000d, 0x0, 0x8ee2724c, -0x3c040001, 0x24845088, 0xafa00014, 0xafa20010, +0x3c040001, 0x248458f8, 0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048, 0x8fae0048, 0x8ee20174, 0x24420001, 0xaee20174, 0x8ee20174, 0x800346e, @@ -2342,7 +2341,7 @@ 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0xac960000, 0xac9e0004, 0x1620001d, 0x0, 0xa60c000a, 0x8f820100, 0xafa20010, 0x8f820104, -0x3c040001, 0x2484507c, 0x3c050006, 0xafa20014, +0x3c040001, 0x248458ec, 0x3c050006, 0xafa20014, 0x8ee6724c, 0x34a5f00d, 0xc002403, 0x2003821, 0x93a20037, 0x10400031, 0x340f8100, 0x8e420004, 0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000, @@ -2404,7 +2403,7 @@ 0x10430007, 0x4821, 0x8f8200e4, 0x24090001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x1520000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, -0x8f8200c8, 0x3c040001, 0x24845050, 0xafa20014, +0x8f8200c8, 0x3c040001, 0x248458c0, 0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f000, 0x8003850, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024, @@ -2502,15 +2501,15 @@ 0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, -0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845058, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x248458c8, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, 0xc002403, 0x34a5f003, 0x8003850, 0x0, 0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, -0x24845064, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0x248458d4, 0xafa20014, 0x8ee60e10, 0x8ee70e18, 0xc002403, 0x34a5f002, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x8ee20000, 0x8ee301c0, 0x2403ffbf, 0x431024, 0x80037f8, 0xaee20000, 0x8ee25240, -0xafa20010, 0x8ee25244, 0x3c040001, 0x24845064, +0xafa20010, 0x8ee25244, 0x3c040001, 0x248458d4, 0xafa20014, 0x8ee60e10, 0x8ee70e18, 0x3c050006, 0xc002403, 0x34a5f002, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x80037f8, 0x8ee201c0, 0x96e20468, @@ -2569,7 +2568,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x15200018, 0x3c050006, -0x8e020018, 0x3c040001, 0x24845070, 0xafa20010, +0x8e020018, 0x3c040001, 0x248458e0, 0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021, 0xc002403, 0xafa30014, 0x32c200ff, 0x1040002b, 0x34028100, 0x8e430004, 0x8e440008, 0x8e45000c, @@ -2629,7 +2628,7 @@ 0x10430007, 0x3821, 0x8f8200e4, 0x24070001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x14e0000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010, -0x8f8200c8, 0x3c040001, 0x24845094, 0xafa20014, +0x8f8200c8, 0x3c040001, 0x24845904, 0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f200, 0x8003c5b, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024, @@ -2727,11 +2726,11 @@ 0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, -0xafa20010, 0x8f8200e4, 0x3c040001, 0x248450a0, +0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845910, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, 0xc002403, 0x34a5f203, 0x8003c5b, 0x0, 0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001, -0x248450ac, 0xafa20014, 0x8ee60e10, 0x8ee70e18, +0x2484591c, 0xafa20014, 0x8ee60e10, 0x8ee70e18, 0x3c050006, 0xc002403, 0x34a5f202, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x8003c02, 0x8ee201c0, 0x96e20468, 0x53102b, 0x54400001, 0x3c168000, @@ -2827,7 +2826,7 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, -0x14e00019, 0x3c050006, 0x3c040001, 0x24845070, +0x14e00019, 0x3c050006, 0x3c040001, 0x248458e0, 0x8e220018, 0x34a5f209, 0xafa20010, 0x8e220000, 0x8e230004, 0x2203021, 0x1603821, 0xc002403, 0xafa30014, 0x93a2002f, 0x1040002a, 0x34028100, @@ -2891,7 +2890,7 @@ 0x24020001, 0xac620004, 0x1480000e, 0x24030040, 0x8ee20e14, 0xafa20010, 0x8ee20e18, 0x3c050007, 0xafa20014, 0x8ee60e0c, 0x8ee70e10, 0x3c040001, -0x248450b4, 0xc002403, 0x34a5f001, 0x8003cdd, +0x24845924, 0xc002403, 0x34a5f001, 0x8003cdd, 0x0, 0x8ee20500, 0x24420001, 0x50430003, 0x1021, 0x8ee20500, 0x24420001, 0xaee20500, 0x8ee20500, 0x21080, 0x571021, 0xac490508, @@ -2923,7 +2922,7 @@ 0x24020003, 0xac620000, 0x24020001, 0xac620004, 0x1480000e, 0x24030040, 0x8ee2523c, 0xafa20010, 0x8ee25244, 0x3c050007, 0xafa20014, 0x8ee65238, -0x8ee75240, 0x3c040001, 0x248450c0, 0xc002403, +0x8ee75240, 0x3c040001, 0x24845930, 0xc002403, 0x34a5f010, 0x8003d5f, 0x0, 0x8ee20500, 0x24420001, 0x50430003, 0x1021, 0x8ee20500, 0x24420001, 0xaee20500, 0x8ee20500, 0x21080, @@ -2943,7 +2942,7 @@ 0x8f830128, 0x21140, 0x621821, 0xaf830128, 0xaca00000, 0x8cc20018, 0x2443fffe, 0x2c620012, 0x10400008, 0x31080, 0x3c010001, 0x220821, -0x8c2250d0, 0x400008, 0x0, 0x24020001, +0x8c225940, 0x400008, 0x0, 0x24020001, 0xaee24e24, 0x3e00008, 0x0, 0x27bdffc8, 0xafbf0030, 0xafb5002c, 0xafb40028, 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f830128, @@ -2952,7 +2951,7 @@ 0x24140040, 0x8f8c0128, 0x8f820128, 0x24420020, 0xaf820128, 0x9182001b, 0x8f830128, 0x2443fffe, 0x2c620012, 0x1040029c, 0x31080, 0x3c010001, -0x220821, 0x8c225128, 0x400008, 0x0, +0x220821, 0x8c225998, 0x400008, 0x0, 0x8f420218, 0x30420100, 0x10400007, 0x0, 0x95830016, 0x95820018, 0x621823, 0x31402, 0x431021, 0xa5820016, 0x8d82001c, 0x3c038000, @@ -3053,7 +3052,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x1600000d, 0x0, -0x8f820120, 0x3c040001, 0x24845118, 0xafa00014, +0x8f820120, 0x3c040001, 0x24845988, 0xafa00014, 0xafa20010, 0x8d86001c, 0x8f870124, 0x3c050008, 0xc002403, 0x34a50001, 0x8004057, 0x0, 0x8ee2724c, 0x24420001, 0x304207ff, 0x11a00006, @@ -3088,7 +3087,7 @@ 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020001, 0xac950000, 0xac820004, 0x5600000b, 0x24100001, 0x8ee2724c, -0x3c040001, 0x24845088, 0xafa00014, 0xafa20010, +0x3c040001, 0x248458f8, 0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x56000001, 0xaee00e1c, 0x8ee20188, 0x24420001, 0xaee20188, 0x8004050, 0x8ee20188, @@ -3114,7 +3113,7 @@ 0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021, 0x24020001, 0xac950000, 0xac820004, 0x1600000b, -0x0, 0x8ee2724c, 0x3c040001, 0x24845088, +0x0, 0x8ee2724c, 0x3c040001, 0x248458f8, 0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x8ee20174, 0x24420001, 0xaee20174, 0x8004057, 0x8ee20174, @@ -3126,16 +3125,16 @@ 0xc00249a, 0xafb00010, 0x2021, 0x24100001, 0x2402241f, 0xaf900210, 0xaf900200, 0xaf800204, 0xaf820214, 0x8f460248, 0x24030004, 0x3c020040, -0x3c010001, 0xac235484, 0x3c010001, 0xac235488, -0x3c010001, 0xac20553c, 0x3c010001, 0xac225480, -0x3c010001, 0xac235488, 0xc004fa8, 0x24050004, -0xc004785, 0x0, 0x8ee20000, 0x3c03feff, +0x3c010001, 0xac235d24, 0x3c010001, 0xac235d28, +0x3c010001, 0xac205dfc, 0x3c010001, 0xac225d20, +0x3c010001, 0xac235d28, 0xc0050e0, 0x24050004, +0xc0047fc, 0x0, 0x8ee20000, 0x3c03feff, 0x3463fffd, 0x431024, 0xaee20000, 0x3c023c00, 0xaf82021c, 0x3c010001, 0x370821, 0xac3083ac, 0x8fbf0014, 0x8fb00010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c050008, 0x34a50400, 0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, 0x3c040001, -0x248451d0, 0xc002403, 0x3821, 0x8ee20280, +0x24845a40, 0xc002403, 0x3821, 0x8ee20280, 0x24420001, 0xaee20280, 0x8ee20280, 0x8f830200, 0x3c023f00, 0x621824, 0x8fbf0018, 0x3c020400, 0x3e00008, 0x27bd0020, 0x27bdffd8, 0xafbf0020, @@ -3147,16 +3146,16 @@ 0xaee20218, 0x8ee20218, 0x80040c6, 0x3c03fdff, 0x8ee2021c, 0x24420001, 0xaee2021c, 0x8ee2021c, 0x3c03fdff, 0x3463ffff, 0x3c0808ff, 0x3508ffff, -0x8ee20000, 0x3c040001, 0x248451dc, 0x3c050008, +0x8ee20000, 0x3c040001, 0x24845a4c, 0x3c050008, 0x2003021, 0x431024, 0xaee20000, 0x8f820220, 0x3821, 0x3c030300, 0x481024, 0x431025, 0xaf820220, 0xafa00010, 0xc002403, 0xafa00014, 0x8004296, 0x0, 0x2111024, 0x1040001f, 0x3c024000, 0x8f830224, 0x24021402, 0x1462000b, -0x3c03fdff, 0x3c040001, 0x248451e8, 0x3c050008, +0x3c03fdff, 0x3c040001, 0x24845a58, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860224, 0x34a5ffff, 0xc002403, 0x3821, 0x3c03fdff, 0x8ee20000, -0x3463ffff, 0x2002021, 0x431024, 0xc004cf4, +0x3463ffff, 0x2002021, 0x431024, 0xc004e2c, 0xaee20000, 0x8ee20220, 0x24420001, 0xaee20220, 0x8ee20220, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x8004295, 0x511025, 0x2021024, @@ -3227,7 +3226,7 @@ 0x431025, 0xaf820220, 0x8f8600e0, 0x8f8400e4, 0x10c4002a, 0x0, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x24c2fff8, 0xaf8200e0, -0x3c020001, 0x8c4275c0, 0x3c030008, 0x8f8600e0, +0x3c020001, 0x8c427e90, 0x3c030008, 0x8f8600e0, 0x431024, 0x1040001d, 0x0, 0x10c4001b, 0x240dfff8, 0x3c0a000a, 0x354af000, 0x3c0c0080, 0x24850008, 0x27622800, 0x50a20001, 0x27651800, @@ -3263,12 +3262,12 @@ 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, 0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, -0x3e00008, 0x27bd0028, 0x3c020001, 0x8c425498, +0x3e00008, 0x27bd0028, 0x3c020001, 0x8c425d38, 0x27bdffd8, 0x10400012, 0xafbf0020, 0x3c040001, -0x248451f4, 0x3c050008, 0x24020001, 0x3c010001, +0x24845a64, 0x3c050008, 0x24020001, 0x3c010001, 0x370821, 0xac2283ac, 0xafa00010, 0xafa00014, -0x8f860220, 0x34a50498, 0x3c010001, 0xac205498, -0x3c010001, 0xac22548c, 0xc002403, 0x3821, +0x8f860220, 0x34a50498, 0x3c010001, 0xac205d38, +0x3c010001, 0xac225d2c, 0xc002403, 0x3821, 0x8f420268, 0x3c037fff, 0x3463ffff, 0x431024, 0xaf420268, 0x8ee204d0, 0x8ee404d4, 0x2403fffe, 0x431024, 0x30840002, 0x1080011e, 0xaee204d0, @@ -3334,24 +3333,24 @@ 0x54a00006, 0x240b0001, 0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x54620003, 0xafa00010, 0x80043d6, -0x0, 0x3c040001, 0x24845200, 0xafa00014, +0x0, 0x3c040001, 0x24845a70, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x80043d6, 0x0, 0x3c040001, -0x2484520c, 0xafa00014, 0x8f860120, 0x8f870124, +0x24845a7c, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80043d6, -0x0, 0x3c040001, 0x24845218, 0xafa00014, +0x0, 0x3c040001, 0x24845a88, 0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c, 0x8fbf0020, 0x3e00008, 0x27bd0028, -0x3c020001, 0x8c425498, 0x27bdffe0, 0x1440000d, -0xafbf0018, 0x3c040001, 0x24845224, 0x3c050008, +0x3c020001, 0x8c425d38, 0x27bdffe0, 0x1440000d, +0xafbf0018, 0x3c040001, 0x24845a94, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220, 0x34a50499, -0x24020001, 0x3c010001, 0xac225498, 0xc002403, +0x24020001, 0x3c010001, 0xac225d38, 0xc002403, 0x3821, 0x8ee204d0, 0x3c030001, 0x771821, 0x946383b2, 0x34420001, 0x10600007, 0xaee204d0, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, -0x34420008, 0xaf820220, 0x2021, 0xc0050b3, +0x34420008, 0xaf820220, 0x2021, 0xc005276, 0x24050004, 0xaf420268, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -3369,7 +3368,7 @@ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c120001, -0x26521200, 0x3c140001, 0x8e945410, 0x3c100001, +0x26521200, 0x3c140001, 0x8e945cb0, 0x3c100001, 0x26101120, 0x3c15c000, 0x36b50060, 0x8e8a0000, 0x8eb30000, 0x26a400b, 0x248000a, 0x200f821, 0x0, 0xd, 0x0, 0x0, @@ -3430,843 +3429,978 @@ 0x1062000c, 0x43102b, 0x14400006, 0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x8004539, 0x0, 0x10620004, 0x24020800, 0x8004539, -0x0, 0x24020700, 0x3c010001, 0xac22549c, +0x0, 0x24020700, 0x3c010001, 0xac225d3c, 0x3e00008, 0x0, 0x27bdffd0, 0xafbf0028, -0x3c010001, 0xc004cd1, 0xac205484, 0x24040001, -0x2821, 0x27a60020, 0x34028000, 0xc0048ee, -0xa7a20020, 0x8f830054, 0x8f820054, 0x800454b, -0x24630064, 0x8f820054, 0x621023, 0x2c420065, -0x1440fffc, 0x24040001, 0x24050001, 0xc0048ac, -0x27a60020, 0x8f830054, 0x8f820054, 0x8004557, -0x24630064, 0x8f820054, 0x621023, 0x2c420065, -0x1440fffc, 0x24040001, 0x24050001, 0xc0048ac, -0x27a60020, 0x8f830054, 0x8f820054, 0x8004563, -0x24630064, 0x8f820054, 0x621023, 0x2c420065, -0x1440fffc, 0x24040001, 0x24050002, 0xc0048ac, -0x27a60018, 0x8f830054, 0x8f820054, 0x800456f, -0x24630064, 0x8f820054, 0x621023, 0x2c420065, -0x1440fffc, 0x24040001, 0x24050003, 0xc0048ac, -0x27a6001a, 0x97a20020, 0x10400028, 0x24030001, -0x3c020001, 0x8c425484, 0x97a30018, 0x34420001, -0x3c010001, 0xac225484, 0x24020015, 0x1462000e, -0x0, 0x97a2001a, 0x3042fff0, 0x3843f420, -0x2c630001, 0x3842f430, 0x2c420001, 0x621825, -0x10600005, 0x24020003, 0x3c010001, 0xac225550, -0x80045a8, 0x3c08fff0, 0x97a30018, 0x24027810, -0x1462000a, 0x24020002, 0x97a2001a, 0x3042fff0, -0x14400006, 0x24020002, 0x24020004, 0x3c010001, -0xac225550, 0x80045a8, 0x3c08fff0, 0x3c010001, -0xac225550, 0x80045a8, 0x3c08fff0, 0x3c020001, -0x8c425484, 0x3c010001, 0xac235550, 0x34420004, -0x3c010001, 0xac225484, 0x3c08fff0, 0x3508bdc0, -0x8f830054, 0x97a60018, 0x3c070001, 0x8ce75550, -0x3c040001, 0x24845290, 0x24020001, 0x3c010001, -0xac22548c, 0xafa60010, 0x3c060001, 0x8cc65484, -0x97a2001a, 0x3c05000d, 0x34a50100, 0x3c010001, -0xac205488, 0x681821, 0x3c010001, 0xac235548, -0xc002403, 0xafa20014, 0x8fbf0028, 0x3e00008, -0x27bd0030, 0x27bdffe8, 0x24070004, 0x3c040001, -0x8c845488, 0x3021, 0x24020001, 0x1482000a, -0xafbf0010, 0x3c020001, 0x8c4275cc, 0x3c050004, -0x30428000, 0x1040000c, 0x34a593e0, 0x3c05000f, -0x80045db, 0x34a54240, 0x3c020001, 0x8c4275cc, -0x3c05000f, 0x30428000, 0x10400003, 0x34a54240, -0x3c05001e, 0x34a58480, 0x3c020001, 0x8c425548, -0x8f830054, 0x451021, 0x431023, 0x45102b, -0x1440002e, 0x0, 0x3c020001, 0x8c425490, -0x1440002a, 0x2cc20001, 0x7182b, 0x431024, -0x1040001d, 0x0, 0x3c090001, 0x8d295484, -0x240b0001, 0x3c054000, 0x3c080001, 0x250875cc, -0x250afffc, 0x42042, 0x14800002, 0x24e7ffff, -0x24040008, 0x891024, 0x5040000b, 0x2cc20001, -0x148b0004, 0x0, 0x8d020000, 0x8004600, -0x451024, 0x8d420000, 0x451024, 0x54400001, -0x24060001, 0x2cc20001, 0x7182b, 0x431024, -0x5440ffed, 0x42042, 0x3c010001, 0x10c00024, -0xac245488, 0x8f830054, 0x24020001, 0x3c010001, -0xac22548c, 0x3c010001, 0xac235548, 0x3c020001, -0x8c42548c, 0x10400006, 0x24020001, 0x3c010001, -0xac20548c, 0x3c010001, 0x370821, 0xac2283ac, -0x3c030001, 0x771821, 0x8c6383ac, 0x24020008, -0x10620005, 0x24020001, 0xc004630, 0x0, -0x800462d, 0x0, 0x3c030001, 0x8c635488, -0x10620007, 0x2402000e, 0x3c030001, 0x8c637560, -0x10620003, 0x0, 0xc004cf4, 0x8f840220, -0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, -0x3c02fdff, 0xafbf0018, 0x8ee30000, 0x3c050001, -0x8ca55488, 0x3c040001, 0x8c8454a8, 0x3442ffff, -0x621824, 0x14a40008, 0xaee30000, 0x3c030001, -0x771821, 0x8c6383ac, 0x3c020001, 0x8c4254ac, -0x10620008, 0x0, 0x3c020001, 0x571021, -0x8c4283ac, 0x3c010001, 0xac2554a8, 0x3c010001, -0xac2254ac, 0x3c030001, 0x8c635488, 0x24020002, -0x10620131, 0x2c620003, 0x10400005, 0x24020001, -0x10620008, 0x0, 0x800477f, 0x0, -0x24020004, 0x10620079, 0x24020001, 0x8004780, +0x8f830054, 0x8f820054, 0x3c010001, 0xac205d24, +0x8004544, 0x24630064, 0x8f820054, 0x621023, +0x2c420065, 0x1440fffc, 0x0, 0xc004d49, +0x0, 0x24040001, 0x2821, 0x27a60020, +0x34028000, 0xc004966, 0xa7a20020, 0x8f830054, +0x8f820054, 0x8004555, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050001, 0xc004924, 0x27a60020, 0x8f830054, +0x8f820054, 0x8004561, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050001, 0xc004924, 0x27a60020, 0x8f830054, +0x8f820054, 0x800456d, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050002, 0xc004924, 0x27a60018, 0x8f830054, +0x8f820054, 0x8004579, 0x24630064, 0x8f820054, +0x621023, 0x2c420065, 0x1440fffc, 0x24040001, +0x24050003, 0xc004924, 0x27a6001a, 0x3c040001, +0x24845b00, 0x97a60020, 0x97a70018, 0x97a2001a, +0x3c05000d, 0x34a50100, 0xafa00014, 0xc002403, +0xafa20010, 0x97a20020, 0x10400045, 0x24036040, +0x97a2001a, 0x3042fff0, 0x14430009, 0x24020020, +0x97a30018, 0x54620008, 0x24027830, 0x24020003, +0x3c010001, 0xac225d24, 0x80045a4, 0x24020005, +0x97a30018, 0x24027830, 0x1462000e, 0x24030010, +0x97a2001a, 0x3042fff0, 0x1443000a, 0x24020003, +0x3c010001, 0xac225d24, 0x24020006, 0x3c010001, +0xac225e0c, 0x3c010001, 0xac225e18, 0x80045da, +0x3c09fff0, 0x3c020001, 0x8c425d24, 0x97a30018, +0x34420001, 0x3c010001, 0xac225d24, 0x24020015, +0x1462000e, 0x0, 0x97a2001a, 0x3042fff0, +0x3843f420, 0x2c630001, 0x3842f430, 0x2c420001, +0x621825, 0x10600005, 0x24020003, 0x3c010001, +0xac225e18, 0x80045da, 0x3c09fff0, 0x97a30018, +0x24027810, 0x1462000a, 0x24020002, 0x97a2001a, +0x3042fff0, 0x14400006, 0x24020002, 0x24020004, +0x3c010001, 0xac225e18, 0x80045da, 0x3c09fff0, +0x3c010001, 0xac225e18, 0x80045da, 0x3c09fff0, +0x3c020001, 0x8c425d24, 0x24030001, 0x3c010001, +0xac235e18, 0x34420004, 0x3c010001, 0xac225d24, +0x3c09fff0, 0x3529bdc0, 0x8f830054, 0x3c060001, +0x8cc65d24, 0x3c070001, 0x8ce75e18, 0x97a80018, +0x3c040001, 0x24845b00, 0x24020001, 0x3c010001, +0xac225d2c, 0xafa80010, 0x97a2001a, 0x3c05000d, +0x34a50100, 0x3c010001, 0xac205d28, 0x691821, +0x3c010001, 0xac235e08, 0xc002403, 0xafa20014, +0x8fbf0028, 0x3e00008, 0x27bd0030, 0x27bdffe8, +0x3c050001, 0x8ca55d28, 0x24060004, 0x24020001, +0x14a20014, 0xafbf0010, 0x3c020001, 0x8c427e9c, +0x30428000, 0x10400005, 0x3c04000f, 0x3c030001, +0x8c635e18, 0x8004608, 0x34844240, 0x3c040004, +0x3c030001, 0x8c635e18, 0x348493e0, 0x24020005, +0x14620016, 0x0, 0x3c04003d, 0x8004620, +0x34840900, 0x3c020001, 0x8c427e98, 0x30428000, +0x10400005, 0x3c04001e, 0x3c030001, 0x8c635e18, +0x800461b, 0x34848480, 0x3c04000f, 0x3c030001, +0x8c635e18, 0x34844240, 0x24020005, 0x14620003, +0x0, 0x3c04007a, 0x34841200, 0x3c020001, +0x8c425e08, 0x8f830054, 0x441021, 0x431023, +0x44102b, 0x14400037, 0x0, 0x3c020001, +0x8c425d30, 0x14400033, 0x0, 0x3c010001, +0x10c00025, 0xac205d40, 0x3c090001, 0x8d295d24, +0x24070001, 0x3c044000, 0x3c080001, 0x25087e9c, +0x250afffc, 0x52842, 0x14a00002, 0x24c6ffff, +0x24050008, 0xa91024, 0x10400010, 0x0, +0x14a70008, 0x0, 0x8d020000, 0x441024, +0x1040000a, 0x0, 0x3c010001, 0x800464c, +0xac255d40, 0x8d420000, 0x441024, 0x10400003, +0x0, 0x3c010001, 0xac275d40, 0x3c020001, +0x8c425d40, 0x6182b, 0x2c420001, 0x431024, +0x5440ffe5, 0x52842, 0x8f820054, 0x3c030001, +0x8c635d40, 0x3c010001, 0xac225e08, 0x1060002a, +0x24020001, 0x3c010001, 0xac255d28, 0x3c010001, +0xac225d2c, 0x3c020001, 0x8c425d40, 0x10400022, +0x0, 0x3c020001, 0x8c425d2c, 0x1040000a, +0x24020001, 0x3c010001, 0xac205d2c, 0x3c010001, +0x370821, 0xac2283ac, 0x3c010001, 0xac205dac, +0x3c010001, 0xac225d64, 0x3c030001, 0x771821, +0x8c6383ac, 0x24020008, 0x10620005, 0x24020001, +0xc004686, 0x0, 0x8004683, 0x0, +0x3c030001, 0x8c635d28, 0x10620007, 0x2402000e, +0x3c030001, 0x8c637e30, 0x10620003, 0x0, +0xc004e2c, 0x8f840220, 0x8fbf0010, 0x3e00008, +0x27bd0018, 0x27bdffe0, 0x3c02fdff, 0xafbf001c, +0xafb00018, 0x8ee30000, 0x3c050001, 0x8ca55d28, +0x3c040001, 0x8c845d50, 0x3442ffff, 0x621824, +0x14a40008, 0xaee30000, 0x3c030001, 0x771821, +0x8c6383ac, 0x3c020001, 0x8c425d54, 0x10620008, 0x0, 0x3c020001, 0x571021, 0x8c4283ac, -0x2443ffff, 0x2c620008, 0x10400122, 0x31080, -0x3c010001, 0x220821, 0x8c2252a8, 0x400008, -0x0, 0xc004785, 0x0, 0x3c020001, -0x8c425494, 0x3c010001, 0xac205420, 0x104000bd, -0x24020002, 0x3c010001, 0x370821, 0xac2283ac, -0x3c010001, 0x8004782, 0xac205494, 0xc00492f, -0x0, 0x3c030001, 0x8c6354b0, 0x80046f1, -0x24020011, 0x3c050001, 0x8ca55488, 0x3c060001, -0x8cc675cc, 0xc004fa8, 0x2021, 0x24020005, -0x3c010001, 0xac205494, 0x3c010001, 0x370821, -0x8004782, 0xac2283ac, 0x3c040001, 0x2484529c, -0x3c05000f, 0x34a50100, 0x3021, 0x3821, -0xafa00010, 0xc002403, 0xafa00014, 0x8004782, -0x0, 0x8f820220, 0x3c03f700, 0x431025, -0x800471a, 0xaf820220, 0x8f820220, 0x3c030004, -0x431024, 0x14400090, 0x24020007, 0x8f830054, -0x3c020001, 0x8c425540, 0x2463d8f0, 0x431023, -0x2c422710, 0x144000df, 0x24020001, 0x8004780, -0x0, 0x3c050001, 0x8ca55488, 0xc0050b3, -0x2021, 0xc00517e, 0x2021, 0x3c030001, -0x8c6375c4, 0x46100d1, 0x24020001, 0x3c020008, -0x621024, 0x10400006, 0x0, 0x8f820214, -0x3c03ffff, 0x431024, 0x80046bd, 0x3442251f, -0x8f820214, 0x3c03ffff, 0x431024, 0x3442241f, -0xaf820214, 0x8ee20000, 0x3c030200, 0x431025, -0xaee20000, 0x8f820220, 0x2403fffb, 0x431024, -0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, -0x24020008, 0x3c010001, 0x370821, 0xc0043dd, -0xac2283ac, 0x8004782, 0x0, 0x3c020001, -0x571021, 0x8c4283ac, 0x2443ffff, 0x2c620008, -0x104000ac, 0x31080, 0x3c010001, 0x220821, -0x8c2252c8, 0x400008, 0x0, 0xc00429b, -0x0, 0x3c010001, 0xac20548c, 0xaf800204, -0x3c010001, 0xc004785, 0xac2075b0, 0x24020001, -0x3c010001, 0xac2254a0, 0x24020002, 0x3c010001, -0x370821, 0x8004782, 0xac2283ac, 0xc004802, -0x0, 0x3c030001, 0x8c6354a0, 0x24020009, -0x14620090, 0x24020003, 0x3c010001, 0x370821, -0x8004782, 0xac2283ac, 0x3c020001, 0x8c4275c8, -0x30424000, 0x10400005, 0x0, 0x8f820044, -0x3c03ffff, 0x8004702, 0x34637fff, 0x8f820044, -0x2403ff7f, 0x431024, 0xaf820044, 0x8f830054, -0x800471c, 0x24020004, 0x8f830054, 0x3c020001, -0x8c425540, 0x2463d8f0, 0x431023, 0x2c422710, -0x14400074, 0x24020005, 0x3c010001, 0x370821, -0x8004782, 0xac2283ac, 0x8f820220, 0x3c03f700, -0x431025, 0xaf820220, 0xaf800204, 0x3c010001, -0xac2075b0, 0x8f830054, 0x24020006, 0x3c010001, -0x370821, 0xac2283ac, 0x3c010001, 0x8004782, -0xac235540, 0x8f830054, 0x3c020001, 0x8c425540, -0x2463fff6, 0x431023, 0x2c42000a, 0x14400059, -0x0, 0x24020007, 0x3c010001, 0x370821, -0x8004782, 0xac2283ac, 0x8f820220, 0x3c04f700, -0x441025, 0xaf820220, 0x8f820220, 0x3c030300, -0x431024, 0x14400005, 0x1821, 0x8f820220, -0x24030001, 0x441025, 0xaf820220, 0x10600043, -0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001, -0x8c845538, 0x431024, 0x3442251f, 0xaf820214, -0x24020008, 0x3c010001, 0x370821, 0x1080000b, -0xac2283ac, 0x3c020001, 0x8c425514, 0x14400007, -0x24020001, 0x3c010001, 0xac227560, 0xc004cf4, -0x8f840220, 0x800476f, 0x0, 0x8f820220, -0x3c030008, 0x431024, 0x14400017, 0x2402000e, -0x3c010001, 0xac227560, 0x8ee20000, 0x2021, -0x3c030200, 0x431025, 0xc00517e, 0xaee20000, -0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, -0x8f820220, 0x34420002, 0xc0043dd, 0xaf820220, -0x3c050001, 0x8ca55488, 0xc0050b3, 0x2021, -0x8004782, 0x0, 0x3c020001, 0x8c425514, -0x10400010, 0x0, 0x3c020001, 0x8c425510, -0x2442ffff, 0x3c010001, 0xac225510, 0x14400009, -0x24020002, 0x3c010001, 0xac205514, 0x3c010001, -0x8004782, 0xac225510, 0x24020001, 0x3c010001, -0xac22548c, 0x8fbf0018, 0x3e00008, 0x27bd0020, -0x8f820200, 0x8f820220, 0x8f820220, 0x34420004, -0xaf820220, 0x8f820200, 0x3c060001, 0x8cc65488, -0x34420004, 0xaf820200, 0x24020002, 0x10c2003a, -0x2cc20003, 0x10400005, 0x24020001, 0x10c20008, -0x0, 0x80047cb, 0x0, 0x24020004, -0x10c20013, 0x24020001, 0x80047cb, 0x0, -0x3c030001, 0x8c635478, 0x3c020001, 0x8c425480, -0x3c040001, 0x8c84549c, 0x3c050001, 0x8ca5547c, -0xaf860200, 0xaf860220, 0x34630022, 0x441025, -0x451025, 0x34420002, 0x80047ca, 0xaf830200, -0x3c030001, 0x8c635538, 0xaf820200, 0x10600009, -0xaf820220, 0x3c020001, 0x8c425514, 0x14400005, -0x3c033f00, 0x3c020001, 0x8c425470, 0x80047be, -0x346300e0, 0x3c020001, 0x8c425470, 0x3c033f00, -0x346300e2, 0x431025, 0xaf820200, 0x3c030001, -0x8c635474, 0x3c04f700, 0x3c020001, 0x8c425480, -0x3c050001, 0x8ca5549c, 0x641825, 0x431025, -0x451025, 0xaf820220, 0x3e00008, 0x0, -0x8f820220, 0x3c030001, 0x8c635488, 0x34420004, -0xaf820220, 0x24020001, 0x1062000f, 0x0, -0x8f830054, 0x8f820054, 0x24630002, 0x621023, -0x2c420003, 0x10400011, 0x0, 0x8f820054, -0x621023, 0x2c420003, 0x1040000c, 0x0, -0x80047dc, 0x0, 0x8f830054, 0x8f820054, -0x80047e8, 0x24630007, 0x8f820054, 0x621023, -0x2c420008, 0x1440fffc, 0x0, 0x8f8400e0, -0x30820007, 0x1040000d, 0x0, 0x8f820054, -0x8f8300e0, 0x14830009, 0x24450032, 0x8f820054, -0xa21023, 0x2c420033, 0x10400004, 0x0, -0x8f8200e0, 0x1082fff9, 0x0, 0x8f820220, -0x2403fffd, 0x431024, 0xaf820220, 0x3e00008, -0x0, 0x3c030001, 0x8c6354a0, 0x3c020001, -0x8c4254a4, 0x50620004, 0x2463ffff, 0x3c010001, -0xac2354a4, 0x2463ffff, 0x2c620009, 0x1040009d, -0x31080, 0x3c010001, 0x220821, 0x8c2252e8, -0x400008, 0x0, 0x8f820044, 0x34428080, -0xaf820044, 0x8f830054, 0x800489b, 0x24020002, -0x8f830054, 0x3c020001, 0x8c425544, 0x2463d8f0, -0x431023, 0x2c422710, 0x1440008a, 0x24020003, -0x80048a8, 0x0, 0x8f820044, 0x3c03ffff, -0x34637fff, 0x431024, 0xaf820044, 0x8f830054, -0x800489b, 0x24020004, 0x8f830054, 0x3c020001, -0x8c425544, 0x2463fff6, 0x431023, 0x2c42000a, -0x14400078, 0x24020005, 0x80048a8, 0x0, +0x3c010001, 0xac255d50, 0x3c010001, 0xac225d54, +0x3c030001, 0x8c635d28, 0x24020002, 0x10620150, +0x2c620003, 0x10400005, 0x24020001, 0x10620008, +0x0, 0x80047f5, 0x0, 0x24020004, +0x10620098, 0x24020001, 0x80047f6, 0x0, +0x3c020001, 0x571021, 0x8c4283ac, 0x2443ffff, +0x2c620008, 0x10400141, 0x31080, 0x3c010001, +0x220821, 0x8c225b18, 0x400008, 0x0, +0x3c030001, 0x8c635e18, 0x24020005, 0x14620014, +0x0, 0x3c020001, 0x8c425d34, 0x1040000a, +0x24020003, 0xc0047fc, 0x0, 0x24020002, +0x3c010001, 0x370821, 0xac2283ac, 0x3c010001, +0x80046d2, 0xac205d34, 0x3c010001, 0x370821, +0xac2283ac, 0x3c010001, 0x80047f8, 0xac205cc0, +0xc0047fc, 0x0, 0x3c020001, 0x8c425d34, +0x3c010001, 0xac205cc0, 0x104000c4, 0x24020002, +0x3c010001, 0x370821, 0xac2283ac, 0x3c010001, +0x80047f8, 0xac205d34, 0x24020001, 0x3c010001, +0xc0049a7, 0xac225d60, 0x3c030001, 0x8c635d60, +0x8004767, 0x24020011, 0x3c020001, 0x8c425e18, +0x24100005, 0x10500007, 0x0, 0x3c050001, +0x8ca55d28, 0x3c060001, 0x8cc67e9c, 0xc0050e0, +0x2021, 0x3c010001, 0xac205d34, 0x3c010001, +0x370821, 0x80047f8, 0xac3083ac, 0x3c040001, +0x24845b0c, 0x3c05000f, 0x34a50100, 0x3021, +0x3821, 0xafa00010, 0xc002403, 0xafa00014, +0x80047f8, 0x0, 0x8f820220, 0x3c03f700, +0x431025, 0x8004790, 0xaf820220, 0x8f820220, +0x3c030004, 0x431024, 0x14400091, 0x24020007, +0x8f830054, 0x3c020001, 0x8c425e00, 0x2463d8f0, +0x431023, 0x2c422710, 0x144000e0, 0x24020001, +0x80047f6, 0x0, 0x3c050001, 0x8ca55d28, +0xc005276, 0x2021, 0xc005397, 0x2021, +0x3c030001, 0x8c637e94, 0x46100d2, 0x24020001, +0x3c020008, 0x621024, 0x10400006, 0x0, +0x8f820214, 0x3c03ffff, 0x431024, 0x8004732, +0x3442251f, 0x8f820214, 0x3c03ffff, 0x431024, +0x3442241f, 0xaf820214, 0x8ee20000, 0x3c030200, +0x431025, 0xaee20000, 0x8f820220, 0x2403fffb, +0x431024, 0xaf820220, 0x8f820220, 0x34420002, +0xaf820220, 0x24020008, 0x3c010001, 0x370821, +0xc0043dd, 0xac2283ac, 0x3c010001, 0x80047f8, +0xac205db0, 0x3c020001, 0x571021, 0x8c4283ac, +0x2443ffff, 0x2c620008, 0x104000ac, 0x31080, +0x3c010001, 0x220821, 0x8c225b38, 0x400008, +0x0, 0xc00429b, 0x0, 0x3c010001, +0xac205d2c, 0xaf800204, 0x3c010001, 0xc0047fc, +0xac207e80, 0x24020001, 0x3c010001, 0xac225d44, +0x24020002, 0x3c010001, 0x370821, 0x80047f8, +0xac2283ac, 0xc004879, 0x0, 0x3c030001, +0x8c635d44, 0x24020009, 0x14620090, 0x24020003, +0x3c010001, 0x370821, 0x80047f8, 0xac2283ac, +0x3c020001, 0x8c427e98, 0x30424000, 0x10400005, +0x0, 0x8f820044, 0x3c03ffff, 0x8004778, +0x34637fff, 0x8f820044, 0x2403ff7f, 0x431024, +0xaf820044, 0x8f830054, 0x8004792, 0x24020004, +0x8f830054, 0x3c020001, 0x8c425e00, 0x2463d8f0, +0x431023, 0x2c422710, 0x14400074, 0x24020005, +0x3c010001, 0x370821, 0x80047f8, 0xac2283ac, 0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, -0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, -0x8f820220, 0x34420002, 0xaf820220, 0x3c023f00, -0x344200e0, 0xaf820200, 0x8f820200, 0x2403fffd, -0x431024, 0xaf820200, 0x24040001, 0x3405ffff, -0xaf840204, 0x8f830054, 0x8f820054, 0x800484f, -0x24630001, 0x8f820054, 0x621023, 0x2c420002, -0x1440fffc, 0x0, 0x8f820224, 0x42040, -0xa4102b, 0x1040fff2, 0x0, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0x8f820214, -0x3c03ffff, 0x431024, 0x3442251f, 0xaf820214, -0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, -0x8f820220, 0x3c04f700, 0x34840008, 0x34420002, -0xaf820220, 0x8f820220, 0x3c033f00, 0x346300e2, -0x441025, 0xaf820220, 0xaf830200, 0x8f8400f0, -0x276217f8, 0x14820002, 0x24850008, 0x27651000, -0x8f8200f4, 0x10a20007, 0x3c038000, 0x34630040, -0x3c020001, 0x24425430, 0xac820000, 0xac830004, -0xaf8500f0, 0x8f830054, 0x800489b, 0x24020006, -0x8f830054, 0x3c020001, 0x8c425544, 0x2463fff6, -0x431023, 0x2c42000a, 0x14400022, 0x24020007, -0x80048a8, 0x0, 0x8f8200e0, 0xaf8200e4, -0x8f8200e0, 0xaf8200e8, 0x8f820220, 0x34420004, -0xaf820220, 0x8f820220, 0x2403fff7, 0x431024, -0xaf820220, 0x8f820044, 0x34428080, 0xaf820044, -0x8f830054, 0x24020008, 0x3c010001, 0xac2254a0, -0x3c010001, 0x80048aa, 0xac235544, 0x8f830054, -0x3c020001, 0x8c425544, 0x2463d8f0, 0x431023, -0x2c422710, 0x14400003, 0x24020009, 0x3c010001, -0xac2254a0, 0x3e00008, 0x0, 0x27bdffd8, +0xaf800204, 0x3c010001, 0xac207e80, 0x8f830054, +0x24020006, 0x3c010001, 0x370821, 0xac2283ac, +0x3c010001, 0x80047f8, 0xac235e00, 0x8f830054, +0x3c020001, 0x8c425e00, 0x2463fff6, 0x431023, +0x2c42000a, 0x14400059, 0x0, 0x24020007, +0x3c010001, 0x370821, 0x80047f8, 0xac2283ac, +0x8f820220, 0x3c04f700, 0x441025, 0xaf820220, +0x8f820220, 0x3c030300, 0x431024, 0x14400005, +0x1821, 0x8f820220, 0x24030001, 0x441025, +0xaf820220, 0x10600043, 0x24020001, 0x8f820214, +0x3c03ffff, 0x3c040001, 0x8c845df8, 0x431024, +0x3442251f, 0xaf820214, 0x24020008, 0x3c010001, +0x370821, 0x1080000b, 0xac2283ac, 0x3c020001, +0x8c425dd4, 0x14400007, 0x24020001, 0x3c010001, +0xac227e30, 0xc004e2c, 0x8f840220, 0x80047e5, +0x0, 0x8f820220, 0x3c030008, 0x431024, +0x14400017, 0x2402000e, 0x3c010001, 0xac227e30, +0x8ee20000, 0x2021, 0x3c030200, 0x431025, +0xc005397, 0xaee20000, 0x8f820220, 0x2403fffb, +0x431024, 0xaf820220, 0x8f820220, 0x34420002, +0xc0043dd, 0xaf820220, 0x3c050001, 0x8ca55d28, +0xc005276, 0x2021, 0x80047f8, 0x0, +0x3c020001, 0x8c425dd4, 0x10400010, 0x0, +0x3c020001, 0x8c425dd0, 0x2442ffff, 0x3c010001, +0xac225dd0, 0x14400009, 0x24020002, 0x3c010001, +0xac205dd4, 0x3c010001, 0x80047f8, 0xac225dd0, +0x24020001, 0x3c010001, 0xac225d2c, 0x8fbf001c, +0x8fb00018, 0x3e00008, 0x27bd0020, 0x8f820200, +0x8f820220, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820200, 0x3c060001, 0x8cc65d28, 0x34420004, +0xaf820200, 0x24020002, 0x10c2003a, 0x2cc20003, +0x10400005, 0x24020001, 0x10c20008, 0x0, +0x8004842, 0x0, 0x24020004, 0x10c20013, +0x24020001, 0x8004842, 0x0, 0x3c030001, +0x8c635d18, 0x3c020001, 0x8c425d20, 0x3c040001, +0x8c845d3c, 0x3c050001, 0x8ca55d1c, 0xaf860200, +0xaf860220, 0x34630022, 0x441025, 0x451025, +0x34420002, 0x8004841, 0xaf830200, 0x3c030001, +0x8c635df8, 0xaf820200, 0x10600009, 0xaf820220, +0x3c020001, 0x8c425dd4, 0x14400005, 0x3c033f00, +0x3c020001, 0x8c425d10, 0x8004835, 0x346300e0, +0x3c020001, 0x8c425d10, 0x3c033f00, 0x346300e2, +0x431025, 0xaf820200, 0x3c030001, 0x8c635d14, +0x3c04f700, 0x3c020001, 0x8c425d20, 0x3c050001, +0x8ca55d3c, 0x641825, 0x431025, 0x451025, +0xaf820220, 0x3e00008, 0x0, 0x8f820220, +0x3c030001, 0x8c635d28, 0x34420004, 0xaf820220, +0x24020001, 0x1062000f, 0x0, 0x8f830054, +0x8f820054, 0x24630002, 0x621023, 0x2c420003, +0x10400011, 0x0, 0x8f820054, 0x621023, +0x2c420003, 0x1040000c, 0x0, 0x8004853, +0x0, 0x8f830054, 0x8f820054, 0x800485f, +0x24630007, 0x8f820054, 0x621023, 0x2c420008, +0x1440fffc, 0x0, 0x8f8400e0, 0x30820007, +0x1040000d, 0x0, 0x8f820054, 0x8f8300e0, +0x14830009, 0x24450032, 0x8f820054, 0xa21023, +0x2c420033, 0x10400004, 0x0, 0x8f8200e0, +0x1082fff9, 0x0, 0x8f820220, 0x2403fffd, +0x431024, 0xaf820220, 0x3e00008, 0x0, +0x3c030001, 0x8c635d44, 0x3c020001, 0x8c425d48, +0x50620004, 0x2463ffff, 0x3c010001, 0xac235d48, +0x2463ffff, 0x2c620009, 0x1040009d, 0x31080, +0x3c010001, 0x220821, 0x8c225b58, 0x400008, +0x0, 0x8f820044, 0x34428080, 0xaf820044, +0x8f830054, 0x8004912, 0x24020002, 0x8f830054, +0x3c020001, 0x8c425e04, 0x2463d8f0, 0x431023, +0x2c422710, 0x1440008a, 0x24020003, 0x800491f, +0x0, 0x8f820044, 0x3c03ffff, 0x34637fff, +0x431024, 0xaf820044, 0x8f830054, 0x8004912, +0x24020004, 0x8f830054, 0x3c020001, 0x8c425e04, +0x2463fff6, 0x431023, 0x2c42000a, 0x14400078, +0x24020005, 0x800491f, 0x0, 0x8f820220, +0x3c03f700, 0x431025, 0xaf820220, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x34420002, 0xaf820220, 0x3c023f00, 0x344200e0, +0xaf820200, 0x8f820200, 0x2403fffd, 0x431024, +0xaf820200, 0x24040001, 0x3405ffff, 0xaf840204, +0x8f830054, 0x8f820054, 0x80048c6, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820224, 0x42040, 0xa4102b, +0x1040fff2, 0x0, 0x8f820220, 0x3c03f700, +0x431025, 0xaf820220, 0x8f820214, 0x3c03ffff, +0x431024, 0x3442251f, 0xaf820214, 0x8f820220, +0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, +0x3c04f700, 0x34840008, 0x34420002, 0xaf820220, +0x8f820220, 0x3c033f00, 0x346300e2, 0x441025, +0xaf820220, 0xaf830200, 0x8f8400f0, 0x276217f8, +0x14820002, 0x24850008, 0x27651000, 0x8f8200f4, +0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, +0x24425cd0, 0xac820000, 0xac830004, 0xaf8500f0, +0x8f830054, 0x8004912, 0x24020006, 0x8f830054, +0x3c020001, 0x8c425e04, 0x2463fff6, 0x431023, +0x2c42000a, 0x14400022, 0x24020007, 0x800491f, +0x0, 0x8f8200e0, 0xaf8200e4, 0x8f8200e0, +0xaf8200e8, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820220, 0x2403fff7, 0x431024, 0xaf820220, +0x8f820044, 0x34428080, 0xaf820044, 0x8f830054, +0x24020008, 0x3c010001, 0xac225d44, 0x3c010001, +0x8004921, 0xac235e04, 0x8f830054, 0x3c020001, +0x8c425e04, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400003, 0x24020009, 0x3c010001, 0xac225d44, +0x3e00008, 0x0, 0x0, 0x27bdffd8, 0xafb20018, 0x809021, 0xafb3001c, 0xa09821, 0xafb10014, 0xc08821, 0xafb00010, 0x8021, -0xafbf0020, 0xa6200000, 0xc004cab, 0x24040001, +0xafbf0020, 0xa6200000, 0xc004d23, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, -0xc004cab, 0x2021, 0xc004cab, 0x24040001, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x2021, 0xc004d23, 0x24040001, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x24100010, 0x2501024, 0x10400002, 0x2021, -0x24040001, 0xc004cab, 0x108042, 0x1600fffa, +0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x2501024, 0x24100010, 0x2701024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fffa, 0x2701024, 0xc004cd1, 0x34108000, -0xc004cd1, 0x0, 0xc004c8b, 0x0, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fffa, 0x2701024, 0xc004d49, 0x34108000, +0xc004d49, 0x0, 0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, -0xc004cd1, 0x0, 0x8fbf0020, 0x8fb3001c, +0xc004d49, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821, 0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, -0xafb00010, 0x8021, 0xafbf0020, 0xc004cab, +0xafb00010, 0x8021, 0xafbf0020, 0xc004d23, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004cab, 0x2021, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0xc004cab, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, 0x24040001, 0x24100010, 0x2301024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, +0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x2301024, 0x24100010, 0x2501024, -0x10400002, 0x2021, 0x24040001, 0xc004cab, -0x108042, 0x1600fffa, 0x2501024, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x2501024, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96620000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004cab, 0x108042, 0x1600fff8, -0x0, 0xc004cd1, 0x0, 0x8fbf0020, +0x24040001, 0xc004d23, 0x108042, 0x1600fff8, +0x0, 0xc004d49, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, -0x3e00008, 0x27bd0028, 0x3c030001, 0x8c6354b0, -0x3c020001, 0x8c4254f4, 0x27bdffd8, 0xafbf0020, +0x3e00008, 0x27bd0028, 0x3c030001, 0x8c635d60, +0x3c020001, 0x8c425da8, 0x27bdffd8, 0xafbf0020, 0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001, -0xac2354f4, 0x2463ffff, 0x2c620013, 0x10400349, -0x31080, 0x3c010001, 0x220821, 0x8c225310, -0x400008, 0x0, 0xc004cd1, 0x8021, -0x34028000, 0xa7a20010, 0x27b10010, 0xc004cab, +0xac235da8, 0x2463ffff, 0x2c620013, 0x10400349, +0x31080, 0x3c010001, 0x220821, 0x8c225b80, +0x400008, 0x0, 0xc004d49, 0x8021, +0x34028000, 0xa7a20010, 0x27b10010, 0xc004d23, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004cab, 0x2021, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0xc004cab, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fffa, 0x32020001, 0x24100010, 0xc004cab, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0xc004d23, 0x2021, 0x108042, 0x1600fffc, 0x0, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8004c84, 0x24020002, 0x27b10010, 0xa7a00010, -0x8021, 0xc004cab, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004cab, -0x2021, 0xc004cab, 0x24040001, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0x24100010, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8004cfc, 0x24020002, 0x27b10010, 0xa7a00010, +0x8021, 0xc004d23, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004d23, +0x2021, 0xc004d23, 0x24040001, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0xc004cab, 0x2021, 0x108042, -0x1600fffc, 0x0, 0xc004cd1, 0x34108000, -0xc004cd1, 0x0, 0xc004c8b, 0x0, +0xc004d23, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0xc004d23, 0x2021, 0x108042, +0x1600fffc, 0x0, 0xc004d49, 0x34108000, +0xc004d49, 0x0, 0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, -0xc004cd1, 0x0, 0x97a20010, 0x30428000, -0x144002dc, 0x24020003, 0x8004c84, 0x0, +0xc004d49, 0x0, 0x97a20010, 0x30428000, +0x144002dc, 0x24020003, 0x8004cfc, 0x0, 0x24021200, 0xa7a20010, 0x27b10010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, -0xc004cab, 0x2021, 0x108042, 0x1600fffc, -0x0, 0xc004cab, 0x24040001, 0xc004cab, +0xc004d23, 0x2021, 0x108042, 0x1600fffc, +0x0, 0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, -0x10400002, 0x2021, 0x24040001, 0xc004cab, -0x108042, 0x1600fff8, 0x0, 0xc004cd1, -0x0, 0x8f830054, 0x8004c76, 0x24020004, -0x8f830054, 0x3c020001, 0x8c42554c, 0x2463ff9c, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fff8, 0x0, 0xc004d49, +0x0, 0x8f830054, 0x8004cee, 0x24020004, +0x8f830054, 0x3c020001, 0x8c425e14, 0x2463ff9c, 0x431023, 0x2c420064, 0x1440029e, 0x24020002, -0x3c030001, 0x8c635550, 0x10620297, 0x2c620003, +0x3c030001, 0x8c635e18, 0x10620297, 0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, -0x24020004, 0x10620291, 0x2402000f, 0x8004c84, -0x24020011, 0x8004c84, 0x24020005, 0x24020014, -0xa7a20010, 0x27b10010, 0x8021, 0xc004cab, +0x24020004, 0x10620291, 0x2402000f, 0x8004cfc, +0x24020011, 0x8004cfc, 0x24020005, 0x24020014, +0xa7a20010, 0x27b10010, 0x8021, 0xc004d23, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004cab, 0x2021, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0xc004cab, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, +0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020012, -0x10400002, 0x2021, 0x24040001, 0xc004cab, -0x108042, 0x1600fffa, 0x32020012, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x32020012, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004cab, 0x108042, 0x1600fff8, -0x0, 0xc004cd1, 0x0, 0x8f830054, -0x8004c76, 0x24020006, 0x8f830054, 0x3c020001, -0x8c42554c, 0x2463ff9c, 0x431023, 0x2c420064, -0x14400250, 0x24020007, 0x8004c84, 0x0, +0x24040001, 0xc004d23, 0x108042, 0x1600fff8, +0x0, 0xc004d49, 0x0, 0x8f830054, +0x8004cee, 0x24020006, 0x8f830054, 0x3c020001, +0x8c425e14, 0x2463ff9c, 0x431023, 0x2c420064, +0x14400250, 0x24020007, 0x8004cfc, 0x0, 0x24020006, 0xa7a20010, 0x27b10010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020013, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020013, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x108042, 0x1600fffa, 0x32020013, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8f830054, 0x8004c76, 0x24020008, 0x8f830054, -0x3c020001, 0x8c42554c, 0x2463ff9c, 0x431023, -0x2c420064, 0x1440020f, 0x24020009, 0x8004c84, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8f830054, 0x8004cee, 0x24020008, 0x8f830054, +0x3c020001, 0x8c425e14, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440020f, 0x24020009, 0x8004cfc, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x24040001, -0xc004cab, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x24040001, +0xc004d23, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020018, -0xc004cd1, 0x34108000, 0xc004cd1, 0x0, -0xc004c8b, 0x0, 0x50400005, 0x108042, +0xc004d23, 0x108042, 0x1600fffa, 0x32020018, +0xc004d49, 0x34108000, 0xc004d49, 0x0, +0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004cd1, 0x8021, +0x1600fff7, 0x0, 0xc004d49, 0x8021, 0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020018, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x108042, 0x1600fffa, 0x32020018, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8f830054, 0x8004c76, 0x2402000a, 0x8f830054, -0x3c020001, 0x8c42554c, 0x2463ff9c, 0x431023, -0x2c420064, 0x1440019b, 0x2402000b, 0x8004c84, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8f830054, 0x8004cee, 0x2402000a, 0x8f830054, +0x3c020001, 0x8c425e14, 0x2463ff9c, 0x431023, +0x2c420064, 0x1440019b, 0x2402000b, 0x8004cfc, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x24040001, -0xc004cab, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x24040001, +0xc004d23, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020017, -0xc004cd1, 0x34108000, 0xc004cd1, 0x0, -0xc004c8b, 0x0, 0x50400005, 0x108042, +0xc004d23, 0x108042, 0x1600fffa, 0x32020017, +0xc004d49, 0x34108000, 0xc004d49, 0x0, +0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004cd1, 0x8021, +0x1600fff7, 0x0, 0xc004d49, 0x8021, 0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020017, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x108042, 0x1600fffa, 0x32020017, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8f830054, 0x8004c76, 0x2402000c, 0x8f830054, -0x3c020001, 0x8c42554c, 0x2463ff9c, 0x431023, -0x2c420064, 0x14400127, 0x24020012, 0x8004c84, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8f830054, 0x8004cee, 0x2402000c, 0x8f830054, +0x3c020001, 0x8c425e14, 0x2463ff9c, 0x431023, +0x2c420064, 0x14400127, 0x24020012, 0x8004cfc, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x24040001, -0xc004cab, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x24040001, +0xc004d23, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020014, -0xc004cd1, 0x34108000, 0xc004cd1, 0x0, -0xc004c8b, 0x0, 0x50400005, 0x108042, +0xc004d23, 0x108042, 0x1600fffa, 0x32020014, +0xc004d49, 0x34108000, 0xc004d49, 0x0, +0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004cd1, 0x8021, +0x1600fff7, 0x0, 0xc004d49, 0x8021, 0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020014, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x108042, 0x1600fffa, 0x32020014, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8f830054, 0x8004c76, 0x24020013, 0x8f830054, -0x3c020001, 0x8c42554c, 0x2463ff9c, 0x431023, -0x2c420064, 0x144000b3, 0x2402000d, 0x8004c84, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8f830054, 0x8004cee, 0x24020013, 0x8f830054, +0x3c020001, 0x8c425e14, 0x2463ff9c, 0x431023, +0x2c420064, 0x144000b3, 0x2402000d, 0x8004cfc, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x24040001, -0xc004cab, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x24040001, +0xc004d23, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020018, -0xc004cd1, 0x34108000, 0xc004cd1, 0x0, -0xc004c8b, 0x0, 0x50400005, 0x108042, +0xc004d23, 0x108042, 0x1600fffa, 0x32020018, +0xc004d49, 0x34108000, 0xc004d49, 0x0, +0xc004d03, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004cd1, 0x8021, +0x1600fff7, 0x0, 0xc004d49, 0x8021, 0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, -0xc004cab, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, -0xc004cab, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004cab, +0xc004d23, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, +0xc004d23, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004cab, 0x108042, 0x1600fffa, 0x32020018, -0xc004cab, 0x24040001, 0xc004cab, 0x2021, +0xc004d23, 0x108042, 0x1600fffa, 0x32020018, +0xc004d23, 0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, -0x1600fff8, 0x0, 0xc004cd1, 0x0, -0x8f830054, 0x8004c76, 0x2402000e, 0x24020840, -0xa7a20010, 0x27b10010, 0x8021, 0xc004cab, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fff8, 0x0, 0xc004d49, 0x0, +0x8f830054, 0x8004cee, 0x2402000e, 0x24020840, +0xa7a20010, 0x27b10010, 0x8021, 0xc004d23, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004cab, 0x2021, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0xc004cab, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004cab, 0x108042, +0x2021, 0x24040001, 0xc004d23, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020013, -0x10400002, 0x2021, 0x24040001, 0xc004cab, -0x108042, 0x1600fffa, 0x32020013, 0xc004cab, -0x24040001, 0xc004cab, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x32020013, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004cab, 0x108042, 0x1600fff8, -0x0, 0xc004cd1, 0x0, 0x8f830054, -0x24020010, 0x3c010001, 0xac2254b0, 0x3c010001, -0x8004c86, 0xac23554c, 0x8f830054, 0x3c020001, -0x8c42554c, 0x2463ff9c, 0x431023, 0x2c420064, +0x24040001, 0xc004d23, 0x108042, 0x1600fff8, +0x0, 0xc004d49, 0x0, 0x8f830054, +0x24020010, 0x3c010001, 0xac225d60, 0x3c010001, +0x8004cfe, 0xac235e14, 0x8f830054, 0x3c020001, +0x8c425e14, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, -0xac2254b0, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0xac225d60, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, -0x8f840054, 0x8f820054, 0xa32824, 0x8004c97, +0x8f840054, 0x8f820054, 0xa32824, 0x8004d0f, 0x24840001, 0x8f820054, 0x821023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, -0x8f820054, 0x8004ca5, 0x24630001, 0x8f820054, +0x8f820054, 0x8004d1d, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824, 0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, -0x3c030001, 0x431025, 0xaf820044, 0x8f830054, -0x8f820054, 0x8004cbd, 0x24630001, 0x8f820054, -0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, -0xaf820044, 0x8f830054, 0x8f820054, 0x8004ccb, +0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, +0x8f830054, 0x8f820054, 0x8004d36, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820044, 0x3c030001, 0x431025, +0xaf820044, 0x8f830054, 0x8f820054, 0x8004d43, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, 0x0, 0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024, 0xaf820044, 0x8f820044, 0x3c030001, 0x431025, -0xaf820044, 0x8f830054, 0x8f820054, 0x8004cdf, +0xaf820044, 0x8f830054, 0x8f820054, 0x8004d57, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, -0x8f820054, 0x8004ced, 0x24630001, 0x8f820054, +0x8f820054, 0x8004d65, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x3e00008, 0x0, 0x0, 0x27bdffe8, +0x3e00008, 0x0, 0x27bdffc8, 0xafb30024, +0x809821, 0xafb5002c, 0xa0a821, 0xafb20020, +0xc09021, 0x32a2ffff, 0xafbf0030, 0xafb40028, +0xafb1001c, 0xafb00018, 0x14400034, 0xa7b20010, +0x3271ffff, 0x27b20010, 0x8021, 0xc004d23, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x2301024, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x2301024, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x34108000, +0x96420000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc004d23, 0x108042, 0x12000075, +0x0, 0x8004da1, 0x0, 0x3274ffff, +0x27b10010, 0xa7a00010, 0x8021, 0xc004d23, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x24040001, 0xc004d23, +0x2021, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x2901024, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x2901024, 0xc004d49, +0x34108000, 0xc004d49, 0x0, 0xc004d03, +0x0, 0x50400005, 0x108042, 0x96220000, +0x501025, 0xa6220000, 0x108042, 0x1600fff7, +0x0, 0xc004d49, 0x0, 0x32a5ffff, +0x24020001, 0x54a20004, 0x24020002, 0x97a20010, +0x8004dec, 0x521025, 0x14a20006, 0x3271ffff, +0x97a20010, 0x121827, 0x431024, 0xa7a20010, +0x3271ffff, 0x27b20010, 0x8021, 0xc004d23, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0xc004d23, +0x24040001, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004d23, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x2301024, +0x10400002, 0x2021, 0x24040001, 0xc004d23, +0x108042, 0x1600fffa, 0x2301024, 0xc004d23, +0x24040001, 0xc004d23, 0x2021, 0x34108000, +0x96420000, 0x501024, 0x10400002, 0x2021, +0x24040001, 0xc004d23, 0x108042, 0x1600fff8, +0x0, 0xc004d49, 0x0, 0x8fbf0030, +0x8fb5002c, 0x8fb40028, 0x8fb30024, 0x8fb20020, +0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0038, +0x0, 0x0, 0x0, 0x27bdffe8, 0xafbf0010, 0x3c030001, 0x771821, 0x8c6383ac, 0x24020008, 0x1462022c, 0x803021, 0x3c020001, -0x8c425538, 0x14400033, 0x0, 0x8f850224, +0x8c425df8, 0x14400033, 0x0, 0x8f850224, 0x38a30020, 0x2c630001, 0x38a20010, 0x2c420001, 0x621825, 0x1460000d, 0x38a30030, 0x2c630001, 0x38a20400, 0x2c420001, 0x621825, 0x14600007, 0x38a30402, 0x2c630001, 0x38a20404, 0x2c420001, 0x621825, 0x10600005, 0x0, 0xc00429b, -0x0, 0x8004d2d, 0x2402000e, 0xc0043dd, -0x0, 0x3c050001, 0x8ca55488, 0xc0050b3, -0x2021, 0x3c030001, 0x8c635488, 0x24020004, -0x14620005, 0x2403fffb, 0x3c020001, 0x8c425484, -0x8004d29, 0x2403fff7, 0x3c020001, 0x8c425484, -0x431024, 0x3c010001, 0xac225484, 0x2402000e, -0x3c010001, 0xc00429b, 0xac227560, 0x8004f27, +0x0, 0x8004e65, 0x2402000e, 0xc0043dd, +0x0, 0x3c050001, 0x8ca55d28, 0xc005276, +0x2021, 0x3c030001, 0x8c635d28, 0x24020004, +0x14620005, 0x2403fffb, 0x3c020001, 0x8c425d24, +0x8004e61, 0x2403fff7, 0x3c020001, 0x8c425d24, +0x431024, 0x3c010001, 0xac225d24, 0x2402000e, +0x3c010001, 0xc00429b, 0xac227e30, 0x800505f, 0x0, 0x8f820220, 0x3c030400, 0x431024, 0x10400027, 0x2403ffbf, 0x8f850224, 0x3c020001, -0x8c42756c, 0xa32024, 0x431024, 0x1482000c, -0x0, 0x3c020001, 0x8c427570, 0x24420001, -0x3c010001, 0xac227570, 0x2c420002, 0x14400008, -0x24020001, 0x3c010001, 0x8004d4d, 0xac227590, -0x3c010001, 0xac207570, 0x3c010001, 0xac207590, -0x3c020001, 0x8c427590, 0x10400006, 0x30a20040, -0x10400004, 0x24020001, 0x3c010001, 0x8004d58, -0xac227594, 0x3c010001, 0xac207594, 0x3c010001, -0xac25756c, 0x3c010001, 0x8004d68, 0xac2075a0, -0x24020001, 0x3c010001, 0xac2275a0, 0x3c010001, -0xac207590, 0x3c010001, 0xac207570, 0x3c010001, -0xac207594, 0x3c010001, 0xac20756c, 0x3c030001, -0x8c637560, 0x3c020001, 0x8c427564, 0x10620003, -0x3c020200, 0x3c010001, 0xac237564, 0xc21024, +0x8c427e3c, 0xa32024, 0x431024, 0x1482000c, +0x0, 0x3c020001, 0x8c427e40, 0x24420001, +0x3c010001, 0xac227e40, 0x2c420002, 0x14400008, +0x24020001, 0x3c010001, 0x8004e85, 0xac227e60, +0x3c010001, 0xac207e40, 0x3c010001, 0xac207e60, +0x3c020001, 0x8c427e60, 0x10400006, 0x30a20040, +0x10400004, 0x24020001, 0x3c010001, 0x8004e90, +0xac227e64, 0x3c010001, 0xac207e64, 0x3c010001, +0xac257e3c, 0x3c010001, 0x8004ea0, 0xac207e70, +0x24020001, 0x3c010001, 0xac227e70, 0x3c010001, +0xac207e60, 0x3c010001, 0xac207e40, 0x3c010001, +0xac207e64, 0x3c010001, 0xac207e3c, 0x3c030001, +0x8c637e30, 0x3c020001, 0x8c427e34, 0x10620003, +0x3c020200, 0x3c010001, 0xac237e34, 0xc21024, 0x10400007, 0x2463ffff, 0x8f820220, 0x24030001, -0x3c010001, 0xac23548c, 0x8004f25, 0x3c03f700, +0x3c010001, 0xac235d2c, 0x800505d, 0x3c03f700, 0x2c62000e, 0x104001a8, 0x31080, 0x3c010001, -0x220821, 0x8c225360, 0x400008, 0x0, -0x3c010001, 0xac207590, 0x3c010001, 0xac207570, -0x3c010001, 0xac20756c, 0x3c010001, 0xac207594, -0x3c010001, 0xac207588, 0x3c010001, 0xac207580, -0xc0047cd, 0xaf800224, 0x24020002, 0x3c010001, -0xac227560, 0x3c020001, 0x8c4275a0, 0x14400056, +0x220821, 0x8c225bd0, 0x400008, 0x0, +0x3c010001, 0xac207e60, 0x3c010001, 0xac207e40, +0x3c010001, 0xac207e3c, 0x3c010001, 0xac207e64, +0x3c010001, 0xac207e58, 0x3c010001, 0xac207e50, +0xc004844, 0xaf800224, 0x24020002, 0x3c010001, +0xac227e30, 0x3c020001, 0x8c427e70, 0x14400056, 0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024, 0xc00429b, 0xaee20000, 0xaf800204, 0x8f820200, 0x2403fffd, 0x431024, 0xaf820200, 0x3c010001, -0xac2075b0, 0x8f830054, 0x3c020001, 0x8c427588, -0x24040001, 0x3c010001, 0xac24759c, 0x24420001, -0x3c010001, 0xac227588, 0x2c420004, 0x3c010001, -0xac237584, 0x14400006, 0x24020003, 0x3c010001, -0xac24548c, 0x3c010001, 0x8004f23, 0xac207588, -0x3c010001, 0x8004f23, 0xac227560, 0x8f830054, -0x3c020001, 0x8c427584, 0x2463d8f0, 0x431023, +0xac207e80, 0x8f830054, 0x3c020001, 0x8c427e58, +0x24040001, 0x3c010001, 0xac247e6c, 0x24420001, +0x3c010001, 0xac227e58, 0x2c420004, 0x3c010001, +0xac237e54, 0x14400006, 0x24020003, 0x3c010001, +0xac245d2c, 0x3c010001, 0x800505b, 0xac207e58, +0x3c010001, 0x800505b, 0xac227e30, 0x8f830054, +0x3c020001, 0x8c427e54, 0x2463d8f0, 0x431023, 0x2c422710, 0x14400003, 0x24020004, 0x3c010001, -0xac227560, 0x3c020001, 0x8c4275a0, 0x14400026, +0xac227e30, 0x3c020001, 0x8c427e70, 0x14400026, 0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024, -0x8004f23, 0xaee20000, 0x3c040001, 0x8c84553c, -0x3c010001, 0xc004f2a, 0xac207578, 0x3c020001, -0x8c4275ac, 0xaf820204, 0x3c020001, 0x8c4275a0, +0x800505b, 0xaee20000, 0x3c040001, 0x8c845dfc, +0x3c010001, 0xc005062, 0xac207e48, 0x3c020001, +0x8c427e7c, 0xaf820204, 0x3c020001, 0x8c427e70, 0x14400015, 0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024, 0xaee20000, 0x8f820204, 0x30420030, -0x1440013c, 0x24020002, 0x3c030001, 0x8c6375ac, -0x24020005, 0x3c010001, 0xac227560, 0x3c010001, -0x8004f23, 0xac2375b0, 0x3c020001, 0x8c4275a0, -0x10400010, 0x3c03fdff, 0x3c020001, 0x8c42550c, -0x24420001, 0x3c010001, 0xac22550c, 0x2c420002, -0x14400131, 0x24020001, 0x3c010001, 0xac225514, -0x3c010001, 0xac20550c, 0x3c010001, 0x8004f23, -0xac22548c, 0x8ee20000, 0x3463ffff, 0x431024, -0xaee20000, 0x3c020001, 0x8c427590, 0x10400122, -0x0, 0x3c020001, 0x8c42756c, 0x1040011e, -0x0, 0x3c010001, 0xac227598, 0x24020003, -0x3c010001, 0xac227570, 0x8004ec4, 0x24020006, -0x3c010001, 0xac207578, 0x8f820204, 0x34420040, -0xaf820204, 0x3c020001, 0x8c4275b0, 0x24030007, -0x3c010001, 0xac237560, 0x34420040, 0x3c010001, -0xac2275b0, 0x3c020001, 0x8c427590, 0x10400005, -0x0, 0x3c020001, 0x8c42756c, 0x104000f9, -0x24020002, 0x3c050001, 0x24a57570, 0x8ca20000, +0x1440013c, 0x24020002, 0x3c030001, 0x8c637e7c, +0x24020005, 0x3c010001, 0xac227e30, 0x3c010001, +0x800505b, 0xac237e80, 0x3c020001, 0x8c427e70, +0x10400010, 0x3c03fdff, 0x3c020001, 0x8c425dcc, +0x24420001, 0x3c010001, 0xac225dcc, 0x2c420002, +0x14400131, 0x24020001, 0x3c010001, 0xac225dd4, +0x3c010001, 0xac205dcc, 0x3c010001, 0x800505b, +0xac225d2c, 0x8ee20000, 0x3463ffff, 0x431024, +0xaee20000, 0x3c020001, 0x8c427e60, 0x10400122, +0x0, 0x3c020001, 0x8c427e3c, 0x1040011e, +0x0, 0x3c010001, 0xac227e68, 0x24020003, +0x3c010001, 0xac227e40, 0x8004ffc, 0x24020006, +0x3c010001, 0xac207e48, 0x8f820204, 0x34420040, +0xaf820204, 0x3c020001, 0x8c427e80, 0x24030007, +0x3c010001, 0xac237e30, 0x34420040, 0x3c010001, +0xac227e80, 0x3c020001, 0x8c427e60, 0x10400005, +0x0, 0x3c020001, 0x8c427e3c, 0x104000f9, +0x24020002, 0x3c050001, 0x24a57e40, 0x8ca20000, 0x2c424e21, 0x104000f3, 0x24020002, 0x3c020001, -0x8c427594, 0x104000f8, 0x2404ffbf, 0x3c020001, -0x8c42756c, 0x3c030001, 0x8c637598, 0x441024, +0x8c427e64, 0x104000f8, 0x2404ffbf, 0x3c020001, +0x8c427e3c, 0x3c030001, 0x8c637e68, 0x441024, 0x641824, 0x10430004, 0x24020001, 0x3c010001, -0x8004f23, 0xac227560, 0x24020003, 0xaca20000, -0x24020008, 0x3c010001, 0xac227560, 0x3c020001, -0x8c42759c, 0x1040000c, 0x24020001, 0x3c040001, -0xc004f37, 0x8c84756c, 0x3c020001, 0x8c4275b8, -0x14400005, 0x24020001, 0x3c020001, 0x8c4275b4, -0x10400006, 0x24020001, 0x3c010001, 0xac22548c, -0x3c010001, 0x8004f23, 0xac207588, 0x3c020001, -0x8c427580, 0x3c030001, 0x8c63756c, 0x2c420001, -0x210c0, 0x30630008, 0x3c010001, 0xac227580, -0x3c010001, 0xac23757c, 0x8f830054, 0x24020009, -0x3c010001, 0xac227560, 0x3c010001, 0x8004f23, -0xac237584, 0x8f830054, 0x3c020001, 0x8c427584, +0x800505b, 0xac227e30, 0x24020003, 0xaca20000, +0x24020008, 0x3c010001, 0xac227e30, 0x3c020001, +0x8c427e6c, 0x1040000c, 0x24020001, 0x3c040001, +0xc00506f, 0x8c847e3c, 0x3c020001, 0x8c427e88, +0x14400005, 0x24020001, 0x3c020001, 0x8c427e84, +0x10400006, 0x24020001, 0x3c010001, 0xac225d2c, +0x3c010001, 0x800505b, 0xac207e58, 0x3c020001, +0x8c427e50, 0x3c030001, 0x8c637e3c, 0x2c420001, +0x210c0, 0x30630008, 0x3c010001, 0xac227e50, +0x3c010001, 0xac237e4c, 0x8f830054, 0x24020009, +0x3c010001, 0xac227e30, 0x3c010001, 0x800505b, +0xac237e54, 0x8f830054, 0x3c020001, 0x8c427e54, 0x2463d8f0, 0x431023, 0x2c422710, 0x144000a8, -0x0, 0x3c020001, 0x8c427590, 0x10400005, -0x0, 0x3c020001, 0x8c42756c, 0x104000a9, -0x24020002, 0x3c030001, 0x24637570, 0x8c620000, +0x0, 0x3c020001, 0x8c427e60, 0x10400005, +0x0, 0x3c020001, 0x8c427e3c, 0x104000a9, +0x24020002, 0x3c030001, 0x24637e40, 0x8c620000, 0x2c424e21, 0x104000a3, 0x24020002, 0x3c020001, -0x8c42759c, 0x1040000e, 0x0, 0x3c020001, -0x8c42756c, 0x3c010001, 0xac20759c, 0x30420080, +0x8c427e6c, 0x1040000e, 0x0, 0x3c020001, +0x8c427e3c, 0x3c010001, 0xac207e6c, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204, 0x30420080, -0x1440000c, 0x24020003, 0x8004eb1, 0x2402000c, -0x3c020001, 0x8c42756c, 0x30420080, 0x14400005, +0x1440000c, 0x24020003, 0x8004fe9, 0x2402000c, +0x3c020001, 0x8c427e3c, 0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080, 0x1040001f, 0x24020003, 0xac620000, 0x2402000a, 0x3c010001, -0xac227560, 0x3c040001, 0x248475a8, 0x8c820000, -0x3c030001, 0x8c637580, 0x431025, 0xaf820204, -0x8c830000, 0x3c040001, 0x8c847580, 0x2402000b, -0x3c010001, 0xac227560, 0x641825, 0x3c010001, -0xac2375b0, 0x3c050001, 0x24a57570, 0x8ca20000, +0xac227e30, 0x3c040001, 0x24847e78, 0x8c820000, +0x3c030001, 0x8c637e50, 0x431025, 0xaf820204, +0x8c830000, 0x3c040001, 0x8c847e50, 0x2402000b, +0x3c010001, 0xac227e30, 0x641825, 0x3c010001, +0xac237e80, 0x3c050001, 0x24a57e40, 0x8ca20000, 0x2c424e21, 0x1040006f, 0x24020002, 0x3c020001, -0x8c4275a0, 0x10400005, 0x0, 0x2402000c, -0x3c010001, 0x8004f23, 0xac227560, 0x3c020001, -0x8c427590, 0x1040006c, 0x0, 0x3c040001, -0x8c84756c, 0x1080005e, 0x30820008, 0x3c030001, -0x8c63757c, 0x10620064, 0x24020003, 0x3c010001, -0xac247598, 0xaca20000, 0x24020006, 0x3c010001, -0x8004f23, 0xac227560, 0x8f820200, 0x34420002, +0x8c427e70, 0x10400005, 0x0, 0x2402000c, +0x3c010001, 0x800505b, 0xac227e30, 0x3c020001, +0x8c427e60, 0x1040006c, 0x0, 0x3c040001, +0x8c847e3c, 0x1080005e, 0x30820008, 0x3c030001, +0x8c637e4c, 0x10620064, 0x24020003, 0x3c010001, +0xac247e68, 0xaca20000, 0x24020006, 0x3c010001, +0x800505b, 0xac227e30, 0x8f820200, 0x34420002, 0xaf820200, 0x8f830054, 0x2402000d, 0x3c010001, -0xac227560, 0x3c010001, 0xac237584, 0x8f830054, -0x3c020001, 0x8c427584, 0x2463d8f0, 0x431023, +0xac227e30, 0x3c010001, 0xac237e54, 0x8f830054, +0x3c020001, 0x8c427e54, 0x2463d8f0, 0x431023, 0x2c422710, 0x1440003a, 0x0, 0x3c020001, -0x8c4275a0, 0x10400029, 0x2402000e, 0x3c030001, -0x8c6375b4, 0x3c010001, 0x14600015, 0xac227560, -0xc0043dd, 0x0, 0x3c050001, 0x8ca55488, -0xc0050b3, 0x2021, 0x3c030001, 0x8c635488, +0x8c427e70, 0x10400029, 0x2402000e, 0x3c030001, +0x8c637e84, 0x3c010001, 0x14600015, 0xac227e30, +0xc0043dd, 0x0, 0x3c050001, 0x8ca55d28, +0xc005276, 0x2021, 0x3c030001, 0x8c635d28, 0x24020004, 0x14620005, 0x2403fffb, 0x3c020001, -0x8c425484, 0x8004ef2, 0x2403fff7, 0x3c020001, -0x8c425484, 0x431024, 0x3c010001, 0xac225484, +0x8c425d24, 0x800502a, 0x2403fff7, 0x3c020001, +0x8c425d24, 0x431024, 0x3c010001, 0xac225d24, 0x8ee20000, 0x3c030200, 0x431025, 0xaee20000, -0x8f820224, 0x3c010001, 0xac2275bc, 0x8f820220, +0x8f820224, 0x3c010001, 0xac227e8c, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, -0x34420002, 0x8004f23, 0xaf820220, 0x3c020001, -0x8c427590, 0x10400005, 0x0, 0x3c020001, -0x8c42756c, 0x1040000f, 0x24020002, 0x3c020001, -0x8c427570, 0x2c424e21, 0x1040000a, 0x24020002, -0x3c020001, 0x8c427590, 0x1040000f, 0x0, -0x3c020001, 0x8c42756c, 0x1440000b, 0x0, -0x24020002, 0x3c010001, 0x8004f23, 0xac227560, -0x3c020001, 0x8c427590, 0x10400003, 0x0, +0x34420002, 0x800505b, 0xaf820220, 0x3c020001, +0x8c427e60, 0x10400005, 0x0, 0x3c020001, +0x8c427e3c, 0x1040000f, 0x24020002, 0x3c020001, +0x8c427e40, 0x2c424e21, 0x1040000a, 0x24020002, +0x3c020001, 0x8c427e60, 0x1040000f, 0x0, +0x3c020001, 0x8c427e3c, 0x1440000b, 0x0, +0x24020002, 0x3c010001, 0x800505b, 0xac227e30, +0x3c020001, 0x8c427e60, 0x10400003, 0x0, 0xc00429b, 0x0, 0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, -0x27bd0018, 0x3c030001, 0x246375b8, 0x8c620000, -0x10400005, 0x34422000, 0x3c010001, 0xac2275ac, -0x8004f35, 0xac600000, 0x3c010001, 0xac2475ac, +0x27bd0018, 0x3c030001, 0x24637e88, 0x8c620000, +0x10400005, 0x34422000, 0x3c010001, 0xac227e7c, +0x800506d, 0xac600000, 0x3c010001, 0xac247e7c, 0x3e00008, 0x0, 0x27bdffe0, 0x30820030, -0xafbf0018, 0x3c010001, 0xac2275b4, 0x14400067, +0xafbf0018, 0x3c010001, 0xac227e84, 0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030, 0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, 0x21200, 0x3c040001, -0x8c84553c, 0x621825, 0x331c2, 0x3c030001, -0x24635518, 0x30828000, 0x21202, 0x30840001, +0x8c845dfc, 0x621825, 0x331c2, 0x3c030001, +0x24635dd8, 0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2, 0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025, 0x0, 0x10600007, 0x24020002, 0x10620013, 0x24020003, 0x1062002c, 0x3c05000f, -0x8004f99, 0x0, 0x8f820200, 0x2403feff, +0x80050d1, 0x0, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220, 0x3c010001, -0xac2075d4, 0x3c010001, 0x8004fa4, 0xac2075dc, +0xac207ea4, 0x3c010001, 0x80050dc, 0xac207eac, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220, -0x24020100, 0x3c010001, 0xac2275d4, 0x3c010001, -0x8004fa4, 0xac2075dc, 0x8f820200, 0x2403feff, +0x24020100, 0x3c010001, 0xac227ea4, 0x3c010001, +0x80050dc, 0xac207eac, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, 0x3c030001, -0x431025, 0xaf820220, 0x3c010001, 0xac2075d4, -0x3c010001, 0x8004fa4, 0xac2375dc, 0x8f820200, +0x431025, 0xaf820220, 0x3c010001, 0xac207ea4, +0x3c010001, 0x80050dc, 0xac237eac, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, 0x3c030001, 0x431025, 0xaf820220, 0x24020100, 0x3c010001, -0xac2275d4, 0x3c010001, 0x8004fa4, 0xac2375dc, -0x34a5ffff, 0x3c040001, 0x24845398, 0xafa30010, -0xc002403, 0xafa00014, 0x8004fa4, 0x0, -0x24020030, 0x3c010001, 0xac2275b8, 0x8fbf0018, +0xac227ea4, 0x3c010001, 0x80050dc, 0xac237eac, +0x34a5ffff, 0x3c040001, 0x24845c08, 0xafa30010, +0xc002403, 0xafa00014, 0x80050dc, 0x0, +0x24020030, 0x3c010001, 0xac227e88, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, 0x27bdffc8, -0xafb10024, 0x808821, 0xafb3002c, 0xa09821, -0xafb00020, 0xc08021, 0x3c040001, 0x248453b0, -0x3c050009, 0x3c020001, 0x8c425488, 0x34a59001, -0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, +0xafb20028, 0x809021, 0xafb3002c, 0xa09821, +0xafb00020, 0xc08021, 0x3c040001, 0x24845c20, +0x3c050009, 0x3c020001, 0x8c425d28, 0x34a59001, +0x2403021, 0x2603821, 0xafbf0030, 0xafb10024, 0xa7a0001a, 0xafb00014, 0xc002403, 0xafa20010, -0x24020002, 0x126200ed, 0x2e620003, 0x10400005, -0x24020001, 0x1262000a, 0x3c02fffb, 0x80050ac, -0x0, 0x24020004, 0x1262006d, 0x24020008, -0x1262006c, 0x3c02ffec, 0x80050ac, 0x0, -0x3442ffff, 0x2028024, 0x119140, 0x3c010001, -0x320821, 0xac3075cc, 0x3c024000, 0x2021024, -0x10400046, 0x1023c2, 0x30840030, 0x101382, -0x3042000c, 0x3c030001, 0x246354b4, 0x431021, -0x823821, 0x3c020020, 0x2021024, 0x10400006, -0x24020100, 0x3c010001, 0x320821, 0xac2275d0, -0x8004feb, 0x3c020080, 0x3c010001, 0x320821, -0xac2075d0, 0x3c020080, 0x2021024, 0x10400006, -0x111940, 0x3c020001, 0x3c010001, 0x230821, -0x8004ff7, 0xac2275d8, 0x111140, 0x3c010001, -0x220821, 0xac2075d8, 0x94e30000, 0x32024000, -0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018, -0x24040001, 0x94e20002, 0x24050004, 0x24e60002, -0x34420001, 0xc0048ee, 0xa4e20002, 0x24040001, -0x2821, 0xc0048ee, 0x27a60018, 0x3c020001, -0x8c425488, 0x24110001, 0x3c010001, 0xac315494, -0x14530004, 0x32028000, 0xc00429b, 0x0, -0x32028000, 0x10400099, 0x0, 0xc00429b, -0x0, 0x24020002, 0x3c010001, 0xac31548c, -0x3c010001, 0x80050ac, 0xac225488, 0x24040001, -0x24050004, 0x27b0001a, 0xc0048ee, 0x2003021, -0x24040001, 0x2821, 0xc0048ee, 0x2003021, -0x3c020001, 0x521021, 0x8c4275c4, 0x3c040001, -0x8c845488, 0x3c03bfff, 0x3463ffff, 0x3c010001, -0xac335494, 0x431024, 0x3c010001, 0x320821, -0x10930078, 0xac2275c4, 0x80050ac, 0x0, -0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008, -0x2028025, 0x111140, 0x3c010001, 0x220821, -0xac3075c8, 0x3c022000, 0x2021024, 0x10400009, -0x0, 0x3c020001, 0x8c425514, 0x14400005, -0x24020001, 0x3c010001, 0xac225538, 0x800504d, -0x3c024000, 0x3c010001, 0xac205538, 0x3c024000, -0x2021024, 0x1440001c, 0x0, 0x3c020001, -0x8c425538, 0x10400007, 0x24022020, 0x3c010001, -0xac22553c, 0x24020001, 0x3c010001, 0x370821, -0xac2283ac, 0x3c04bfff, 0x111940, 0x3c020001, -0x431021, 0x8c4275c0, 0x3c050001, 0x8ca55488, -0x3484ffff, 0x441024, 0x3c010001, 0x230821, -0xac2275c0, 0x24020001, 0x10a20044, 0x0, -0x80050aa, 0x0, 0x3c020001, 0x8c425538, -0x1040001c, 0x24022000, 0x3c010001, 0xac22553c, -0x3c0300a0, 0x2031024, 0x14430005, 0x111140, -0x3402a000, 0x3c010001, 0x80050a5, 0xac22553c, -0x3c030001, 0x621821, 0x8c6375c8, 0x3c020020, -0x621024, 0x10400004, 0x24022001, 0x3c010001, -0x80050a5, 0xac22553c, 0x3c020080, 0x621024, -0x1040001f, 0x3402a001, 0x3c010001, 0x80050a5, -0xac22553c, 0x3c020020, 0x2021024, 0x10400007, -0x111940, 0x24020100, 0x3c010001, 0x230821, -0xac2275d4, 0x8005099, 0x3c020080, 0x111140, -0x3c010001, 0x220821, 0xac2075d4, 0x3c020080, -0x2021024, 0x10400006, 0x111940, 0x3c020001, -0x3c010001, 0x230821, 0x80050a5, 0xac2275dc, -0x111140, 0x3c010001, 0x220821, 0xac2075dc, -0x3c030001, 0x8c635488, 0x24020001, 0x10620003, -0x0, 0xc00429b, 0x0, 0x8fbf0030, -0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020, -0x3e00008, 0x27bd0038, 0x27bdffd0, 0xafb40028, -0x80a021, 0xafb20020, 0x9021, 0xafb30024, -0x9821, 0xafb1001c, 0x8821, 0x24020002, -0xafbf002c, 0xafb00018, 0xa7a00012, 0x10a20068, -0xa7a00010, 0x2ca20003, 0x10400005, 0x24020001, -0x10a2000a, 0x148140, 0x8005176, 0x2201021, -0x24020004, 0x10a2005e, 0x24020008, 0x10a2005d, -0x142940, 0x8005176, 0x2201021, 0x3c030001, -0x701821, 0x8c6375cc, 0x3c024000, 0x621024, -0x14400009, 0x24040001, 0x3c027fff, 0x3442ffff, -0x628824, 0x3c010001, 0x300821, 0xac3175c4, -0x8005176, 0x2201021, 0x24050001, 0xc0048ac, -0x27a60010, 0x24040001, 0x24050001, 0xc0048ac, -0x27a60010, 0x97a20010, 0x30420004, 0x10400034, -0x3c114000, 0x3c030001, 0x8c635550, 0x24020003, -0x10620008, 0x2c620004, 0x14400029, 0x3c028000, -0x24020004, 0x10620014, 0x24040001, 0x8005119, -0x3c028000, 0x24040001, 0x24050011, 0x27b00012, -0xc0048ac, 0x2003021, 0x24040001, 0x24050011, -0xc0048ac, 0x2003021, 0x97a30012, 0x30624000, -0x10400002, 0x3c130010, 0x3c130008, 0x3c120001, -0x8005116, 0x30628000, 0x24050014, 0x27b00012, -0xc0048ac, 0x2003021, 0x24040001, 0x24050014, -0xc0048ac, 0x2003021, 0x97a30012, 0x30621000, -0x10400002, 0x3c130010, 0x3c130008, 0x3c120001, -0x30620800, 0x54400001, 0x3c120002, 0x3c028000, -0x2221025, 0x2531825, 0x8005123, 0x438825, -0x3c110001, 0x2308821, 0x8e3175cc, 0x3c027fff, -0x3442ffff, 0x2228824, 0x141140, 0x3c010001, -0x220821, 0xac3175c4, 0x8005176, 0x2201021, -0x142940, 0x3c030001, 0x651821, 0x8c6375c8, -0x3c024000, 0x621024, 0x14400008, 0x3c027fff, -0x3442ffff, 0x628824, 0x3c010001, 0x250821, -0xac3175c0, 0x8005176, 0x2201021, 0x3c020001, -0x8c425498, 0x10400033, 0x3c11c00c, 0x3c020001, -0x8c425514, 0x3c04c00c, 0x34842000, 0x3c030001, -0x8c635538, 0x2102b, 0x21023, 0x441024, -0x10600003, 0x518825, 0x3c022000, 0x2228825, -0x3c020001, 0x451021, 0x8c4275d4, 0x10400003, -0x3c020020, 0x8005153, 0x2228825, 0x3c02ffdf, +0x24020002, 0x1262007f, 0x2e620003, 0x10400005, +0x24020001, 0x1262000a, 0x0, 0x800526f, +0x0, 0x24020004, 0x126200f6, 0x24020008, +0x126200f5, 0x3c02ffec, 0x800526f, 0x0, +0x3c020001, 0x8c425d24, 0x30420002, 0x14400004, +0x128940, 0x3c02fffb, 0x3442ffff, 0x2028024, +0x3c010001, 0x310821, 0xac307e9c, 0x3c024000, +0x2021024, 0x1040004a, 0x1023c2, 0x30840030, +0x101382, 0x3042001c, 0x3c030001, 0x24635d68, +0x431021, 0x823821, 0x3c020020, 0x2021024, +0x10400006, 0x24020100, 0x3c010001, 0x310821, +0xac227ea0, 0x8005128, 0x3c020080, 0x3c010001, +0x310821, 0xac207ea0, 0x3c020080, 0x2021024, +0x10400006, 0x121940, 0x3c020001, 0x3c010001, +0x230821, 0x8005134, 0xac227ea8, 0x121140, +0x3c010001, 0x220821, 0xac207ea8, 0x94e30000, +0x32024000, 0x10400003, 0xa7a30018, 0x34624000, +0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, +0x24e60002, 0x34420001, 0xc004966, 0xa4e20002, +0x24040001, 0x2821, 0xc004966, 0x27a60018, +0x3c020001, 0x8c425d28, 0x24110001, 0x3c010001, +0xac315d34, 0x14530004, 0x32028000, 0xc00429b, +0x0, 0x32028000, 0x1040011f, 0x0, +0xc00429b, 0x0, 0x3c030001, 0x8c635e18, +0x24020005, 0x10620118, 0x24020002, 0x3c010001, +0xac315d2c, 0x3c010001, 0x800526f, 0xac225d28, +0x24040001, 0x24050004, 0x27b0001a, 0xc004966, +0x2003021, 0x24040001, 0x2821, 0xc004966, +0x2003021, 0x3c020001, 0x511021, 0x8c427e94, +0x3c040001, 0x8c845d28, 0x3c03bfff, 0x3463ffff, +0x3c010001, 0xac335d34, 0x431024, 0x3c010001, +0x310821, 0x109300fa, 0xac227e94, 0x800526f, +0x0, 0x3c022000, 0x2021024, 0x10400005, +0x24020001, 0x3c010001, 0xac225df8, 0x8005181, +0x128940, 0x3c010001, 0xac205df8, 0x128940, +0x3c010001, 0x310821, 0xac307e98, 0x3c024000, +0x2021024, 0x14400016, 0x0, 0x3c020001, +0x8c425df8, 0x10400008, 0x24040004, 0x24050001, +0xc004d6b, 0x24062000, 0x24020001, 0x3c010001, +0x370821, 0xac2283ac, 0x3c020001, 0x511021, +0x8c427e90, 0x3c03bfff, 0x3463ffff, 0x431024, +0x3c010001, 0x310821, 0x800526d, 0xac227e90, +0x3c020001, 0x8c425df8, 0x10400028, 0x3c0300a0, +0x2031024, 0x5443000d, 0x3c020020, 0x3c020001, +0x8c425dfc, 0x24030100, 0x3c010001, 0x310821, +0xac237ea4, 0x3c030001, 0x3c010001, 0x310821, +0xac237eac, 0x80051c4, 0x34420400, 0x2021024, +0x10400008, 0x24030100, 0x3c020001, 0x8c425dfc, +0x3c010001, 0x310821, 0xac237ea4, 0x80051c4, +0x34420800, 0x3c020080, 0x2021024, 0x1040002e, +0x3c030001, 0x3c020001, 0x8c425dfc, 0x3c010001, +0x310821, 0xac237eac, 0x34420c00, 0x3c010001, +0xac225dfc, 0x80051ec, 0x24040001, 0x3c020020, +0x2021024, 0x10400006, 0x24020100, 0x3c010001, +0x310821, 0xac227ea4, 0x80051d5, 0x3c020080, +0x3c010001, 0x310821, 0xac207ea4, 0x3c020080, +0x2021024, 0x10400007, 0x121940, 0x3c020001, +0x3c010001, 0x230821, 0xac227eac, 0x80051e3, +0x24040001, 0x121140, 0x3c010001, 0x220821, +0xac207eac, 0x24040001, 0x2821, 0x27b0001e, +0xc004924, 0x2003021, 0x24040001, 0x2821, +0xc004924, 0x2003021, 0x24040001, 0x24050001, +0x27b0001c, 0xc004924, 0x2003021, 0x24040001, +0x24050001, 0xc004924, 0x2003021, 0x800526d, +0x0, 0x3c02ffec, 0x3442ffff, 0x2028024, +0x3c020008, 0x2028025, 0x121140, 0x3c010001, +0x220821, 0xac307e98, 0x3c022000, 0x2021024, +0x10400009, 0x0, 0x3c020001, 0x8c425dd4, +0x14400005, 0x24020001, 0x3c010001, 0xac225df8, +0x800520e, 0x3c024000, 0x3c010001, 0xac205df8, +0x3c024000, 0x2021024, 0x1440001e, 0x0, +0x3c020001, 0x8c425df8, 0x3c010001, 0xac205d40, +0x10400007, 0x24022020, 0x3c010001, 0xac225dfc, +0x24020001, 0x3c010001, 0x370821, 0xac2283ac, +0x3c04bfff, 0x121940, 0x3c020001, 0x431021, +0x8c427e90, 0x3c050001, 0x8ca55d28, 0x3484ffff, +0x441024, 0x3c010001, 0x230821, 0xac227e90, +0x24020001, 0x10a20044, 0x0, 0x800526d, +0x0, 0x3c020001, 0x8c425df8, 0x1040001c, +0x24022000, 0x3c010001, 0xac225dfc, 0x3c0300a0, +0x2031024, 0x14430005, 0x121140, 0x3402a000, +0x3c010001, 0x8005268, 0xac225dfc, 0x3c030001, +0x621821, 0x8c637e98, 0x3c020020, 0x621024, +0x10400004, 0x24022001, 0x3c010001, 0x8005268, +0xac225dfc, 0x3c020080, 0x621024, 0x1040001f, +0x3402a001, 0x3c010001, 0x8005268, 0xac225dfc, +0x3c020020, 0x2021024, 0x10400007, 0x121940, +0x24020100, 0x3c010001, 0x230821, 0xac227ea4, +0x800525c, 0x3c020080, 0x121140, 0x3c010001, +0x220821, 0xac207ea4, 0x3c020080, 0x2021024, +0x10400006, 0x121940, 0x3c020001, 0x3c010001, +0x230821, 0x8005268, 0xac227eac, 0x121140, +0x3c010001, 0x220821, 0xac207eac, 0x3c030001, +0x8c635d28, 0x24020001, 0x10620003, 0x0, +0xc00429b, 0x0, 0x8fbf0030, 0x8fb3002c, +0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008, +0x27bd0038, 0x27bdffc0, 0xafb40038, 0x80a021, +0xafb20030, 0x9021, 0xafb1002c, 0x8821, +0x24020002, 0xafbf003c, 0xafb30034, 0xafb00028, +0xa7a00020, 0xa7a00018, 0xa7a0001a, 0xa7a0001c, +0x10a20108, 0xa7a0001e, 0x2ca20003, 0x10400005, +0x24020001, 0x10a2000a, 0x149940, 0x800538f, +0x2201021, 0x24020004, 0x10a200b2, 0x24020008, +0x10a200b1, 0x142940, 0x800538f, 0x2201021, +0x3c030001, 0x731821, 0x8c637e9c, 0x3c024000, +0x621024, 0x14400009, 0x24040001, 0x3c027fff, +0x3442ffff, 0x628824, 0x3c010001, 0x330821, +0xac317e94, 0x800538f, 0x2201021, 0x2821, +0xc004924, 0x27a60018, 0x24040001, 0x2821, +0xc004924, 0x27a60018, 0x24040001, 0x24050001, +0x27b0001a, 0xc004924, 0x2003021, 0x24040001, +0x24050001, 0xc004924, 0x2003021, 0x24040001, +0x24050004, 0x27b0001c, 0xc004924, 0x2003021, +0x24040001, 0x24050004, 0xc004924, 0x2003021, +0x24040001, 0x24050005, 0x27b0001e, 0xc004924, +0x2003021, 0x24040001, 0x24050005, 0xc004924, +0x2003021, 0x24040001, 0x24050009, 0xc004924, +0x2003021, 0x24040001, 0x24050009, 0xc004924, +0x2003021, 0x24040001, 0x24050001, 0xc004924, +0x27a60018, 0x24040001, 0x24050001, 0xc004924, +0x27a60018, 0x97a20018, 0x30420004, 0x10400034, +0x3c114000, 0x3c020001, 0x8c425e18, 0x2443ffff, +0x2c620006, 0x10400034, 0x31080, 0x3c010001, +0x220821, 0x8c225c38, 0x400008, 0x0, +0x24040001, 0x24050011, 0x27b00020, 0xc004924, +0x2003021, 0x24040001, 0x24050011, 0xc004924, +0x2003021, 0x97a40020, 0x30824000, 0x10400002, +0x3c030010, 0x3c030008, 0x3c120001, 0x8005306, +0x30828000, 0x24040001, 0x24050014, 0x27b00020, +0xc004924, 0x2003021, 0x24040001, 0x24050014, +0xc004924, 0x2003021, 0x97a40020, 0x30821000, +0x10400002, 0x3c030010, 0x3c030008, 0x3c120001, +0x30820800, 0x54400001, 0x3c120002, 0x3c028000, +0x2221025, 0x2431825, 0x8005313, 0x438825, +0x3c110001, 0x2338821, 0x8e317e9c, 0x3c027fff, +0x3442ffff, 0x2228824, 0x3c020001, 0x8c425d38, +0x1040001c, 0x0, 0x3c020001, 0x8c425df8, +0x10400002, 0x3c022000, 0x2228825, 0x141140, +0x3c010001, 0x220821, 0x8c227ea0, 0x10400003, +0x3c020020, 0x8005327, 0x2228825, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, -0x220821, 0x8c2275dc, 0x10400003, 0x3c020080, -0x800515e, 0x2228825, 0x3c02ff7f, 0x3442ffff, -0x2228824, 0x3c020001, 0x8c425500, 0x10400002, -0x3c020800, 0x2228825, 0x3c020001, 0x8c425504, -0x10400002, 0x3c020400, 0x2228825, 0x3c020001, -0x8c425508, 0x10400006, 0x3c020100, 0x8005171, -0x2228825, 0x3c027fff, 0x3442ffff, 0x628824, -0x141140, 0x3c010001, 0x220821, 0xac3175c0, -0x2201021, 0x8fbf002c, 0x8fb40028, 0x8fb30024, -0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, -0x27bd0030, 0x27bdffd8, 0xafb40020, 0x80a021, -0xafbf0024, 0xafb3001c, 0xafb20018, 0xafb10014, -0xafb00010, 0x8f900200, 0x3c030001, 0x8c635488, -0x8f930220, 0x24020002, 0x106200b4, 0x2c620003, -0x10400005, 0x24020001, 0x1062000a, 0x141940, -0x8005240, 0x0, 0x24020004, 0x1062005a, -0x24020008, 0x10620059, 0x149140, 0x8005240, -0x0, 0x3c040001, 0x832021, 0x8c8475cc, -0x3c110001, 0x2238821, 0x8e3175c4, 0x3c024000, -0x821024, 0x1040003e, 0x3c020008, 0x2221024, -0x10400020, 0x36100002, 0x3c020001, 0x431021, -0x8c4275d0, 0x10400005, 0x36100020, 0x36100100, -0x3c020020, 0x80051b5, 0x2228825, 0x2402feff, -0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824, -0x141140, 0x3c010001, 0x220821, 0x8c2275d8, -0x10400005, 0x3c020001, 0x2629825, 0x3c020080, -0x80051d4, 0x2228825, 0x3c02fffe, 0x3442ffff, -0x2629824, 0x3c02ff7f, 0x3442ffff, 0x80051d4, -0x2228824, 0x2402fedf, 0x2028024, 0x3c02fffe, -0x3442ffff, 0x2629824, 0x3c02ff5f, 0x3442ffff, -0x2228824, 0x3c010001, 0x230821, 0xac2075d0, -0x3c010001, 0x230821, 0xac2075d8, 0xc0047cd, -0x0, 0xaf900200, 0xaf930220, 0x8f820220, -0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, -0x34420002, 0xaf820220, 0x80051eb, 0x141140, -0x8f820200, 0x2403fffd, 0x431024, 0xc0047cd, -0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429b, +0x220821, 0x8c227ea8, 0x10400003, 0x3c020080, +0x8005332, 0x2228825, 0x3c02ff7f, 0x3442ffff, +0x2228824, 0x3c040001, 0x24845c2c, 0x3c05000c, +0x34a50326, 0x3c070001, 0x8ce75d28, 0x3021, +0x141140, 0x3c010001, 0x220821, 0xac317e94, +0xafb20010, 0xc002403, 0xafb10014, 0x800538f, +0x2201021, 0x142940, 0x3c030001, 0x651821, +0x8c637e98, 0x3c024000, 0x621024, 0x14400008, +0x3c027fff, 0x3442ffff, 0x628824, 0x3c010001, +0x250821, 0xac317e90, 0x800538f, 0x2201021, +0x3c020001, 0x8c425d38, 0x10400033, 0x3c11c00c, +0x3c020001, 0x8c425dd4, 0x3c04c00c, 0x34842000, +0x3c030001, 0x8c635df8, 0x2102b, 0x21023, +0x441024, 0x10600003, 0x518825, 0x3c022000, +0x2228825, 0x3c020001, 0x451021, 0x8c427ea4, +0x10400003, 0x3c020020, 0x800536c, 0x2228825, +0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, +0x3c010001, 0x220821, 0x8c227eac, 0x10400003, +0x3c020080, 0x8005377, 0x2228825, 0x3c02ff7f, +0x3442ffff, 0x2228824, 0x3c020001, 0x8c425dc0, +0x10400002, 0x3c020800, 0x2228825, 0x3c020001, +0x8c425dc4, 0x10400002, 0x3c020400, 0x2228825, +0x3c020001, 0x8c425dc8, 0x10400006, 0x3c020100, +0x800538a, 0x2228825, 0x3c027fff, 0x3442ffff, +0x628824, 0x141140, 0x3c010001, 0x220821, +0xac317e90, 0x2201021, 0x8fbf003c, 0x8fb40038, +0x8fb30034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, +0x3e00008, 0x27bd0040, 0x27bdffd8, 0xafb40020, +0x80a021, 0xafbf0024, 0xafb3001c, 0xafb20018, +0xafb10014, 0xafb00010, 0x8f900200, 0x3c030001, +0x8c635d28, 0x8f930220, 0x24020002, 0x10620063, +0x2c620003, 0x10400005, 0x24020001, 0x1062000a, +0x141940, 0x8005459, 0x0, 0x24020004, +0x1062005a, 0x24020008, 0x10620059, 0x149140, +0x8005459, 0x0, 0x3c040001, 0x832021, +0x8c847e9c, 0x3c110001, 0x2238821, 0x8e317e94, +0x3c024000, 0x821024, 0x1040003e, 0x3c020008, +0x2221024, 0x10400020, 0x36100002, 0x3c020001, +0x431021, 0x8c427ea0, 0x10400005, 0x36100020, +0x36100100, 0x3c020020, 0x80053ce, 0x2228825, +0x2402feff, 0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, 0x220821, -0x8005240, 0xac3175c4, 0x149140, 0x3c040001, -0x922021, 0x8c8475c8, 0x3c110001, 0x2328821, -0x8e3175c0, 0x3c024000, 0x821024, 0x14400011, -0x0, 0x3c020001, 0x8c425538, 0x14400006, -0x3c02bfff, 0x8f820200, 0x34420002, 0xc0047cd, -0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429b, -0x2228824, 0x3c010001, 0x320821, 0x8005240, -0xac3175c0, 0x3c020001, 0x8c425538, 0x10400005, -0x3c020020, 0x3c020001, 0x8c425514, 0x1040002b, -0x3c020020, 0x821024, 0x10400007, 0x36100020, -0x24020100, 0x3c010001, 0x320821, 0xac2275d4, -0x8005220, 0x36100100, 0x3c010001, 0x320821, -0xac2075d4, 0x2402feff, 0x2028024, 0x3c020080, -0x821024, 0x10400007, 0x141940, 0x3c020001, -0x3c010001, 0x230821, 0xac2275dc, 0x8005231, -0x2629825, 0x141140, 0x3c010001, 0x220821, -0xac2075dc, 0x3c02fffe, 0x3442ffff, 0x2629824, -0xc0047cd, 0x0, 0xaf900200, 0xaf930220, +0x8c227ea8, 0x10400005, 0x3c020001, 0x2629825, +0x3c020080, 0x80053ed, 0x2228825, 0x3c02fffe, +0x3442ffff, 0x2629824, 0x3c02ff7f, 0x3442ffff, +0x80053ed, 0x2228824, 0x2402fedf, 0x2028024, +0x3c02fffe, 0x3442ffff, 0x2629824, 0x3c02ff5f, +0x3442ffff, 0x2228824, 0x3c010001, 0x230821, +0xac207ea0, 0x3c010001, 0x230821, 0xac207ea8, +0xc004844, 0x0, 0xaf900200, 0xaf930220, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, -0x8f820220, 0x34420002, 0xaf820220, 0x141140, -0x3c010001, 0x220821, 0xac3175c0, 0x8fbf0024, -0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, -0x8fb00010, 0x3e00008, 0x27bd0028, 0x0 }; +0x8f820220, 0x34420002, 0xaf820220, 0x8005404, +0x141140, 0x8f820200, 0x2403fffd, 0x431024, +0xc004844, 0xaf820200, 0x3c02bfff, 0x3442ffff, +0xc00429b, 0x2228824, 0x141140, 0x3c010001, +0x220821, 0x8005459, 0xac317e94, 0x149140, +0x3c040001, 0x922021, 0x8c847e98, 0x3c110001, +0x2328821, 0x8e317e90, 0x3c024000, 0x821024, +0x14400011, 0x0, 0x3c020001, 0x8c425df8, +0x14400006, 0x3c02bfff, 0x8f820200, 0x34420002, +0xc004844, 0xaf820200, 0x3c02bfff, 0x3442ffff, +0xc00429b, 0x2228824, 0x3c010001, 0x320821, +0x8005459, 0xac317e90, 0x3c020001, 0x8c425df8, +0x10400005, 0x3c020020, 0x3c020001, 0x8c425dd4, +0x1040002b, 0x3c020020, 0x821024, 0x10400007, +0x36100020, 0x24020100, 0x3c010001, 0x320821, +0xac227ea4, 0x8005439, 0x36100100, 0x3c010001, +0x320821, 0xac207ea4, 0x2402feff, 0x2028024, +0x3c020080, 0x821024, 0x10400007, 0x141940, +0x3c020001, 0x3c010001, 0x230821, 0xac227eac, +0x800544a, 0x2629825, 0x141140, 0x3c010001, +0x220821, 0xac207eac, 0x3c02fffe, 0x3442ffff, +0x2629824, 0xc004844, 0x0, 0xaf900200, +0xaf930220, 0x8f820220, 0x2403fffb, 0x431024, +0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, +0x141140, 0x3c010001, 0x220821, 0xac317e90, +0x8fbf0024, 0x8fb40020, 0x8fb3001c, 0x8fb20018, +0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, +0x0, 0x0, 0x0, 0x0 }; u32 tigonFwRodata[(MAX_RODATA_LEN/4) + 1] __initdata = { 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, @@ -4339,10 +4473,10 @@ 0x32203139, 0x39382f30, 0x342f3237, 0x2032323a, 0x31333a34, 0x30207368, 0x75616e67, 0x20457870, 0x20240000, 0x46575f56, 0x45525349, 0x4f4e3a20, -0x23312054, 0x68752041, 0x75672031, 0x32203135, -0x3a34393a, 0x35332050, 0x44542031, 0x39393900, +0x23312053, 0x61742044, 0x65632031, 0x31203136, +0x3a30333a, 0x31392050, 0x53542031, 0x39393900, 0x46575f43, 0x4f4d5049, 0x4c455f54, 0x494d453a, -0x2031353a, 0x34393a35, 0x33000000, 0x46575f43, +0x2031363a, 0x30333a31, 0x39000000, 0x46575f43, 0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, 0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465, 0x0, @@ -4420,25 +4554,27 @@ 0x2e322031, 0x3939382f, 0x30342f32, 0x37203232, 0x3a31333a, 0x33392073, 0x6875616e, 0x67204578, 0x70202400, 0x50726f62, 0x65506879, 0x0, -0x6c6e6b41, 0x53535254, 0x0, 0x11998, -0x119d0, 0x119e8, 0x11a1c, 0x11a48, -0x11a5c, 0x11a98, 0x11e08, 0x11b70, -0x11bb0, 0x11bdc, 0x11c1c, 0x11c4c, -0x11c88, 0x11cbc, 0x11e08, 0x1204c, -0x12064, 0x1208c, 0x120ac, 0x120d4, -0x12204, 0x1222c, 0x12280, 0x122a8, -0x0, 0x1250c, 0x125dc, 0x126b4, -0x12784, 0x127e0, 0x128bc, 0x128e4, -0x129c0, 0x129e8, 0x12b90, 0x12bb8, -0x12d60, 0x12f58, 0x131ec, 0x13100, -0x131ec, 0x13218, 0x12d88, 0x12f30, -0x0, 0x13604, 0x13648, 0x136e0, -0x1372c, 0x1379c, 0x13834, 0x13868, -0x138f0, 0x13988, 0x13a58, 0x13a98, -0x13b1c, 0x13b40, 0x13c74, 0x646f4261, +0x6c6e6b41, 0x53535254, 0x0, 0x11af4, +0x11b8c, 0x11bac, 0x11bf0, 0x11c1c, +0x11c30, 0x11c6c, 0x11fe0, 0x11d48, +0x11d88, 0x11db4, 0x11df4, 0x11e24, +0x11e60, 0x11e94, 0x11fe0, 0x12228, +0x12240, 0x12268, 0x12288, 0x122b0, +0x123e0, 0x12408, 0x1245c, 0x12484, +0x0, 0x126ec, 0x127bc, 0x12894, +0x12964, 0x129c0, 0x12a9c, 0x12ac4, +0x12ba0, 0x12bc8, 0x12d70, 0x12d98, +0x12f40, 0x13138, 0x133cc, 0x132e0, +0x133cc, 0x133f8, 0x12f68, 0x13110, +0x0, 0x13ae4, 0x13b28, 0x13bc0, +0x13c0c, 0x13c7c, 0x13d14, 0x13d48, +0x13dd0, 0x13e68, 0x13f38, 0x13f78, +0x13ffc, 0x14020, 0x14154, 0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0, 0x73746d61, 0x634c4e4b, 0x0, -0x0, 0x0 }; +0x6765746d, 0x636c6e6b, 0x0, 0x14c4c, +0x14c4c, 0x14b94, 0x14bd8, 0x14c4c, +0x14c4c, 0x0 }; u32 tigonFwData[(MAX_DATA_LEN/4) + 1] __initdata = { 0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x416c7465, @@ -4452,39 +4588,41 @@ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, -0x1, 0x0, 0x0, 0x1, +0x1, 0x0, 0x0, 0x0, +0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, -0x0, 0x0, 0x0, 0x0, -0x0, 0x1000000, 0x21000000, 0x12000140, -0x0, 0x0, 0x20000000, 0x120000a0, -0x0, 0x12000060, 0x12000180, 0x120001e0, -0x0, 0x0, 0x0, 0x0, +0x1, 0x0, 0x0, 0x0, +0x0, 0x0, 0x1000000, 0x21000000, +0x12000140, 0x0, 0x0, 0x20000000, +0x120000a0, 0x0, 0x12000060, 0x12000180, +0x120001e0, 0x0, 0x0, 0x0, +0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x30001, 0x1, 0x30201, 0x0, 0x0, 0x0 }; #endif /* Generated by genfw.c */ #define tigon2FwReleaseMajor 0xc -#define tigon2FwReleaseMinor 0x3 -#define tigon2FwReleaseFix 0xd +#define tigon2FwReleaseMinor 0x4 +#define tigon2FwReleaseFix 0x5 #define tigon2FwStartAddr 0x00004000 #define tigon2FwTextAddr 0x00004000 -#define tigon2FwTextLen 0xeca0 -#define tigon2FwRodataAddr 0x00012ca0 -#define tigon2FwRodataLen 0xff0 -#define tigon2FwDataAddr 0x00013cc0 -#define tigon2FwDataLen 0x170 -#define tigon2FwSbssAddr 0x00013e30 -#define tigon2FwSbssLen 0xbc -#define tigon2FwBssAddr 0x00013ef0 +#define tigon2FwTextLen 0x11c50 +#define tigon2FwRodataAddr 0x00015c50 +#define tigon2FwRodataLen 0x10c0 +#define tigon2FwDataAddr 0x00016d40 +#define tigon2FwDataLen 0x1c0 +#define tigon2FwSbssAddr 0x00016f00 +#define tigon2FwSbssLen 0xc4 +#define tigon2FwBssAddr 0x00016fd0 #define tigon2FwBssLen 0x20c0 u32 tigon2FwText[(MAX_TEXT_LEN/4) + 1] __initdata = { 0x0, 0x10000003, 0x0, 0xd, 0xd, -0x3c1d0001, 0x8fbd3d10, 0x3a0f021, 0x3c100000, +0x3c1d0001, 0x8fbd6da0, 0x3a0f021, 0x3c100000, 0x26104000, 0xc0010c0, 0x0, 0xd, -0x3c1d0001, 0x8fbd3d14, 0x3a0f021, 0x3c100000, -0x26104000, 0xc00178e, 0x0, 0xd, +0x3c1d0001, 0x8fbd6da4, 0x3a0f021, 0x3c100000, +0x26104000, 0xc0017c8, 0x0, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4496,22 +4634,22 @@ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000008, -0x0, 0x80016dd, 0x3c0a0001, 0x80016dd, -0x3c0a0002, 0x80016dd, 0x0, 0x8002ab5, -0x0, 0x8002a58, 0x0, 0x80016dd, -0x3c0a0004, 0x800306c, 0x0, 0x8001a07, -0x0, 0x80036c3, 0x0, 0x8004aad, -0x0, 0x80016dd, 0x3c0a0006, 0x8003731, -0x3c0a0007, 0x80016dd, 0x3c0a0008, 0x80016dd, -0x3c0a0009, 0x8003789, 0x0, 0x8002caf, -0x0, 0x80016dd, 0x3c0a000b, 0x80016dd, -0x3c0a000c, 0x80016dd, 0x3c0a000d, 0x800277b, -0x0, 0x8002710, 0x0, 0x80016dd, -0x3c0a000e, 0x8001f20, 0x0, 0x8001919, -0x0, 0x80019b9, 0x0, 0x8003a08, -0x0, 0x80039f6, 0x0, 0x80016dd, -0x0, 0x80018c6, 0x0, 0x80016dd, -0x0, 0x80016dd, 0x3c0a0013, 0x80016dd, +0x0, 0x8001717, 0x3c0a0001, 0x8001717, +0x3c0a0002, 0x8001717, 0x0, 0x8002c68, +0x0, 0x8002c0b, 0x0, 0x8001717, +0x3c0a0004, 0x8003272, 0x0, 0x8001a3a, +0x0, 0x8003925, 0x0, 0x80038cc, +0x0, 0x8001717, 0x3c0a0006, 0x8003993, +0x3c0a0007, 0x8001717, 0x3c0a0008, 0x8001717, +0x3c0a0009, 0x80039eb, 0x0, 0x8002e62, +0x0, 0x8001717, 0x3c0a000b, 0x8001717, +0x3c0a000c, 0x8001717, 0x3c0a000d, 0x80028d7, +0x0, 0x800286c, 0x0, 0x8001717, +0x3c0a000e, 0x8002074, 0x0, 0x800194c, +0x0, 0x80019ec, 0x0, 0x8003c7e, +0x0, 0x8003c6c, 0x0, 0x8001717, +0x0, 0x8001902, 0x0, 0x8001717, +0x0, 0x8001717, 0x3c0a0013, 0x8001717, 0x3c0a0014, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4529,78 +4667,78 @@ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27bdffe0, 0x3c1cc000, 0xafbf001c, 0xafb00018, 0x8f820140, -0x24030003, 0xaf8300ec, 0x34420004, 0xc0029a0, -0xaf820140, 0x3c0100c0, 0xc001711, 0xac203ffc, -0x403021, 0x3c020008, 0x3c010001, 0xac263e48, +0x24030003, 0xaf8300ec, 0x34420004, 0xc002afc, +0xaf820140, 0x3c0100c0, 0xc00174b, 0xac203ffc, +0x403021, 0x3c020008, 0x3c010001, 0xac266f18, 0x50c2000d, 0x24020008, 0x3c100010, 0x10d00009, -0x24050100, 0x3c040001, 0x24842d54, 0x3821, -0xafa00010, 0xc0029bb, 0xafa00014, 0x3c010001, -0xac303e48, 0x24020008, 0x3c010001, 0xac223e60, -0x2402001f, 0x3c010001, 0xac223e70, 0x24020016, -0x3c010001, 0xac223e44, 0x3c05fffe, 0x34a56f08, -0x3c020001, 0x8c423e48, 0x3c030001, 0x24635fb0, -0x3c040001, 0x8c843cc4, 0x431023, 0x14800002, -0x458021, 0x2610fa48, 0x2402f000, 0x2028024, -0xc001733, 0x2002021, 0x2022823, 0x3c040020, +0x24050100, 0x3c040001, 0x24845d04, 0x3821, +0xafa00010, 0xc002b17, 0xafa00014, 0x3c010001, +0xac306f18, 0x24020008, 0x3c010001, 0xac226f30, +0x2402001f, 0x3c010001, 0xac226f40, 0x24020016, +0x3c010001, 0xac226f14, 0x3c05fffe, 0x34a56f08, +0x3c020001, 0x8c426f18, 0x3c030002, 0x24639090, +0x3c040001, 0x8c846d44, 0x431023, 0x14800002, +0x458021, 0x2610fa38, 0x2402f000, 0x2028024, +0xc00176d, 0x2002021, 0x2022823, 0x3c040020, 0x821823, 0x651823, 0x247bb000, 0x3c03fffe, 0x3463bf08, 0x363b821, 0x3c0600bf, 0x34c6f000, -0x3c070001, 0x8ce73cc0, 0x3c0300bf, 0x3463e000, -0x852023, 0x3c010001, 0xac243e54, 0x822023, -0x3c010001, 0xac253e3c, 0x52842, 0x3c010001, -0xac223e30, 0x27620ffc, 0x3c010001, 0xac223d10, +0x3c070001, 0x8ce76d40, 0x3c0300bf, 0x3463e000, +0x852023, 0x3c010001, 0xac246f24, 0x822023, +0x3c010001, 0xac256f0c, 0x52842, 0x3c010001, +0xac226f00, 0x27620ffc, 0x3c010001, 0xac226da0, 0x27621ffc, 0xdb3023, 0x7b1823, 0x3c010001, -0xac243e34, 0x3c010001, 0xac253e58, 0x3c010001, -0xac223d14, 0xaf860150, 0x10e00011, 0xaf830250, -0x3c1d0001, 0x8fbd3ccc, 0x3a0f021, 0xc0016f7, -0x0, 0x3c020001, 0x8c423cd0, 0x3c030001, -0x8c633cd4, 0x2442fe00, 0x24630200, 0x3c010001, -0xac223cd0, 0x3c010001, 0x10000004, 0xac233cd4, -0x3c1d0001, 0x8fbd3d10, 0x3a0f021, 0x3c020001, -0x8c423cc4, 0x1040000d, 0x26fafa48, 0x3c020001, -0x8c423cd0, 0x3c030001, 0x8c633cd4, 0x3c1a0001, -0x8f5a3cd4, 0x2442fa48, 0x246305b8, 0x3c010001, -0xac223cd0, 0x3c010001, 0xac233cd4, 0x3c020001, -0x8c423cc8, 0x14400003, 0x0, 0x3c010001, -0xac203cd0, 0xc00114c, 0x0, 0x8fbf001c, +0xac246f04, 0x3c010001, 0xac256f28, 0x3c010001, +0xac226da4, 0xaf860150, 0x10e00011, 0xaf830250, +0x3c1d0001, 0x8fbd6d4c, 0x3a0f021, 0xc001731, +0x0, 0x3c020001, 0x8c426d50, 0x3c030001, +0x8c636d54, 0x2442fe00, 0x24630200, 0x3c010001, +0xac226d50, 0x3c010001, 0x10000004, 0xac236d54, +0x3c1d0001, 0x8fbd6da0, 0x3a0f021, 0x3c020001, +0x8c426d44, 0x1040000d, 0x26fafa38, 0x3c020001, +0x8c426d50, 0x3c030001, 0x8c636d54, 0x3c1a0001, +0x8f5a6d54, 0x2442fa38, 0x246305c8, 0x3c010001, +0xac226d50, 0x3c010001, 0xac236d54, 0x3c020001, +0x8c426d48, 0x14400003, 0x0, 0x3c010001, +0xac206d50, 0xc00114c, 0x0, 0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, 0x3c020001, -0x8c423cd0, 0x3c030001, 0x8c633cd4, 0x27bdffa0, -0xafb00040, 0x3c100001, 0x8e103738, 0x3c040001, -0x24842d60, 0xafbf0058, 0xafbe0054, 0xafb50050, +0x8c426d50, 0x3c030001, 0x8c636d54, 0x27bdffa0, +0xafb00040, 0x3c100001, 0x8e106748, 0x3c040001, +0x24845d10, 0xafbf0058, 0xafbe0054, 0xafb50050, 0xafb3004c, 0xafb20048, 0xafb10044, 0xafa20034, 0xafa30030, 0xafa00010, 0xafa00014, 0x8f860040, -0x24050200, 0xc0029bb, 0x2003821, 0x8f830040, +0x24050200, 0xc002b17, 0x2003821, 0x8f830040, 0x3c02f000, 0x621824, 0x3c026000, 0x1062000b, -0xa3a0003f, 0x240e0001, 0x3c040001, 0x24842d68, +0xa3a0003f, 0x240e0001, 0x3c040001, 0x24845d18, 0xa3ae003f, 0xafa00010, 0xafa00014, 0x8f860040, -0x24050300, 0xc0029bb, 0x2003821, 0x8f820240, +0x24050300, 0xc002b17, 0x2003821, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240, 0xaf800048, 0x8f820048, 0x14400005, 0x0, 0xaf800048, 0x8f820048, 0x10400004, 0x0, 0xaf800048, 0x10000003, 0x2e02021, 0xaf80004c, 0x2e02021, -0x3c050001, 0xc002a28, 0x34a540f8, 0x3402021, -0xc002a28, 0x240505b8, 0x3c020001, 0x8c423e54, -0x3c0d0001, 0x8dad3e34, 0x3c030001, 0x8c633e30, -0x3c080001, 0x8d083e3c, 0x3c090001, 0x8d293e58, -0x3c0a0001, 0x8d4a3e60, 0x3c0b0001, 0x8d6b3e70, -0x3c0c0001, 0x8d8c3e44, 0x3c040001, 0x24842d74, -0x24050400, 0xaf420130, 0x8f420130, 0x24060001, -0x24070001, 0xaf400000, 0xaf4d012c, 0xaf430138, -0xaf48013c, 0xaf490140, 0xaf4a0144, 0xaf4b0148, -0xaf4c014c, 0x2442ff80, 0xaf420134, 0x24020001, -0xafa20010, 0xc0029bb, 0xafa00014, 0x8f42012c, -0xafa20010, 0x8f420130, 0xafa20014, 0x8f460138, -0x8f47013c, 0x3c040001, 0x24842d80, 0xc0029bb, -0x24050500, 0xafb70010, 0xafba0014, 0x8f460140, -0x8f470144, 0x3c040001, 0x24842d8c, 0xc0029bb, -0x24050600, 0x3c020001, 0x8c423e48, 0x3603821, -0x3c060001, 0x24c65fb0, 0x2448ffff, 0x1061824, +0x3c050001, 0xc002b84, 0x34a540f8, 0x3402021, +0xc002b84, 0x240505c8, 0x3c020001, 0x8c426f24, +0x3c0d0001, 0x8dad6f04, 0x3c030001, 0x8c636f00, +0x3c080001, 0x8d086f0c, 0x3c090001, 0x8d296f28, +0x3c0a0001, 0x8d4a6f30, 0x3c0b0001, 0x8d6b6f40, +0x3c0c0001, 0x8d8c6f14, 0x3c040001, 0x24845d24, +0x24050400, 0xaf42013c, 0x8f42013c, 0x24060001, +0x24070001, 0xaf400000, 0xaf4d0138, 0xaf430144, +0xaf480148, 0xaf49014c, 0xaf4a0150, 0xaf4b0154, +0xaf4c0158, 0x2442ff80, 0xaf420140, 0x24020001, +0xafa20010, 0xc002b17, 0xafa00014, 0x8f420138, +0xafa20010, 0x8f42013c, 0xafa20014, 0x8f460144, +0x8f470148, 0x3c040001, 0x24845d30, 0xc002b17, +0x24050500, 0xafb70010, 0xafba0014, 0x8f46014c, +0x8f470150, 0x3c040001, 0x24845d3c, 0xc002b17, +0x24050600, 0x3c020001, 0x8c426f18, 0x3603821, +0x3c060002, 0x24c69090, 0x2448ffff, 0x1061824, 0xe81024, 0x43102b, 0x10400006, 0x24050900, -0x3c040001, 0x24842d98, 0xafa80010, 0xc0029bb, +0x3c040001, 0x24845d48, 0xafa80010, 0xc002b17, 0xafa00014, 0x8f82000c, 0xafa20010, 0x8f82003c, 0xafa20014, 0x8f860000, 0x8f870004, 0x3c040001, -0x24842da4, 0xc0029bb, 0x24051000, 0x8c020220, +0x24845d54, 0xc002b17, 0x24051000, 0x8c020220, 0x8c030224, 0x8c060218, 0x8c07021c, 0x3c040001, -0x24842dac, 0x24051100, 0xafa20010, 0xc0029bb, +0x24845d5c, 0x24051100, 0xafa20010, 0xc002b17, 0xafa30014, 0xaf800054, 0xaf80011c, 0x8c020218, 0x30420002, 0x10400009, 0x0, 0x8c020220, 0x3c030002, 0x34630004, 0x431025, 0xaf42000c, @@ -4619,11 +4757,20 @@ 0x24020490, 0xaee20010, 0xaee40008, 0xaee5000c, 0x26e40008, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, 0x8c820018, 0xaf8200b4, 0x9482000a, -0xaf82009c, 0x8f8200b0, 0x8f430014, 0x431025, -0xaf8200b0, 0x8f8200b0, 0x30420004, 0x1440fffd, -0x24051200, 0x96e20472, 0x96e60452, 0x96e70462, -0xafa20010, 0x96e20482, 0x3c040001, 0x24842db4, -0xc0029bb, 0xafa20014, 0x96f00452, 0x32020001, +0xaf82009c, 0x8f420014, 0xaf8200b0, 0x8f8200b0, +0x30420004, 0x1440fffd, 0x0, 0x8f8200b0, +0x3c03ef00, 0x431024, 0x10400021, 0x0, +0x8f8200b4, 0xafa20010, 0x8f820090, 0x8f830094, +0x3c040001, 0x24845d64, 0xafa30014, 0x8f8600b0, +0x8f87009c, 0x3c050001, 0xc002b17, 0x34a5200d, +0x3c040001, 0x24845d70, 0x240203ac, 0xafa20010, +0xafa00014, 0x8f860144, 0x3c070001, 0x24e75d78, +0xc002b17, 0x3405dead, 0x8f82011c, 0x34420002, +0xaf82011c, 0x8f820220, 0x34420004, 0xaf820220, +0x8f820140, 0x3c030001, 0x431025, 0xaf820140, +0x96e20472, 0x96e60452, 0x96e70462, 0xafa20010, +0x96e20482, 0x3c040001, 0x24845da4, 0x24051200, +0xc002b17, 0xafa20014, 0x96f00452, 0x32020001, 0x10400002, 0xb021, 0x24160001, 0x32020002, 0x54400001, 0x36d60002, 0x32020008, 0x54400001, 0x36d60004, 0x32020010, 0x54400001, 0x36d60008, @@ -4635,9 +4782,9 @@ 0x36d61000, 0x96f00462, 0x32c24000, 0x14400004, 0x3207009b, 0x30c2009b, 0x14e20007, 0x240e0001, 0x32c22000, 0x1440000d, 0x32020001, 0x3062009b, -0x10e20009, 0x240e0001, 0x3c040001, 0x24842dc0, +0x10e20009, 0x240e0001, 0x3c040001, 0x24845db0, 0x24051300, 0x2003821, 0xa3ae003f, 0xafa30010, -0xc0029bb, 0xafa00014, 0x32020001, 0x54400001, +0xc002b17, 0xafa00014, 0x32020001, 0x54400001, 0x36d60080, 0x32020002, 0x54400001, 0x36d60100, 0x32020008, 0x54400001, 0x36d60200, 0x32020010, 0x54400001, 0x36d60400, 0x32020080, 0x54400001, @@ -4651,1060 +4798,1138 @@ 0x10400002, 0x3c020010, 0x2c2b025, 0x8c020218, 0x30424000, 0x10400002, 0x3c020020, 0x2c2b025, 0x8c020218, 0x30421000, 0x10400002, 0x3c020040, -0x2c2b025, 0x8ee20498, 0x8ee3049c, 0xaf420150, -0xaf430154, 0x8ee204a0, 0x8ee304a4, 0xaf420158, -0xaf43015c, 0x8ee204a8, 0x8ee304ac, 0xaf420160, -0xaf430164, 0x8ee20428, 0x8ee3042c, 0xaf420168, -0xaf43016c, 0x8ee20448, 0x8ee3044c, 0xaf420170, -0xaf430174, 0x8ee20458, 0x8ee3045c, 0xaf420178, -0xaf43017c, 0x8ee20468, 0x8ee3046c, 0xaf420180, -0xaf430184, 0x8ee20478, 0x8ee3047c, 0xaf420188, -0xaf43018c, 0x8ee20488, 0x8ee3048c, 0xaf420190, -0xaf430194, 0x8ee204b0, 0x8ee304b4, 0x24040080, -0xaf420198, 0xaf43019c, 0xc002a28, 0x24050080, -0x8c02025c, 0x27440214, 0xaf4201e0, 0x8c020260, -0x24050200, 0x24060008, 0xc002a3f, 0xaf4201e8, +0x2c2b025, 0x8ee20498, 0x8ee3049c, 0xaf420160, +0xaf430164, 0x8ee204a0, 0x8ee304a4, 0xaf420168, +0xaf43016c, 0x8ee204a8, 0x8ee304ac, 0xaf420170, +0xaf430174, 0x8ee20428, 0x8ee3042c, 0xaf420178, +0xaf43017c, 0x8ee20448, 0x8ee3044c, 0xaf420180, +0xaf430184, 0x8ee20458, 0x8ee3045c, 0xaf420188, +0xaf43018c, 0x8ee20468, 0x8ee3046c, 0xaf420190, +0xaf430194, 0x8ee20478, 0x8ee3047c, 0xaf420198, +0xaf43019c, 0x8ee20488, 0x8ee3048c, 0xaf4201a0, +0xaf4301a4, 0x8ee204b0, 0x8ee304b4, 0x24040080, +0xaf4201a8, 0xaf4301ac, 0xc002b84, 0x24050080, +0x8c02025c, 0x27440224, 0xaf4201f0, 0x8c020260, +0x24050200, 0x24060008, 0xc002b9b, 0xaf4201f8, 0x3c043b9a, 0x3484ca00, 0x3821, 0x24020006, -0x24030002, 0xaf4201e4, 0x240203e8, 0xaf4301f4, -0xaf4301f0, 0xaf4401ec, 0xaf420284, 0x24020001, -0xaf430280, 0xaf42028c, 0x3c030001, 0x671821, -0x90633cd8, 0x3471021, 0x24e70001, 0xa043021c, +0x24030002, 0xaf4201f4, 0x240203e8, 0xaf430204, +0xaf430200, 0xaf4401fc, 0xaf420294, 0x24020001, +0xaf430290, 0xaf42029c, 0x3c030001, 0x671821, +0x90636d58, 0x3471021, 0x24e70001, 0xa043022c, 0x2ce2000f, 0x1440fff8, 0x3471821, 0x24e70001, 0x3c080001, 0x350840f8, 0x8f820040, 0x3c040001, -0x24842dcc, 0x24051400, 0x21702, 0x24420030, -0xa062021c, 0x3471021, 0xa040021c, 0x8c070218, -0x2c03021, 0x240205b8, 0xafa20010, 0xc0029bb, -0xafa80014, 0x3c040001, 0x24842dd8, 0x3c050000, -0x24a55b38, 0x24060010, 0x27b10030, 0x2203821, -0x27b30034, 0xc001751, 0xafb30010, 0x3c030001, -0x8c633cc8, 0x1060000a, 0x408021, 0x8fa30030, +0x24845dbc, 0x24051400, 0x21702, 0x24420030, +0xa062022c, 0x3471021, 0xa040022c, 0x8c070218, +0x2c03021, 0x240205c8, 0xafa20010, 0xc002b17, +0xafa80014, 0x3c040001, 0x24845dc8, 0x3c050000, +0x24a55c20, 0x24060010, 0x27b10030, 0x2203821, +0x27b30034, 0xc00178b, 0xafb30010, 0x3c030001, +0x8c636d48, 0x1060000a, 0x408021, 0x8fa30030, 0x2405ff00, 0x8fa20034, 0x246400ff, 0x852024, 0x831823, 0x431023, 0xafa20034, 0xafa40030, -0xafb30010, 0x3c040001, 0x24842de4, 0x3c050000, -0x24a54100, 0x24060108, 0xc001751, 0x2203821, +0xafb30010, 0x3c040001, 0x24845dd4, 0x3c050000, +0x24a54100, 0x24060108, 0xc00178b, 0x2203821, 0x409021, 0x32c20003, 0x50400045, 0x2203821, 0x8f820050, 0x3c030010, 0x431024, 0x10400016, 0x0, 0x8c020218, 0x30420040, 0x1040000f, 0x24020001, 0x8f820050, 0x8c030218, 0x240e0001, -0x3c040001, 0x24842df0, 0xa3ae003f, 0xafa20010, -0xafa30014, 0x8f870040, 0x24051500, 0xc0029bb, +0x3c040001, 0x24845de0, 0xa3ae003f, 0xafa20010, +0xafa30014, 0x8f870040, 0x24051500, 0xc002b17, 0x2c03021, 0x10000004, 0x0, 0x3c010001, -0x370821, 0xa02240f4, 0x3c040001, 0x24842dfc, -0x3c050001, 0x24a52c20, 0x3c060001, 0x24c62c8c, +0x370821, 0xa02240f4, 0x3c040001, 0x24845dec, +0x3c050001, 0x24a55bd0, 0x3c060001, 0x24c65c3c, 0xc53023, 0x8f420010, 0x27b30030, 0x2603821, -0x27b10034, 0x34420a00, 0xaf420010, 0xc001751, -0xafb10010, 0x3c040001, 0x24842e10, 0x3c050001, -0x24a5af38, 0x3c060001, 0x24c6b2b4, 0xc53023, -0x2603821, 0xaf420108, 0xc001751, 0xafb10010, -0x3c040001, 0x24842e2c, 0x3c050001, 0x24a5b6c4, -0x3c060001, 0x24c6c1a8, 0xc53023, 0x2603821, -0x3c010001, 0xac223ea0, 0xc001751, 0xafb10010, -0x3c040001, 0x24842e44, 0x10000024, 0x24051600, -0x3c040001, 0x24842e4c, 0x3c050001, 0x24a59b0c, -0x3c060001, 0x24c69c38, 0xc53023, 0xc001751, -0xafb30010, 0x3c040001, 0x24842e5c, 0x3c050001, -0x24a5aad4, 0x3c060001, 0x24c6af30, 0xc53023, -0x2203821, 0xaf420108, 0xc001751, 0xafb30010, -0x3c040001, 0x24842e70, 0x3c050001, 0x24a5b2bc, -0x3c060001, 0x24c6b6bc, 0xc53023, 0x2203821, -0x3c010001, 0xac223ea0, 0xc001751, 0xafb30010, -0x3c040001, 0x24842e84, 0x24051650, 0x2c03021, -0x3821, 0x3c010001, 0xac223ea4, 0xafa00010, -0xc0029bb, 0xafa00014, 0x32c20020, 0x10400021, -0x27a70030, 0x3c040001, 0x24842e90, 0x3c050001, -0x24a5a960, 0x3c060001, 0x24c6aacc, 0xc53023, -0x24022000, 0xaf42001c, 0x27a20034, 0xc001751, +0x27b10034, 0x34420a00, 0xaf420010, 0xc00178b, +0xafb10010, 0x3c040001, 0x24845e00, 0x3c050001, +0x24a5b604, 0x3c060001, 0x24c6b980, 0xc53023, +0x2603821, 0xaf420108, 0xc00178b, 0xafb10010, +0x3c040001, 0x24845e1c, 0x3c050001, 0x24a5bda0, +0x3c060001, 0x24c6c8a0, 0xc53023, 0x2603821, +0x3c010001, 0xac226f70, 0xc00178b, 0xafb10010, +0x3c040001, 0x24845e34, 0x10000024, 0x24051600, +0x3c040001, 0x24845e3c, 0x3c050001, 0x24a5a07c, +0x3c060001, 0x24c6a1a8, 0xc53023, 0xc00178b, +0xafb30010, 0x3c040001, 0x24845e4c, 0x3c050001, +0x24a5b1a0, 0x3c060001, 0x24c6b5fc, 0xc53023, +0x2203821, 0xaf420108, 0xc00178b, 0xafb30010, +0x3c040001, 0x24845e60, 0x3c050001, 0x24a5b988, +0x3c060001, 0x24c6bd98, 0xc53023, 0x2203821, +0x3c010001, 0xac226f70, 0xc00178b, 0xafb30010, +0x3c040001, 0x24845e74, 0x24051650, 0x2c03021, +0x3821, 0x3c010001, 0xac226f74, 0xafa00010, +0xc002b17, 0xafa00014, 0x32c20020, 0x10400021, +0x27a70030, 0x3c040001, 0x24845e80, 0x3c050001, +0x24a5b02c, 0x3c060001, 0x24c6b198, 0xc53023, +0x24022000, 0xaf42001c, 0x27a20034, 0xc00178b, 0xafa20010, 0x21900, 0x31982, 0x3c040800, 0x641825, 0xae430028, 0x24030010, 0xaf43003c, 0x96e30450, 0xaf430040, 0x8f430040, 0x3c040001, -0x24842ea4, 0xafa00014, 0xafa30010, 0x8f47001c, -0x24051660, 0x3c010001, 0xac223e9c, 0x10000025, +0x24845e94, 0xafa00014, 0xafa30010, 0x8f47001c, +0x24051660, 0x3c010001, 0xac226f6c, 0x10000025, 0x32c60020, 0x8ee20448, 0x8ee3044c, 0xaf43001c, 0x8f42001c, 0x2442e000, 0x2c422001, 0x1440000a, -0x240e0001, 0x3c040001, 0x24842eb0, 0xa3ae003f, +0x240e0001, 0x3c040001, 0x24845ea0, 0xa3ae003f, 0xafa00010, 0xafa00014, 0x8f46001c, 0x24051700, -0xc0029bb, 0x3821, 0x3c020000, 0x24425b74, +0xc002b17, 0x3821, 0x3c020000, 0x24425c5c, 0x21100, 0x21182, 0x3c030800, 0x431025, 0xae420028, 0x24020008, 0xaf42003c, 0x96e20450, -0xaf420040, 0x8f420040, 0x3c040001, 0x24842ebc, +0xaf420040, 0x8f420040, 0x3c040001, 0x24845eac, 0xafa00014, 0xafa20010, 0x8f47001c, 0x24051800, -0x32c60020, 0xc0029bb, 0x0, 0x3c030001, -0x8c633ea0, 0x3c050fff, 0x34a5ffff, 0x3c020001, -0x8c423ea4, 0x3c040800, 0x651824, 0x31882, +0x32c60020, 0xc002b17, 0x0, 0x3c030001, +0x8c636f70, 0x3c050fff, 0x34a5ffff, 0x3c020001, +0x8c426f74, 0x3c040800, 0x651824, 0x31882, 0x641825, 0x451024, 0x21082, 0x441025, 0xae420080, 0x32c20180, 0x10400056, 0xae430020, 0x8f82005c, 0x3c030080, 0x431024, 0x1040000d, 0x0, 0x8f820050, 0xafa20010, 0x8f82005c, -0x240e0001, 0x3c040001, 0x24842ec8, 0xa3ae003f, -0xafa20014, 0x8f870040, 0x24051900, 0xc0029bb, +0x240e0001, 0x3c040001, 0x24845eb8, 0xa3ae003f, +0xafa20014, 0x8f870040, 0x24051900, 0xc002b17, 0x2c03021, 0x8f820050, 0x3c030010, 0x431024, 0x10400016, 0x0, 0x8c020218, 0x30420040, 0x1040000f, 0x24020001, 0x8f820050, 0x8c030218, -0x240e0001, 0x3c040001, 0x24842df0, 0xa3ae003f, +0x240e0001, 0x3c040001, 0x24845de0, 0xa3ae003f, 0xafa20010, 0xafa30014, 0x8f870040, 0x24052000, -0xc0029bb, 0x2c03021, 0x10000004, 0x0, +0xc002b17, 0x2c03021, 0x10000004, 0x0, 0x3c010001, 0x370821, 0xa02240f4, 0x3c040001, -0x24842ed4, 0x3c050001, 0x24a52ba0, 0x3c060001, -0x24c62c18, 0xc53023, 0x8f420008, 0x27b30030, +0x24845ec4, 0x3c050001, 0x24a55b50, 0x3c060001, +0x24c65bc8, 0xc53023, 0x8f420008, 0x27b30030, 0x2603821, 0x27b10034, 0x34420e00, 0xaf420008, -0xc001751, 0xafb10010, 0x3c040001, 0x24842eec, -0x3c050001, 0x24a5cffc, 0x3c060001, 0x24c6db04, -0xc53023, 0x2603821, 0xaf42010c, 0xc001751, -0xafb10010, 0x3c040001, 0x24842f04, 0x3c050001, -0x24a5df84, 0x3c060001, 0x24c6e6bc, 0xc53023, -0x2603821, 0x3c010001, 0xac223eb0, 0xc001751, -0xafb10010, 0x3c040001, 0x24842f1c, 0x10000027, -0x24052100, 0x3c040001, 0x24842f24, 0x3c050001, -0x24a599c8, 0x3c060001, 0x24c69b04, 0xc53023, -0x27b10030, 0x2203821, 0x27b30034, 0xc001751, -0xafb30010, 0x3c040001, 0x24842f34, 0x3c050001, -0x24a5c25c, 0x3c060001, 0x24c6cff4, 0xc53023, -0x2203821, 0xaf42010c, 0xc001751, 0xafb30010, -0x3c040001, 0x24842f44, 0x3c050001, 0x24a5de24, -0x3c060001, 0x24c6df7c, 0xc53023, 0x2203821, -0x3c010001, 0xac223eb0, 0xc001751, 0xafb30010, -0x3c040001, 0x24842f58, 0x24052150, 0x2c03021, -0x3821, 0x3c010001, 0xac223ebc, 0xafa00010, -0xc0029bb, 0xafa00014, 0x3c030001, 0x8c633eb0, -0x3c110fff, 0x3631ffff, 0x3c020001, 0x8c423ebc, +0xc00178b, 0xafb10010, 0x3c040001, 0x24845edc, +0x3c050001, 0x24a5d814, 0x3c060001, 0x24c6e328, +0xc53023, 0x2603821, 0xaf42010c, 0xc00178b, +0xafb10010, 0x3c040001, 0x24845ef4, 0x3c050001, +0x24a5e90c, 0x3c060001, 0x24c6f050, 0xc53023, +0x2603821, 0x3c010001, 0xac226f80, 0xc00178b, +0xafb10010, 0x3c040001, 0x24845f0c, 0x10000027, +0x24052100, 0x3c040001, 0x24845f14, 0x3c050001, +0x24a59f38, 0x3c060001, 0x24c6a074, 0xc53023, +0x27b10030, 0x2203821, 0x27b30034, 0xc00178b, +0xafb30010, 0x3c040001, 0x24845f24, 0x3c050001, +0x24a5ca74, 0x3c060001, 0x24c6d80c, 0xc53023, +0x2203821, 0xaf42010c, 0xc00178b, 0xafb30010, +0x3c040001, 0x24845f34, 0x3c050001, 0x24a5e7ac, +0x3c060001, 0x24c6e904, 0xc53023, 0x2203821, +0x3c010001, 0xac226f80, 0xc00178b, 0xafb30010, +0x3c040001, 0x24845f48, 0x24052150, 0x2c03021, +0x3821, 0x3c010001, 0xac226f8c, 0xafa00010, +0xc002b17, 0xafa00014, 0x3c030001, 0x8c636f80, +0x3c110fff, 0x3631ffff, 0x3c020001, 0x8c426f8c, 0x3c1e0800, 0x711824, 0x31882, 0x7e1825, 0x511024, 0x21082, 0x5e1025, 0xae430038, 0xae420078, 0x8c020218, 0x30420040, 0x14400004, 0x24020001, 0x3c010001, 0x370821, 0xa02240f4, -0x3c040001, 0x24842f64, 0x3c050001, 0x24a52ab4, -0x3c060001, 0x24c62b90, 0xc53023, 0x27b50030, -0x2a03821, 0x27b30034, 0xc001751, 0xafb30010, -0x3c010001, 0xac223ea8, 0x511024, 0x21082, +0x3c040001, 0x24845f54, 0x3c050001, 0x24a5e330, +0x3c060001, 0x24c6e48c, 0xc53023, 0x27b50030, +0x2a03821, 0x27b30034, 0xc00178b, 0xafb30010, +0x3c010001, 0xac226f78, 0x511024, 0x21082, 0x5e1025, 0xae420050, 0x32c22000, 0x10400005, -0x2a03821, 0x3c020000, 0x24425b74, 0x1000000d, -0x511024, 0x3c040001, 0x24842f78, 0x3c050001, -0x24a5db0c, 0x3c060001, 0x24c6dcbc, 0xc53023, -0xc001751, 0xafb30010, 0x3c010001, 0xac223ec0, +0x2a03821, 0x3c020000, 0x24425c5c, 0x1000000d, +0x511024, 0x3c040001, 0x24845f68, 0x3c050001, +0x24a5e494, 0x3c060001, 0x24c6e644, 0xc53023, +0xc00178b, 0xafb30010, 0x3c010001, 0xac226f90, 0x511024, 0x21082, 0x5e1025, 0xae420048, 0x32c24000, 0x10400005, 0x27a70030, 0x3c020000, -0x24425b74, 0x1000000e, 0x21100, 0x3c040001, -0x24842f90, 0x3c050001, 0x24a5dcc4, 0x3c060001, -0x24c6de1c, 0xc53023, 0x27a20034, 0xc001751, -0xafa20010, 0x3c010001, 0xac223eb4, 0x21100, +0x24425c5c, 0x1000000e, 0x21100, 0x3c040001, +0x24845f80, 0x3c050001, 0x24a5e64c, 0x3c060001, +0x24c6e7a4, 0xc53023, 0x27a20034, 0xc00178b, +0xafa20010, 0x3c010001, 0xac226f84, 0x21100, 0x21182, 0x3c030800, 0x431025, 0xae420060, -0x3c040001, 0x24842fa8, 0x3c050000, 0x24a57c80, -0x3c060001, 0x24c680a4, 0xc53023, 0x27b10030, -0x2203821, 0x27b30034, 0xc001751, 0xafb30010, -0x3c1e0fff, 0x37deffff, 0x3c040001, 0x24842fb4, -0x3c050000, 0x24a56318, 0x3c060000, 0x24c6645c, -0xc53023, 0x2203821, 0x3c010001, 0xac223e88, +0x3c040001, 0x24845f98, 0x3c050001, 0x24a581d0, +0x3c060001, 0x24c685f0, 0xc53023, 0x27b10030, +0x2203821, 0x27b30034, 0xc00178b, 0xafb30010, +0x3c1e0fff, 0x37deffff, 0x3c040001, 0x24845fa4, +0x3c050000, 0x24a56408, 0x3c060000, 0x24c66528, +0xc53023, 0x2203821, 0x3c010001, 0xac226f58, 0x5e1024, 0x21082, 0x3c150800, 0x551025, -0xae4200b8, 0xc001751, 0xafb30010, 0x3c040001, -0x24842fc0, 0x3c050000, 0x24a56464, 0x3c060000, -0x24c666dc, 0xc53023, 0x2203821, 0x3c010001, -0xac223e7c, 0x5e1024, 0x21082, 0x551025, -0xae4200e8, 0xc001751, 0xafb30010, 0x3c040001, -0x24842fd8, 0x3c050000, 0x24a566e4, 0x3c060000, -0x24c66814, 0xc53023, 0x2203821, 0x3c010001, -0xac223e74, 0x5e1024, 0x21082, 0x551025, -0xae4200c0, 0xc001751, 0xafb30010, 0x3c040001, -0x24842ff0, 0x3c050001, 0x24a5efb0, 0x3c060001, -0x24c6f088, 0xc53023, 0x2203821, 0x3c010001, -0xac223e80, 0x5e1024, 0x21082, 0x551025, -0xae4200c8, 0xc001751, 0xafb30010, 0x3c040001, -0x24842ffc, 0x3c050001, 0x24a529f0, 0x3c060001, -0x24c62a78, 0xc53023, 0x2203821, 0xaf420110, -0xc001751, 0xafb30010, 0x3c040001, 0x2484300c, -0x3c050001, 0x24a52a80, 0x3c060001, 0x24c62aac, -0xc53023, 0x2203821, 0xaf420114, 0xc001751, -0xafb30010, 0x3c040001, 0x24843018, 0x3c050001, -0x24a5e820, 0x3c060001, 0x24c6ec24, 0xc53023, -0x2203821, 0xaf420118, 0xc001751, 0xafb30010, -0x3c010001, 0xac223ec4, 0x5e1024, 0x21082, -0x551025, 0xc003cfb, 0xae4200d0, 0xc0039b4, -0x0, 0xc002628, 0x0, 0xac000228, +0xae4200b8, 0xc00178b, 0xafb30010, 0x3c040001, +0x24845fb0, 0x3c050000, 0x24a56530, 0x3c060000, +0x24c667a8, 0xc53023, 0x2203821, 0x3c010001, +0xac226f4c, 0x5e1024, 0x21082, 0x551025, +0xae4200e8, 0xc00178b, 0xafb30010, 0x3c040001, +0x24845fc8, 0x3c050000, 0x24a567b0, 0x3c060000, +0x24c668e0, 0xc53023, 0x2203821, 0x3c010001, +0xac226f44, 0x5e1024, 0x21082, 0x551025, +0xae4200c0, 0xc00178b, 0xafb30010, 0x3c040001, +0x24845fe0, 0x3c050001, 0x24a5fa30, 0x3c060001, +0x24c6fb08, 0xc53023, 0x2203821, 0x3c010001, +0xac226f50, 0x5e1024, 0x21082, 0x551025, +0xae4200c8, 0xc00178b, 0xafb30010, 0x3c040001, +0x24845fec, 0x3c050001, 0x24a5c8dc, 0x3c060001, +0x24c6c9c0, 0xc53023, 0x2203821, 0xaf420110, +0xc00178b, 0xafb30010, 0x3c040001, 0x24845ffc, +0x3c050001, 0x24a5c8b0, 0x3c060001, 0x24c6c8d4, +0xc53023, 0x2203821, 0xaf420124, 0xc00178b, +0xafb30010, 0x3c040001, 0x2484600c, 0x3c050001, +0x24a55b10, 0x3c060001, 0x24c65b3c, 0xc53023, +0x2203821, 0xaf420120, 0xaf420114, 0xc00178b, +0xafb30010, 0x3c040001, 0x24846018, 0x3c050001, +0x24a5f1f8, 0x3c060001, 0x24c6f614, 0xc53023, +0x2203821, 0xaf420118, 0xc00178b, 0xafb30010, +0x3c010001, 0xac226f94, 0x5e1024, 0x21082, +0x551025, 0xc003f9b, 0xae4200d0, 0xc003c18, +0x0, 0xc002784, 0x0, 0xac000228, 0xac00022c, 0x96e20450, 0x2442ffff, 0xaf420038, 0x96e20460, 0xaf420080, 0x32c24000, 0x14400003, 0x0, 0x96e20480, 0xaf420084, 0x96e70490, 0x50e00001, 0x24070800, 0x24e2ffff, 0xaf420088, 0xaf42007c, 0x24020800, 0x10e2000f, 0x32c24000, 0x10400003, 0x24020400, 0x10e2000b, 0x0, -0x240e0001, 0x3c040001, 0x24843028, 0xa3ae003f, +0x240e0001, 0x3c040001, 0x24846028, 0xa3ae003f, 0x96e60490, 0x24052170, 0x2c03821, 0xafa00010, -0xc0029bb, 0xafa00014, 0x8f43012c, 0x8f44012c, -0x24020001, 0xa34205b3, 0xaf430094, 0xaf440098, +0xc002b17, 0xafa00014, 0x8f430138, 0x8f440138, +0x24020001, 0xa34205c2, 0xaf430094, 0xaf440098, 0xafa00010, 0xafa00014, 0x8f460080, 0x8f470084, -0x3c040001, 0x24843034, 0xc0029bb, 0x24052200, -0xc002324, 0x3c110800, 0x3c1433d8, 0x3694cb58, -0x3c020800, 0x34420080, 0x3c040001, 0x24843040, -0x3c050000, 0x24a55bb8, 0x3c060000, 0x24c65bd4, +0x3c040001, 0x24846034, 0xc002b17, 0x24052200, +0xc002480, 0x3c110800, 0x3c1433d8, 0x3694cb58, +0x3c020800, 0x34420080, 0x3c040001, 0x24846040, +0x3c050000, 0x24a55ca0, 0x3c060000, 0x24c65cbc, 0xc53023, 0x27a70030, 0xaf820060, 0x2402ffff, -0xaf820064, 0x27a20034, 0xc001751, 0xafa20010, -0x3c010001, 0xac223e64, 0x21100, 0x21182, -0x511025, 0xc0018a8, 0xae420000, 0x8f820240, +0xaf820064, 0x27a20034, 0xc00178b, 0xafa20010, +0x3c010001, 0xac226f34, 0x21100, 0x21182, +0x511025, 0xc0018e4, 0xae420000, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240, 0x3c020000, 0x24424034, 0xaf820244, 0xaf800240, 0x8f820060, 0x511024, 0x14400005, 0x3c030800, 0x8f820060, -0x431024, 0x1040fffd, 0x0, 0xc0039c1, +0x431024, 0x1040fffd, 0x0, 0xc003c25, 0x8821, 0x3c020100, 0xafa20020, 0x8f530018, 0x240200ff, 0x56620001, 0x26710001, 0x8c020228, -0x1622000e, 0x1330c0, 0x8f42032c, 0x24420001, -0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001, -0x24842d04, 0x3c050009, 0xafa00014, 0xafa20010, +0x1622000e, 0x1330c0, 0x8f42033c, 0x24420001, +0xaf42033c, 0x8f42033c, 0x8c020228, 0x3c040001, +0x24845cb4, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100, 0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, -0xc01821, 0x8f440168, 0x8f45016c, 0x1021, +0xc01821, 0x8f440178, 0x8f45017c, 0x1021, 0x24070004, 0xafa70010, 0xafb10014, 0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x1440000b, 0x24070008, 0x8f820120, 0xafa20010, 0x8f820124, 0x3c040001, -0x24842d0c, 0x3c050009, 0xafa20014, 0x8fa60020, -0x1000001c, 0x34a50200, 0x8f440150, 0x8f450154, +0x24845cbc, 0x3c050009, 0xafa20014, 0x8fa60020, +0x1000001c, 0x34a50200, 0x8f440160, 0x8f450164, 0x8f43000c, 0xaf510018, 0x8f860120, 0x24020010, 0xafa20010, 0xafb10014, 0xafa30018, 0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010, 0x0, -0x8f420330, 0x24420001, 0xaf420330, 0x8f420330, +0x8f420340, 0x24420001, 0xaf420340, 0x8f420340, 0x8f820120, 0xafa20010, 0x8f820124, 0x3c040001, -0x24842d14, 0x3c050009, 0xafa20014, 0x8fa60020, -0x34a50300, 0xc0029bb, 0x2603821, 0x8f4202d4, -0x24420001, 0xaf4202d4, 0x8f4202d4, 0x93a2003f, +0x24845cc4, 0x3c050009, 0xafa20014, 0x8fa60020, +0x34a50300, 0xc002b17, 0x2603821, 0x8f4202e4, +0x24420001, 0xaf4202e4, 0x8f4202e4, 0x93a2003f, 0x10400069, 0x3c020700, 0x34423000, 0xafa20028, 0x8f530018, 0x240200ff, 0x12620002, 0x8821, 0x26710001, 0x8c020228, 0x1622000e, 0x1330c0, -0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, -0x8c020228, 0x3c040001, 0x24842d04, 0x3c050009, +0x8f42033c, 0x24420001, 0xaf42033c, 0x8f42033c, +0x8c020228, 0x3c040001, 0x24845cb4, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60028, 0x1000003f, 0x34a50100, 0xd71021, 0x8fa30028, 0x8fa4002c, -0xac4304c0, 0xac4404c4, 0xc01821, 0x8f440168, -0x8f45016c, 0x1021, 0x24070004, 0xafa70010, +0xac4304c0, 0xac4404c4, 0xc01821, 0x8f440178, +0x8f45017c, 0x1021, 0x24070004, 0xafa70010, 0xafb10014, 0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x1440000b, 0x24070008, 0x8f820120, 0xafa20010, -0x8f820124, 0x3c040001, 0x24842d0c, 0x3c050009, +0x8f820124, 0x3c040001, 0x24845cbc, 0x3c050009, 0xafa20014, 0x8fa60028, 0x1000001c, 0x34a50200, -0x8f440150, 0x8f450154, 0x8f43000c, 0xaf510018, +0x8f440160, 0x8f450164, 0x8f43000c, 0xaf510018, 0x8f860120, 0x24020010, 0xafa20010, 0xafb10014, 0xafa30018, 0x8f42010c, 0x40f809, 0x24c6001c, -0x14400010, 0x0, 0x8f420330, 0x24420001, -0xaf420330, 0x8f420330, 0x8f820120, 0xafa20010, -0x8f820124, 0x3c040001, 0x24842d14, 0x3c050009, -0xafa20014, 0x8fa60028, 0x34a50300, 0xc0029bb, -0x2603821, 0x8f4202e0, 0x24420001, 0xaf4202e0, -0x8f4202e0, 0x3c040001, 0x24843050, 0xafa00010, -0xafa00014, 0x8fa60028, 0x24052300, 0xc0029bb, +0x14400010, 0x0, 0x8f420340, 0x24420001, +0xaf420340, 0x8f420340, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c040001, 0x24845cc4, 0x3c050009, +0xafa20014, 0x8fa60028, 0x34a50300, 0xc002b17, +0x2603821, 0x8f4202f0, 0x24420001, 0xaf4202f0, +0x8f4202f0, 0x3c040001, 0x24846050, 0xafa00010, +0xafa00014, 0x8fa60028, 0x24052300, 0xc002b17, 0x3821, 0x10000004, 0x0, 0x8c020264, 0x10400005, 0x0, 0x8f8200a0, 0x30420004, 0x1440fffa, 0x0, 0x8f820044, 0x34420004, -0xaf820044, 0x8f4202f8, 0x24420001, 0xaf4202f8, -0x8f4202f8, 0x8f8200d8, 0x8f8300d4, 0x431023, +0xaf820044, 0x8f420308, 0x24420001, 0xaf420308, +0x8f420308, 0x8f8200d8, 0x8f8300d4, 0x431023, 0x2442ff80, 0xaf420090, 0x8f420090, 0x2842ff81, -0x10400006, 0x24020001, 0x8f420090, 0x8f430138, +0x10400006, 0x24020001, 0x8f420090, 0x8f430144, 0x431021, 0xaf420090, 0x24020001, 0xaf42008c, 0x32c20008, 0x10400006, 0x0, 0x8f820214, 0x3c038100, 0x3042ffff, 0x431025, 0xaf820214, -0x3c020001, 0x8c423d84, 0x30420001, 0x10400009, -0x0, 0x3c040001, 0x2484305c, 0x3c050000, -0x24a56c24, 0x3c060000, 0x24c670cc, 0x10000008, -0xc53023, 0x3c040001, 0x2484306c, 0x3c050000, -0x24a5681c, 0x3c060000, 0x24c66c1c, 0xc53023, -0x27a70030, 0x27a20034, 0xc001751, 0xafa20010, -0x3c010001, 0xac223e78, 0x3c020001, 0x8c423e78, -0x3c030800, 0x21100, 0x21182, 0x431025, -0xae420040, 0x8f8200a0, 0xafa20010, 0x8f8200b0, -0xafa20014, 0x8f86005c, 0x8f87011c, 0x3c040001, -0x2484307c, 0x3c010001, 0xac363e50, 0x3c010001, -0xac203e40, 0x3c010001, 0xac3c3e38, 0x3c010001, -0xac3b3e68, 0x3c010001, 0xac373e6c, 0x3c010001, -0xac3a3e4c, 0xc0029bb, 0x24052400, 0x8f820200, -0xafa20010, 0x8f820220, 0xafa20014, 0x8f860044, -0x8f870050, 0x3c040001, 0x24843088, 0xc0029bb, -0x24052500, 0x8f830060, 0x74100b, 0x242000a, -0x200f821, 0x0, 0xd, 0x8fbf0058, -0x8fbe0054, 0x8fb50050, 0x8fb3004c, 0x8fb20048, -0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0060, -0x27bdffe0, 0x3c040001, 0x24843094, 0x24052600, -0x3021, 0x3821, 0xafbf0018, 0xafa00010, -0xc0029bb, 0xafa00014, 0x8fbf0018, 0x3e00008, -0x27bd0020, 0x3e00008, 0x0, 0x3e00008, -0x0, 0x0, 0x0, 0x0, -0x0, 0x0, 0x3e00008, 0x0, -0x3e00008, 0x0, 0x27bdfde0, 0x27a50018, -0x3c04dead, 0x3484beef, 0xafbf0218, 0x8f820150, -0x3c03001f, 0x3463ffff, 0xafa40018, 0xa22823, -0xa32824, 0x8ca20000, 0x1044000a, 0x0, -0xafa50010, 0x8ca20000, 0xafa20014, 0x8f860150, -0x8f870250, 0x3c040001, 0x2484309c, 0xc0029bb, -0x24052700, 0x8fbf0218, 0x3e00008, 0x27bd0220, -0x27bdffe0, 0x3c06abba, 0x34c6babe, 0xafb00018, -0x3c100004, 0x3c07007f, 0x34e7ffff, 0xafbf001c, -0x102840, 0x8e040000, 0x8ca30000, 0xaca00000, -0xae060000, 0x8ca20000, 0xaca30000, 0x10460005, -0xae040000, 0xa08021, 0xf0102b, 0x1040fff5, -0x102840, 0x3c040001, 0x248430a8, 0x24052800, -0x2003021, 0x3821, 0xafa00010, 0xc0029bb, -0xafa00014, 0x2001021, 0x8fbf001c, 0x8fb00018, -0x3e00008, 0x27bd0020, 0x8c020224, 0x3047003f, -0x10e00010, 0x803021, 0x2821, 0x24030020, -0xe31024, 0x10400002, 0x63042, 0xa62821, -0x31842, 0x1460fffb, 0xe31024, 0x2402f000, -0xa22824, 0x3402ffff, 0x45102b, 0x14400003, -0x3c020001, 0x10000008, 0x3c020001, 0x3442ffff, -0x851823, 0x43102b, 0x14400003, 0xa01021, -0x3c02fffe, 0x821021, 0x3e00008, 0x0, -0x27bdffd0, 0xafb50028, 0x8fb50040, 0xafb20020, -0xa09021, 0xafb1001c, 0x24c60003, 0xafbf002c, -0xafb30024, 0xafb00018, 0x8ea20000, 0x2403fffc, -0xc38024, 0x50102b, 0x1440001b, 0xe08821, -0x8e330000, 0xafb00010, 0x8ea20000, 0xafa20014, -0x8e270000, 0x24053000, 0xc0029bb, 0x2403021, -0x8e230000, 0x702021, 0x64102b, 0x10400007, -0x2402821, 0x8ca20000, 0xac620000, 0x24630004, -0x64102b, 0x1440fffb, 0x24a50004, 0x8ea20000, -0x501023, 0xaea20000, 0x8e220000, 0x501021, -0x1000000b, 0xae220000, 0x2402002d, 0xa0820000, -0xafb00010, 0x8ea20000, 0x2409821, 0xafa20014, -0x8e270000, 0x24053100, 0xc0029bb, 0x2603021, -0x2601021, 0x8fbf002c, 0x8fb50028, 0x8fb30024, -0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, -0x27bd0030, 0x27bdffe8, 0x3c1cc000, 0x3c05fffe, -0x3c030001, 0x8c633e30, 0x3c040001, 0x8c843e3c, -0x34a5bf08, 0x24021ffc, 0x3c010001, 0xac223cd0, -0x3c0200c0, 0x3c010001, 0xac223cd4, 0x3c020020, -0xafbf0010, 0x3c0100c0, 0xac201ffc, 0x431023, -0x441023, 0x245bb000, 0x365b821, 0x3c1d0001, -0x8fbd3ccc, 0x3a0f021, 0x3c0400c0, 0x34840200, -0x3c1a00c0, 0x3c0300c0, 0x346307b8, 0x24021dfc, -0x3c010001, 0xac223cd0, 0x24021844, 0x3c010001, -0xac243cd4, 0x3c010001, 0xac223cd0, 0x3c010001, -0xac233cd4, 0xc0017bb, 0x375a0200, 0x8fbf0010, -0x3e00008, 0x27bd0018, 0x27bdffc8, 0x3c040001, -0x248430b4, 0x24053200, 0x3c020001, 0x8c423cd0, -0x3c030001, 0x8c633cd4, 0x3021, 0x3603821, -0xafbf0030, 0xafb3002c, 0xafb20028, 0xafb10024, -0xafb00020, 0xafa2001c, 0xafa30018, 0xafb70010, -0xc0029bb, 0xafba0014, 0xc0018c2, 0x0, -0x8f820240, 0x34420004, 0xaf820240, 0x24020001, -0xaf420000, 0x3c020001, 0x571021, 0x904240f4, -0x10400092, 0x2403fffc, 0x3c100001, 0x2610a673, -0x3c120001, 0x2652a24c, 0x2121023, 0x438024, -0x8fa3001c, 0x3c040001, 0x248430c0, 0x70102b, -0x1440001a, 0x27b30018, 0x8fb10018, 0x24053000, -0x2403021, 0xafb00010, 0xafa30014, 0xc0029bb, -0x2203821, 0x8fa30018, 0x702021, 0x64102b, -0x10400007, 0x2403021, 0x8cc20000, 0xac620000, -0x24630004, 0x64102b, 0x1440fffb, 0x24c60004, -0x8fa2001c, 0x501023, 0xafa2001c, 0x8e620000, -0x501021, 0x1000000a, 0xae620000, 0x2408821, -0x24053100, 0xafb00010, 0xafa30014, 0x8fa70018, -0x2203021, 0x2402002d, 0xc0029bb, 0xa0820000, -0x24070020, 0x8fa3001c, 0x3c040001, 0x248430dc, -0x24120020, 0x3c010001, 0xac313e5c, 0x2c620020, -0x1440001d, 0x27b10018, 0x8fb00018, 0x24053000, -0x3c060001, 0x24c63ef0, 0xafa70010, 0xafa30014, -0xc0029bb, 0x2003821, 0x8fa30018, 0x3c040001, -0x24843ef0, 0x24650020, 0x65102b, 0x10400007, -0x0, 0x8c820000, 0xac620000, 0x24630004, -0x65102b, 0x1440fffb, 0x24840004, 0x8fa2001c, -0x521023, 0xafa2001c, 0x8e220000, 0x521021, -0x1000000b, 0xae220000, 0x3c100001, 0x26103ef0, -0x24053100, 0xafa70010, 0xafa30014, 0x8fa70018, -0x2003021, 0x2402002d, 0xc0029bb, 0xa0820000, -0x24070020, 0x3c040001, 0x248430f0, 0x8fa3001c, -0x24120020, 0x3c010001, 0xac303e90, 0x2c620020, -0x1440001d, 0x27b10018, 0x8fb00018, 0x24053000, -0x3c060001, 0x24c63f10, 0xafa70010, 0xafa30014, -0xc0029bb, 0x2003821, 0x8fa30018, 0x3c040001, -0x24843f10, 0x24650020, 0x65102b, 0x10400007, -0x0, 0x8c820000, 0xac620000, 0x24630004, -0x65102b, 0x1440fffb, 0x24840004, 0x8fa2001c, -0x521023, 0xafa2001c, 0x8e220000, 0x521021, -0x1000000b, 0xae220000, 0x3c100001, 0x26103f10, -0x24053100, 0xafa70010, 0xafa30014, 0x8fa70018, -0x2003021, 0x2402002d, 0xc0029bb, 0xa0820000, -0x3c010001, 0x10000031, 0xac303e8c, 0x3c100000, -0x26107c73, 0x3c120000, 0x26527af0, 0x2121023, -0x438024, 0x8fa3001c, 0x3c040001, 0x24843104, -0x70102b, 0x1440001a, 0x27b30018, 0x8fb10018, -0x24053000, 0x2403021, 0xafb00010, 0xafa30014, -0xc0029bb, 0x2203821, 0x8fa30018, 0x702021, -0x64102b, 0x10400007, 0x2403021, 0x8cc20000, +0x3c030001, 0x8c636e14, 0x30620002, 0x10400009, +0x30620001, 0x3c040001, 0x2484605c, 0x3c050000, +0x24a56cf0, 0x3c060000, 0x24c67168, 0x10000012, +0xc53023, 0x10400009, 0x0, 0x3c040001, +0x2484606c, 0x3c050000, 0x24a57170, 0x3c060000, +0x24c67618, 0x10000008, 0xc53023, 0x3c040001, +0x2484607c, 0x3c050000, 0x24a568e8, 0x3c060000, +0x24c66ce8, 0xc53023, 0x27a70030, 0x27a20034, +0xc00178b, 0xafa20010, 0x3c010001, 0xac226f48, +0x3c020001, 0x8c426f48, 0x3c030800, 0x21100, +0x21182, 0x431025, 0xae420040, 0x8f8200a0, +0xafa20010, 0x8f8200b0, 0xafa20014, 0x8f86005c, +0x8f87011c, 0x3c040001, 0x2484608c, 0x3c010001, +0xac366f20, 0x3c010001, 0xac206f10, 0x3c010001, +0xac3c6f08, 0x3c010001, 0xac3b6f38, 0x3c010001, +0xac376f3c, 0x3c010001, 0xac3a6f1c, 0xc002b17, +0x24052400, 0x8f820200, 0xafa20010, 0x8f820220, +0xafa20014, 0x8f860044, 0x8f870050, 0x3c040001, +0x24846098, 0xc002b17, 0x24052500, 0x8f830060, +0x74100b, 0x242000a, 0x200f821, 0x0, +0xd, 0x8fbf0058, 0x8fbe0054, 0x8fb50050, +0x8fb3004c, 0x8fb20048, 0x8fb10044, 0x8fb00040, +0x3e00008, 0x27bd0060, 0x27bdffe0, 0x3c040001, +0x248460a4, 0x24052600, 0x3021, 0x3821, +0xafbf0018, 0xafa00010, 0xc002b17, 0xafa00014, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x3e00008, +0x0, 0x3e00008, 0x0, 0x0, +0x0, 0x0, 0x0, 0x0, +0x3e00008, 0x0, 0x3e00008, 0x0, +0x27bdfde0, 0x27a50018, 0x3c04dead, 0x3484beef, +0xafbf0218, 0x8f820150, 0x3c03001f, 0x3463ffff, +0xafa40018, 0xa22823, 0xa32824, 0x8ca20000, +0x1044000a, 0x0, 0xafa50010, 0x8ca20000, +0xafa20014, 0x8f860150, 0x8f870250, 0x3c040001, +0x248460ac, 0xc002b17, 0x24052700, 0x8fbf0218, +0x3e00008, 0x27bd0220, 0x27bdffe0, 0x3c06abba, +0x34c6babe, 0xafb00018, 0x3c100004, 0x3c07007f, +0x34e7ffff, 0xafbf001c, 0x102840, 0x8e040000, +0x8ca30000, 0xaca00000, 0xae060000, 0x8ca20000, +0xaca30000, 0x10460005, 0xae040000, 0xa08021, +0xf0102b, 0x1040fff5, 0x102840, 0x3c040001, +0x248460b8, 0x24052800, 0x2003021, 0x3821, +0xafa00010, 0xc002b17, 0xafa00014, 0x2001021, +0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, +0x8c020224, 0x3047003f, 0x10e00010, 0x803021, +0x2821, 0x24030020, 0xe31024, 0x10400002, +0x63042, 0xa62821, 0x31842, 0x1460fffb, +0xe31024, 0x2402f000, 0xa22824, 0x3402ffff, +0x45102b, 0x14400003, 0x3c020001, 0x10000008, +0x3c020001, 0x3442ffff, 0x851823, 0x43102b, +0x14400003, 0xa01021, 0x3c02fffe, 0x821021, +0x3e00008, 0x0, 0x27bdffd0, 0xafb50028, +0x8fb50040, 0xafb20020, 0xa09021, 0xafb1001c, +0x24c60003, 0xafbf002c, 0xafb30024, 0xafb00018, +0x8ea20000, 0x2403fffc, 0xc38024, 0x50102b, +0x1440001b, 0xe08821, 0x8e330000, 0xafb00010, +0x8ea20000, 0xafa20014, 0x8e270000, 0x24053000, +0xc002b17, 0x2403021, 0x8e230000, 0x702021, +0x64102b, 0x10400007, 0x2402821, 0x8ca20000, 0xac620000, 0x24630004, 0x64102b, 0x1440fffb, -0x24c60004, 0x8fa2001c, 0x501023, 0xafa2001c, -0x8e620000, 0x501021, 0x1000000a, 0xae620000, -0x2408821, 0x24053100, 0xafb00010, 0xafa30014, -0x8fa70018, 0x2203021, 0x2402002d, 0xc0029bb, -0xa0820000, 0x3c010001, 0xac313e5c, 0x3c030001, -0x8c633e5c, 0x24020400, 0x60f809, 0xaf820070, -0x8fbf0030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, -0x8fb00020, 0x3e00008, 0x27bd0038, 0x8f820040, +0x24a50004, 0x8ea20000, 0x501023, 0xaea20000, +0x8e220000, 0x501021, 0x1000000b, 0xae220000, +0x2402002d, 0xa0820000, 0xafb00010, 0x8ea20000, +0x2409821, 0xafa20014, 0x8e270000, 0x24053100, +0xc002b17, 0x2603021, 0x2601021, 0x8fbf002c, +0x8fb50028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, +0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffe8, +0x3c1cc000, 0x3c05fffe, 0x3c030001, 0x8c636f00, +0x3c040001, 0x8c846f0c, 0x34a5bf08, 0x24021ffc, +0x3c010001, 0xac226d50, 0x3c0200c0, 0x3c010001, +0xac226d54, 0x3c020020, 0xafbf0010, 0x3c0100c0, +0xac201ffc, 0x431023, 0x441023, 0x245bb000, +0x365b821, 0x3c1d0001, 0x8fbd6d4c, 0x3a0f021, +0x3c0400c0, 0x34840200, 0x3c1a00c0, 0x3c0300c0, +0x346307c8, 0x24021dfc, 0x3c010001, 0xac226d50, +0x24021834, 0x3c010001, 0xac246d54, 0x3c010001, +0xac226d50, 0x3c010001, 0xac236d54, 0xc0017f5, +0x375a0200, 0x8fbf0010, 0x3e00008, 0x27bd0018, +0x27bdffc8, 0x3c040001, 0x248460c4, 0x24053200, +0x3c020001, 0x8c426d50, 0x3c030001, 0x8c636d54, +0x3021, 0x3603821, 0xafbf0030, 0xafb3002c, +0xafb20028, 0xafb10024, 0xafb00020, 0xafa2001c, +0xafa30018, 0xafb70010, 0xc002b17, 0xafba0014, +0xc0018fe, 0x0, 0x8f820240, 0x34420004, +0xaf820240, 0x24020001, 0xaf420000, 0x3c020001, +0x571021, 0x904240f4, 0x10400092, 0x2403fffc, +0x3c100001, 0x2610abe3, 0x3c120001, 0x2652a7bc, +0x2121023, 0x438024, 0x8fa3001c, 0x3c040001, +0x248460d0, 0x70102b, 0x1440001a, 0x27b30018, +0x8fb10018, 0x24053000, 0x2403021, 0xafb00010, +0xafa30014, 0xc002b17, 0x2203821, 0x8fa30018, +0x702021, 0x64102b, 0x10400007, 0x2403021, +0x8cc20000, 0xac620000, 0x24630004, 0x64102b, +0x1440fffb, 0x24c60004, 0x8fa2001c, 0x501023, +0xafa2001c, 0x8e620000, 0x501021, 0x1000000a, +0xae620000, 0x2408821, 0x24053100, 0xafb00010, +0xafa30014, 0x8fa70018, 0x2203021, 0x2402002d, +0xc002b17, 0xa0820000, 0x24070020, 0x8fa3001c, +0x3c040001, 0x248460ec, 0x24120020, 0x3c010001, +0xac316f2c, 0x2c620020, 0x1440001d, 0x27b10018, +0x8fb00018, 0x24053000, 0x3c060001, 0x24c66fd0, +0xafa70010, 0xafa30014, 0xc002b17, 0x2003821, +0x8fa30018, 0x3c040001, 0x24846fd0, 0x24650020, +0x65102b, 0x10400007, 0x0, 0x8c820000, +0xac620000, 0x24630004, 0x65102b, 0x1440fffb, +0x24840004, 0x8fa2001c, 0x521023, 0xafa2001c, +0x8e220000, 0x521021, 0x1000000b, 0xae220000, +0x3c100001, 0x26106fd0, 0x24053100, 0xafa70010, +0xafa30014, 0x8fa70018, 0x2003021, 0x2402002d, +0xc002b17, 0xa0820000, 0x24070020, 0x3c040001, +0x24846100, 0x8fa3001c, 0x24120020, 0x3c010001, +0xac306f60, 0x2c620020, 0x1440001d, 0x27b10018, +0x8fb00018, 0x24053000, 0x3c060001, 0x24c66ff0, +0xafa70010, 0xafa30014, 0xc002b17, 0x2003821, +0x8fa30018, 0x3c040001, 0x24846ff0, 0x24650020, +0x65102b, 0x10400007, 0x0, 0x8c820000, +0xac620000, 0x24630004, 0x65102b, 0x1440fffb, +0x24840004, 0x8fa2001c, 0x521023, 0xafa2001c, +0x8e220000, 0x521021, 0x1000000b, 0xae220000, +0x3c100001, 0x26106ff0, 0x24053100, 0xafa70010, +0xafa30014, 0x8fa70018, 0x2003021, 0x2402002d, +0xc002b17, 0xa0820000, 0x3c010001, 0x10000031, +0xac306f5c, 0x3c100001, 0x261081bf, 0x3c120001, +0x2652803c, 0x2121023, 0x438024, 0x8fa3001c, +0x3c040001, 0x24846114, 0x70102b, 0x1440001a, +0x27b30018, 0x8fb10018, 0x24053000, 0x2403021, +0xafb00010, 0xafa30014, 0xc002b17, 0x2203821, +0x8fa30018, 0x702021, 0x64102b, 0x10400007, +0x2403021, 0x8cc20000, 0xac620000, 0x24630004, +0x64102b, 0x1440fffb, 0x24c60004, 0x8fa2001c, +0x501023, 0xafa2001c, 0x8e620000, 0x501021, +0x1000000a, 0xae620000, 0x2408821, 0x24053100, +0xafb00010, 0xafa30014, 0x8fa70018, 0x2203021, +0x2402002d, 0xc002b17, 0xa0820000, 0x3c010001, +0xac316f2c, 0x3c030001, 0x8c636f2c, 0x24020400, +0x60f809, 0xaf820070, 0x8fbf0030, 0x8fb3002c, +0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008, +0x27bd0038, 0x0, 0x0, 0x8f820040, 0x3c03f000, 0x431024, 0x3c036000, 0x14430006, 0x0, 0x8f820050, 0x2403ff80, 0x431024, 0x34420055, 0xaf820050, 0x8f820054, 0x244203e8, 0xaf820058, 0x240201f4, 0xaf4200e0, 0x24020004, -0xaf4200e8, 0x24020002, 0xaf4001a0, 0xaf4000e4, +0xaf4200e8, 0x24020002, 0xaf4001b0, 0xaf4000e4, 0xaf4200dc, 0xaf4000d8, 0xaf4000d4, 0x3e00008, 0xaf4000d0, 0x8f820054, 0x24420005, 0x3e00008, 0xaf820078, 0x27bdffe8, 0xafbf0010, 0x8f820054, 0x244203e8, 0xaf820058, 0x3c020800, 0x2c21024, 0x10400004, 0x3c02f7ff, 0x3442ffff, 0x2c2b024, -0x36940040, 0x3c020001, 0x8c423d98, 0x10400020, -0x3c020200, 0x934305b1, 0x10600007, 0x282a025, -0xa34005b1, 0x8f820220, 0x3c0308ff, 0x3463fffb, -0x431024, 0xaf820220, 0x3c020001, 0x8c423ec8, -0x10400016, 0x3c020200, 0x3c020001, 0x8c423e14, -0x14400012, 0x3c020200, 0x3c020001, 0x8c423d84, -0x30420001, 0x1440000d, 0x3c020200, 0x8f830224, -0x3c020001, 0x8c425f8c, 0x10620008, 0x3c020200, -0xc003b0b, 0x0, 0x10000004, 0x3c020200, -0xc003e84, 0x0, 0x3c020200, 0x2c21024, -0x10400003, 0x0, 0xc001de0, 0x0, -0x8f4200d8, 0x8f4300dc, 0x24420001, 0xaf4200d8, -0x43102b, 0x14400003, 0x0, 0xaf4000d8, -0x36940080, 0x8c030238, 0x1060000c, 0x0, -0x8f4201a0, 0x244203e8, 0xaf4201a0, 0x43102b, -0x14400006, 0x0, 0x934205b6, 0x14400003, -0x0, 0xc001c35, 0x0, 0x8fbf0010, -0x3e00008, 0x27bd0018, 0x3e00008, 0x0, -0x27bdffd8, 0xafbf0020, 0x8f43002c, 0x8f420038, -0x10620059, 0x0, 0x3c020001, 0x571021, -0x904240f0, 0x10400026, 0x24070008, 0x8f440160, -0x8f450164, 0x8f48000c, 0x8f860120, 0x24020020, -0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, -0x40f809, 0x24c6001c, 0x14400011, 0x24020001, -0x3c010001, 0x370821, 0xa02240f0, 0x8f820124, -0xafa20010, 0x8f820128, 0x3c040001, 0x248431a8, -0xafa20014, 0x8f46002c, 0x8f870120, 0x3c050009, -0xc0029bb, 0x34a50900, 0x1000005c, 0x0, -0x8f4202f0, 0x24420001, 0xaf4202f0, 0x8f4202f0, -0x8f42002c, 0xa34005b2, 0x10000027, 0xaf420038, -0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c, -0x8f860120, 0x24020080, 0xafa20010, 0xafa30014, -0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, -0x14400011, 0x24020001, 0x3c010001, 0x370821, -0xa02240f1, 0x8f820124, 0xafa20010, 0x8f820128, -0x3c040001, 0x248431b4, 0xafa20014, 0x8f46002c, -0x8f870120, 0x3c050009, 0xc0029bb, 0x34a51100, -0x10000036, 0x0, 0x8f4202f0, 0x8f43002c, -0x24420001, 0xaf4202f0, 0x8f4202f0, 0x24020001, -0xa34205b2, 0xaf430038, 0x3c010001, 0x370821, -0xa02040f1, 0x3c010001, 0x370821, 0xa02040f0, -0x10000026, 0xaf400034, 0x934205b2, 0x1040001d, -0x0, 0xa34005b2, 0x8f820040, 0x30420001, -0x14400008, 0x2021, 0x8c030104, 0x24020001, -0x50620005, 0x24040001, 0x8c020264, 0x10400003, -0x801021, 0x24040001, 0x801021, 0x10400006, -0x0, 0x8f4202fc, 0x24420001, 0xaf4202fc, -0x10000008, 0x8f4202fc, 0x8f820044, 0x34420004, -0xaf820044, 0x8f4202f8, 0x24420001, 0xaf4202f8, -0x8f4202f8, 0x3c010001, 0x370821, 0xa02040f0, -0x3c010001, 0x370821, 0xa02040f1, 0x8f420000, -0x10400007, 0x0, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x3c03ff7f, 0x3463ffff, 0x431024, -0xaf820060, 0x8f420000, 0x10400003, 0x0, -0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf0020, -0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x27bdffd8, 0xafbf0020, 0x8f430044, 0x8f42007c, -0x10620029, 0x24070008, 0x8f440158, 0x8f45015c, -0x8f48000c, 0x8f860120, 0x24020040, 0xafa20010, +0x36940040, 0x3c020001, 0x8c426e28, 0x10400017, +0x3c020200, 0x3c030001, 0x8c636f98, 0x10600016, +0x282a025, 0x3c020001, 0x8c426ec4, 0x14400012, +0x3c020200, 0x3c020001, 0x8c426e14, 0x30420003, +0x1440000d, 0x3c020200, 0x8f830224, 0x3c020002, +0x8c42906c, 0x10620008, 0x3c020200, 0xc003d87, +0x0, 0x10000004, 0x3c020200, 0xc004161, +0x0, 0x3c020200, 0x2c21024, 0x10400003, +0x0, 0xc001f33, 0x0, 0x8f4200d8, +0x8f4300dc, 0x24420001, 0xaf4200d8, 0x43102b, +0x14400003, 0x0, 0xaf4000d8, 0x36940080, +0x8c030238, 0x1060000c, 0x0, 0x8f4201b0, +0x244203e8, 0xaf4201b0, 0x43102b, 0x14400006, +0x0, 0x934205c5, 0x14400003, 0x0, +0xc001d88, 0x0, 0x8fbf0010, 0x3e00008, +0x27bd0018, 0x3e00008, 0x0, 0x27bdffd8, +0xafbf0020, 0x8f43002c, 0x8f420038, 0x10620059, +0x0, 0x3c020001, 0x571021, 0x904240f0, +0x10400026, 0x24070008, 0x8f440170, 0x8f450174, +0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, -0x370821, 0xa02240f2, 0x8f820124, 0xafa20010, -0x8f820128, 0x3c040001, 0x248431bc, 0xafa20014, -0x8f460044, 0x8f870120, 0x3c050009, 0xc0029bb, -0x34a51300, 0x1000000f, 0x0, 0x8f4202f4, -0x24420001, 0xaf4202f4, 0x8f4202f4, 0x8f420044, -0xaf42007c, 0x3c010001, 0x370821, 0xa02040f2, -0x10000004, 0xaf400078, 0x3c010001, 0x370821, -0xa02040f2, 0x8f420000, 0x10400007, 0x0, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x3c03feff, -0x3463ffff, 0x431024, 0xaf820060, 0x8f420000, -0x10400003, 0x0, 0x10000002, 0xaf80004c, -0xaf800048, 0x8fbf0020, 0x3e00008, 0x27bd0028, -0x3e00008, 0x0, 0x3c020001, 0x8c423d98, -0x27bdffa8, 0xafbf0050, 0xafbe004c, 0xafb50048, -0xafb30044, 0xafb20040, 0xafb1003c, 0xafb00038, -0x104000d5, 0x8f900044, 0x8f4200d0, 0x24430001, -0x2842000b, 0x144000e4, 0xaf4300d0, 0x8f420004, -0x30420002, 0x1440009c, 0xaf4000d0, 0x8f420004, -0x3c030001, 0x8c633d88, 0x34420002, 0xaf420004, +0x370821, 0xa02240f0, 0x8f820124, 0xafa20010, +0x8f820128, 0x3c040001, 0x248461b8, 0xafa20014, +0x8f46002c, 0x8f870120, 0x3c050009, 0xc002b17, +0x34a50900, 0x1000005c, 0x0, 0x8f420300, +0x24420001, 0xaf420300, 0x8f420300, 0x8f42002c, +0xa34005c1, 0x10000027, 0xaf420038, 0x8f440170, +0x8f450174, 0x8f43002c, 0x8f48000c, 0x8f860120, +0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, +0x24020001, 0x3c010001, 0x370821, 0xa02240f1, +0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001, +0x248461c4, 0xafa20014, 0x8f46002c, 0x8f870120, +0x3c050009, 0xc002b17, 0x34a51100, 0x10000036, +0x0, 0x8f420300, 0x8f43002c, 0x24420001, +0xaf420300, 0x8f420300, 0x24020001, 0xa34205c1, +0xaf430038, 0x3c010001, 0x370821, 0xa02040f1, +0x3c010001, 0x370821, 0xa02040f0, 0x10000026, +0xaf400034, 0x934205c1, 0x1040001d, 0x0, +0xa34005c1, 0x8f820040, 0x30420001, 0x14400008, +0x2021, 0x8c030104, 0x24020001, 0x50620005, +0x24040001, 0x8c020264, 0x10400003, 0x801021, +0x24040001, 0x801021, 0x10400006, 0x0, +0x8f42030c, 0x24420001, 0xaf42030c, 0x10000008, +0x8f42030c, 0x8f820044, 0x34420004, 0xaf820044, +0x8f420308, 0x24420001, 0xaf420308, 0x8f420308, +0x3c010001, 0x370821, 0xa02040f0, 0x3c010001, +0x370821, 0xa02040f1, 0x8f420000, 0x10400007, +0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, +0x0, 0x10000005, 0x0, 0xaf800048, +0x8f820048, 0x1040fffd, 0x0, 0x8f820060, +0x3c03ff7f, 0x3463ffff, 0x431024, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x10000002, +0xaf80004c, 0xaf800048, 0x8fbf0020, 0x3e00008, +0x27bd0028, 0x3e00008, 0x0, 0x27bdffd8, +0xafbf0020, 0x8f430044, 0x8f42007c, 0x10620029, +0x24070008, 0x8f440168, 0x8f45016c, 0x8f48000c, +0x8f860120, 0x24020040, 0xafa20010, 0xafa30014, +0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x14400011, 0x24020001, 0x3c010001, 0x370821, +0xa02240f2, 0x8f820124, 0xafa20010, 0x8f820128, +0x3c040001, 0x248461cc, 0xafa20014, 0x8f460044, +0x8f870120, 0x3c050009, 0xc002b17, 0x34a51300, +0x1000000f, 0x0, 0x8f420304, 0x24420001, +0xaf420304, 0x8f420304, 0x8f420044, 0xaf42007c, +0x3c010001, 0x370821, 0xa02040f2, 0x10000004, +0xaf400078, 0x3c010001, 0x370821, 0xa02040f2, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x3c03feff, 0x3463ffff, +0x431024, 0xaf820060, 0x8f420000, 0x10400003, +0x0, 0x10000002, 0xaf80004c, 0xaf800048, +0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3e00008, +0x0, 0x3c020001, 0x8c426e28, 0x27bdffa8, +0xafbf0050, 0xafbe004c, 0xafb50048, 0xafb30044, +0xafb20040, 0xafb1003c, 0xafb00038, 0x104000d5, +0x8f900044, 0x8f4200d0, 0x24430001, 0x2842000b, +0x144000e4, 0xaf4300d0, 0x8f420004, 0x30420002, +0x1440009c, 0xaf4000d0, 0x8f420004, 0x3c030001, +0x8c636e18, 0x34420002, 0xaf420004, 0x24020001, +0x14620003, 0x3c020600, 0x10000002, 0x34423000, +0x34421000, 0xafa20020, 0x8f4a0018, 0xafaa0034, +0x27aa0020, 0xafaa002c, 0x8faa0034, 0x240200ff, +0x11420002, 0x1821, 0x25430001, 0x8c020228, +0x609821, 0x1662000e, 0x3c050009, 0x8f42033c, +0x24420001, 0xaf42033c, 0x8f42033c, 0x8c020228, +0x8fa70034, 0x3c040001, 0x2484619c, 0xafa00014, +0xafa20010, 0x8fa60020, 0x10000070, 0x34a50500, +0x8faa0034, 0xa38c0, 0xf71021, 0x8fa30020, +0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, +0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, +0x1040001b, 0xa821, 0xe09021, 0x265e04c0, +0x8f440178, 0x8f45017c, 0x2401821, 0x240a0004, +0xafaa0010, 0xafb30014, 0x8f48000c, 0x1021, +0x2fe3021, 0xafa80018, 0x8f48010c, 0x24070008, +0xa32821, 0xa3482b, 0x822021, 0x100f809, +0x892021, 0x54400006, 0x24150001, 0x8f820054, +0x2221023, 0x2c4203e9, 0x1440ffe9, 0x0, +0x32a200ff, 0x54400018, 0xaf530018, 0x8f420378, +0x24420001, 0xaf420378, 0x8f420378, 0x8f820120, +0x8faa002c, 0x8fa70034, 0xafa20010, 0x8f820124, +0x3c040001, 0x248461a8, 0xafa20014, 0x8d460000, +0x3c050009, 0x10000035, 0x34a50600, 0x8f420308, +0x24150001, 0x24420001, 0xaf420308, 0x8f420308, +0x1000001e, 0x32a200ff, 0x8f830054, 0x8f820054, +0x247103e8, 0x2221023, 0x2c4203e9, 0x10400016, +0xa821, 0x3c1e0020, 0x24120010, 0x8f42000c, +0x8f440160, 0x8f450164, 0x8f860120, 0xafb20010, +0xafb30014, 0x5e1025, 0xafa20018, 0x8f42010c, +0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3, +0x0, 0x8f820054, 0x2221023, 0x2c4203e9, +0x1440ffee, 0x0, 0x32a200ff, 0x14400011, +0x3c050009, 0x8f420378, 0x24420001, 0xaf420378, +0x8f420378, 0x8f820120, 0x8faa002c, 0x8fa70034, +0xafa20010, 0x8f820124, 0x3c040001, 0x248461b0, +0xafa20014, 0x8d460000, 0x34a50700, 0xc002b17, +0x0, 0x8f4202ec, 0x24420001, 0xaf4202ec, +0x8f4202ec, 0x8f420004, 0x30420001, 0x50400029, +0x36100040, 0x3c020400, 0x2c21024, 0x10400013, +0x2404ffdf, 0x8f420250, 0x8f430254, 0x8f4401b4, +0x14640006, 0x36100040, 0x8f420270, 0x8f430274, +0x8f4401b8, 0x10640007, 0x2402ffdf, 0x8f420250, +0x8f430254, 0x8f440270, 0x8f450274, 0x10000012, +0x3a100020, 0x1000002b, 0x2028024, 0x8f420250, +0x8f430254, 0x8f4501b4, 0x14650006, 0x2048024, +0x8f420270, 0x8f430274, 0x8f4401b8, 0x50640021, +0x36100040, 0x8f420250, 0x8f430254, 0x8f440270, +0x8f450274, 0x3a100040, 0xaf4301b4, 0x10000019, +0xaf4501b8, 0x8f4200d4, 0x24430001, 0x10000011, +0x28420033, 0x8f420004, 0x30420001, 0x10400009, +0x3c020400, 0x2c21024, 0x10400004, 0x2402ffdf, +0x2028024, 0x1000000b, 0x36100040, 0x10000009, +0x36100060, 0x8f4200d4, 0x36100040, 0x24430001, +0x284201f5, 0x14400003, 0xaf4300d4, 0xaf4000d4, +0x3a100020, 0xaf900044, 0x2402ff7f, 0x282a024, +0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, +0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008, +0x27bd0058, 0x3e00008, 0x0, 0x3c020001, +0x8c426e28, 0x27bdffb0, 0xafbf0048, 0xafbe0044, +0xafb50040, 0xafb3003c, 0xafb20038, 0xafb10034, +0x104000c7, 0xafb00030, 0x8f4200d0, 0x24430001, +0x2842000b, 0x144000da, 0xaf4300d0, 0x8f420004, +0x30420002, 0x14400097, 0xaf4000d0, 0x8f420004, +0x3c030001, 0x8c636e18, 0x34420002, 0xaf420004, 0x24020001, 0x14620003, 0x3c020600, 0x10000002, -0x34423000, 0x34421000, 0xafa20020, 0x8f4a0018, -0xafaa0034, 0x27aa0020, 0xafaa002c, 0x8faa0034, -0x240200ff, 0x11420002, 0x1821, 0x25430001, -0x8c020228, 0x609821, 0x1662000e, 0x3c050009, -0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, -0x8c020228, 0x8fa70034, 0x3c040001, 0x2484318c, -0xafa00014, 0xafa20010, 0x8fa60020, 0x10000070, -0x34a50500, 0x8faa0034, 0xa38c0, 0xf71021, +0x34423000, 0x34421000, 0xafa20020, 0x1821, +0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, +0xafaa002c, 0x27c30001, 0x8c020228, 0x609021, +0x1642000e, 0x1e38c0, 0x8f42033c, 0x24420001, +0xaf42033c, 0x8f42033c, 0x8c020228, 0x3c040001, +0x2484619c, 0x3c050009, 0xafa00014, 0xafa20010, +0x8fa60020, 0x1000006d, 0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, -0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, -0x2c4203e9, 0x1040001b, 0xa821, 0xe09021, -0x265e04c0, 0x8f440168, 0x8f45016c, 0x2401821, -0x240a0004, 0xafaa0010, 0xafb30014, 0x8f48000c, -0x1021, 0x2fe3021, 0xafa80018, 0x8f48010c, +0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, +0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, +0x263504c0, 0x8f440178, 0x8f45017c, 0x2201821, +0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, +0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, -0x100f809, 0x892021, 0x54400006, 0x24150001, -0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe9, -0x0, 0x32a200ff, 0x54400018, 0xaf530018, -0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, -0x8f820120, 0x8faa002c, 0x8fa70034, 0xafa20010, -0x8f820124, 0x3c040001, 0x24843198, 0xafa20014, -0x8d460000, 0x3c050009, 0x10000035, 0x34a50600, -0x8f4202f8, 0x24150001, 0x24420001, 0xaf4202f8, -0x8f4202f8, 0x1000001e, 0x32a200ff, 0x8f830054, -0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, -0x10400016, 0xa821, 0x3c1e0020, 0x24120010, -0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120, -0xafb20010, 0xafb30014, 0x5e1025, 0xafa20018, +0x100f809, 0x892021, 0x54400006, 0x24130001, +0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, +0x0, 0x326200ff, 0x54400017, 0xaf520018, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, +0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, +0x3c040001, 0x248461a8, 0x3c050009, 0xafa20014, +0x8d460000, 0x10000035, 0x34a50600, 0x8f420308, +0x24130001, 0x24420001, 0xaf420308, 0x8f420308, +0x1000001e, 0x326200ff, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x10400016, +0x9821, 0x3c150020, 0x24110010, 0x8f42000c, +0x8f440160, 0x8f450164, 0x8f860120, 0xafb10010, +0xafb20014, 0x551025, 0xafa20018, 0x8f42010c, +0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3, +0x0, 0x8f820054, 0x2021023, 0x2c4203e9, +0x1440ffee, 0x0, 0x326200ff, 0x14400011, +0x0, 0x8f420378, 0x24420001, 0xaf420378, +0x8f420378, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x248461b0, 0x3c050009, +0xafa20014, 0x8d460000, 0x34a50700, 0xc002b17, +0x3c03821, 0x8f4202ec, 0x24420001, 0xaf4202ec, +0x8f4202ec, 0x8f420004, 0x30420001, 0x10400018, +0x24040001, 0x8f420250, 0x8f430254, 0x8f4501b4, +0x3c010001, 0x14650006, 0xa0246d71, 0x8f420270, +0x8f430274, 0x8f4401b8, 0x10640021, 0x0, +0x8f420250, 0x8f430254, 0x3c040001, 0x90846d70, +0x8f460270, 0x8f470274, 0x38840001, 0xaf4301b4, +0xaf4701b8, 0x3c010001, 0x10000025, 0xa0246d70, +0x8f4200d4, 0x3c010001, 0xa0206d70, 0x24430001, +0x28420033, 0x1440001e, 0xaf4300d4, 0x3c020001, +0x90426d71, 0xaf4000d4, 0x10000017, 0x38420001, +0x8f420004, 0x30420001, 0x10400008, 0x0, +0xc00567e, 0x2021, 0x3c010001, 0xa0206d71, +0x3c010001, 0x1000000e, 0xa0206d70, 0x8f4200d4, +0x3c010001, 0xa0206d70, 0x24430001, 0x284201f5, +0x14400007, 0xaf4300d4, 0x3c020001, 0x90426d71, +0xaf4000d4, 0x421026, 0x3c010001, 0xa0226d71, +0x3c030001, 0x8c636e18, 0x24020002, 0x1462000c, +0x3c030002, 0x3c030001, 0x90636d71, 0x24020001, +0x5462001f, 0x2021, 0x3c020001, 0x90426d70, +0x1443001b, 0x24040005, 0x10000019, 0x24040006, +0x3c020002, 0x8c429074, 0x431024, 0x1040000b, +0x24020001, 0x3c030001, 0x90636d71, 0x54620010, +0x2021, 0x3c020001, 0x90426d70, 0x1443000c, +0x24040003, 0x1000000a, 0x24040004, 0x3c030001, +0x90636d71, 0x14620006, 0x2021, 0x3c020001, +0x90426d70, 0x24040001, 0x50440001, 0x24040002, +0xc00567e, 0x0, 0x2402ff7f, 0x282a024, +0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, +0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, +0x27bd0050, 0x3e00008, 0x0, 0x3c020001, +0x8c426e28, 0x27bdffb0, 0xafbf0048, 0xafbe0044, +0xafb50040, 0xafb3003c, 0xafb20038, 0xafb10034, +0x104000de, 0xafb00030, 0x8f4200d0, 0x3c040001, +0x8c846e18, 0x24430001, 0x2842000b, 0xaf4400e8, +0x144000fe, 0xaf4300d0, 0x8f420004, 0x30420002, +0x14400095, 0xaf4000d0, 0x8f420004, 0x34420002, +0xaf420004, 0x24020001, 0x14820003, 0x3c020600, +0x10000002, 0x34423000, 0x34421000, 0xafa20020, +0x1821, 0x8f5e0018, 0x27aa0020, 0x240200ff, +0x13c20002, 0xafaa002c, 0x27c30001, 0x8c020228, +0x609021, 0x1642000e, 0x1e38c0, 0x8f42033c, +0x24420001, 0xaf42033c, 0x8f42033c, 0x8c020228, +0x3c040001, 0x2484619c, 0x3c050009, 0xafa00014, +0xafa20010, 0x8fa60020, 0x1000006d, 0x34a50500, +0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, +0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, +0x2021023, 0x2c4203e9, 0x1040001b, 0x9821, +0xe08821, 0x263504c0, 0x8f440178, 0x8f45017c, +0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014, +0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, +0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, +0x822021, 0x100f809, 0x892021, 0x54400006, +0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, +0x1440ffe9, 0x0, 0x326200ff, 0x54400017, +0xaf520018, 0x8f420378, 0x24420001, 0xaf420378, +0x8f420378, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x248461a8, 0x3c050009, +0xafa20014, 0x8d460000, 0x10000035, 0x34a50600, +0x8f420308, 0x24130001, 0x24420001, 0xaf420308, +0x8f420308, 0x1000001e, 0x326200ff, 0x8f830054, +0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, +0x10400016, 0x9821, 0x3c150020, 0x24110010, +0x8f42000c, 0x8f440160, 0x8f450164, 0x8f860120, +0xafb10010, 0xafb20014, 0x551025, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, -0x1440ffe3, 0x0, 0x8f820054, 0x2221023, -0x2c4203e9, 0x1440ffee, 0x0, 0x32a200ff, -0x14400011, 0x3c050009, 0x8f420368, 0x24420001, -0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, -0x8fa70034, 0xafa20010, 0x8f820124, 0x3c040001, -0x248431a0, 0xafa20014, 0x8d460000, 0x34a50700, -0xc0029bb, 0x0, 0x8f4202dc, 0x24420001, -0xaf4202dc, 0x8f4202dc, 0x8f420004, 0x30420001, -0x50400029, 0x36100040, 0x3c020400, 0x2c21024, -0x10400013, 0x2404ffdf, 0x8f420240, 0x8f430244, -0x8f4401a4, 0x14640006, 0x36100040, 0x8f420260, -0x8f430264, 0x8f4401a8, 0x10640007, 0x2402ffdf, -0x8f420240, 0x8f430244, 0x8f440260, 0x8f450264, -0x10000012, 0x3a100020, 0x1000002b, 0x2028024, -0x8f420240, 0x8f430244, 0x8f4501a4, 0x14650006, -0x2048024, 0x8f420260, 0x8f430264, 0x8f4401a8, -0x50640021, 0x36100040, 0x8f420240, 0x8f430244, -0x8f440260, 0x8f450264, 0x3a100040, 0xaf4301a4, -0x10000019, 0xaf4501a8, 0x8f4200d4, 0x24430001, -0x10000011, 0x28420033, 0x8f420004, 0x30420001, -0x10400009, 0x3c020400, 0x2c21024, 0x10400004, -0x2402ffdf, 0x2028024, 0x1000000b, 0x36100040, -0x10000009, 0x36100060, 0x8f4200d4, 0x36100040, -0x24430001, 0x284201f5, 0x14400003, 0xaf4300d4, -0xaf4000d4, 0x3a100020, 0xaf900044, 0x2402ff7f, -0x282a024, 0x8fbf0050, 0x8fbe004c, 0x8fb50048, -0x8fb30044, 0x8fb20040, 0x8fb1003c, 0x8fb00038, -0x3e00008, 0x27bd0058, 0x3e00008, 0x0, -0x3c020001, 0x8c423d98, 0x27bdffb0, 0xafbf0048, -0xafbe0044, 0xafb50040, 0xafb3003c, 0xafb20038, -0xafb10034, 0x104000de, 0xafb00030, 0x8f4200d0, -0x3c040001, 0x8c843d88, 0x24430001, 0x2842000b, -0xaf4400e8, 0x144000fe, 0xaf4300d0, 0x8f420004, -0x30420002, 0x14400095, 0xaf4000d0, 0x8f420004, -0x34420002, 0xaf420004, 0x24020001, 0x14820003, -0x3c020600, 0x10000002, 0x34423000, 0x34421000, -0xafa20020, 0x1821, 0x8f5e0018, 0x27aa0020, -0x240200ff, 0x13c20002, 0xafaa002c, 0x27c30001, -0x8c020228, 0x609021, 0x1642000e, 0x1e38c0, -0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, -0x8c020228, 0x3c040001, 0x2484318c, 0x3c050009, -0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006d, -0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, -0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, -0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, -0x9821, 0xe08821, 0x263504c0, 0x8f440168, -0x8f45016c, 0x2201821, 0x240a0004, 0xafaa0010, -0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, -0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, -0xa3482b, 0x822021, 0x100f809, 0x892021, -0x54400006, 0x24130001, 0x8f820054, 0x2021023, -0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, -0x54400017, 0xaf520018, 0x8f420368, 0x24420001, -0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, -0xafa20010, 0x8f820124, 0x3c040001, 0x24843198, -0x3c050009, 0xafa20014, 0x8d460000, 0x10000035, -0x34a50600, 0x8f4202f8, 0x24130001, 0x24420001, -0xaf4202f8, 0x8f4202f8, 0x1000001e, 0x326200ff, +0x1440ffe3, 0x0, 0x8f820054, 0x2021023, +0x2c4203e9, 0x1440ffee, 0x0, 0x326200ff, +0x14400011, 0x0, 0x8f420378, 0x24420001, +0xaf420378, 0x8f420378, 0x8f820120, 0x8faa002c, +0xafa20010, 0x8f820124, 0x3c040001, 0x248461b0, +0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700, +0xc002b17, 0x3c03821, 0x8f4202ec, 0x24420001, +0xaf4202ec, 0x8f4202ec, 0x8f420004, 0x30420001, +0x10400033, 0x3c020400, 0x2c21024, 0x10400017, +0x0, 0x934205c0, 0x8f440250, 0x8f450254, +0x8f4301b4, 0x34420020, 0x14a30006, 0xa34205c0, +0x8f420270, 0x8f430274, 0x8f4401b8, 0x10640008, +0x0, 0x8f420250, 0x8f430254, 0x934405c0, +0x8f460270, 0x8f470274, 0x10000016, 0x38840040, +0x934205c0, 0x10000048, 0x304200bf, 0x934205c0, +0x8f440250, 0x8f450254, 0x8f4301b4, 0x304200bf, +0x14a30006, 0xa34205c0, 0x8f420270, 0x8f430274, +0x8f4401b8, 0x1064000b, 0x0, 0x8f420250, +0x8f430254, 0x934405c0, 0x8f460270, 0x8f470274, +0x38840020, 0xaf4301b4, 0xaf4701b8, 0x10000033, +0xa34405c0, 0x934205c0, 0x1000002f, 0x34420020, +0x934205c0, 0x8f4300d4, 0x34420020, 0xa34205c0, +0x24620001, 0x10000023, 0x28630033, 0x8f4200e4, +0x8f4300e0, 0x24420001, 0xaf4200e4, 0x43102a, +0x14400006, 0x24030001, 0x8f4200e8, 0x14430002, +0xaf4000e4, 0x24030004, 0xaf4300e8, 0x8f420004, +0x30420001, 0x1040000d, 0x3c020400, 0x2c21024, +0x10400007, 0x0, 0x934205c0, 0x34420040, +0xa34205c0, 0x934205c0, 0x1000000f, 0x304200df, +0x934205c0, 0x1000000c, 0x34420060, 0x934205c0, +0x8f4300d4, 0x34420020, 0xa34205c0, 0x24620001, +0x286300fb, 0x14600005, 0xaf4200d4, 0x934205c0, +0xaf4000d4, 0x38420040, 0xa34205c0, 0x934205c0, +0x8f4300e8, 0x3042007f, 0xa34205c0, 0x24020001, +0x14620005, 0x0, 0x934405c0, 0x42102, +0x10000003, 0x348400f0, 0x934405c0, 0x3484000f, +0xc005664, 0x0, 0x2402ff7f, 0x282a024, +0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, +0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, +0x27bd0050, 0x3e00008, 0x0, 0x27bdffb0, +0x274401c0, 0x26e30028, 0x24650400, 0x65102b, +0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c, +0xafb20038, 0xafb10034, 0x10400007, 0xafb00030, +0x8c820000, 0xac620000, 0x24630004, 0x65102b, +0x1440fffb, 0x24840004, 0x8c020080, 0xaee20044, +0x8c0200c0, 0xaee20040, 0x8c020084, 0xaee20030, +0x8c020084, 0xaee2023c, 0x8c020088, 0xaee20240, +0x8c02008c, 0xaee20244, 0x8c020090, 0xaee20248, +0x8c020094, 0xaee2024c, 0x8c020098, 0xaee20250, +0x8c02009c, 0xaee20254, 0x8c0200a0, 0xaee20258, +0x8c0200a4, 0xaee2025c, 0x8c0200a8, 0xaee20260, +0x8c0200ac, 0xaee20264, 0x8c0200b0, 0xaee20268, +0x8c0200b4, 0xaee2026c, 0x8c0200b8, 0xaee20270, +0x8c0200bc, 0x24040001, 0xaee20274, 0xaee00034, +0x41080, 0x571021, 0x8ee30034, 0x8c42023c, +0x24840001, 0x621821, 0x2c82000f, 0xaee30034, +0x1440fff8, 0x41080, 0x8c0200cc, 0xaee20048, +0x8c0200d0, 0xaee2004c, 0x8c0200e0, 0xaee201f8, +0x8c0200e4, 0xaee201fc, 0x8c0200e8, 0xaee20200, +0x8c0200ec, 0xaee20204, 0x8c0200f0, 0xaee20208, +0x8ee400c0, 0x8ee500c4, 0x8c0200fc, 0x45102b, +0x1040000b, 0x0, 0x8ee200c0, 0x8ee300c4, +0x24040001, 0x24050000, 0x651821, 0x65302b, +0x441021, 0x461021, 0xaee200c0, 0xaee300c4, +0x8c0200fc, 0x8ee400c0, 0x8ee500c4, 0x2408ffff, +0x24090000, 0x401821, 0x1021, 0x882024, +0xa92824, 0x822025, 0xa32825, 0xaee400c0, +0xaee500c4, 0x8ee400d0, 0x8ee500d4, 0x8c0200f4, +0x45102b, 0x1040000b, 0x0, 0x8ee200d0, +0x8ee300d4, 0x24040001, 0x24050000, 0x651821, +0x65302b, 0x441021, 0x461021, 0xaee200d0, +0xaee300d4, 0x8c0200f4, 0x8ee400d0, 0x8ee500d4, +0x401821, 0x1021, 0x882024, 0xa92824, +0x822025, 0xa32825, 0xaee400d0, 0xaee500d4, +0x8ee400c8, 0x8ee500cc, 0x8c0200f8, 0x45102b, +0x1040000b, 0x0, 0x8ee200c8, 0x8ee300cc, +0x24040001, 0x24050000, 0x651821, 0x65302b, +0x441021, 0x461021, 0xaee200c8, 0xaee300cc, +0x8c0200f8, 0x8ee400c8, 0x8ee500cc, 0x401821, +0x1021, 0x882024, 0xa92824, 0x822025, +0xa32825, 0x24020008, 0xaee400c8, 0xaee500cc, +0xafa20010, 0xafa00014, 0x8f42000c, 0x8c040208, +0x8c05020c, 0xafa20018, 0x8f42010c, 0x26e60028, +0x40f809, 0x24070400, 0x104000f0, 0x3c020400, +0xafa20020, 0x934205c6, 0x10400089, 0x1821, +0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, +0xafaa002c, 0x27c30001, 0x8c020228, 0x609021, +0x1642000e, 0x1e38c0, 0x8f42033c, 0x24420001, +0xaf42033c, 0x8f42033c, 0x8c020228, 0x3c040001, +0x2484619c, 0x3c050009, 0xafa00014, 0xafa20010, +0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, +0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, -0x2c4203e9, 0x10400016, 0x9821, 0x3c150020, -0x24110010, 0x8f42000c, 0x8f440150, 0x8f450154, -0x8f860120, 0xafb10010, 0xafb20014, 0x551025, +0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, +0x263504c0, 0x8f440178, 0x8f45017c, 0x2201821, +0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, +0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, +0x24070008, 0xa32821, 0xa3482b, 0x822021, +0x100f809, 0x892021, 0x54400006, 0x24130001, +0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, +0x0, 0x326200ff, 0x54400017, 0xaf520018, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, +0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, +0x3c040001, 0x248461a8, 0x3c050009, 0xafa20014, +0x8d460000, 0x10000033, 0x34a50600, 0x8f420308, +0x24130001, 0x24420001, 0xaf420308, 0x8f420308, +0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, +0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, +0x9821, 0x24110010, 0x8f42000c, 0x8f440160, +0x8f450164, 0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, -0x24c6001c, 0x1440ffe3, 0x0, 0x8f820054, -0x2021023, 0x2c4203e9, 0x1440ffee, 0x0, -0x326200ff, 0x14400011, 0x0, 0x8f420368, -0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, +0x2021023, 0x2c4203e9, 0x1440ffef, 0x0, +0x326200ff, 0x54400012, 0x24020001, 0x8f420378, +0x24420001, 0xaf420378, 0x8f420378, 0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, 0x3c040001, -0x248431a0, 0x3c050009, 0xafa20014, 0x8d460000, -0x34a50700, 0xc0029bb, 0x3c03821, 0x8f4202dc, -0x24420001, 0xaf4202dc, 0x8f4202dc, 0x8f420004, -0x30420001, 0x10400033, 0x3c020400, 0x2c21024, -0x10400017, 0x0, 0x934205b0, 0x8f440240, -0x8f450244, 0x8f4301a4, 0x34420020, 0x14a30006, -0xa34205b0, 0x8f420260, 0x8f430264, 0x8f4401a8, -0x10640008, 0x0, 0x8f420240, 0x8f430244, -0x934405b0, 0x8f460260, 0x8f470264, 0x10000016, -0x38840040, 0x934205b0, 0x10000048, 0x304200bf, -0x934205b0, 0x8f440240, 0x8f450244, 0x8f4301a4, -0x304200bf, 0x14a30006, 0xa34205b0, 0x8f420260, -0x8f430264, 0x8f4401a8, 0x1064000b, 0x0, -0x8f420240, 0x8f430244, 0x934405b0, 0x8f460260, -0x8f470264, 0x38840020, 0xaf4301a4, 0xaf4701a8, -0x10000033, 0xa34405b0, 0x934205b0, 0x1000002f, -0x34420020, 0x934205b0, 0x8f4300d4, 0x34420020, -0xa34205b0, 0x24620001, 0x10000023, 0x28630033, -0x8f4200e4, 0x8f4300e0, 0x24420001, 0xaf4200e4, -0x43102a, 0x14400006, 0x24030001, 0x8f4200e8, -0x14430002, 0xaf4000e4, 0x24030004, 0xaf4300e8, -0x8f420004, 0x30420001, 0x1040000d, 0x3c020400, -0x2c21024, 0x10400007, 0x0, 0x934205b0, -0x34420040, 0xa34205b0, 0x934205b0, 0x1000000f, -0x304200df, 0x934205b0, 0x1000000c, 0x34420060, -0x934205b0, 0x8f4300d4, 0x34420020, 0xa34205b0, -0x24620001, 0x286300fb, 0x14600005, 0xaf4200d4, -0x934205b0, 0xaf4000d4, 0x38420040, 0xa34205b0, -0x934205b0, 0x8f4300e8, 0x3042007f, 0xa34205b0, -0x24020001, 0x14620005, 0x0, 0x934405b0, -0x42102, 0x10000003, 0x348400f0, 0x934405b0, -0x3484000f, 0xc004a60, 0x0, 0x2402ff7f, -0x282a024, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, +0x248461b0, 0x3c050009, 0xafa20014, 0x8d460000, +0x34a50700, 0xc002b17, 0x3c03821, 0x1021, +0x1440005b, 0x24020001, 0x10000065, 0x0, +0x8f510018, 0x240200ff, 0x12220002, 0x8021, +0x26300001, 0x8c020228, 0x1602000e, 0x1130c0, +0x8f42033c, 0x24420001, 0xaf42033c, 0x8f42033c, +0x8c020228, 0x3c040001, 0x24846184, 0x3c050009, +0xafa00014, 0xafa20010, 0x8fa60020, 0x1000003f, +0x34a50100, 0xd71021, 0x8fa30020, 0x8fa40024, +0xac4304c0, 0xac4404c4, 0xc01821, 0x8f440178, +0x8f45017c, 0x1021, 0x24070004, 0xafa70010, +0xafb00014, 0x8f48000c, 0x24c604c0, 0x2e63021, +0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, +0xa3482b, 0x822021, 0x100f809, 0x892021, +0x1440000b, 0x24070008, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c040001, 0x2484618c, 0x3c050009, +0xafa20014, 0x8fa60020, 0x1000001c, 0x34a50200, +0x8f440160, 0x8f450164, 0x8f43000c, 0xaf500018, +0x8f860120, 0x24020010, 0xafa20010, 0xafb00014, +0xafa30018, 0x8f42010c, 0x40f809, 0x24c6001c, +0x54400011, 0x24020001, 0x8f420340, 0x24420001, +0xaf420340, 0x8f420340, 0x8f820120, 0xafa20010, +0x8f820124, 0x3c040001, 0x24846194, 0x3c050009, +0xafa20014, 0x8fa60020, 0x34a50300, 0xc002b17, +0x2203821, 0x1021, 0x1040000d, 0x24020001, +0x8f4202e8, 0xa34005c6, 0xaf4001b0, 0x24420001, +0xaf4202e8, 0x8f4202e8, 0x8ee20150, 0x24420001, +0xaee20150, 0x10000003, 0x8ee20150, 0x24020001, +0xa34205c6, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, -0x3e00008, 0x27bd0050, 0x3e00008, 0x0, -0x27bdffb0, 0x274401b0, 0x26e30028, 0x24650400, -0x65102b, 0xafbf0048, 0xafbe0044, 0xafb50040, -0xafb3003c, 0xafb20038, 0xafb10034, 0x10400007, -0xafb00030, 0x8c820000, 0xac620000, 0x24630004, -0x65102b, 0x1440fffb, 0x24840004, 0x8c020080, -0xaee20044, 0x8c0200c0, 0xaee20040, 0x8c020084, -0xaee20030, 0x8c020084, 0xaee2023c, 0x8c020088, -0xaee20240, 0x8c02008c, 0xaee20244, 0x8c020090, -0xaee20248, 0x8c020094, 0xaee2024c, 0x8c020098, -0xaee20250, 0x8c02009c, 0xaee20254, 0x8c0200a0, -0xaee20258, 0x8c0200a4, 0xaee2025c, 0x8c0200a8, -0xaee20260, 0x8c0200ac, 0xaee20264, 0x8c0200b0, -0xaee20268, 0x8c0200b4, 0xaee2026c, 0x8c0200b8, -0xaee20270, 0x8c0200bc, 0x24040001, 0xaee20274, -0xaee00034, 0x41080, 0x571021, 0x8ee30034, -0x8c42023c, 0x24840001, 0x621821, 0x2c82000f, -0xaee30034, 0x1440fff8, 0x41080, 0x8c0200cc, -0xaee20048, 0x8c0200d0, 0xaee2004c, 0x8c0200e0, -0xaee201f8, 0x8c0200e4, 0xaee201fc, 0x8c0200e8, -0xaee20200, 0x8c0200ec, 0xaee20204, 0x8c0200f0, -0xaee20208, 0x8ee400c0, 0x8ee500c4, 0x8c0200fc, -0x45102b, 0x1040000b, 0x0, 0x8ee200c0, -0x8ee300c4, 0x24040001, 0x24050000, 0x651821, -0x65302b, 0x441021, 0x461021, 0xaee200c0, -0xaee300c4, 0x8c0200fc, 0x8ee400c0, 0x8ee500c4, -0x2408ffff, 0x24090000, 0x401821, 0x1021, -0x882024, 0xa92824, 0x822025, 0xa32825, -0xaee400c0, 0xaee500c4, 0x8ee400d0, 0x8ee500d4, -0x8c0200f4, 0x45102b, 0x1040000b, 0x0, -0x8ee200d0, 0x8ee300d4, 0x24040001, 0x24050000, -0x651821, 0x65302b, 0x441021, 0x461021, -0xaee200d0, 0xaee300d4, 0x8c0200f4, 0x8ee400d0, -0x8ee500d4, 0x401821, 0x1021, 0x882024, -0xa92824, 0x822025, 0xa32825, 0xaee400d0, -0xaee500d4, 0x8ee400c8, 0x8ee500cc, 0x8c0200f8, -0x45102b, 0x1040000b, 0x0, 0x8ee200c8, -0x8ee300cc, 0x24040001, 0x24050000, 0x651821, -0x65302b, 0x441021, 0x461021, 0xaee200c8, -0xaee300cc, 0x8c0200f8, 0x8ee400c8, 0x8ee500cc, -0x401821, 0x1021, 0x882024, 0xa92824, -0x822025, 0xa32825, 0x24020008, 0xaee400c8, -0xaee500cc, 0xafa20010, 0xafa00014, 0x8f42000c, +0x3e00008, 0x27bd0050, 0x27bdffd8, 0xafbf0020, +0x8f8200b0, 0x30420004, 0x10400068, 0x0, +0x8f430128, 0x8f820104, 0x14620005, 0x0, +0x8f430130, 0x8f8200b4, 0x10620006, 0x0, +0x8f820104, 0xaf420128, 0x8f8200b4, 0x1000005b, +0xaf420130, 0x8f8200b0, 0x3c030080, 0x431024, +0x1040000d, 0x0, 0x8f82011c, 0x34420002, +0xaf82011c, 0x8f8200b0, 0x2403fffb, 0x431024, +0xaf8200b0, 0x8f82011c, 0x2403fffd, 0x431024, +0x1000004a, 0xaf82011c, 0x8f430128, 0x8f820104, +0x14620005, 0x0, 0x8f430130, 0x8f8200b4, +0x10620010, 0x0, 0x8f820104, 0xaf420128, +0x8f8200b4, 0x8f430128, 0xaf420130, 0xafa30010, +0x8f420130, 0x3c040001, 0x248461d4, 0xafa20014, +0x8f86011c, 0x8f8700b0, 0x3c050005, 0x10000031, +0x34a50900, 0x8f420128, 0xafa20010, 0x8f420130, +0x3c040001, 0x248461e0, 0xafa20014, 0x8f86011c, +0x8f8700b0, 0x3c050005, 0xc002b17, 0x34a51000, +0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, +0x8f8200b0, 0x34420001, 0xaf8200b0, 0x24020008, +0xaf830104, 0xafa20010, 0xafa00014, 0x8f42000c, 0x8c040208, 0x8c05020c, 0xafa20018, 0x8f42010c, -0x26e60028, 0x40f809, 0x24070400, 0x104000f0, -0x3c020400, 0xafa20020, 0x934205b7, 0x10400089, -0x1821, 0x8f5e0018, 0x27aa0020, 0x240200ff, -0x13c20002, 0xafaa002c, 0x27c30001, 0x8c020228, -0x609021, 0x1642000e, 0x1e38c0, 0x8f42032c, -0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, -0x3c040001, 0x2484318c, 0x3c050009, 0xafa00014, +0x26e60028, 0x40f809, 0x24070400, 0x8f82011c, +0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc, +0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f420128, +0xafa20010, 0x8f420130, 0x3c040001, 0x248461ec, +0xafa20014, 0x8f86011c, 0x8f8700b0, 0x3c050005, +0x34a51100, 0xc002b17, 0x0, 0x8f8200a0, +0x30420004, 0x10400069, 0x0, 0x8f43012c, +0x8f820124, 0x14620005, 0x0, 0x8f430134, +0x8f8200a4, 0x10620006, 0x0, 0x8f820124, +0xaf42012c, 0x8f8200a4, 0x1000005c, 0xaf420134, +0x8f8200a0, 0x3c030080, 0x431024, 0x1040000d, +0x0, 0x8f82011c, 0x34420002, 0xaf82011c, +0x8f8200a0, 0x2403fffb, 0x431024, 0xaf8200a0, +0x8f82011c, 0x2403fffd, 0x431024, 0x1000004b, +0xaf82011c, 0x8f43012c, 0x8f820124, 0x14620005, +0x0, 0x8f430134, 0x8f8200a4, 0x10620010, +0x0, 0x8f820124, 0xaf42012c, 0x8f8200a4, +0x8f43012c, 0xaf420134, 0xafa30010, 0x8f420134, +0x3c040001, 0x248461f8, 0xafa20014, 0x8f86011c, +0x8f8700a0, 0x3c050005, 0x10000032, 0x34a51200, +0x8f42012c, 0xafa20010, 0x8f420134, 0x3c040001, +0x24846204, 0xafa20014, 0x8f86011c, 0x8f8700a0, +0x3c050005, 0xc002b17, 0x34a51300, 0x8f82011c, +0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, +0x34420001, 0xaf8200a0, 0x24020080, 0xaf830124, +0xafa20010, 0xafa00014, 0x8f420014, 0x8c040208, +0x8c05020c, 0xafa20018, 0x8f420108, 0x3c060001, +0x24c66f54, 0x40f809, 0x24070004, 0x8f82011c, +0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc, +0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f42012c, +0xafa20010, 0x8f420134, 0x3c040001, 0x24846210, +0xafa20014, 0x8f86011c, 0x8f8700a0, 0x3c050005, +0x34a51400, 0xc002b17, 0x0, 0x8fbf0020, +0x3e00008, 0x27bd0028, 0x3c081000, 0x24070001, +0x3c060080, 0x3c050100, 0x8f820070, 0x481024, +0x1040fffd, 0x0, 0x8f820054, 0x24420005, +0xaf820078, 0x8c040234, 0x10800016, 0x1821, +0x3c020001, 0x571021, 0x8c4240e8, 0x24420005, +0x3c010001, 0x370821, 0xac2240e8, 0x3c020001, +0x571021, 0x8c4240e8, 0x44102b, 0x14400009, +0x0, 0x3c030080, 0x3c010001, 0x370821, +0xac2040e8, 0x3c010001, 0x370821, 0x1000000b, +0xa02740f0, 0x3c020001, 0x571021, 0x904240f0, +0x54400006, 0x661825, 0x3c020001, 0x571021, +0x904240f1, 0x54400001, 0x661825, 0x8c040230, +0x10800013, 0x0, 0x3c020001, 0x571021, +0x8c4240ec, 0x24420005, 0x3c010001, 0x370821, +0xac2240ec, 0x3c020001, 0x571021, 0x8c4240ec, +0x44102b, 0x14400006, 0x0, 0x3c010001, +0x370821, 0xac2040ec, 0x10000006, 0x651825, +0x3c020001, 0x571021, 0x904240f2, 0x54400001, +0x651825, 0x1060ffbc, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x431025, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x1000ffa7, 0xaf80004c, +0x1000ffa5, 0xaf800048, 0x3e00008, 0x0, +0x0, 0x0, 0x0, 0x27bdffe0, +0xafbf0018, 0x8f860064, 0x30c20004, 0x10400025, +0x24040004, 0x8c020114, 0xaf420020, 0xaf840064, +0x8f4202fc, 0x24420001, 0xaf4202fc, 0x8f4202fc, +0x8f820064, 0x30420004, 0x14400005, 0x0, +0x8c030114, 0x8f420020, 0x1462fff2, 0x0, +0x8f420000, 0x10400007, 0x8f43003c, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x431025, 0xaf820060, +0x8f420000, 0x10400073, 0x0, 0x1000006f, +0x0, 0x30c20008, 0x10400020, 0x24040008, +0x8c02011c, 0xaf420048, 0xaf840064, 0x8f4202a8, +0x24420001, 0xaf4202a8, 0x8f4202a8, 0x8f820064, +0x30420008, 0x14400005, 0x0, 0x8c03011c, +0x8f420048, 0x1462fff2, 0x0, 0x8f420000, +0x10400007, 0x0, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x1000ffd9, 0x34420200, 0x30c20020, +0x10400023, 0x24040020, 0x8c02012c, 0xaf420068, +0xaf840064, 0x8f4202d8, 0x24420001, 0xaf4202d8, +0x8f4202d8, 0x8f820064, 0x30420020, 0x14400005, +0x32c24000, 0x8c03012c, 0x8f420068, 0x1462fff2, +0x32c24000, 0x14400002, 0x3c020001, 0x2c2b025, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x1000ffb4, 0x34420800, +0x30c20010, 0x10400029, 0x24040010, 0x8c020124, +0xaf420058, 0xaf840064, 0x8f4202d4, 0x24420001, +0xaf4202d4, 0x8f4202d4, 0x8f820064, 0x30420010, +0x14400005, 0x32c22000, 0x8c030124, 0x8f420058, +0x1462fff2, 0x32c22000, 0x50400001, 0x36d68000, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x34420100, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x1000006c, +0xaf80004c, 0x1000006a, 0xaf800048, 0x30c20001, +0x10400004, 0x24020001, 0xaf820064, 0x10000064, +0x0, 0x30c20002, 0x1440000b, 0x3c050003, +0x3c040001, 0x248462d4, 0x34a50500, 0x3821, +0xafa00010, 0xc002b17, 0xafa00014, 0x2402ffc0, +0x10000057, 0xaf820064, 0x8c05022c, 0x8c02010c, +0x10a20048, 0x51080, 0x8c460300, 0x24a20001, +0x3045003f, 0x24020003, 0xac05022c, 0x61e02, +0x10620005, 0x24020010, 0x1062001d, 0x30c20fff, +0x10000039, 0x0, 0x8f4302a8, 0x8f440000, +0x30c20fff, 0xaf420048, 0x24630001, 0xaf4302a8, +0x10800007, 0x8f4202a8, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x34420200, 0xaf820060, 0x8f420000, +0x1040001f, 0x0, 0x1000001b, 0x0, +0xaf420058, 0x32c22000, 0x50400001, 0x36d68000, +0x8f4202d4, 0x8f430000, 0x24420001, 0xaf4202d4, +0x10600007, 0x8f4202d4, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x34420100, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x10000006, 0xaf80004c, +0x10000004, 0xaf800048, 0xc00217e, 0xc02021, +0x402821, 0x8c02010c, 0x14a20002, 0x24020002, +0xaf820064, 0x8f820064, 0x30420002, 0x14400004, +0x0, 0x8c02010c, 0x14a2ffac, 0x0, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x3e00008, +0x0, 0x27bdffa0, 0xafb00040, 0x808021, +0x101602, 0x2442ffff, 0x304300ff, 0x2c620013, +0xafbf0058, 0xafbe0054, 0xafb50050, 0xafb3004c, +0xafb20048, 0xafb10044, 0x104001ec, 0xafa50034, +0x31080, 0x3c010001, 0x220821, 0x8c226318, +0x400008, 0x0, 0x101302, 0x30440fff, +0x24020001, 0x10820005, 0x24020002, 0x1082000a, +0x2402fffe, 0x10000021, 0x3c050003, 0x8f430004, +0x3c020001, 0x8c426f80, 0xaf440200, 0xaf440204, +0x10000007, 0x34630001, 0x8f430004, 0xaf440200, +0xaf440204, 0x621824, 0x3c020001, 0x2442c9c8, +0x21100, 0x21182, 0xaf430004, 0x3c030800, +0x431025, 0x3c010000, 0xac224138, 0x8f840054, +0x41442, 0x41c82, 0x431021, 0x41cc2, +0x431023, 0x41d02, 0x431021, 0x41d42, +0x431023, 0x10000009, 0xaf420208, 0x3c040001, +0x248462e0, 0x34a51000, 0x2003021, 0x3821, +0xafa00010, 0xc002b17, 0xafa00014, 0x8f4202a0, +0x24420001, 0xaf4202a0, 0x1000021b, 0x8f4202a0, +0x27b00028, 0x2002021, 0x24050210, 0xc002b9b, +0x24060008, 0xc0024f4, 0x2002021, 0x10000212, +0x0, 0x8faa0034, 0x27a40028, 0xa1880, +0x25420001, 0x3042003f, 0xafa20034, 0x8c650300, +0x8faa0034, 0x21080, 0x8c430300, 0x25420001, +0x3042003f, 0xafa20034, 0xac02022c, 0xafa50028, +0xc0024f4, 0xafa3002c, 0x100001ff, 0x0, +0x27b00028, 0x2002021, 0x24050210, 0xc002b9b, +0x24060008, 0xc002633, 0x2002021, 0x100001f6, +0x0, 0x8faa0034, 0x27a40028, 0xa1880, +0x25420001, 0x3042003f, 0xafa20034, 0x8c650300, +0x8faa0034, 0x21080, 0x8c430300, 0x25420001, +0x3042003f, 0xafa20034, 0xac02022c, 0xafa50028, +0xc002633, 0xafa3002c, 0x100001e3, 0x0, +0x101302, 0x30430fff, 0x24020001, 0x10620005, +0x24020002, 0x1062001e, 0x3c020002, 0x10000033, +0x3c050003, 0x3c030002, 0x2c31024, 0x54400037, +0x2c3b025, 0x8f820228, 0x3c010001, 0x370821, +0xac2238d8, 0x8f82022c, 0x3c010001, 0x370821, +0xac2238dc, 0x8f820230, 0x3c010001, 0x370821, +0xac2238e0, 0x8f820234, 0x3c010001, 0x370821, +0xac2238e4, 0x2402ffff, 0xaf820228, 0xaf82022c, +0xaf820230, 0xaf820234, 0x10000020, 0x2c3b025, +0x2c21024, 0x10400012, 0x3c02fffd, 0x3c020001, +0x571021, 0x8c4238d8, 0xaf820228, 0x3c020001, +0x571021, 0x8c4238dc, 0xaf82022c, 0x3c020001, +0x571021, 0x8c4238e0, 0xaf820230, 0x3c020001, +0x571021, 0x8c4238e4, 0xaf820234, 0x3c02fffd, +0x3442ffff, 0x10000009, 0x2c2b024, 0x3c040001, +0x248462ec, 0x34a51100, 0x2003021, 0x3821, +0xafa00010, 0xc002b17, 0xafa00014, 0x8f4202cc, +0x24420001, 0xaf4202cc, 0x1000019b, 0x8f4202cc, +0x101302, 0x30450fff, 0x24020001, 0x10a20005, +0x24020002, 0x10a2000d, 0x3c0408ff, 0x10000014, +0x3c050003, 0x3c0208ff, 0x3442ffff, 0x8f830220, +0x3c040004, 0x2c4b025, 0x621824, 0x34630008, +0xaf830220, 0x10000012, 0xaf450298, 0x3484fff7, +0x3c03fffb, 0x8f820220, 0x3463ffff, 0x2c3b024, +0x441024, 0xaf820220, 0x10000009, 0xaf450298, +0x3c040001, 0x248462f8, 0x34a51200, 0x2003021, +0x3821, 0xafa00010, 0xc002b17, 0xafa00014, +0x8f4202bc, 0x24420001, 0xaf4202bc, 0x10000172, +0x8f4202bc, 0x27840208, 0x24050200, 0xc002b9b, +0x24060008, 0x27440224, 0x24050200, 0xc002b9b, +0x24060008, 0x8f4202c4, 0x24420001, 0xaf4202c4, +0x10000165, 0x8f4202c4, 0x101302, 0x30430fff, +0x24020001, 0x10620011, 0x28620002, 0x50400005, +0x24020002, 0x10600007, 0x0, 0x10000017, +0x0, 0x1062000f, 0x0, 0x10000013, +0x0, 0x8c060248, 0x2021, 0xc005134, +0x24050004, 0x10000007, 0x0, 0x8c060248, +0x2021, 0xc005134, 0x24050004, 0x10000010, +0x0, 0x8c06024c, 0x2021, 0xc005134, +0x24050001, 0x1000000a, 0x0, 0x3c040001, +0x24846304, 0x3c050003, 0x34a51300, 0x2003021, +0x3821, 0xafa00010, 0xc002b17, 0xafa00014, +0x8f4202c0, 0x24420001, 0xaf4202c0, 0x10000136, +0x8f4202c0, 0xc002407, 0x0, 0x10000132, +0x0, 0x24020001, 0xa34205c5, 0x24100100, +0x8f4401a8, 0x8f4501ac, 0xafb00010, 0xafa00014, +0x8f420014, 0xafa20018, 0x8f420108, 0x26e60028, +0x40f809, 0x24070400, 0x1040fff5, 0x0, +0x10000121, 0x0, 0x3c02ffff, 0x34427fff, +0x2c2b024, 0x1821, 0x3c020900, 0xaf400058, +0xaf40005c, 0xaf400060, 0xaf400064, 0xaf400360, +0xafa20020, 0x8f5e0018, 0x27aa0020, 0x240200ff, +0x13c20002, 0xafaa003c, 0x27c30001, 0x8c020228, +0x609021, 0x1642000e, 0x1e38c0, 0x8f42033c, +0x24420001, 0xaf42033c, 0x8f42033c, 0x8c020228, +0x3c040001, 0x2484629c, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, 0x9821, -0xe08821, 0x263504c0, 0x8f440168, 0x8f45016c, +0xe08821, 0x263504c0, 0x8f440178, 0x8f45017c, 0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x54400006, 0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, 0x54400017, -0xaf520018, 0x8f420368, 0x24420001, 0xaf420368, -0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010, -0x8f820124, 0x3c040001, 0x24843198, 0x3c050009, +0xaf520018, 0x8f420378, 0x24420001, 0xaf420378, +0x8f420378, 0x8f820120, 0x8faa003c, 0xafa20010, +0x8f820124, 0x3c040001, 0x248462a8, 0x3c050009, 0xafa20014, 0x8d460000, 0x10000033, 0x34a50600, -0x8f4202f8, 0x24130001, 0x24420001, 0xaf4202f8, -0x8f4202f8, 0x1000001c, 0x326200ff, 0x8f830054, +0x8f420308, 0x24130001, 0x24420001, 0xaf420308, +0x8f420308, 0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, 0x9821, 0x24110010, 0x8f42000c, -0x8f440150, 0x8f450154, 0x8f860120, 0xafb10010, +0x8f440160, 0x8f450164, 0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffef, -0x0, 0x326200ff, 0x54400012, 0x24020001, -0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, -0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, -0x3c040001, 0x248431a0, 0x3c050009, 0xafa20014, -0x8d460000, 0x34a50700, 0xc0029bb, 0x3c03821, -0x1021, 0x1440005b, 0x24020001, 0x10000065, -0x0, 0x8f510018, 0x240200ff, 0x12220002, +0x0, 0x326200ff, 0x14400011, 0x0, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, +0x8f820120, 0x8faa003c, 0xafa20010, 0x8f820124, +0x3c040001, 0x248462b0, 0x3c050009, 0xafa20014, +0x8d460000, 0x34a50700, 0xc002b17, 0x3c03821, +0x8f4202b0, 0x24420001, 0xaf4202b0, 0x8f4202b0, +0x8f4202f8, 0x24420001, 0xaf4202f8, 0x1000008a, +0x8f4202f8, 0x8c02025c, 0x27440224, 0xaf4201f0, +0x8c020260, 0x24050200, 0x24060008, 0xc002b9b, +0xaf4201f8, 0x8f820220, 0x30420008, 0x14400002, +0x24020001, 0x24020002, 0xaf420298, 0x8f4202ac, +0x24420001, 0xaf4202ac, 0x10000077, 0x8f4202ac, +0x3c0200ff, 0x3442ffff, 0x2021824, 0x32c20180, +0x14400006, 0x3402fffb, 0x43102b, 0x14400003, +0x0, 0x1000006c, 0xaf4300bc, 0x3c040001, +0x24846310, 0x3c050003, 0x34a51500, 0x2003021, +0x3821, 0xafa00010, 0xc002b17, 0xafa00014, +0x3c020700, 0x34421000, 0x101e02, 0x621825, +0xafa30020, 0x8f510018, 0x240200ff, 0x12220002, 0x8021, 0x26300001, 0x8c020228, 0x1602000e, -0x1130c0, 0x8f42032c, 0x24420001, 0xaf42032c, -0x8f42032c, 0x8c020228, 0x3c040001, 0x24843174, +0x1130c0, 0x8f42033c, 0x24420001, 0xaf42033c, +0x8f42033c, 0x8c020228, 0x3c040001, 0x24846284, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100, 0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0xc01821, -0x8f440168, 0x8f45016c, 0x1021, 0x24070004, +0x8f440178, 0x8f45017c, 0x1021, 0x24070004, 0xafa70010, 0xafb00014, 0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x1440000b, 0x24070008, 0x8f820120, -0xafa20010, 0x8f820124, 0x3c040001, 0x2484317c, +0xafa20010, 0x8f820124, 0x3c040001, 0x2484628c, 0x3c050009, 0xafa20014, 0x8fa60020, 0x1000001c, -0x34a50200, 0x8f440150, 0x8f450154, 0x8f43000c, +0x34a50200, 0x8f440160, 0x8f450164, 0x8f43000c, 0xaf500018, 0x8f860120, 0x24020010, 0xafa20010, 0xafb00014, 0xafa30018, 0x8f42010c, 0x40f809, -0x24c6001c, 0x54400011, 0x24020001, 0x8f420330, -0x24420001, 0xaf420330, 0x8f420330, 0x8f820120, -0xafa20010, 0x8f820124, 0x3c040001, 0x24843184, +0x24c6001c, 0x14400010, 0x0, 0x8f420340, +0x24420001, 0xaf420340, 0x8f420340, 0x8f820120, +0xafa20010, 0x8f820124, 0x3c040001, 0x24846294, 0x3c050009, 0xafa20014, 0x8fa60020, 0x34a50300, -0xc0029bb, 0x2203821, 0x1021, 0x1040000d, -0x24020001, 0x8f4202d8, 0xa34005b7, 0xaf4001a0, -0x24420001, 0xaf4202d8, 0x8f4202d8, 0x8ee20150, -0x24420001, 0xaee20150, 0x10000003, 0x8ee20150, -0x24020001, 0xa34205b7, 0x8fbf0048, 0x8fbe0044, -0x8fb50040, 0x8fb3003c, 0x8fb20038, 0x8fb10034, -0x8fb00030, 0x3e00008, 0x27bd0050, 0x27bdffd8, -0xafbf0020, 0x8f8200b0, 0x30420004, 0x10400068, -0x0, 0x8f43011c, 0x8f820104, 0x14620005, -0x0, 0x8f430124, 0x8f8200b4, 0x10620006, -0x0, 0x8f820104, 0xaf42011c, 0x8f8200b4, -0x1000005b, 0xaf420124, 0x8f8200b0, 0x3c030080, -0x431024, 0x1040000d, 0x0, 0x8f82011c, -0x34420002, 0xaf82011c, 0x8f8200b0, 0x2403fffb, -0x431024, 0xaf8200b0, 0x8f82011c, 0x2403fffd, -0x431024, 0x1000004a, 0xaf82011c, 0x8f43011c, -0x8f820104, 0x14620005, 0x0, 0x8f430124, -0x8f8200b4, 0x10620010, 0x0, 0x8f820104, -0xaf42011c, 0x8f8200b4, 0x8f43011c, 0xaf420124, -0xafa30010, 0x8f420124, 0x3c040001, 0x248431c4, -0xafa20014, 0x8f86011c, 0x8f8700b0, 0x3c050005, -0x10000031, 0x34a50900, 0x8f42011c, 0xafa20010, -0x8f420124, 0x3c040001, 0x248431d0, 0xafa20014, -0x8f86011c, 0x8f8700b0, 0x3c050005, 0xc0029bb, -0x34a51000, 0x8f82011c, 0x34420002, 0xaf82011c, -0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0, -0x24020008, 0xaf830104, 0xafa20010, 0xafa00014, -0x8f42000c, 0x8c040208, 0x8c05020c, 0xafa20018, -0x8f42010c, 0x26e60028, 0x40f809, 0x24070400, -0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, -0x8ee201dc, 0x24420001, 0xaee201dc, 0x8ee201dc, -0x8f42011c, 0xafa20010, 0x8f420124, 0x3c040001, -0x248431dc, 0xafa20014, 0x8f86011c, 0x8f8700b0, -0x3c050005, 0x34a51100, 0xc0029bb, 0x0, -0x8f8200a0, 0x30420004, 0x10400069, 0x0, -0x8f430120, 0x8f820124, 0x14620005, 0x0, -0x8f430128, 0x8f8200a4, 0x10620006, 0x0, -0x8f820124, 0xaf420120, 0x8f8200a4, 0x1000005c, -0xaf420128, 0x8f8200a0, 0x3c030080, 0x431024, -0x1040000d, 0x0, 0x8f82011c, 0x34420002, -0xaf82011c, 0x8f8200a0, 0x2403fffb, 0x431024, -0xaf8200a0, 0x8f82011c, 0x2403fffd, 0x431024, -0x1000004b, 0xaf82011c, 0x8f430120, 0x8f820124, -0x14620005, 0x0, 0x8f430128, 0x8f8200a4, -0x10620010, 0x0, 0x8f820124, 0xaf420120, -0x8f8200a4, 0x8f430120, 0xaf420128, 0xafa30010, -0x8f420128, 0x3c040001, 0x248431e8, 0xafa20014, -0x8f86011c, 0x8f8700a0, 0x3c050005, 0x10000032, -0x34a51200, 0x8f420120, 0xafa20010, 0x8f420128, -0x3c040001, 0x248431f4, 0xafa20014, 0x8f86011c, -0x8f8700a0, 0x3c050005, 0xc0029bb, 0x34a51300, -0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, -0x8f8200a0, 0x34420001, 0xaf8200a0, 0x24020080, -0xaf830124, 0xafa20010, 0xafa00014, 0x8f420014, -0x8c040208, 0x8c05020c, 0xafa20018, 0x8f420108, -0x3c060001, 0x24c63e84, 0x40f809, 0x24070004, -0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, -0x8ee201dc, 0x24420001, 0xaee201dc, 0x8ee201dc, -0x8f420120, 0xafa20010, 0x8f420128, 0x3c040001, -0x24843200, 0xafa20014, 0x8f86011c, 0x8f8700a0, -0x3c050005, 0x34a51400, 0xc0029bb, 0x0, -0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3c081000, -0x24070001, 0x3c060080, 0x3c050100, 0x8f820070, -0x481024, 0x1040fffd, 0x0, 0x8f820054, -0x24420005, 0xaf820078, 0x8c040234, 0x10800016, -0x1821, 0x3c020001, 0x571021, 0x8c4240e8, -0x24420005, 0x3c010001, 0x370821, 0xac2240e8, -0x3c020001, 0x571021, 0x8c4240e8, 0x44102b, -0x14400009, 0x0, 0x3c030080, 0x3c010001, -0x370821, 0xac2040e8, 0x3c010001, 0x370821, -0x1000000b, 0xa02740f0, 0x3c020001, 0x571021, -0x904240f0, 0x54400006, 0x661825, 0x3c020001, -0x571021, 0x904240f1, 0x54400001, 0x661825, -0x8c040230, 0x10800013, 0x0, 0x3c020001, -0x571021, 0x8c4240ec, 0x24420005, 0x3c010001, -0x370821, 0xac2240ec, 0x3c020001, 0x571021, -0x8c4240ec, 0x44102b, 0x14400006, 0x0, -0x3c010001, 0x370821, 0xac2040ec, 0x10000006, -0x651825, 0x3c020001, 0x571021, 0x904240f2, -0x54400001, 0x651825, 0x1060ffbc, 0x0, -0x8f420000, 0x10400007, 0x0, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, -0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x431025, 0xaf820060, -0x8f420000, 0x10400003, 0x0, 0x1000ffa7, -0xaf80004c, 0x1000ffa5, 0xaf800048, 0x3e00008, -0x0, 0x0, 0x0, 0x27bdffe0, -0xafbf001c, 0xafb00018, 0x8f860064, 0x30c20004, -0x10400025, 0x24040004, 0x8c020114, 0xaf420020, -0xaf840064, 0x8f4202ec, 0x24420001, 0xaf4202ec, -0x8f4202ec, 0x8f820064, 0x30420004, 0x14400005, -0x0, 0x8c030114, 0x8f420020, 0x1462fff2, -0x0, 0x8f420000, 0x10400007, 0x8f43003c, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x431025, -0xaf820060, 0x8f420000, 0x10400073, 0x0, -0x1000006f, 0x0, 0x30c20008, 0x10400020, -0x24040008, 0x8c02011c, 0xaf420048, 0xaf840064, -0x8f420298, 0x24420001, 0xaf420298, 0x8f420298, -0x8f820064, 0x30420008, 0x14400005, 0x0, -0x8c03011c, 0x8f420048, 0x1462fff2, 0x0, -0x8f420000, 0x10400007, 0x0, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, -0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x1000ffd9, 0x34420200, -0x30c20020, 0x10400023, 0x24040020, 0x8c02012c, -0xaf420068, 0xaf840064, 0x8f4202c8, 0x24420001, -0xaf4202c8, 0x8f4202c8, 0x8f820064, 0x30420020, -0x14400005, 0x32c24000, 0x8c03012c, 0x8f420068, -0x1462fff2, 0x32c24000, 0x14400002, 0x3c020001, -0x2c2b025, 0x8f420000, 0x10400007, 0x0, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x1000ffb4, -0x34420800, 0x30c20010, 0x10400029, 0x24040010, -0x8c020124, 0xaf420058, 0xaf840064, 0x8f4202c4, -0x24420001, 0xaf4202c4, 0x8f4202c4, 0x8f820064, -0x30420010, 0x14400005, 0x32c22000, 0x8c030124, -0x8f420058, 0x1462fff2, 0x32c22000, 0x50400001, -0x36d68000, 0x8f420000, 0x10400007, 0x0, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x34420100, -0xaf820060, 0x8f420000, 0x10400003, 0x0, -0x1000006b, 0xaf80004c, 0x10000069, 0xaf800048, -0x30c20001, 0x10400004, 0x24020001, 0xaf820064, -0x10000063, 0x0, 0x30c20002, 0x1440000b, -0x3c050003, 0x3c040001, 0x248432c4, 0x34a50500, -0x3821, 0xafa00010, 0xc0029bb, 0xafa00014, -0x2402ffc0, 0x10000056, 0xaf820064, 0x8c10022c, -0x8c02010c, 0x12020047, 0x101080, 0x8c450300, -0x26020001, 0x3050003f, 0x24020003, 0xac10022c, -0x51e02, 0x10620005, 0x24020010, 0x1062001d, -0x30a20fff, 0x10000039, 0x0, 0x8f430298, -0x8f440000, 0x30a20fff, 0xaf420048, 0x24630001, -0xaf430298, 0x10800007, 0x8f420298, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, -0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x34420200, 0xaf820060, -0x8f420000, 0x1040001f, 0x0, 0x1000001b, -0x0, 0xaf420058, 0x32c22000, 0x50400001, -0x36d68000, 0x8f4202c4, 0x8f430000, 0x24420001, -0xaf4202c4, 0x10600007, 0x8f4202c4, 0xaf80004c, -0x8f82004c, 0x1040fffd, 0x0, 0x10000005, -0x0, 0xaf800048, 0x8f820048, 0x1040fffd, -0x0, 0x8f820060, 0x34420100, 0xaf820060, -0x8f420000, 0x10400003, 0x0, 0x10000005, -0xaf80004c, 0x10000003, 0xaf800048, 0xc00202b, -0xa02021, 0x8c02010c, 0x16020002, 0x24020002, -0xaf820064, 0x8f820064, 0x30420002, 0x14400004, -0x0, 0x8c02010c, 0x1602ffad, 0x0, -0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020, -0x3e00008, 0x0, 0x27bdffa8, 0xafb00038, -0x808021, 0x101602, 0x2442ffff, 0x304300ff, -0x2c620013, 0xafbf0050, 0xafbe004c, 0xafb50048, -0xafb30044, 0xafb20040, 0x104001e6, 0xafb1003c, -0x31080, 0x3c010001, 0x220821, 0x8c223308, -0x400008, 0x0, 0x101302, 0x30440fff, -0x24020001, 0x10820005, 0x24020002, 0x1082000a, -0x2402fffe, 0x10000021, 0x3c050003, 0x8f430004, -0x3c020001, 0x8c423eb0, 0xaf4401f0, 0xaf4401f4, -0x10000007, 0x34630001, 0x8f430004, 0xaf4401f0, -0xaf4401f4, 0x621824, 0x3c020001, 0x2442c1b0, -0x21100, 0x21182, 0xaf430004, 0x3c030800, -0x431025, 0x3c010000, 0xac224138, 0x8f840054, -0x41442, 0x41c82, 0x431021, 0x41cc2, -0x431023, 0x41d02, 0x431021, 0x41d42, -0x431023, 0x10000009, 0xaf4201f8, 0x3c040001, -0x248432d0, 0x34a51000, 0x2003021, 0x3821, -0xafa00010, 0xc0029bb, 0xafa00014, 0x8f420290, -0x24420001, 0xaf420290, 0x10000215, 0x8f420290, -0x27b00028, 0x2002021, 0x24050210, 0xc002a3f, -0x24060008, 0xc002398, 0x2002021, 0x1000020c, -0x0, 0x8c06022c, 0x27a40028, 0x61880, -0x24c20001, 0x3046003f, 0x8c650300, 0x61080, -0x8c430300, 0x24c20001, 0x3042003f, 0xac02022c, -0xafa50028, 0xc002398, 0xafa3002c, 0x100001fc, -0x0, 0x27b00028, 0x2002021, 0x24050210, -0xc002a3f, 0x24060008, 0xc0024d7, 0x2002021, -0x100001f3, 0x0, 0x8c06022c, 0x27a40028, -0x61880, 0x24c20001, 0x3046003f, 0x8c650300, -0x61080, 0x8c430300, 0x24c20001, 0x3042003f, -0xac02022c, 0xafa50028, 0xc0024d7, 0xafa3002c, -0x100001e3, 0x0, 0x101302, 0x30430fff, -0x24020001, 0x10620005, 0x24020002, 0x1062001e, -0x3c020002, 0x10000033, 0x3c050003, 0x3c030002, -0x2c31024, 0x54400037, 0x2c3b025, 0x8f820228, -0x3c010001, 0x370821, 0xac2238d8, 0x8f82022c, -0x3c010001, 0x370821, 0xac2238dc, 0x8f820230, -0x3c010001, 0x370821, 0xac2238e0, 0x8f820234, -0x3c010001, 0x370821, 0xac2238e4, 0x2402ffff, -0xaf820228, 0xaf82022c, 0xaf820230, 0xaf820234, -0x10000020, 0x2c3b025, 0x2c21024, 0x10400012, -0x3c02fffd, 0x3c020001, 0x571021, 0x8c4238d8, -0xaf820228, 0x3c020001, 0x571021, 0x8c4238dc, -0xaf82022c, 0x3c020001, 0x571021, 0x8c4238e0, -0xaf820230, 0x3c020001, 0x571021, 0x8c4238e4, -0xaf820234, 0x3c02fffd, 0x3442ffff, 0x10000009, -0x2c2b024, 0x3c040001, 0x248432dc, 0x34a51100, -0x2003021, 0x3821, 0xafa00010, 0xc0029bb, -0xafa00014, 0x8f4202bc, 0x24420001, 0xaf4202bc, -0x1000019b, 0x8f4202bc, 0x101302, 0x30450fff, -0x24020001, 0x10a20005, 0x24020002, 0x10a2000d, -0x3c0408ff, 0x10000014, 0x3c050003, 0x3c0208ff, -0x3442ffff, 0x8f830220, 0x3c040004, 0x2c4b025, -0x621824, 0x34630008, 0xaf830220, 0x10000012, -0xaf450288, 0x3484fff7, 0x3c03fffb, 0x8f820220, -0x3463ffff, 0x2c3b024, 0x441024, 0xaf820220, -0x10000009, 0xaf450288, 0x3c040001, 0x248432e8, -0x34a51200, 0x2003021, 0x3821, 0xafa00010, -0xc0029bb, 0xafa00014, 0x8f4202ac, 0x24420001, -0xaf4202ac, 0x10000172, 0x8f4202ac, 0x27840208, -0x24050200, 0xc002a3f, 0x24060008, 0x27440214, -0x24050200, 0xc002a3f, 0x24060008, 0x8f4202b4, -0x24420001, 0xaf4202b4, 0x10000165, 0x8f4202b4, -0x101302, 0x30430fff, 0x24020001, 0x10620011, -0x28620002, 0x50400005, 0x24020002, 0x10600007, -0x0, 0x10000017, 0x0, 0x1062000f, -0x0, 0x10000013, 0x0, 0x8c060248, -0x2021, 0xc0047d4, 0x24050004, 0x10000007, -0x0, 0x8c060248, 0x2021, 0xc0047d4, -0x24050004, 0x10000010, 0x0, 0x8c06024c, -0x2021, 0xc0047d4, 0x24050001, 0x1000000a, -0x0, 0x3c040001, 0x248432f4, 0x3c050003, -0x34a51300, 0x2003021, 0x3821, 0xafa00010, -0xc0029bb, 0xafa00014, 0x8f4202b0, 0x24420001, -0xaf4202b0, 0x10000136, 0x8f4202b0, 0xc0022ac, -0x0, 0x10000132, 0x0, 0x24020001, -0xa34205b6, 0x24100100, 0x8f440198, 0x8f45019c, -0xafb00010, 0xafa00014, 0x8f420014, 0xafa20018, -0x8f420108, 0x26e60028, 0x40f809, 0x24070400, -0x1040fff5, 0x0, 0x10000121, 0x0, -0x3c02ffff, 0x34427fff, 0x2c2b024, 0x1821, -0x3c020900, 0xaf400058, 0xaf40005c, 0xaf400060, -0xaf400064, 0xaf400350, 0xafa20020, 0x8f5e0018, -0x27aa0020, 0x240200ff, 0x13c20002, 0xafaa0034, -0x27c30001, 0x8c020228, 0x609021, 0x1642000e, -0x1e38c0, 0x8f42032c, 0x24420001, 0xaf42032c, -0x8f42032c, 0x8c020228, 0x3c040001, 0x2484328c, -0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, -0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020, -0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, -0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, -0x1040001b, 0x9821, 0xe08821, 0x263504c0, -0x8f440168, 0x8f45016c, 0x2201821, 0x240a0004, -0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021, -0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, -0xa32821, 0xa3482b, 0x822021, 0x100f809, -0x892021, 0x54400006, 0x24130001, 0x8f820054, -0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, -0x326200ff, 0x54400017, 0xaf520018, 0x8f420368, -0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, -0x8faa0034, 0xafa20010, 0x8f820124, 0x3c040001, -0x24843298, 0x3c050009, 0xafa20014, 0x8d460000, -0x10000033, 0x34a50600, 0x8f4202f8, 0x24130001, -0x24420001, 0xaf4202f8, 0x8f4202f8, 0x1000001c, -0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, -0x2021023, 0x2c4203e9, 0x10400014, 0x9821, -0x24110010, 0x8f42000c, 0x8f440150, 0x8f450154, -0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, -0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, -0x1440ffe5, 0x0, 0x8f820054, 0x2021023, -0x2c4203e9, 0x1440ffef, 0x0, 0x326200ff, -0x14400011, 0x0, 0x8f420368, 0x24420001, -0xaf420368, 0x8f420368, 0x8f820120, 0x8faa0034, -0xafa20010, 0x8f820124, 0x3c040001, 0x248432a0, -0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700, -0xc0029bb, 0x3c03821, 0x8f4202a0, 0x24420001, -0xaf4202a0, 0x8f4202a0, 0x8f4202e8, 0x24420001, -0xaf4202e8, 0x1000008a, 0x8f4202e8, 0x8c02025c, -0x27440214, 0xaf4201e0, 0x8c020260, 0x24050200, -0x24060008, 0xc002a3f, 0xaf4201e8, 0x8f820220, -0x30420008, 0x14400002, 0x24020001, 0x24020002, -0xaf420288, 0x8f42029c, 0x24420001, 0xaf42029c, -0x10000077, 0x8f42029c, 0x3c0200ff, 0x3442ffff, -0x2021824, 0x32c20180, 0x14400006, 0x3402fffb, -0x43102b, 0x14400003, 0x0, 0x1000006c, -0xaf4300bc, 0x3c040001, 0x24843300, 0x3c050003, -0x34a51500, 0x2003021, 0x3821, 0xafa00010, -0xc0029bb, 0xafa00014, 0x3c020700, 0x34421000, -0x101e02, 0x621825, 0xafa30020, 0x8f510018, -0x240200ff, 0x12220002, 0x8021, 0x26300001, -0x8c020228, 0x1602000e, 0x1130c0, 0x8f42032c, -0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228, -0x3c040001, 0x24843274, 0x3c050009, 0xafa00014, -0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100, -0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, -0xac4404c4, 0xc01821, 0x8f440168, 0x8f45016c, -0x1021, 0x24070004, 0xafa70010, 0xafb00014, -0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018, -0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, -0x822021, 0x100f809, 0x892021, 0x1440000b, -0x24070008, 0x8f820120, 0xafa20010, 0x8f820124, -0x3c040001, 0x2484327c, 0x3c050009, 0xafa20014, -0x8fa60020, 0x1000001c, 0x34a50200, 0x8f440150, -0x8f450154, 0x8f43000c, 0xaf500018, 0x8f860120, -0x24020010, 0xafa20010, 0xafb00014, 0xafa30018, -0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010, -0x0, 0x8f420330, 0x24420001, 0xaf420330, -0x8f420330, 0x8f820120, 0xafa20010, 0x8f820124, -0x3c040001, 0x24843284, 0x3c050009, 0xafa20014, -0x8fa60020, 0x34a50300, 0xc0029bb, 0x2203821, -0x8f4202d0, 0x24420001, 0xaf4202d0, 0x8f4202d0, -0x8f4202e0, 0x24420001, 0xaf4202e0, 0x8f4202e0, -0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, -0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008, -0x27bd0058, 0x27bdfff8, 0x2408ffff, 0x10a00014, -0x4821, 0x3c0aedb8, 0x354a8320, 0x90870000, -0x24840001, 0x3021, 0x1071026, 0x30420001, -0x10400002, 0x81842, 0x6a1826, 0x604021, -0x24c60001, 0x2cc20008, 0x1440fff7, 0x73842, -0x25290001, 0x125102b, 0x1440fff0, 0x0, -0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffb8, -0xafbf0040, 0xafbe003c, 0xafb50038, 0xafb30034, -0xafb20030, 0xafb1002c, 0xafb00028, 0x8f870220, -0xafa7001c, 0x8f870200, 0xafa70024, 0x8f820220, -0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004, -0xaf820220, 0x8f820200, 0x3c03c0ff, 0x3463ffff, -0x431024, 0x34420004, 0xaf820200, 0x8f53034c, -0x8f550350, 0x8f5e0354, 0x8f470358, 0xafa70014, -0x8f4202c0, 0x274401b0, 0x24420001, 0xaf4202c0, -0x8f5002c0, 0x8f5101f4, 0x8f5201f0, 0xc002a28, -0x24050400, 0xaf53034c, 0xaf550350, 0xaf5e0354, -0x8fa70014, 0xaf470358, 0xaf5002c0, 0xaf5101f4, -0xaf5201f0, 0x8c02025c, 0x27440214, 0xaf4201e0, -0x8c020260, 0x24050200, 0x24060008, 0xaf4201e8, -0x24020006, 0xc002a3f, 0xaf4201e4, 0x3c023b9a, -0x3442ca00, 0xaf4201ec, 0x240203e8, 0x24040002, -0x24030001, 0xaf420284, 0xaf440280, 0xaf43028c, -0x8f820220, 0x30420008, 0x10400004, 0x0, -0xaf430288, 0x10000003, 0x3021, 0xaf440288, -0x3021, 0x3c030001, 0x661821, 0x90633cf0, -0x3461021, 0x24c60001, 0xa043021c, 0x2cc2000f, -0x1440fff8, 0x3461821, 0x24c60001, 0x8f820040, -0x24040080, 0x24050080, 0x21702, 0x24420030, -0xa062021c, 0x3461021, 0xc002a28, 0xa040021c, -0x8fa7001c, 0x30e20004, 0x14400006, 0x0, -0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024, -0xaf820220, 0x8fa70024, 0x30e20004, 0x14400006, -0x0, 0x8f820200, 0x3c03c0ff, 0x3463fffb, -0x431024, 0xaf820200, 0x8fbf0040, 0x8fbe003c, -0x8fb50038, 0x8fb30034, 0x8fb20030, 0x8fb1002c, -0x8fb00028, 0x3e00008, 0x27bd0048, 0xaf400104, +0xc002b17, 0x2203821, 0x8f4202e0, 0x24420001, +0xaf4202e0, 0x8f4202e0, 0x8f4202f0, 0x24420001, +0xaf4202f0, 0x8f4202f0, 0x8fa20034, 0x8fbf0058, +0x8fbe0054, 0x8fb50050, 0x8fb3004c, 0x8fb20048, +0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0060, +0x27bdfff8, 0x2408ffff, 0x10a00014, 0x4821, +0x3c0aedb8, 0x354a8320, 0x90870000, 0x24840001, +0x3021, 0x1071026, 0x30420001, 0x10400002, +0x81842, 0x6a1826, 0x604021, 0x24c60001, +0x2cc20008, 0x1440fff7, 0x73842, 0x25290001, +0x125102b, 0x1440fff0, 0x0, 0x1001021, +0x3e00008, 0x27bd0008, 0x27bdffb8, 0xafbf0040, +0xafbe003c, 0xafb50038, 0xafb30034, 0xafb20030, +0xafb1002c, 0xafb00028, 0x8f870220, 0xafa7001c, +0x8f870200, 0xafa70024, 0x8f820220, 0x3c0308ff, +0x3463ffff, 0x431024, 0x34420004, 0xaf820220, +0x8f820200, 0x3c03c0ff, 0x3463ffff, 0x431024, +0x34420004, 0xaf820200, 0x8f53035c, 0x8f550360, +0x8f5e0364, 0x8f470368, 0xafa70014, 0x8f4202d0, +0x274401c0, 0x24420001, 0xaf4202d0, 0x8f5002d0, +0x8f510204, 0x8f520200, 0xc002b84, 0x24050400, +0xaf53035c, 0xaf550360, 0xaf5e0364, 0x8fa70014, +0xaf470368, 0xaf5002d0, 0xaf510204, 0xaf520200, +0x8c02025c, 0x27440224, 0xaf4201f0, 0x8c020260, +0x24050200, 0x24060008, 0xaf4201f8, 0x24020006, +0xc002b9b, 0xaf4201f4, 0x3c023b9a, 0x3442ca00, +0xaf4201fc, 0x240203e8, 0x24040002, 0x24030001, +0xaf420294, 0xaf440290, 0xaf43029c, 0x8f820220, +0x30420008, 0x10400004, 0x0, 0xaf430298, +0x10000003, 0x3021, 0xaf440298, 0x3021, +0x3c030001, 0x661821, 0x90636d80, 0x3461021, +0x24c60001, 0xa043022c, 0x2cc2000f, 0x1440fff8, +0x3461821, 0x24c60001, 0x8f820040, 0x24040080, +0x24050080, 0x21702, 0x24420030, 0xa062022c, +0x3461021, 0xc002b84, 0xa040022c, 0x8fa7001c, +0x30e20004, 0x14400006, 0x0, 0x8f820220, +0x3c0308ff, 0x3463fffb, 0x431024, 0xaf820220, +0x8fa70024, 0x30e20004, 0x14400006, 0x0, +0x8f820200, 0x3c03c0ff, 0x3463fffb, 0x431024, +0xaf820200, 0x8fbf0040, 0x8fbe003c, 0x8fb50038, +0x8fb30034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, +0x3e00008, 0x27bd0048, 0x0, 0xaf400104, 0x24040001, 0x410c0, 0x2e21821, 0x24820001, 0x3c010001, 0x230821, 0xa42234d0, 0x402021, 0x2c820080, 0x1440fff8, 0x410c0, 0x24020001, @@ -5721,7 +5946,7 @@ 0x2c450001, 0xa01021, 0x14400009, 0x24840008, 0x86102b, 0x1440fff0, 0x1021, 0x304200ff, 0x14400030, 0x24020001, 0x1000002e, 0x1021, -0x1000fffa, 0x24020001, 0x2002021, 0xc002292, +0x1000fffa, 0x24020001, 0x2002021, 0xc0023ed, 0x24050006, 0x3042007f, 0x218c0, 0x2e31021, 0x3c010001, 0x220821, 0x942230d0, 0x1040fff2, 0x2e31021, 0x3c060001, 0xc23021, 0x94c630d0, @@ -5736,7 +5961,7 @@ 0x27bd0018, 0x3e00008, 0x0, 0x27bdffb0, 0x801021, 0xafb00030, 0x24500002, 0x2002021, 0x24050006, 0xafb10034, 0x408821, 0xafbf0048, -0xafbe0044, 0xafb50040, 0xafb3003c, 0xc002292, +0xafbe0044, 0xafb50040, 0xafb3003c, 0xc0023ed, 0xafb20038, 0x3047007f, 0x710c0, 0x2e21021, 0x3c050001, 0xa22821, 0x94a530d0, 0x50a0001c, 0xa03021, 0x3c090001, 0x352934d2, 0x96280002, @@ -5749,15 +5974,15 @@ 0x10c00014, 0x610c0, 0x571821, 0x3c010001, 0x230821, 0x8c2334d0, 0x571021, 0xafa30010, 0x3c010001, 0x220821, 0x8c2234d4, 0x3c040001, -0x24843414, 0xafa20014, 0x8e260000, 0x8e270004, -0x3c050004, 0xc0029bb, 0x34a50400, 0x10000063, +0x24846424, 0xafa20014, 0x8e260000, 0x8e270004, +0x3c050004, 0xc002b17, 0x34a50400, 0x10000063, 0x3c020800, 0x8f450100, 0x10a00006, 0x510c0, 0x2e21021, 0x3c010001, 0x220821, 0x942234d0, 0xaf420100, 0xa03021, 0x14c00011, 0x628c0, 0x710c0, 0x2e21021, 0xafa70010, 0x3c010001, -0x220821, 0x942230d0, 0x3c040001, 0x24843420, +0x220821, 0x942230d0, 0x3c040001, 0x24846430, 0xafa20014, 0x8e260000, 0x8e270004, 0x3c050004, -0xc0029bb, 0x34a50500, 0x10000048, 0x3c020800, +0xc002b17, 0x34a50500, 0x10000048, 0x3c020800, 0xb71821, 0x3c020001, 0x96040000, 0x344234d2, 0x621821, 0xa4640000, 0x8e020002, 0x720c0, 0xac620002, 0x2e41021, 0x3c030001, 0x621821, @@ -5779,44 +6004,44 @@ 0x1821, 0xafa20020, 0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, 0xafaa002c, 0x27c30001, 0x8c020228, 0x609021, 0x1642000e, 0x1e38c0, -0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, -0x8c020228, 0x3c040001, 0x248433dc, 0x3c050009, +0x8f42033c, 0x24420001, 0xaf42033c, 0x8f42033c, +0x8c020228, 0x3c040001, 0x248463ec, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, -0x9821, 0xe08821, 0x263504c0, 0x8f440168, -0x8f45016c, 0x2201821, 0x240a0004, 0xafaa0010, +0x9821, 0xe08821, 0x263504c0, 0x8f440178, +0x8f45017c, 0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x54400006, 0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, -0x54400017, 0xaf520018, 0x8f420368, 0x24420001, -0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, -0xafa20010, 0x8f820124, 0x3c040001, 0x248433e8, +0x54400017, 0xaf520018, 0x8f420378, 0x24420001, +0xaf420378, 0x8f420378, 0x8f820120, 0x8faa002c, +0xafa20010, 0x8f820124, 0x3c040001, 0x248463f8, 0x3c050009, 0xafa20014, 0x8d460000, 0x10000033, -0x34a50600, 0x8f4202f8, 0x24130001, 0x24420001, -0xaf4202f8, 0x8f4202f8, 0x1000001c, 0x326200ff, +0x34a50600, 0x8f420308, 0x24130001, 0x24420001, +0xaf420308, 0x8f420308, 0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, 0x9821, 0x24110010, -0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120, +0x8f42000c, 0x8f440160, 0x8f450164, 0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffef, 0x0, 0x326200ff, 0x14400011, -0x0, 0x8f420368, 0x24420001, 0xaf420368, -0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010, -0x8f820124, 0x3c040001, 0x248433f0, 0x3c050009, -0xafa20014, 0x8d460000, 0x34a50700, 0xc0029bb, -0x3c03821, 0x8f4202a4, 0x24420001, 0xaf4202a4, -0x8f4202a4, 0x8f4202e4, 0x24420001, 0xaf4202e4, -0x8f4202e4, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, +0x0, 0x8f420378, 0x24420001, 0xaf420378, +0x8f420378, 0x8f820120, 0x8faa002c, 0xafa20010, +0x8f820124, 0x3c040001, 0x24846400, 0x3c050009, +0xafa20014, 0x8d460000, 0x34a50700, 0xc002b17, +0x3c03821, 0x8f4202b4, 0x24420001, 0xaf4202b4, +0x8f4202b4, 0x8f4202f4, 0x24420001, 0xaf4202f4, +0x8f4202f4, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, 0x27bd0050, 0x27bdffa0, 0x801021, 0xafb00040, 0x24500002, 0x2002021, 0x24050006, 0xafb10044, 0x408821, 0xafbf0058, 0xafbe0054, -0xafb50050, 0xafb3004c, 0xc002292, 0xafb20048, +0xafb50050, 0xafb3004c, 0xc0023ed, 0xafb20048, 0x3048007f, 0x810c0, 0x2e21021, 0x3c060001, 0xc23021, 0x94c630d0, 0x10c0001c, 0x3821, 0x3c0a0001, 0x354a34d2, 0x96290002, 0x610c0, @@ -5828,8 +6053,8 @@ 0x94c634d0, 0x14c0ffea, 0x610c0, 0x14c00011, 0xafa70028, 0x810c0, 0x2e21021, 0xafa80010, 0x3c010001, 0x220821, 0x942230d0, 0x3c040001, -0x2484342c, 0xafa20014, 0x8e260000, 0x8e270004, -0x3c050004, 0xc0029bb, 0x34a50900, 0x10000075, +0x2484643c, 0xafa20014, 0x8e260000, 0x8e270004, +0x3c050004, 0xc002b17, 0x34a50900, 0x10000075, 0x3c020800, 0x10e0000c, 0x610c0, 0x2e21021, 0x3c030001, 0x621821, 0x946334d0, 0x710c0, 0x2e21021, 0x3c010001, 0x220821, 0xa42334d0, @@ -5862,43 +6087,43 @@ 0x3c020800, 0x34422000, 0x1821, 0xafa20020, 0x8f5e0018, 0x27ab0020, 0x240200ff, 0x13c20002, 0xafab0034, 0x27c30001, 0x8c020228, 0x609021, -0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001, -0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001, -0x248433dc, 0x3c050009, 0xafa00014, 0xafa20010, +0x1642000e, 0x1e38c0, 0x8f42033c, 0x24420001, +0xaf42033c, 0x8f42033c, 0x8c020228, 0x3c040001, +0x248463ec, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, 0x9821, 0xe08821, -0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821, +0x263504c0, 0x8f440178, 0x8f45017c, 0x2201821, 0x240b0004, 0xafab0010, 0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x54400006, 0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, 0x54400017, 0xaf520018, -0x8f420368, 0x24420001, 0xaf420368, 0x8f420368, +0x8f420378, 0x24420001, 0xaf420378, 0x8f420378, 0x8f820120, 0x8fab0034, 0xafa20010, 0x8f820124, -0x3c040001, 0x248433e8, 0x3c050009, 0xafa20014, -0x8d660000, 0x10000033, 0x34a50600, 0x8f4202f8, -0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8, +0x3c040001, 0x248463f8, 0x3c050009, 0xafa20014, +0x8d660000, 0x10000033, 0x34a50600, 0x8f420308, +0x24130001, 0x24420001, 0xaf420308, 0x8f420308, 0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014, -0x9821, 0x24110010, 0x8f42000c, 0x8f440150, -0x8f450154, 0x8f860120, 0xafb10010, 0xafb20014, +0x9821, 0x24110010, 0x8f42000c, 0x8f440160, +0x8f450164, 0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffef, 0x0, -0x326200ff, 0x14400011, 0x0, 0x8f420368, -0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x326200ff, 0x14400011, 0x0, 0x8f420378, +0x24420001, 0xaf420378, 0x8f420378, 0x8f820120, 0x8fab0034, 0xafa20010, 0x8f820124, 0x3c040001, -0x248433f0, 0x3c050009, 0xafa20014, 0x8d660000, -0x34a50700, 0xc0029bb, 0x3c03821, 0x8f4202a8, -0x24420001, 0xaf4202a8, 0x8f4202a8, 0x8f4202e4, -0x24420001, 0xaf4202e4, 0x8f4202e4, 0x8fbf0058, +0x24846400, 0x3c050009, 0xafa20014, 0x8d660000, +0x34a50700, 0xc002b17, 0x3c03821, 0x8f4202b8, +0x24420001, 0xaf4202b8, 0x8f4202b8, 0x8f4202f4, +0x24420001, 0xaf4202f4, 0x8f4202f4, 0x8fbf0058, 0x8fbe0054, 0x8fb50050, 0x8fb3004c, 0x8fb20048, 0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0060, 0x0, 0x0, 0x0, 0x27bdffe0, -0x27644000, 0xafbf0018, 0xc002a28, 0x24051000, +0x27644000, 0xafbf0018, 0xc002b84, 0x24051000, 0x3c030001, 0x34632cc0, 0x3c040001, 0x34842ec8, 0x24020020, 0xaf82011c, 0x2e31021, 0xaf800100, 0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114, @@ -5907,21 +6132,21 @@ 0x2e31021, 0xaf4200f0, 0x2e41021, 0xaf4200f4, 0x2e41021, 0xaf4200f8, 0x3c020001, 0x571021, 0x904240f4, 0x1440001c, 0x3c050001, 0x8f82011c, -0x3c040001, 0x248434f0, 0x3c050001, 0x34420001, +0x3c040001, 0x24846500, 0x3c050001, 0x34420001, 0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c, -0x34a50100, 0xc0029bb, 0x3821, 0x8c020218, +0x34a50100, 0xc002b17, 0x3821, 0x8c020218, 0x30420040, 0x10400014, 0x0, 0x8f82011c, -0x3c040001, 0x248434fc, 0x3c050001, 0x34420004, +0x3c040001, 0x2484650c, 0x3c050001, 0x34420004, 0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c, -0x10000007, 0x34a50200, 0x3c040001, 0x24843504, +0x10000007, 0x34a50200, 0x3c040001, 0x24846514, 0xafa00010, 0xafa00014, 0x8f86011c, 0x34a50300, -0xc0029bb, 0x3821, 0x8fbf0018, 0x3e00008, +0xc002b17, 0x3821, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8fa90010, 0x8f83012c, 0x8faa0014, 0x8fab0018, 0x1060000a, 0x27624fe0, 0x14620002, 0x24680020, 0x27684800, 0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x0, -0x8f430324, 0x1021, 0x24630001, 0xaf430324, -0x10000039, 0x8f430324, 0xac640000, 0xac650004, +0x8f430334, 0x1021, 0x24630001, 0xaf430334, +0x10000039, 0x8f430334, 0xac640000, 0xac650004, 0xac660008, 0xa467000e, 0xac690018, 0xac6a001c, 0xac6b0010, 0xac620014, 0xaf880120, 0x8f4200fc, 0x8f4400f4, 0x2442ffff, 0xaf4200fc, 0x8c820000, @@ -5940,8 +6165,8 @@ 0x8faa0014, 0x8fab0018, 0x1060000a, 0x276247e0, 0x14620002, 0x24680020, 0x27684000, 0x8f820108, 0x11020004, 0x0, 0x8f820104, 0x15020007, -0x0, 0x8f430328, 0x1021, 0x24630001, -0xaf430328, 0x10000035, 0x8f430328, 0xac640000, +0x0, 0x8f430338, 0x1021, 0x24630001, +0xaf430338, 0x10000035, 0x8f430338, 0xac640000, 0xac650004, 0xac660008, 0xa467000e, 0xac690018, 0xac6a001c, 0xac6b0010, 0xac620014, 0xaf880100, 0x8f4400ec, 0x8c820000, 0x30420006, 0x10400019, @@ -5956,55 +6181,55 @@ 0x2e21021, 0x402021, 0x24020001, 0xaf4400ec, 0xac890000, 0xac820004, 0x24020001, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x27bdffd8, -0x3c040001, 0x2484350c, 0x3c050001, 0xafbf0024, +0x3c040001, 0x2484651c, 0x3c050001, 0xafbf0024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f900104, 0x8f9100b0, 0x8f92011c, 0x34a52500, 0x8f820100, -0x2403021, 0x2203821, 0xafa20010, 0xc0029bb, +0x2403021, 0x2203821, 0xafa20010, 0xc002b17, 0xafb00014, 0x8e020008, 0xafa20010, 0x8e02000c, -0x3c040001, 0x24843518, 0xafa20014, 0x8e060000, -0x8e070004, 0x3c050001, 0xc0029bb, 0x34a52510, +0x3c040001, 0x24846528, 0xafa20014, 0x8e060000, +0x8e070004, 0x3c050001, 0xc002b17, 0x34a52510, 0x8e020018, 0xafa20010, 0x8e02001c, 0x3c040001, -0x24843524, 0xafa20014, 0x8e060010, 0x8e070014, -0x3c050001, 0xc0029bb, 0x34a52520, 0x3c027f00, +0x24846534, 0xafa20014, 0x8e060010, 0x8e070014, +0x3c050001, 0xc002b17, 0x34a52520, 0x3c027f00, 0x2221024, 0x3c030800, 0x54430016, 0x3c030200, 0x8f82009c, 0x3042ffff, 0x14400012, 0x3c030200, -0x3c040001, 0x24843530, 0x3c050002, 0x34a5f030, +0x3c040001, 0x24846540, 0x3c050002, 0x34a5f030, 0x3021, 0x3821, 0x36420002, 0xaf82011c, 0x36220001, 0xaf8200b0, 0xaf900104, 0xaf92011c, -0xafa00010, 0xc0029bb, 0xafa00014, 0x10000024, +0xafa00010, 0xc002b17, 0xafa00014, 0x10000024, 0x0, 0x2c31024, 0x1040000d, 0x2231024, 0x1040000b, 0x36420002, 0xaf82011c, 0x36220001, -0xaf8200b0, 0xaf900104, 0xaf92011c, 0x8f420320, -0x24420001, 0xaf420320, 0x10000015, 0x8f420320, -0x3c040001, 0x24843538, 0x240202a9, 0xafa20010, -0xafa00014, 0x8f860144, 0x3c070001, 0x24e73540, -0xc0029bb, 0x3405dead, 0x8f82011c, 0x34420002, +0xaf8200b0, 0xaf900104, 0xaf92011c, 0x8f420330, +0x24420001, 0xaf420330, 0x10000015, 0x8f420330, +0x3c040001, 0x24846548, 0x240202a9, 0xafa20010, +0xafa00014, 0x8f860144, 0x3c070001, 0x24e76550, +0xc002b17, 0x3405dead, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001, 0x431025, 0xaf820140, 0x8fbf0024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0x3c040001, -0x24843568, 0x3c050001, 0xafbf0024, 0xafb20020, +0x24846578, 0x3c050001, 0xafbf0024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f900124, 0x8f9100a0, 0x8f92011c, 0x34a52600, 0x8f820120, 0x2403021, -0x2203821, 0xafa20010, 0xc0029bb, 0xafb00014, +0x2203821, 0xafa20010, 0xc002b17, 0xafb00014, 0x8e020008, 0xafa20010, 0x8e02000c, 0x3c040001, -0x24843574, 0xafa20014, 0x8e060000, 0x8e070004, -0x3c050001, 0xc0029bb, 0x34a52610, 0x8e020018, -0xafa20010, 0x8e02001c, 0x3c040001, 0x24843580, +0x24846584, 0xafa20014, 0x8e060000, 0x8e070004, +0x3c050001, 0xc002b17, 0x34a52610, 0x8e020018, +0xafa20010, 0x8e02001c, 0x3c040001, 0x24846590, 0xafa20014, 0x8e060010, 0x8e070014, 0x3c050001, -0xc0029bb, 0x34a52620, 0x3c027f00, 0x2221024, +0xc002b17, 0x34a52620, 0x3c027f00, 0x2221024, 0x3c030800, 0x54430016, 0x3c030200, 0x8f8200ac, 0x3042ffff, 0x14400012, 0x3c030200, 0x3c040001, -0x2484358c, 0x3c050001, 0x34a5f030, 0x3021, +0x2484659c, 0x3c050001, 0x34a5f030, 0x3021, 0x3821, 0x36420002, 0xaf82011c, 0x36220001, 0xaf8200a0, 0xaf900124, 0xaf92011c, 0xafa00010, -0xc0029bb, 0xafa00014, 0x10000024, 0x0, +0xc002b17, 0xafa00014, 0x10000024, 0x0, 0x2c31024, 0x1040000d, 0x2231024, 0x1040000b, 0x36420002, 0xaf82011c, 0x36220001, 0xaf8200a0, -0xaf900124, 0xaf92011c, 0x8f42031c, 0x24420001, -0xaf42031c, 0x10000015, 0x8f42031c, 0x3c040001, -0x24843538, 0x240202e2, 0xafa20010, 0xafa00014, -0x8f860144, 0x3c070001, 0x24e73540, 0xc0029bb, +0xaf900124, 0xaf92011c, 0x8f42032c, 0x24420001, +0xaf42032c, 0x10000015, 0x8f42032c, 0x3c040001, +0x24846548, 0x240202e2, 0xafa20010, 0xafa00014, +0x8f860144, 0x3c070001, 0x24e76550, 0xc002b17, 0x3405dead, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001, 0x431025, 0xaf820140, 0x8fbf0024, @@ -6013,24 +6238,24 @@ 0x2821, 0x6821, 0x4821, 0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x1580002e, 0x8f8b011c, 0x11a00014, 0x31620800, 0x8f820120, -0x10460029, 0x0, 0x3c040001, 0x8c843e90, +0x10460029, 0x0, 0x3c040001, 0x8c846f60, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004, 0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001, 0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, 0x10400017, 0x0, -0x3c040001, 0x8c843e90, 0x8d020000, 0x8d030004, +0x3c040001, 0x8c846f60, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004, 0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020, 0xac820010, 0x8d020014, 0x240c0001, 0xc01821, 0xac820014, 0x27624fe0, 0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1540002f, 0x31620100, 0x11200014, 0x31628000, 0x8f820100, 0x1045002a, -0x31620100, 0x3c040001, 0x8c843e8c, 0x8ca20000, +0x31620100, 0x3c040001, 0x8c846f5c, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008, 0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240a0001, 0xac820010, 0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, 0x31620100, 0x3c040001, -0x8c843e8c, 0x8ce20000, 0x8ce30004, 0xac820000, +0x8c846f5c, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008, 0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010, 0x8ce20014, 0x240a0001, 0xa01821, 0xac820014, @@ -6039,7 +6264,7 @@ 0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000, 0x25020020, 0xaf820124, 0x8f880124, 0x6821, 0x11800011, 0x31621000, -0x3c040001, 0x8c843e90, 0x8c820000, 0x8c830004, +0x3c040001, 0x8c846f60, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084, 0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021, 0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31621000, @@ -6048,7 +6273,7 @@ 0x3c020002, 0x1221024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4, 0x24e20020, 0xaf820104, 0x8f870104, 0x4821, 0x1140ff70, 0x0, -0x3c040001, 0x8c843e8c, 0x8c820000, 0x8c830004, +0x3c040001, 0x8c846f5c, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, 0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5021, 0xaf8200b0, 0x8c890010, 0x1000ff60, 0x8c8e0014, @@ -6057,11 +6282,11 @@ 0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x3c180100, 0x1580002e, 0x8f89011c, 0x11a00014, 0x31220800, 0x8f820120, 0x10460029, 0x0, -0x3c040001, 0x8c843e90, 0x8cc20000, 0x8cc30004, +0x3c040001, 0x8c846f60, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004, 0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001, 0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, -0x10400017, 0x0, 0x3c040001, 0x8c843e90, +0x10400017, 0x0, 0x3c040001, 0x8c846f60, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004, 0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020, 0xac820010, 0x8d020014, @@ -6069,11 +6294,11 @@ 0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1560002f, 0x31220100, 0x11400014, 0x31228000, 0x8f820100, 0x1045002a, 0x31220100, 0x3c040001, -0x8c843e8c, 0x8ca20000, 0x8ca30004, 0xac820000, +0x8c846f5c, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008, 0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240b0001, 0xac820010, 0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, -0x31220100, 0x3c040001, 0x8c843e8c, 0x8ce20000, +0x31220100, 0x3c040001, 0x8c846f5c, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008, 0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010, 0x8ce20014, 0x240b0001, @@ -6082,7 +6307,7 @@ 0x5440001d, 0x31221000, 0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000, 0x25020020, 0xaf820124, 0x8f880124, 0x6821, -0x11800011, 0x31221000, 0x3c040001, 0x8c843e90, +0x11800011, 0x31221000, 0x3c040001, 0x8c846f60, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084, 0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021, 0xaf8200a0, 0x8c8d0010, @@ -6091,7 +6316,7 @@ 0x8f8200b8, 0xa5c20000, 0x3c020002, 0x1421024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4, 0x24e20020, 0xaf820104, 0x8f870104, 0x5021, -0x11600010, 0x0, 0x3c040001, 0x8c843e8c, +0x11600010, 0x0, 0x3c040001, 0x8c846f5c, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094, 0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5821, 0xaf8200b0, 0x8c8a0010, @@ -6120,37 +6345,37 @@ 0x8f420000, 0x10400003, 0x0, 0x1000ff05, 0xaf80004c, 0x1000ff03, 0xaf800048, 0x3e00008, 0x0, 0x0, 0x0, 0x3c020001, -0x8c423d18, 0x27bdffe8, 0xafbf0014, 0x14400012, -0xafb00010, 0x3c100001, 0x26103f30, 0x2002021, -0xc002a28, 0x24052000, 0x26021fe0, 0x3c010001, -0xac223e98, 0x3c010001, 0xac223e94, 0xac020250, +0x8c426da8, 0x27bdffe8, 0xafbf0014, 0x14400012, +0xafb00010, 0x3c100001, 0x26107010, 0x2002021, +0xc002b84, 0x24052000, 0x26021fe0, 0x3c010001, +0xac226f68, 0x3c010001, 0xac226f64, 0xac020250, 0x24022000, 0xac100254, 0xac020258, 0x24020001, -0x3c010001, 0xac223d18, 0x8fbf0014, 0x8fb00010, -0x3e00008, 0x27bd0018, 0x3c090001, 0x8d293e98, +0x3c010001, 0xac226da8, 0x8fbf0014, 0x8fb00010, +0x3e00008, 0x27bd0018, 0x3c090001, 0x8d296f68, 0x8c820000, 0x8fa30010, 0x8fa80014, 0xad220000, 0x8c820004, 0xad250008, 0xad220004, 0x8f820054, 0xad260010, 0xad270014, 0xad230018, 0xad28001c, -0xad22000c, 0x2529ffe0, 0x3c020001, 0x24423f30, +0xad22000c, 0x2529ffe0, 0x3c020001, 0x24427010, 0x122102b, 0x10400003, 0x0, 0x3c090001, -0x8d293e94, 0x3c020001, 0x8c423d00, 0xad220000, -0x3c020001, 0x8c423d00, 0x3c010001, 0xac293e98, +0x8d296f64, 0x3c020001, 0x8c426d90, 0xad220000, +0x3c020001, 0x8c426d90, 0x3c010001, 0xac296f68, 0xad220004, 0xac090250, 0x3e00008, 0x0, -0x27bdffd0, 0xafb00010, 0x3c100001, 0x8e103e98, -0x3c020001, 0x8c423d00, 0xafb10014, 0x808821, +0x27bdffd0, 0xafb00010, 0x3c100001, 0x8e106f68, +0x3c020001, 0x8c426d90, 0xafb10014, 0x808821, 0xafbe0024, 0x8fbe0040, 0x8fa40048, 0xafb20018, 0xa09021, 0xafbf0028, 0xafb50020, 0xafb3001c, -0xae020000, 0x3c020001, 0x8c423d00, 0xc09821, +0xae020000, 0x3c020001, 0x8c426d90, 0xc09821, 0xe0a821, 0x10800006, 0xae020004, 0x26050008, -0xc002a33, 0x24060018, 0x10000005, 0x2610ffe0, -0x26040008, 0xc002a28, 0x24050018, 0x2610ffe0, -0x3c030001, 0x24633f30, 0x203102b, 0x10400003, -0x0, 0x3c100001, 0x8e103e94, 0x8e220000, +0xc002b8f, 0x24060018, 0x10000005, 0x2610ffe0, +0x26040008, 0xc002b84, 0x24050018, 0x2610ffe0, +0x3c030001, 0x24637010, 0x203102b, 0x10400003, +0x0, 0x3c100001, 0x8e106f64, 0x8e220000, 0xae020000, 0x8e220004, 0xae120008, 0xae020004, 0x8f820054, 0xae130010, 0xae150014, 0xae1e0018, 0x8fa80044, 0xae08001c, 0xae02000c, 0x2610ffe0, 0x203102b, 0x10400003, 0x0, 0x3c100001, -0x8e103e94, 0x3c020001, 0x8c423d00, 0xae020000, -0x3c020001, 0x8c423d00, 0x3c010001, 0xac303e98, +0x8e106f64, 0x3c020001, 0x8c426d90, 0xae020000, +0x3c020001, 0x8c426d90, 0x3c010001, 0xac306f68, 0xae020004, 0xac100250, 0x8fbf0028, 0x8fbe0024, 0x8fb50020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0030, 0x851821, @@ -6165,924 +6390,989 @@ 0x3e00008, 0x0, 0x63080, 0x861821, 0x83102b, 0x10400006, 0x0, 0xac850000, 0x24840004, 0x83102b, 0x5440fffd, 0xac850000, -0x3e00008, 0x0, 0x0, 0x27bdffd8, -0xafbf0024, 0xafb00020, 0x8f430024, 0x8f420020, -0x10620038, 0x0, 0x8f430020, 0x8f420024, -0x622023, 0x4810003, 0x0, 0x8f420040, -0x822021, 0x8f430030, 0x8f420024, 0x43102b, -0x14400005, 0x0, 0x8f430040, 0x8f420024, -0x10000005, 0x621023, 0x8f420030, 0x8f430024, -0x431023, 0x2442ffff, 0x406021, 0x8c102a, -0x54400001, 0x806021, 0x8f4a0024, 0x8f490040, -0x8f480024, 0x8f440170, 0x8f450174, 0x8f460024, -0x8f4b001c, 0x24070001, 0xafa70010, 0x84100, -0x1001821, 0x14c5021, 0x2529ffff, 0x1498024, -0xafb00014, 0x8f470014, 0x1021, 0x63100, -0xafa70018, 0xa32821, 0xa3382b, 0x822021, -0x872021, 0x8f420108, 0x1663021, 0x40f809, -0xc3900, 0x54400001, 0xaf500024, 0x8f430024, -0x8f420020, 0x14620018, 0x0, 0x8f420000, -0x10400007, 0x0, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x2403ffef, 0x431024, 0xaf820060, -0x8f420000, 0x10400003, 0x0, 0x10000002, -0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, -0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x27bdffc0, 0x32c20020, 0xafbf0038, 0xafb30034, -0xafb20030, 0xafb1002c, 0x10400004, 0xafb00028, -0x8f530028, 0x10000002, 0x0, 0x8f530020, -0x8f420030, 0x105300eb, 0x21100, 0x8f43001c, -0x628021, 0x8e040000, 0x8e050004, 0x96120008, -0x8f420090, 0x9611000a, 0x3246ffff, 0x46102a, -0x10400017, 0x0, 0x8f8200d8, 0x8f430098, -0x431023, 0x2442fff8, 0xaf420090, 0x8f420090, -0x2842fff9, 0x10400005, 0x0, 0x8f420090, -0x8f430138, 0x431021, 0xaf420090, 0x8f420090, -0x46102a, 0x10400006, 0x0, 0x8f420338, -0x24420001, 0xaf420338, 0x100000e1, 0x8f420338, -0x8f8200fc, 0x14400006, 0x32c20008, 0x8f420334, -0x24420001, 0xaf420334, 0x100000d9, 0x8f420334, -0x5040000c, 0xaf4000ac, 0x934205b3, 0x10400008, -0x32220200, 0x10400006, 0x3c034000, 0x9602000e, -0xaf4300ac, 0x21400, 0x10000002, 0xaf4200b0, -0xaf4000ac, 0x32220004, 0x1040007f, 0x32220800, -0x10400003, 0x3247ffff, 0x10000002, 0x24020020, -0x24020004, 0xafa20010, 0x8f420030, 0xafa20014, -0x8f420010, 0x3c030002, 0x431025, 0xafa20018, +0x3e00008, 0x0, 0x0, 0x3c0208ff, +0x3442ffff, 0x3c03c0ff, 0x8f850220, 0x3463ffff, +0x8f860200, 0xa21024, 0x34420004, 0xc31824, +0x34630004, 0xaf820220, 0xaf830200, 0x8c820214, +0xac020084, 0x8c820218, 0xac020088, 0x8c82021c, +0xac02008c, 0x8c820220, 0xac020090, 0x8c820224, +0xac020094, 0x8c820228, 0xac020098, 0x8c82022c, +0xac02009c, 0x8c820230, 0xac0200a0, 0x8c820234, +0xac0200a4, 0x8c820238, 0xac0200a8, 0x8c82023c, +0xac0200ac, 0x8c820240, 0xac0200b0, 0x8c820244, +0xac0200b4, 0x8c820248, 0xac0200b8, 0x8c82024c, +0xac0200bc, 0x8c82001c, 0xac020080, 0x8c820018, +0xac0200c0, 0x8c820020, 0xac0200cc, 0x8c820024, +0xac0200d0, 0x8c8201d0, 0xac0200e0, 0x8c8201d4, +0xac0200e4, 0x8c8201d8, 0xac0200e8, 0x8c8201dc, +0xac0200ec, 0x8c8201e0, 0xac0200f0, 0x8c820098, +0x8c83009c, 0xac0300fc, 0x8c8200a8, 0x8c8300ac, +0xac0300f4, 0x8c8200a0, 0x8c8300a4, 0x30a50004, +0xac0300f8, 0x14a00007, 0x30c20004, 0x8f820220, +0x3c0308ff, 0x3463fffb, 0x431024, 0xaf820220, +0x30c20004, 0x14400006, 0x0, 0x8f820200, +0x3c03c0ff, 0x3463fffb, 0x431024, 0xaf820200, +0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, +0xafb00020, 0x8f430024, 0x8f420020, 0x10620038, +0x0, 0x8f430020, 0x8f420024, 0x622023, +0x4810003, 0x0, 0x8f420040, 0x822021, +0x8f430030, 0x8f420024, 0x43102b, 0x14400005, +0x0, 0x8f430040, 0x8f420024, 0x10000005, +0x621023, 0x8f420030, 0x8f430024, 0x431023, +0x2442ffff, 0x406021, 0x8c102a, 0x54400001, +0x806021, 0x8f4a0024, 0x8f490040, 0x8f480024, +0x8f440180, 0x8f450184, 0x8f460024, 0x8f4b001c, +0x24070001, 0xafa70010, 0x84100, 0x1001821, +0x14c5021, 0x2529ffff, 0x1498024, 0xafb00014, +0x8f470014, 0x1021, 0x63100, 0xafa70018, +0xa32821, 0xa3382b, 0x822021, 0x872021, +0x8f420108, 0x1663021, 0x40f809, 0xc3900, +0x54400001, 0xaf500024, 0x8f430024, 0x8f420020, +0x14620018, 0x0, 0x8f420000, 0x10400007, +0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, +0x0, 0x10000005, 0x0, 0xaf800048, +0x8f820048, 0x1040fffd, 0x0, 0x8f820060, +0x2403ffef, 0x431024, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x10000002, 0xaf80004c, +0xaf800048, 0x8fbf0024, 0x8fb00020, 0x3e00008, +0x27bd0028, 0x3e00008, 0x0, 0x27bdffc0, +0x32c20020, 0xafbf0038, 0xafb30034, 0xafb20030, +0xafb1002c, 0x10400004, 0xafb00028, 0x8f530028, +0x10000002, 0x0, 0x8f530020, 0x8f420030, +0x105300eb, 0x21100, 0x8f43001c, 0x628021, +0x8e040000, 0x8e050004, 0x96120008, 0x8f420090, +0x9611000a, 0x3246ffff, 0x46102a, 0x10400017, +0x0, 0x8f8200d8, 0x8f430098, 0x431023, +0x2442fff8, 0xaf420090, 0x8f420090, 0x2842fff9, +0x10400005, 0x0, 0x8f420090, 0x8f430144, +0x431021, 0xaf420090, 0x8f420090, 0x46102a, +0x10400006, 0x0, 0x8f420348, 0x24420001, +0xaf420348, 0x100000e1, 0x8f420348, 0x8f8200fc, +0x14400006, 0x0, 0x8f420344, 0x24420001, +0xaf420344, 0x100000d9, 0x8f420344, 0x934205c2, +0x1040000b, 0x32c20008, 0x10400008, 0x32220200, +0x10400006, 0x3c034000, 0x9602000e, 0xaf4300ac, +0x21400, 0x10000002, 0xaf4200b0, 0xaf4000ac, +0x32220004, 0x1040007f, 0x32220800, 0x10400003, +0x3247ffff, 0x10000002, 0x24020020, 0x24020004, +0xafa20010, 0x8f420030, 0xafa20014, 0x8f420010, +0x3c030002, 0x431025, 0xafa20018, 0x8f460098, +0x8f420108, 0x40f809, 0x0, 0x104000b7, +0x0, 0x8f42009c, 0x8f430094, 0x2421021, +0xaf42009c, 0xae03000c, 0x8f4200ac, 0x10400008, +0x3c034000, 0x8f420094, 0x431025, 0xafa20020, +0x8f42009c, 0x8f4300b0, 0x10000004, 0x431025, +0x8f420094, 0xafa20020, 0x8f42009c, 0xafa20024, +0x8f8200fc, 0x8fa30020, 0x8fa40024, 0xac430000, +0xac440004, 0x24420008, 0xaf8200f0, 0x8f42009c, +0x8f440270, 0x8f450274, 0x401821, 0x1021, +0xa32821, 0xa3302b, 0x822021, 0x862021, +0x32230060, 0x24020040, 0xaf440270, 0xaf450274, +0x10620017, 0x2c620041, 0x10400005, 0x24020020, +0x10620008, 0x24020001, 0x10000026, 0x0, +0x24020060, 0x10620019, 0x24020001, 0x10000021, +0x0, 0x8f420278, 0x8f43027c, 0x24630001, +0x2c640001, 0x441021, 0xaf420278, 0xaf43027c, +0x8f420278, 0x8f43027c, 0x10000016, 0x24020001, +0x8f420280, 0x8f430284, 0x24630001, 0x2c640001, +0x441021, 0xaf420280, 0xaf430284, 0x8f420280, +0x8f430284, 0x1000000b, 0x24020001, 0x8f420288, +0x8f43028c, 0x24630001, 0x2c640001, 0x441021, +0xaf420288, 0xaf43028c, 0x8f420288, 0x8f43028c, +0x24020001, 0xa34205c2, 0x8f420098, 0x3244ffff, +0x2406fff8, 0x8f45013c, 0x441021, 0x24420007, +0x461024, 0x24840007, 0xaf420094, 0x8f420090, +0x8f430094, 0x862024, 0x441023, 0x65182b, +0x14600005, 0xaf420090, 0x8f420094, 0x8f430144, +0x431023, 0xaf420094, 0x8f420094, 0x10000023, +0xaf40009c, 0x3247ffff, 0x50e00022, 0x32c20020, +0x14400002, 0x24020010, 0x24020002, 0xafa20010, +0x8f420030, 0xafa20014, 0x8f420010, 0xafa20018, 0x8f460098, 0x8f420108, 0x40f809, 0x0, -0x104000b7, 0x0, 0x8f42009c, 0x8f430094, -0x2421021, 0xaf42009c, 0xae03000c, 0x8f4200ac, -0x10400008, 0x3c034000, 0x8f420094, 0x431025, -0xafa20020, 0x8f42009c, 0x8f4300b0, 0x10000004, -0x431025, 0x8f420094, 0xafa20020, 0x8f42009c, -0xafa20024, 0x8f8200fc, 0x8fa30020, 0x8fa40024, -0xac430000, 0xac440004, 0x24420008, 0xaf8200f0, -0x8f42009c, 0x8f440260, 0x8f450264, 0x401821, -0x1021, 0xa32821, 0xa3302b, 0x822021, -0x862021, 0x32230060, 0x24020040, 0xaf440260, -0xaf450264, 0x10620017, 0x2c620041, 0x10400005, -0x24020020, 0x10620008, 0x24020001, 0x10000026, -0x0, 0x24020060, 0x10620019, 0x24020001, -0x10000021, 0x0, 0x8f420268, 0x8f43026c, -0x24630001, 0x2c640001, 0x441021, 0xaf420268, -0xaf43026c, 0x8f420268, 0x8f43026c, 0x10000016, -0x24020001, 0x8f420270, 0x8f430274, 0x24630001, -0x2c640001, 0x441021, 0xaf420270, 0xaf430274, -0x8f420270, 0x8f430274, 0x1000000b, 0x24020001, -0x8f420278, 0x8f43027c, 0x24630001, 0x2c640001, -0x441021, 0xaf420278, 0xaf43027c, 0x8f420278, -0x8f43027c, 0x24020001, 0xa34205b3, 0x8f420098, -0x3244ffff, 0x2406fff8, 0x8f450130, 0x441021, +0x1040003a, 0x3245ffff, 0x8f420098, 0x8f430090, +0x8f46013c, 0x451021, 0xaf420098, 0x8f42009c, +0x8f440098, 0xa34005c2, 0x651823, 0xaf430090, +0x451021, 0x86202b, 0x14800005, 0xaf42009c, +0x8f420098, 0x8f430144, 0x431023, 0xaf420098, +0x32c20020, 0x10400005, 0x0, 0x8f420358, +0x2442ffff, 0xaf420358, 0x8f420358, 0x8f420030, +0x8f430040, 0x24420001, 0x2463ffff, 0x431024, +0xaf420030, 0x8f420030, 0x14530018, 0x0, +0x8f420000, 0x10400007, 0x0, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x2403fff7, 0x431024, +0xaf820060, 0x8f420000, 0x10400003, 0x0, +0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf0038, +0x8fb30034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, +0x3e00008, 0x27bd0040, 0x3e00008, 0x0, +0x27bdffd0, 0x32c20020, 0xafbf002c, 0xafb20028, +0xafb10024, 0x10400004, 0xafb00020, 0x8f520028, +0x10000002, 0x0, 0x8f520020, 0x8f420030, +0x105200b5, 0x21100, 0x8f43001c, 0x628021, +0x8e040000, 0x8e050004, 0x96110008, 0x8f420090, +0x9607000a, 0x3226ffff, 0x46102a, 0x10400017, +0x0, 0x8f8200d8, 0x8f430098, 0x431023, +0x2442ff80, 0xaf420090, 0x8f420090, 0x2842ff81, +0x10400005, 0x0, 0x8f420090, 0x8f430144, +0x431021, 0xaf420090, 0x8f420090, 0x46102a, +0x10400006, 0x0, 0x8f420348, 0x24420001, +0xaf420348, 0x100000ab, 0x8f420348, 0x8f8600fc, +0x10c0000c, 0x0, 0x8f8200f4, 0x2403fff8, +0x431024, 0x461023, 0x218c3, 0x58600001, +0x24630100, 0x8f42008c, 0x43102b, 0x14400006, +0x712c2, 0x8f420344, 0x24420001, 0xaf420344, +0x10000098, 0x8f420344, 0x934305c2, 0x1060000f, +0x30460001, 0x8f420010, 0x34480400, 0x32c20008, +0x10400008, 0x30e20200, 0x10400006, 0x3c034000, +0x9602000e, 0xaf4300ac, 0x21400, 0x10000004, +0xaf4200b0, 0x10000002, 0xaf4000ac, 0x8f480010, +0x30e20004, 0x10400045, 0x3227ffff, 0x8f4900ac, +0x11200005, 0x30c200ff, 0x14400006, 0x24020040, +0x10000004, 0x24020008, 0x14400002, 0x24020020, +0x24020004, 0xafa20010, 0x8f430030, 0x11200004, +0xafa30014, 0x8f4200b0, 0x621025, 0xafa20014, +0x3c020002, 0x1021025, 0xafa20018, 0x8f460098, +0x8f420108, 0x40f809, 0x0, 0x10400069, +0x3224ffff, 0x8f42008c, 0x8f430094, 0x24420001, +0xaf42008c, 0x24020001, 0xae03000c, 0xa34205c2, +0x8f420098, 0x2406fff8, 0x8f45013c, 0x441021, 0x24420007, 0x461024, 0x24840007, 0xaf420094, 0x8f420090, 0x8f430094, 0x862024, 0x441023, 0x65182b, 0x14600005, 0xaf420090, 0x8f420094, -0x8f430138, 0x431023, 0xaf420094, 0x8f420094, -0x10000023, 0xaf40009c, 0x3247ffff, 0x50e00022, -0x32c20020, 0x14400002, 0x24020010, 0x24020002, -0xafa20010, 0x8f420030, 0xafa20014, 0x8f420010, -0xafa20018, 0x8f460098, 0x8f420108, 0x40f809, -0x0, 0x1040003a, 0x3245ffff, 0x8f420098, -0x8f430090, 0x8f460130, 0x451021, 0xaf420098, -0x8f42009c, 0x8f440098, 0xa34005b3, 0x651823, -0xaf430090, 0x451021, 0x86202b, 0x14800005, -0xaf42009c, 0x8f420098, 0x8f430138, 0x431023, -0xaf420098, 0x32c20020, 0x10400005, 0x0, -0x8f420348, 0x2442ffff, 0xaf420348, 0x8f420348, -0x8f420030, 0x8f430040, 0x24420001, 0x2463ffff, -0x431024, 0xaf420030, 0x8f420030, 0x14530018, -0x0, 0x8f420000, 0x10400007, 0x0, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x2403fff7, -0x431024, 0xaf820060, 0x8f420000, 0x10400003, -0x0, 0x10000002, 0xaf80004c, 0xaf800048, -0x8fbf0038, 0x8fb30034, 0x8fb20030, 0x8fb1002c, -0x8fb00028, 0x3e00008, 0x27bd0040, 0x3e00008, -0x0, 0x27bdffd0, 0x32c20020, 0xafbf002c, -0xafb20028, 0xafb10024, 0x10400004, 0xafb00020, -0x8f520028, 0x10000002, 0x0, 0x8f520020, -0x8f420030, 0x105200b5, 0x21100, 0x8f43001c, -0x628021, 0x8e040000, 0x8e050004, 0x96110008, -0x8f420090, 0x9607000a, 0x3226ffff, 0x46102a, -0x10400017, 0x0, 0x8f8200d8, 0x8f430098, -0x431023, 0x2442ff80, 0xaf420090, 0x8f420090, -0x2842ff81, 0x10400005, 0x0, 0x8f420090, -0x8f430138, 0x431021, 0xaf420090, 0x8f420090, -0x46102a, 0x10400006, 0x0, 0x8f420338, -0x24420001, 0xaf420338, 0x100000ab, 0x8f420338, -0x8f8600fc, 0x10c0000c, 0x0, 0x8f8200f4, -0x2403fff8, 0x431024, 0x461023, 0x218c3, -0x50600001, 0x24030100, 0x8f42008c, 0x43102b, -0x14400006, 0x712c2, 0x8f420334, 0x24420001, -0xaf420334, 0x10000098, 0x8f420334, 0x934305b3, -0x1060000f, 0x30460001, 0x8f420010, 0x34480400, -0x32c20008, 0x10400008, 0x30e20200, 0x10400006, -0x3c034000, 0x9602000e, 0xaf4300ac, 0x21400, -0x10000004, 0xaf4200b0, 0x10000002, 0xaf4000ac, -0x8f480010, 0x30e20004, 0x10400045, 0x3227ffff, -0x8f4900ac, 0x11200005, 0x30c200ff, 0x14400006, -0x24020040, 0x10000004, 0x24020008, 0x14400002, -0x24020020, 0x24020004, 0xafa20010, 0x8f430030, -0x11200004, 0xafa30014, 0x8f4200b0, 0x621025, -0xafa20014, 0x3c020002, 0x1021025, 0xafa20018, +0x8f430144, 0x431023, 0xaf420094, 0x8f430094, +0x8f420140, 0x43102b, 0x10400009, 0x0, +0x8f43013c, 0x8f440094, 0x8f420090, 0x8f450138, +0x641823, 0x431023, 0xaf420090, 0xaf450094, +0x8f420094, 0x1000001f, 0xaf420098, 0x10e0001d, +0x30c200ff, 0x14400002, 0x24020010, 0x24020002, +0xafa20010, 0x8f420030, 0xafa80018, 0xafa20014, 0x8f460098, 0x8f420108, 0x40f809, 0x0, -0x10400069, 0x3224ffff, 0x8f42008c, 0x8f430094, -0x24420001, 0xaf42008c, 0x24020001, 0xae03000c, -0xa34205b3, 0x8f420098, 0x2406fff8, 0x8f450130, -0x441021, 0x24420007, 0x461024, 0x24840007, -0xaf420094, 0x8f420090, 0x8f430094, 0x862024, -0x441023, 0x65182b, 0x14600005, 0xaf420090, -0x8f420094, 0x8f430138, 0x431023, 0xaf420094, -0x8f430094, 0x8f420134, 0x43102b, 0x10400009, -0x0, 0x8f430130, 0x8f440094, 0x8f420090, -0x8f45012c, 0x641823, 0x431023, 0xaf420090, -0xaf450094, 0x8f420094, 0x1000001f, 0xaf420098, -0x10e0001d, 0x30c200ff, 0x14400002, 0x24020010, -0x24020002, 0xafa20010, 0x8f420030, 0xafa80018, -0xafa20014, 0x8f460098, 0x8f420108, 0x40f809, -0x0, 0x10400030, 0x3225ffff, 0x8f420098, -0x8f440130, 0x451021, 0xaf420098, 0x8f420090, -0x8f430098, 0xa34005b3, 0x451023, 0x64182b, -0x14600005, 0xaf420090, 0x8f420098, 0x8f430138, -0x431023, 0xaf420098, 0x8f420030, 0x8f430040, -0x24420001, 0x2463ffff, 0x431024, 0xaf420030, -0x8f420030, 0x14520018, 0x0, 0x8f420000, -0x10400007, 0x0, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x2403fff7, 0x431024, 0xaf820060, -0x8f420000, 0x10400003, 0x0, 0x10000002, -0xaf80004c, 0xaf800048, 0x8fbf002c, 0x8fb20028, -0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0030, -0x3e00008, 0x0, 0x27bdffd8, 0x3c020001, -0x34422ec0, 0xafbf0020, 0x8f4300f0, 0x8f840108, -0x2e21021, 0x54620004, 0x24620008, 0x3c020001, -0x34422cc0, 0x2e21021, 0x401821, 0xaf4300f0, -0xac600000, 0x8f4200ec, 0x8c660004, 0x14620004, -0x3c020001, 0x24820020, 0x1000000f, 0xaf820108, -0x8f4300f0, 0x34422ec0, 0x2e21021, 0x54620004, -0x24620008, 0x3c020001, 0x34422cc0, 0x2e21021, -0x401821, 0x8c620004, 0x21140, 0x821021, -0xaf820108, 0xac600000, 0x8c850018, 0x30a20036, -0x1040006c, 0x30a20001, 0x8c82001c, 0x8f430040, -0x8f440034, 0x24420001, 0x2463ffff, 0x431024, -0x862021, 0xaf42002c, 0x30a20030, 0x14400006, -0xaf440034, 0x8f420034, 0x8c03023c, 0x43102b, -0x144000c6, 0x0, 0x32c20010, 0x10400028, -0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c, -0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010, -0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, -0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, -0x370821, 0xa02240f1, 0x8f820124, 0xafa20010, -0x8f820128, 0x3c040001, 0x24843844, 0xafa20014, -0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029bb, -0x34a51100, 0x10000036, 0x0, 0x8f4202f0, -0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0, -0x24020001, 0xa34205b2, 0x10000026, 0xaf430038, -0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c, -0x8f860120, 0x24020020, 0xafa20010, 0xafa30014, +0x10400030, 0x3225ffff, 0x8f420098, 0x8f44013c, +0x451021, 0xaf420098, 0x8f420090, 0x8f430098, +0xa34005c2, 0x451023, 0x64182b, 0x14600005, +0xaf420090, 0x8f420098, 0x8f430144, 0x431023, +0xaf420098, 0x8f420030, 0x8f430040, 0x24420001, +0x2463ffff, 0x431024, 0xaf420030, 0x8f420030, +0x14520018, 0x0, 0x8f420000, 0x10400007, +0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, +0x0, 0x10000005, 0x0, 0xaf800048, +0x8f820048, 0x1040fffd, 0x0, 0x8f820060, +0x2403fff7, 0x431024, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x10000002, 0xaf80004c, +0xaf800048, 0x8fbf002c, 0x8fb20028, 0x8fb10024, +0x8fb00020, 0x3e00008, 0x27bd0030, 0x3e00008, +0x0, 0x27bdffd8, 0x3c020001, 0x34422ec0, +0xafbf0020, 0x8f4300f0, 0x8f840108, 0x2e21021, +0x54620004, 0x24620008, 0x3c020001, 0x34422cc0, +0x2e21021, 0x401821, 0xaf4300f0, 0xac600000, +0x8f4200ec, 0x8c660004, 0x14620004, 0x3c020001, +0x24820020, 0x1000000f, 0xaf820108, 0x8f4300f0, +0x34422ec0, 0x2e21021, 0x54620004, 0x24620008, +0x3c020001, 0x34422cc0, 0x2e21021, 0x401821, +0x8c620004, 0x21140, 0x821021, 0xaf820108, +0xac600000, 0x8c850018, 0x30a20036, 0x1040006c, +0x30a20001, 0x8c82001c, 0x8f430040, 0x8f440034, +0x24420001, 0x2463ffff, 0x431024, 0x862021, +0xaf42002c, 0x30a20030, 0x14400006, 0xaf440034, +0x8f420034, 0x8c03023c, 0x43102b, 0x144000ca, +0x0, 0x32c20010, 0x10400028, 0x24070008, +0x8f440170, 0x8f450174, 0x8f43002c, 0x8f48000c, +0x8f860120, 0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, 0x370821, -0xa02240f0, 0x8f820124, 0xafa20010, 0x8f820128, -0x3c040001, 0x24843838, 0xafa20014, 0x8f46002c, -0x8f870120, 0x3c050009, 0xc0029bb, 0x34a50900, -0x1000000f, 0x0, 0x8f4202f0, 0x24420001, -0xaf4202f0, 0x8f4202f0, 0x8f42002c, 0xa34005b2, -0xaf420038, 0x3c010001, 0x370821, 0xa02040f1, -0x3c010001, 0x370821, 0xa02040f0, 0xaf400034, -0x8f420304, 0x24420001, 0xaf420304, 0x1000006b, -0x8f420304, 0x10400022, 0x30a27000, 0x8c85001c, -0x8f420028, 0xa22023, 0x4810003, 0x0, -0x8f420040, 0x822021, 0x8f420348, 0x8f430000, -0xaf450028, 0x441021, 0x10600007, 0xaf420348, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x34420008, -0xaf820060, 0x8f420000, 0x10400003, 0x0, -0x1000004a, 0xaf80004c, 0x10000048, 0xaf800048, -0x1040002f, 0x30a21000, 0x1040000c, 0x30a24000, -0x8c83001c, 0x8f420050, 0x622023, 0x4820001, -0x24840200, 0x8f42034c, 0x441021, 0xaf42034c, -0x8f420358, 0x1000001a, 0xaf430050, 0x1040000c, -0x32c28000, 0x8c83001c, 0x8f420070, 0x622023, -0x4820001, 0x24840400, 0x8f420354, 0x441021, -0xaf420354, 0x8f420358, 0x1000000d, 0xaf430070, -0x1040000e, 0x3c020800, 0x8c83001c, 0x8f420060, -0x622023, 0x4820001, 0x24840100, 0x8f420350, -0x441021, 0xaf420350, 0x8f420358, 0xaf430060, -0x441021, 0xaf420358, 0x3c020800, 0x2c21024, -0x5040001a, 0x36940040, 0x10000018, 0x0, -0x30a20100, 0x10400015, 0x0, 0x3c020001, -0x8c423cc4, 0x1040000c, 0x0, 0x274301b0, -0x24650400, 0x65102b, 0x10400007, 0x26e40028, -0x8c820000, 0xac620000, 0x24630004, 0x65102b, -0x1440fffb, 0x24840004, 0x8f4202cc, 0xa34005b6, -0x24420001, 0xaf4202cc, 0x8f4202cc, 0x8fbf0020, -0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x27bdffa8, 0xafbf0050, 0xafbe004c, 0xafb50048, -0xafb30044, 0xafb20040, 0xafb1003c, 0xafb00038, -0x8f910108, 0x26220020, 0xaf820108, 0x8e320018, -0xa821, 0x32420024, 0x104001b7, 0xf021, -0x8e26001c, 0x8f42001c, 0x61900, 0x431021, -0x8c50000c, 0x9603000c, 0x962d0016, 0x9453000a, -0x2c6205dd, 0x10400015, 0x2821, 0x32c20040, -0x10400015, 0x24020800, 0x96030014, 0x14620012, -0x3402aaaa, 0x9603000e, 0x14620007, 0x2021, -0x96030010, 0x24020300, 0x14620004, 0x801021, -0x96020012, 0x2c440001, 0x801021, 0x54400006, -0x24050016, 0x10000004, 0x0, 0x24020800, -0x50620001, 0x2405000e, 0x934205b4, 0x14400008, -0x5821, 0x240b0001, 0x32620180, 0xaf4500a8, -0xaf5000a0, 0x10400002, 0xaf4600a4, 0xa34b05b4, -0x10a00085, 0x2054021, 0x91020000, 0x3821, -0x3042000f, 0x25080, 0x32c20002, 0x10400012, -0x10a1821, 0x32620002, 0x10400010, 0x32c20001, -0x1002021, 0x94820000, 0x24840002, 0xe23821, -0x83102b, 0x1440fffb, 0x30e2ffff, 0x71c02, +0xa02240f1, 0x8f820124, 0xafa20010, 0x8f820128, +0x3c040001, 0x24846854, 0xafa20014, 0x8f46002c, +0x8f870120, 0x3c050009, 0xc002b17, 0x34a51100, +0x10000036, 0x0, 0x8f420300, 0x8f43002c, +0x24420001, 0xaf420300, 0x8f420300, 0x24020001, +0xa34205c1, 0x10000026, 0xaf430038, 0x8f440170, +0x8f450174, 0x8f43002c, 0x8f48000c, 0x8f860120, +0x24020020, 0xafa20010, 0xafa30014, 0xafa80018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, +0x24020001, 0x3c010001, 0x370821, 0xa02240f0, +0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001, +0x24846848, 0xafa20014, 0x8f46002c, 0x8f870120, +0x3c050009, 0xc002b17, 0x34a50900, 0x1000000f, +0x0, 0x8f420300, 0x24420001, 0xaf420300, +0x8f420300, 0x8f42002c, 0xa34005c1, 0xaf420038, +0x3c010001, 0x370821, 0xa02040f1, 0x3c010001, +0x370821, 0xa02040f0, 0xaf400034, 0x8f420314, +0x24420001, 0xaf420314, 0x1000006f, 0x8f420314, +0x10400022, 0x30a27000, 0x8c85001c, 0x8f420028, +0xa22023, 0x4810003, 0x0, 0x8f420040, +0x822021, 0x8f420358, 0x8f430000, 0xaf450028, +0x441021, 0x10600007, 0xaf420358, 0xaf80004c, +0x8f82004c, 0x1040fffd, 0x0, 0x10000005, +0x0, 0xaf800048, 0x8f820048, 0x1040fffd, +0x0, 0x8f820060, 0x34420008, 0xaf820060, +0x8f420000, 0x10400003, 0x0, 0x1000004e, +0xaf80004c, 0x1000004c, 0xaf800048, 0x1040002f, +0x30a21000, 0x1040000c, 0x30a24000, 0x8c83001c, +0x8f420050, 0x622023, 0x4820001, 0x24840200, +0x8f42035c, 0x441021, 0xaf42035c, 0x8f420368, +0x1000001a, 0xaf430050, 0x1040000c, 0x32c28000, +0x8c83001c, 0x8f420070, 0x622023, 0x4820001, +0x24840400, 0x8f420364, 0x441021, 0xaf420364, +0x8f420368, 0x1000000d, 0xaf430070, 0x1040000e, +0x3c020800, 0x8c83001c, 0x8f420060, 0x622023, +0x4820001, 0x24840100, 0x8f420360, 0x441021, +0xaf420360, 0x8f420368, 0xaf430060, 0x441021, +0xaf420368, 0x3c020800, 0x2c21024, 0x5040001e, +0x36940040, 0x1000001c, 0x0, 0x30a20100, +0x10400019, 0x0, 0x3c020001, 0x8c426d44, +0x1040000d, 0x274301c0, 0x24650400, 0x65102b, +0x10400007, 0x26e40028, 0x8c820000, 0xac620000, +0x24630004, 0x65102b, 0x1440fffb, 0x24840004, +0x10000002, 0x274401c0, 0x26e40028, 0xc002bb4, +0x0, 0x8f4202dc, 0xa34005c5, 0x24420001, +0xaf4202dc, 0x8f4202dc, 0x8fbf0020, 0x3e00008, +0x27bd0028, 0x3e00008, 0x0, 0x27bdffa8, +0xafbf0050, 0xafbe004c, 0xafb50048, 0xafb30044, +0xafb20040, 0xafb1003c, 0xafb00038, 0x8f910108, +0x26220020, 0xaf820108, 0x8e320018, 0xa821, +0x32420024, 0x104001ba, 0xf021, 0x8e26001c, +0x8f43001c, 0x61100, 0x621821, 0x8c70000c, +0x9604000c, 0x962d0016, 0x9473000a, 0x2c8305dd, +0x38828870, 0x2c420001, 0x621825, 0x10600015, +0x2821, 0x32c20040, 0x10400015, 0x24020800, +0x96030014, 0x14620012, 0x3402aaaa, 0x9603000e, +0x14620007, 0x2021, 0x96030010, 0x24020300, +0x14620004, 0x801021, 0x96020012, 0x2c440001, +0x801021, 0x54400006, 0x24050016, 0x10000004, +0x0, 0x24020800, 0x50820001, 0x2405000e, +0x934205c3, 0x14400008, 0x5821, 0x240b0001, +0x32620180, 0xaf4500a8, 0xaf5000a0, 0x10400002, +0xaf4600a4, 0xa34b05c3, 0x10a00085, 0x2054021, +0x91020000, 0x3821, 0x3042000f, 0x25080, +0x32c20002, 0x10400012, 0x10a1821, 0x32620002, +0x10400010, 0x32c20001, 0x1002021, 0x94820000, +0x24840002, 0xe23821, 0x83102b, 0x1440fffb, +0x30e2ffff, 0x71c02, 0x623821, 0x71c02, +0x30e2ffff, 0x623821, 0x71027, 0xa502000a, +0x32c20001, 0x1040006a, 0x32620001, 0x10400068, +0x0, 0x8f4200a8, 0x10400065, 0x0, +0x8f4200a0, 0x8f4300a8, 0x431021, 0x904c0009, +0x318900ff, 0x39230006, 0x3182b, 0x39220011, +0x2102b, 0x621824, 0x1060000c, 0x3c050006, +0x8f4200a4, 0x3c040001, 0x24846864, 0xafa20010, +0x8f4200a0, 0x34a54600, 0x1203821, 0xc002b17, +0xafa20014, 0x1000004e, 0x0, 0x32c20004, +0x14400013, 0x2821, 0x316200ff, 0x14400004, +0x0, 0x95020002, 0x1000000d, 0x4a2823, +0x9505000c, 0x9502000e, 0x95030010, 0xa22821, +0xa32821, 0x95030012, 0x91040009, 0x95020002, +0xa32821, 0xa42821, 0x4a1023, 0xa22821, +0x2002021, 0x94820000, 0x24840002, 0xe23821, +0x88102b, 0x1440fffb, 0x71c02, 0x30e2ffff, 0x623821, 0x71c02, 0x30e2ffff, 0x623821, -0x71027, 0xa502000a, 0x32c20001, 0x1040006a, -0x32620001, 0x10400068, 0x0, 0x8f4200a8, -0x10400065, 0x0, 0x8f4200a0, 0x8f4300a8, -0x431021, 0x904c0009, 0x318900ff, 0x39230006, -0x3182b, 0x39220011, 0x2102b, 0x621824, -0x1060000c, 0x3c050006, 0x8f4200a4, 0x3c040001, -0x24843854, 0xafa20010, 0x8f4200a0, 0x34a54600, -0x1203821, 0xc0029bb, 0xafa20014, 0x1000004e, -0x0, 0x32c20004, 0x14400013, 0x2821, -0x316200ff, 0x14400004, 0x0, 0x95020002, -0x1000000d, 0x4a2823, 0x9505000c, 0x9502000e, -0x95030010, 0xa22821, 0xa32821, 0x95030012, -0x91040009, 0x95020002, 0xa32821, 0xa42821, -0x4a1023, 0xa22821, 0x2002021, 0x94820000, -0x24840002, 0xe23821, 0x88102b, 0x1440fffb, -0x71c02, 0x30e2ffff, 0x623821, 0x71c02, -0x30e2ffff, 0x623821, 0x1a52821, 0x51c02, -0x30a2ffff, 0x622821, 0x51c02, 0x30a2ffff, -0x622821, 0xa72823, 0x51402, 0xa22821, -0x30a5ffff, 0x50a00001, 0x3405ffff, 0x316200ff, -0x14400008, 0x318300ff, 0x8f4300a0, 0x8f4200a8, -0x624021, 0x91020000, 0x3042000f, 0x25080, -0x318300ff, 0x24020006, 0x14620003, 0x10a1021, -0x10000002, 0x24440010, 0x24440006, 0x316200ff, -0x14400006, 0x0, 0x94820000, 0xa22821, -0x51c02, 0x30a2ffff, 0x622821, 0x934205b4, -0x10400003, 0x32620100, 0x50400003, 0xa4850000, -0x52827, 0xa4850000, 0x9622000e, 0x8f43009c, -0x621821, 0x32a200ff, 0x10400007, 0xaf43009c, -0x3c024000, 0x2021025, 0xafa20020, 0x8f42009c, -0x10000003, 0x5e1025, 0xafb00020, 0x8f42009c, -0xafa20024, 0x32620080, 0x10400010, 0x32620100, -0x8f4200b4, 0x24430001, 0x210c0, 0x571021, -0xaf4300b4, 0x8fa30020, 0x8fa40024, 0x3c010001, -0x220821, 0xac2338e8, 0x3c010001, 0x220821, -0xac2438ec, 0x100000a5, 0x32c20020, 0x10400064, -0x0, 0x8f4200b4, 0x24430001, 0x210c0, -0x571021, 0xaf4300b4, 0x8fa30020, 0x8fa40024, -0x3c010001, 0x220821, 0xac2338e8, 0x3c010001, -0x220821, 0xac2438ec, 0x8f4200b4, 0x10400051, -0x3821, 0x3c090001, 0x352938e8, 0x3c08001f, -0x3508ffff, 0x240bffff, 0x340affff, 0x710c0, -0x571021, 0x491021, 0x8c430000, 0x8c440004, -0xafa30028, 0xafa4002c, 0x8f8200fc, 0x8fa30028, -0x8fa4002c, 0xac430000, 0xac440004, 0x24420008, -0xaf8200f0, 0x8f42008c, 0x2442ffff, 0xaf42008c, -0x97a2002e, 0x8f440260, 0x8f450264, 0x401821, -0x1021, 0xa32821, 0xa3302b, 0x822021, -0x862021, 0xaf440260, 0xaf450264, 0x8fa20028, -0x481024, 0x90430000, 0x30630001, 0x1460000b, -0x402021, 0x8f420268, 0x8f43026c, 0x24630001, -0x2c640001, 0x441021, 0xaf420268, 0xaf43026c, -0x8f420268, 0x1000001a, 0x8f43026c, 0x8c820000, -0x144b000e, 0x0, 0x94820004, 0x144a000b, -0x0, 0x8f420278, 0x8f43027c, 0x24630001, -0x2c640001, 0x441021, 0xaf420278, 0xaf43027c, -0x8f420278, 0x1000000a, 0x8f43027c, 0x8f420270, -0x8f430274, 0x24630001, 0x2c640001, 0x441021, -0xaf420270, 0xaf430274, 0x8f420270, 0x8f430274, -0x8f4200b4, 0x24e70001, 0xe2102b, 0x1440ffb8, -0x710c0, 0xa34005b4, 0x1000003f, 0xaf4000b4, -0x8f8200fc, 0x8fa30020, 0x8fa40024, 0xac430000, -0xac440004, 0x24420008, 0xaf8200f0, 0x8f42009c, -0x8f46008c, 0x8f440260, 0x8f450264, 0x401821, -0x1021, 0x24c6ffff, 0xaf46008c, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xaf440260, -0xaf450264, 0x92020000, 0x30420001, 0x1440000c, -0x2402ffff, 0x8f420268, 0x8f43026c, 0x24630001, -0x2c640001, 0x441021, 0xaf420268, 0xaf43026c, -0x8f420268, 0x8f43026c, 0x1000001c, 0x32c20020, -0x8e030000, 0x1462000f, 0x3402ffff, 0x96030004, -0x1462000c, 0x0, 0x8f420278, 0x8f43027c, -0x24630001, 0x2c640001, 0x441021, 0xaf420278, -0xaf43027c, 0x8f420278, 0x8f43027c, 0x1000000b, -0x32c20020, 0x8f420270, 0x8f430274, 0x24630001, -0x2c640001, 0x441021, 0xaf420270, 0xaf430274, -0x8f420270, 0x8f430274, 0x32c20020, 0x10400005, -0xaf40009c, 0x8f420348, 0x2442ffff, 0xaf420348, -0x8f420348, 0x8e22001c, 0x8f430040, 0x24420001, -0x2463ffff, 0x431024, 0xaf42002c, 0x32420060, -0x14400008, 0x32c20010, 0x8f420034, 0x24420001, -0xaf420034, 0x8c03023c, 0x43102b, 0x14400114, -0x32c20010, 0x10400018, 0x24070008, 0x8f440160, -0x8f450164, 0x8f43002c, 0x8f48000c, 0x8f860120, -0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, -0x8f42010c, 0x40f809, 0x24c6001c, 0x10400047, -0x24020001, 0x8f4202f0, 0x8f43002c, 0x24420001, -0xaf4202f0, 0x8f4202f0, 0x24020001, 0xa34205b2, -0x1000007c, 0xaf430038, 0x8f440160, 0x8f450164, -0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020020, -0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, -0x40f809, 0x24c6001c, 0x10400057, 0x24020001, -0x10000065, 0x0, 0x32420012, 0x10400075, -0x32420001, 0x9622000e, 0x8f43009c, 0x621821, -0x32c20020, 0x10400005, 0xaf43009c, 0x8f420348, -0x2442ffff, 0xaf420348, 0x8f420348, 0x8e22001c, +0x1a52821, 0x51c02, 0x30a2ffff, 0x622821, +0x51c02, 0x30a2ffff, 0x622821, 0xa72823, +0x51402, 0xa22821, 0x30a5ffff, 0x50a00001, +0x3405ffff, 0x316200ff, 0x14400008, 0x318300ff, +0x8f4300a0, 0x8f4200a8, 0x624021, 0x91020000, +0x3042000f, 0x25080, 0x318300ff, 0x24020006, +0x14620003, 0x10a1021, 0x10000002, 0x24440010, +0x24440006, 0x316200ff, 0x14400006, 0x0, +0x94820000, 0xa22821, 0x51c02, 0x30a2ffff, +0x622821, 0x934205c3, 0x10400003, 0x32620100, +0x50400003, 0xa4850000, 0x52827, 0xa4850000, +0x9622000e, 0x8f43009c, 0x621821, 0x32a200ff, +0x10400007, 0xaf43009c, 0x3c024000, 0x2021025, +0xafa20020, 0x8f42009c, 0x10000003, 0x5e1025, +0xafb00020, 0x8f42009c, 0xafa20024, 0x32620080, +0x10400010, 0x32620100, 0x8f4200b4, 0x24430001, +0x210c0, 0x571021, 0xaf4300b4, 0x8fa30020, +0x8fa40024, 0x3c010001, 0x220821, 0xac2338e8, +0x3c010001, 0x220821, 0xac2438ec, 0x100000a5, +0x32c20020, 0x10400064, 0x0, 0x8f4200b4, +0x24430001, 0x210c0, 0x571021, 0xaf4300b4, +0x8fa30020, 0x8fa40024, 0x3c010001, 0x220821, +0xac2338e8, 0x3c010001, 0x220821, 0xac2438ec, +0x8f4200b4, 0x10400051, 0x3821, 0x3c090001, +0x352938e8, 0x3c08001f, 0x3508ffff, 0x240bffff, +0x340affff, 0x710c0, 0x571021, 0x491021, +0x8c430000, 0x8c440004, 0xafa30028, 0xafa4002c, +0x8f8200fc, 0x8fa30028, 0x8fa4002c, 0xac430000, +0xac440004, 0x24420008, 0xaf8200f0, 0x8f42008c, +0x2442ffff, 0xaf42008c, 0x97a2002e, 0x8f440270, +0x8f450274, 0x401821, 0x1021, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xaf440270, +0xaf450274, 0x8fa20028, 0x481024, 0x90430000, +0x30630001, 0x1460000b, 0x402021, 0x8f420278, +0x8f43027c, 0x24630001, 0x2c640001, 0x441021, +0xaf420278, 0xaf43027c, 0x8f420278, 0x1000001a, +0x8f43027c, 0x8c820000, 0x144b000e, 0x0, +0x94820004, 0x144a000b, 0x0, 0x8f420288, +0x8f43028c, 0x24630001, 0x2c640001, 0x441021, +0xaf420288, 0xaf43028c, 0x8f420288, 0x1000000a, +0x8f43028c, 0x8f420280, 0x8f430284, 0x24630001, +0x2c640001, 0x441021, 0xaf420280, 0xaf430284, +0x8f420280, 0x8f430284, 0x8f4200b4, 0x24e70001, +0xe2102b, 0x1440ffb8, 0x710c0, 0xa34005c3, +0x1000003f, 0xaf4000b4, 0x8f8200fc, 0x8fa30020, +0x8fa40024, 0xac430000, 0xac440004, 0x24420008, +0xaf8200f0, 0x8f42009c, 0x8f46008c, 0x8f440270, +0x8f450274, 0x401821, 0x1021, 0x24c6ffff, +0xaf46008c, 0xa32821, 0xa3302b, 0x822021, +0x862021, 0xaf440270, 0xaf450274, 0x92020000, +0x30420001, 0x1440000c, 0x2402ffff, 0x8f420278, +0x8f43027c, 0x24630001, 0x2c640001, 0x441021, +0xaf420278, 0xaf43027c, 0x8f420278, 0x8f43027c, +0x1000001c, 0x32c20020, 0x8e030000, 0x1462000f, +0x3402ffff, 0x96030004, 0x1462000c, 0x0, +0x8f420288, 0x8f43028c, 0x24630001, 0x2c640001, +0x441021, 0xaf420288, 0xaf43028c, 0x8f420288, +0x8f43028c, 0x1000000b, 0x32c20020, 0x8f420280, +0x8f430284, 0x24630001, 0x2c640001, 0x441021, +0xaf420280, 0xaf430284, 0x8f420280, 0x8f430284, +0x32c20020, 0x10400005, 0xaf40009c, 0x8f420358, +0x2442ffff, 0xaf420358, 0x8f420358, 0x8e22001c, 0x8f430040, 0x24420001, 0x2463ffff, 0x431024, -0xaf42002c, 0x32420010, 0x14400008, 0x32c20010, +0xaf42002c, 0x32420060, 0x14400008, 0x32c20010, 0x8f420034, 0x24420001, 0xaf420034, 0x8c03023c, -0x43102b, 0x144000ce, 0x32c20010, 0x10400028, -0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c, +0x43102b, 0x14400118, 0x32c20010, 0x10400018, +0x24070008, 0x8f440170, 0x8f450174, 0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, -0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, -0x370821, 0xa02240f1, 0x8f820124, 0xafa20010, -0x8f820128, 0x3c040001, 0x24843844, 0xafa20014, -0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029bb, -0x34a51100, 0x10000036, 0x0, 0x8f4202f0, -0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0, -0x24020001, 0xa34205b2, 0x10000026, 0xaf430038, -0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c, +0x24c6001c, 0x10400047, 0x24020001, 0x8f420300, +0x8f43002c, 0x24420001, 0xaf420300, 0x8f420300, +0x24020001, 0xa34205c1, 0x1000007c, 0xaf430038, +0x8f440170, 0x8f450174, 0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c, -0x14400011, 0x24020001, 0x3c010001, 0x370821, -0xa02240f0, 0x8f820124, 0xafa20010, 0x8f820128, -0x3c040001, 0x24843838, 0xafa20014, 0x8f46002c, -0x8f870120, 0x3c050009, 0xc0029bb, 0x34a50900, -0x1000000f, 0x0, 0x8f4202f0, 0x24420001, -0xaf4202f0, 0x8f4202f0, 0x8f42002c, 0xa34005b2, -0xaf420038, 0x3c010001, 0x370821, 0xa02040f1, -0x3c010001, 0x370821, 0xa02040f0, 0xaf400034, -0x8f420304, 0x24420001, 0xaf420304, 0x10000074, -0x8f420304, 0x10400022, 0x32427000, 0x8e25001c, -0x8f420028, 0xa22023, 0x4810003, 0x0, -0x8f420040, 0x822021, 0x8f420348, 0x8f430000, -0xaf450028, 0x441021, 0x10600007, 0xaf420348, -0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, -0x10000005, 0x0, 0xaf800048, 0x8f820048, -0x1040fffd, 0x0, 0x8f820060, 0x34420008, -0xaf820060, 0x8f420000, 0x10400003, 0x0, -0x10000053, 0xaf80004c, 0x10000051, 0xaf800048, -0x1040002f, 0x32421000, 0x1040000c, 0x32424000, -0x8e23001c, 0x8f420050, 0x622023, 0x4820001, -0x24840200, 0x8f42034c, 0x441021, 0xaf42034c, -0x8f420358, 0x1000001a, 0xaf430050, 0x1040000c, -0x32c28000, 0x8e23001c, 0x8f420070, 0x622023, -0x4820001, 0x24840400, 0x8f420354, 0x441021, -0xaf420354, 0x8f420358, 0x1000000d, 0xaf430070, -0x1040000e, 0x3c020800, 0x8e23001c, 0x8f420060, -0x622023, 0x4820001, 0x24840100, 0x8f420350, -0x441021, 0xaf420350, 0x8f420358, 0xaf430060, -0x441021, 0xaf420358, 0x3c020800, 0x2c21024, -0x50400023, 0x36940040, 0x10000021, 0x0, -0x32420048, 0x10400007, 0x24150001, 0x8e22001c, -0x3c03ffff, 0x43f024, 0x3042ffff, 0x1000fd78, -0xae22001c, 0x32420100, 0x10400015, 0x0, -0x3c020001, 0x8c423cc4, 0x1040000c, 0x0, -0x274301b0, 0x24650400, 0x65102b, 0x10400007, -0x26e40028, 0x8c820000, 0xac620000, 0x24630004, -0x65102b, 0x1440fffb, 0x24840004, 0x8f4202cc, -0xa34005b6, 0x24420001, 0xaf4202cc, 0x8f4202cc, -0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044, -0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008, -0x27bd0058, 0x3e00008, 0x0, 0x8f8400e0, -0x8f8800c4, 0x8f8300e8, 0x2402fff8, 0x823824, -0xe32023, 0x2c821000, 0x50400001, 0x24841000, -0x420c2, 0x801821, 0x8f440248, 0x8f45024c, +0x10400057, 0x24020001, 0x10000065, 0x0, +0x32420012, 0x10400075, 0x32420001, 0x9622000e, +0x8f43009c, 0x621821, 0x32c20020, 0x10400005, +0xaf43009c, 0x8f420358, 0x2442ffff, 0xaf420358, +0x8f420358, 0x8e22001c, 0x8f430040, 0x24420001, +0x2463ffff, 0x431024, 0xaf42002c, 0x32420010, +0x14400008, 0x32c20010, 0x8f420034, 0x24420001, +0xaf420034, 0x8c03023c, 0x43102b, 0x144000d2, +0x32c20010, 0x10400028, 0x24070008, 0x8f440170, +0x8f450174, 0x8f43002c, 0x8f48000c, 0x8f860120, +0x24020080, 0xafa20010, 0xafa30014, 0xafa80018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, +0x24020001, 0x3c010001, 0x370821, 0xa02240f1, +0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001, +0x24846854, 0xafa20014, 0x8f46002c, 0x8f870120, +0x3c050009, 0xc002b17, 0x34a51100, 0x10000036, +0x0, 0x8f420300, 0x8f43002c, 0x24420001, +0xaf420300, 0x8f420300, 0x24020001, 0xa34205c1, +0x10000026, 0xaf430038, 0x8f440170, 0x8f450174, +0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020020, +0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, +0x40f809, 0x24c6001c, 0x14400011, 0x24020001, +0x3c010001, 0x370821, 0xa02240f0, 0x8f820124, +0xafa20010, 0x8f820128, 0x3c040001, 0x24846848, +0xafa20014, 0x8f46002c, 0x8f870120, 0x3c050009, +0xc002b17, 0x34a50900, 0x1000000f, 0x0, +0x8f420300, 0x24420001, 0xaf420300, 0x8f420300, +0x8f42002c, 0xa34005c1, 0xaf420038, 0x3c010001, +0x370821, 0xa02040f1, 0x3c010001, 0x370821, +0xa02040f0, 0xaf400034, 0x8f420314, 0x24420001, +0xaf420314, 0x10000078, 0x8f420314, 0x10400022, +0x32427000, 0x8e25001c, 0x8f420028, 0xa22023, +0x4810003, 0x0, 0x8f420040, 0x822021, +0x8f420358, 0x8f430000, 0xaf450028, 0x441021, +0x10600007, 0xaf420358, 0xaf80004c, 0x8f82004c, +0x1040fffd, 0x0, 0x10000005, 0x0, +0xaf800048, 0x8f820048, 0x1040fffd, 0x0, +0x8f820060, 0x34420008, 0xaf820060, 0x8f420000, +0x10400003, 0x0, 0x10000057, 0xaf80004c, +0x10000055, 0xaf800048, 0x1040002f, 0x32421000, +0x1040000c, 0x32424000, 0x8e23001c, 0x8f420050, +0x622023, 0x4820001, 0x24840200, 0x8f42035c, +0x441021, 0xaf42035c, 0x8f420368, 0x1000001a, +0xaf430050, 0x1040000c, 0x32c28000, 0x8e23001c, +0x8f420070, 0x622023, 0x4820001, 0x24840400, +0x8f420364, 0x441021, 0xaf420364, 0x8f420368, +0x1000000d, 0xaf430070, 0x1040000e, 0x3c020800, +0x8e23001c, 0x8f420060, 0x622023, 0x4820001, +0x24840100, 0x8f420360, 0x441021, 0xaf420360, +0x8f420368, 0xaf430060, 0x441021, 0xaf420368, +0x3c020800, 0x2c21024, 0x50400027, 0x36940040, +0x10000025, 0x0, 0x32420048, 0x10400007, +0x24150001, 0x8e22001c, 0x3c03ffff, 0x43f024, +0x3042ffff, 0x1000fd75, 0xae22001c, 0x32420100, +0x10400019, 0x0, 0x3c020001, 0x8c426d44, +0x1040000d, 0x274301c0, 0x24650400, 0x65102b, +0x10400007, 0x26e40028, 0x8c820000, 0xac620000, +0x24630004, 0x65102b, 0x1440fffb, 0x24840004, +0x10000002, 0x274401c0, 0x26e40028, 0xc002bb4, +0x0, 0x8f4202dc, 0xa34005c5, 0x24420001, +0xaf4202dc, 0x8f4202dc, 0x8fbf0050, 0x8fbe004c, +0x8fb50048, 0x8fb30044, 0x8fb20040, 0x8fb1003c, +0x8fb00038, 0x3e00008, 0x27bd0058, 0x3e00008, +0x0, 0x0, 0x0, 0x8f8300e4, +0x8f8200e0, 0x2404fff8, 0x441024, 0x621026, +0x2102b, 0x21023, 0x3e00008, 0x621024, +0x3e00008, 0x0, 0x27bdffe0, 0xafbf001c, +0xafb00018, 0x8f8600c4, 0x8f8400e0, 0x8f8500e4, +0x2402fff8, 0x821824, 0x10a30009, 0x27623ff8, +0x14a20002, 0x24a20008, 0x27623000, 0x408021, +0x16030005, 0x30820004, 0x10400004, 0xc02021, +0x10000022, 0x1021, 0x8e040000, 0x8f42011c, +0x14a20003, 0x0, 0x8f420120, 0xaf420114, +0x8ca30000, 0x8f420148, 0x831823, 0x43102b, +0x10400003, 0x0, 0x8f420148, 0x621821, +0x94a20006, 0x24420050, 0x62102b, 0x1440000f, +0xa01021, 0xafa40010, 0xafa30014, 0x8ca60000, +0x8ca70004, 0x3c040001, 0xc002b17, 0x24846924, +0x8f42020c, 0x24420001, 0xaf42020c, 0x8f42020c, +0x1021, 0xaf9000e8, 0xaf9000e4, 0x8fbf001c, +0x8fb00018, 0x3e00008, 0x27bd0020, 0x3e00008, +0x0, 0x8f8400e0, 0x8f8800c4, 0x8f8300e8, +0x2402fff8, 0x823824, 0xe32023, 0x2c821000, +0x50400001, 0x24841000, 0x420c2, 0x801821, +0x8f440258, 0x8f45025c, 0x1021, 0xa32821, +0xa3302b, 0x822021, 0x862021, 0xaf440258, +0xaf45025c, 0x8f8300c8, 0x8f420148, 0x1032023, +0x82102b, 0x14400004, 0x801821, 0x8f420148, +0x822021, 0x801821, 0x8f440250, 0x8f450254, 0x1021, 0xa32821, 0xa3302b, 0x822021, -0x862021, 0xaf440248, 0xaf45024c, 0x8f8300c8, -0x8f42013c, 0x1032023, 0x82102b, 0x14400004, -0x801821, 0x8f42013c, 0x822021, 0x801821, -0x8f440240, 0x8f450244, 0x1021, 0xa32821, -0xa3302b, 0x822021, 0x862021, 0xaf440240, -0xaf450244, 0xaf8800c8, 0xaf8700e4, 0xaf8700e8, -0x3e00008, 0x0, 0x27bdff30, 0x240a0001, -0xafbf00c8, 0xafbe00c4, 0xafb500c0, 0xafb300bc, -0xafb200b8, 0xafb100b4, 0xafb000b0, 0xa3a00097, -0xafa00044, 0xafaa005c, 0x934205b5, 0xa7a0008e, -0x1040000a, 0xa7a00086, 0x8f4b00c4, 0xafab0064, -0x8f4a00c0, 0xafaa006c, 0x8f4b00cc, 0xafab0074, -0x8f4a00c8, 0x10000129, 0xafaa007c, 0x8f420114, -0x40f809, 0x0, 0x403021, 0x10c0033f, -0x0, 0x8cc20000, 0x8cc30004, 0xafa20020, -0xafa30024, 0x8fab0024, 0x8faa0020, 0x3162ffff, -0x2442fffc, 0xafa2006c, 0x3c020006, 0x2c21024, -0xafab007c, 0x14400015, 0xafaa0064, 0x91420000, -0x30420001, 0x10400011, 0x2402ffff, 0x8d430000, -0x14620004, 0x3402ffff, 0x95430004, 0x1062000b, -0x0, 0xc00233b, 0x8fa40064, 0x304200ff, -0x14400006, 0x0, 0x8f420118, 0x40f809, -0x0, 0x1000031d, 0x0, 0x8fa20024, -0x3c03ffbf, 0x3463ffff, 0x431024, 0x3c03ffff, -0x431824, 0x14600003, 0xafa20024, 0x10000040, -0x1821, 0x3c020080, 0x621024, 0x10400007, -0x0, 0x8f42037c, 0x24420001, 0xaf42037c, -0x8f42037c, 0x10000036, 0x24030001, 0x8f420200, -0x24420001, 0xaf420200, 0x8f420200, 0x3c020001, -0x621024, 0x10400006, 0x3c020002, 0x8f4201b4, -0x24420001, 0xaf4201b4, 0x8f4201b4, 0x3c020002, -0x621024, 0x10400006, 0x3c020004, 0x8f42036c, -0x24420001, 0xaf42036c, 0x8f42036c, 0x3c020004, -0x621024, 0x10400006, 0x3c020008, 0x8f420370, -0x24420001, 0xaf420370, 0x8f420370, 0x3c020008, -0x621024, 0x10400006, 0x3c020010, 0x8f420374, -0x24420001, 0xaf420374, 0x8f420374, 0x3c020010, -0x621024, 0x10400006, 0x3c020020, 0x8f4201b0, -0x24420001, 0xaf4201b0, 0x8f4201b0, 0x3c020020, -0x621024, 0x10400006, 0x24030001, 0x8f420378, -0x24420001, 0xaf420378, 0x8f420378, 0x24030001, -0x8c020260, 0x8fab006c, 0x4b102b, 0x10400014, -0x307000ff, 0x8f4201d8, 0x24420001, 0xaf4201d8, -0x8f4201d8, 0x8faa007c, 0x8f8200e0, 0x354a0100, -0xafaa007c, 0xafa20010, 0x8f8200e4, 0x24100001, -0x3c040001, 0x24843914, 0xafa20014, 0x8fa60020, -0x8fa70024, 0x3c050007, 0xc0029bb, 0x34a50800, -0x12000010, 0x3c020080, 0x2c21024, 0x1440000e, -0x32c20400, 0x8fab007c, 0x3c020080, 0x34420100, -0x1621024, 0x10400005, 0x0, 0x8f4201fc, -0x24420001, 0xaf4201fc, 0x8f4201fc, 0x100002a0, -0x8fa3006c, 0x32c20400, 0x10400015, 0x34028100, -0x8faa0064, 0x9543000c, 0x14620012, 0x3c020100, -0x240b0200, 0xa7ab008e, 0x9542000e, 0x8d430008, -0x8d440004, 0x8d450000, 0x8faa006c, 0x8fab0064, -0x254afffc, 0xafaa006c, 0xa7a20086, 0xad63000c, -0xad640008, 0xad650004, 0x256b0004, 0xafab0064, -0x3c020100, 0x2c21024, 0x10400004, 0x0, -0x8faa006c, 0x254a0004, 0xafaa006c, 0x8f4200bc, -0x5040000a, 0xafa00074, 0x8fab006c, 0x4b102b, -0x50400006, 0xafa00074, 0x8f4200bc, 0x1621023, -0xafa20074, 0x8f4a00bc, 0xafaa006c, 0x8f420080, -0x8fab006c, 0x4b102b, 0x10400056, 0x32c28000, -0x1040005e, 0x240a0003, 0x32c21000, 0x1040005b, -0xafaa005c, 0x10000058, 0x240b0004, 0x8f420340, -0x2403ffbf, 0x283a024, 0x24420001, 0xaf420340, -0x1000023f, 0x8f420340, 0x2c2b025, 0x2402ffbf, -0x282a024, 0x8f830128, 0x3c040001, 0x24843944, -0x26620001, 0xafa20014, 0xafa30010, 0x8f860120, -0x8f870124, 0x3c050007, 0xc0029bb, 0x34a52250, -0x1000022f, 0x0, 0x2c2b025, 0x2402ffbf, -0x282a024, 0x8f830128, 0x3c040001, 0x24843944, -0x24020002, 0xafa20014, 0xafa30010, 0x8f860120, -0x8f870124, 0x3c050007, 0xc0029bb, 0x34a52450, -0x1000021f, 0x0, 0x8ea20000, 0x8ea30004, -0x3c040001, 0x2484395c, 0xafb00010, 0xafbe0014, -0x8ea70018, 0x34a52800, 0xc0029bb, 0x603021, -0x10000213, 0x0, 0xa6b1000a, 0x8f820124, -0x3c040001, 0x24843964, 0xafbe0014, 0xafa20010, -0x8f460044, 0x8f870120, 0x3c050007, 0xc0029bb, -0x34a53000, 0x10000206, 0x0, 0xa6b1000a, -0xa6b2000e, 0x8f820124, 0x3c040001, 0x24843970, +0x862021, 0xaf440250, 0xaf450254, 0xaf8800c8, +0xaf8700e4, 0xaf8700e8, 0x3e00008, 0x0, +0x27bdff30, 0x240a0001, 0xafbf00c8, 0xafbe00c4, +0xafb500c0, 0xafb300bc, 0xafb200b8, 0xafb100b4, +0xafb000b0, 0xa3a00097, 0xafa00044, 0xafaa005c, +0x934205c4, 0xa7a0008e, 0x1040000a, 0xa7a00086, +0x8f4b00c4, 0xafab0064, 0x8f4a00c0, 0xafaa006c, +0x8f4b00cc, 0xafab0074, 0x8f4a00c8, 0x10000129, +0xafaa007c, 0x8f420114, 0x40f809, 0x0, +0x403021, 0x10c0033f, 0x0, 0x8cc20000, +0x8cc30004, 0xafa20020, 0xafa30024, 0x8fab0024, +0x8faa0020, 0x3162ffff, 0x2442fffc, 0xafa2006c, +0x3c020006, 0x2c21024, 0xafab007c, 0x14400015, +0xafaa0064, 0x91420000, 0x30420001, 0x10400011, +0x2402ffff, 0x8d430000, 0x14620004, 0x3402ffff, +0x95430004, 0x1062000b, 0x0, 0xc002497, +0x8fa40064, 0x304200ff, 0x14400006, 0x0, +0x8f420118, 0x40f809, 0x0, 0x1000031d, +0x0, 0x8fa20024, 0x3c03ffbf, 0x3463ffff, +0x431024, 0x3c03ffff, 0x431824, 0x14600003, +0xafa20024, 0x10000040, 0x1821, 0x3c020080, +0x621024, 0x10400007, 0x0, 0x8f42038c, +0x24420001, 0xaf42038c, 0x8f42038c, 0x10000036, +0x24030001, 0x8f420210, 0x24420001, 0xaf420210, +0x8f420210, 0x3c020001, 0x621024, 0x10400006, +0x3c020002, 0x8f4201c4, 0x24420001, 0xaf4201c4, +0x8f4201c4, 0x3c020002, 0x621024, 0x10400006, +0x3c020004, 0x8f42037c, 0x24420001, 0xaf42037c, +0x8f42037c, 0x3c020004, 0x621024, 0x10400006, +0x3c020008, 0x8f420380, 0x24420001, 0xaf420380, +0x8f420380, 0x3c020008, 0x621024, 0x10400006, +0x3c020010, 0x8f420384, 0x24420001, 0xaf420384, +0x8f420384, 0x3c020010, 0x621024, 0x10400006, +0x3c020020, 0x8f4201c0, 0x24420001, 0xaf4201c0, +0x8f4201c0, 0x3c020020, 0x621024, 0x10400006, +0x24030001, 0x8f420388, 0x24420001, 0xaf420388, +0x8f420388, 0x24030001, 0x8c020260, 0x8fab006c, +0x4b102b, 0x10400014, 0x307000ff, 0x8f4201e8, +0x24420001, 0xaf4201e8, 0x8f4201e8, 0x8faa007c, +0x8f8200e0, 0x354a0100, 0xafaa007c, 0xafa20010, +0x8f8200e4, 0x24100001, 0x3c040001, 0x24846930, +0xafa20014, 0x8fa60020, 0x8fa70024, 0x3c050007, +0xc002b17, 0x34a50800, 0x12000010, 0x3c020080, +0x2c21024, 0x1440000e, 0x32c20400, 0x8fab007c, +0x3c020080, 0x34420100, 0x1621024, 0x10400005, +0x0, 0x8f42020c, 0x24420001, 0xaf42020c, +0x8f42020c, 0x100002a0, 0x8fa3006c, 0x32c20400, +0x10400015, 0x34028100, 0x8faa0064, 0x9543000c, +0x14620012, 0x3c020100, 0x240b0200, 0xa7ab008e, +0x9542000e, 0x8d430008, 0x8d440004, 0x8d450000, +0x8faa006c, 0x8fab0064, 0x254afffc, 0xafaa006c, +0xa7a20086, 0xad63000c, 0xad640008, 0xad650004, +0x256b0004, 0xafab0064, 0x3c020100, 0x2c21024, +0x10400004, 0x0, 0x8faa006c, 0x254a0004, +0xafaa006c, 0x8f4200bc, 0x5040000a, 0xafa00074, +0x8fab006c, 0x4b102b, 0x50400006, 0xafa00074, +0x8f4200bc, 0x1621023, 0xafa20074, 0x8f4a00bc, +0xafaa006c, 0x8f420080, 0x8fab006c, 0x4b102b, +0x10400056, 0x32c28000, 0x1040005e, 0x240a0003, +0x32c21000, 0x1040005b, 0xafaa005c, 0x10000058, +0x240b0004, 0x8f420350, 0x2403ffbf, 0x283a024, +0x24420001, 0xaf420350, 0x1000023f, 0x8f420350, +0x2c2b025, 0x2402ffbf, 0x282a024, 0x8f830128, +0x3c040001, 0x24846960, 0x26620001, 0xafa20014, +0xafa30010, 0x8f860120, 0x8f870124, 0x3c050007, +0xc002b17, 0x34a52250, 0x1000022f, 0x0, +0x2c2b025, 0x2402ffbf, 0x282a024, 0x8f830128, +0x3c040001, 0x24846960, 0x24020002, 0xafa20014, +0xafa30010, 0x8f860120, 0x8f870124, 0x3c050007, +0xc002b17, 0x34a52450, 0x1000021f, 0x0, +0x8ea20000, 0x8ea30004, 0x3c040001, 0x24846978, +0xafb00010, 0xafbe0014, 0x8ea70018, 0x34a52800, +0xc002b17, 0x603021, 0x10000213, 0x0, +0xa6b1000a, 0x8f820124, 0x3c040001, 0x24846980, 0xafbe0014, 0xafa20010, 0x8f460044, 0x8f870120, -0x3c050007, 0xc0029bb, 0x34a53200, 0x100001f8, -0x0, 0x8f420084, 0x8faa006c, 0x4a102b, -0x14400007, 0x3c020001, 0x2c21024, 0x10400004, -0x0, 0x240b0002, 0xafab005c, 0x8faa006c, -0x1140020b, 0x27ab0020, 0xafab00a4, 0x3c0a001f, -0x354affff, 0xafaa009c, 0x8fab005c, 0x240a0001, -0x156a0021, 0x24020002, 0x8f430054, 0x8f420050, -0x1062000b, 0x274b0054, 0x8f5e0054, 0x3403ecc0, -0xafab004c, 0x27c20001, 0x304201ff, 0xafa20054, -0x1e1140, 0x431021, 0x1000006b, 0x2e2a821, -0x8f420044, 0x8faa006c, 0x3c040001, 0x24843920, -0xafaa0014, 0xafa20010, 0x8f460054, 0x8f470050, -0x3c050007, 0xc0029bb, 0x34a51300, 0x8f430340, -0x2402ffbf, 0x282a024, 0x24630001, 0xaf430340, -0x100001c3, 0x8f420340, 0x1562001d, 0x0, -0x8f430074, 0x8f420070, 0x1062000a, 0x274a0074, -0x8f5e0074, 0xafaa004c, 0x27c20001, 0x304203ff, -0xafa20054, 0x1e1140, 0x24426cc0, 0x1000004a, -0x2e2a821, 0x8f420044, 0x8fab006c, 0x3c040001, -0x2484392c, 0x3c050007, 0xafab0014, 0xafa20010, -0x8f460074, 0x8f470070, 0x34a51500, 0x240a0001, -0xc0029bb, 0xafaa005c, 0x1000ffc3, 0x0, -0x8f430064, 0x8f420060, 0x1062001a, 0x274b0064, -0x8f5e0064, 0x8faa005c, 0xafab004c, 0x27c20001, -0x304200ff, 0xafa20054, 0x24020004, 0x1542000e, -0x1e1140, 0x1e1180, 0x24420cc0, 0x2e21021, -0xafa20044, 0x9442002a, 0x8fab0044, 0x8faa006c, -0x4a102b, 0x10400024, 0x25750020, 0x240b0001, -0x10000021, 0xa3ab0097, 0x24424cc0, 0x1000001e, -0x2e2a821, 0x8f420044, 0x8faa006c, 0x3c040001, -0x24843938, 0xafaa0014, 0xafa20010, 0x8f460064, -0x8f470060, 0x3c050007, 0xc0029bb, 0x34a51800, -0x3c020008, 0x2c21024, 0x1440ff34, 0x0, -0x8f420360, 0x240b0001, 0xafab005c, 0x24420001, -0xaf420360, 0x1000ff90, 0x8f420360, 0x27a30036, -0x131040, 0x621821, 0x94620000, 0x441021, -0x10000020, 0xa4620000, 0x8faa0064, 0xaeaa0018, -0x93a20097, 0x10400072, 0x9821, 0x8fab0044, -0x8fa4006c, 0x8fa300a4, 0x25620020, 0xafa20028, -0x25620008, 0xafa20030, 0x25620010, 0xafab002c, -0xafa20034, 0x9562002a, 0xa7a20038, 0x95620018, -0xa7a2003a, 0x9562001a, 0xa7a2003c, 0x9562001c, -0xa7a2003e, 0x94620018, 0x24630002, 0x822023, -0x1880ffde, 0x26730001, 0x2e620004, 0x1440fff9, -0x0, 0x8f4200fc, 0x26650001, 0xa2102a, -0x1440002b, 0x24030001, 0x8f83012c, 0x10600023, -0x0, 0x8f820124, 0x431023, 0x22143, -0x58800001, 0x24840040, 0x8f820128, 0x431023, -0x21943, 0x58600001, 0x24630040, 0x64102a, -0x54400001, 0x602021, 0xaf4400fc, 0x8f4200fc, -0xa2102a, 0x10400011, 0x24030001, 0x10000015, -0x306200ff, 0x8faa0064, 0x96070018, 0xafaa0010, -0x8e220008, 0x3c040001, 0x24843950, 0x8c430004, -0x8c420000, 0x34a52400, 0x2403021, 0xc0029bb, -0xafa30014, 0x1000002b, 0x0, 0x8f420324, -0x1821, 0x24420001, 0xaf420324, 0x8f420324, -0x306200ff, 0x5040fedc, 0x3c020800, 0x12600021, -0x9021, 0x8fb100a4, 0x2208021, 0x8e220008, -0x96070018, 0x8fa60064, 0x8c440000, 0x8c450004, -0x240b0001, 0xafab0010, 0xafbe0014, 0x8f420008, -0xafa20018, 0x8f42010c, 0x40f809, 0x0, -0x1040ffd8, 0x3c050007, 0x96020018, 0x8faa0064, -0x8fab009c, 0x1425021, 0x16a102b, 0x10400004, -0xafaa0064, 0x8f42013c, 0x1425023, 0xafaa0064, -0x26100002, 0x26520001, 0x253102b, 0x1440ffe3, -0x26310004, 0x8fb0006c, 0x10000036, 0x97b10038, -0x8f4200fc, 0x24050002, 0xa2102a, 0x1440001b, -0x24030001, 0x8f83012c, 0x10600013, 0x0, -0x8f820124, 0x431023, 0x22143, 0x58800001, -0x24840040, 0x8f820128, 0x431023, 0x21943, -0x58600001, 0x24630040, 0x64102a, 0x54400001, -0x602021, 0xaf4400fc, 0x8f4200fc, 0xa2102a, -0x14400006, 0x24030001, 0x8f420324, 0x1821, -0x24420001, 0xaf420324, 0x8f420324, 0x306200ff, -0x1040fea5, 0x3c020800, 0x96b1000a, 0x8fb0006c, -0x3223ffff, 0x70102b, 0x54400001, 0x608021, -0x8ea40000, 0x8ea50004, 0x240a0001, 0xafaa0010, -0xafbe0014, 0x8f420008, 0x8fa60064, 0xafa20018, -0x8f42010c, 0x40f809, 0x2003821, 0x1040fea2, -0x3c050007, 0x96a3000e, 0x97ab008e, 0x11600007, -0x609021, 0x934205b5, 0x14400004, 0x0, -0x97aa0086, 0x6b1825, 0xa6aa0016, 0x8fab007c, -0x3c02ffff, 0x1621024, 0x10400003, 0xb1402, -0x34630400, 0xa6a20014, 0x8faa006c, 0x560a0072, -0xa6a3000e, 0x34620004, 0xa6a2000e, 0x8fab0074, -0x14b1021, 0xa6a2000a, 0x8f430044, 0x8f440190, -0x8f450194, 0x34028000, 0xafa20010, 0x8f420044, -0x2a03021, 0x24070020, 0xafa20014, 0x8f42000c, -0x31940, 0x604821, 0xafa20018, 0x8f42010c, -0x4021, 0xa92821, 0xa9182b, 0x882021, -0x40f809, 0x832021, 0x5040fe7f, 0xa6b2000e, -0x8f420358, 0xafa0006c, 0xa34005b5, 0x2442ffff, -0xaf420358, 0x8faa005c, 0x240b0001, 0x8f420358, -0x154b0006, 0x24020002, 0x8f42034c, 0x2442ffff, -0xaf42034c, 0x1000000c, 0x8f42034c, 0x15420006, -0x0, 0x8f420354, 0x2442ffff, 0xaf420354, -0x10000005, 0x8f420354, 0x8f420350, 0x2442ffff, -0xaf420350, 0x8f420350, 0x8faa0054, 0x8fab004c, -0xad6a0000, 0x8f420044, 0x8f440088, 0x8f430078, -0x24420001, 0x441024, 0x24630001, 0xaf420044, -0xaf430078, 0x8c020240, 0x62182b, 0x14600065, -0x24070008, 0x8f440158, 0x8f45015c, 0x8f430044, -0x8f48000c, 0x8f860120, 0x24020040, 0xafa20010, -0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, -0x24c6001c, 0x14400011, 0x240b0001, 0x3c010001, -0x370821, 0xa02b40f2, 0x8f820124, 0xafa20010, -0x8f820128, 0x3c040001, 0x2484390c, 0xafa20014, -0x8f460044, 0x8f870120, 0x3c050009, 0xc0029bb, -0x34a51300, 0x1000000b, 0x0, 0x8f4202f4, -0x24420001, 0xaf4202f4, 0x8f4202f4, 0x8f420044, -0xaf42007c, 0x3c010001, 0x370821, 0xa02040f2, -0xaf400078, 0x8f420308, 0x24420001, 0xaf420308, -0x10000038, 0x8f420308, 0xa6b0000a, 0x8f430044, -0x8f440190, 0x8f450194, 0x34028000, 0xafa20010, -0x8f420044, 0x2a03021, 0x24070020, 0xafa20014, -0x8f42000c, 0x31940, 0x604821, 0xafa20018, -0x8f42010c, 0x4021, 0xa92821, 0xa9182b, -0x882021, 0x40f809, 0x832021, 0x1040fe1f, -0x240a0001, 0xa34a05b5, 0x8fab006c, 0x8faa0064, -0x1705823, 0xafab006c, 0x8fab009c, 0x1505021, -0x16a102b, 0x10400004, 0xafaa0064, 0x8f42013c, -0x1425023, 0xafaa0064, 0x8f420358, 0x2442ffff, -0xaf420358, 0x8f420358, 0x8f42034c, 0x2442ffff, -0xaf42034c, 0x8fab0054, 0x8faa004c, 0x8f42034c, -0xad4b0000, 0x8f420044, 0x8f440088, 0x8f430078, -0x24420001, 0x441024, 0x24630001, 0xaf420044, -0xaf430078, 0x8faa006c, 0x1540fe1b, 0x0, -0x8fab006c, 0x1160001e, 0x0, 0x934205b5, -0x10400009, 0x0, 0x8faa0064, 0xaf4a00c4, -0xaf4b00c0, 0x8fab007c, 0xaf4b00c8, 0x8faa0074, -0x1000000e, 0xaf4a00cc, 0x97ab008e, 0x1160000b, -0x34038100, 0x8fa20020, 0x8c46000c, 0xa443000c, -0x97aa0086, 0x8c440004, 0x8c450008, 0xa44a000e, -0xac440000, 0xac450004, 0xac460008, 0x8f42033c, -0x24420001, 0xaf42033c, 0x10000010, 0x8f42033c, -0x8fab007c, 0x3164ffff, 0x2484fffc, 0x801821, -0x8f440240, 0x8f450244, 0x8f460118, 0x1021, -0xa32821, 0xa3382b, 0x822021, 0x872021, -0xaf440240, 0xc0f809, 0xaf450244, 0x8fbf00c8, -0x8fbe00c4, 0x8fb500c0, 0x8fb300bc, 0x8fb200b8, -0x8fb100b4, 0x8fb000b0, 0x3e00008, 0x27bd00d0, -0x3e00008, 0x0, 0x27bdff38, 0x240b0001, -0xafbf00c0, 0xafbe00bc, 0xafb500b8, 0xafb300b4, -0xafb200b0, 0xafb100ac, 0xafb000a8, 0xa3a00087, -0xafa00044, 0xafab005c, 0x934205b5, 0xa7a00076, -0x10400007, 0xa7a0007e, 0x8f4c00c0, 0xafac0064, -0x8f4b00c8, 0x8f5e00c4, 0x1000012d, 0xafab006c, -0x8f420114, 0x40f809, 0x0, 0x403021, -0x10c0029e, 0x0, 0x8cc20000, 0x8cc30004, -0xafa20020, 0xafa30024, 0x8fac0024, 0x8fbe0020, -0x3182ffff, 0x2442fffc, 0xafa20064, 0x3c020006, -0x2c21024, 0x14400015, 0xafac006c, 0x93c20000, -0x30420001, 0x10400011, 0x2402ffff, 0x8fc30000, -0x14620004, 0x3402ffff, 0x97c30004, 0x1062000b, -0x0, 0xc00233b, 0x3c02021, 0x304200ff, -0x14400006, 0x0, 0x8f420118, 0x40f809, -0x0, 0x1000027d, 0x0, 0x8fa20024, -0x3c03ffbf, 0x3463ffff, 0x431024, 0x3c03ffff, -0x431824, 0x14600003, 0xafa20024, 0x10000040, -0x8021, 0x3c020080, 0x621024, 0x10400007, -0x0, 0x8f42037c, 0x24420001, 0xaf42037c, -0x8f42037c, 0x10000036, 0x24100001, 0x8f420200, -0x24420001, 0xaf420200, 0x8f420200, 0x3c020001, -0x621024, 0x10400006, 0x3c020002, 0x8f4201b4, -0x24420001, 0xaf4201b4, 0x8f4201b4, 0x3c020002, -0x621024, 0x10400006, 0x3c020004, 0x8f42036c, -0x24420001, 0xaf42036c, 0x8f42036c, 0x3c020004, -0x621024, 0x10400006, 0x3c020008, 0x8f420370, -0x24420001, 0xaf420370, 0x8f420370, 0x3c020008, -0x621024, 0x10400006, 0x3c020010, 0x8f420374, -0x24420001, 0xaf420374, 0x8f420374, 0x3c020010, -0x621024, 0x10400006, 0x3c020020, 0x8f4201b0, -0x24420001, 0xaf4201b0, 0x8f4201b0, 0x3c020020, -0x621024, 0x10400006, 0x24100001, 0x8f420378, -0x24420001, 0xaf420378, 0x8f420378, 0x24100001, -0x8c020260, 0x8fab0064, 0x4b102b, 0x10400015, -0x320200ff, 0x8f4201d8, 0x24420001, 0xaf4201d8, -0x8f4201d8, 0x8fac006c, 0x8f8200e0, 0x358c0100, -0xafac006c, 0xafa20010, 0x8f8200e4, 0x24100001, -0x3c040001, 0x24843914, 0xafa20014, 0x8fa60020, -0x8fa70024, 0x3c050007, 0xc0029bb, 0x34a53600, -0x320200ff, 0x10400010, 0x3c020080, 0x2c21024, -0x1440000e, 0x32c20400, 0x8fab006c, 0x3c020080, -0x34420100, 0x1621024, 0x10400005, 0x0, -0x8f4201fc, 0x24420001, 0xaf4201fc, 0x8f4201fc, -0x100001ff, 0x8fa30064, 0x32c20400, 0x10400012, -0x34028100, 0x97c3000c, 0x1462000f, 0x0, -0x240c0200, 0xa7ac0076, 0x97c2000e, 0x8fc30008, -0x8fc40004, 0x8fab0064, 0x8fc50000, 0x256bfffc, -0xafab0064, 0xa7a2007e, 0xafc3000c, 0xafc40008, -0xafc50004, 0x27de0004, 0x8fa70064, 0x320200ff, -0x14400031, 0x3c020100, 0x97c3000c, 0x2c6205dd, -0x10400015, 0x2821, 0x32c20800, 0x10400015, -0x24020800, 0x97c30014, 0x14620012, 0x3402aaaa, -0x97c3000e, 0x14620007, 0x2021, 0x97c30010, -0x24020300, 0x14620004, 0x801021, 0x97c20012, -0x2c440001, 0x801021, 0x54400006, 0x24050016, -0x10000004, 0x0, 0x24020800, 0x50620001, -0x2405000e, 0x10a00013, 0x3c52021, 0x24830009, -0x3c02001f, 0x3442ffff, 0x43102b, 0x10400003, -0x0, 0x8f42013c, 0x621823, 0x90620000, -0x38430006, 0x2c630001, 0x38420011, 0x2c420001, -0x621825, 0x10600004, 0x3c020100, 0x94820002, -0x453821, 0x3c020100, 0x2c21024, 0x5040000e, -0xafa70064, 0x8fac0064, 0x10ec0008, 0x3c050007, -0x3c040001, 0x2484397c, 0x8fa60064, 0x34a54000, -0xafa00010, 0xc0029bb, 0xafa00014, 0x8fab0064, -0x256b0004, 0xafab0064, 0x8f420080, 0x8fac0064, -0x4c102b, 0x1040002c, 0x32c28000, 0x10400034, -0x240b0003, 0x32c21000, 0x10400031, 0xafab005c, -0x1000002e, 0x240c0004, 0x8f420340, 0x2403ffbf, -0x283a024, 0x24420001, 0xaf420340, 0x10000173, -0x8f420340, 0x3c020800, 0x2c2b025, 0x2402ffbf, -0x282a024, 0x8f830128, 0x3c040001, 0x24843944, -0x26620001, 0xafa20014, 0xafa30010, 0x8f860120, -0x8f870124, 0x3c050007, 0xc0029bb, 0x34a55300, -0x10000162, 0x0, 0x8ea20000, 0x8ea30004, -0x3c040001, 0x2484395c, 0xafb00010, 0xafb10014, -0x8ea70018, 0x34a55900, 0xc0029bb, 0x603021, -0x10000156, 0x0, 0x8f420084, 0x8fab0064, -0x4b102b, 0x14400007, 0x3c020001, 0x2c21024, -0x10400004, 0x0, 0x240c0002, 0xafac005c, -0x8fab0064, 0x11600166, 0x27ac0020, 0xafac008c, -0x8fab005c, 0x240c0001, 0x556c0021, 0x240c0002, +0x3c050007, 0xc002b17, 0x34a53000, 0x10000206, +0x0, 0xa6b1000a, 0xa6b2000e, 0x8f820124, +0x3c040001, 0x2484698c, 0xafbe0014, 0xafa20010, +0x8f460044, 0x8f870120, 0x3c050007, 0xc002b17, +0x34a53200, 0x100001f8, 0x0, 0x8f420084, +0x8faa006c, 0x4a102b, 0x14400007, 0x3c020001, +0x2c21024, 0x10400004, 0x0, 0x240b0002, +0xafab005c, 0x8faa006c, 0x1140020b, 0x27ab0020, +0xafab00a4, 0x3c0a001f, 0x354affff, 0xafaa009c, +0x8fab005c, 0x240a0001, 0x156a0021, 0x24020002, 0x8f430054, 0x8f420050, 0x1062000b, 0x274b0054, -0x8f510054, 0x3403ecc0, 0xafab004c, 0x26220001, -0x304201ff, 0xafa20054, 0x111140, 0x431021, -0x1000006b, 0x2e2a821, 0x8f420044, 0x8fac0064, -0x3c040001, 0x24843920, 0xafac0014, 0xafa20010, -0x8f460054, 0x8f470050, 0x3c050007, 0xc0029bb, -0x34a54300, 0x8f430340, 0x2402ffbf, 0x282a024, -0x24630001, 0xaf430340, 0x10000124, 0x8f420340, -0x156c001d, 0x0, 0x8f430074, 0x8f420070, -0x1062000a, 0x274b0074, 0x8f510074, 0xafab004c, -0x26220001, 0x304203ff, 0xafa20054, 0x111140, +0x8f5e0054, 0x3403ecc0, 0xafab004c, 0x27c20001, +0x304201ff, 0xafa20054, 0x1e1140, 0x431021, +0x1000006b, 0x2e2a821, 0x8f420044, 0x8faa006c, +0x3c040001, 0x2484693c, 0xafaa0014, 0xafa20010, +0x8f460054, 0x8f470050, 0x3c050007, 0xc002b17, +0x34a51300, 0x8f430350, 0x2402ffbf, 0x282a024, +0x24630001, 0xaf430350, 0x100001c3, 0x8f420350, +0x1562001d, 0x0, 0x8f430074, 0x8f420070, +0x1062000a, 0x274a0074, 0x8f5e0074, 0xafaa004c, +0x27c20001, 0x304203ff, 0xafa20054, 0x1e1140, 0x24426cc0, 0x1000004a, 0x2e2a821, 0x8f420044, -0x8fac0064, 0x3c040001, 0x2484392c, 0x3c050007, -0xafac0014, 0xafa20010, 0x8f460074, 0x8f470070, -0x34a54500, 0x240b0001, 0xc0029bb, 0xafab005c, +0x8fab006c, 0x3c040001, 0x24846948, 0x3c050007, +0xafab0014, 0xafa20010, 0x8f460074, 0x8f470070, +0x34a51500, 0x240a0001, 0xc002b17, 0xafaa005c, 0x1000ffc3, 0x0, 0x8f430064, 0x8f420060, -0x1062001a, 0x274c0064, 0x8f510064, 0x8fab005c, -0xafac004c, 0x26220001, 0x304200ff, 0xafa20054, -0x24020004, 0x1562000e, 0x111140, 0x111180, +0x1062001a, 0x274b0064, 0x8f5e0064, 0x8faa005c, +0xafab004c, 0x27c20001, 0x304200ff, 0xafa20054, +0x24020004, 0x1542000e, 0x1e1140, 0x1e1180, 0x24420cc0, 0x2e21021, 0xafa20044, 0x9442002a, -0x8fac0044, 0x8fab0064, 0x4b102b, 0x10400024, -0x25950020, 0x240c0001, 0x10000021, 0xa3ac0087, +0x8fab0044, 0x8faa006c, 0x4a102b, 0x10400024, +0x25750020, 0x240b0001, 0x10000021, 0xa3ab0097, 0x24424cc0, 0x1000001e, 0x2e2a821, 0x8f420044, -0x8fab0064, 0x3c040001, 0x24843938, 0xafab0014, +0x8faa006c, 0x3c040001, 0x24846954, 0xafaa0014, 0xafa20010, 0x8f460064, 0x8f470060, 0x3c050007, -0xc0029bb, 0x34a54800, 0x3c020008, 0x2c21024, -0x1440ff61, 0x0, 0x8f420360, 0x240c0001, -0xafac005c, 0x24420001, 0xaf420360, 0x1000ff90, -0x8f420360, 0x27a30036, 0x131040, 0x621821, -0x94620000, 0x441021, 0x1000001f, 0xa4620000, -0xaebe0018, 0x93a20087, 0x10400084, 0x9821, -0x8fab0044, 0x8fa40064, 0x8fa3008c, 0x25620020, -0xafa20028, 0x25620008, 0xafa20030, 0x25620010, -0xafab002c, 0xafa20034, 0x9562002a, 0xa7a20038, -0x95620018, 0xa7a2003a, 0x9562001a, 0xa7a2003c, -0x9562001c, 0xa7a2003e, 0x94620018, 0x24630002, -0x822023, 0x1880ffdf, 0x26730001, 0x2e620004, -0x1440fff9, 0x0, 0x8f4200fc, 0x262102a, -0x14400030, 0x24030001, 0x8f83012c, 0x10600028, -0x0, 0x8f820124, 0x431023, 0x22143, -0x58800001, 0x24840040, 0x8f820128, 0x431023, -0x21943, 0x58600001, 0x24630040, 0x64102a, -0x54400001, 0x602021, 0xaf4400fc, 0x8f4200fc, -0x262102a, 0x10400016, 0x24030001, 0x1000001a, -0x306200ff, 0x8fac008c, 0x101040, 0x4c1021, -0x94470018, 0x101080, 0x4c1021, 0xafbe0010, -0x8c420008, 0x3c040001, 0x24843950, 0x3c050007, -0x8c430004, 0x8c420000, 0x34a55500, 0x2003021, -0xc0029bb, 0xafa30014, 0x10000039, 0x0, -0x8f420324, 0x1821, 0x24420001, 0xaf420324, -0x8f420324, 0x306200ff, 0x1040ff06, 0x8021, -0x8f430008, 0x2402fbff, 0x1260002d, 0x625024, -0x3c0b4000, 0x22b4025, 0x8fb1008c, 0x2669ffff, -0x2209021, 0x8e420008, 0x96270018, 0x8c440000, -0x8c450004, 0x56090004, 0x240b0001, 0x240c0002, -0x10000002, 0xafac0010, 0xafab0010, 0x16000004, -0xafa80014, 0x8f420008, 0x10000002, 0xafa20018, -0xafaa0018, 0x8f42010c, 0x3c03021, 0xafa80098, -0xafa9009c, 0x40f809, 0xafaa00a0, 0x8fa80098, -0x8fa9009c, 0x8faa00a0, 0x1040ffc2, 0x3c02001f, -0x96230018, 0x3442ffff, 0x3c3f021, 0x5e102b, -0x10400003, 0x26310002, 0x8f42013c, 0x3c2f023, -0x26100001, 0x213102b, 0x1440ffda, 0x26520004, -0x8fb00064, 0x1000001a, 0x0, 0x96a3000a, -0x8fb00064, 0x70102b, 0x54400001, 0x608021, -0x8ea40000, 0x8ea50004, 0x8fab005c, 0x240c0002, -0xafac0010, 0x934305b5, 0xb1700, 0x10600003, -0x2223025, 0x3c020800, 0xc23025, 0xafa60014, -0x8f420008, 0xafa20018, 0x8f42010c, 0x3c03021, -0x40f809, 0x2003821, 0x1040fecb, 0x3c050007, -0x97ac0076, 0x11800007, 0x96a3000e, 0x934205b5, -0x14400004, 0x0, 0x97ab007e, 0x6c1825, -0xa6ab0016, 0x8fac006c, 0x3c02ffff, 0x1821024, -0x10400003, 0xc1402, 0x34630400, 0xa6a20014, -0xa6b0000a, 0x8fab0064, 0x560b0006, 0x3d0f021, -0x34620004, 0xafa00064, 0xa6a2000e, 0x1000000d, -0xa34005b5, 0x8fac0064, 0x3c02001f, 0x3442ffff, -0x5e102b, 0x1906023, 0xafac0064, 0xa6a3000e, -0x240b0001, 0x10400003, 0xa34b05b5, 0x8f42013c, -0x3c2f023, 0x8fab0054, 0x8fac004c, 0xad8b0000, -0x8fac0064, 0x1580feba, 0x0, 0x8fab0064, -0x1160001b, 0x0, 0x934205b5, 0x10400006, -0x0, 0xaf5e00c4, 0xaf4b00c0, 0x8fac006c, -0x1000000e, 0xaf4c00c8, 0x97ab0076, 0x1160000b, -0x34038100, 0x8fa20020, 0x8c46000c, 0xa443000c, -0x97ac007e, 0x8c440004, 0x8c450008, 0xa44c000e, -0xac440000, 0xac450004, 0xac460008, 0x8f42033c, -0x24420001, 0xaf42033c, 0x10000010, 0x8f42033c, -0x8fab006c, 0x3164ffff, 0x2484fffc, 0x801821, -0x8f440240, 0x8f450244, 0x8f460118, 0x1021, -0xa32821, 0xa3382b, 0x822021, 0x872021, -0xaf440240, 0xc0f809, 0xaf450244, 0x8fbf00c0, -0x8fbe00bc, 0x8fb500b8, 0x8fb300b4, 0x8fb200b0, -0x8fb100ac, 0x8fb000a8, 0x3e00008, 0x27bd00c8, -0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, -0xafb00020, 0x8f43005c, 0x8f420058, 0x10620049, -0x0, 0x8f430058, 0x8f42005c, 0x622023, -0x4820001, 0x24840100, 0x8f430064, 0x8f42005c, -0x43102b, 0x14400004, 0x24020100, 0x8f43005c, -0x10000005, 0x431023, 0x8f420064, 0x8f43005c, -0x431023, 0x2442ffff, 0x403821, 0x87102a, -0x54400001, 0x803821, 0x8f42005c, 0x471021, -0x305000ff, 0x32c21000, 0x10400015, 0x24082000, -0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c, -0x73980, 0xafa80010, 0xafb00014, 0x8f480014, -0x94980, 0x1201821, 0x1021, 0xa32821, -0xa3482b, 0x822021, 0x892021, 0x63180, -0xafa80018, 0x8f420108, 0x10000014, 0x24c60cc0, -0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c, -0x73940, 0xafa80010, 0xafb00014, 0x8f480014, -0x94940, 0x1201821, 0x1021, 0xa32821, -0xa3482b, 0x822021, 0x892021, 0x63140, -0xafa80018, 0x8f420108, 0x24c64cc0, 0x40f809, -0x2e63021, 0x54400001, 0xaf50005c, 0x8f43005c, -0x8f420058, 0x14620018, 0x0, 0x8f420000, -0x10400007, 0x0, 0xaf80004c, 0x8f82004c, -0x1040fffd, 0x0, 0x10000005, 0x0, -0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x2403feff, 0x431024, 0xaf820060, -0x8f420000, 0x10400003, 0x0, 0x10000002, -0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, -0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f43006c, -0x8f420068, 0x10620033, 0x0, 0x8f430068, -0x8f42006c, 0x622023, 0x4820001, 0x24840400, -0x8f430074, 0x8f42006c, 0x43102b, 0x14400004, -0x24020400, 0x8f43006c, 0x10000005, 0x431023, -0x8f420074, 0x8f43006c, 0x431023, 0x2442ffff, -0x405021, 0x8a102a, 0x54400001, 0x805021, -0x8f49006c, 0x8f48006c, 0x8f440188, 0x8f45018c, -0x8f46006c, 0x24074000, 0xafa70010, 0x84140, -0x1001821, 0x12a4821, 0x313003ff, 0xafb00014, -0x8f470014, 0x1021, 0x63140, 0x24c66cc0, -0xafa70018, 0xa32821, 0xa3382b, 0x822021, -0x872021, 0x8f420108, 0x2e63021, 0x40f809, -0xa3940, 0x54400001, 0xaf50006c, 0x8f43006c, -0x8f420068, 0x14620018, 0x0, 0x8f420000, +0xc002b17, 0x34a51800, 0x3c020008, 0x2c21024, +0x1440ff34, 0x0, 0x8f420370, 0x240b0001, +0xafab005c, 0x24420001, 0xaf420370, 0x1000ff90, +0x8f420370, 0x27a30036, 0x131040, 0x621821, +0x94620000, 0x441021, 0x10000020, 0xa4620000, +0x8faa0064, 0xaeaa0018, 0x93a20097, 0x10400072, +0x9821, 0x8fab0044, 0x8fa4006c, 0x8fa300a4, +0x25620020, 0xafa20028, 0x25620008, 0xafa20030, +0x25620010, 0xafab002c, 0xafa20034, 0x9562002a, +0xa7a20038, 0x95620018, 0xa7a2003a, 0x9562001a, +0xa7a2003c, 0x9562001c, 0xa7a2003e, 0x94620018, +0x24630002, 0x822023, 0x1880ffde, 0x26730001, +0x2e620004, 0x1440fff9, 0x0, 0x8f4200fc, +0x26650001, 0xa2102a, 0x1440002b, 0x24030001, +0x8f83012c, 0x10600023, 0x0, 0x8f820124, +0x431023, 0x22143, 0x58800001, 0x24840040, +0x8f820128, 0x431023, 0x21943, 0x58600001, +0x24630040, 0x64102a, 0x54400001, 0x602021, +0xaf4400fc, 0x8f4200fc, 0xa2102a, 0x10400011, +0x24030001, 0x10000015, 0x306200ff, 0x8faa0064, +0x96070018, 0xafaa0010, 0x8e220008, 0x3c040001, +0x2484696c, 0x8c430004, 0x8c420000, 0x34a52400, +0x2403021, 0xc002b17, 0xafa30014, 0x1000002b, +0x0, 0x8f420334, 0x1821, 0x24420001, +0xaf420334, 0x8f420334, 0x306200ff, 0x5040fedc, +0x3c020800, 0x12600021, 0x9021, 0x8fb100a4, +0x2208021, 0x8e220008, 0x96070018, 0x8fa60064, +0x8c440000, 0x8c450004, 0x240b0001, 0xafab0010, +0xafbe0014, 0x8f420008, 0xafa20018, 0x8f42010c, +0x40f809, 0x0, 0x1040ffd8, 0x3c050007, +0x96020018, 0x8faa0064, 0x8fab009c, 0x1425021, +0x16a102b, 0x10400004, 0xafaa0064, 0x8f420148, +0x1425023, 0xafaa0064, 0x26100002, 0x26520001, +0x253102b, 0x1440ffe3, 0x26310004, 0x8fb0006c, +0x10000036, 0x97b10038, 0x8f4200fc, 0x24050002, +0xa2102a, 0x1440001b, 0x24030001, 0x8f83012c, +0x10600013, 0x0, 0x8f820124, 0x431023, +0x22143, 0x58800001, 0x24840040, 0x8f820128, +0x431023, 0x21943, 0x58600001, 0x24630040, +0x64102a, 0x54400001, 0x602021, 0xaf4400fc, +0x8f4200fc, 0xa2102a, 0x14400006, 0x24030001, +0x8f420334, 0x1821, 0x24420001, 0xaf420334, +0x8f420334, 0x306200ff, 0x1040fea5, 0x3c020800, +0x96b1000a, 0x8fb0006c, 0x3223ffff, 0x70102b, +0x54400001, 0x608021, 0x8ea40000, 0x8ea50004, +0x240a0001, 0xafaa0010, 0xafbe0014, 0x8f420008, +0x8fa60064, 0xafa20018, 0x8f42010c, 0x40f809, +0x2003821, 0x1040fea2, 0x3c050007, 0x96a3000e, +0x97ab008e, 0x11600007, 0x609021, 0x934205c4, +0x14400004, 0x0, 0x97aa0086, 0x6b1825, +0xa6aa0016, 0x8fab007c, 0x3c02ffff, 0x1621024, +0x10400003, 0xb1402, 0x34630400, 0xa6a20014, +0x8faa006c, 0x560a0072, 0xa6a3000e, 0x34620004, +0xa6a2000e, 0x8fab0074, 0x14b1021, 0xa6a2000a, +0x8f430044, 0x8f4401a0, 0x8f4501a4, 0x34028000, +0xafa20010, 0x8f420044, 0x2a03021, 0x24070020, +0xafa20014, 0x8f42000c, 0x31940, 0x604821, +0xafa20018, 0x8f42010c, 0x4021, 0xa92821, +0xa9182b, 0x882021, 0x40f809, 0x832021, +0x5040fe7f, 0xa6b2000e, 0x8f420368, 0xafa0006c, +0xa34005c4, 0x2442ffff, 0xaf420368, 0x8faa005c, +0x240b0001, 0x8f420368, 0x154b0006, 0x24020002, +0x8f42035c, 0x2442ffff, 0xaf42035c, 0x1000000c, +0x8f42035c, 0x15420006, 0x0, 0x8f420364, +0x2442ffff, 0xaf420364, 0x10000005, 0x8f420364, +0x8f420360, 0x2442ffff, 0xaf420360, 0x8f420360, +0x8faa0054, 0x8fab004c, 0xad6a0000, 0x8f420044, +0x8f440088, 0x8f430078, 0x24420001, 0x441024, +0x24630001, 0xaf420044, 0xaf430078, 0x8c020240, +0x62182b, 0x14600065, 0x24070008, 0x8f440168, +0x8f45016c, 0x8f430044, 0x8f48000c, 0x8f860120, +0x24020040, 0xafa20010, 0xafa30014, 0xafa80018, +0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011, +0x240b0001, 0x3c010001, 0x370821, 0xa02b40f2, +0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001, +0x2484691c, 0xafa20014, 0x8f460044, 0x8f870120, +0x3c050009, 0xc002b17, 0x34a51300, 0x1000000b, +0x0, 0x8f420304, 0x24420001, 0xaf420304, +0x8f420304, 0x8f420044, 0xaf42007c, 0x3c010001, +0x370821, 0xa02040f2, 0xaf400078, 0x8f420318, +0x24420001, 0xaf420318, 0x10000038, 0x8f420318, +0xa6b0000a, 0x8f430044, 0x8f4401a0, 0x8f4501a4, +0x34028000, 0xafa20010, 0x8f420044, 0x2a03021, +0x24070020, 0xafa20014, 0x8f42000c, 0x31940, +0x604821, 0xafa20018, 0x8f42010c, 0x4021, +0xa92821, 0xa9182b, 0x882021, 0x40f809, +0x832021, 0x1040fe1f, 0x240a0001, 0xa34a05c4, +0x8fab006c, 0x8faa0064, 0x1705823, 0xafab006c, +0x8fab009c, 0x1505021, 0x16a102b, 0x10400004, +0xafaa0064, 0x8f420148, 0x1425023, 0xafaa0064, +0x8f420368, 0x2442ffff, 0xaf420368, 0x8f420368, +0x8f42035c, 0x2442ffff, 0xaf42035c, 0x8fab0054, +0x8faa004c, 0x8f42035c, 0xad4b0000, 0x8f420044, +0x8f440088, 0x8f430078, 0x24420001, 0x441024, +0x24630001, 0xaf420044, 0xaf430078, 0x8faa006c, +0x1540fe1b, 0x0, 0x8fab006c, 0x1160001e, +0x0, 0x934205c4, 0x10400009, 0x0, +0x8faa0064, 0xaf4a00c4, 0xaf4b00c0, 0x8fab007c, +0xaf4b00c8, 0x8faa0074, 0x1000000e, 0xaf4a00cc, +0x97ab008e, 0x1160000b, 0x34038100, 0x8fa20020, +0x8c46000c, 0xa443000c, 0x97aa0086, 0x8c440004, +0x8c450008, 0xa44a000e, 0xac440000, 0xac450004, +0xac460008, 0x8f42034c, 0x24420001, 0xaf42034c, +0x10000010, 0x8f42034c, 0x8fab007c, 0x3164ffff, +0x2484fffc, 0x801821, 0x8f440250, 0x8f450254, +0x8f460118, 0x1021, 0xa32821, 0xa3382b, +0x822021, 0x872021, 0xaf440250, 0xc0f809, +0xaf450254, 0x8fbf00c8, 0x8fbe00c4, 0x8fb500c0, +0x8fb300bc, 0x8fb200b8, 0x8fb100b4, 0x8fb000b0, +0x3e00008, 0x27bd00d0, 0x3e00008, 0x0, +0x27bdff38, 0x240b0001, 0xafbf00c0, 0xafbe00bc, +0xafb500b8, 0xafb300b4, 0xafb200b0, 0xafb100ac, +0xafb000a8, 0xa3a00087, 0xafa00044, 0xafab005c, +0x934205c4, 0xa7a00076, 0x10400007, 0xa7a0007e, +0x8f4c00c0, 0xafac0064, 0x8f4b00c8, 0x8f5e00c4, +0x10000130, 0xafab006c, 0x8f420114, 0x40f809, +0x0, 0x403021, 0x10c002a1, 0x0, +0x8cc20000, 0x8cc30004, 0xafa20020, 0xafa30024, +0x8fac0024, 0x8fbe0020, 0x3182ffff, 0x2442fffc, +0xafa20064, 0x3c020006, 0x2c21024, 0x14400015, +0xafac006c, 0x93c20000, 0x30420001, 0x10400011, +0x2402ffff, 0x8fc30000, 0x14620004, 0x3402ffff, +0x97c30004, 0x1062000b, 0x0, 0xc002497, +0x3c02021, 0x304200ff, 0x14400006, 0x0, +0x8f420118, 0x40f809, 0x0, 0x10000280, +0x0, 0x8fa20024, 0x3c03ffbf, 0x3463ffff, +0x431024, 0x3c03ffff, 0x431824, 0x14600003, +0xafa20024, 0x10000040, 0x8021, 0x3c020080, +0x621024, 0x10400007, 0x0, 0x8f42038c, +0x24420001, 0xaf42038c, 0x8f42038c, 0x10000036, +0x24100001, 0x8f420210, 0x24420001, 0xaf420210, +0x8f420210, 0x3c020001, 0x621024, 0x10400006, +0x3c020002, 0x8f4201c4, 0x24420001, 0xaf4201c4, +0x8f4201c4, 0x3c020002, 0x621024, 0x10400006, +0x3c020004, 0x8f42037c, 0x24420001, 0xaf42037c, +0x8f42037c, 0x3c020004, 0x621024, 0x10400006, +0x3c020008, 0x8f420380, 0x24420001, 0xaf420380, +0x8f420380, 0x3c020008, 0x621024, 0x10400006, +0x3c020010, 0x8f420384, 0x24420001, 0xaf420384, +0x8f420384, 0x3c020010, 0x621024, 0x10400006, +0x3c020020, 0x8f4201c0, 0x24420001, 0xaf4201c0, +0x8f4201c0, 0x3c020020, 0x621024, 0x10400006, +0x24100001, 0x8f420388, 0x24420001, 0xaf420388, +0x8f420388, 0x24100001, 0x8c020260, 0x8fab0064, +0x4b102b, 0x10400015, 0x320200ff, 0x8f4201e8, +0x24420001, 0xaf4201e8, 0x8f4201e8, 0x8fac006c, +0x8f8200e0, 0x358c0100, 0xafac006c, 0xafa20010, +0x8f8200e4, 0x24100001, 0x3c040001, 0x24846930, +0xafa20014, 0x8fa60020, 0x8fa70024, 0x3c050007, +0xc002b17, 0x34a53600, 0x320200ff, 0x10400010, +0x3c020080, 0x2c21024, 0x1440000e, 0x32c20400, +0x8fab006c, 0x3c020080, 0x34420100, 0x1621024, +0x10400005, 0x0, 0x8f42020c, 0x24420001, +0xaf42020c, 0x8f42020c, 0x10000202, 0x8fa30064, +0x32c20400, 0x10400012, 0x34028100, 0x97c3000c, +0x1462000f, 0x0, 0x240c0200, 0xa7ac0076, +0x97c2000e, 0x8fc30008, 0x8fc40004, 0x8fab0064, +0x8fc50000, 0x256bfffc, 0xafab0064, 0xa7a2007e, +0xafc3000c, 0xafc40008, 0xafc50004, 0x27de0004, +0x8fa70064, 0x320200ff, 0x14400034, 0x3c020100, +0x97c4000c, 0x2c8305dd, 0x38828870, 0x2c420001, +0x621825, 0x10600015, 0x2821, 0x32c20800, +0x10400015, 0x24020800, 0x97c30014, 0x14620012, +0x3402aaaa, 0x97c3000e, 0x14620007, 0x2021, +0x97c30010, 0x24020300, 0x14620004, 0x801021, +0x97c20012, 0x2c440001, 0x801021, 0x54400006, +0x24050016, 0x10000004, 0x0, 0x24020800, +0x50820001, 0x2405000e, 0x10a00013, 0x3c52021, +0x24830009, 0x3c02001f, 0x3442ffff, 0x43102b, +0x10400003, 0x0, 0x8f420148, 0x621823, +0x90620000, 0x38430006, 0x2c630001, 0x38420011, +0x2c420001, 0x621825, 0x10600004, 0x3c020100, +0x94820002, 0x453821, 0x3c020100, 0x2c21024, +0x5040000e, 0xafa70064, 0x8fac0064, 0x10ec0008, +0x3c050007, 0x3c040001, 0x24846998, 0x8fa60064, +0x34a54000, 0xafa00010, 0xc002b17, 0xafa00014, +0x8fab0064, 0x256b0004, 0xafab0064, 0x8f420080, +0x8fac0064, 0x4c102b, 0x1040002c, 0x32c28000, +0x10400034, 0x240b0003, 0x32c21000, 0x10400031, +0xafab005c, 0x1000002e, 0x240c0004, 0x8f420350, +0x2403ffbf, 0x283a024, 0x24420001, 0xaf420350, +0x10000173, 0x8f420350, 0x3c020800, 0x2c2b025, +0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001, +0x24846960, 0x26620001, 0xafa20014, 0xafa30010, +0x8f860120, 0x8f870124, 0x3c050007, 0xc002b17, +0x34a55300, 0x10000162, 0x0, 0x8ea20000, +0x8ea30004, 0x3c040001, 0x24846978, 0xafb00010, +0xafb10014, 0x8ea70018, 0x34a55900, 0xc002b17, +0x603021, 0x10000156, 0x0, 0x8f420084, +0x8fab0064, 0x4b102b, 0x14400007, 0x3c020001, +0x2c21024, 0x10400004, 0x0, 0x240c0002, +0xafac005c, 0x8fab0064, 0x11600166, 0x27ac0020, +0xafac008c, 0x8fab005c, 0x240c0001, 0x556c0021, +0x240c0002, 0x8f430054, 0x8f420050, 0x1062000b, +0x274b0054, 0x8f510054, 0x3403ecc0, 0xafab004c, +0x26220001, 0x304201ff, 0xafa20054, 0x111140, +0x431021, 0x1000006b, 0x2e2a821, 0x8f420044, +0x8fac0064, 0x3c040001, 0x2484693c, 0xafac0014, +0xafa20010, 0x8f460054, 0x8f470050, 0x3c050007, +0xc002b17, 0x34a54300, 0x8f430350, 0x2402ffbf, +0x282a024, 0x24630001, 0xaf430350, 0x10000124, +0x8f420350, 0x156c001d, 0x0, 0x8f430074, +0x8f420070, 0x1062000a, 0x274b0074, 0x8f510074, +0xafab004c, 0x26220001, 0x304203ff, 0xafa20054, +0x111140, 0x24426cc0, 0x1000004a, 0x2e2a821, +0x8f420044, 0x8fac0064, 0x3c040001, 0x24846948, +0x3c050007, 0xafac0014, 0xafa20010, 0x8f460074, +0x8f470070, 0x34a54500, 0x240b0001, 0xc002b17, +0xafab005c, 0x1000ffc3, 0x0, 0x8f430064, +0x8f420060, 0x1062001a, 0x274c0064, 0x8f510064, +0x8fab005c, 0xafac004c, 0x26220001, 0x304200ff, +0xafa20054, 0x24020004, 0x1562000e, 0x111140, +0x111180, 0x24420cc0, 0x2e21021, 0xafa20044, +0x9442002a, 0x8fac0044, 0x8fab0064, 0x4b102b, +0x10400024, 0x25950020, 0x240c0001, 0x10000021, +0xa3ac0087, 0x24424cc0, 0x1000001e, 0x2e2a821, +0x8f420044, 0x8fab0064, 0x3c040001, 0x24846954, +0xafab0014, 0xafa20010, 0x8f460064, 0x8f470060, +0x3c050007, 0xc002b17, 0x34a54800, 0x3c020008, +0x2c21024, 0x1440ff61, 0x0, 0x8f420370, +0x240c0001, 0xafac005c, 0x24420001, 0xaf420370, +0x1000ff90, 0x8f420370, 0x27a30036, 0x131040, +0x621821, 0x94620000, 0x441021, 0x1000001f, +0xa4620000, 0xaebe0018, 0x93a20087, 0x10400084, +0x9821, 0x8fab0044, 0x8fa40064, 0x8fa3008c, +0x25620020, 0xafa20028, 0x25620008, 0xafa20030, +0x25620010, 0xafab002c, 0xafa20034, 0x9562002a, +0xa7a20038, 0x95620018, 0xa7a2003a, 0x9562001a, +0xa7a2003c, 0x9562001c, 0xa7a2003e, 0x94620018, +0x24630002, 0x822023, 0x1880ffdf, 0x26730001, +0x2e620004, 0x1440fff9, 0x0, 0x8f4200fc, +0x262102a, 0x14400030, 0x24030001, 0x8f83012c, +0x10600028, 0x0, 0x8f820124, 0x431023, +0x22143, 0x58800001, 0x24840040, 0x8f820128, +0x431023, 0x21943, 0x58600001, 0x24630040, +0x64102a, 0x54400001, 0x602021, 0xaf4400fc, +0x8f4200fc, 0x262102a, 0x10400016, 0x24030001, +0x1000001a, 0x306200ff, 0x8fac008c, 0x101040, +0x4c1021, 0x94470018, 0x101080, 0x4c1021, +0xafbe0010, 0x8c420008, 0x3c040001, 0x2484696c, +0x3c050007, 0x8c430004, 0x8c420000, 0x34a55500, +0x2003021, 0xc002b17, 0xafa30014, 0x10000039, +0x0, 0x8f420334, 0x1821, 0x24420001, +0xaf420334, 0x8f420334, 0x306200ff, 0x1040ff06, +0x8021, 0x8f430008, 0x2402fbff, 0x1260002d, +0x625024, 0x3c0b4000, 0x22b4025, 0x8fb1008c, +0x2669ffff, 0x2209021, 0x8e420008, 0x96270018, +0x8c440000, 0x8c450004, 0x56090004, 0x240b0001, +0x240c0002, 0x10000002, 0xafac0010, 0xafab0010, +0x16000004, 0xafa80014, 0x8f420008, 0x10000002, +0xafa20018, 0xafaa0018, 0x8f42010c, 0x3c03021, +0xafa80098, 0xafa9009c, 0x40f809, 0xafaa00a0, +0x8fa80098, 0x8fa9009c, 0x8faa00a0, 0x1040ffc2, +0x3c02001f, 0x96230018, 0x3442ffff, 0x3c3f021, +0x5e102b, 0x10400003, 0x26310002, 0x8f420148, +0x3c2f023, 0x26100001, 0x213102b, 0x1440ffda, +0x26520004, 0x8fb00064, 0x1000001a, 0x0, +0x96a3000a, 0x8fb00064, 0x70102b, 0x54400001, +0x608021, 0x8ea40000, 0x8ea50004, 0x8fab005c, +0x240c0002, 0xafac0010, 0x934305c4, 0xb1700, +0x10600003, 0x2223025, 0x3c020800, 0xc23025, +0xafa60014, 0x8f420008, 0xafa20018, 0x8f42010c, +0x3c03021, 0x40f809, 0x2003821, 0x1040fecb, +0x3c050007, 0x97ac0076, 0x11800007, 0x96a3000e, +0x934205c4, 0x14400004, 0x0, 0x97ab007e, +0x6c1825, 0xa6ab0016, 0x8fac006c, 0x3c02ffff, +0x1821024, 0x10400003, 0xc1402, 0x34630400, +0xa6a20014, 0xa6b0000a, 0x8fab0064, 0x560b0006, +0x3d0f021, 0x34620004, 0xafa00064, 0xa6a2000e, +0x1000000d, 0xa34005c4, 0x8fac0064, 0x3c02001f, +0x3442ffff, 0x5e102b, 0x1906023, 0xafac0064, +0xa6a3000e, 0x240b0001, 0x10400003, 0xa34b05c4, +0x8f420148, 0x3c2f023, 0x8fab0054, 0x8fac004c, +0xad8b0000, 0x8fac0064, 0x1580feba, 0x0, +0x8fab0064, 0x1160001b, 0x0, 0x934205c4, +0x10400006, 0x0, 0xaf5e00c4, 0xaf4b00c0, +0x8fac006c, 0x1000000e, 0xaf4c00c8, 0x97ab0076, +0x1160000b, 0x34038100, 0x8fa20020, 0x8c46000c, +0xa443000c, 0x97ac007e, 0x8c440004, 0x8c450008, +0xa44c000e, 0xac440000, 0xac450004, 0xac460008, +0x8f42034c, 0x24420001, 0xaf42034c, 0x10000010, +0x8f42034c, 0x8fab006c, 0x3164ffff, 0x2484fffc, +0x801821, 0x8f440250, 0x8f450254, 0x8f460118, +0x1021, 0xa32821, 0xa3382b, 0x822021, +0x872021, 0xaf440250, 0xc0f809, 0xaf450254, +0x8fbf00c0, 0x8fbe00bc, 0x8fb500b8, 0x8fb300b4, +0x8fb200b0, 0x8fb100ac, 0x8fb000a8, 0x3e00008, +0x27bd00c8, 0x3e00008, 0x0, 0x27bdffd8, +0xafbf0024, 0xafb00020, 0x8f43004c, 0x8f420048, +0x10620034, 0x0, 0x8f430048, 0x8f42004c, +0x622023, 0x4820001, 0x24840200, 0x8f430054, +0x8f42004c, 0x43102b, 0x14400004, 0x24020200, +0x8f43004c, 0x10000005, 0x431023, 0x8f420054, +0x8f43004c, 0x431023, 0x2442ffff, 0x405021, +0x8a102a, 0x54400001, 0x805021, 0x8f49004c, +0x8f48004c, 0x8f440188, 0x8f45018c, 0x8f46004c, +0x24071000, 0xafa70010, 0x84140, 0x1001821, +0x12a4821, 0x313001ff, 0xafb00014, 0x8f470014, +0x1021, 0x63140, 0xafa70018, 0xa32821, +0xa3382b, 0x822021, 0x872021, 0x3402ecc0, +0xc23021, 0x8f420108, 0x2e63021, 0x40f809, +0xa3940, 0x54400001, 0xaf50004c, 0x8f43004c, +0x8f420048, 0x14620018, 0x0, 0x8f420000, 0x10400007, 0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, 0x0, -0x8f820060, 0x2403f7ff, 0x431024, 0xaf820060, +0x8f820060, 0x2403fdff, 0x431024, 0xaf820060, 0x8f420000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0, -0x8f4200fc, 0x3c030001, 0x8f4400f8, 0x346330c8, -0x24420001, 0xaf4200fc, 0x8f850128, 0x2e31021, -0x54820004, 0x24820008, 0x3c020001, 0x34422ec8, -0x2e21021, 0x401821, 0xaf4300f8, 0xac600000, -0x8f4200f4, 0x14620004, 0x3c020001, 0x24a20020, -0x1000000f, 0xaf820128, 0x8f4300f8, 0x344230c8, -0x2e21021, 0x54620004, 0x24620008, 0x3c020001, -0x34422ec8, 0x2e21021, 0x401821, 0x8c620004, -0x21140, 0xa21021, 0xaf820128, 0xac600000, -0x8ca30018, 0x30620070, 0x1040002d, 0x30620020, +0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f43005c, +0x8f420058, 0x10620049, 0x0, 0x8f430058, +0x8f42005c, 0x622023, 0x4820001, 0x24840100, +0x8f430064, 0x8f42005c, 0x43102b, 0x14400004, +0x24020100, 0x8f43005c, 0x10000005, 0x431023, +0x8f420064, 0x8f43005c, 0x431023, 0x2442ffff, +0x403821, 0x87102a, 0x54400001, 0x803821, +0x8f42005c, 0x471021, 0x305000ff, 0x32c21000, +0x10400015, 0x24082000, 0x8f49005c, 0x8f440190, +0x8f450194, 0x8f46005c, 0x73980, 0xafa80010, +0xafb00014, 0x8f480014, 0x94980, 0x1201821, +0x1021, 0xa32821, 0xa3482b, 0x822021, +0x892021, 0x63180, 0xafa80018, 0x8f420108, +0x10000014, 0x24c60cc0, 0x8f49005c, 0x8f440190, +0x8f450194, 0x8f46005c, 0x73940, 0xafa80010, +0xafb00014, 0x8f480014, 0x94940, 0x1201821, +0x1021, 0xa32821, 0xa3482b, 0x822021, +0x892021, 0x63140, 0xafa80018, 0x8f420108, +0x24c64cc0, 0x40f809, 0x2e63021, 0x54400001, +0xaf50005c, 0x8f43005c, 0x8f420058, 0x14620018, +0x0, 0x8f420000, 0x10400007, 0x0, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x2403feff, +0x431024, 0xaf820060, 0x8f420000, 0x10400003, +0x0, 0x10000002, 0xaf80004c, 0xaf800048, +0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028, +0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, +0xafb00020, 0x8f43006c, 0x8f420068, 0x10620033, +0x0, 0x8f430068, 0x8f42006c, 0x622023, +0x4820001, 0x24840400, 0x8f430074, 0x8f42006c, +0x43102b, 0x14400004, 0x24020400, 0x8f43006c, +0x10000005, 0x431023, 0x8f420074, 0x8f43006c, +0x431023, 0x2442ffff, 0x405021, 0x8a102a, +0x54400001, 0x805021, 0x8f49006c, 0x8f48006c, +0x8f440198, 0x8f45019c, 0x8f46006c, 0x24074000, +0xafa70010, 0x84140, 0x1001821, 0x12a4821, +0x313003ff, 0xafb00014, 0x8f470014, 0x1021, +0x63140, 0x24c66cc0, 0xafa70018, 0xa32821, +0xa3382b, 0x822021, 0x872021, 0x8f420108, +0x2e63021, 0x40f809, 0xa3940, 0x54400001, +0xaf50006c, 0x8f43006c, 0x8f420068, 0x14620018, +0x0, 0x8f420000, 0x10400007, 0x0, +0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, +0x10000005, 0x0, 0xaf800048, 0x8f820048, +0x1040fffd, 0x0, 0x8f820060, 0x2403f7ff, +0x431024, 0xaf820060, 0x8f420000, 0x10400003, +0x0, 0x10000002, 0xaf80004c, 0xaf800048, +0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028, +0x3e00008, 0x0, 0x8f4200fc, 0x3c030001, +0x8f4400f8, 0x346330c8, 0x24420001, 0xaf4200fc, +0x8f850128, 0x2e31021, 0x54820004, 0x24820008, +0x3c020001, 0x34422ec8, 0x2e21021, 0x401821, +0xaf4300f8, 0xac600000, 0x8f4200f4, 0x14620004, +0x3c020001, 0x24a20020, 0x1000000f, 0xaf820128, +0x8f4300f8, 0x344230c8, 0x2e21021, 0x54620004, +0x24620008, 0x3c020001, 0x34422ec8, 0x2e21021, +0x401821, 0x8c620004, 0x21140, 0xa21021, +0xaf820128, 0xac600000, 0x8ca30018, 0x30620070, +0x1040002d, 0x30620020, 0x10400004, 0x3c020010, +0x2c21024, 0x1040000d, 0x0, 0x30620040, +0x10400004, 0x3c020020, 0x2c21024, 0x10400007, +0x0, 0x30620010, 0x1040001f, 0x3c020040, +0x2c21024, 0x1440001c, 0x0, 0x8f820040, +0x30420001, 0x14400008, 0x2021, 0x8c030104, +0x24020001, 0x50620005, 0x24040001, 0x8c020264, +0x10400003, 0x801021, 0x24040001, 0x801021, +0x10400006, 0x0, 0x8f42030c, 0x24420001, +0xaf42030c, 0x10000008, 0x8f42030c, 0x8f820044, +0x34420004, 0xaf820044, 0x8f420308, 0x24420001, +0xaf420308, 0x8f420308, 0x3e00008, 0x0, +0x3e00008, 0x0, 0x27bdff98, 0xafbf0060, +0xafbe005c, 0xafb50058, 0xafb30054, 0xafb20050, +0xafb1004c, 0xafb00048, 0x8f4200fc, 0x24420001, +0xaf4200fc, 0x8f880128, 0x25020020, 0xaf820128, +0x8d030018, 0x30620070, 0x1040002e, 0x30620020, 0x10400004, 0x3c020010, 0x2c21024, 0x1040000d, 0x0, 0x30620040, 0x10400004, 0x3c020020, 0x2c21024, 0x10400007, 0x0, 0x30620010, -0x1040001f, 0x3c020040, 0x2c21024, 0x1440001c, +0x104001a9, 0x3c020040, 0x2c21024, 0x144001a6, 0x0, 0x8f820040, 0x30420001, 0x14400008, 0x2021, 0x8c030104, 0x24020001, 0x50620005, 0x24040001, 0x8c020264, 0x10400003, 0x801021, 0x24040001, 0x801021, 0x10400006, 0x0, -0x8f4202fc, 0x24420001, 0xaf4202fc, 0x10000008, -0x8f4202fc, 0x8f820044, 0x34420004, 0xaf820044, -0x8f4202f8, 0x24420001, 0xaf4202f8, 0x8f4202f8, -0x3e00008, 0x0, 0x3e00008, 0x0, -0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb50058, -0xafb30054, 0xafb20050, 0xafb1004c, 0xafb00048, -0x8f4200fc, 0x24420001, 0xaf4200fc, 0x8f880128, -0x25020020, 0xaf820128, 0x8d030018, 0x30620070, -0x1040002e, 0x30620020, 0x10400004, 0x3c020010, -0x2c21024, 0x1040000d, 0x0, 0x30620040, -0x10400004, 0x3c020020, 0x2c21024, 0x10400007, -0x0, 0x30620010, 0x104001a6, 0x3c020040, -0x2c21024, 0x144001a3, 0x0, 0x8f820040, -0x30420001, 0x14400008, 0x2021, 0x8c030104, -0x24020001, 0x50620005, 0x24040001, 0x8c020264, -0x10400003, 0x801021, 0x24040001, 0x801021, -0x10400006, 0x0, 0x8f4202fc, 0x24420001, -0xaf4202fc, 0x1000018f, 0x8f4202fc, 0x8f820044, -0x34420004, 0xaf820044, 0x8f4202f8, 0x24420001, -0xaf4202f8, 0x10000187, 0x8f4202f8, 0x30620002, -0x10400148, 0x3c020800, 0x8d0a001c, 0x1422024, -0xafaa0024, 0xa5702, 0xafaa0034, 0x8faa0024, -0x314affff, 0xafaa0024, 0x950a0016, 0xafaa002c, -0x8faa0034, 0x24020001, 0x15420007, 0x24020002, -0x8faa0024, 0xa1140, 0x3403ecc0, 0x431021, -0x10000014, 0x2e2a821, 0x15420006, 0x24020003, -0x8faa0024, 0xa1140, 0x24426cc0, 0x1000000d, -0x2e2a821, 0x8faa0034, 0x15420006, 0x0, -0x8faa0024, 0xa1140, 0x24424cc0, 0x10000005, -0x2e2a821, 0x8faa0024, 0xa1180, 0x571021, -0x24550ce0, 0x96a2000e, 0x305efffc, 0x30420400, -0x144000d8, 0x8821, 0x10800004, 0x24091000, -0x97b1002e, 0x100000d4, 0x0, 0x8eb30018, -0x966a000c, 0xa7aa003e, 0x97a3003e, 0x2c6205dd, -0x10400015, 0x2021, 0x32c20800, 0x10400015, -0x24020800, 0x96630014, 0x14620012, 0x3402aaaa, -0x9663000e, 0x14620007, 0x2821, 0x96630010, -0x24020300, 0x14620004, 0xa01021, 0x96620012, -0x2c450001, 0xa01021, 0x54400006, 0x24040016, -0x10000004, 0x0, 0x24020800, 0x50620001, -0x2404000e, 0x108000b3, 0x2649021, 0x92420000, -0x3042000f, 0x28080, 0x32c20100, 0x1040001e, -0x2501821, 0x3c020020, 0x43102b, 0x1440000e, -0x2402021, 0x2821, 0x94820000, 0x24840002, -0xa22821, 0x83102b, 0x1440fffb, 0x30a2ffff, -0x51c02, 0x622821, 0x51c02, 0x30a2ffff, -0x10000009, 0x622821, 0x8f47013c, 0x8f420110, -0x102842, 0x3c060020, 0x40f809, 0xafa80040, -0x3045ffff, 0x8fa80040, 0x50a00001, 0x3405ffff, -0x10000002, 0x37de0002, 0x2821, 0x32c20080, -0x1040008c, 0xa6a50010, 0x26430009, 0x3c02001f, +0x8f42030c, 0x24420001, 0xaf42030c, 0x10000192, +0x8f42030c, 0x8f820044, 0x34420004, 0xaf820044, +0x8f420308, 0x24420001, 0xaf420308, 0x1000018a, +0x8f420308, 0x30620002, 0x1040014b, 0x3c020800, +0x8d1e001c, 0x1e5702, 0xafaa0034, 0x950a0016, +0x3c22024, 0xafaa0024, 0x8faa0034, 0x24020001, +0x15420006, 0x33deffff, 0x1e1140, 0x3403ecc0, +0x431021, 0x10000010, 0x2e2a821, 0x24020002, +0x15420005, 0x24020003, 0x1e1140, 0x24426cc0, +0x10000009, 0x2e2a821, 0x15420005, 0x1e1180, +0x1e1140, 0x24424cc0, 0x10000003, 0x2e2a821, +0x571021, 0x24550ce0, 0x96a2000e, 0x304afffc, +0x30420400, 0x10400003, 0xafaa002c, 0x100000e1, +0x8821, 0x10800004, 0x8821, 0x97b10026, +0x100000dd, 0xa6b10012, 0x8eb30018, 0x966a000c, +0xa7aa003e, 0x97a5003e, 0x2ca305dd, 0x38a28870, +0x2c420001, 0x621825, 0x10600015, 0x2021, +0x32c20800, 0x10400015, 0x24020800, 0x96630014, +0x14620012, 0x3402aaaa, 0x9663000e, 0x14620007, +0x2821, 0x96630010, 0x24020300, 0x14620004, +0xa01021, 0x96620012, 0x2c450001, 0xa01021, +0x54400006, 0x24040016, 0x10000004, 0x0, +0x24020800, 0x50a20001, 0x2404000e, 0x108000b9, +0x2649021, 0x92420000, 0x3042000f, 0x28080, +0x32c20100, 0x10400020, 0x2501821, 0x3c020020, +0x43102b, 0x1440000e, 0x2402021, 0x2821, +0x94820000, 0x24840002, 0xa22821, 0x83102b, +0x1440fffb, 0x30a2ffff, 0x51c02, 0x622821, +0x51c02, 0x30a2ffff, 0x10000009, 0x622821, +0x8f470148, 0x8f420110, 0x102842, 0x3c060020, +0x40f809, 0xafa80040, 0x3045ffff, 0x8fa80040, +0x50a00001, 0x3405ffff, 0x8faa002c, 0x354a0002, +0x10000002, 0xafaa002c, 0x2821, 0x32c20080, +0x10400090, 0xa6a50010, 0x26430009, 0x3c02001f, 0x3442ffff, 0x43102b, 0x10400003, 0x0, -0x8f42013c, 0x621823, 0x90660000, 0x30c200ff, +0x8f420148, 0x621823, 0x90660000, 0x30c200ff, 0x38430006, 0x2c630001, 0x38420011, 0x2c420001, -0x621825, 0x1060007b, 0x24020800, 0x8821, +0x621825, 0x1060007f, 0x24020800, 0x8821, 0x97a3003e, 0x1462000f, 0x2602021, 0x96710000, 0x96620002, 0x96630004, 0x96640006, 0x2228821, 0x2238821, 0x2248821, 0x96620008, 0x9663000a, @@ -7092,155 +7382,162 @@ 0x3222ffff, 0x628821, 0x111c02, 0x3222ffff, 0x628821, 0x32c20200, 0x10400003, 0x26440006, 0x1000003e, 0x8021, 0x3c05001f, 0x34a5ffff, -0xa4102b, 0x10400003, 0x0, 0x8f42013c, +0xa4102b, 0x10400003, 0x0, 0x8f420148, 0x822023, 0x94820000, 0x30421fff, 0x10400004, 0x2644000c, 0x96420002, 0x10000030, 0x508023, 0x96420002, 0x26430014, 0x508023, 0x3c020020, 0x43102b, 0x1440000a, 0xd08021, 0x9642000c, 0x2028021, 0x9642000e, 0x96430010, 0x96440012, 0x2028021, 0x2038021, 0x10000020, 0x2048021, -0xa4102b, 0x10400003, 0x0, 0x8f42013c, +0xa4102b, 0x10400003, 0x0, 0x8f420148, 0x822023, 0x94820000, 0x24840002, 0x2028021, -0xa4102b, 0x10400003, 0x0, 0x8f42013c, +0xa4102b, 0x10400003, 0x0, 0x8f420148, 0x822023, 0x94820000, 0x24840002, 0x2028021, -0xa4102b, 0x10400003, 0x0, 0x8f42013c, +0xa4102b, 0x10400003, 0x0, 0x8f420148, 0x822023, 0x94820000, 0x24840002, 0x2028021, -0xa4102b, 0x10400003, 0x0, 0x8f42013c, +0xa4102b, 0x10400003, 0x0, 0x8f420148, 0x822023, 0x94820000, 0x2028021, 0x3c020100, -0x2c21024, 0x1040000c, 0x33c20004, 0x1040000a, -0x0, 0x9504000e, 0x2642021, 0xc003c24, -0x2484fffc, 0x3042ffff, 0x2228821, 0x111c02, -0x3222ffff, 0x628821, 0x8faa002c, 0x1518823, -0x111402, 0x2228821, 0x2308821, 0x111402, -0x2228821, 0x3231ffff, 0x52200001, 0x3411ffff, -0x37de0001, 0x24091000, 0x33c20004, 0xa6b10012, -0x10400002, 0xa6be000e, 0x34098000, 0x8f480044, -0x8f440190, 0x8f450194, 0xafa90010, 0x8f490044, -0x84140, 0x1001821, 0xafa90014, 0x8f48000c, -0x2a03021, 0x24070020, 0xafa80018, 0x8f48010c, -0x1021, 0xa32821, 0xa3482b, 0x822021, -0x100f809, 0x892021, 0x1440000c, 0x0, -0x8f820128, 0x8faa0024, 0x3c040001, 0x24843988, -0xafaa0014, 0xafa20010, 0x8f860124, 0x8f870120, -0x3c050007, 0xc0029bb, 0x34a59920, 0x8f420358, -0x2442ffff, 0xaf420358, 0x8f420044, 0x8f430088, -0x24420001, 0x431024, 0xaf420044, 0x8faa0034, -0x8f440358, 0x24020001, 0x15420006, 0x24020002, -0x8f42034c, 0x2442ffff, 0xaf42034c, 0x10000049, -0x8f42034c, 0x15420006, 0x0, 0x8f420354, -0x2442ffff, 0xaf420354, 0x10000042, 0x8f420354, -0x8f420350, 0x2442ffff, 0xaf420350, 0x1000003d, -0x8f420350, 0x30621000, 0x10400005, 0x30628000, -0x8f420078, 0x24420001, 0x10000036, 0xaf420078, -0x10400034, 0x0, 0x8f420078, 0x24420001, -0xaf420078, 0x8c030240, 0x43102b, 0x1440002d, -0x24070008, 0x8f440158, 0x8f45015c, 0x8f430044, -0x8f48000c, 0x8f860120, 0x24020040, 0xafa20010, -0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809, -0x24c6001c, 0x14400011, 0x24020001, 0x3c010001, -0x370821, 0xa02240f2, 0x8f820124, 0xafa20010, -0x8f820128, 0x3c040001, 0x2484390c, 0xafa20014, -0x8f460044, 0x8f870120, 0x3c050009, 0xc0029bb, -0x34a51300, 0x1000000b, 0x0, 0x8f4202f4, -0x24420001, 0xaf4202f4, 0x8f4202f4, 0x8f420044, -0xaf42007c, 0x3c010001, 0x370821, 0xa02040f2, -0xaf400078, 0x8f420308, 0x24420001, 0xaf420308, -0x8f420308, 0x8fbf0060, 0x8fbe005c, 0x8fb50058, -0x8fb30054, 0x8fb20050, 0x8fb1004c, 0x8fb00048, -0x3e00008, 0x27bd0068, 0x3e00008, 0x0, -0x0, 0x0, 0x0, 0x8f420130, -0xaf8200c0, 0x8f420130, 0xaf8200c4, 0x8f420130, -0xaf8200c8, 0x8f42012c, 0xaf8200d0, 0x8f42012c, -0xaf8200d4, 0x8f42012c, 0x3e00008, 0xaf8200d8, +0x2c21024, 0x1040000e, 0x0, 0x8faa002c, +0x31420004, 0x1040000a, 0x0, 0x9504000e, +0x2642021, 0xc003ec4, 0x2484fffc, 0x3042ffff, +0x2228821, 0x111c02, 0x3222ffff, 0x628821, +0x8faa0024, 0x1518823, 0x111402, 0x2228821, +0x2308821, 0x111402, 0x2228821, 0x3231ffff, +0x52200001, 0x3411ffff, 0x8faa002c, 0x354a0001, +0xafaa002c, 0xa6b10012, 0x97aa002e, 0xa6aa000e, +0x8faa002c, 0x31420004, 0x10400002, 0x24091000, +0x34098000, 0x8f480044, 0x8f4401a0, 0x8f4501a4, +0xafa90010, 0x8f490044, 0x84140, 0x1001821, +0xafa90014, 0x8f48000c, 0x2a03021, 0x24070020, +0xafa80018, 0x8f48010c, 0x1021, 0xa32821, +0xa3482b, 0x822021, 0x100f809, 0x892021, +0x1440000b, 0x0, 0x8f820128, 0x3c040001, +0x248469a4, 0xafbe0014, 0xafa20010, 0x8f860124, +0x8f870120, 0x3c050007, 0xc002b17, 0x34a59920, +0x8f420368, 0x2442ffff, 0xaf420368, 0x8f420044, +0x8f430088, 0x24420001, 0x431024, 0xaf420044, +0x8faa0034, 0x8f440368, 0x24020001, 0x15420006, +0x24020002, 0x8f42035c, 0x2442ffff, 0xaf42035c, +0x10000049, 0x8f42035c, 0x15420006, 0x0, +0x8f420364, 0x2442ffff, 0xaf420364, 0x10000042, +0x8f420364, 0x8f420360, 0x2442ffff, 0xaf420360, +0x1000003d, 0x8f420360, 0x30621000, 0x10400005, +0x30628000, 0x8f420078, 0x24420001, 0x10000036, +0xaf420078, 0x10400034, 0x0, 0x8f420078, +0x24420001, 0xaf420078, 0x8c030240, 0x43102b, +0x1440002d, 0x24070008, 0x8f440168, 0x8f45016c, +0x8f430044, 0x8f48000c, 0x8f860120, 0x24020040, +0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c, +0x40f809, 0x24c6001c, 0x14400011, 0x24020001, +0x3c010001, 0x370821, 0xa02240f2, 0x8f820124, +0xafa20010, 0x8f820128, 0x3c040001, 0x2484691c, +0xafa20014, 0x8f460044, 0x8f870120, 0x3c050009, +0xc002b17, 0x34a51300, 0x1000000b, 0x0, +0x8f420304, 0x24420001, 0xaf420304, 0x8f420304, +0x8f420044, 0xaf42007c, 0x3c010001, 0x370821, +0xa02040f2, 0xaf400078, 0x8f420318, 0x24420001, +0xaf420318, 0x8f420318, 0x8fbf0060, 0x8fbe005c, +0x8fb50058, 0x8fb30054, 0x8fb20050, 0x8fb1004c, +0x8fb00048, 0x3e00008, 0x27bd0068, 0x3e00008, +0x0, 0x0, 0x0, 0x8f42013c, +0xaf8200c0, 0x8f42013c, 0xaf8200c4, 0x8f42013c, +0xaf8200c8, 0x8f420138, 0xaf8200d0, 0x8f420138, +0xaf8200d4, 0x8f420138, 0x3e00008, 0xaf8200d8, 0x27bdffe0, 0x27840208, 0x24050200, 0xafbf0018, -0xc002a3f, 0x24060008, 0x8c020204, 0xc003d4a, -0xaf820210, 0x2021, 0x8c060248, 0x24020004, -0x3c010001, 0xac223d88, 0xc0047d4, 0x24050004, -0x3c020001, 0x8c423d84, 0x30420001, 0x10400007, -0x24020001, 0x3c010001, 0xac223d88, 0x2021, -0x24050001, 0xc0047d4, 0x3c06601b, 0x3c040001, -0x24843a50, 0x8f420144, 0x8f430148, 0x3c050008, -0x8f46014c, 0x21640, 0x31940, 0x34630403, -0x431025, 0x633c0, 0x461025, 0xaf82021c, -0xafa00010, 0xafa00014, 0x8f86021c, 0x34a50200, -0xc0029bb, 0x3821, 0x3c010001, 0xac203d80, -0x3c010001, 0xac203d98, 0x8fbf0018, 0x3e00008, -0x27bd0020, 0x27bdffe0, 0x3c050008, 0x34a50300, -0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, -0x3c040001, 0x24843a5c, 0xc0029bb, 0x3821, -0x8f420400, 0x24420001, 0xaf420400, 0x8f420400, -0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffd8, -0xafbf0020, 0xafb1001c, 0xafb00018, 0x8f420394, -0x24420001, 0xaf420394, 0x8f420394, 0x8f900220, -0x8f8200e0, 0xafa20010, 0x8f8200e4, 0xafa20014, -0x8f8600c4, 0x8f8700c8, 0x3c040001, 0x24843a68, -0xc0029bb, 0x2002821, 0x3c044000, 0x2041024, -0x504000ae, 0x3c040100, 0x8f4203ac, 0x24420001, -0xaf4203ac, 0x8f4203ac, 0x8f8700c4, 0x8f8300c8, -0x8f42013c, 0x671823, 0x43102b, 0x10400003, -0x0, 0x8f42013c, 0x621821, 0x10600005, -0x0, 0x8f420140, 0x43102b, 0x10400007, -0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb, -0x431024, 0x100000cc, 0x441025, 0x8f820220, -0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004, -0xaf820220, 0x8f8600c8, 0x8f840120, 0x8f830124, -0x10000005, 0x2821, 0x14620002, 0x24620020, -0x27624800, 0x401821, 0x1064000c, 0x30a200ff, -0x8c620018, 0x30420003, 0x1040fff7, 0x27624fe0, -0x8f4203c0, 0x24050001, 0x24420001, 0xaf4203c0, -0x8f4203c0, 0x8c660008, 0x30a200ff, 0x14400058, -0x0, 0x934205b5, 0x14400055, 0x0, -0x8f8700c4, 0x8f8800e0, 0x8f8400e4, 0x2402fff8, -0x1024024, 0x1041023, 0x218c3, 0x4620001, -0x24630200, 0x10600005, 0x24020001, 0x10620009, -0x0, 0x1000001f, 0x0, 0x8f4203b0, -0xe03021, 0x24420001, 0xaf4203b0, 0x10000040, -0x8f4203b0, 0x8f4203b4, 0x24420001, 0xaf4203b4, -0x8c860000, 0x8f42013c, 0x8f4303b4, 0xe61823, -0x43102b, 0x10400004, 0x2c62233f, 0x8f42013c, -0x621821, 0x2c62233f, 0x14400031, 0x0, -0x8f4201fc, 0x24420001, 0xaf4201fc, 0x8f4201fc, -0xe03021, 0x24820008, 0xaf8200e4, 0x10000028, -0xaf8200e8, 0x8f4203b8, 0x24420001, 0xaf4203b8, -0x8f4203b8, 0x8c850000, 0x8f42013c, 0xa71823, -0x43102b, 0x10400003, 0x0, 0x8f42013c, -0x621821, 0x8f420140, 0x43102b, 0x5440000a, -0xa03021, 0x8f4201fc, 0x24420001, 0xaf4201fc, -0x8f4201fc, 0x24820008, 0xaf8200e4, 0x8f8400e4, -0x1488ffec, 0xaf8400e8, 0x1488000d, 0x27623000, -0x14820002, 0x2482fff8, 0x27623ff8, 0x94430006, -0x3c02001f, 0x3442ffff, 0xc33021, 0x46102b, -0x10400003, 0x0, 0x8f42013c, 0xc23023, -0xaf8600c8, 0x8f8300c4, 0x8f42013c, 0xc31823, -0x43102b, 0x10400003, 0x0, 0x8f42013c, -0x621821, 0x10600005, 0x0, 0x8f420140, -0x43102b, 0x50400008, 0x3c02fdff, 0x8f820220, -0x3c0308ff, 0x3463fffb, 0x431024, 0x3c034000, -0x10000041, 0x431025, 0x3442ffff, 0x8f4303bc, -0x282a024, 0x24020001, 0xa34205b1, 0x24630001, -0xaf4303bc, 0x10000039, 0x8f4203bc, 0x2041024, -0x1040000e, 0x3c110200, 0x8f420398, 0x24420001, -0xaf420398, 0x8f420398, 0x8f820220, 0x3c0308ff, -0x3463ffff, 0x431024, 0x441025, 0xc003b0b, +0xc002b9b, 0x24060008, 0x8c020204, 0xc003fea, +0xaf820210, 0x3c020001, 0x8c426e14, 0x30420002, +0x1040000e, 0x2021, 0x8c060248, 0x24020002, +0x3c010001, 0xac226e18, 0xc005134, 0x24050002, +0x2021, 0x8c060248, 0x24020001, 0x3c010001, +0xac226e18, 0x10000011, 0x24050001, 0x8c060248, +0x24020004, 0x3c010001, 0xac226e18, 0xc005134, +0x24050004, 0x3c020001, 0x8c426e14, 0x30420001, +0x10400008, 0x24020001, 0x3c010001, 0xac226e18, +0x2021, 0x24050001, 0x3c06601b, 0xc005134, +0x0, 0x3c040001, 0x24846a60, 0x8f420150, +0x8f430154, 0x3c050008, 0x8f460158, 0x21640, +0x31940, 0x34630403, 0x431025, 0x633c0, +0x461025, 0xaf82021c, 0xafa00010, 0xafa00014, +0x8f86021c, 0x34a50200, 0xc002b17, 0x3821, +0x3c010001, 0xac206e10, 0x3c010001, 0xac206e28, +0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, +0x3c050008, 0x34a50300, 0xafbf0018, 0xafa00010, +0xafa00014, 0x8f860200, 0x3c040001, 0x24846a6c, +0xc002b17, 0x3821, 0x8f420410, 0x24420001, +0xaf420410, 0x8f420410, 0x8fbf0018, 0x3e00008, +0x27bd0020, 0x27bdffd8, 0xafbf0020, 0xafb1001c, +0xafb00018, 0x8f4203a4, 0x24420001, 0xaf4203a4, +0x8f4203a4, 0x8f900220, 0x8f8200e0, 0xafa20010, +0x8f8200e4, 0xafa20014, 0x8f8600c4, 0x8f8700c8, +0x3c040001, 0x24846a78, 0xc002b17, 0x2002821, +0x3c044000, 0x2041024, 0x504000b4, 0x3c040100, +0x8f4203bc, 0x24420001, 0xaf4203bc, 0x8f4203bc, +0x8f8700c4, 0x8f8300c8, 0x8f420148, 0x671823, +0x43102b, 0x10400003, 0x0, 0x8f420148, +0x621821, 0x10600005, 0x0, 0x8f42014c, +0x43102b, 0x1040000b, 0x0, 0x8f8200e0, +0x8f430124, 0xaf42011c, 0xaf430114, 0x8f820220, +0x3c0308ff, 0x3463fffb, 0x431024, 0x100000ce, +0x441025, 0x8f820220, 0x3c0308ff, 0x3463ffff, +0x431024, 0x34420004, 0xaf820220, 0x8f8200e0, +0x8f430124, 0xaf42011c, 0xaf430114, 0x8f8600c8, +0x8f840120, 0x8f830124, 0x10000005, 0x2821, +0x14620002, 0x24620020, 0x27624800, 0x401821, +0x1064000c, 0x30a200ff, 0x8c620018, 0x30420003, +0x1040fff7, 0x27624fe0, 0x8f4203d0, 0x24050001, +0x24420001, 0xaf4203d0, 0x8f4203d0, 0x8c660008, +0x30a200ff, 0x14400058, 0x0, 0x934205c4, +0x14400055, 0x0, 0x8f8700c4, 0x8f8800e0, +0x8f8400e4, 0x2402fff8, 0x1024024, 0x1041023, +0x218c3, 0x4620001, 0x24630200, 0x10600005, +0x24020001, 0x10620009, 0x0, 0x1000001f, +0x0, 0x8f4203c0, 0xe03021, 0x24420001, +0xaf4203c0, 0x10000040, 0x8f4203c0, 0x8f4203c4, +0x24420001, 0xaf4203c4, 0x8c860000, 0x8f420148, +0x8f4303c4, 0xe61823, 0x43102b, 0x10400004, +0x2c62233f, 0x8f420148, 0x621821, 0x2c62233f, +0x14400031, 0x0, 0x8f42020c, 0x24420001, +0xaf42020c, 0x8f42020c, 0xe03021, 0x24820008, +0xaf8200e4, 0x10000028, 0xaf8200e8, 0x8f4203c8, +0x24420001, 0xaf4203c8, 0x8f4203c8, 0x8c850000, +0x8f420148, 0xa71823, 0x43102b, 0x10400003, +0x0, 0x8f420148, 0x621821, 0x8f42014c, +0x43102b, 0x5440000a, 0xa03021, 0x8f42020c, +0x24420001, 0xaf42020c, 0x8f42020c, 0x24820008, +0xaf8200e4, 0x8f8400e4, 0x1488ffec, 0xaf8400e8, +0x1488000d, 0x27623000, 0x14820002, 0x2482fff8, +0x27623ff8, 0x94430006, 0x3c02001f, 0x3442ffff, +0xc33021, 0x46102b, 0x10400003, 0x0, +0x8f420148, 0xc23023, 0xaf8600c8, 0x8f8300c4, +0x8f420148, 0xc31823, 0x43102b, 0x10400003, +0x0, 0x8f420148, 0x621821, 0x10600005, +0x0, 0x8f42014c, 0x43102b, 0x50400008, +0x3c02fdff, 0x8f820220, 0x3c0308ff, 0x3463fffb, +0x431024, 0x3c034000, 0x1000003f, 0x431025, +0x8f4303cc, 0x3442ffff, 0x282a024, 0x24630001, +0xaf4303cc, 0x10000039, 0x8f4203cc, 0x2041024, +0x1040000e, 0x3c110200, 0x8f4203a8, 0x24420001, +0xaf4203a8, 0x8f4203a8, 0x8f820220, 0x3c0308ff, +0x3463ffff, 0x431024, 0x441025, 0xc003d87, 0xaf820220, 0x10000029, 0x0, 0x2111024, -0x50400008, 0x3c110400, 0x8f42039c, 0x24420001, -0xaf42039c, 0xc003b0b, 0x8f42039c, 0x10000019, +0x50400008, 0x3c110400, 0x8f4203ac, 0x24420001, +0xaf4203ac, 0xc003d87, 0x8f4203ac, 0x10000019, 0x0, 0x2111024, 0x1040001c, 0x0, 0x8f830224, 0x24021402, 0x14620009, 0x3c050008, -0x3c040001, 0x24843a74, 0xafa00010, 0xafa00014, -0x8f860224, 0x34a50500, 0xc0029bb, 0x3821, -0x8f4203a0, 0x24420001, 0xaf4203a0, 0x8f4203a0, -0x8f820220, 0x2002021, 0x34420002, 0xc00456c, +0x3c040001, 0x24846a84, 0xafa00010, 0xafa00014, +0x8f860224, 0x34a50500, 0xc002b17, 0x3821, +0x8f4203b0, 0x24420001, 0xaf4203b0, 0x8f4203b0, +0x8f820220, 0x2002021, 0x34420002, 0xc004ecc, 0xaf820220, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x511025, 0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0028, -0x3e00008, 0x0, 0x3c020001, 0x8c423d98, +0x3e00008, 0x0, 0x3c020001, 0x8c426e28, 0x27bdffb0, 0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c, 0xafb20038, 0xafb10034, 0x1040000f, -0xafb00030, 0x3c040001, 0x24843a80, 0x3c050008, +0xafb00030, 0x3c040001, 0x24846a90, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220, 0x34a50600, -0x24020001, 0x3c010001, 0xac203d98, 0x3c010001, -0xac223d8c, 0xc0029bb, 0x3821, 0x3c037fff, +0x24020001, 0x3c010001, 0xac206e28, 0x3c010001, +0xac226e1c, 0xc002b17, 0x3821, 0x3c037fff, 0x8c020268, 0x3463ffff, 0x3c04fdff, 0x431024, 0xac020268, 0x8f420004, 0x3484ffff, 0x30420002, 0x10400092, 0x284a024, 0x3c040600, 0x34842000, @@ -7248,49 +7545,58 @@ 0xaf420004, 0xafa40020, 0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002, 0xafaa002c, 0x27c50001, 0x8c020228, 0xa09021, 0x1642000e, 0x1e38c0, -0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c, -0x8c020228, 0x3c040001, 0x24843a18, 0x3c050009, +0x8f42033c, 0x24420001, 0xaf42033c, 0x8f42033c, +0x8c020228, 0x3c040001, 0x24846a28, 0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006d, 0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b, -0x9821, 0xe08821, 0x263504c0, 0x8f440168, -0x8f45016c, 0x2201821, 0x240a0004, 0xafaa0010, +0x9821, 0xe08821, 0x263504c0, 0x8f440178, +0x8f45017c, 0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021, 0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008, 0xa32821, 0xa3482b, 0x822021, 0x100f809, 0x892021, 0x54400006, 0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff, -0x54400017, 0xaf520018, 0x8f420368, 0x24420001, -0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c, -0xafa20010, 0x8f820124, 0x3c040001, 0x24843a24, +0x54400017, 0xaf520018, 0x8f420378, 0x24420001, +0xaf420378, 0x8f420378, 0x8f820120, 0x8faa002c, +0xafa20010, 0x8f820124, 0x3c040001, 0x24846a34, 0x3c050009, 0xafa20014, 0x8d460000, 0x10000035, -0x34a50600, 0x8f4202f8, 0x24130001, 0x24420001, -0xaf4202f8, 0x8f4202f8, 0x1000001e, 0x326200ff, +0x34a50600, 0x8f420308, 0x24130001, 0x24420001, +0xaf420308, 0x8f420308, 0x1000001e, 0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9, 0x10400016, 0x9821, 0x3c150020, -0x24110010, 0x8f42000c, 0x8f440150, 0x8f450154, +0x24110010, 0x8f42000c, 0x8f440160, 0x8f450164, 0x8f860120, 0xafb10010, 0xafb20014, 0x551025, 0xafa20018, 0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3, 0x0, 0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffee, 0x0, -0x326200ff, 0x14400011, 0x0, 0x8f420368, -0x24420001, 0xaf420368, 0x8f420368, 0x8f820120, +0x326200ff, 0x14400011, 0x0, 0x8f420378, +0x24420001, 0xaf420378, 0x8f420378, 0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124, 0x3c040001, -0x24843a2c, 0x3c050009, 0xafa20014, 0x8d460000, -0x34a50700, 0xc0029bb, 0x3c03821, 0x8f4202dc, -0x24420001, 0xaf4202dc, 0x8f4202dc, 0x8fbf0048, +0x24846a3c, 0x3c050009, 0xafa20014, 0x8d460000, +0x34a50700, 0xc002b17, 0x3c03821, 0x8f4202ec, +0x24420001, 0xaf4202ec, 0x8f4202ec, 0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, 0x27bd0050, -0x3c020001, 0x8c423d98, 0x27bdffe0, 0x1440000d, -0xafbf0018, 0x3c040001, 0x24843a8c, 0x3c050008, +0x3c020001, 0x8c426e28, 0x27bdffe0, 0x1440000d, +0xafbf0018, 0x3c040001, 0x24846a9c, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220, 0x34a50700, -0x24020001, 0x3c010001, 0xac223d98, 0xc0029bb, -0x3821, 0x3c020004, 0x2c21024, 0x10400008, -0x2021, 0x8f820220, 0x3c0308ff, 0x3463ffff, -0x431024, 0x34420008, 0xaf820220, 0x2021, -0xc0048dd, 0x24050004, 0xac020268, 0x8fbf0018, -0x3e00008, 0x27bd0020, 0x0, 0x86102b, +0x24020001, 0x3c010001, 0xac226e28, 0xc002b17, +0x3821, 0x3c020004, 0x2c21024, 0x10400007, +0x0, 0x8f820220, 0x3c0308ff, 0x3463ffff, +0x431024, 0x34420008, 0xaf820220, 0x3c050001, +0x8ca56e18, 0x24020001, 0x14a20007, 0x2021, +0xc0052c7, 0x24050001, 0xac02026c, 0x8c03026c, +0x10000006, 0x3c020007, 0xc0052c7, 0x2021, +0xac020268, 0x8c030268, 0x3c020007, 0x621824, +0x3c020002, 0x5062000d, 0x3c0205f5, 0x43102b, +0x14400006, 0x3c020004, 0x3c020001, 0x10620009, +0x3c020098, 0x1000000b, 0x0, 0x14620009, +0x3c023b9a, 0x10000004, 0x3442ca00, 0x10000002, +0x3442e100, 0x34429680, 0xaf4201fc, 0x8f4201fc, +0xaee20064, 0x8fbf0018, 0x3e00008, 0x27bd0020, +0x0, 0x0, 0x0, 0x86102b, 0x50400001, 0x872023, 0xc41023, 0x24843, 0x125102b, 0x1040001b, 0x91040, 0x824021, 0x88102b, 0x10400007, 0x1821, 0x94820000, @@ -7309,28 +7615,28 @@ 0x24a20004, 0x62102b, 0x54400007, 0x65102b, 0x90a20001, 0x90a40003, 0x90a30000, 0x90a50002, 0x1000002a, 0x441021, 0x10400003, 0x0, -0x8f42013c, 0xa22823, 0x90a40000, 0x24a50001, -0x65102b, 0x10400003, 0x0, 0x8f42013c, +0x8f420148, 0xa22823, 0x90a40000, 0x24a50001, +0x65102b, 0x10400003, 0x0, 0x8f420148, 0xa22823, 0x90a20000, 0x24a50001, 0x21200, 0x822021, 0x65102b, 0x10400003, 0x0, -0x8f42013c, 0xa22823, 0x90a20000, 0x24a50001, +0x8f420148, 0xa22823, 0x90a20000, 0x24a50001, 0x822021, 0x65102b, 0x10400003, 0x0, -0x8f42013c, 0xa22823, 0x90a20000, 0x1000002d, +0x8f420148, 0xa22823, 0x90a20000, 0x1000002d, 0x21200, 0x3463ffff, 0x24a20004, 0x62102b, 0x5440000a, 0x65102b, 0x90a20000, 0x90a40002, 0x90a30001, 0x90a50003, 0x441021, 0x21200, 0x651821, 0x10000020, 0x432021, 0x10400003, -0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x0, 0x8f420148, 0xa22823, 0x90a20000, 0x24a50001, 0x22200, 0x65102b, 0x10400003, -0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x0, 0x8f420148, 0xa22823, 0x90a20000, 0x24a50001, 0x822021, 0x65102b, 0x10400003, -0x0, 0x8f42013c, 0xa22823, 0x90a20000, +0x0, 0x8f420148, 0xa22823, 0x90a20000, 0x24a50001, 0x21200, 0x822021, 0x65102b, -0x10400003, 0x0, 0x8f42013c, 0xa22823, +0x10400003, 0x0, 0x8f420148, 0xa22823, 0x90a20000, 0x822021, 0x41c02, 0x3082ffff, 0x622021, 0x41c02, 0x3082ffff, 0x622021, 0x3e00008, 0x3082ffff, 0x0, 0x8f820220, -0x34420002, 0xaf820220, 0x3c020001, 0x8c425f98, +0x34420002, 0xaf820220, 0x3c020002, 0x8c429078, 0x30424000, 0x10400054, 0x24040001, 0x8f820200, 0x24067fff, 0x8f830200, 0x30450002, 0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, 0x8f830054, @@ -7377,502 +7683,880 @@ 0x43102b, 0x14400006, 0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x10000008, 0x0, 0x10620004, 0x24020800, 0x10000004, 0x0, -0x24020700, 0x3c010001, 0xac223d9c, 0x3e00008, -0x0, 0x27bdffc8, 0xafbf0034, 0xafb20030, -0xafb1002c, 0xafb00028, 0x3c010001, 0xc004549, -0xac203d84, 0x24040001, 0x2821, 0x27a60020, -0x34028000, 0xc004166, 0xa7a20020, 0x8f830054, -0x8f820054, 0x10000002, 0x24630064, 0x8f820054, -0x621023, 0x2c420065, 0x1440fffc, 0x24040001, -0x24050001, 0xc004124, 0x27a60020, 0x8f830054, -0x8f820054, 0x10000002, 0x24630064, 0x8f820054, -0x621023, 0x2c420065, 0x1440fffc, 0x24040001, -0x24050001, 0xc004124, 0x27a60020, 0x8f830054, +0x24020700, 0x3c010001, 0xac226e2c, 0x3e00008, +0x0, 0x3c020001, 0x8c426e3c, 0x27bdffc8, +0xafbf0034, 0xafb20030, 0xafb1002c, 0xafb00028, +0x3c010001, 0x10400005, 0xac206e14, 0xc004dd1, +0x0, 0x3c010001, 0xac206e3c, 0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, -0x621023, 0x2c420065, 0x1440fffc, 0x24040001, -0x24050002, 0xc004124, 0x27a60018, 0x8f830054, -0x8f820054, 0x10000002, 0x24630064, 0x8f820054, -0x621023, 0x2c420065, 0x1440fffc, 0x24040001, -0x24050003, 0xc004124, 0x27a6001a, 0x97a20020, -0x1040002a, 0x24020001, 0x3c020001, 0x8c423d84, -0x97a30018, 0x34420001, 0x3c010001, 0xac223d84, -0x24020015, 0x1462000a, 0x0, 0x97a2001a, -0x3042fff0, 0x3843f420, 0x2c630001, 0x3842f430, -0x2c420001, 0x621825, 0x14600018, 0x24020003, -0x97a30018, 0x24027810, 0x14620014, 0x24020002, -0x97a2001a, 0x3042fff0, 0x14400010, 0x24020002, -0x1000000e, 0x24020004, 0x3c020001, 0x8c423d84, -0x34420008, 0x3c010001, 0xac223d84, 0x10000058, -0x24020004, 0x3c020001, 0x8c423d84, 0x34420004, -0x3c010001, 0x100000a9, 0xac223d84, 0x3c010001, -0xac223ee0, 0x24020e00, 0xaf820238, 0x8f840054, -0x8f820054, 0x24030008, 0x3c010001, 0xac233d88, -0x10000002, 0x248401f4, 0x8f820054, 0x821023, -0x2c4201f5, 0x1440fffc, 0x3c0200c8, 0x344201fb, +0x621023, 0x2c420065, 0x1440fffc, 0x0, +0xc004dec, 0x0, 0x24040001, 0x2821, +0x27a60020, 0x34028000, 0xc00450e, 0xa7a20020, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, +0x24040001, 0x24050001, 0xc0044cc, 0x27a60020, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, +0x24040001, 0x24050001, 0xc0044cc, 0x27a60020, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, +0x24040001, 0x24050002, 0xc0044cc, 0x27a60018, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, +0x24040001, 0x24050003, 0xc0044cc, 0x27a6001a, +0x3c040001, 0x24846b70, 0x97a60020, 0x97a70018, +0x97a2001a, 0x3c05000d, 0x34a50100, 0xafa00014, +0xc002b17, 0xafa20010, 0x97a20020, 0x10400046, +0x24036040, 0x97a2001a, 0x3042fff0, 0x1443000b, +0x24020020, 0x97a30018, 0x1462000a, 0x24027830, +0x24020003, 0x3c010001, 0xac226e14, 0x24020005, +0x3c010001, 0x10000039, 0xac226fac, 0x97a30018, +0x24027830, 0x1462000b, 0x24030010, 0x97a2001a, +0x3042fff0, 0x14430007, 0x24020003, 0x3c010001, +0xac226e14, 0x24020006, 0x3c010001, 0x1000002b, +0xac226fac, 0x3c020001, 0x8c426e14, 0x97a30018, +0x34420001, 0x3c010001, 0xac226e14, 0x24020015, +0x1462000a, 0x0, 0x97a2001a, 0x3042fff0, +0x3843f420, 0x2c630001, 0x3842f430, 0x2c420001, +0x621825, 0x14600019, 0x24020003, 0x97a30018, +0x24027810, 0x14620015, 0x24020002, 0x97a2001a, +0x3042fff0, 0x14400011, 0x24020002, 0x1000000f, +0x24020004, 0x3c020001, 0x8c426e14, 0x34420008, +0x3c010001, 0xac226e14, 0x1000005e, 0x24020004, +0x3c020001, 0x8c426e14, 0x34420004, 0x3c010001, +0x100000af, 0xac226e14, 0x24020001, 0x3c010001, +0xac226fb8, 0x3c020001, 0x8c426e14, 0x30420002, +0x144000b2, 0x3c09fff0, 0x24020e00, 0xaf820238, +0x8f840054, 0x8f820054, 0x24030008, 0x3c010001, +0xac236e18, 0x10000002, 0x248401f4, 0x8f820054, +0x821023, 0x2c4201f5, 0x1440fffc, 0x3c0200c8, +0x344201fb, 0xaf820238, 0x8f830054, 0x8f820054, +0x10000002, 0x246301f4, 0x8f820054, 0x621023, +0x2c4201f5, 0x1440fffc, 0x8021, 0x24120001, +0x24110009, 0xc0043d3, 0x0, 0x3c010001, +0xac326e34, 0xc004498, 0x0, 0x3c020001, +0x8c426e34, 0x1451fffb, 0x3c0200c8, 0x344201f6, 0xaf820238, 0x8f830054, 0x8f820054, 0x10000002, -0x246301f4, 0x8f820054, 0x621023, 0x2c4201f5, -0x1440fffc, 0x8021, 0x24120001, 0x24110009, -0xc004045, 0x0, 0x3c010001, 0xac323da0, -0xc0040f2, 0x0, 0x3c020001, 0x8c423da0, -0x1451fffb, 0x3c0200c8, 0x344201f6, 0xaf820238, -0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, -0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, +0x2463000a, 0x8f820054, 0x621023, 0x2c42000b, +0x1440fffc, 0x0, 0x8f820220, 0x24040001, +0x34420002, 0xaf820220, 0x8f830200, 0x24057fff, +0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820224, 0x14440005, 0x34028000, +0x42040, 0xa4102b, 0x1040fff0, 0x34028000, +0x1082ffa0, 0x26100001, 0x2e020014, 0x1440ffcd, +0x24020004, 0x3c010001, 0xac226e18, 0x8021, +0x24120009, 0x3c11ffff, 0x36313f7f, 0xc0043d3, +0x0, 0x24020001, 0x3c010001, 0xac226e34, +0xc004498, 0x0, 0x3c020001, 0x8c426e34, +0x1452fffb, 0x0, 0x8f820044, 0x511024, +0x34425080, 0xaf820044, 0x8f830054, 0x8f820054, +0x10000002, 0x2463000a, 0x8f820054, 0x621023, +0x2c42000b, 0x1440fffc, 0x0, 0x8f820044, +0x511024, 0x3442f080, 0xaf820044, 0x8f830054, +0x8f820054, 0x10000002, 0x2463000a, 0x8f820054, +0x621023, 0x2c42000b, 0x1440fffc, 0x0, +0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, +0x8f830054, 0x8f820054, 0x10000002, 0x24630064, +0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x0, 0x8f820220, 0x24040001, 0x34420002, 0xaf820220, 0x8f830200, 0x24057fff, 0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820224, 0x14440005, 0x34028000, 0x42040, -0xa4102b, 0x1040fff0, 0x34028000, 0x1082ffa6, -0x26100001, 0x2e020014, 0x1440ffcd, 0x24020004, -0x3c010001, 0xac223d88, 0x8021, 0x24120009, -0x3c11ffff, 0x36313f7f, 0xc004045, 0x0, -0x24020001, 0x3c010001, 0xac223da0, 0xc0040f2, -0x0, 0x3c020001, 0x8c423da0, 0x1452fffb, -0x0, 0x8f820044, 0x511024, 0x34425080, -0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, -0x2463000a, 0x8f820054, 0x621023, 0x2c42000b, -0x1440fffc, 0x0, 0x8f820044, 0x511024, -0x3442f080, 0xaf820044, 0x8f830054, 0x8f820054, -0x10000002, 0x2463000a, 0x8f820054, 0x621023, -0x2c42000b, 0x1440fffc, 0x0, 0x8f820220, -0x3c03f700, 0x431025, 0xaf820220, 0x8f830054, -0x8f820054, 0x10000002, 0x24630064, 0x8f820054, -0x621023, 0x2c420065, 0x1440fffc, 0x0, -0x8f820220, 0x24040001, 0x34420002, 0xaf820220, -0x8f830200, 0x24057fff, 0x2402fffd, 0x621824, -0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054, -0x10000002, 0x24630001, 0x8f820054, 0x621023, -0x2c420002, 0x1440fffc, 0x0, 0x8f820224, -0x14440005, 0x34028000, 0x42040, 0xa4102b, -0x1040fff0, 0x34028000, 0x1082ff56, 0x26100001, -0x2e020064, 0x1440ffb0, 0x0, 0x3c020001, -0x8c423d84, 0x30420004, 0x14400007, 0x3c08fff0, -0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, -0xaf820044, 0x3c08fff0, 0x3508bdc0, 0x8f830054, -0x97a60018, 0x3c070001, 0x8ce73ee0, 0x3c040001, -0x24843b60, 0x24020001, 0x3c010001, 0xac223d8c, -0xafa60010, 0x3c060001, 0x8cc63d84, 0x97a2001a, -0x3c05000d, 0x34a50100, 0x3c010001, 0xac203d88, -0x681821, 0x3c010001, 0xac233ed8, 0xc0029bb, -0xafa20014, 0x8fbf0034, 0x8fb20030, 0x8fb1002c, -0x8fb00028, 0x3e00008, 0x27bd0038, 0x27bdffe8, -0x24070004, 0x3c040001, 0x8c843d88, 0x3021, -0x24020001, 0x1482000a, 0xafbf0010, 0x3c020001, -0x8c425f9c, 0x3c050004, 0x30428000, 0x1040000c, -0x34a593e0, 0x3c05000f, 0x10000009, 0x34a54240, -0x3c020001, 0x8c425f9c, 0x3c05000f, 0x30428000, -0x10400003, 0x34a54240, 0x3c05001e, 0x34a58480, -0x3c020001, 0x8c423ed8, 0x8f830054, 0x451021, -0x431023, 0x45102b, 0x1440002e, 0x0, -0x3c020001, 0x8c423d90, 0x1440002a, 0x2cc20001, -0x7182b, 0x431024, 0x1040001d, 0x0, -0x3c090001, 0x8d293d84, 0x240b0001, 0x3c054000, -0x3c080001, 0x25085f9c, 0x250afffc, 0x42042, -0x14800002, 0x24e7ffff, 0x24040008, 0x891024, -0x5040000b, 0x2cc20001, 0x148b0004, 0x0, -0x8d020000, 0x10000003, 0x451024, 0x8d420000, -0x451024, 0x54400001, 0x24060001, 0x2cc20001, -0x7182b, 0x431024, 0x5440ffed, 0x42042, -0x3c010001, 0x10c00020, 0xac243d88, 0x8f830054, -0x24020001, 0x3c010001, 0xac223d8c, 0x3c010001, -0xac233ed8, 0x3c020001, 0x8c423d8c, 0x10400004, -0x24020001, 0x3c010001, 0xac203d8c, 0xaee204b8, -0x8ee304b8, 0x24020008, 0x10620005, 0x24020001, -0xc003eee, 0x0, 0x1000000b, 0x0, -0x3c030001, 0x8c633d88, 0x10620007, 0x2402000e, -0x3c030001, 0x8c635f30, 0x10620003, 0x0, -0xc00456c, 0x8f840220, 0x8fbf0010, 0x3e00008, -0x27bd0018, 0x27bdffe0, 0x3c03fdff, 0x3c040001, -0x8c843d88, 0x3c020001, 0x8c423da8, 0x3463ffff, -0x283a024, 0x14820006, 0xafbf0018, 0x8ee304b8, -0x3c020001, 0x8c423dac, 0x10620006, 0x0, -0x8ee204b8, 0x3c010001, 0xac243da8, 0x3c010001, -0xac223dac, 0x3c030001, 0x8c633d88, 0x24020002, -0x1062013c, 0x2c620003, 0x10400005, 0x24020001, -0x1062000a, 0x0, 0x10000134, 0x0, -0x24020004, 0x1062006d, 0x24020008, 0x1062009f, -0x24020001, 0x1000012d, 0x0, 0x8ee204b8, -0x2443ffff, 0x2c620008, 0x1040012a, 0x31080, -0x3c010001, 0x220821, 0x8c223b78, 0x400008, -0x0, 0xc004045, 0x0, 0x3c020001, -0x8c423d94, 0x3c010001, 0xac203d20, 0x104000d7, -0x24020002, 0xaee204b8, 0x3c010001, 0x10000119, -0xac203d94, 0xc0041a7, 0x0, 0x3c030001, -0x8c633db0, 0x1000009e, 0x24020011, 0x3c050001, -0x8ca53d88, 0x3c060001, 0x8cc65f9c, 0xc0047d4, -0x2021, 0x24020005, 0x3c010001, 0xac203d94, -0x10000108, 0xaee204b8, 0x3c040001, 0x24843b6c, -0x3c05000f, 0x34a50100, 0x3021, 0x3821, -0xafa00010, 0xc0029bb, 0xafa00014, 0x100000fd, -0x0, 0x8f820220, 0x3c03f700, 0x431025, -0x100000a4, 0xaf820220, 0x8f820220, 0x3c030004, -0x431024, 0x144000ae, 0x24020007, 0x8f830054, -0x3c020001, 0x8c423ed0, 0x2463d8f0, 0x431023, -0x2c422710, 0x144000eb, 0x24020001, 0x100000e7, -0x0, 0x3c050001, 0x8ca53d88, 0xc0048dd, -0x2021, 0xc0049a8, 0x2021, 0x3c030001, -0x8c635f94, 0x46100dd, 0x24020001, 0x3c020008, -0x621024, 0x10400006, 0x0, 0x8f820214, -0x3c03ffff, 0x431024, 0x10000005, 0x3442251f, -0x8f820214, 0x3c03ffff, 0x431024, 0x3442241f, -0xaf820214, 0x8f820220, 0x3c030200, 0x283a025, -0x34420002, 0xaf820220, 0x24020008, 0xc003bc9, -0xaee204b8, 0x100000c7, 0x0, 0x8ee204b8, -0x2443ffff, 0x2c620008, 0x104000c2, 0x31080, -0x3c010001, 0x220821, 0x8c223b98, 0x400008, -0x0, 0x3c020001, 0x8c425f98, 0x30424000, +0xa4102b, 0x1040fff0, 0x34028000, 0x1082ff50, +0x26100001, 0x2e020064, 0x1440ffb0, 0x0, +0x3c020001, 0x8c426e14, 0x30420004, 0x14400007, +0x3c09fff0, 0x8f820044, 0x3c03ffff, 0x34633f7f, +0x431024, 0xaf820044, 0x3c09fff0, 0x3529bdc0, +0x8f830054, 0x3c060001, 0x8cc66e14, 0x3c070001, +0x8ce76fb8, 0x97a80018, 0x3c040001, 0x24846b70, +0x24020001, 0x3c010001, 0xac226e1c, 0xafa80010, +0x97a2001a, 0x3c05000d, 0x34a50100, 0x3c010001, +0xac206e18, 0x691821, 0x3c010001, 0xac236fa8, +0xc002b17, 0xafa20014, 0x8fbf0034, 0x8fb20030, +0x8fb1002c, 0x8fb00028, 0x3e00008, 0x27bd0038, +0x27bdffe8, 0x3c050001, 0x8ca56e18, 0x24060004, +0x24020001, 0x14a20014, 0xafbf0010, 0x3c020002, +0x8c42907c, 0x30428000, 0x10400005, 0x3c04000f, +0x3c030001, 0x8c636fb8, 0x10000005, 0x34844240, +0x3c040004, 0x3c030001, 0x8c636fb8, 0x348493e0, +0x24020005, 0x14620016, 0x0, 0x3c04003d, +0x10000013, 0x34840900, 0x3c020002, 0x8c429078, +0x30428000, 0x10400005, 0x3c04001e, 0x3c030001, +0x8c636fb8, 0x10000005, 0x34848480, 0x3c04000f, +0x3c030001, 0x8c636fb8, 0x34844240, 0x24020005, +0x14620003, 0x0, 0x3c04007a, 0x34841200, +0x3c020001, 0x8c426fa8, 0x8f830054, 0x441021, +0x431023, 0x44102b, 0x1440004b, 0x0, +0x3c020001, 0x8c426e20, 0x14400047, 0x0, +0x3c010001, 0x10c00025, 0xac206e30, 0x3c090001, +0x8d296e14, 0x24070001, 0x3c044000, 0x3c080002, +0x2508907c, 0x250afffc, 0x52842, 0x14a00002, +0x24c6ffff, 0x24050008, 0xa91024, 0x10400010, +0x0, 0x14a70008, 0x0, 0x8d020000, +0x441024, 0x1040000a, 0x0, 0x3c010001, +0x10000007, 0xac256e30, 0x8d420000, 0x441024, +0x10400003, 0x0, 0x3c010001, 0xac276e30, +0x3c020001, 0x8c426e30, 0x6182b, 0x2c420001, +0x431024, 0x5440ffe5, 0x52842, 0x8f820054, +0x3c030001, 0x8c636e30, 0x3c010001, 0xac226fa8, +0x1060003a, 0x24020005, 0x3c030001, 0x8c636fb8, +0x3c010001, 0xac256e18, 0x14620011, 0x24020001, +0x3c020002, 0x8c429078, 0x3c032000, 0x431024, +0x14400006, 0x24020001, 0x3c010001, 0xac206f98, +0x3c010001, 0xac226e18, 0x24020001, 0x3c010001, +0xac226ea4, 0x3c010001, 0xac226e24, 0x24020001, +0x3c010001, 0xac226e1c, 0x3c020001, 0x8c426e30, +0x1040001e, 0x0, 0x3c020001, 0x8c426e1c, +0x10400008, 0x24020001, 0x3c010001, 0xac206e1c, +0xaee204b8, 0x3c010001, 0xac206e9c, 0x3c010001, +0xac226e54, 0x8ee304b8, 0x24020008, 0x10620005, +0x24020001, 0xc004203, 0x0, 0x1000000b, +0x0, 0x3c030001, 0x8c636e18, 0x10620007, +0x2402000e, 0x3c030002, 0x8c639010, 0x10620003, +0x0, 0xc004ecc, 0x8f840220, 0x8fbf0010, +0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c03fdff, +0x3c040001, 0x8c846e18, 0x3c020001, 0x8c426e40, +0x3463ffff, 0x283a024, 0xafbf001c, 0x14820006, +0xafb00018, 0x8ee304b8, 0x3c020001, 0x8c426e44, +0x10620006, 0x0, 0x8ee204b8, 0x3c010001, +0xac246e40, 0x3c010001, 0xac226e44, 0x3c030001, +0x8c636e18, 0x24020002, 0x10620167, 0x2c620003, +0x10400005, 0x24020001, 0x1062000a, 0x0, +0x100001ab, 0x0, 0x24020004, 0x10620081, +0x24020008, 0x106200d5, 0x24020001, 0x100001a4, +0x0, 0x8ee204b8, 0x2443ffff, 0x2c620008, +0x104001a1, 0x31080, 0x3c010001, 0x220821, +0x8c226b88, 0x400008, 0x0, 0x3c030001, +0x8c636fb8, 0x24020005, 0x14620010, 0x0, +0x3c020001, 0x8c426e24, 0x10400008, 0x24020003, +0xc0043d3, 0x0, 0x24020002, 0xaee204b8, +0x3c010001, 0x10000002, 0xac206e24, 0xaee204b8, +0x3c010001, 0x10000188, 0xac206db0, 0xc0043d3, +0x0, 0x3c020001, 0x8c426e24, 0x3c010001, +0xac206db0, 0x14400145, 0x24020002, 0x10000163, +0x24020007, 0x24020001, 0x3c010001, 0xc00454f, +0xac226e50, 0x3c030001, 0x8c636e50, 0x10000144, +0x24020011, 0x3c020001, 0x8c426fb8, 0x24100005, +0x10500007, 0x0, 0x3c050001, 0x8ca56e18, +0x3c060002, 0x8cc6907c, 0xc005134, 0x2021, +0x3c010001, 0xac206e24, 0x10000167, 0xaef004b8, +0x3c040001, 0x24846b7c, 0x3c05000f, 0x34a50100, +0x3021, 0x3821, 0xafa00010, 0xc002b17, +0xafa00014, 0x1000015c, 0x0, 0x8f820220, +0x3c030004, 0x431024, 0x1440013c, 0x24020007, +0x8f830054, 0x3c020001, 0x8c426fa0, 0x2463d8f0, +0x431023, 0x2c422710, 0x1440014f, 0x24020001, +0x1000014b, 0x0, 0x3c050001, 0x8ca56e18, +0xc0052c7, 0x2021, 0xc00553d, 0x2021, +0x3c030002, 0x8c639074, 0x4610141, 0x24020001, +0x3c020008, 0x621024, 0x10400006, 0x0, +0x8f820214, 0x3c03ffff, 0x431024, 0x10000005, +0x3442251f, 0x8f820214, 0x3c03ffff, 0x431024, +0x3442241f, 0xaf820214, 0x8f820220, 0x3c030200, +0x283a025, 0x34420002, 0xaf820220, 0x24020008, +0xc003e45, 0xaee204b8, 0x3c010001, 0x1000012a, +0xac206ea0, 0x8ee204b8, 0x2443ffff, 0x2c620008, +0x10400125, 0x31080, 0x3c010001, 0x220821, +0x8c226ba8, 0x400008, 0x0, 0xc004498, +0x0, 0x3c030001, 0x8c636e34, 0x100000e8, +0x24020009, 0x3c020002, 0x8c429078, 0x30424000, 0x10400004, 0x0, 0x8f820044, 0x10000006, 0x3442f080, 0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, 0x3442a080, 0xaf820044, 0x8f830054, -0x1000005a, 0x24020004, 0xc003c88, 0x0, -0x104000a6, 0x24020001, 0x8f820214, 0x3c03ffff, -0x3c040001, 0x8c843ec8, 0x431024, 0x3442251f, +0x100000ea, 0x24020004, 0x8f830054, 0x3c020001, +0x8c426fa0, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400101, 0x24020005, 0x100000d8, 0x0, +0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, +0xaf800204, 0x3c010002, 0x100000d6, 0xac209060, +0x8f830054, 0x3c020001, 0x8c426fa0, 0x2463fff6, +0x431023, 0x2c42000a, 0x144000ef, 0x24020007, +0x100000d2, 0x0, 0xc003f28, 0x0, +0x104000e7, 0x24020001, 0x8f820214, 0x3c03ffff, +0x3c040001, 0x8c846f98, 0x431024, 0x3442251f, 0xaf820214, 0x24020008, 0x10800005, 0xaee204b8, -0x3c020001, 0x8c423e14, 0x1040006d, 0x24020001, -0x8f820220, 0x3c030008, 0x431024, 0x10400073, -0x3c020200, 0x10000081, 0x0, 0x8ee204b8, -0x2443ffff, 0x2c620007, 0x1040008e, 0x31080, -0x3c010001, 0x220821, 0x8c223bb8, 0x400008, -0x0, 0xc003b0b, 0x0, 0x3c010001, -0xac203d8c, 0xaf800204, 0x3c010001, 0xc004045, -0xac205f80, 0x24020001, 0x3c010001, 0xac223da0, -0x24020002, 0x1000007b, 0xaee204b8, 0xc0040f2, -0x0, 0x3c030001, 0x8c633da0, 0x24020009, -0x14620074, 0x24020003, 0x10000072, 0xaee204b8, -0x3c020001, 0x8c425f98, 0x30424000, 0x10400003, -0x3c0200c8, 0x10000002, 0x344201f6, 0x344201fe, -0xaf820238, 0x8f830054, 0x10000014, 0x24020004, -0x8f830054, 0x3c020001, 0x8c423ed0, 0x2463d8f0, -0x431023, 0x2c422710, 0x1440005e, 0x24020005, -0x1000005c, 0xaee204b8, 0x8f820220, 0x3c03f700, -0x431025, 0xaf820220, 0xaf800204, 0x3c010001, -0xac205f80, 0x8f830054, 0x24020006, 0xaee204b8, -0x3c010001, 0x1000004f, 0xac233ed0, 0x8f830054, -0x3c020001, 0x8c423ed0, 0x2463fff6, 0x431023, -0x2c42000a, 0x14400047, 0x0, 0x24020007, -0x10000044, 0xaee204b8, 0xc003c88, 0x0, -0x1040003e, 0x24020001, 0x8f820214, 0x3c03ffff, -0x3c040001, 0x8c843ec8, 0x431024, 0x3442251f, -0xaf820214, 0x24020008, 0x1080000f, 0xaee204b8, -0x3c020001, 0x8c423e14, 0x1440000b, 0x0, -0x8f820220, 0x34420002, 0xaf820220, 0x24020001, -0x3c010001, 0xac225f30, 0xc00456c, 0x8f840220, -0x10000016, 0x0, 0x8f820220, 0x3c030008, -0x431024, 0x14400011, 0x3c020200, 0x282a025, -0x2402000e, 0x3c010001, 0xac225f30, 0xc0049a8, -0x2021, 0x8f820220, 0x34420002, 0xc003bc9, -0xaf820220, 0x3c050001, 0x8ca53d88, 0xc0048dd, -0x2021, 0x10000013, 0x0, 0x3c020001, -0x8c423e14, 0x1040000f, 0x0, 0x3c020001, -0x8c423e10, 0x2442ffff, 0x3c010001, 0xac223e10, -0x14400008, 0x24020002, 0x3c010001, 0xac203e14, -0x3c010001, 0x10000003, 0xac223e10, 0x3c010001, -0xac223d8c, 0x8fbf0018, 0x3e00008, 0x27bd0020, -0x8f820200, 0x8f820220, 0x8f820220, 0x34420004, -0xaf820220, 0x8f820200, 0x3c060001, 0x8cc63d88, -0x34420004, 0xaf820200, 0x24020002, 0x10c2003b, -0x2cc20003, 0x10400005, 0x24020001, 0x10c2000a, -0x3c03f0ff, 0x10000099, 0x0, 0x24020004, -0x10c2005a, 0x24020008, 0x10c2006d, 0x3c02f0ff, -0x10000092, 0x0, 0x8f820050, 0x3463ffff, -0x3c05ffff, 0x3c040001, 0x8c843ee0, 0x431024, -0x3c030700, 0x431025, 0xaf820050, 0x24020e00, -0xaf860200, 0xaf860220, 0xaf820238, 0x8f820044, -0x3c030001, 0x8c633d78, 0x34a53f7f, 0x451024, -0x34630022, 0xaf820044, 0x24020004, 0xaf860238, -0x1082000c, 0xaf830200, 0x3c020001, 0x8c423d9c, -0x3c030001, 0x8c633d80, 0x3c040001, 0x8c843d7c, -0x34428000, 0x621825, 0x641825, 0x1000006e, -0x34620002, 0x3c020001, 0x8c423d80, 0x3c030001, -0x8c633d9c, 0x3c040001, 0x8c843d7c, 0x431025, -0x441025, 0x10000064, 0x34420002, 0x8f830050, -0x3c02f0ff, 0x3442ffff, 0x3c040001, 0x8c843ec8, +0x3c020001, 0x8c426ec4, 0x10400064, 0x24020001, +0x8f820220, 0x3c030008, 0x431024, 0x1040006a, +0x3c020200, 0x10000078, 0x0, 0x8ee204b8, +0x2443ffff, 0x2c620007, 0x104000cf, 0x31080, +0x3c010001, 0x220821, 0x8c226bc8, 0x400008, +0x0, 0xc003d87, 0x0, 0x3c010001, +0xac206e1c, 0xaf800204, 0x3c010002, 0xc0043d3, +0xac209060, 0x24020001, 0x3c010001, 0xac226e34, +0x24020002, 0x100000bc, 0xaee204b8, 0xc004498, +0x0, 0x3c030001, 0x8c636e34, 0x10000084, +0x24020009, 0x3c020002, 0x8c429078, 0x30424000, +0x10400003, 0x3c0200c8, 0x10000002, 0x344201f6, +0x344201fe, 0xaf820238, 0x8f830054, 0x1000008b, +0x24020004, 0x8f830054, 0x3c020001, 0x8c426fa0, +0x2463d8f0, 0x431023, 0x2c422710, 0x144000a2, +0x24020005, 0x10000079, 0x0, 0x8f820220, +0x3c03f700, 0x431025, 0xaf820220, 0xaf800204, +0x3c010002, 0x10000077, 0xac209060, 0x8f830054, +0x3c020001, 0x8c426fa0, 0x2463fff6, 0x431023, +0x2c42000a, 0x14400090, 0x24020007, 0x10000073, +0x0, 0xc003f28, 0x0, 0x10400088, +0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001, +0x8c846f98, 0x431024, 0x3442251f, 0xaf820214, +0x24020008, 0x1080000f, 0xaee204b8, 0x3c020001, +0x8c426ec4, 0x1440000b, 0x0, 0x8f820220, +0x34420002, 0xaf820220, 0x24020001, 0x3c010002, +0xac229010, 0xc004ecc, 0x8f840220, 0x10000016, +0x0, 0x8f820220, 0x3c030008, 0x431024, +0x14400011, 0x3c020200, 0x282a025, 0x2402000e, +0x3c010002, 0xac229010, 0xc00553d, 0x2021, +0x8f820220, 0x34420002, 0xc003e45, 0xaf820220, +0x3c050001, 0x8ca56e18, 0xc0052c7, 0x2021, +0x1000005d, 0x0, 0x3c020001, 0x8c426ec4, +0x10400059, 0x0, 0x3c020001, 0x8c426ec0, +0x2442ffff, 0x3c010001, 0xac226ec0, 0x14400052, +0x24020002, 0x3c010001, 0xac206ec4, 0x3c010001, +0x1000004d, 0xac226ec0, 0x8ee204b8, 0x2443ffff, +0x2c620007, 0x10400048, 0x31080, 0x3c010001, +0x220821, 0x8c226be8, 0x400008, 0x0, +0x3c020001, 0x8c426e24, 0x10400024, 0x24020007, +0xc0043d3, 0x0, 0x24020002, 0xaee204b8, +0x3c010001, 0x10000038, 0xac206e24, 0xc0048b3, +0x0, 0x3c030001, 0x8c636e54, 0x24020006, +0x14620031, 0x24020003, 0x1000002f, 0xaee204b8, +0x3c050001, 0x8ca56e18, 0x3c060002, 0x8cc69078, +0xc005134, 0x2021, 0x24020005, 0x10000026, +0xaee204b8, 0x8f820220, 0x3c03f700, 0x431025, +0xaf820220, 0x8f830054, 0x24020006, 0xaee204b8, +0x3c010001, 0x1000001c, 0xac236fa0, 0x1000001a, +0xaee204b8, 0x3c050001, 0x8ca56e18, 0xc0052c7, +0x2021, 0xc00553d, 0x2021, 0x3c020002, +0x8c429070, 0x441000e, 0x24020001, 0x8f820214, +0x3c03ffff, 0x431024, 0x3442251f, 0xaf820214, +0x24020008, 0xaee204b8, 0x8f820220, 0x34420002, +0xc003e45, 0xaf820220, 0x10000003, 0x0, +0x3c010001, 0xac226e1c, 0x8fbf001c, 0x8fb00018, +0x3e00008, 0x27bd0020, 0x8f820200, 0x8f820220, +0x8f820220, 0x34420004, 0xaf820220, 0x8f820200, +0x3c050001, 0x8ca56e18, 0x34420004, 0xaf820200, +0x24020002, 0x10a2004b, 0x2ca20003, 0x10400005, +0x24020001, 0x10a2000a, 0x0, 0x100000b1, +0x0, 0x24020004, 0x10a20072, 0x24020008, +0x10a20085, 0x3c02f0ff, 0x100000aa, 0x0, +0x8f830050, 0x3c02f0ff, 0x3442ffff, 0x3c040001, +0x8c846fb8, 0x621824, 0x3c020700, 0x621825, +0x24020e00, 0x2484fffb, 0x2c840002, 0xaf830050, +0xaf850200, 0xaf850220, 0x14800006, 0xaf820238, +0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, +0xaf820044, 0x3c030001, 0x8c636fb8, 0x24020005, +0x14620004, 0x0, 0x8f820044, 0x34425000, +0xaf820044, 0x3c020001, 0x8c426e08, 0x3c030001, +0x8c636fb8, 0x34420022, 0x2463fffc, 0x2c630002, +0x1460000c, 0xaf820200, 0x3c020001, 0x8c426e2c, +0x3c030001, 0x8c636e10, 0x3c040001, 0x8c846e0c, +0x34428000, 0x621825, 0x641825, 0x1000000a, +0x34620002, 0x3c020001, 0x8c426e10, 0x3c030001, +0x8c636e2c, 0x3c040001, 0x8c846e0c, 0x431025, +0x441025, 0x34420002, 0xaf820220, 0x1000002f, +0x24020001, 0x24020e01, 0xaf820238, 0x8f830050, +0x3c02f0ff, 0x3442ffff, 0x3c040001, 0x8c846f98, 0x621824, 0x3c020d00, 0x621825, 0x24020001, -0xaf830050, 0xaf820200, 0xaf820220, 0x24020e00, -0x10800009, 0xaf820238, 0x3c020001, 0x8c423e14, -0x14400005, 0x3c033f00, 0x3c020001, 0x8c423d70, -0x10000005, 0x34630070, 0x3c020001, 0x8c423d70, -0x3c033f00, 0x34630072, 0x431025, 0xaf820200, -0x3c030001, 0x8c633d74, 0x3c04f700, 0x3c020001, -0x8c423d80, 0x3c050001, 0x8ca53d9c, 0x641825, -0x431025, 0x1000003c, 0x451025, 0x8f830050, -0x3c02f0ff, 0x3442ffff, 0x3c040001, 0x8c843ec8, -0x621824, 0x3c020a00, 0x621825, 0x24020001, -0xaf830050, 0xaf820200, 0x1080001e, 0xaf820220, -0x3c020001, 0x8c423e14, 0x1440001a, 0x3c033f00, -0x3c020001, 0x8c423d70, 0x1000001a, 0x346300e0, -0x8f830050, 0x3c040001, 0x8c843ec8, 0x3442ffff, -0x621824, 0x1080000f, 0xaf830050, 0x3c020001, -0x8c423e14, 0x1440000b, 0x3c043f00, 0x3c030001, -0x8c633d70, 0x348400e0, 0x24020001, 0xaf820200, -0xaf820220, 0x641825, 0xaf830200, 0x10000008, -0x3c05f700, 0x3c020001, 0x8c423d70, 0x3c033f00, -0x346300e2, 0x431025, 0xaf820200, 0x3c05f700, -0x34a58000, 0x3c030001, 0x8c633d74, 0x3c020001, -0x8c423d80, 0x3c040001, 0x8c843d9c, 0x651825, -0x431025, 0x441025, 0xaf820220, 0x3e00008, -0x0, 0x3c030001, 0x8c633da0, 0x3c020001, -0x8c423da4, 0x10620003, 0x24020002, 0x3c010001, -0xac233da4, 0x1062001d, 0x2c620003, 0x10400025, -0x24020001, 0x14620023, 0x24020004, 0x3c030001, -0x8c633d88, 0x10620006, 0x24020008, 0x1462000c, -0x3c0200c8, 0x344201fb, 0x10000009, 0xaf820238, -0x24020e01, 0xaf820238, 0x8f820044, 0x3c03ffff, -0x34633f7f, 0x431024, 0x34420080, 0xaf820044, -0x8f830054, 0x24020002, 0x3c010001, 0xac223da0, -0x3c010001, 0x1000000b, 0xac233ed4, 0x8f830054, -0x3c020001, 0x8c423ed4, 0x2463d8f0, 0x431023, -0x2c422710, 0x14400003, 0x24020009, 0x3c010001, -0xac223da0, 0x3e00008, 0x0, 0x27bdffd8, +0xaf830050, 0xaf820200, 0xaf820220, 0x10800005, +0x3c033f00, 0x3c020001, 0x8c426e00, 0x10000004, +0x34630070, 0x3c020001, 0x8c426e00, 0x34630072, +0x431025, 0xaf820200, 0x3c030001, 0x8c636e04, +0x3c02f700, 0x621825, 0x3c020001, 0x8c426e10, +0x3c040001, 0x8c846e2c, 0x3c050001, 0x8ca56fb8, +0x431025, 0x441025, 0xaf820220, 0x24020005, +0x14a20006, 0x24020001, 0x8f820044, 0x2403afff, +0x431024, 0xaf820044, 0x24020001, 0x1000003d, +0xaf820238, 0x8f830050, 0x3c02f0ff, 0x3442ffff, +0x3c040001, 0x8c846f98, 0x621824, 0x3c020a00, +0x621825, 0x24020001, 0xaf830050, 0xaf820200, +0x1080001e, 0xaf820220, 0x3c020001, 0x8c426ec4, +0x1440001a, 0x3c033f00, 0x3c020001, 0x8c426e00, +0x1000001a, 0x346300e0, 0x8f830050, 0x3c040001, +0x8c846f98, 0x3442ffff, 0x621824, 0x1080000f, +0xaf830050, 0x3c020001, 0x8c426ec4, 0x1440000b, +0x3c043f00, 0x3c030001, 0x8c636e00, 0x348400e0, +0x24020001, 0xaf820200, 0xaf820220, 0x641825, +0xaf830200, 0x10000008, 0x3c05f700, 0x3c020001, +0x8c426e00, 0x3c033f00, 0x346300e2, 0x431025, +0xaf820200, 0x3c05f700, 0x34a58000, 0x3c030001, +0x8c636e04, 0x3c020001, 0x8c426e10, 0x3c040001, +0x8c846e2c, 0x651825, 0x431025, 0x441025, +0xaf820220, 0x3e00008, 0x0, 0x3c030001, +0x8c636e34, 0x3c020001, 0x8c426e38, 0x10620003, +0x24020002, 0x3c010001, 0xac236e38, 0x1062001d, +0x2c620003, 0x10400025, 0x24020001, 0x14620023, +0x24020004, 0x3c030001, 0x8c636e18, 0x10620006, +0x24020008, 0x1462000c, 0x3c0200c8, 0x344201fb, +0x10000009, 0xaf820238, 0x24020e01, 0xaf820238, +0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, +0x34420080, 0xaf820044, 0x8f830054, 0x24020002, +0x3c010001, 0xac226e34, 0x3c010001, 0x1000000b, +0xac236fa4, 0x8f830054, 0x3c020001, 0x8c426fa4, +0x2463d8f0, 0x431023, 0x2c422710, 0x14400003, +0x24020009, 0x3c010001, 0xac226e34, 0x3e00008, +0x0, 0x0, 0x0, 0x27bdffd8, 0xafb20018, 0x809021, 0xafb3001c, 0xa09821, 0xafb10014, 0xc08821, 0xafb00010, 0x8021, -0xafbf0020, 0xa6200000, 0xc004523, 0x24040001, +0xafbf0020, 0xa6200000, 0xc004dab, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, -0xc004523, 0x2021, 0xc004523, 0x24040001, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x24100010, 0x2501024, 0x10400002, 0x2021, -0x24040001, 0xc004523, 0x108042, 0x1600fffa, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x2501024, 0x24100010, 0x2701024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fffa, 0x2701024, 0xc004549, 0x34108000, -0xc004549, 0x0, 0xc004503, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x2701024, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, -0xc004549, 0x0, 0x8fbf0020, 0x8fb3001c, +0xc004dec, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821, 0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, -0xafb00010, 0x8021, 0xafbf0020, 0xc004523, +0xafb00010, 0x8021, 0xafbf0020, 0xc004dab, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004523, 0x2021, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0xc004523, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0xc004dab, 0x24040001, 0x24100010, 0x2301024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, +0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x2301024, 0x24100010, 0x2501024, -0x10400002, 0x2021, 0x24040001, 0xc004523, -0x108042, 0x1600fffa, 0x2501024, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x2501024, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96620000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004523, 0x108042, 0x1600fff8, -0x0, 0xc004549, 0x0, 0x8fbf0020, +0x24040001, 0xc004dab, 0x108042, 0x1600fff8, +0x0, 0xc004dec, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, -0x3e00008, 0x27bd0028, 0x3c030001, 0x8c633db0, -0x3c020001, 0x8c423df4, 0x27bdffd8, 0xafbf0020, -0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001, -0xac233df4, 0x2463ffff, 0x2c620013, 0x10400349, -0x31080, 0x3c010001, 0x220821, 0x8c223be0, -0x400008, 0x0, 0xc004549, 0x8021, -0x34028000, 0xa7a20010, 0x27b10010, 0xc004523, +0x3e00008, 0x27bd0028, 0x3c040001, 0x8c846e50, +0x3c020001, 0x8c426e98, 0x27bdffd8, 0xafbf0020, +0xafb1001c, 0x10820003, 0xafb00018, 0x3c010001, +0xac246e98, 0x3c030001, 0x8c636fb8, 0x24020005, +0x14620005, 0x2483ffff, 0xc0048b3, 0x0, +0x1000034c, 0x0, 0x2c620013, 0x10400349, +0x31080, 0x3c010001, 0x220821, 0x8c226c10, +0x400008, 0x0, 0xc004dec, 0x8021, +0x34028000, 0xa7a20010, 0x27b10010, 0xc004dab, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004523, 0x2021, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0xc004523, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0xc004dab, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fffa, 0x32020001, 0x24100010, 0xc004523, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0xc004dab, 0x2021, 0x108042, 0x1600fffc, 0x0, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x1000030e, 0x24020002, 0x27b10010, 0xa7a00010, -0x8021, 0xc004523, 0x24040001, 0x26100001, -0x2e020020, 0x1440fffb, 0x0, 0xc004523, -0x2021, 0xc004523, 0x24040001, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0x24100010, +0x8021, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020001, -0x24100010, 0xc004523, 0x2021, 0x108042, -0x1600fffc, 0x0, 0xc004549, 0x34108000, -0xc004549, 0x0, 0xc004503, 0x0, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0xc004dab, 0x2021, 0x108042, +0x1600fffc, 0x0, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, -0xc004549, 0x0, 0x97a20010, 0x30428000, +0xc004dec, 0x0, 0x97a20010, 0x30428000, 0x144002dc, 0x24020003, 0x100002d8, 0x0, 0x24021200, 0xa7a20010, 0x27b10010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, -0xc004523, 0x2021, 0x108042, 0x1600fffc, -0x0, 0xc004523, 0x24040001, 0xc004523, +0xc004dab, 0x2021, 0x108042, 0x1600fffc, +0x0, 0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, -0x10400002, 0x2021, 0x24040001, 0xc004523, -0x108042, 0x1600fff8, 0x0, 0xc004549, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x10000296, 0x24020004, -0x8f830054, 0x3c020001, 0x8c423edc, 0x2463ff9c, +0x8f830054, 0x3c020001, 0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x1440029e, 0x24020002, -0x3c030001, 0x8c633ee0, 0x10620297, 0x2c620003, +0x3c030001, 0x8c636fb8, 0x10620297, 0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, 0x24020004, 0x10620291, 0x2402000f, 0x1000028f, 0x24020011, 0x1000028d, 0x24020005, 0x24020014, -0xa7a20010, 0x27b10010, 0x8021, 0xc004523, +0xa7a20010, 0x27b10010, 0x8021, 0xc004dab, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004523, 0x2021, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0xc004523, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0xc004dab, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, +0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020012, -0x10400002, 0x2021, 0x24040001, 0xc004523, -0x108042, 0x1600fffa, 0x32020012, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020012, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004523, 0x108042, 0x1600fff8, -0x0, 0xc004549, 0x0, 0x8f830054, +0x24040001, 0xc004dab, 0x108042, 0x1600fff8, +0x0, 0xc004dec, 0x0, 0x8f830054, 0x10000248, 0x24020006, 0x8f830054, 0x3c020001, -0x8c423edc, 0x2463ff9c, 0x431023, 0x2c420064, +0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400250, 0x24020007, 0x1000024c, 0x0, 0x24020006, 0xa7a20010, 0x27b10010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020013, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020013, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x108042, 0x1600fffa, 0x32020013, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x10000207, 0x24020008, 0x8f830054, -0x3c020001, 0x8c423edc, 0x2463ff9c, 0x431023, +0x3c020001, 0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x1440020f, 0x24020009, 0x1000020b, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x24040001, -0xc004523, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020018, -0xc004549, 0x34108000, 0xc004549, 0x0, -0xc004503, 0x0, 0x50400005, 0x108042, +0xc004dab, 0x108042, 0x1600fffa, 0x32020018, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004549, 0x8021, +0x1600fff7, 0x0, 0xc004dec, 0x8021, 0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020018, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x108042, 0x1600fffa, 0x32020018, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x10000193, 0x2402000a, 0x8f830054, -0x3c020001, 0x8c423edc, 0x2463ff9c, 0x431023, +0x3c020001, 0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x1440019b, 0x2402000b, 0x10000197, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x24040001, -0xc004523, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020017, -0xc004549, 0x34108000, 0xc004549, 0x0, -0xc004503, 0x0, 0x50400005, 0x108042, +0xc004dab, 0x108042, 0x1600fffa, 0x32020017, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004549, 0x8021, +0x1600fff7, 0x0, 0xc004dec, 0x8021, 0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020017, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x108042, 0x1600fffa, 0x32020017, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x1000011f, 0x2402000c, 0x8f830054, -0x3c020001, 0x8c423edc, 0x2463ff9c, 0x431023, +0x3c020001, 0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400127, 0x24020012, 0x10000123, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x24040001, -0xc004523, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020014, -0xc004549, 0x34108000, 0xc004549, 0x0, -0xc004503, 0x0, 0x50400005, 0x108042, +0xc004dab, 0x108042, 0x1600fffa, 0x32020014, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004549, 0x8021, +0x1600fff7, 0x0, 0xc004dec, 0x8021, 0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020014, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x108042, 0x1600fffa, 0x32020014, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x100000ab, 0x24020013, 0x8f830054, -0x3c020001, 0x8c423edc, 0x2463ff9c, 0x431023, +0x3c020001, 0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x144000b3, 0x2402000d, 0x100000af, 0x0, 0x27b10010, 0xa7a00010, 0x8021, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x24040001, -0xc004523, 0x2021, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020018, -0xc004549, 0x34108000, 0xc004549, 0x0, -0xc004503, 0x0, 0x50400005, 0x108042, +0xc004dab, 0x108042, 0x1600fffa, 0x32020018, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, -0x1600fff7, 0x0, 0xc004549, 0x8021, +0x1600fff7, 0x0, 0xc004dec, 0x8021, 0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, -0xc004523, 0x24040001, 0x26100001, 0x2e020020, -0x1440fffb, 0x0, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0xc004523, 0x2021, -0xc004523, 0x24040001, 0x24100010, 0x32020001, -0x10400002, 0x2021, 0x24040001, 0xc004523, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, -0xc004523, 0x108042, 0x1600fffa, 0x32020018, -0xc004523, 0x24040001, 0xc004523, 0x2021, +0xc004dab, 0x108042, 0x1600fffa, 0x32020018, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, -0x1600fff8, 0x0, 0xc004549, 0x0, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fff8, 0x0, 0xc004dec, 0x0, 0x8f830054, 0x10000037, 0x2402000e, 0x24020840, -0xa7a20010, 0x27b10010, 0x8021, 0xc004523, +0xa7a20010, 0x27b10010, 0x8021, 0xc004dab, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, -0x0, 0xc004523, 0x2021, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0xc004523, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0xc004dab, 0x24040001, 0x24100010, 0x32020001, 0x10400002, -0x2021, 0x24040001, 0xc004523, 0x108042, +0x2021, 0x24040001, 0xc004dab, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020013, -0x10400002, 0x2021, 0x24040001, 0xc004523, -0x108042, 0x1600fffa, 0x32020013, 0xc004523, -0x24040001, 0xc004523, 0x2021, 0x34108000, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020013, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, -0x24040001, 0xc004523, 0x108042, 0x1600fff8, -0x0, 0xc004549, 0x0, 0x8f830054, -0x24020010, 0x3c010001, 0xac223db0, 0x3c010001, -0x1000000c, 0xac233edc, 0x8f830054, 0x3c020001, -0x8c423edc, 0x2463ff9c, 0x431023, 0x2c420064, +0x24040001, 0xc004dab, 0x108042, 0x1600fff8, +0x0, 0xc004dec, 0x0, 0x8f830054, +0x24020010, 0x3c010001, 0xac226e50, 0x3c010001, +0x1000000c, 0xac236fb4, 0x8f830054, 0x3c020001, +0x8c426fb4, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, -0xac223db0, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, -0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044, +0xac226e50, 0x8fbf0020, 0x8fb1001c, 0x8fb00018, +0x3e00008, 0x27bd0028, 0x3c030001, 0x8c636e18, +0x27bdffc8, 0x24020002, 0xafbf0034, 0xafb20030, +0xafb1002c, 0x14620004, 0xafb00028, 0x3c120002, +0x10000003, 0x8e529078, 0x3c120002, 0x8e52907c, +0x3c030001, 0x8c636e54, 0x3c020001, 0x8c426e9c, +0x50620004, 0x2463ffff, 0x3c010001, 0xac236e9c, +0x2463ffff, 0x2c620006, 0x104004b9, 0x31080, +0x3c010001, 0x220821, 0x8c226c68, 0x400008, +0x0, 0x2021, 0x2821, 0xc004e0e, +0x34068000, 0x24040010, 0x24050002, 0x24060002, +0x24020002, 0xc004e0e, 0xa7a20018, 0x24020002, +0x3c010001, 0x100004a6, 0xac226e54, 0x27b10018, +0xa7a00018, 0x8021, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0xc004dab, 0x2021, +0x108042, 0x1600fffc, 0x0, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x96220000, +0x501025, 0xa6220000, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x0, 0x97a20018, +0x30428000, 0x14400004, 0x24020003, 0x3c010001, +0xac226e54, 0x24020003, 0x3c010001, 0x1000046c, +0xac226e54, 0x24040010, 0x24050002, 0x24060002, +0x24020002, 0xc004e0e, 0xa7a20018, 0x3c030001, +0x8c636ea0, 0x24020001, 0x146201e2, 0x0, +0x27b10018, 0xa7a00018, 0x8021, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020018, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020018, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x96220000, +0x501025, 0xa6220000, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x8021, 0x27b10018, +0xa7a00018, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0x32020018, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020018, 0xc004dec, 0x34108000, 0xc004dec, +0x0, 0xc004d8b, 0x0, 0x50400005, +0x108042, 0x96220000, 0x501025, 0xa6220000, +0x108042, 0x1600fff7, 0x0, 0xc004dec, +0x8021, 0x24040018, 0x2821, 0xc004e0e, +0x24060404, 0xa7a0001a, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0x32020018, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020018, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, +0x50400005, 0x108042, 0x97a2001a, 0x501025, +0xa7a2001a, 0x108042, 0x1600fff7, 0x0, +0xc004dec, 0x8021, 0xa7a0001a, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020018, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020018, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x97a2001a, +0x501025, 0xa7a2001a, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x8021, 0xa7a0001c, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0xc004dab, +0x2021, 0x108042, 0x1600fffc, 0x0, +0x24100010, 0x3202001e, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x3202001e, 0xc004dec, 0x34108000, 0xc004dec, +0x0, 0xc004d8b, 0x0, 0x50400005, +0x108042, 0x97a2001c, 0x501025, 0xa7a2001c, +0x108042, 0x1600fff7, 0x0, 0xc004dec, +0x8021, 0xa7a0001c, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0xc004dab, 0x2021, 0x108042, +0x1600fffc, 0x0, 0x24100010, 0x3202001e, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x3202001e, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x97a2001c, +0x501025, 0xa7a2001c, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x8021, 0x24020002, +0xa7a2001e, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0x24100010, +0xc004dab, 0x2021, 0x108042, 0x1600fffc, +0x0, 0x24100010, 0x3202001e, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x3202001e, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x34108000, 0x97a2001e, +0x501024, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fff8, 0x0, +0xc004dec, 0x8021, 0xa7a00020, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x24100010, 0xc004dab, 0x2021, +0x108042, 0x1600fffc, 0x0, 0x24100010, +0x3202001e, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x3202001e, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, +0x97a20020, 0x501025, 0xa7a20020, 0x108042, +0x1600fff7, 0x0, 0xc004dec, 0x8021, +0xa7a00020, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, +0xc004dab, 0x2021, 0x108042, 0x1600fffc, +0x0, 0x24100010, 0x3202001e, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x3202001e, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, +0x50400005, 0x108042, 0x97a20020, 0x501025, +0xa7a20020, 0x108042, 0x1600fff7, 0x0, +0xc004dec, 0x8021, 0xa7a00022, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0x24100010, 0xc004dab, 0x2021, +0x108042, 0x1600fffc, 0x0, 0x24100010, +0xc004dab, 0x2021, 0x108042, 0x1600fffc, +0x0, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x34108000, 0x97a20022, 0x501024, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fff8, 0x0, 0xc004dec, +0x0, 0x24040018, 0x24050002, 0xc004e0e, +0x24060004, 0x3c030001, 0x8c636ea4, 0x24020001, +0x146200fc, 0x3c024000, 0x3c010001, 0xac206ea4, +0x2421024, 0x10400276, 0x3c022000, 0x2421024, +0x10400004, 0x0, 0x3c010001, 0x10000003, +0xac236f98, 0x3c010001, 0xac206f98, 0x3c030001, +0x8c636fac, 0x24020005, 0x146200ea, 0x0, +0x3c020001, 0x8c426f98, 0x1040005f, 0x3c020004, +0x2421024, 0x10400011, 0xa7a00018, 0x3c020008, +0x2421024, 0x10400002, 0x24020200, 0xa7a20018, +0x3c020010, 0x2421024, 0x10400004, 0x0, +0x97a20018, 0x34420100, 0xa7a20018, 0x97a60018, +0x24040009, 0x10000004, 0x2821, 0x24040009, +0x2821, 0x3021, 0xc004e0e, 0x0, +0x24020001, 0xa7a2001a, 0x3c020008, 0x2421024, +0x1040000c, 0x3c020002, 0x2421024, 0x10400002, +0x24020101, 0xa7a2001a, 0x3c020001, 0x2421024, +0x10400005, 0x3c020010, 0x97a2001a, 0x34420040, +0xa7a2001a, 0x3c020010, 0x2421024, 0x1040000e, +0x3c020002, 0x2421024, 0x10400005, 0x3c020001, +0x97a2001a, 0x34420080, 0xa7a2001a, 0x3c020001, +0x2421024, 0x10400005, 0x3c0300a0, 0x97a2001a, +0x34420020, 0xa7a2001a, 0x3c0300a0, 0x2431024, +0x54430004, 0x3c020020, 0x97a2001a, 0x1000000c, +0x34420400, 0x2421024, 0x50400004, 0x3c020080, +0x97a2001a, 0x10000006, 0x34420800, 0x2421024, +0x10400004, 0x0, 0x97a2001a, 0x34420c00, +0xa7a2001a, 0x97a6001a, 0x24040004, 0xc004e0e, +0x2821, 0x32424000, 0x10400003, 0xa7a0001c, +0x24024000, 0xa7a2001c, 0x97a6001c, 0x2021, +0x2821, 0x34c61200, 0xc004e0e, 0xa7a6001c, +0x10000088, 0x0, 0x32424000, 0x10400003, +0xa7a00018, 0x24024000, 0xa7a20018, 0x3c020010, +0x2421024, 0x10400004, 0x0, 0x97a20018, +0x10000004, 0xa7a20018, 0x97a20018, 0x34420100, +0xa7a20018, 0x3c020001, 0x2421024, 0x10400004, +0x0, 0x97a20018, 0x10000004, 0xa7a20018, +0x97a20018, 0x34422000, 0xa7a20018, 0x2021, +0x97a60018, 0x2821, 0xc004e0e, 0x8021, +0xa7a0001a, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0xc004dab, 0x2021, 0x108042, +0x1600fffc, 0x0, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, +0x50400005, 0x108042, 0x97a2001a, 0x501025, +0xa7a2001a, 0x108042, 0x1600fff7, 0x0, +0xc004dec, 0x8021, 0xa7a0001a, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0xc004dab, +0x2021, 0x108042, 0x1600fffc, 0x0, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, +0x97a2001a, 0x501025, 0xa7a2001a, 0x108042, +0x1600fff7, 0x0, 0xc004dec, 0x0, +0x3c040001, 0x24846c5c, 0x97a60018, 0x97a7001a, +0x3c020001, 0x8c426e18, 0x3c030001, 0x8c636f98, +0x3c05000d, 0x34a50205, 0xafa20010, 0xc002b17, +0xafa30014, 0x8f830054, 0x24020004, 0x3c010001, +0xac226e54, 0x3c010001, 0x10000179, 0xac236fb0, +0x8f830054, 0x3c020001, 0x8c426fb0, 0x2463ff9c, +0x431023, 0x2c420064, 0x14400009, 0x27b10018, +0x8f820220, 0x24030005, 0x3c010001, 0xac236e54, +0x3c03f700, 0x431025, 0xaf820220, 0x27b10018, +0xa7a00018, 0x8021, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0xc004dab, 0x2021, +0x108042, 0x1600fffc, 0x0, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x96220000, +0x501025, 0xa6220000, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x8021, 0xa7a0001a, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, +0x97a2001a, 0x501025, 0xa7a2001a, 0x108042, +0x1600fff7, 0x0, 0xc004dec, 0x8021, +0xa7a0001a, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0xc004dec, 0x34108000, 0xc004dec, +0x0, 0xc004d8b, 0x0, 0x50400005, +0x108042, 0x97a2001a, 0x501025, 0xa7a2001a, +0x108042, 0x1600fff7, 0x0, 0xc004dec, +0x8021, 0xa7a0001c, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0x32020004, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020004, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, +0x50400005, 0x108042, 0x97a2001c, 0x501025, +0xa7a2001c, 0x108042, 0x1600fff7, 0x0, +0xc004dec, 0x8021, 0xa7a0001c, 0xc004dab, +0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, +0x0, 0xc004dab, 0x2021, 0xc004dab, +0x24040001, 0xc004dab, 0x24040001, 0xc004dab, +0x2021, 0x24100010, 0x32020001, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x32020001, 0x24100010, 0x32020004, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020004, 0xc004dec, +0x34108000, 0xc004dec, 0x0, 0xc004d8b, +0x0, 0x50400005, 0x108042, 0x97a2001c, +0x501025, 0xa7a2001c, 0x108042, 0x1600fff7, +0x0, 0xc004dec, 0x8021, 0xa7a00020, +0xc004dab, 0x24040001, 0x26100001, 0x2e020020, +0x1440fffb, 0x0, 0xc004dab, 0x2021, +0xc004dab, 0x24040001, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x24100010, 0x32020001, +0x10400002, 0x2021, 0x24040001, 0xc004dab, +0x108042, 0x1600fffa, 0x32020001, 0x24100010, +0x32020019, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020019, +0xc004dec, 0x34108000, 0xc004dec, 0x0, +0xc004d8b, 0x0, 0x50400005, 0x108042, +0x97a20020, 0x501025, 0xa7a20020, 0x108042, +0x1600fff7, 0x0, 0xc004dec, 0x8021, +0xa7a00020, 0xc004dab, 0x24040001, 0x26100001, +0x2e020020, 0x1440fffb, 0x0, 0xc004dab, +0x2021, 0xc004dab, 0x24040001, 0xc004dab, +0x24040001, 0xc004dab, 0x2021, 0x24100010, +0x32020001, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fffa, 0x32020001, +0x24100010, 0x32020019, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020019, 0xc004dec, 0x34108000, 0xc004dec, +0x0, 0xc004d8b, 0x0, 0x50400005, +0x108042, 0x97a20020, 0x501025, 0xa7a20020, +0x108042, 0x1600fff7, 0x0, 0xc004dec, +0x0, 0x97a60018, 0x97a7001a, 0x97a2001c, +0x3c040001, 0x24846c5c, 0xafa20010, 0x97a20020, +0x3c05000d, 0x34a50204, 0xc002b17, 0xafa20014, +0x10000007, 0x0, 0x24020006, 0x3c010001, +0xac226e54, 0x24020011, 0x3c010001, 0xac226e50, +0x8fbf0034, 0x8fb20030, 0x8fb1002c, 0x8fb00028, +0x3e00008, 0x27bd0038, 0x8f850044, 0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, 0x8f840054, 0x8f820054, 0xa32824, 0x10000002, 0x24840001, 0x8f820054, 0x821023, 0x2c420002, @@ -7883,153 +8567,207 @@ 0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824, 0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, -0x3c030001, 0x431025, 0xaf820044, 0x8f830054, -0x8f820054, 0x10000002, 0x24630001, 0x8f820054, -0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024, +0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820044, 0x3c030001, 0x431025, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008, 0x0, -0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024, -0xaf820044, 0x8f820044, 0x3c030001, 0x431025, -0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, -0x24630001, 0x8f820054, 0x621023, 0x2c420002, -0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, -0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, -0x8f820054, 0x10000002, 0x24630001, 0x8f820054, -0x621023, 0x2c420002, 0x1440fffc, 0x0, -0x3e00008, 0x0, 0x0, 0x27bdffe8, +0x8f820044, 0x2403ff7f, 0x431024, 0xaf820044, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820044, 0x34420080, 0xaf820044, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x3e00008, 0x0, 0x8f820044, +0x3c03fff0, 0x3463ffff, 0x431024, 0xaf820044, +0x8f820044, 0x3c030001, 0x431025, 0xaf820044, +0x8f830054, 0x8f820054, 0x10000002, 0x24630001, +0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, +0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff, +0x431024, 0xaf820044, 0x8f830054, 0x8f820054, +0x10000002, 0x24630001, 0x8f820054, 0x621023, +0x2c420002, 0x1440fffc, 0x0, 0x3e00008, +0x0, 0x27bdffc8, 0xafb30024, 0x809821, +0xafbe002c, 0xa0f021, 0xafb20020, 0xc09021, +0x33c2ffff, 0xafbf0030, 0xafb50028, 0xafb1001c, +0xafb00018, 0x14400034, 0xa7b20010, 0x3271ffff, +0x27b20010, 0x8021, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0x2301024, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x2301024, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x34108000, 0x96420000, +0x501024, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x12000075, 0x0, +0x1000fff6, 0x0, 0x3275ffff, 0x27b10010, +0xa7a00010, 0x8021, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x24040001, 0xc004dab, 0x2021, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0x2b01024, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x2b01024, 0xc004dec, 0x34108000, +0xc004dec, 0x0, 0xc004d8b, 0x0, +0x50400005, 0x108042, 0x96220000, 0x501025, +0xa6220000, 0x108042, 0x1600fff7, 0x0, +0xc004dec, 0x0, 0x33c5ffff, 0x24020001, +0x54a20004, 0x24020002, 0x97a20010, 0x10000006, +0x521025, 0x14a20006, 0x3271ffff, 0x97a20010, +0x121827, 0x431024, 0xa7a20010, 0x3271ffff, +0x27b20010, 0x8021, 0xc004dab, 0x24040001, +0x26100001, 0x2e020020, 0x1440fffb, 0x0, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0xc004dab, 0x24040001, +0x24100010, 0x32020001, 0x10400002, 0x2021, +0x24040001, 0xc004dab, 0x108042, 0x1600fffa, +0x32020001, 0x24100010, 0x2301024, 0x10400002, +0x2021, 0x24040001, 0xc004dab, 0x108042, +0x1600fffa, 0x2301024, 0xc004dab, 0x24040001, +0xc004dab, 0x2021, 0x34108000, 0x96420000, +0x501024, 0x10400002, 0x2021, 0x24040001, +0xc004dab, 0x108042, 0x1600fff8, 0x0, +0xc004dec, 0x0, 0x8fbf0030, 0x8fbe002c, +0x8fb50028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, +0x8fb00018, 0x3e00008, 0x27bd0038, 0x27bdffe8, 0xafbf0010, 0x8ee304b8, 0x24020008, 0x146201e0, -0x0, 0x3c020001, 0x8c423ec8, 0x14400005, -0x0, 0xc003b0b, 0x8f840224, 0x100001d8, +0x0, 0x3c020001, 0x8c426f98, 0x14400005, +0x0, 0xc003d87, 0x8f840224, 0x100001d8, 0x0, 0x8f820220, 0x3c030008, 0x431024, 0x10400026, 0x24020001, 0x8f840224, 0x8f820220, 0x3c030400, 0x431024, 0x10400006, 0x0, -0x3c010001, 0xac205f40, 0x3c010001, 0x1000000b, -0xac205f60, 0x3c030001, 0x24635f40, 0x8c620000, +0x3c010002, 0xac209020, 0x3c010002, 0x1000000b, +0xac209040, 0x3c030002, 0x24639020, 0x8c620000, 0x24420001, 0xac620000, 0x2c420002, 0x14400003, -0x24020001, 0x3c010001, 0xac225f60, 0x3c020001, -0x8c425f60, 0x10400006, 0x30820040, 0x10400004, -0x24020001, 0x3c010001, 0x10000003, 0xac225f64, -0x3c010001, 0xac205f64, 0x3c010001, 0xac245f3c, -0x3c010001, 0x1000000b, 0xac205f70, 0x3c010001, -0xac225f70, 0x3c010001, 0xac205f60, 0x3c010001, -0xac205f40, 0x3c010001, 0xac205f64, 0x3c010001, -0xac205f3c, 0x3c030001, 0x8c635f30, 0x3c020001, -0x8c425f34, 0x50620004, 0x2463ffff, 0x3c010001, -0xac235f34, 0x2463ffff, 0x2c62000e, 0x10400194, -0x31080, 0x3c010001, 0x220821, 0x8c223c30, -0x400008, 0x0, 0x24020002, 0x3c010001, -0xac205f60, 0x3c010001, 0xac205f40, 0x3c010001, -0xac205f3c, 0x3c010001, 0xac205f64, 0x3c010001, -0xac205f58, 0x3c010001, 0xac205f50, 0xaf800224, -0x3c010001, 0xac225f30, 0x3c020001, 0x8c425f70, -0x1440004f, 0x3c02fdff, 0x3442ffff, 0xc003b0b, +0x24020001, 0x3c010002, 0xac229040, 0x3c020002, +0x8c429040, 0x10400006, 0x30820040, 0x10400004, +0x24020001, 0x3c010002, 0x10000003, 0xac229044, +0x3c010002, 0xac209044, 0x3c010002, 0xac24901c, +0x3c010002, 0x1000000b, 0xac209050, 0x3c010002, +0xac229050, 0x3c010002, 0xac209040, 0x3c010002, +0xac209020, 0x3c010002, 0xac209044, 0x3c010002, +0xac20901c, 0x3c030002, 0x8c639010, 0x3c020002, +0x8c429014, 0x50620004, 0x2463ffff, 0x3c010002, +0xac239014, 0x2463ffff, 0x2c62000e, 0x10400194, +0x31080, 0x3c010001, 0x220821, 0x8c226c80, +0x400008, 0x0, 0x24020002, 0x3c010002, +0xac209040, 0x3c010002, 0xac209020, 0x3c010002, +0xac20901c, 0x3c010002, 0xac209044, 0x3c010002, +0xac209038, 0x3c010002, 0xac209030, 0xaf800224, +0x3c010002, 0xac229010, 0x3c020002, 0x8c429050, +0x1440004f, 0x3c02fdff, 0x3442ffff, 0xc003d87, 0x282a024, 0xaf800204, 0x8f820200, 0x2403fffd, -0x431024, 0xaf820200, 0x3c010001, 0xac205f80, -0x8f830054, 0x3c020001, 0x8c425f58, 0x24040001, -0x3c010001, 0xac245f6c, 0x24420001, 0x3c010001, -0xac225f58, 0x2c420004, 0x3c010001, 0xac235f54, -0x14400006, 0x24020003, 0x3c010001, 0xac243d8c, -0x3c010001, 0x1000015e, 0xac205f58, 0x3c010001, -0x1000015b, 0xac225f30, 0x8f830054, 0x3c020001, -0x8c425f54, 0x2463d8f0, 0x431023, 0x2c422710, -0x14400003, 0x24020004, 0x3c010001, 0xac225f30, -0x3c020001, 0x8c425f70, 0x14400021, 0x3c02fdff, +0x431024, 0xaf820200, 0x3c010002, 0xac209060, +0x8f830054, 0x3c020002, 0x8c429038, 0x24040001, +0x3c010002, 0xac24904c, 0x24420001, 0x3c010002, +0xac229038, 0x2c420004, 0x3c010002, 0xac239034, +0x14400006, 0x24020003, 0x3c010001, 0xac246e1c, +0x3c010002, 0x1000015e, 0xac209038, 0x3c010002, +0x1000015b, 0xac229010, 0x8f830054, 0x3c020002, +0x8c429034, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400003, 0x24020004, 0x3c010002, 0xac229010, +0x3c020002, 0x8c429050, 0x14400021, 0x3c02fdff, 0x3442ffff, 0x1000014a, 0x282a024, 0x3c040001, -0x8c843ecc, 0x3c010001, 0xc004754, 0xac205f48, -0x3c020001, 0x8c425f7c, 0xaf820204, 0x3c020001, -0x8c425f70, 0x14400012, 0x3c03fdff, 0x8f820204, +0x8c846f9c, 0x3c010002, 0xc0050b4, 0xac209028, +0x3c020002, 0x8c42905c, 0xaf820204, 0x3c020002, +0x8c429050, 0x14400012, 0x3c03fdff, 0x8f820204, 0x3463ffff, 0x30420030, 0x1440012f, 0x283a024, -0x3c030001, 0x8c635f7c, 0x24020005, 0x3c010001, -0xac225f30, 0x3c010001, 0x10000131, 0xac235f80, -0x3c020001, 0x8c425f70, 0x10400010, 0x3c02fdff, -0x3c020001, 0x8c423e0c, 0x24420001, 0x3c010001, -0xac223e0c, 0x2c420002, 0x14400125, 0x24020001, -0x3c010001, 0xac223e14, 0x3c010001, 0xac203e0c, -0x3c010001, 0x1000011e, 0xac223d8c, 0x3c030001, -0x8c635f60, 0x3442ffff, 0x10600119, 0x282a024, -0x3c020001, 0x8c425f3c, 0x10400115, 0x0, -0x3c010001, 0xac225f68, 0x24020003, 0x3c010001, -0xac225f40, 0x100000b8, 0x24020006, 0x3c010001, -0xac205f48, 0x8f820204, 0x34420040, 0xaf820204, -0x3c020001, 0x8c425f80, 0x24030007, 0x3c010001, -0xac235f30, 0x34420040, 0x3c010001, 0xac225f80, -0x3c020001, 0x8c425f60, 0x10400005, 0x0, -0x3c020001, 0x8c425f3c, 0x104000f0, 0x24020002, -0x3c050001, 0x24a55f40, 0x8ca20000, 0x2c424e21, -0x104000ea, 0x24020002, 0x3c020001, 0x8c425f64, -0x104000ef, 0x2404ffbf, 0x3c020001, 0x8c425f3c, -0x3c030001, 0x8c635f68, 0x441024, 0x641824, -0x10430004, 0x24020001, 0x3c010001, 0x100000e4, -0xac225f30, 0x24020003, 0xaca20000, 0x24020008, -0x3c010001, 0xac225f30, 0x3c020001, 0x8c425f6c, -0x1040000c, 0x24020001, 0x3c040001, 0xc004761, -0x8c845f3c, 0x3c020001, 0x8c425f88, 0x14400005, -0x24020001, 0x3c020001, 0x8c425f84, 0x10400006, -0x24020001, 0x3c010001, 0xac223d8c, 0x3c010001, -0x100000cb, 0xac205f58, 0x3c020001, 0x8c425f50, -0x3c030001, 0x8c635f3c, 0x2c420001, 0x210c0, -0x30630008, 0x3c010001, 0xac225f50, 0x3c010001, -0xac235f4c, 0x8f830054, 0x24020009, 0x3c010001, -0xac225f30, 0x3c010001, 0x100000b9, 0xac235f54, -0x8f830054, 0x3c020001, 0x8c425f54, 0x2463d8f0, +0x3c030002, 0x8c63905c, 0x24020005, 0x3c010002, +0xac229010, 0x3c010002, 0x10000131, 0xac239060, +0x3c020002, 0x8c429050, 0x10400010, 0x3c02fdff, +0x3c020001, 0x8c426ebc, 0x24420001, 0x3c010001, +0xac226ebc, 0x2c420002, 0x14400125, 0x24020001, +0x3c010001, 0xac226ec4, 0x3c010001, 0xac206ebc, +0x3c010001, 0x1000011e, 0xac226e1c, 0x3c030002, +0x8c639040, 0x3442ffff, 0x10600119, 0x282a024, +0x3c020002, 0x8c42901c, 0x10400115, 0x0, +0x3c010002, 0xac229048, 0x24020003, 0x3c010002, +0xac229020, 0x100000b8, 0x24020006, 0x3c010002, +0xac209028, 0x8f820204, 0x34420040, 0xaf820204, +0x3c020002, 0x8c429060, 0x24030007, 0x3c010002, +0xac239010, 0x34420040, 0x3c010002, 0xac229060, +0x3c020002, 0x8c429040, 0x10400005, 0x0, +0x3c020002, 0x8c42901c, 0x104000f0, 0x24020002, +0x3c050002, 0x24a59020, 0x8ca20000, 0x2c424e21, +0x104000ea, 0x24020002, 0x3c020002, 0x8c429044, +0x104000ef, 0x2404ffbf, 0x3c020002, 0x8c42901c, +0x3c030002, 0x8c639048, 0x441024, 0x641824, +0x10430004, 0x24020001, 0x3c010002, 0x100000e4, +0xac229010, 0x24020003, 0xaca20000, 0x24020008, +0x3c010002, 0xac229010, 0x3c020002, 0x8c42904c, +0x1040000c, 0x24020001, 0x3c040002, 0xc0050c1, +0x8c84901c, 0x3c020002, 0x8c429068, 0x14400005, +0x24020001, 0x3c020002, 0x8c429064, 0x10400006, +0x24020001, 0x3c010001, 0xac226e1c, 0x3c010002, +0x100000cb, 0xac209038, 0x3c020002, 0x8c429030, +0x3c030002, 0x8c63901c, 0x2c420001, 0x210c0, +0x30630008, 0x3c010002, 0xac229030, 0x3c010002, +0xac23902c, 0x8f830054, 0x24020009, 0x3c010002, +0xac229010, 0x3c010002, 0x100000b9, 0xac239034, +0x8f830054, 0x3c020002, 0x8c429034, 0x2463d8f0, 0x431023, 0x2c422710, 0x1440009f, 0x0, -0x3c020001, 0x8c425f60, 0x10400005, 0x0, -0x3c020001, 0x8c425f3c, 0x104000a0, 0x24020002, -0x3c030001, 0x24635f40, 0x8c620000, 0x2c424e21, -0x1040009a, 0x24020002, 0x3c020001, 0x8c425f6c, -0x1040000e, 0x0, 0x3c020001, 0x8c425f3c, -0x3c010001, 0xac205f6c, 0x30420080, 0x1040002f, +0x3c020002, 0x8c429040, 0x10400005, 0x0, +0x3c020002, 0x8c42901c, 0x104000a0, 0x24020002, +0x3c030002, 0x24639020, 0x8c620000, 0x2c424e21, +0x1040009a, 0x24020002, 0x3c020002, 0x8c42904c, +0x1040000e, 0x0, 0x3c020002, 0x8c42901c, +0x3c010002, 0xac20904c, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204, 0x30420080, 0x1440000c, -0x24020003, 0x10000029, 0x2402000c, 0x3c020001, -0x8c425f3c, 0x30420080, 0x14400005, 0x24020003, +0x24020003, 0x10000029, 0x2402000c, 0x3c020002, +0x8c42901c, 0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080, 0x1040001f, 0x24020003, -0xac620000, 0x2402000a, 0x3c010001, 0xac225f30, -0x3c040001, 0x24845f78, 0x8c820000, 0x3c030001, -0x8c635f50, 0x431025, 0xaf820204, 0x8c830000, -0x3c040001, 0x8c845f50, 0x2402000b, 0x3c010001, -0xac225f30, 0x641825, 0x3c010001, 0xac235f80, -0x3c050001, 0x24a55f40, 0x8ca20000, 0x2c424e21, -0x10400066, 0x24020002, 0x3c020001, 0x8c425f70, -0x10400005, 0x0, 0x2402000c, 0x3c010001, -0x10000067, 0xac225f30, 0x3c020001, 0x8c425f60, -0x10400063, 0x0, 0x3c040001, 0x8c845f3c, -0x10800055, 0x30820008, 0x3c030001, 0x8c635f4c, -0x1062005b, 0x24020003, 0x3c010001, 0xac245f68, -0xaca20000, 0x24020006, 0x3c010001, 0x10000054, -0xac225f30, 0x8f820200, 0x34420002, 0xaf820200, -0x8f830054, 0x2402000d, 0x3c010001, 0xac225f30, -0x3c010001, 0xac235f54, 0x8f830054, 0x3c020001, -0x8c425f54, 0x2463d8f0, 0x431023, 0x2c422710, -0x14400031, 0x0, 0x3c020001, 0x8c425f70, -0x10400020, 0x2402000e, 0x3c030001, 0x8c635f84, -0x3c010001, 0x14600015, 0xac225f30, 0xc003bc9, -0x0, 0x3c050001, 0x8ca53d88, 0xc0048dd, -0x2021, 0x3c030001, 0x8c633d88, 0x24020004, -0x14620005, 0x2403fffb, 0x3c020001, 0x8c423d84, -0x10000003, 0x2403fff7, 0x3c020001, 0x8c423d84, -0x431024, 0x3c010001, 0xac223d84, 0x8f830224, -0x3c020200, 0x3c010001, 0xac235f8c, 0x10000020, -0x282a025, 0x3c020001, 0x8c425f60, 0x10400005, -0x0, 0x3c020001, 0x8c425f3c, 0x1040000f, -0x24020002, 0x3c020001, 0x8c425f40, 0x2c424e21, -0x1040000a, 0x24020002, 0x3c020001, 0x8c425f60, -0x1040000f, 0x0, 0x3c020001, 0x8c425f3c, -0x1440000b, 0x0, 0x24020002, 0x3c010001, -0x10000007, 0xac225f30, 0x3c020001, 0x8c425f60, -0x10400003, 0x0, 0xc003b0b, 0x0, +0xac620000, 0x2402000a, 0x3c010002, 0xac229010, +0x3c040002, 0x24849058, 0x8c820000, 0x3c030002, +0x8c639030, 0x431025, 0xaf820204, 0x8c830000, +0x3c040002, 0x8c849030, 0x2402000b, 0x3c010002, +0xac229010, 0x641825, 0x3c010002, 0xac239060, +0x3c050002, 0x24a59020, 0x8ca20000, 0x2c424e21, +0x10400066, 0x24020002, 0x3c020002, 0x8c429050, +0x10400005, 0x0, 0x2402000c, 0x3c010002, +0x10000067, 0xac229010, 0x3c020002, 0x8c429040, +0x10400063, 0x0, 0x3c040002, 0x8c84901c, +0x10800055, 0x30820008, 0x3c030002, 0x8c63902c, +0x1062005b, 0x24020003, 0x3c010002, 0xac249048, +0xaca20000, 0x24020006, 0x3c010002, 0x10000054, +0xac229010, 0x8f820200, 0x34420002, 0xaf820200, +0x8f830054, 0x2402000d, 0x3c010002, 0xac229010, +0x3c010002, 0xac239034, 0x8f830054, 0x3c020002, +0x8c429034, 0x2463d8f0, 0x431023, 0x2c422710, +0x14400031, 0x0, 0x3c020002, 0x8c429050, +0x10400020, 0x2402000e, 0x3c030002, 0x8c639064, +0x3c010002, 0x14600015, 0xac229010, 0xc003e45, +0x0, 0x3c050001, 0x8ca56e18, 0xc0052c7, +0x2021, 0x3c030001, 0x8c636e18, 0x24020004, +0x14620005, 0x2403fffb, 0x3c020001, 0x8c426e14, +0x10000003, 0x2403fff7, 0x3c020001, 0x8c426e14, +0x431024, 0x3c010001, 0xac226e14, 0x8f830224, +0x3c020200, 0x3c010002, 0xac23906c, 0x10000020, +0x282a025, 0x3c020002, 0x8c429040, 0x10400005, +0x0, 0x3c020002, 0x8c42901c, 0x1040000f, +0x24020002, 0x3c020002, 0x8c429020, 0x2c424e21, +0x1040000a, 0x24020002, 0x3c020002, 0x8c429040, +0x1040000f, 0x0, 0x3c020002, 0x8c42901c, +0x1440000b, 0x0, 0x24020002, 0x3c010002, +0x10000007, 0xac229010, 0x3c020002, 0x8c429040, +0x10400003, 0x0, 0xc003d87, 0x0, 0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, -0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3c030001, -0x24635f88, 0x8c620000, 0x10400005, 0x34422000, -0x3c010001, 0xac225f7c, 0x10000003, 0xac600000, -0x3c010001, 0xac245f7c, 0x3e00008, 0x0, -0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, -0xac225f84, 0x14400067, 0x3c02ffff, 0x34421f0e, +0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3c030002, +0x24639068, 0x8c620000, 0x10400005, 0x34422000, +0x3c010002, 0xac22905c, 0x10000003, 0xac600000, +0x3c010002, 0xac24905c, 0x3e00008, 0x0, +0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010002, +0xac229064, 0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030, 0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, -0x21200, 0x3c040001, 0x8c843ecc, 0x621825, -0x331c2, 0x3c030001, 0x24633e18, 0x30828000, +0x21200, 0x3c040001, 0x8c846f9c, 0x621825, +0x331c2, 0x3c030001, 0x24636ec8, 0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2, 0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025, 0x0, @@ -8037,191 +8775,368 @@ 0x1062002c, 0x3c05000f, 0x10000037, 0x0, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, -0xaf820220, 0x3c010001, 0xac205fa4, 0x3c010001, -0x10000034, 0xac205fac, 0x8f820200, 0x34420100, +0xaf820220, 0x3c010002, 0xac209084, 0x3c010002, +0x10000034, 0xac20908c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, -0x431024, 0xaf820220, 0x24020100, 0x3c010001, -0xac225fa4, 0x3c010001, 0x10000026, 0xac205fac, +0x431024, 0xaf820220, 0x24020100, 0x3c010002, +0xac229084, 0x3c010002, 0x10000026, 0xac20908c, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220, 0x3c030001, 0x431025, 0xaf820220, -0x3c010001, 0xac205fa4, 0x3c010001, 0x10000019, -0xac235fac, 0x8f820200, 0x34420100, 0xaf820200, +0x3c010002, 0xac209084, 0x3c010002, 0x10000019, +0xac23908c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220, 0x3c030001, 0x431025, 0xaf820220, -0x24020100, 0x3c010001, 0xac225fa4, 0x3c010001, -0x1000000c, 0xac235fac, 0x34a5ffff, 0x3c040001, -0x24843c68, 0xafa30010, 0xc0029bb, 0xafa00014, -0x10000004, 0x0, 0x24020030, 0x3c010001, -0xac225f88, 0x8fbf0018, 0x3e00008, 0x27bd0020, +0x24020100, 0x3c010002, 0xac229084, 0x3c010002, +0x1000000c, 0xac23908c, 0x34a5ffff, 0x3c040001, +0x24846cb8, 0xafa30010, 0xc002b17, 0xafa00014, +0x10000004, 0x0, 0x24020030, 0x3c010002, +0xac229068, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0, 0x0, 0x0, 0x27bdffc8, -0xafb10024, 0x808821, 0xafb3002c, 0xa09821, -0xafb00020, 0xc08021, 0x3c040001, 0x24843c80, -0x3c050009, 0x3c020001, 0x8c423d88, 0x34a59001, -0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, -0xa7a0001a, 0xafb00014, 0xc0029bb, 0xafa20010, -0x24020002, 0x126200eb, 0x2e620003, 0x10400005, -0x24020001, 0x1262000a, 0x3c02fffb, 0x100000e5, -0x0, 0x24020004, 0x1262006d, 0x24020008, -0x1262006c, 0x3c02ffec, 0x100000de, 0x0, -0x3442ffff, 0x2028024, 0x119140, 0x3c010001, -0x320821, 0xac305f9c, 0x3c024000, 0x2021024, -0x10400046, 0x1023c2, 0x30840030, 0x101382, -0x3042000c, 0x3c030001, 0x24633db4, 0x431021, -0x823821, 0x3c020020, 0x2021024, 0x10400006, -0x24020100, 0x3c010001, 0x320821, 0xac225fa0, -0x10000005, 0x3c020080, 0x3c010001, 0x320821, -0xac205fa0, 0x3c020080, 0x2021024, 0x10400006, -0x111940, 0x3c020001, 0x3c010001, 0x230821, -0x10000005, 0xac225fa8, 0x111140, 0x3c010001, -0x220821, 0xac205fa8, 0x94e30000, 0x32024000, -0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018, -0x24040001, 0x94e20002, 0x24050004, 0x24e60002, -0x34420001, 0xc004166, 0xa4e20002, 0x24040001, -0x2821, 0xc004166, 0x27a60018, 0x3c020001, -0x8c423d88, 0x24110001, 0x3c010001, 0xac313d94, -0x14530004, 0x32028000, 0xc003b0b, 0x0, -0x32028000, 0x10400097, 0x0, 0xc003b0b, -0x0, 0x24020002, 0x3c010001, 0xac313d8c, -0x3c010001, 0x1000008f, 0xac223d88, 0x24040001, -0x24050004, 0x27b0001a, 0xc004166, 0x2003021, -0x24040001, 0x2821, 0xc004166, 0x2003021, -0x3c020001, 0x521021, 0x8c425f94, 0x3c040001, -0x8c843d88, 0x3c03bfff, 0x3463ffff, 0x3c010001, -0xac333d94, 0x431024, 0x3c010001, 0x320821, -0x10930076, 0xac225f94, 0x10000076, 0x0, -0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008, -0x2028025, 0x111140, 0x3c010001, 0x220821, -0xac305f98, 0x3c022000, 0x2021024, 0x10400009, -0x0, 0x3c020001, 0x8c423e14, 0x14400005, -0x24020001, 0x3c010001, 0xac223ec8, 0x10000004, -0x3c024000, 0x3c010001, 0xac203ec8, 0x3c024000, -0x2021024, 0x1440001a, 0x0, 0x3c020001, -0x8c423ec8, 0x10400005, 0x24022020, 0x3c010001, -0xac223ecc, 0x24020001, 0xaee204b8, 0x3c04bfff, -0x111940, 0x3c020001, 0x431021, 0x8c425f90, -0x3c050001, 0x8ca53d88, 0x3484ffff, 0x441024, -0x3c010001, 0x230821, 0xac225f90, 0x24020001, -0x10a20044, 0x0, 0x10000040, 0x0, -0x3c020001, 0x8c423ec8, 0x1040001c, 0x24022000, -0x3c010001, 0xac223ecc, 0x3c0300a0, 0x2031024, -0x14430005, 0x111140, 0x3402a000, 0x3c010001, -0x1000002d, 0xac223ecc, 0x3c030001, 0x621821, -0x8c635f98, 0x3c020020, 0x621024, 0x10400004, -0x24022001, 0x3c010001, 0x10000023, 0xac223ecc, -0x3c020080, 0x621024, 0x1040001f, 0x3402a001, -0x3c010001, 0x1000001c, 0xac223ecc, 0x3c020020, -0x2021024, 0x10400007, 0x111940, 0x24020100, -0x3c010001, 0x230821, 0xac225fa4, 0x10000006, -0x3c020080, 0x111140, 0x3c010001, 0x220821, -0xac205fa4, 0x3c020080, 0x2021024, 0x10400006, -0x111940, 0x3c020001, 0x3c010001, 0x230821, -0x10000005, 0xac225fac, 0x111140, 0x3c010001, -0x220821, 0xac205fac, 0x3c030001, 0x8c633d88, -0x24020001, 0x10620003, 0x0, 0xc003b0b, -0x0, 0x8fbf0030, 0x8fb3002c, 0x8fb20028, -0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0038, -0x27bdffd0, 0xafb50028, 0x80a821, 0xafb20020, -0x9021, 0xafb30024, 0x9821, 0xafb1001c, -0x8821, 0x24020002, 0xafbf002c, 0xafb00018, -0xa7a00012, 0x10a20068, 0xa7a00010, 0x2ca20003, -0x10400005, 0x24020001, 0x10a2000a, 0x158140, -0x100000ae, 0x2201021, 0x24020004, 0x10a2005e, -0x24020008, 0x10a2005d, 0x152940, 0x100000a7, -0x2201021, 0x3c030001, 0x701821, 0x8c635f9c, -0x3c024000, 0x621024, 0x14400009, 0x24040001, -0x3c027fff, 0x3442ffff, 0x628824, 0x3c010001, -0x300821, 0xac315f94, 0x10000098, 0x2201021, -0x24050001, 0xc004124, 0x27a60010, 0x24040001, -0x24050001, 0xc004124, 0x27a60010, 0x97a20010, -0x30420004, 0x10400034, 0x3c114000, 0x3c030001, -0x8c633ee0, 0x24020003, 0x10620008, 0x2c620004, -0x14400029, 0x3c028000, 0x24020004, 0x10620014, -0x24040001, 0x10000024, 0x3c028000, 0x24040001, -0x24050011, 0x27b00012, 0xc004124, 0x2003021, -0x24040001, 0x24050011, 0xc004124, 0x2003021, -0x97a30012, 0x30624000, 0x10400002, 0x3c130010, -0x3c130008, 0x3c120001, 0x10000010, 0x30628000, -0x24050014, 0x27b00012, 0xc004124, 0x2003021, -0x24040001, 0x24050014, 0xc004124, 0x2003021, -0x97a30012, 0x30621000, 0x10400002, 0x3c130010, -0x3c130008, 0x3c120001, 0x30620800, 0x54400001, -0x3c120002, 0x3c028000, 0x2221025, 0x2531825, -0x10000007, 0x438825, 0x3c110001, 0x2308821, -0x8e315f9c, 0x3c027fff, 0x3442ffff, 0x2228824, -0x151140, 0x3c010001, 0x220821, 0xac315f94, -0x1000004e, 0x2201021, 0x152940, 0x3c030001, -0x651821, 0x8c635f98, 0x3c024000, 0x621024, +0xafb20028, 0x809021, 0xafb3002c, 0xa09821, +0xafb00020, 0xc08021, 0x3c040001, 0x24846cd0, +0x3c050009, 0x3c020001, 0x8c426e18, 0x34a59001, +0x2403021, 0x2603821, 0xafbf0030, 0xafb10024, +0xa7a0001a, 0xafb00014, 0xc002b17, 0xafa20010, +0x24020002, 0x1262007f, 0x2e620003, 0x10400005, +0x24020001, 0x1262000a, 0x0, 0x1000016f, +0x0, 0x24020004, 0x126200f4, 0x24020008, +0x126200f3, 0x3c02ffec, 0x10000168, 0x0, +0x3c020001, 0x8c426e14, 0x30420002, 0x14400004, +0x128940, 0x3c02fffb, 0x3442ffff, 0x2028024, +0x3c010002, 0x310821, 0xac30907c, 0x3c024000, +0x2021024, 0x1040004a, 0x1023c2, 0x30840030, +0x101382, 0x3042001c, 0x3c030001, 0x24636e58, +0x431021, 0x823821, 0x3c020020, 0x2021024, +0x10400006, 0x24020100, 0x3c010002, 0x310821, +0xac229080, 0x10000005, 0x3c020080, 0x3c010002, +0x310821, 0xac209080, 0x3c020080, 0x2021024, +0x10400006, 0x121940, 0x3c020001, 0x3c010002, +0x230821, 0x10000005, 0xac229088, 0x121140, +0x3c010002, 0x220821, 0xac209088, 0x94e30000, +0x32024000, 0x10400003, 0xa7a30018, 0x34624000, +0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, +0x24e60002, 0x34420001, 0xc00450e, 0xa4e20002, +0x24040001, 0x2821, 0xc00450e, 0x27a60018, +0x3c020001, 0x8c426e18, 0x24110001, 0x3c010001, +0xac316e24, 0x14530004, 0x32028000, 0xc003d87, +0x0, 0x32028000, 0x1040011c, 0x0, +0xc003d87, 0x0, 0x3c030001, 0x8c636fb8, +0x24020005, 0x10620115, 0x24020002, 0x3c010001, +0xac316e1c, 0x3c010001, 0x10000110, 0xac226e18, +0x24040001, 0x24050004, 0x27b0001a, 0xc00450e, +0x2003021, 0x24040001, 0x2821, 0xc00450e, +0x2003021, 0x3c020002, 0x511021, 0x8c429074, +0x3c040001, 0x8c846e18, 0x3c03bfff, 0x3463ffff, +0x3c010001, 0xac336e24, 0x431024, 0x3c010002, +0x310821, 0x109300f7, 0xac229074, 0x100000f7, +0x0, 0x3c022000, 0x2021024, 0x10400005, +0x24020001, 0x3c010001, 0xac226f98, 0x10000004, +0x128940, 0x3c010001, 0xac206f98, 0x128940, +0x3c010002, 0x310821, 0xac309078, 0x3c024000, +0x2021024, 0x14400014, 0x0, 0x3c020001, +0x8c426f98, 0x10400006, 0x24040004, 0x24050001, +0xc004e0e, 0x24062000, 0x24020001, 0xaee204b8, +0x3c020002, 0x511021, 0x8c429070, 0x3c03bfff, +0x3463ffff, 0x431024, 0x3c010002, 0x310821, +0x100000d0, 0xac229070, 0x3c020001, 0x8c426f98, +0x10400028, 0x3c0300a0, 0x2031024, 0x5443000d, +0x3c020020, 0x3c020001, 0x8c426f9c, 0x24030100, +0x3c010002, 0x310821, 0xac239084, 0x3c030001, +0x3c010002, 0x310821, 0xac23908c, 0x10000015, +0x34420400, 0x2021024, 0x10400008, 0x24030100, +0x3c020001, 0x8c426f9c, 0x3c010002, 0x310821, +0xac239084, 0x1000000b, 0x34420800, 0x3c020080, +0x2021024, 0x1040002e, 0x3c030001, 0x3c020001, +0x8c426f9c, 0x3c010002, 0x310821, 0xac23908c, +0x34420c00, 0x3c010001, 0xac226f9c, 0x10000025, +0x24040001, 0x3c020020, 0x2021024, 0x10400006, +0x24020100, 0x3c010002, 0x310821, 0xac229084, +0x10000005, 0x3c020080, 0x3c010002, 0x310821, +0xac209084, 0x3c020080, 0x2021024, 0x10400007, +0x121940, 0x3c020001, 0x3c010002, 0x230821, +0xac22908c, 0x10000006, 0x24040001, 0x121140, +0x3c010002, 0x220821, 0xac20908c, 0x24040001, +0x2821, 0x27b0001e, 0xc0044cc, 0x2003021, +0x24040001, 0x2821, 0xc0044cc, 0x2003021, +0x24040001, 0x24050001, 0x27b0001c, 0xc0044cc, +0x2003021, 0x24040001, 0x24050001, 0xc0044cc, +0x2003021, 0x10000077, 0x0, 0x3c02ffec, +0x3442ffff, 0x2028024, 0x3c020008, 0x2028025, +0x121140, 0x3c010002, 0x220821, 0xac309078, +0x3c022000, 0x2021024, 0x10400009, 0x0, +0x3c020001, 0x8c426ec4, 0x14400005, 0x24020001, +0x3c010001, 0xac226f98, 0x10000004, 0x3c024000, +0x3c010001, 0xac206f98, 0x3c024000, 0x2021024, +0x1440001d, 0x24020e01, 0x3c030001, 0x8c636f98, +0xaf820238, 0x3c010001, 0xac206e30, 0x10600005, +0x24022020, 0x3c010001, 0xac226f9c, 0x24020001, +0xaee204b8, 0x3c04bfff, 0x121940, 0x3c020002, +0x431021, 0x8c429070, 0x3c050001, 0x8ca56e18, +0x3484ffff, 0x441024, 0x3c010002, 0x230821, +0xac229070, 0x24020001, 0x10a20044, 0x0, +0x10000040, 0x0, 0x3c020001, 0x8c426f98, +0x1040001c, 0x24022000, 0x3c010001, 0xac226f9c, +0x3c0300a0, 0x2031024, 0x14430005, 0x121140, +0x3402a000, 0x3c010001, 0x1000002d, 0xac226f9c, +0x3c030002, 0x621821, 0x8c639078, 0x3c020020, +0x621024, 0x10400004, 0x24022001, 0x3c010001, +0x10000023, 0xac226f9c, 0x3c020080, 0x621024, +0x1040001f, 0x3402a001, 0x3c010001, 0x1000001c, +0xac226f9c, 0x3c020020, 0x2021024, 0x10400007, +0x121940, 0x24020100, 0x3c010002, 0x230821, +0xac229084, 0x10000006, 0x3c020080, 0x121140, +0x3c010002, 0x220821, 0xac209084, 0x3c020080, +0x2021024, 0x10400006, 0x121940, 0x3c020001, +0x3c010002, 0x230821, 0x10000005, 0xac22908c, +0x121140, 0x3c010002, 0x220821, 0xac20908c, +0x3c030001, 0x8c636e18, 0x24020001, 0x10620003, +0x0, 0xc003d87, 0x0, 0x8fbf0030, +0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020, +0x3e00008, 0x27bd0038, 0x27bdffb8, 0xafbe003c, +0x80f021, 0xafb30034, 0x9821, 0xafb20030, +0x9021, 0xafb1002c, 0x8821, 0x24020002, +0xafbf0040, 0xafb50038, 0xafb00028, 0xa7a00020, +0xa7a00018, 0xa7a0001a, 0xa7a0001c, 0xa7a0001e, +0x10a20142, 0xa7a00022, 0x2ca20003, 0x10400005, +0x24020001, 0x10a2000a, 0x1ea940, 0x10000253, +0x2201021, 0x24020004, 0x10a20203, 0x24020008, +0x10a20202, 0x1e2940, 0x1000024c, 0x2201021, +0x3c030002, 0x751821, 0x8c63907c, 0x3c024000, +0x621024, 0x14400009, 0x24040001, 0x3c027fff, +0x3442ffff, 0x628824, 0x3c010002, 0x350821, +0xac319074, 0x1000023d, 0x2201021, 0x2821, +0xc0044cc, 0x27a60018, 0x24040001, 0x2821, +0xc0044cc, 0x27a60018, 0x24040001, 0x24050001, +0x27b0001a, 0xc0044cc, 0x2003021, 0x24040001, +0x24050001, 0xc0044cc, 0x2003021, 0x24040001, +0x24050004, 0x27b0001c, 0xc0044cc, 0x2003021, +0x24040001, 0x24050004, 0xc0044cc, 0x2003021, +0x24040001, 0x24050005, 0x27b0001e, 0xc0044cc, +0x2003021, 0x24040001, 0x24050005, 0xc0044cc, +0x2003021, 0x24040001, 0x24050009, 0xc0044cc, +0x2003021, 0x24040001, 0x24050009, 0xc0044cc, +0x2003021, 0x24040001, 0x24050001, 0xc0044cc, +0x27a60018, 0x24040001, 0x24050001, 0xc0044cc, +0x27a60018, 0x97a20018, 0x30420004, 0x104000ba, +0x3c114000, 0x3c020001, 0x8c426fb8, 0x2443ffff, +0x2c620006, 0x104000ba, 0x31080, 0x3c010001, +0x220821, 0x8c226ce8, 0x400008, 0x0, +0x24040001, 0x24050011, 0x27b00020, 0xc0044cc, +0x2003021, 0x24040001, 0x24050011, 0xc0044cc, +0x2003021, 0x97a30020, 0x30624000, 0x10400002, +0x3c120010, 0x3c120008, 0x3c130001, 0x30628000, +0x54400098, 0x3c130002, 0x10000097, 0x3c028000, +0x24040001, 0x24050014, 0x27b00020, 0xc0044cc, +0x2003021, 0x24040001, 0x24050014, 0xc0044cc, +0x2003021, 0x97a30020, 0x30621000, 0x10400002, +0x3c120010, 0x3c120008, 0x3c130001, 0x1000ffec, +0x30620800, 0x24040001, 0x24050019, 0x27b00022, +0xc0044cc, 0x2003021, 0x24040001, 0x24050019, +0xc0044cc, 0x2003021, 0x97a20022, 0x30430700, +0x24020400, 0x10620027, 0x28620401, 0x1040000e, +0x24020200, 0x1062001f, 0x28620201, 0x10400005, +0x24020100, 0x5062001e, 0x3c130001, 0x1000001e, +0x24040001, 0x24020300, 0x50620019, 0x3c130002, +0x10000019, 0x24040001, 0x24020600, 0x1062000d, +0x28620601, 0x10400005, 0x24020500, 0x5062000b, +0x3c130002, 0x10000010, 0x24040001, 0x24020700, +0x1462000d, 0x24040001, 0x3c130004, 0x1000000a, +0x3c120008, 0x10000006, 0x3c130004, 0x10000005, +0x3c120008, 0x3c130001, 0x10000002, 0x3c120008, +0x3c120010, 0x24040001, 0x24050010, 0x27b0001c, +0xc0044cc, 0x2003021, 0x24040001, 0x24050010, +0xc0044cc, 0x2003021, 0x3c020004, 0x16620010, +0x3c020001, 0x8f840054, 0x24030001, 0x24020002, +0x3c010001, 0xac236e1c, 0x3c010001, 0xac226e18, +0x3c010001, 0xac236e24, 0x3c010001, 0xac236ea4, +0x3c010001, 0xac246fa8, 0x10000041, 0x2538825, +0x16620035, 0x3c028000, 0x3c020001, 0x8c426ea0, +0x1440001e, 0x24040018, 0x2021, 0x2821, +0xc004e0e, 0x34068000, 0x8f830054, 0x8f820054, +0x2538825, 0x10000002, 0x24630032, 0x8f820054, +0x621023, 0x2c420033, 0x1440fffc, 0x0, +0x8f830054, 0x24020001, 0x3c010001, 0xac226ea0, +0x3c010001, 0xac226e1c, 0x3c010001, 0xac226e18, +0x3c010001, 0xac226e24, 0x3c010001, 0xac226ea4, +0x3c010001, 0x1000001e, 0xac236fa8, 0x2821, +0xc004e0e, 0x24060404, 0x2021, 0x2405001e, +0x27a60018, 0x24020002, 0xc00450e, 0xa7a20018, +0x2021, 0x2821, 0x27a60018, 0xc00450e, +0xa7a00018, 0x24040018, 0x24050002, 0xc004e0e, +0x24060004, 0x3c028000, 0x2221025, 0x2721825, +0x10000007, 0x438825, 0x3c110002, 0x2358821, +0x8e31907c, 0x3c027fff, 0x3442ffff, 0x2228824, +0x3c020001, 0x8c426e28, 0x1040001c, 0x0, +0x3c020001, 0x8c426f98, 0x10400002, 0x3c022000, +0x2228825, 0x1e1140, 0x3c010002, 0x220821, +0x8c229080, 0x10400003, 0x3c020020, 0x10000004, +0x2228825, 0x3c02ffdf, 0x3442ffff, 0x2228824, +0x1e1140, 0x3c010002, 0x220821, 0x8c229088, +0x10400003, 0x3c020080, 0x10000004, 0x2228825, +0x3c02ff7f, 0x3442ffff, 0x2228824, 0x3c040001, +0x24846cdc, 0x3c05000c, 0x97a60022, 0x3c070001, +0x8ce76e18, 0x34a50326, 0x1e1140, 0x3c010002, +0x220821, 0xac319074, 0xafb30010, 0xc002b17, +0xafb10014, 0x10000119, 0x2201021, 0x1ea940, +0x3c030002, 0x751821, 0x8c639078, 0x3c024000, +0x621024, 0x14400009, 0x24040001, 0x3c027fff, +0x3442ffff, 0x628824, 0x3c010002, 0x350821, +0xac319070, 0x10000109, 0x2201021, 0x2821, +0xc0044cc, 0x27a60018, 0x24040001, 0x2821, +0xc0044cc, 0x27a60018, 0x24040001, 0x24050001, +0x27b1001a, 0xc0044cc, 0x2203021, 0x24040001, +0x24050001, 0xc0044cc, 0x2203021, 0x24040001, +0x24050004, 0x27b0001c, 0xc0044cc, 0x2003021, +0x24040001, 0x24050004, 0xc0044cc, 0x2003021, +0x24040001, 0x24050005, 0x27b0001e, 0xc0044cc, +0x2003021, 0x24040001, 0x24050005, 0xc0044cc, +0x2003021, 0x24040001, 0x24050010, 0xc0044cc, +0x27a60018, 0x24040001, 0x24050010, 0xc0044cc, +0x27a60018, 0x24040001, 0x2405000a, 0xc0044cc, +0x2203021, 0x24040001, 0x2405000a, 0xc0044cc, +0x2203021, 0x24040001, 0x24050001, 0xc0044cc, +0x27a60018, 0x24040001, 0x24050001, 0xc0044cc, +0x27a60018, 0x97a20018, 0x30420004, 0x10400058, +0x3c114000, 0x3c030001, 0x8c636fac, 0x24020005, +0x14620059, 0x24040001, 0x24050019, 0x27b00022, +0xc0044cc, 0x2003021, 0x24040001, 0x24050019, +0xc0044cc, 0x2003021, 0x97a20022, 0x30430700, +0x24020400, 0x10620027, 0x28620401, 0x1040000e, +0x24020200, 0x1062001f, 0x28620201, 0x10400005, +0x24020100, 0x5062001e, 0x3c130001, 0x1000001e, +0x3c020004, 0x24020300, 0x50620019, 0x3c130002, +0x10000019, 0x3c020004, 0x24020600, 0x1062000d, +0x28620601, 0x10400005, 0x24020500, 0x5062000b, +0x3c130002, 0x10000010, 0x3c020004, 0x24020700, +0x1462000d, 0x3c020004, 0x3c130004, 0x1000000a, +0x3c120008, 0x10000006, 0x3c130004, 0x10000005, +0x3c120008, 0x3c130001, 0x10000002, 0x3c120008, +0x3c120010, 0x3c020004, 0x12620017, 0x3c028000, +0x8f820054, 0x24100001, 0x3c010001, 0xac306e1c, +0x3c010001, 0xac306e18, 0x3c010001, 0xac306e24, +0x3c010001, 0xac306ea4, 0x3c010001, 0xac226fa8, +0x3c020001, 0x16620014, 0x2728825, 0x2021, +0x2821, 0xc004e0e, 0x34068000, 0x3c010001, +0x1000000d, 0xac306ea0, 0x2221025, 0x2531825, +0x3c010001, 0xac206ea0, 0x10000007, 0x438825, +0x3c110002, 0x2358821, 0x8e319070, 0x3c027fff, +0x3442ffff, 0x2228824, 0x3c020001, 0x8c426e28, +0x10400066, 0x1e1140, 0x3c020001, 0x8c426f98, +0x10400002, 0x3c022000, 0x2228825, 0x1e1140, +0x3c010002, 0x220821, 0x8c229084, 0x10400003, +0x3c020020, 0x10000004, 0x2228825, 0x3c02ffdf, +0x3442ffff, 0x2228824, 0x1e1140, 0x3c010002, +0x220821, 0x8c22908c, 0x10400003, 0x3c020080, +0x1000004d, 0x2228825, 0x3c02ff7f, 0x3442ffff, +0x10000049, 0x2228824, 0x1e2940, 0x3c030002, +0x651821, 0x8c639078, 0x3c024000, 0x621024, 0x14400008, 0x3c027fff, 0x3442ffff, 0x628824, -0x3c010001, 0x250821, 0xac315f90, 0x1000003f, -0x2201021, 0x3c020001, 0x8c423d98, 0x10400033, -0x3c11c00c, 0x3c020001, 0x8c423e14, 0x3c04c00c, -0x34842000, 0x3c030001, 0x8c633ec8, 0x2102b, +0x3c010002, 0x250821, 0xac319070, 0x1000003f, +0x2201021, 0x3c020001, 0x8c426e28, 0x10400033, +0x3c11c00c, 0x3c020001, 0x8c426ec4, 0x3c04c00c, +0x34842000, 0x3c030001, 0x8c636f98, 0x2102b, 0x21023, 0x441024, 0x10600003, 0x518825, -0x3c022000, 0x2228825, 0x3c020001, 0x451021, -0x8c425fa4, 0x10400003, 0x3c020020, 0x10000004, +0x3c022000, 0x2228825, 0x3c020002, 0x451021, +0x8c429084, 0x10400003, 0x3c020020, 0x10000004, 0x2228825, 0x3c02ffdf, 0x3442ffff, 0x2228824, -0x151140, 0x3c010001, 0x220821, 0x8c225fac, +0x1e1140, 0x3c010002, 0x220821, 0x8c22908c, 0x10400003, 0x3c020080, 0x10000004, 0x2228825, 0x3c02ff7f, 0x3442ffff, 0x2228824, 0x3c020001, -0x8c423e00, 0x10400002, 0x3c020800, 0x2228825, -0x3c020001, 0x8c423e04, 0x10400002, 0x3c020400, -0x2228825, 0x3c020001, 0x8c423e08, 0x10400006, +0x8c426eb0, 0x10400002, 0x3c020800, 0x2228825, +0x3c020001, 0x8c426eb4, 0x10400002, 0x3c020400, +0x2228825, 0x3c020001, 0x8c426eb8, 0x10400006, 0x3c020100, 0x10000004, 0x2228825, 0x3c027fff, -0x3442ffff, 0x628824, 0x151140, 0x3c010001, -0x220821, 0xac315f90, 0x2201021, 0x8fbf002c, -0x8fb50028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, -0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffe0, -0xafb20018, 0x809021, 0xafbf001c, 0xafb10014, -0xafb00010, 0x8f840200, 0x3c030001, 0x8c633d88, -0x8f860220, 0x24020002, 0x106200a6, 0x2c620003, -0x10400005, 0x24020001, 0x1062000a, 0x121940, -0x100000a0, 0x0, 0x24020004, 0x10620053, -0x24020008, 0x10620052, 0x128940, 0x10000099, -0x0, 0x3c050001, 0xa32821, 0x8ca55f9c, -0x3c100001, 0x2038021, 0x8e105f94, 0x3c024000, -0xa21024, 0x10400038, 0x3c020008, 0x2021024, -0x10400020, 0x34840002, 0x3c020001, 0x431021, -0x8c425fa0, 0x10400005, 0x34840020, 0x34840100, -0x3c020020, 0x10000006, 0x2028025, 0x2402feff, -0x822024, 0x3c02ffdf, 0x3442ffff, 0x2028024, -0x121140, 0x3c010001, 0x220821, 0x8c225fa8, -0x10400005, 0x3c020001, 0xc23025, 0x3c020080, -0x10000016, 0x2028025, 0x3c02fffe, 0x3442ffff, -0xc23024, 0x3c02ff7f, 0x3442ffff, 0x1000000f, -0x2028024, 0x2402fedf, 0x822024, 0x3c02fffe, -0x3442ffff, 0xc23024, 0x3c02ff5f, 0x3442ffff, -0x2028024, 0x3c010001, 0x230821, 0xac205fa0, -0x3c010001, 0x230821, 0xac205fa8, 0xaf840200, -0xaf860220, 0x8f820220, 0x34420002, 0xaf820220, -0x1000000a, 0x121140, 0x3c02bfff, 0x3442ffff, -0x8f830200, 0x2028024, 0x2402fffd, 0x621824, -0xc003b0b, 0xaf830200, 0x121140, 0x3c010001, -0x220821, 0x1000004b, 0xac305f94, 0x128940, -0x3c050001, 0xb12821, 0x8ca55f98, 0x3c100001, -0x2118021, 0x8e105f90, 0x3c024000, 0xa21024, -0x14400010, 0x0, 0x3c020001, 0x8c423ec8, -0x14400005, 0x3c02bfff, 0x8f820200, 0x34420002, -0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc003b0b, -0x2028024, 0x3c010001, 0x310821, 0x10000031, -0xac305f90, 0x3c020001, 0x8c423ec8, 0x10400005, -0x3c020020, 0x3c020001, 0x8c423e14, 0x10400025, -0x3c020020, 0xa21024, 0x10400007, 0x34840020, -0x24020100, 0x3c010001, 0x310821, 0xac225fa4, -0x10000006, 0x34840100, 0x3c010001, 0x310821, -0xac205fa4, 0x2402feff, 0x822024, 0x3c020080, -0xa21024, 0x10400007, 0x121940, 0x3c020001, -0x3c010001, 0x230821, 0xac225fac, 0x10000008, -0xc23025, 0x121140, 0x3c010001, 0x220821, -0xac205fac, 0x3c02fffe, 0x3442ffff, 0xc23024, +0x3442ffff, 0x628824, 0x1e1140, 0x3c010002, +0x220821, 0xac319070, 0x2201021, 0x8fbf0040, +0x8fbe003c, 0x8fb50038, 0x8fb30034, 0x8fb20030, +0x8fb1002c, 0x8fb00028, 0x3e00008, 0x27bd0048, +0x27bdffd0, 0xafb20028, 0x809021, 0xafbf002c, +0xafb10024, 0xafb00020, 0x8f840200, 0x3c100001, +0x8e106e18, 0x8f860220, 0x24020002, 0x1202005c, +0x2e020003, 0x10400005, 0x24020001, 0x1202000a, +0x121940, 0x1000010c, 0x0, 0x24020004, +0x120200bf, 0x24020008, 0x120200be, 0x128940, +0x10000105, 0x0, 0x3c050002, 0xa32821, +0x8ca5907c, 0x3c100002, 0x2038021, 0x8e109074, +0x3c024000, 0xa21024, 0x10400038, 0x3c020008, +0x2021024, 0x10400020, 0x34840002, 0x3c020002, +0x431021, 0x8c429080, 0x10400005, 0x34840020, +0x34840100, 0x3c020020, 0x10000006, 0x2028025, +0x2402feff, 0x822024, 0x3c02ffdf, 0x3442ffff, +0x2028024, 0x121140, 0x3c010002, 0x220821, +0x8c229088, 0x10400005, 0x3c020001, 0xc23025, +0x3c020080, 0x10000016, 0x2028025, 0x3c02fffe, +0x3442ffff, 0xc23024, 0x3c02ff7f, 0x3442ffff, +0x1000000f, 0x2028024, 0x2402fedf, 0x822024, +0x3c02fffe, 0x3442ffff, 0xc23024, 0x3c02ff5f, +0x3442ffff, 0x2028024, 0x3c010002, 0x230821, +0xac209080, 0x3c010002, 0x230821, 0xac209088, 0xaf840200, 0xaf860220, 0x8f820220, 0x34420002, -0xaf820220, 0x121140, 0x3c010001, 0x220821, -0xac305f90, 0x8fbf001c, 0x8fb20018, 0x8fb10014, -0x8fb00010, 0x3e00008, 0x27bd0020, 0x1821, +0xaf820220, 0x1000000a, 0x121140, 0x3c02bfff, +0x3442ffff, 0x8f830200, 0x2028024, 0x2402fffd, +0x621824, 0xc003d87, 0xaf830200, 0x121140, +0x3c010002, 0x220821, 0x100000b7, 0xac309074, +0x3c020001, 0x8c426f98, 0x10400069, 0x24050004, +0x24040001, 0xc0044cc, 0x27a60018, 0x24040001, +0x24050005, 0xc0044cc, 0x27a6001a, 0x97a30018, +0x97a2001a, 0x3c040001, 0x24846ec8, 0x30630c00, +0x31a82, 0x30420c00, 0x21282, 0xa7a2001a, +0x21080, 0x441021, 0x431021, 0xa7a30018, +0x90480000, 0x24020001, 0x3103ffff, 0x10620029, +0x28620002, 0x10400005, 0x0, 0x10600009, +0x0, 0x1000003d, 0x0, 0x10700013, +0x24020003, 0x1062002c, 0x0, 0x10000037, +0x0, 0x8f820200, 0x2403feff, 0x431024, +0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, +0x431024, 0xaf820220, 0x3c010002, 0xac209084, +0x3c010002, 0x10000032, 0xac20908c, 0x8f820200, +0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, +0x3463ffff, 0x431024, 0xaf820220, 0x24020100, +0x3c010002, 0xac229084, 0x3c010002, 0x10000024, +0xac20908c, 0x8f820200, 0x2403feff, 0x431024, +0xaf820200, 0x8f820220, 0x3c030001, 0x431025, +0xaf820220, 0x3c010002, 0xac209084, 0x3c010002, +0x10000017, 0xac23908c, 0x8f820200, 0x34420100, +0xaf820200, 0x8f820220, 0x3c030001, 0x431025, +0xaf820220, 0x24020100, 0x3c010002, 0xac229084, +0x3c010002, 0x1000000a, 0xac23908c, 0x3c040001, +0x24846d00, 0x97a6001a, 0x97a70018, 0x3c050001, +0x34a5ffff, 0xafa80010, 0xc002b17, 0xafa00014, +0x8f820200, 0x34420002, 0x1000004b, 0xaf820200, +0x128940, 0x3c050002, 0xb12821, 0x8ca59078, +0x3c100002, 0x2118021, 0x8e109070, 0x3c024000, +0xa21024, 0x14400010, 0x0, 0x3c020001, +0x8c426f98, 0x14400005, 0x3c02bfff, 0x8f820200, +0x34420002, 0xaf820200, 0x3c02bfff, 0x3442ffff, +0xc003d87, 0x2028024, 0x3c010002, 0x310821, +0x10000031, 0xac309070, 0x3c020001, 0x8c426f98, +0x10400005, 0x3c020020, 0x3c020001, 0x8c426ec4, +0x10400025, 0x3c020020, 0xa21024, 0x10400007, +0x34840020, 0x24020100, 0x3c010002, 0x310821, +0xac229084, 0x10000006, 0x34840100, 0x3c010002, +0x310821, 0xac209084, 0x2402feff, 0x822024, +0x3c020080, 0xa21024, 0x10400007, 0x121940, +0x3c020001, 0x3c010002, 0x230821, 0xac22908c, +0x10000008, 0xc23025, 0x121140, 0x3c010002, +0x220821, 0xac20908c, 0x3c02fffe, 0x3442ffff, +0xc23024, 0xaf840200, 0xaf860220, 0x8f820220, +0x34420002, 0xaf820220, 0x121140, 0x3c010002, +0x220821, 0xac309070, 0x8fbf002c, 0x8fb20028, +0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0030, +0x0, 0x0, 0x0, 0x1821, 0x308400ff, 0x2405ffdf, 0x2406ffbf, 0x641007, 0x30420001, 0x10400004, 0x0, 0x8f820044, 0x10000003, 0x34420040, 0x8f820044, 0x461024, 0xaf820044, 0x8f820044, 0x34420020, 0xaf820044, 0x8f820044, 0x451024, 0xaf820044, 0x24630001, 0x28620008, 0x5440ffee, 0x641007, 0x3e00008, +0x0, 0x2c820008, 0x1040001b, 0x0, +0x2405ffdf, 0x2406ffbf, 0x41880, 0x3c020001, +0x24426ee0, 0x621821, 0x24640004, 0x90620000, +0x10400004, 0x0, 0x8f820044, 0x10000003, +0x34420040, 0x8f820044, 0x461024, 0xaf820044, +0x8f820044, 0x34420020, 0xaf820044, 0x8f820044, +0x451024, 0xaf820044, 0x24630001, 0x64102b, +0x1440ffee, 0x0, 0x3e00008, 0x0, 0x0, 0x0, 0x0, 0x8f8400c4, 0x8f8600e0, 0x8f8700e4, 0x2402fff8, 0xc22824, 0x10e5001a, 0x27623ff8, 0x14e20002, 0x24e80008, @@ -8232,23 +9147,9 @@ 0x8f4201fc, 0x3e00008, 0xe01021, 0xaf8800e8, 0x24420001, 0xaf4201fc, 0xaf8800e4, 0x3e00008, 0x1021, 0x3e00008, 0x0, 0x8f8300e4, -0x27623ff8, 0x10620004, 0x24620008, 0xaf8200e4, -0x3e00008, 0xaf8200e8, 0x27623000, 0xaf8200e4, -0x3e00008, 0xaf8200e8, 0x3e00008, 0x0, -0x27bdffd0, 0xafbf0028, 0x8f4c004c, 0x8f4d0048, -0xafb00024, 0x118d0026, 0x1ac4023, 0x8f490054, -0x5020001, 0x25080200, 0x189102b, 0x14400003, -0x24020200, 0x8004abe, 0x4c5023, 0x12c5023, -0x254affff, 0x10a102a, 0x54400001, 0x1005021, -0x14c8021, 0x321001ff, 0x8f45017c, 0x8f440178, -0xc1140, 0xa22821, 0x3406ecc0, 0xc23021, -0x2e63021, 0xa3940, 0x24031000, 0xafa30010, -0x8f430108, 0xafb00014, 0x8f420014, 0x60f809, -0xafa20018, 0x10400002, 0x8fbf0028, 0xaf50004c, -0x120d0003, 0x8fb00024, 0x3e00008, 0x27bd0030, -0xaf800048, 0x8f820048, 0x0, 0x1040fffc, -0x8f820060, 0x2403fdff, 0x431024, 0xaf820060, -0xaf800048, 0x3e00008, 0x27bd0030, 0x3e00008, +0x27623ff8, 0x10620004, 0x24620008, 0xaf8200e8, +0x3e00008, 0xaf8200e4, 0x27623000, 0xaf8200e8, +0x3e00008, 0xaf8200e4, 0x3e00008, 0x0, 0x0, 0x0, 0x0, 0x8f880120, 0x27624fe0, 0x8f830128, 0x15020002, 0x25090020, 0x27694800, 0x11230012, 0x8fa20010, 0xad040000, @@ -8284,7 +9185,11 @@ 0x0, 0x74785278, 0x4266537a, 0x0, 0x62664174, 0x6e4d726b, 0x0, 0x7265645a, 0x6f6e6531, 0x0, 0x70636943, 0x6f6e6600, -0x67656e43, 0x6f6e6600, 0x72636246, 0x6c616773, +0x67656e43, 0x6f6e6600, 0x2a646d61, 0x5244666c, +0x0, 0x2a50414e, 0x49432a00, 0x2e2e2f2e, +0x2e2f2e2e, 0x2f2e2e2f, 0x2e2e2f73, 0x72632f6e, +0x69632f66, 0x77322f63, 0x6f6d6d6f, 0x6e2f6677, +0x6d61696e, 0x2e630000, 0x72636246, 0x6c616773, 0x0, 0x62616452, 0x78526362, 0x0, 0x676c6f62, 0x466c6773, 0x0, 0x2b5f6469, 0x73705f6c, 0x6f6f7000, 0x2b65765f, 0x68616e64, @@ -8321,12 +9226,14 @@ 0x5f74785f, 0x636f6e73, 0x0, 0x2b685f64, 0x6f5f7570, 0x64617465, 0x5f72785f, 0x70726f64, 0x0, 0x2b636b73, 0x756d3136, 0x0, +0x2b706565, 0x6b5f6d61, 0x635f7278, 0x5f776100, 0x2b706565, 0x6b5f6d61, 0x635f7278, 0x0, 0x2b646571, 0x5f6d6163, 0x5f727800, 0x2b685f6d, 0x61635f72, 0x785f6174, 0x746e0000, 0x62616452, 0x6574537a, 0x0, 0x72784264, 0x4266537a, 0x0, 0x2b6e756c, 0x6c5f6861, 0x6e646c65, 0x72000000, 0x66774f70, 0x4661696c, 0x0, +0x2b685f75, 0x70646174, 0x655f6c65, 0x64340000, 0x2b685f75, 0x70646174, 0x655f6c65, 0x64360000, 0x2b685f75, 0x70646174, 0x655f6c65, 0x64320000, 0x696e7453, 0x74617465, 0x0, 0x2a2a696e, @@ -8369,12 +9276,12 @@ 0x0, 0x3f636d64, 0x48737453, 0x0, 0x3f636d64, 0x4d634d64, 0x0, 0x3f636d64, 0x50726f6d, 0x0, 0x3f636d64, 0x4c696e6b, -0x0, 0x3f636d64, 0x45727200, 0x80fc, -0x8878, 0x8878, 0x8800, 0x85a4, -0x884c, 0x8878, 0x81d4, 0x8238, -0x83bc, 0x8494, 0x8460, 0x8878, -0x829c, 0x8550, 0x8878, 0x8560, -0x81f8, 0x825c, 0x0, 0x0, +0x0, 0x3f636d64, 0x45727200, 0x864c, +0x8de0, 0x8de0, 0x8d68, 0x8b0c, +0x8db4, 0x8de0, 0x8724, 0x8794, +0x8924, 0x89fc, 0x89c8, 0x8de0, +0x8804, 0x8ab8, 0x8de0, 0x8ac8, +0x8748, 0x87b8, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f2e2f6e, 0x69632f66, 0x77322f63, 0x6f6d6d6f, @@ -8425,10 +9332,10 @@ 0x2e313220, 0x31393939, 0x2f30312f, 0x32302031, 0x393a3439, 0x3a353120, 0x73687561, 0x6e672045, 0x78702024, 0x0, 0x46575f56, 0x45525349, -0x4f4e3a20, 0x23312054, 0x68752041, 0x75672031, -0x32203135, 0x3a35323a, 0x32392050, 0x44542031, +0x4f4e3a20, 0x23312053, 0x61742044, 0x65632031, +0x31203136, 0x3a30353a, 0x30332050, 0x53542031, 0x39393900, 0x46575f43, 0x4f4d5049, 0x4c455f54, -0x494d453a, 0x2031353a, 0x35323a32, 0x39000000, +0x494d453a, 0x2031363a, 0x30353a30, 0x33000000, 0x46575f43, 0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, 0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465, @@ -8436,7 +9343,7 @@ 0x4f4d4149, 0x4e3a2065, 0x6e672e61, 0x6374656f, 0x6e2e636f, 0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a, 0x20676363, 0x20766572, 0x73696f6e, -0x20322e37, 0x2e320000, 0x0, 0x12030303, +0x20322e37, 0x2e320000, 0x0, 0x12040100, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f2e2f6e, 0x69632f66, 0x77322f63, 0x6f6d6d6f, @@ -8466,15 +9373,15 @@ 0x4d657674, 0x526e6746, 0x0, 0x4d516576, 0x74460000, 0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46, 0x0, 0x5173436f, 0x6e734600, -0x51725072, 0x6f644600, 0x72784672, 0x6d324c67, -0x0, 0x72784e6f, 0x53744264, 0x0, -0x72784e6f, 0x4d694264, 0x0, 0x72784e6f, -0x4a6d4264, 0x0, 0x7278436b, 0x446d6146, -0x0, 0x72785144, 0x6d457846, 0x0, -0x72785144, 0x6d614600, 0x72785144, 0x4c426446, -0x0, 0x72785144, 0x6d426446, 0x0, -0x72784372, 0x63506164, 0x0, 0x72536d51, -0x446d6146, 0x0, 0x0, 0x0, +0x51725072, 0x6f644600, 0x724d6163, 0x43686b30, +0x0, 0x72784672, 0x6d324c67, 0x0, +0x72784e6f, 0x53744264, 0x0, 0x72784e6f, +0x4d694264, 0x0, 0x72784e6f, 0x4a6d4264, +0x0, 0x7278436b, 0x446d6146, 0x0, +0x72785144, 0x6d457846, 0x0, 0x72785144, +0x6d614600, 0x72785144, 0x4c426446, 0x0, +0x72785144, 0x6d426446, 0x0, 0x72784372, +0x63506164, 0x0, 0x72536d51, 0x446d6146, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f2e2f6e, 0x69632f66, 0x77322f63, 0x6f6d6d6f, @@ -8504,30 +9411,38 @@ 0x6e495f46, 0x0, 0x5173436f, 0x6e734600, 0x51725072, 0x6f644600, 0x0, 0x0, 0x0, 0x50726f62, 0x65506879, 0x0, -0x6c6e6b41, 0x53535254, 0x0, 0xfc78, -0xfca8, 0xfcc0, 0xfcec, 0xfd18, -0xfd2c, 0xfd68, 0x10108, 0xfee8, -0xff20, 0xfe18, 0xff74, 0xff9c, -0xffd0, 0xfe5c, 0x10108, 0xfee8, -0xff20, 0xff44, 0xff74, 0xff9c, -0xffd0, 0xfffc, 0x0, 0x0, -0x0, 0x106ec, 0x107bc, 0x10894, -0x10964, 0x109c0, 0x10a9c, 0x10ac4, -0x10ba0, 0x10bc8, 0x10d70, 0x10d98, -0x10f40, 0x11138, 0x113cc, 0x112e0, -0x113cc, 0x113f8, 0x10f68, 0x11110, -0x0, 0x116fc, 0x1173c, 0x117cc, -0x11810, 0x11874, 0x11900, 0x11934, -0x119bc, 0x11a54, 0x11b24, 0x11b64, -0x11be8, 0x11c0c, 0x11d1c, 0x646f4261, +0x6c6e6b41, 0x53535254, 0x0, 0x108d0, +0x10948, 0x10968, 0x109a4, 0x10ea8, +0x109d0, 0x10a0c, 0x10f3c, 0x10c18, +0x10ac0, 0x10ad8, 0x10b1c, 0x10b44, +0x10b64, 0x10b8c, 0x10f3c, 0x10c18, +0x10c50, 0x10c68, 0x10c98, 0x10cc0, +0x10ce0, 0x10d08, 0x0, 0x10e34, +0x10e60, 0x10e84, 0x10f3c, 0x10ea8, +0x109d0, 0x10ed8, 0x0, 0x0, +0x0, 0x115ac, 0x1167c, 0x11754, +0x11824, 0x11880, 0x1195c, 0x11984, +0x11a60, 0x11a88, 0x11c30, 0x11c58, +0x11e00, 0x11ff8, 0x1228c, 0x121a0, +0x1228c, 0x122b8, 0x11e28, 0x11fd0, +0x7273745f, 0x676d6969, 0x0, 0x12348, +0x12380, 0x12468, 0x13034, 0x135fc, +0x13614, 0x13c7c, 0x13cbc, 0x13d4c, +0x13d90, 0x13df4, 0x13e80, 0x13eb4, +0x13f3c, 0x13fd4, 0x140a4, 0x140e4, +0x14168, 0x1418c, 0x1429c, 0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0, 0x73746d61, 0x634c4e4b, 0x0, +0x6765746d, 0x636c6e6b, 0x0, 0x14fb4, +0x14fb4, 0x14ce4, 0x14d34, 0x14d78, +0x14fb4, 0x7365746d, 0x61636163, 0x74000000, 0x0, 0x0 }; u32 tigon2FwData[(MAX_DATA_LEN/4) + 1] __initdata = { 0x1, 0x1, 0x1, 0xc001fc, 0x3ffc, 0xc00000, 0x416c7465, 0x6f6e2041, 0x63654e49, -0x43205600, 0x0, 0x0, 0x416c7465, +0x43205600, 0x0, 0x0, 0x0, +0x0, 0x0, 0x0, 0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242, 0x0, 0x0, 0x0, 0x1ffffc, 0x1fff7c, 0x0, 0x0, 0x0, @@ -8538,13 +9453,17 @@ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, -0x1, 0x0, 0x0, 0x1, +0x1, 0x0, 0x0, 0x0, +0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, -0x0, 0x0, 0x0, 0x0, -0x0, 0x1000000, 0x21000000, 0x12000140, -0x0, 0x0, 0x20000000, 0x120000a0, -0x0, 0x12000060, 0x12000180, 0x120001e0, -0x0, 0x0, 0x0, 0x0, +0x1, 0x0, 0x0, 0x0, +0x0, 0x0, 0x1000000, 0x21000000, +0x12000140, 0x0, 0x0, 0x20000000, +0x120000a0, 0x0, 0x12000060, 0x12000180, +0x120001e0, 0x0, 0x0, 0x0, +0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x30001, 0x1, -0x30201, 0x0, 0x0, 0x0 }; +0x30201, 0x0, 0x0, 0x1010101, +0x1010100, 0x10100, 0x1010001, 0x10001, +0x1000101, 0x101, 0x0, 0x0 }; diff -u --recursive --new-file v2.3.43/linux/drivers/net/at1700.c linux/drivers/net/at1700.c --- v2.3.43/linux/drivers/net/at1700.c Wed Aug 18 11:36:41 1999 +++ linux/drivers/net/at1700.c Fri Feb 11 08:25:33 2000 @@ -111,6 +111,7 @@ /* Information that need to be kept for each board. */ struct net_local { struct enet_statistics stats; + spinlock_t lock; unsigned char mc_filter[8]; uint jumpered:1; /* Set iff the board has jumper config. */ uint tx_started:1; /* Packets are on the Tx queue. */ @@ -148,6 +149,10 @@ #define SAPROM 20 /* The station address PROM, if no EEPROM. */ #define RESET 31 /* Write to reset some parts of the chip. */ #define AT1700_IO_EXTENT 32 + +#define TX_TIMEOUT 10 + + /* Index to functions, as function prototypes. */ extern int at1700_probe(struct net_device *dev); @@ -161,6 +166,7 @@ static int net_close(struct net_device *dev); static struct enet_statistics *net_get_stats(struct net_device *dev); static void set_rx_mode(struct net_device *dev); +static void net_tx_timeout (struct net_device *dev); #ifdef CONFIG_MCA @@ -228,6 +234,7 @@ char at1700_irqmap[8] = {3, 4, 5, 9, 10, 11, 14, 15}; unsigned int i, irq, is_fmv18x = 0, is_at1700 = 0; int slot; + struct net_local *lp; /* Resetting the chip doesn't reset the ISA interface, so don't bother. That means we have to be careful with the register values we probe for. @@ -427,21 +434,23 @@ dev->hard_start_xmit = net_send_packet; dev->get_stats = net_get_stats; dev->set_multicast_list = &set_rx_mode; + dev->tx_timeout = net_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; + + lp = (struct net_local *)dev->priv; + lp->lock = SPIN_LOCK_UNLOCKED; /* Fill in the fields of 'dev' with ethernet-generic values. */ ether_setup(dev); - { - struct net_local *lp = (struct net_local *)dev->priv; - lp->jumpered = is_fmv18x; - lp->mca_slot = slot; - /* Snarf the interrupt vector now. */ - if (request_irq(irq, &net_interrupt, 0, dev->name, dev)) { - printk (" AT1700 at %#3x is unusable due to a conflict on" - "IRQ %d.\n", ioaddr, irq); - lp->invalid_irq = 1; - return 0; - } + lp->jumpered = is_fmv18x; + lp->mca_slot = slot; + /* Snarf the interrupt vector now. */ + if (request_irq(irq, &net_interrupt, 0, dev->name, dev)) { + printk (" AT1700 at %#3x is unusable due to a conflict on" + "IRQ %d.\n", ioaddr, irq); + lp->invalid_irq = 1; + return 0; } return 0; @@ -525,86 +534,81 @@ outb(0x80, ioaddr + IOCONFIG1); } - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; } -static int -net_send_packet(struct sk_buff *skb, struct net_device *dev) +static void net_tx_timeout (struct net_device *dev) { struct net_local *lp = (struct net_local *)dev->priv; int ioaddr = dev->base_addr; - if (dev->tbusy) { - /* If we get here, some higher level has decided we are broken. - There should really be a "kick me" function call instead. */ - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 10) - return 1; - printk("%s: transmit timed out with status %04x, %s?\n", dev->name, - inw(ioaddr + STATUS), inb(ioaddr + TX_STATUS) & 0x80 - ? "IRQ conflict" : "network cable problem"); - printk("%s: timeout registers: %04x %04x %04x %04x %04x %04x %04x %04x.\n", - dev->name, inw(ioaddr + 0), inw(ioaddr + 2), inw(ioaddr + 4), - inw(ioaddr + 6), inw(ioaddr + 8), inw(ioaddr + 10), - inw(ioaddr + 12), inw(ioaddr + 14)); - lp->stats.tx_errors++; - /* ToDo: We should try to restart the adaptor... */ - outw(0xffff, ioaddr + 24); - outw(0xffff, ioaddr + TX_STATUS); - outw(0xe85a, ioaddr + CONFIG_0); - outw(0x8182, ioaddr + TX_INTR); - outb(0x00, ioaddr + TX_START); - outb(0x03, ioaddr + COL16CNTL); - dev->tbusy=0; - dev->trans_start = jiffies; - lp->tx_started = 0; - lp->tx_queue_ready = 1; - lp->rx_started = 0; - lp->tx_queue = 0; - lp->tx_queue_len = 0; - } + printk ("%s: transmit timed out with status %04x, %s?\n", dev->name, + inw (ioaddr + STATUS), inb (ioaddr + TX_STATUS) & 0x80 + ? "IRQ conflict" : "network cable problem"); + printk ("%s: timeout registers: %04x %04x %04x %04x %04x %04x %04x %04x.\n", + dev->name, inw (ioaddr + 0), inw (ioaddr + 2), inw (ioaddr + 4), + inw (ioaddr + 6), inw (ioaddr + 8), inw (ioaddr + 10), + inw (ioaddr + 12), inw (ioaddr + 14)); + lp->stats.tx_errors++; + /* ToDo: We should try to restart the adaptor... */ + outw (0xffff, ioaddr + 24); + outw (0xffff, ioaddr + TX_STATUS); + outw (0xe85a, ioaddr + CONFIG_0); + outw (0x8182, ioaddr + TX_INTR); + outb (0x00, ioaddr + TX_START); + outb (0x03, ioaddr + COL16CNTL); - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk("%s: Transmitter access conflict.\n", dev->name); - else { - short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - unsigned char *buf = skb->data; + dev->trans_start = jiffies; + + lp->tx_started = 0; + lp->tx_queue_ready = 1; + lp->rx_started = 0; + lp->tx_queue = 0; + lp->tx_queue_len = 0; - /* We may not start transmitting unless we finish transferring - a packet into the Tx queue. During executing the following - codes we possibly catch a Tx interrupt. Thus we flag off - tx_queue_ready, so that we prevent the interrupt routine - (net_interrupt) to start transmitting. */ - lp->tx_queue_ready = 0; - { - outw(length, ioaddr + DATAPORT); - outsw(ioaddr + DATAPORT, buf, (length + 1) >> 1); + netif_wake_queue(dev); +} - lp->tx_queue++; - lp->tx_queue_len += length + 2; - } - lp->tx_queue_ready = 1; - if (lp->tx_started == 0) { - /* If the Tx is idle, always trigger a transmit. */ - outb(0x80 | lp->tx_queue, ioaddr + TX_START); - lp->tx_queue = 0; - lp->tx_queue_len = 0; - dev->trans_start = jiffies; - lp->tx_started = 1; - dev->tbusy = 0; - } else if (lp->tx_queue_len < 4096 - 1502) - /* Yes, there is room for one more packet. */ - dev->tbusy = 0; +static int net_send_packet (struct sk_buff *skb, struct net_device *dev) +{ + struct net_local *lp = (struct net_local *) dev->priv; + int ioaddr = dev->base_addr; + short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + unsigned char *buf = skb->data; + + netif_stop_queue (dev); + + /* We may not start transmitting unless we finish transferring + a packet into the Tx queue. During executing the following + codes we possibly catch a Tx interrupt. Thus we flag off + tx_queue_ready, so that we prevent the interrupt routine + (net_interrupt) to start transmitting. */ + lp->tx_queue_ready = 0; + { + outw (length, ioaddr + DATAPORT); + outsw (ioaddr + DATAPORT, buf, (length + 1) >> 1); + + lp->tx_queue++; + lp->tx_queue_len += length + 2; } + lp->tx_queue_ready = 1; + + if (lp->tx_started == 0) { + /* If the Tx is idle, always trigger a transmit. */ + outb (0x80 | lp->tx_queue, ioaddr + TX_START); + lp->tx_queue = 0; + lp->tx_queue_len = 0; + dev->trans_start = jiffies; + lp->tx_started = 1; + netif_start_queue (dev); + } else if (lp->tx_queue_len < 4096 - 1502) + /* Yes, there is room for one more packet. */ + netif_start_queue (dev); dev_kfree_skb (skb); return 0; @@ -623,10 +627,12 @@ printk ("at1700_interrupt(): irq %d for unknown device.\n", irq); return; } - dev->interrupt = 1; ioaddr = dev->base_addr; lp = (struct net_local *)dev->priv; + + spin_lock (&lp->lock); + status = inw(ioaddr + TX_STATUS); outw(status, ioaddr + TX_STATUS); @@ -665,17 +671,15 @@ lp->tx_queue = 0; lp->tx_queue_len = 0; dev->trans_start = jiffies; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue (dev); } else { lp->tx_started = 0; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue (dev); } } } - dev->interrupt = 0; + spin_unlock (&lp->lock); return; } @@ -767,8 +771,7 @@ struct net_local *lp = (struct net_local *)dev->priv; int ioaddr = dev->base_addr; - dev->tbusy = 1; - dev->start = 0; + netif_stop_queue(dev); /* Set configuration register 0 to disable Tx and Rx. */ outb(0xda, ioaddr + CONFIG_0); diff -u --recursive --new-file v2.3.43/linux/drivers/net/cops.c linux/drivers/net/cops.c --- v2.3.43/linux/drivers/net/cops.c Fri Jan 7 19:13:22 2000 +++ linux/drivers/net/cops.c Fri Feb 11 13:19:57 2000 @@ -30,6 +30,7 @@ * cleanup of formatting and program * logic. Added emacs 'local-vars' * setup for Jay's brace style. + * 20000211 Alan Cox Cleaned up for softnet */ static const char *version = @@ -48,10 +49,8 @@ */ #include -#ifdef MODULE #include #include -#endif #include #include @@ -180,7 +179,7 @@ struct cops_local { - struct enet_statistics stats; + struct net_device_stats stats; int board; /* Holds what board type is. */ int nodeid; /* Set to 1 once have nodeid. */ unsigned char node_acquire; /* Node ID when acquired. */ @@ -200,6 +199,7 @@ static void cops_interrupt (int irq, void *dev_id, struct pt_regs *regs); static void cops_poll (unsigned long ltdev); +static void cops_timeout(struct net_device *dev); static void cops_rx (struct net_device *dev); static int cops_send_packet (struct sk_buff *skb, struct net_device *dev); static void set_multicast_list (struct net_device *dev); @@ -209,7 +209,7 @@ static int cops_ioctl (struct net_device *dev, struct ifreq *rq, int cmd); static int cops_close (struct net_device *dev); -static struct enet_statistics *cops_get_stats (struct net_device *dev); +static struct net_device_stats *cops_get_stats (struct net_device *dev); /* @@ -323,13 +323,15 @@ /* Fill in the fields of the device structure with LocalTalk values. */ ltalk_setup(dev); - dev->hard_start_xmit = &cops_send_packet; + dev->hard_start_xmit = cops_send_packet; + dev->tx_timeout = cops_timeout; + dev->watchdog_timeo = HZ * 2; dev->hard_header = cops_hard_header; dev->get_stats = cops_get_stats; dev->open = cops_open; dev->stop = cops_close; - dev->do_ioctl = &cops_ioctl; - dev->set_multicast_list = &set_multicast_list; + dev->do_ioctl = cops_ioctl; + dev->set_multicast_list = set_multicast_list; dev->mc_list = NULL; /* Tell the user where the card is and what mode we're in. */ @@ -424,10 +426,7 @@ cops_jumpstart(dev); /* Start the card up. */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); #ifdef MODULE MOD_INC_USE_COUNT; #endif @@ -501,8 +500,7 @@ else udelay(333333); } - dev->tbusy=0; - + netif_wake_queue(dev); return; } @@ -673,6 +671,7 @@ /* * Poll the Tangent type cards to see if we have work. */ + static void cops_poll(unsigned long ltdev) { int ioaddr, status; @@ -691,7 +690,7 @@ if(status & TANG_RX_READY) cops_rx(dev); if(status & TANG_TX_READY) - dev->tbusy = 0; + netif_wake_queue(dev); status = inb(ioaddr+TANG_CARD_STATUS); } while((++boguscount < 20) && (status&(TANG_RX_READY|TANG_TX_READY))); @@ -712,14 +711,6 @@ int ioaddr, status; int boguscount = 0; - if(dev == NULL) - { - printk(KERN_WARNING "%s: irq %d for unknown device.\n", - cardname, irq); - return; - } - dev->interrupt = 1; - ioaddr = dev->base_addr; lp = (struct cops_local *)dev->priv; @@ -730,8 +721,7 @@ status=inb(ioaddr+DAYNA_CARD_STATUS); if((status&0x03)==DAYNA_RX_REQUEST) cops_rx(dev); - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } while(++boguscount < 20); } else @@ -741,13 +731,11 @@ if(status & TANG_RX_READY) cops_rx(dev); if(status & TANG_TX_READY) - dev->tbusy = 0; + netif_wake_queue(dev); status=inb(ioaddr+TANG_CARD_STATUS); - } while((++boguscount < 20) && - (status&(TANG_RX_READY|TANG_TX_READY))); + } while((++boguscount < 20) && (status&(TANG_RX_READY|TANG_TX_READY))); } - dev->interrupt = 0; return; } @@ -762,7 +750,10 @@ struct cops_local *lp = (struct cops_local *)dev->priv; int ioaddr = dev->base_addr; int boguscount = 0; + unsigned long flags; + + save_flags(flags); cli(); /* Disable interrupts. */ if(lp->board==DAYNA) @@ -798,7 +789,7 @@ skb = dev_alloc_skb(pkt_len); if(skb == NULL) { - printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", + printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); lp->stats.rx_dropped++; while(pkt_len--) /* Discard packet */ @@ -814,12 +805,12 @@ if(lp->board==DAYNA) outb(1, ioaddr+DAYNA_INT_CARD); /* Interrupt the card */ - sti(); /* Restore interrupts. */ + restore_flags(flags); /* Restore interrupts. */ /* Check for bad response length */ if(pkt_len < 0 || pkt_len > MAX_LLAP_SIZE) { - printk(KERN_NOTICE "%s: Bad packet length of %d bytes.\n", + printk(KERN_WARNING "%s: Bad packet length of %d bytes.\n", dev->name, pkt_len); lp->stats.tx_errors++; kfree_skb(skb); @@ -837,7 +828,7 @@ /* One last check to make sure we have a good packet. */ if(rsp_type != LAP_RESPONSE) { - printk("%s: Bad packet type %d.\n", dev->name, rsp_type); + printk(KERN_WARNING "%s: Bad packet type %d.\n", dev->name, rsp_type); lp->stats.tx_errors++; kfree_skb(skb); return; @@ -857,79 +848,72 @@ return; } +static void cops_timeout(struct net_device *dev) +{ + struct cops_local *lp = (struct cops_local *)dev->priv; + int ioaddr = dev->base_addr; + + lp->stats.tx_errors++; + if(lp->board==TANGENT) + { + if((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0) + printk(KERN_WARNING "%s: No TX complete interrupt.\n", dev->name); + } + printk(KERN_WARNING "%s: Transmit timed out.\n", dev->name); + cops_jumpstart(dev); /* Restart the card. */ + dev->trans_start = jiffies; + netif_wake_queue(dev); +} + + /* * Make the card transmit a LocalTalk packet. */ + static int cops_send_packet(struct sk_buff *skb, struct net_device *dev) { struct cops_local *lp = (struct cops_local *)dev->priv; int ioaddr = dev->base_addr; - - if(dev->tbusy) - { - /* - * If we get here, some higher level has decided we are broken. - * There should really be a "kick me" function call instead. - */ - int tickssofar = jiffies - dev->trans_start; - if(tickssofar < 5) - return 1; - lp->stats.tx_errors++; - if(lp->board==TANGENT) - { - if((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0) - printk(KERN_WARNING "%s: No TX complete interrupt.\n", dev->name); - } - printk(KERN_WARNING "%s: Transmit timed out.\n", dev->name); - cops_jumpstart(dev); /* Restart the card. */ - dev->tbusy=0; - dev->trans_start = jiffies; - } + unsigned long flags; /* - * Block a timer-based transmit from overlapping. This could better be - * done with atomic_swap(1, dev->tbusy), but set_bit() works as well. + * Block a timer-based transmit from overlapping. */ - if(test_and_set_bit(0, (void*) &dev->tbusy) != 0) - printk(KERN_WARNING "%s: Transmitter access conflict.\n", - dev->name); - else - { - cli(); /* Disable interrupts. */ - if(lp->board == DAYNA) /* Wait for adapter transmit buffer. */ - while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0); - if(lp->board == TANGENT) /* Wait for adapter transmit buffer. */ - while((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0); + + netif_stop_queue(dev); - /* Output IO length. */ - outb(skb->len, ioaddr); - if(lp->board == DAYNA) - outb(skb->len >> 8, ioaddr); - else - outb((skb->len >> 8)&0x0FF, ioaddr); + save_flags(flags); + cli(); /* Disable interrupts. */ + if(lp->board == DAYNA) /* Wait for adapter transmit buffer. */ + while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0); + if(lp->board == TANGENT) /* Wait for adapter transmit buffer. */ + while((inb(ioaddr+TANG_CARD_STATUS)&TANG_TX_READY)==0); - /* Output IO code. */ - outb(LAP_WRITE, ioaddr); + /* Output IO length. */ + outb(skb->len, ioaddr); + if(lp->board == DAYNA) + outb(skb->len >> 8, ioaddr); + else + outb((skb->len >> 8)&0x0FF, ioaddr); - if(lp->board == DAYNA) /* Check the transmit buffer again. */ - while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0); + /* Output IO code. */ + outb(LAP_WRITE, ioaddr); - outsb(ioaddr, skb->data, skb->len); /* Send out the data. */ + if(lp->board == DAYNA) /* Check the transmit buffer again. */ + while((inb(ioaddr+DAYNA_CARD_STATUS)&DAYNA_TX_READY)==0); - if(lp->board==DAYNA) /* Dayna requires you kick the card */ - outb(1, ioaddr+DAYNA_INT_CARD); + outsb(ioaddr, skb->data, skb->len); /* Send out the data. */ - sti(); /* Restore interrupts. */ + if(lp->board==DAYNA) /* Dayna requires you kick the card */ + outb(1, ioaddr+DAYNA_INT_CARD); - /* Done sending packet, update counters and cleanup. */ - lp->stats.tx_packets++; - lp->stats.tx_bytes += skb->len; - dev->trans_start = jiffies; - } + restore_flags(flags); /* Restore interrupts. */ + /* Done sending packet, update counters and cleanup. */ + lp->stats.tx_packets++; + lp->stats.tx_bytes += skb->len; + dev->trans_start = jiffies; dev_kfree_skb (skb); - dev->tbusy = 0; - return 0; } @@ -1005,9 +989,7 @@ if(lp->board==TANGENT && dev->irq==0) del_timer(&cops_timer); - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); #ifdef MODULE MOD_DEC_USE_COUNT; #endif @@ -1019,7 +1001,7 @@ * Get the current statistics. * This may be called with the card open or closed. */ -static struct enet_statistics *cops_get_stats(struct net_device *dev) +static struct net_device_stats *cops_get_stats(struct net_device *dev) { struct cops_local *lp = (struct cops_local *)dev->priv; return &lp->stats; diff -u --recursive --new-file v2.3.43/linux/drivers/net/cs89x0.c linux/drivers/net/cs89x0.c --- v2.3.43/linux/drivers/net/cs89x0.c Thu Aug 26 13:05:38 1999 +++ linux/drivers/net/cs89x0.c Thu Feb 10 14:54:12 2000 @@ -120,6 +120,7 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev); static void net_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void set_multicast_list(struct net_device *dev); +static void net_timeout(struct net_device *dev); static void net_rx(struct net_device *dev); static int net_close(struct net_device *dev); static struct net_device_stats *net_get_stats(struct net_device *dev); @@ -139,14 +140,8 @@ If dev->base_addr == 2, allocate space for the device and return success (detachable devices only). */ -#ifdef HAVE_DEVLIST -/* Support for a alternate probe manager, which will eliminate the - boilerplate below. */ -struct netdev_entry netcard_drv = -{"netcard", cs89x0_probe1, NETCARD_IO_EXTENT, netcard_portlist}; -#else -int __init -cs89x0_probe(struct net_device *dev) + +int __init cs89x0_probe(struct net_device *dev) { int i; int base_addr = dev ? dev->base_addr : 0; @@ -166,37 +161,31 @@ printk("cs89x0: no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n"); return ENODEV; } -#endif -static int inline -readreg(struct net_device *dev, int portno) +extern int inline readreg(struct net_device *dev, int portno) { outw(portno, dev->base_addr + ADD_PORT); return inw(dev->base_addr + DATA_PORT); } -static void inline -writereg(struct net_device *dev, int portno, int value) +extern void inline writereg(struct net_device *dev, int portno, int value) { outw(portno, dev->base_addr + ADD_PORT); outw(value, dev->base_addr + DATA_PORT); } -static int inline -readword(struct net_device *dev, int portno) +extern int inline readword(struct net_device *dev, int portno) { return inw(dev->base_addr + portno); } -static void inline -writeword(struct net_device *dev, int portno, int value) +extern void inline writeword(struct net_device *dev, int portno, int value) { outw(value, dev->base_addr + portno); } -static int __init -wait_eeprom_ready(struct net_device *dev) +static int __init wait_eeprom_ready(struct net_device *dev) { int timeout = jiffies; /* check to see if the EEPROM is ready, a timeout is used - @@ -208,8 +197,7 @@ return 0; } -static int __init -get_eeprom_data(struct net_device *dev, int off, int len, int *buffer) +static int __init get_eeprom_data(struct net_device *dev, int off, int len, int *buffer) { int i; @@ -226,8 +214,7 @@ return 0; } -static int __init -get_eeprom_cksum(int off, int len, int *buffer) +static int __init get_eeprom_cksum(int off, int len, int *buffer) { int i, cksum; @@ -378,10 +365,12 @@ dev->open = net_open; dev->stop = net_close; - dev->hard_start_xmit = net_send_packet; - dev->get_stats = net_get_stats; - dev->set_multicast_list = &set_multicast_list; - dev->set_mac_address = &set_mac_address; + dev->tx_timeout = net_timeout; + dev->watchdog_timeo = HZ; + dev->hard_start_xmit = net_send_packet; + dev->get_stats = net_get_stats; + dev->set_multicast_list = set_multicast_list; + dev->set_mac_address = set_mac_address; /* Fill in the fields of the device structure with ethernet values. */ ether_setup(dev); @@ -720,85 +709,69 @@ /* now that we've got our act together, enable everything */ writereg(dev, PP_BusCTL, ENABLE_IRQ ); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; MOD_INC_USE_COUNT; + netif_start_queue(dev); return 0; } -static int -net_send_packet(struct sk_buff *skb, struct net_device *dev) +static void net_timeout(struct net_device *dev) { - if (dev->tbusy) { - /* If we get here, some higher level has decided we are broken. - There should really be a "kick me" function call instead. */ - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; - if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name, - tx_done(dev) ? "IRQ conflict ?" : "network cable problem"); - /* Try to restart the adaptor. */ - dev->tbusy=0; - dev->trans_start = jiffies; - } - - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk("%s: Transmitter access conflict.\n", dev->name); - else { - struct net_local *lp = (struct net_local *)dev->priv; - short ioaddr = dev->base_addr; - unsigned long flags; - - if (net_debug > 3)printk("%s: sent %d byte packet of type %x\n", dev->name, skb->len, (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]); - - /* keep the upload from being interrupted, since we - ask the chip to start transmitting before the - whole packet has been completely uploaded. */ - save_flags(flags); - cli(); - - /* initiate a transmit sequence */ - outw(lp->send_cmd, ioaddr + TX_CMD_PORT); - outw(skb->len, ioaddr + TX_LEN_PORT); - - /* Test to see if the chip has allocated memory for the packet */ - if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) { - /* Gasp! It hasn't. But that shouldn't happen since - we're waiting for TxOk, so return 1 and requeue this packet. */ - restore_flags(flags); - return 1; - } + /* If we get here, some higher level has decided we are broken. + There should really be a "kick me" function call instead. */ + if (net_debug > 0) printk("%s: transmit timed out, %s?\n", dev->name, + tx_done(dev) ? "IRQ conflict ?" : "network cable problem"); + /* Try to restart the adaptor. */ + netif_wake_queue(dev); +} + +static int net_send_packet(struct sk_buff *skb, struct net_device *dev) +{ + struct net_local *lp = (struct net_local *)dev->priv; + short ioaddr = dev->base_addr; + unsigned long flags; + + if (net_debug > 3) + printk("%s: sent %d byte packet of type %x\n", dev->name, skb->len, (skb->data[ETH_ALEN+ETH_ALEN] << 8) | skb->data[ETH_ALEN+ETH_ALEN+1]); - /* Write the contents of the packet */ - outsw(ioaddr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1); + /* keep the upload from being interrupted, since we + ask the chip to start transmitting before the + whole packet has been completely uploaded. */ + + save_flags(flags); + cli(); + netif_stop_queue(dev); + + /* initiate a transmit sequence */ + outw(lp->send_cmd, ioaddr + TX_CMD_PORT); + outw(skb->len, ioaddr + TX_LEN_PORT); + /* Test to see if the chip has allocated memory for the packet */ + if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) { + /* Gasp! It hasn't. But that shouldn't happen since + we're waiting for TxOk, so return 1 and requeue this packet. */ restore_flags(flags); - dev->trans_start = jiffies; + return 1; } - dev_kfree_skb (skb); + /* Write the contents of the packet */ + outsw(ioaddr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1); + restore_flags(flags); + dev->trans_start = jiffies; + dev_kfree_skb (skb); + netif_wake_queue(dev); + return 0; } /* The typical workload of the driver: Handle the network interface interrupts. */ + static void net_interrupt(int irq, void *dev_id, struct pt_regs * regs) { struct net_device *dev = dev_id; struct net_local *lp; int ioaddr, status; - if (dev == NULL) { - printk ("net_interrupt(): irq %d for unknown device.\n", irq); - return; - } - if (dev->interrupt) - printk("%s: Re-entering the interrupt handler.\n", dev->name); - dev->interrupt = 1; - ioaddr = dev->base_addr; lp = (struct net_local *)dev->priv; @@ -818,8 +791,7 @@ break; case ISQ_TRANSMITTER_EVENT: lp->stats.tx_packets++; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); /* Inform upper layers. */ if ((status & TX_OK) == 0) lp->stats.tx_errors++; if (status & TX_LOST_CRS) lp->stats.tx_carrier_errors++; if (status & TX_SQE_ERROR) lp->stats.tx_heartbeat_errors++; @@ -833,8 +805,7 @@ That shouldn't happen since we only ever load one packet. Shrug. Do the right thing anyway. */ - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); /* Inform upper layers. */ } if (status & TX_UNDERRUN) { if (net_debug > 0) printk("%s: transmit underrun\n", dev->name); @@ -846,8 +817,7 @@ avoids having to wait for the upper layers to timeout on us, in the event of a tx underrun */ - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); /* Inform upper layers. */ } break; case ISQ_RX_MISS_EVENT: @@ -858,8 +828,6 @@ break; } } - dev->interrupt = 0; - return; } /* We have a good packet(s), get it/them out of the buffers. */ @@ -913,14 +881,13 @@ static int net_close(struct net_device *dev) { - + netif_stop_queue(dev); + writereg(dev, PP_RxCFG, 0); writereg(dev, PP_TxCFG, 0); writereg(dev, PP_BufCFG, 0); writereg(dev, PP_BusCTL, 0); - dev->start = 0; - free_irq(dev->irq, dev); /* Update the statistics here. */ @@ -974,7 +941,7 @@ static int set_mac_address(struct net_device *dev, void *addr) { int i; - if (dev->start) + if (test_bit(LINK_STATE_START, &dev->state)) return -EBUSY; printk("%s: Setting MAC address to ", dev->name); for (i = 0; i < 6; i++) diff -u --recursive --new-file v2.3.43/linux/drivers/net/de4x5.c linux/drivers/net/de4x5.c --- v2.3.43/linux/drivers/net/de4x5.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/de4x5.c Fri Feb 11 16:38:27 2000 @@ -458,6 +458,9 @@ #include #include #include +#ifdef CONFIG_PPC +#include +#endif /* CONFIG_PPC */ #include #include @@ -4186,20 +4189,24 @@ /* If possible, try to fix a broken card - SMC only so far */ srom_repair(dev, broken); -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC /* ** If the address starts with 00 a0, we have to bit-reverse ** each byte of the address. */ - if (dev->dev_addr[0] == 0 && dev->dev_addr[1] == 0xa0) { - for (i = 0; i < ETH_ALEN; ++i) { - int x = dev->dev_addr[i]; - x = ((x & 0xf) << 4) + ((x & 0xf0) >> 4); - x = ((x & 0x33) << 2) + ((x & 0xcc) >> 2); - dev->dev_addr[i] = ((x & 0x55) << 1) + ((x & 0xaa) >> 1); - } + if ( (ppc_md.ppc_machine & _MACH_Pmac) && + (dev->dev_addr[0] == 0) && + (dev->dev_addr[1] == 0xa0) ) + { + for (i = 0; i < ETH_ALEN; ++i) + { + int x = dev->dev_addr[i]; + x = ((x & 0xf) << 4) + ((x & 0xf0) >> 4); + x = ((x & 0x33) << 2) + ((x & 0xcc) >> 2); + dev->dev_addr[i] = ((x & 0x55) << 1) + ((x & 0xaa) >> 1); + } } -#endif /* CONFIG_PMAC */ +#endif /* CONFIG_PPC */ /* Test for a bad enet address */ status = test_bad_enet(dev, status); diff -u --recursive --new-file v2.3.43/linux/drivers/net/de600.c linux/drivers/net/de600.c --- v2.3.43/linux/drivers/net/de600.c Wed Aug 18 11:36:41 1999 +++ linux/drivers/net/de600.c Fri Feb 11 13:19:57 2000 @@ -348,7 +348,6 @@ } MOD_INC_USE_COUNT; - dev->start = 1; if (adapter_init(dev)) { return 1; } @@ -369,9 +368,8 @@ de600_put_command(0); select_prn(); - if (dev->start) { + if (test_bit(LINK_STATE_START, &dev->state)) { /* perhaps not needed? */ free_irq(DE600_IRQ, dev); - dev->start = 0; MOD_DEC_USE_COUNT; } return 0; @@ -400,6 +398,7 @@ static int de600_start_xmit(struct sk_buff *skb, struct net_device *dev) { + unsigned long flags; int transmit_from; int len; int tickssofar; @@ -429,6 +428,7 @@ if ((len = skb->len) < RUNT) len = RUNT; + save_flags(flags); cli(); select_nic(); tx_fifo[tx_fifo_in] = transmit_from = tx_page_adr(tx_fifo_in) - len; @@ -440,7 +440,7 @@ de600_read_byte(READ_DATA, dev); if (was_down || (de600_read_byte(READ_DATA, dev) != 0xde)) { if (adapter_init(dev)) { - sti(); + restore_flags(flags); return 1; } } @@ -452,17 +452,20 @@ if (free_tx_pages-- == TX_PAGES) { /* No transmission going on */ dev->trans_start = jiffies; - dev->tbusy = 0; /* allow more packets into adapter */ + netif_start_queue(dev); /* allow more packets into adapter */ /* Send page and generate a faked interrupt */ de600_setup_address(transmit_from, TX_ADDR); de600_put_command(TX_ENABLE); } else { - dev->tbusy = !free_tx_pages; + if (free_tx_pages) + netif_start_queue(dev); + else + netif_stop_queue(dev); select_prn(); } - sti(); /* interrupts back on */ + restore_flags(flags); #ifdef FAKE_SMALL_MAX /* This will "patch" the socket TCP proto at an early moment */ @@ -489,12 +492,11 @@ int boguscount = 0; /* This might just as well be deleted now, no crummy drivers present :-) */ - if ((dev == NULL) || (dev->start == 0) || (DE600_IRQ != irq)) { + if ((dev == NULL) || (DE600_IRQ != irq)) { printk("%s: bogus interrupt %d\n", dev?dev->name:"DE-600", irq); return; } - dev->interrupt = 1; select_nic(); irq_status = de600_read_status(dev); @@ -521,13 +523,11 @@ */ /* Enable adapter interrupts */ - dev->interrupt = 0; select_prn(); if (retrig) trigger_interrupt(dev); - sti(); return; } @@ -538,7 +538,6 @@ * Returns 1 if tx still not done */ - mark_bh(NET_BH); /* Check if current transmission is done yet */ if (irq_status & TX_BUSY) return 1; /* tx not done, try again */ @@ -549,7 +548,7 @@ tx_fifo_out = (tx_fifo_out + 1) % TX_PAGES; ++free_tx_pages; ((struct net_device_stats *)(dev->priv))->tx_packets++; - dev->tbusy = 0; + netif_wake_queue(dev); } /* More to send, or resend last packet? */ @@ -571,12 +570,15 @@ de600_rx_intr(struct net_device *dev) { struct sk_buff *skb; + unsigned long flags; int i; int read_from; int size; register unsigned char *buffer; + save_flags(flags); cli(); + /* Get size of received packet */ size = de600_read_byte(RX_LEN, dev); /* low byte */ size += (de600_read_byte(RX_LEN, dev) << 8); /* high byte */ @@ -586,7 +588,8 @@ read_from = rx_page_adr(); next_rx_page(); de600_put_command(RX_ENABLE); - sti(); + + restore_flags(flags); if ((size < 32) || (size > 1535)) { printk("%s: Bogus packet size %d.\n", dev->name, size); @@ -596,7 +599,7 @@ } skb = dev_alloc_skb(size+2); - sti(); + restore_flags(flags); if (skb == NULL) { printk("%s: Couldn't allocate a sk_buff of size %d.\n", dev->name, size); @@ -738,7 +741,7 @@ de600_close(dev); #endif /* SHUTDOWN_WHEN_LOST */ was_down = 1; - dev->tbusy = 1; /* Transmit busy... */ + netif_stop_queue(dev); /* Transmit busy... */ restore_flags(flags); return 1; /* failed */ } @@ -748,8 +751,7 @@ was_down = 0; } - dev->tbusy = 0; /* Transmit busy... */ - dev->interrupt = 0; + netif_start_queue(dev); tx_fifo_in = 0; tx_fifo_out = 0; free_tx_pages = TX_PAGES; diff -u --recursive --new-file v2.3.43/linux/drivers/net/de620.c linux/drivers/net/de620.c --- v2.3.43/linux/drivers/net/de620.c Wed Aug 18 11:36:41 1999 +++ linux/drivers/net/de620.c Thu Feb 10 14:54:12 2000 @@ -435,19 +435,18 @@ * there is a non-reboot way to recover if something goes wrong. * */ -static int -de620_open(struct net_device *dev) +static int de620_open(struct net_device *dev) { if (request_irq(dev->irq, de620_interrupt, 0, "de620", dev)) { - printk ("%s: unable to get IRQ %d\n", dev->name, dev->irq); + printk (KERN_ERR "%s: unable to get IRQ %d\n", dev->name, dev->irq); return 1; } - MOD_INC_USE_COUNT; - if (adapter_init(dev)) { + if (adapter_init(dev)) return 1; - } - dev->start = 1; + + MOD_INC_USE_COUNT; + netif_start_queue(dev); return 0; } @@ -456,15 +455,13 @@ * The inverse routine to de620_open(). * */ -static int -de620_close(struct net_device *dev) + +static int de620_close(struct net_device *dev) { + netif_stop_queue(dev); /* disable recv */ de620_set_register(dev, W_TCR, RXOFF); - free_irq(dev->irq, dev); - - dev->start = 0; MOD_DEC_USE_COUNT; return 0; } @@ -506,38 +503,37 @@ } /******************************************************* + * + * Handle timeouts on transmit + */ + +static void de620_timeout(struct net_device *dev) +{ + printk("%s: transmit timed out, %s?\n", + dev->name, + "network cable problem" + ); + /* Restart the adapter. */ + if (!adapter_init(dev)) /* maybe close it */ + netif_wake_queue(dev); +} + +/******************************************************* * * Copy a buffer to the adapter transmit page memory. * Start sending. */ -static int -de620_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int de620_start_xmit(struct sk_buff *skb, struct net_device *dev) { unsigned long flags; int len; - int tickssofar; byte *buffer = skb->data; byte using_txbuf; using_txbuf = de620_tx_buffs(dev); /* Peek at the adapter */ - dev->tbusy = (using_txbuf == (TXBF0 | TXBF1)); /* Boolean! */ - - if (dev->tbusy) { /* Do timeouts, to avoid hangs. */ - tickssofar = jiffies - dev->trans_start; - - if (tickssofar < 5) - return 1; - - /* else */ - printk("%s: transmit timed out (%d), %s?\n", - dev->name, - tickssofar, - "network cable problem" - ); - /* Restart the adapter. */ - if (adapter_init(dev)) /* maybe close it */ - return 1; - } + + netif_stop_queue(dev); + if ((len = skb->len) < RUNT) len = RUNT; @@ -565,7 +561,7 @@ break; case (TXBF0 | TXBF1): /* NONE!!! */ - printk("de620: Ouch! No tx-buffer available!\n"); + printk(KERN_WARNING "%s: No tx-buffer available!\n", dev->name); restore_flags(flags); return 1; break; @@ -573,14 +569,12 @@ de620_write_block(dev, buffer, len); dev->trans_start = jiffies; - dev->tbusy = (using_txbuf == (TXBF0 | TXBF1)); /* Boolean! */ + if(!(using_txbuf == (TXBF0 | TXBF1))) + netif_wake_queue(dev); ((struct net_device_stats *)(dev->priv))->tx_packets++; - restore_flags(flags); /* interrupts maybe back on */ - dev_kfree_skb (skb); - return 0; } @@ -589,8 +583,7 @@ * Handle the network interface interrupts. * */ -static void -de620_interrupt(int irq_in, void *dev_id, struct pt_regs *regs) +static void de620_interrupt(int irq_in, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; byte irq_status; @@ -603,9 +596,6 @@ return; } - cli(); - dev->interrupt = 1; - /* Read the status register (_not_ the status port) */ irq_status = de620_get_register(dev, R_STS); @@ -619,11 +609,8 @@ while (again && (++bogus_count < 100)); } - dev->tbusy = (de620_tx_buffs(dev) == (TXBF0 | TXBF1)); /* Boolean! */ - - dev->interrupt = 0; - sti(); - return; + if(de620_tx_buffs(dev) != (TXBF0 | TXBF1)) + netif_wake_queue(dev); } /************************************** @@ -633,8 +620,7 @@ * Send it "upstairs" * */ -static int -de620_rx_intr(struct net_device *dev) +static int de620_rx_intr(struct net_device *dev) { struct header_buf { byte status; @@ -663,9 +649,10 @@ pagelink = header_buf.Rx_NextPage; if ((pagelink < first_rx_page) || (last_rx_page < pagelink)) { /* Ouch... Forget it! Skip all and start afresh... */ - printk("%s: Ring overrun? Restoring...\n", dev->name); + printk(KERN_WARNING "%s: Ring overrun? Restoring...\n", dev->name); /* You win some, you lose some. And sometimes plenty... */ adapter_init(dev); + netif_wake_queue(dev); ((struct net_device_stats *)(dev->priv))->rx_over_errors++; return 0; } @@ -682,7 +669,7 @@ /* Is the _computed_ next page number equal to what the adapter says? */ if (pagelink != header_buf.Rx_NextPage) { /* Naah, we'll skip this packet. Probably bogus data as well */ - printk("%s: Page link out of sync! Restoring...\n", dev->name); + printk(KERN_WARNING "%s: Page link out of sync! Restoring...\n", dev->name); next_rx_page = header_buf.Rx_NextPage; /* at least a try... */ de620_send_command(dev, W_DUMMY); de620_set_register(dev, W_NPRF, next_rx_page); @@ -693,12 +680,12 @@ size = header_buf.Rx_ByteCount - 4; if ((size < RUNT) || (GIANT < size)) { - printk("%s: Illegal packet size: %d!\n", dev->name, size); + printk(KERN_WARNING "%s: Illegal packet size: %d!\n", dev->name, size); } else { /* Good packet? */ skb = dev_alloc_skb(size+2); if (skb == NULL) { /* Yeah, but no place to put it... */ - printk("%s: Couldn't allocate a sk_buff of size %d.\n", + printk(KERN_WARNING "%s: Couldn't allocate a sk_buff of size %d.\n", dev->name, size); ((struct net_device_stats *)(dev->priv))->rx_dropped++; } @@ -732,8 +719,7 @@ * Reset the adapter to a known state * */ -static int -adapter_init(struct net_device *dev) +static int adapter_init(struct net_device *dev) { int i; static int was_down = 0; @@ -787,11 +773,11 @@ /* ignore: EEDI RXGOOD COLS LNKS*/ if (((i = de620_get_register(dev, R_STS)) & CHECK_MASK) != CHECK_OK) { - printk("Something has happened to the DE-620! Please check it" + printk(KERN_ERR "%s: Something has happened to the DE-620! Please check it" #ifdef SHUTDOWN_WHEN_LOST " and do a new ifconfig" #endif - "! (%02x)\n", i); + "! (%02x)\n", dev->name, i); #ifdef SHUTDOWN_WHEN_LOST /* Goodbye, cruel world... */ dev->flags &= ~IFF_UP; @@ -801,7 +787,7 @@ return 1; /* failed */ } if (was_down) { - printk("Thanks, I feel much better now!\n"); + printk(KERN_WARNING "%s: Thanks, I feel much better now!\n", dev->name); was_down = 0; } @@ -820,8 +806,7 @@ * * Check if there is a DE-620 connected */ -int __init -de620_probe(struct net_device *dev) +int __init de620_probe(struct net_device *dev) { static struct net_device_stats de620_netstats; int i; @@ -837,7 +822,7 @@ if (de620_debug) printk(version); - printk("D-Link DE-620 pocket adapter"); + printk(KERN_INFO "D-Link DE-620 pocket adapter"); /* Initially, configure basic nibble mode, so we can read the EEPROM */ NIC_Cmd = DEF_NIC_CMD; @@ -880,11 +865,14 @@ dev->priv = &de620_netstats; memset(dev->priv, 0, sizeof(struct net_device_stats)); - dev->get_stats = get_stats; - dev->open = de620_open; - dev->stop = de620_close; - dev->hard_start_xmit = &de620_start_xmit; - dev->set_multicast_list = &de620_set_multicast_list; + dev->get_stats = get_stats; + dev->open = de620_open; + dev->stop = de620_close; + dev->hard_start_xmit = de620_start_xmit; + dev->tx_timeout = de620_timeout; + dev->watchdog_timeo = HZ*2; + dev->set_multicast_list = de620_set_multicast_list; + /* base_addr and irq are already set, see above! */ ether_setup(dev); @@ -913,8 +901,7 @@ */ #define sendit(dev,data) de620_set_register(dev, W_EIP, data | EIPRegister); -static unsigned short __init -ReadAWord(struct net_device *dev, int from) +static unsigned short __init ReadAWord(struct net_device *dev, int from) { unsigned short data; int nbits; @@ -956,8 +943,7 @@ return data; } -static int __init -read_eeprom(struct net_device *dev) +static int __init read_eeprom(struct net_device *dev) { unsigned short wrd; @@ -1003,16 +989,14 @@ static struct net_device de620_dev = { nullname, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, de620_probe }; -int -init_module(void) +int init_module(void) { if (register_netdev(&de620_dev) != 0) return -EIO; return 0; } -void -cleanup_module(void) +void cleanup_module(void) { unregister_netdev(&de620_dev); release_region(de620_dev.base_addr, 3); diff -u --recursive --new-file v2.3.43/linux/drivers/net/depca.c linux/drivers/net/depca.c --- v2.3.43/linux/drivers/net/depca.c Wed Aug 18 11:36:41 1999 +++ linux/drivers/net/depca.c Fri Feb 11 08:25:33 2000 @@ -270,6 +270,8 @@ #define DEPCA_NDA 0xffe0 /* No Device Address */ +#define TX_TIMEOUT (1*HZ) + /* ** Ethernet PROM defines */ @@ -387,6 +389,7 @@ int rx_new, tx_new; /* The next free ring entry */ int rx_old, tx_old; /* The ring entries to be free()ed. */ struct net_device_stats stats; + spinlock_t lock; struct { /* Private stats counters */ u32 bins[DEPCA_PKT_STAT_SZ]; u32 unicast; @@ -421,6 +424,7 @@ static void depca_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int depca_close(struct net_device *dev); static int depca_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); +static void depca_tx_timeout (struct net_device *dev); static struct net_device_stats *depca_get_stats(struct net_device *dev); static void set_multicast_list(struct net_device *dev); @@ -584,6 +588,7 @@ memset((char *)dev->priv, 0, sizeof(struct depca_private)); lp->adapter = adapter; lp->mca_slot = mca_slot; + lp->lock = SPIN_LOCK_UNLOCKED; sprintf(lp->adapter_name,"%s (%s)", name, dev->name); request_region(ioaddr, DEPCA_TOTAL_SIZE, lp->adapter_name); @@ -703,6 +708,8 @@ dev->get_stats = &depca_get_stats; dev->set_multicast_list = &set_multicast_list; dev->do_ioctl = &depca_ioctl; + dev->tx_timeout = depca_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; dev->mem_start = 0; @@ -755,9 +762,7 @@ outb(nicsr, DEPCA_NICSR); outw(CSR0,DEPCA_ADDR); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue(dev); status = InitRestartDepca(dev); @@ -781,7 +786,7 @@ u_long p; /* Lock out other processes whilst setting up the hardware */ - test_and_set_bit(0, (void *)&dev->tbusy); + netif_stop_queue(dev); lp->rx_new = lp->tx_new = 0; lp->rx_old = lp->tx_old = 0; @@ -809,122 +814,109 @@ } lp->init_block.mode = 0x0000; /* Enable the Tx and Rx */ +} - return; + +static void depca_tx_timeout (struct net_device *dev) +{ + u_long ioaddr = dev->base_addr; + + printk ("%s: transmit timed out, status %04x, resetting.\n", + dev->name, inw (DEPCA_DATA)); + + STOP_DEPCA; + depca_init_ring (dev); + LoadCSRs (dev); + dev->trans_start = jiffies; + netif_wake_queue (dev); + InitRestartDepca (dev); } + /* ** Writes a socket buffer to TX descriptor ring and starts transmission */ -static int -depca_start_xmit(struct sk_buff *skb, struct net_device *dev) +static int depca_start_xmit (struct sk_buff *skb, struct net_device *dev) { - struct depca_private *lp = (struct depca_private *)dev->priv; - u_long ioaddr = dev->base_addr; - int status = 0; + struct depca_private *lp = (struct depca_private *) dev->priv; + u_long ioaddr = dev->base_addr; + int status = 0; - /* Transmitter timeout, serious problems. */ - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 1*HZ) { - status = -1; - } else { - printk("%s: transmit timed out, status %04x, resetting.\n", - dev->name, inw(DEPCA_DATA)); - - STOP_DEPCA; - depca_init_ring(dev); - LoadCSRs(dev); - dev->interrupt = UNMASK_INTERRUPTS; - dev->start = 1; - dev->tbusy=0; - dev->trans_start = jiffies; - InitRestartDepca(dev); - } - return status; - } else if (skb->len > 0) { - /* Enforce 1 process per h/w access */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk("%s: Transmitter access conflict.\n", dev->name); - status = -1; - } else { - if (TX_BUFFS_AVAIL) { /* Fill in a Tx ring entry */ - status = load_packet(dev, skb); + /* Transmitter timeout, serious problems. */ + if (skb->len < 1) + goto out; - if (!status) { - /* Trigger an immediate send demand. */ - outw(CSR0, DEPCA_ADDR); - outw(INEA | TDMD, DEPCA_DATA); - - dev->trans_start = jiffies; - dev_kfree_skb(skb); - } - if (TX_BUFFS_AVAIL) { - dev->tbusy=0; - } - } else { - status = -1; - } - } - } - - return status; + netif_stop_queue (dev); + + if (TX_BUFFS_AVAIL) { /* Fill in a Tx ring entry */ + status = load_packet (dev, skb); + + if (!status) { + /* Trigger an immediate send demand. */ + outw (CSR0, DEPCA_ADDR); + outw (INEA | TDMD, DEPCA_DATA); + + dev->trans_start = jiffies; + dev_kfree_skb (skb); + } + if (TX_BUFFS_AVAIL) + netif_start_queue (dev); + } else + status = -1; + +out: + return status; } /* ** The DEPCA interrupt handler. */ -static void -depca_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static void depca_interrupt (int irq, void *dev_id, struct pt_regs *regs) { - struct net_device *dev = dev_id; - struct depca_private *lp; - s16 csr0, nicsr; - u_long ioaddr; + struct net_device *dev = dev_id; + struct depca_private *lp; + s16 csr0, nicsr; + u_long ioaddr; - if (dev == NULL) { - printk ("depca_interrupt(): irq %d for unknown device.\n", irq); - } else { - lp = (struct depca_private *)dev->priv; - ioaddr = dev->base_addr; - - if (dev->interrupt) - printk("%s: Re-entering the interrupt handler.\n", dev->name); + if (dev == NULL) { + printk ("depca_interrupt(): irq %d for unknown device.\n", irq); + return; + } - dev->interrupt = MASK_INTERRUPTS; + lp = (struct depca_private *) dev->priv; + ioaddr = dev->base_addr; - /* mask the DEPCA board interrupts and turn on the LED */ - nicsr = inb(DEPCA_NICSR); - nicsr |= (IM|LED); - outb(nicsr, DEPCA_NICSR); + spin_lock (&lp->lock); - outw(CSR0, DEPCA_ADDR); - csr0 = inw(DEPCA_DATA); + /* mask the DEPCA board interrupts and turn on the LED */ + nicsr = inb (DEPCA_NICSR); + nicsr |= (IM | LED); + outb (nicsr, DEPCA_NICSR); - /* Acknowledge all of the current interrupt sources ASAP. */ - outw(csr0 & INTE, DEPCA_DATA); + outw (CSR0, DEPCA_ADDR); + csr0 = inw (DEPCA_DATA); - if (csr0 & RINT) /* Rx interrupt (packet arrived) */ - depca_rx(dev); + /* Acknowledge all of the current interrupt sources ASAP. */ + outw (csr0 & INTE, DEPCA_DATA); - if (csr0 & TINT) /* Tx interrupt (packet sent) */ - depca_tx(dev); + if (csr0 & RINT) /* Rx interrupt (packet arrived) */ + depca_rx (dev); - if ((TX_BUFFS_AVAIL >= 0) && dev->tbusy) { /* any resources available? */ - dev->tbusy = 0; /* clear TX busy flag */ - mark_bh(NET_BH); - } + if (csr0 & TINT) /* Tx interrupt (packet sent) */ + depca_tx (dev); - /* Unmask the DEPCA board interrupts and turn off the LED */ - nicsr = (nicsr & ~IM & ~LED); - outb(nicsr, DEPCA_NICSR); + if ((TX_BUFFS_AVAIL >= 0) && (test_bit (LINK_STATE_XOFF, &dev->flags))) { /* any resources available? */ + netif_wake_queue (dev); - dev->interrupt = UNMASK_INTERRUPTS; - } + /* Unmask the DEPCA board interrupts and turn off the LED */ + nicsr = (nicsr & ~IM & ~LED); + outb (nicsr, DEPCA_NICSR); + } - return; + spin_unlock (&lp->lock); } + static int depca_rx(struct net_device *dev) { @@ -1070,8 +1062,7 @@ s16 nicsr; u_long ioaddr = dev->base_addr; - dev->start = 0; - dev->tbusy = 1; + netif_stop_queue(dev); outw(CSR0, DEPCA_ADDR); @@ -1173,8 +1164,7 @@ u_long ioaddr = dev->base_addr; if (dev) { - while(dev->tbusy) barrier(); /* Stop ring access */ - set_bit(0, (void*)&dev->tbusy); + netif_stop_queue(dev); while(lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ STOP_DEPCA; /* Temporarily stop the depca. */ @@ -1189,7 +1179,7 @@ LoadCSRs(dev); /* Reload CSR3 */ InitRestartDepca(dev); /* Resume normal operation. */ - dev->tbusy = 0; /* Unlock the TX ring */ + netif_start_queue(dev); /* Unlock the TX ring */ } } @@ -1909,21 +1899,19 @@ for (i=0; idev_addr[i] = tmp.addr[i]; } - while(dev->tbusy) barrier(); /* Stop ring access */ - test_and_set_bit(0, (void*)&dev->tbusy); + netif_stop_queue(dev); while(lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ STOP_DEPCA; /* Temporarily stop the depca. */ depca_init_ring(dev); /* Initialize the descriptor rings */ LoadCSRs(dev); /* Reload CSR3 */ InitRestartDepca(dev); /* Resume normal operation. */ - dev->tbusy = 0; /* Unlock the TX ring */ + netif_start_queue(dev); /* Unlock the TX ring */ break; case DEPCA_SET_PROM: /* Set Promiscuous Mode */ if (!capable(CAP_NET_ADMIN)) return -EPERM; - while(dev->tbusy) barrier(); /* Stop ring access */ - test_and_set_bit(0, (void*)&dev->tbusy); + netif_stop_queue(dev); while(lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ STOP_DEPCA; /* Temporarily stop the depca. */ @@ -1932,13 +1920,12 @@ LoadCSRs(dev); /* Reload CSR3 */ InitRestartDepca(dev); /* Resume normal operation. */ - dev->tbusy = 0; /* Unlock the TX ring */ + netif_start_queue(dev); /* Unlock the TX ring */ break; case DEPCA_CLR_PROM: /* Clear Promiscuous Mode */ if (!capable(CAP_NET_ADMIN)) return -EPERM; - while(dev->tbusy) barrier(); /* Stop ring access */ - test_and_set_bit(0, (void*)&dev->tbusy); + netif_stop_queue(dev); while(lp->tx_old != lp->tx_new); /* Wait for the ring to empty */ STOP_DEPCA; /* Temporarily stop the depca. */ @@ -1947,7 +1934,7 @@ LoadCSRs(dev); /* Reload CSR3 */ InitRestartDepca(dev); /* Resume normal operation. */ - dev->tbusy = 0; /* Unlock the TX ring */ + netif_start_queue(dev); /* Unlock the TX ring */ break; case DEPCA_SAY_BOO: /* Say "Boo!" to the kernel log file */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/dmfe.c linux/drivers/net/dmfe.c --- v2.3.43/linux/drivers/net/dmfe.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/dmfe.c Thu Feb 10 14:56:48 2000 @@ -460,8 +460,6 @@ dmfe_init_dm910x(dev); /* Active System Interface */ - dev->tbusy = 0; /* Can transmit packet */ - dev->start = 1; /* interface ready */ MOD_INC_USE_COUNT; /* set and active a timer process */ @@ -470,6 +468,8 @@ db->timer.data = (unsigned long) dev; db->timer.function = &dmfe_timer; add_timer(&db->timer); + + netif_wake_queue(dev); return 0; } @@ -543,24 +543,18 @@ struct tx_desc *txptr; DMFE_DBUG(0, "dmfe_start_xmit", 0); - - if ((dev->tbusy == 1) && (db->tx_packet_cnt != 0)) - return 1; - else - dev->tbusy = 0; - + + netif_stop_queue(dev); + /* Too large packet check */ if (skb->len > MAX_PACKET_SIZE) { - printk(KERN_ERR "%s: oversized frame (%d bytes) received.\n", dev->name, (u16) skb->len); + printk(KERN_ERR "%s: oversized frame (%d bytes) for transmit.\n", dev->name, (u16) skb->len); dev_kfree_skb(skb); return 0; } /* No Tx resource check, it never happen nromally */ if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) { - printk(KERN_WARNING "%s: No Tx resource, enter xmit() again \n", dev->name); - dev_kfree_skb(skb); - dev->tbusy = 1; - return -EBUSY; + return 1; } /* transmit this packet */ @@ -580,8 +574,8 @@ outl(0x1, dev->base_addr + DCR1); /* Tx resource check */ - if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) - dev->tbusy = 1; + if (db->tx_packet_cnt < TX_FREE_DESC_CNT) + netif_wake_queue(dev); /* Set transmit time stamp */ dev->trans_start = jiffies; /* saved the time stamp */ @@ -603,9 +597,7 @@ DMFE_DBUG(0, "dmfe_stop", 0); - /* disable system */ - dev->start = 0; /* interface disable */ - dev->tbusy = 1; /* can't transmit */ + netif_stop_queue(dev); /* Reset & stop DM910X board */ outl(DM910X_RESET, ioaddr + DCR0); @@ -645,13 +637,8 @@ DMFE_DBUG(1, "dmfe_interrupt() without device arg", 0); return; } - if (dev->interrupt) { - DMFE_DBUG(1, "dmfe_interrupt() re-entry ", 0); - return; - } /* A real interrupt coming */ - dev->interrupt = 1; /* Lock interrupt */ db = (struct dmfe_board_info *) dev->priv; ioaddr = dev->base_addr; @@ -669,10 +656,9 @@ if (db->cr5_data & 0x2000) { /* A system bus error occurred */ DMFE_DBUG(1, "A system bus error occurred. CR5=", db->cr5_data); - dev->tbusy = 1; + netif_stop_queue(dev); db->wait_reset = 1; /* Need to RESET */ outl(0, ioaddr + DCR7); /* disable all interrupt */ - dev->interrupt = 0; /* unlock interrupt */ return; } /* Free the transmitted descriptor */ @@ -690,10 +676,9 @@ } db->tx_remove_ptr = (struct tx_desc *) txptr; - if (dev->tbusy && (db->tx_packet_cnt < TX_FREE_DESC_CNT)) { - dev->tbusy = 0; /* free a resource */ - mark_bh(NET_BH); /* active bottom half */ - } + if (db->tx_packet_cnt < TX_FREE_DESC_CNT) + netif_wake_queue(dev); + /* Received the coming packet */ if (db->rx_avail_cnt) dmfe_rx_packet(dev, db); @@ -708,7 +693,6 @@ db->cr6_data |= 0x100; update_cr6(db->cr6_data, db->ioaddr); } - dev->interrupt = 0; /* release interrupt lock */ /* Restore CR7 to enable interrupt mask */ @@ -935,9 +919,8 @@ db->in_reset_state = 1; /* Disable upper layer interface */ - dev->tbusy = 1; /* transmit packet disable */ - dev->start = 0; /* interface not ready */ - + netif_stop_queue(dev); + db->cr6_data &= ~(CR6_RXSC | CR6_TXSC); /* Disable Tx/Rx */ update_cr6(db->cr6_data, dev->base_addr); @@ -954,12 +937,11 @@ /* Re-initilize DM910X board */ dmfe_init_dm910x(dev); - /* Restart upper layer interface */ - dev->tbusy = 0; /* Can transmit packet */ - dev->start = 1; /* interface ready */ - /* Leave dynamic reser route */ db->in_reset_state = 0; + + /* Restart upper layer interface */ + netif_wake_queue(dev); } /* @@ -1113,7 +1095,7 @@ /* prepare the setup frame */ db->tx_packet_cnt++; - dev->tbusy = 1; + netif_stop_queue(dev); txptr->tdes1 = 0x890000c0; txptr->tdes0 = 0x80000000; db->tx_insert_ptr = (struct tx_desc *) txptr->next_tx_desc; diff -u --recursive --new-file v2.3.43/linux/drivers/net/eepro.c linux/drivers/net/eepro.c --- v2.3.43/linux/drivers/net/eepro.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/eepro.c Fri Feb 11 08:25:33 2000 @@ -987,7 +987,7 @@ lp->tx_last = 0; dev->trans_start = jiffies; - netif_start_queue (dev); + netif_wake_queue (dev); outb (RCV_ENABLE_CMD, ioaddr); } @@ -1001,6 +1001,8 @@ if (net_debug > 5) printk(KERN_DEBUG "%s: entering eepro_send_packet routine.\n", dev->name); + netif_stop_queue (dev); + spin_lock_irqsave(&lp->lock, flags); { @@ -1014,7 +1016,7 @@ } - compat_dev_kfree_skb (skb, FREE_WRITE); + dev_kfree_skb (skb); /* You might need to clean up and record Tx statistics here. */ /* lp->stats.tx_aborted_errors++; */ @@ -1408,7 +1410,7 @@ lp->tx_end = end; if (test_bit(LINK_STATE_XOFF, &dev->flags)) - netif_start_queue(dev); + netif_wake_queue(dev); /* Enable RX and TX interrupts */ outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); diff -u --recursive --new-file v2.3.43/linux/drivers/net/eexpress.c linux/drivers/net/eexpress.c --- v2.3.43/linux/drivers/net/eexpress.c Fri Jan 28 15:09:07 2000 +++ linux/drivers/net/eexpress.c Thu Feb 10 14:56:48 2000 @@ -251,6 +251,7 @@ extern int express_probe(struct net_device *dev); static int eexp_open(struct net_device *dev); static int eexp_close(struct net_device *dev); +static void eexp_timeout(struct net_device *dev); static struct net_device_stats *eexp_stats(struct net_device *dev); static int eexp_xmit(struct sk_buff *buf, struct net_device *dev); @@ -437,8 +438,6 @@ request_region(ioaddr+0x4000, 16, "EtherExpress shadow"); request_region(ioaddr+0x8000, 16, "EtherExpress shadow"); request_region(ioaddr+0xc000, 16, "EtherExpress shadow"); - dev->tbusy = 0; - dev->interrupt = 0; if (lp->width) { printk("%s: forcing ASIC to 8-bit mode\n", dev->name); @@ -446,8 +445,8 @@ } eexp_hw_init586(dev); - dev->start = 1; MOD_INC_USE_COUNT; + netif_start_queue(dev); #if NET_DEBUG > 6 printk(KERN_DEBUG "%s: leaving eexp_open()\n", dev->name); #endif @@ -465,9 +464,8 @@ int irq = dev->irq; - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + outb(SIRQ_dis|irqrmap[irq],ioaddr+SET_IRQ); lp->started = 0; scb_command(dev, SCB_CUsuspend|SCB_RUsuspend); @@ -530,8 +528,7 @@ outb(0,ioaddr+SIGNAL_CA); } } - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } else { @@ -546,13 +543,12 @@ else { unsigned short txstatus = eexp_hw_lasttxstat(dev); - if (dev->tbusy && !txstatus) + if (test_bit(LINK_STATE_XOFF, &dev->state) && !txstatus) { printk(KERN_WARNING "%s: CU wedged, status %04x %04x, resetting...\n", dev->name,status,txstatus); eexp_hw_init586(dev); - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } else { @@ -570,12 +566,47 @@ printk(KERN_WARNING "%s: i82586 startup timed out, status %04x, resetting...\n", dev->name, status); eexp_hw_init586(dev); - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } } } +static void eexp_timeout(struct net_device *dev) +{ + struct net_local *lp = (struct net_local *)dev->priv; +#ifdef CONFIG_SMP + unsigned long flags; +#endif + int status; + + disable_irq(dev->irq); + + /* + * Best would be to use synchronize_irq(); spin_lock() here + * lets make it work first.. + */ + +#ifdef CONFIG_SMP + spin_lock_irqsave(&lp->lock, flags); +#endif + + status = scb_status(dev); + unstick_cu(dev); + printk(KERN_INFO "%s: transmit timed out, %s?", dev->name, + (SCB_complete(status)?"lost interrupt": + "board on fire")); + lp->stats.tx_errors++; + lp->last_tx = jiffies; + if (!SCB_complete(status)) { + scb_command(dev, SCB_CUabort); + outb(0,dev->base_addr+SIGNAL_CA); + } + netif_wake_queue(dev); +#ifdef CONFIG_SMP + spin_unlock_irqrestore(&lp->lock, flags); +#endif +} + /* * Called to transmit a packet, or to allow us to right ourselves * if the kernel thinks we've died. @@ -601,38 +632,7 @@ #ifdef CONFIG_SMP spin_lock_irqsave(&lp->lock, flags); #endif - - /* If dev->tbusy is set, all our tx buffers are full but the kernel - * is calling us anyway. Check that nothing bad is happening. - */ - if (dev->tbusy) { - int status = scb_status(dev); - unstick_cu(dev); - if ((jiffies - lp->last_tx) < HZ) - { -#ifdef CONFIG_SMP - spin_unlock_irqrestore(&lp->lock, flags); -#endif - - return 1; - } - printk(KERN_INFO "%s: transmit timed out, %s?", dev->name, - (SCB_complete(status)?"lost interrupt": - "board on fire")); - lp->stats.tx_errors++; - dev->tbusy = 0; - lp->last_tx = jiffies; - if (!SCB_complete(status)) { - scb_command(dev, SCB_CUabort); - outb(0,dev->base_addr+SIGNAL_CA); - } - } - if (test_and_set_bit(0,(void *)&dev->tbusy)) - { - lp->stats.tx_dropped++; - } - else { unsigned short length = (ETH_ZLEN < buf->len) ? buf->len : ETH_ZLEN; @@ -756,8 +756,6 @@ outb(SIRQ_dis|irqrmap[irq],ioaddr+SET_IRQ); - dev->interrupt = 1; - status = scb_status(dev); #if NET_DEBUG > 4 @@ -825,7 +823,6 @@ outb(SIRQ_en|irqrmap[irq],ioaddr+SET_IRQ); - dev->interrupt = 0; #if NET_DEBUG > 6 printk("%s: leaving eexp_irq()\n", dev->name); #endif @@ -1004,8 +1001,8 @@ else lp->tx_head += TX_BUF_SIZE; if (lp->tx_head != lp->tx_reap) - dev->tbusy = 0; - + netif_wake_queue(dev); + if (LOCKUP16 || lp->width) { /* Restart the CU so that the packet can actually be transmitted. (Zoltan Szilagyi 10-12-96) */ @@ -1141,6 +1138,8 @@ dev->hard_start_xmit = eexp_xmit; dev->get_stats = eexp_stats; dev->set_multicast_list = &eexp_set_multicast; + dev->tx_timeout = eexp_timeout; + dev->watchdog_timeo = 2*HZ; ether_setup(dev); return 0; } @@ -1205,7 +1204,7 @@ unsigned short tx_block = lp->tx_reap; unsigned short status; - if ((!dev->tbusy) && lp->tx_head==lp->tx_reap) + if (!test_bit(LINK_STATE_XOFF, &dev->state) && lp->tx_head==lp->tx_reap) return 0x0000; do @@ -1254,8 +1253,7 @@ lp->tx_reap = tx_block = TX_BUF_START; else lp->tx_reap = tx_block += TX_BUF_SIZE; - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } while (lp->tx_reap != lp->tx_head); @@ -1298,8 +1296,7 @@ { printk(KERN_WARNING "%s: Failed to restart CU, resetting board...\n",dev->name); eexp_hw_init586(dev); - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); return; } } diff -u --recursive --new-file v2.3.43/linux/drivers/net/fmv18x.c linux/drivers/net/fmv18x.c --- v2.3.43/linux/drivers/net/fmv18x.c Wed Aug 18 11:36:42 1999 +++ linux/drivers/net/fmv18x.c Fri Feb 11 13:20:53 2000 @@ -112,9 +112,10 @@ static int fmv18x_probe1(struct net_device *dev, short ioaddr); static int net_open(struct net_device *dev); -static int net_send_packet(struct sk_buff *skb, struct net_device *dev); +static int net_send_packet(struct sk_buff *skb, struct net_device *dev); static void net_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void net_rx(struct net_device *dev); +static void net_timeout(struct net_device *dev); static int net_close(struct net_device *dev); static struct net_device_stats *net_get_stats(struct net_device *dev); static void set_multicast_list(struct net_device *dev); @@ -276,9 +277,11 @@ dev->open = net_open; dev->stop = net_close; - dev->hard_start_xmit = net_send_packet; - dev->get_stats = net_get_stats; - dev->set_multicast_list = &set_multicast_list; + dev->hard_start_xmit = net_send_packet; + dev->tx_timeout = net_timeout; + dev->watchdog_timeo = HZ/10; + dev->get_stats = net_get_stats; + dev->set_multicast_list = set_multicast_list; /* Fill in the fields of 'dev' with ethernet-generic values. */ @@ -310,10 +313,8 @@ outb(0xff, ioaddr + RX_STATUS); lp->open_time = jiffies; - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); + /* Enable the IRQ of the LAN Card */ outb(0x80, ioaddr + FJ_CONFIG1); @@ -325,93 +326,86 @@ return 0; } -static int -net_send_packet(struct sk_buff *skb, struct net_device *dev) +static void net_timeout(struct net_device *dev) { struct net_local *lp = (struct net_local *)dev->priv; int ioaddr = dev->base_addr; + unsigned long flags; + + + printk(KERN_WARNING "%s: transmit timed out with status %04x, %s?\n", dev->name, + htons(inw(ioaddr + TX_STATUS)), + inb(ioaddr + TX_STATUS) & 0x80 + ? "IRQ conflict" : "network cable problem"); + printk(KERN_WARNING "%s: timeout registers: %04x %04x %04x %04x %04x %04x %04x %04x.\n", + dev->name, htons(inw(ioaddr + 0)), + htons(inw(ioaddr + 2)), htons(inw(ioaddr + 4)), + htons(inw(ioaddr + 6)), htons(inw(ioaddr + 8)), + htons(inw(ioaddr +10)), htons(inw(ioaddr +12)), + htons(inw(ioaddr +14))); + printk(KERN_WARNING "eth card: %04x %04x\n", + htons(inw(ioaddr+FJ_STATUS0)), + htons(inw(ioaddr+FJ_CONFIG0))); + lp->stats.tx_errors++; + /* ToDo: We should try to restart the adaptor... */ + save_flags(flags); + cli(); - if (dev->tbusy) { - /* If we get here, some higher level has decided we are broken. - There should really be a "kick me" function call instead. */ - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 10) - return 1; - printk("%s: transmit timed out with status %04x, %s?\n", dev->name, - htons(inw(ioaddr + TX_STATUS)), - inb(ioaddr + TX_STATUS) & 0x80 - ? "IRQ conflict" : "network cable problem"); - printk("%s: timeout registers: %04x %04x %04x %04x %04x %04x %04x %04x.\n", - dev->name, htons(inw(ioaddr + 0)), - htons(inw(ioaddr + 2)), htons(inw(ioaddr + 4)), - htons(inw(ioaddr + 6)), htons(inw(ioaddr + 8)), - htons(inw(ioaddr +10)), htons(inw(ioaddr +12)), - htons(inw(ioaddr +14))); - printk("eth card: %04x %04x\n", - htons(inw(ioaddr+FJ_STATUS0)), - htons(inw(ioaddr+FJ_CONFIG0))); - lp->stats.tx_errors++; - /* ToDo: We should try to restart the adaptor... */ - cli(); - - /* Initialize LAN Controller and LAN Card */ - outb(0xda, ioaddr + CONFIG_0); /* Initialize LAN Controller */ - outb(0x00, ioaddr + CONFIG_1); /* Stand by mode */ - outb(0x00, ioaddr + FJ_CONFIG1); /* Disable IRQ of LAN Card */ - outb(0x00, ioaddr + FJ_BUFCNTL); /* Reset ? I'm not sure */ - net_open(dev); - - sti(); - } - - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk("%s: Transmitter access conflict.\n", dev->name); - else { - short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - unsigned char *buf = skb->data; - - if (length > ETH_FRAME_LEN) { - if (net_debug) - printk("%s: Attempting to send a large packet (%d bytes).\n", - dev->name, length); - return 1; - } - - if (net_debug > 4) - printk("%s: Transmitting a packet of length %lu.\n", dev->name, - (unsigned long)skb->len); - - /* We may not start transmitting unless we finish transferring - a packet into the Tx queue. During executing the following - codes we possibly catch a Tx interrupt. Thus we flag off - tx_queue_ready, so that we prevent the interrupt routine - (net_interrupt) to start transmitting. */ - lp->tx_queue_ready = 0; - { - outw(length, ioaddr + DATAPORT); - outsw(ioaddr + DATAPORT, buf, (length + 1) >> 1); + /* Initialize LAN Controller and LAN Card */ + outb(0xda, ioaddr + CONFIG_0); /* Initialize LAN Controller */ + outb(0x00, ioaddr + CONFIG_1); /* Stand by mode */ + outb(0x00, ioaddr + FJ_CONFIG1); /* Disable IRQ of LAN Card */ + outb(0x00, ioaddr + FJ_BUFCNTL); /* Reset ? I'm not sure */ + net_open(dev); + restore_flags(flags); +} - lp->tx_queue++; - lp->tx_queue_len += length + 2; - } - lp->tx_queue_ready = 1; +static int net_send_packet(struct sk_buff *skb, struct net_device *dev) +{ + struct net_local *lp = (struct net_local *)dev->priv; + int ioaddr = dev->base_addr; + short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + unsigned char *buf = skb->data; - if (lp->tx_started == 0) { - /* If the Tx is idle, always trigger a transmit. */ - outb(0x80 | lp->tx_queue, ioaddr + TX_START); - lp->tx_queue = 0; - lp->tx_queue_len = 0; - dev->trans_start = jiffies; - lp->tx_started = 1; - dev->tbusy = 0; - } else if (lp->tx_queue_len < 4096 - 1502) - /* Yes, there is room for one more packet. */ - dev->tbusy = 0; + /* Block a transmit from overlapping. */ + + netif_stop_queue(dev); + + if (length > ETH_FRAME_LEN) { + if (net_debug) + printk("%s: Attempting to send a large packet (%d bytes).\n", + dev->name, length); + return 1; } - dev_kfree_skb (skb); + if (net_debug > 4) + printk("%s: Transmitting a packet of length %lu.\n", dev->name, + (unsigned long)skb->len); + /* We may not start transmitting unless we finish transferring + a packet into the Tx queue. During executing the following + codes we possibly catch a Tx interrupt. Thus we flag off + tx_queue_ready, so that we prevent the interrupt routine + (net_interrupt) to start transmitting. */ + lp->tx_queue_ready = 0; + { + outw(length, ioaddr + DATAPORT); + outsw(ioaddr + DATAPORT, buf, (length + 1) >> 1); + lp->tx_queue++; + lp->tx_queue_len += length + 2; + } + lp->tx_queue_ready = 1; + if (lp->tx_started == 0) { + /* If the Tx is idle, always trigger a transmit. */ + outb(0x80 | lp->tx_queue, ioaddr + TX_START); + lp->tx_queue = 0; + lp->tx_queue_len = 0; + dev->trans_start = jiffies; + lp->tx_started = 1; + netif_wake_queue(dev); + } else if (lp->tx_queue_len < 4096 - 1502) + /* Yes, there is room for one more packet. */ + netif_wake_queue(dev); + dev_kfree_skb(skb); return 0; } @@ -424,12 +418,6 @@ struct net_local *lp; int ioaddr, status; - if (dev == NULL) { - printk ("fmv18x_interrupt(): irq %d for unknown device.\n", irq); - return; - } - dev->interrupt = 1; - ioaddr = dev->base_addr; lp = (struct net_local *)dev->priv; status = inw(ioaddr + TX_STATUS); @@ -467,23 +455,18 @@ lp->tx_queue = 0; lp->tx_queue_len = 0; dev->trans_start = jiffies; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); /* Inform upper layers. */ } else { lp->tx_started = 0; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); /* Inform upper layers. */ } } } - - dev->interrupt = 0; return; } /* We have a good packet(s), get it/them out of the buffers. */ -static void -net_rx(struct net_device *dev) +static void net_rx(struct net_device *dev) { struct net_local *lp = (struct net_local *)dev->priv; int ioaddr = dev->base_addr; @@ -578,9 +561,8 @@ ((struct net_local *)dev->priv)->open_time = 0; - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Set configuration register 0 to disable Tx and Rx. */ outb(0xda, ioaddr + CONFIG_0); diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/baycom_epp.c linux/drivers/net/hamradio/baycom_epp.c --- v2.3.43/linux/drivers/net/hamradio/baycom_epp.c Thu Aug 26 13:05:38 1999 +++ linux/drivers/net/hamradio/baycom_epp.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * baycom_epp.c -- baycom epp radio modem driver. * - * Copyright (C) 1998-1999 + * Copyright (C) 1998-2000 * Thomas Sailer (sailer@ife.ee.ethz.ch) * * This program is free software; you can redistribute it and/or modify @@ -26,14 +26,15 @@ * * * History: - * 0.1 xx.xx.98 Initial version by Matthias Welwarsky (dg2fef) - * 0.2 21.04.98 Massive rework by Thomas Sailer - * Integrated FPGA EPP modem configuration routines - * 0.3 11.05.98 Took FPGA config out and moved it into a separate program - * 0.4 26.07.99 Adapted to new lowlevel parport driver interface - * 0.5 03.08.99 adapt to Linus' new __setup/__initcall - * removed some pre-2.2 kernel compatibility cruft - * 0.6 10.08.99 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.1 xx.xx.1998 Initial version by Matthias Welwarsky (dg2fef) + * 0.2 21.04.1998 Massive rework by Thomas Sailer + * Integrated FPGA EPP modem configuration routines + * 0.3 11.05.1998 Took FPGA config out and moved it into a separate program + * 0.4 26.07.1999 Adapted to new lowlevel parport driver interface + * 0.5 03.08.1999 adapt to Linus' new __setup/__initcall + * removed some pre-2.2 kernel compatibility cruft + * 0.6 10.08.1999 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.7 12.02.2000 adapted to softnet driver interface * */ @@ -47,8 +48,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -89,8 +92,8 @@ /* --------------------------------------------------------------------- */ static const char bc_drvname[] = "baycom_epp"; -static const char bc_drvinfo[] = KERN_INFO "baycom_epp: (C) 1998-1999 Thomas Sailer, HB9JNX/AE4WA\n" -KERN_INFO "baycom_epp: version 0.5 compiled " __TIME__ " " __DATE__ "\n"; +static const char bc_drvinfo[] = KERN_INFO "baycom_epp: (C) 1998-2000 Thomas Sailer, HB9JNX/AE4WA\n" +KERN_INFO "baycom_epp: version 0.7 compiled " __TIME__ " " __DATE__ "\n"; /* --------------------------------------------------------------------- */ @@ -228,8 +231,7 @@ struct net_device_stats stats; unsigned int ptt_keyed; - struct sk_buff_head send_queue; /* Packets awaiting transmission */ - + struct sk_buff *skb; /* next transmit packet */ #ifdef BAYCOM_DEBUG struct debug_vals { @@ -394,15 +396,11 @@ sprintf(portarg, "%ld", bc->pdev->port->base); printk(KERN_DEBUG "%s: %s -s -p %s -m %s\n", bc_drvname, eppconfig_path, portarg, modearg); - for (i = 0; i < current->files->max_fds; i++ ) - if (current->files->fd[i]) - close(i); - set_fs(KERNEL_DS); /* Allow execve args to be in kernel space. */ - current->uid = current->euid = current->fsuid = 0; - if (execve(eppconfig_path, argv, envp) < 0) { + i = exec_usermodehelper(eppconfig_path, argv, envp); + if (i < 0) { printk(KERN_ERR "%s: failed to exec %s -s -p %s -m %s, errno = %d\n", - bc_drvname, eppconfig_path, portarg, modearg, errno); - return -errno; + bc_drvname, eppconfig_path, portarg, modearg, i); + return i; } return 0; } @@ -515,71 +513,63 @@ if (bc->hdlctx.bufcnt > 0) return; - while ((skb = skb_dequeue(&bc->send_queue))) { - if (skb->data[0] != 0) { - do_kiss_params(bc, skb->data, skb->len); - dev_kfree_skb(skb); - continue; - } - pkt_len = skb->len-1; /* strip KISS byte */ - if (pkt_len >= HDLCDRV_MAXFLEN || pkt_len < 2) { - dev_kfree_skb(skb); - continue; - } - wp = bc->hdlctx.buf; - bp = skb->data+1; - crc = calc_crc_ccitt(bp, pkt_len); - crcarr[0] = crc; - crcarr[1] = crc >> 8; - *wp++ = 0x7e; - bitstream = bitbuf = numbit = 0; - while (pkt_len > -2) { - bitstream >>= 8; - bitstream |= ((unsigned int)*bp) << 8; - bitbuf |= ((unsigned int)*bp) << numbit; - notbitstream = ~bitstream; - bp++; - pkt_len--; - if (!pkt_len) - bp = crcarr; - ENCODEITERA(0); - ENCODEITERA(1); - ENCODEITERA(2); - ENCODEITERA(3); - ENCODEITERA(4); - ENCODEITERA(5); - ENCODEITERA(6); - ENCODEITERA(7); - goto enditer; - ENCODEITERB(0); - ENCODEITERB(1); - ENCODEITERB(2); - ENCODEITERB(3); - ENCODEITERB(4); - ENCODEITERB(5); - ENCODEITERB(6); - ENCODEITERB(7); - enditer: - numbit += 8; - while (numbit >= 8) { - *wp++ = bitbuf; - bitbuf >>= 8; - numbit -= 8; - } - } - bitbuf |= 0x7e7e << numbit; - numbit += 16; - while (numbit >= 8) { - *wp++ = bitbuf; - bitbuf >>= 8; - numbit -= 8; - } - bc->hdlctx.bufptr = bc->hdlctx.buf; - bc->hdlctx.bufcnt = wp - bc->hdlctx.buf; - dev_kfree_skb(skb); - bc->stats.tx_packets++; + skb = bc->skb; + if (!skb) return; + bc->skb = NULL; + pkt_len = skb->len-1; /* strip KISS byte */ + wp = bc->hdlctx.buf; + bp = skb->data+1; + crc = calc_crc_ccitt(bp, pkt_len); + crcarr[0] = crc; + crcarr[1] = crc >> 8; + *wp++ = 0x7e; + bitstream = bitbuf = numbit = 0; + while (pkt_len > -2) { + bitstream >>= 8; + bitstream |= ((unsigned int)*bp) << 8; + bitbuf |= ((unsigned int)*bp) << numbit; + notbitstream = ~bitstream; + bp++; + pkt_len--; + if (!pkt_len) + bp = crcarr; + ENCODEITERA(0); + ENCODEITERA(1); + ENCODEITERA(2); + ENCODEITERA(3); + ENCODEITERA(4); + ENCODEITERA(5); + ENCODEITERA(6); + ENCODEITERA(7); + goto enditer; + ENCODEITERB(0); + ENCODEITERB(1); + ENCODEITERB(2); + ENCODEITERB(3); + ENCODEITERB(4); + ENCODEITERB(5); + ENCODEITERB(6); + ENCODEITERB(7); + enditer: + numbit += 8; + while (numbit >= 8) { + *wp++ = bitbuf; + bitbuf >>= 8; + numbit -= 8; + } } + bitbuf |= 0x7e7e << numbit; + numbit += 16; + while (numbit >= 8) { + *wp++ = bitbuf; + bitbuf >>= 8; + numbit -= 8; + } + bc->hdlctx.bufptr = bc->hdlctx.buf; + bc->hdlctx.bufcnt = wp - bc->hdlctx.buf; + dev_kfree_skb(skb); + bc->stats.tx_packets++; } /* ---------------------------------------------------------------------- */ @@ -944,6 +934,8 @@ bc->debug_vals.demod_cycles = time3 - time2; #endif /* BAYCOM_DEBUG */ queue_task(&bc->run_bh, &tq_timer); + if (!bc->skb) + netif_wake_queue(dev); return; epptimeout: printk(KERN_ERR "%s: EPP timeout!\n", bc_drvname); @@ -960,8 +952,20 @@ baycom_paranoia_check(dev, "baycom_send_packet", 0); bc = (struct baycom_state *)dev->priv; - skb_queue_tail(&bc->send_queue, skb); - dev->trans_start = jiffies; + if (skb->data[0] != 0) { + do_kiss_params(bc, skb->data, skb->len); + dev_kfree_skb(skb); + return 0; + } + if (bc->skb) + return -1; + /* strip KISS byte */ + if (skb->len >= HDLCDRV_MAXFLEN+1 || skb->len < 3) { + dev_kfree_skb(skb); + return 0; + } + netif_stop_queue(dev); + bc->skb = skb; return 0; } @@ -1030,8 +1034,6 @@ baycom_paranoia_check(dev, "epp_open", -ENXIO); bc = (struct baycom_state *)dev->priv; - if (dev->start) - return 0; pp = parport_enumerate(); while (pp && pp->base != dev->base_addr) pp = pp->next; @@ -1122,11 +1124,9 @@ bc->hdlctx.bufcnt = 0; bc->hdlctx.slotcnt = bc->ch_params.slottime; bc->hdlctx.calibrate = 0; - dev->start = 1; - dev->tbusy = 0; - dev->interrupt = 0; /* start the bottom half stuff */ queue_task(&bc->run_bh, &tq_timer); + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; @@ -1144,17 +1144,12 @@ { struct baycom_state *bc; struct parport *pp; - struct sk_buff *skb; unsigned char tmp[1]; baycom_paranoia_check(dev, "epp_close", -EINVAL); - if (!dev->start) - return 0; bc = (struct baycom_state *)dev->priv; pp = bc->pdev->port; bc->bh_running = 0; - dev->start = 0; - dev->tbusy = 1; run_task_queue(&tq_timer); /* dequeue bottom half */ bc->stat = EPP_DCDBIT; tmp[0] = 0; @@ -1162,9 +1157,9 @@ parport_write_control(pp, 0); /* reset the adapter */ parport_release(bc->pdev); parport_unregister_device(bc->pdev); - /* Free any buffers left in the hardware transmit queue */ - while ((skb = skb_dequeue(&bc->send_queue))) - dev_kfree_skb(skb); + if (bc->skb) + dev_kfree_skb(bc->skb); + bc->skb = NULL; printk(KERN_INFO "%s: close epp at iobase 0x%lx irq %u\n", bc_drvname, dev->base_addr, dev->irq); MOD_DEC_USE_COUNT; @@ -1280,7 +1275,7 @@ break; case HDLCDRVCTL_SETMODEMPAR: - if ((!suser()) || dev->start) + if ((!suser()) || test_bit(LINK_STATE_START, &dev->state)) return -EACCES; dev->base_addr = hi.data.mp.iobase; dev->irq = /*hi.data.mp.irq*/0; @@ -1319,7 +1314,7 @@ break; case HDLCDRVCTL_SETMODE: - if (!suser() || dev->start) + if (!suser() || test_bit(LINK_STATE_START, &dev->state)) return -EACCES; hi.data.modename[sizeof(hi.data.modename)-1] = '\0'; return baycom_setmode(bc, hi.data.modename); @@ -1385,7 +1380,7 @@ /* Fill in the fields of the device structure */ dev_init_buffers(dev); - skb_queue_head_init(&bc->send_queue); + bc->skb = NULL; #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) dev->hard_header = ax25_encapsulate; @@ -1402,6 +1397,7 @@ dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ memcpy(dev->broadcast, ax25_bcast, AX25_ADDR_LEN); memcpy(dev->dev_addr, ax25_nocall, AX25_ADDR_LEN); + dev->tx_queue_len = 16; /* New style flags */ dev->flags = 0; @@ -1461,8 +1457,6 @@ dev->name = bc->ifname; dev->if_port = 0; dev->init = baycom_probe; - dev->start = 0; - dev->tbusy = 1; dev->base_addr = iobase[i]; dev->irq = 0; dev->dma = 0; diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/baycom_par.c linux/drivers/net/hamradio/baycom_par.c --- v2.3.43/linux/drivers/net/hamradio/baycom_par.c Fri Oct 22 13:21:49 1999 +++ linux/drivers/net/hamradio/baycom_par.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * baycom_par.c -- baycom par96 and picpar radio modem driver. * - * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Copyright (C) 1996-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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 @@ -53,14 +53,16 @@ * * * History: - * 0.1 26.06.96 Adapted from baycom.c and made network driver interface - * 18.10.96 Changed to new user space access routines (copy_{to,from}_user) - * 0.3 26.04.97 init code/data tagged - * 0.4 08.07.97 alternative ser12 decoding algorithm (uses delta CTS ints) - * 0.5 11.11.97 split into separate files for ser12/par96 - * 0.6 03.08.99 adapt to Linus' new __setup/__initcall - * removed some pre-2.2 kernel compatibility cruft - * 0.7 10.08.99 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.1 26.06.1996 Adapted from baycom.c and made network driver interface + * 18.10.1996 Changed to new user space access routines (copy_{to,from}_user) + * 0.3 26.04.1997 init code/data tagged + * 0.4 08.07.1997 alternative ser12 decoding algorithm (uses delta CTS ints) + * 0.5 11.11.1997 split into separate files for ser12/par96 + * 0.6 03.08.1999 adapt to Linus' new __setup/__initcall + * removed some pre-2.2 kernel compatibility cruft + * 0.7 10.08.1999 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.8 12.02.2000 adapted to softnet driver interface + * removed direct parport access, uses parport driver methods */ /*****************************************************************************/ @@ -77,7 +79,6 @@ #include #include #include -#include #include #include #include @@ -99,8 +100,8 @@ /* --------------------------------------------------------------------- */ static const char bc_drvname[] = "baycom_par"; -static const char bc_drvinfo[] = KERN_INFO "baycom_par: (C) 1996-1999 Thomas Sailer, HB9JNX/AE4WA\n" -KERN_INFO "baycom_par: version 0.6 compiled " __TIME__ " " __DATE__ "\n"; +static const char bc_drvinfo[] = KERN_INFO "baycom_par: (C) 1996-2000 Thomas Sailer, HB9JNX/AE4WA\n" +KERN_INFO "baycom_par: version 0.8 compiled " __TIME__ " " __DATE__ "\n"; /* --------------------------------------------------------------------- */ @@ -110,13 +111,6 @@ /* --------------------------------------------------------------------- */ -#define SER12_EXTENT 8 - -#define LPT_DATA(dev) ((dev)->base_addr+0) -#define LPT_STATUS(dev) ((dev)->base_addr+1) -#define LPT_CONTROL(dev) ((dev)->base_addr+2) -#define LPT_IRQ_ENABLE 0x10 - #define PAR96_BURSTBITS 16 #define PAR96_BURST 4 #define PAR96_PTT 2 @@ -207,6 +201,7 @@ { int i; unsigned int data = hdlcdrv_getbits(&bc->hdrv); + struct parport *pp = bc->pdev->port; for(i = 0; i < PAR96_BURSTBITS; i++, data >>= 1) { unsigned char val = PAR97_POWER; @@ -219,8 +214,8 @@ (PAR96_SCRAM_TAPN << 1); if (bc->modem.par96.scram & (PAR96_SCRAM_TAP1 << 2)) val |= PAR96_TXBIT; - outb(val, LPT_DATA(dev)); - outb(val | PAR96_BURST, LPT_DATA(dev)); + pp->ops->write_data(pp, val); + pp->ops->write_data(pp, val | PAR96_BURST); } } @@ -230,24 +225,25 @@ { int i; unsigned int data, mask, mask2, descx; + struct parport *pp = bc->pdev->port; /* * do receiver; differential decode and descramble on the fly */ for(data = i = 0; i < PAR96_BURSTBITS; i++) { bc->modem.par96.descram = (bc->modem.par96.descram << 1); - if (inb(LPT_STATUS(dev)) & PAR96_RXBIT) + if (pp->ops->read_status(pp) & PAR96_RXBIT) bc->modem.par96.descram |= 1; descx = bc->modem.par96.descram ^ (bc->modem.par96.descram >> 1); /* now the diff decoded data is inverted in descram */ - outb(PAR97_POWER | PAR96_PTT, LPT_DATA(dev)); + pp->ops->write_data(pp, PAR97_POWER | PAR96_PTT); descx ^= ((descx >> PAR96_DESCRAM_TAPSH1) ^ (descx >> PAR96_DESCRAM_TAPSH2)); data >>= 1; if (!(descx & 1)) data |= 0x8000; - outb(PAR97_POWER | PAR96_PTT | PAR96_BURST, LPT_DATA(dev)); + pp->ops->write_data(pp, PAR97_POWER | PAR96_PTT | PAR96_BURST); } hdlcdrv_putbits(&bc->hdrv, data); /* @@ -272,7 +268,7 @@ bc->modem.par96.dcd_count -= 2; hdlcdrv_setdcd(&bc->hdrv, bc->modem.par96.dcd_count > 0); } else { - hdlcdrv_setdcd(&bc->hdrv, !!(inb(LPT_STATUS(dev)) & PAR96_DCD)); + hdlcdrv_setdcd(&bc->hdrv, !!(pp->ops->read_status(pp) & PAR96_DCD)); } } @@ -353,13 +349,12 @@ parport_unregister_device(bc->pdev); return -EBUSY; } + pp = bc->pdev->port; dev->irq = pp->irq; - /* bc->pdev->port->ops->change_mode(bc->pdev->port, PARPORT_MODE_PCSPP); not yet implemented */ + pp->ops->data_forward(pp); bc->hdrv.par.bitrate = 9600; - /* switch off PTT */ - outb(PAR96_PTT | PAR97_POWER, LPT_DATA(dev)); - /*bc->pdev->port->ops->enable_irq(bc->pdev->port); not yet implemented */ - outb(LPT_IRQ_ENABLE, LPT_CONTROL(dev)); + pp->ops->write_data(pp, PAR96_PTT | PAR97_POWER); /* switch off PTT */ + pp->ops->enable_irq(pp); printk(KERN_INFO "%s: par96 at iobase 0x%lx irq %u options 0x%x\n", bc_drvname, dev->base_addr, dev->irq, bc->options); MOD_INC_USE_COUNT; @@ -371,14 +366,15 @@ static int par96_close(struct net_device *dev) { struct baycom_state *bc = (struct baycom_state *)dev->priv; + struct parport *pp; if (!dev || !bc) return -EINVAL; + pp = bc->pdev->port; /* disable interrupt */ - outb(0, LPT_CONTROL(dev)); - /*bc->pdev->port->ops->disable_irq(bc->pdev->port); not yet implemented */ + pp->ops->disable_irq(pp); /* switch off PTT */ - outb(PAR96_PTT | PAR97_POWER, LPT_DATA(dev)); + pp->ops->write_data(pp, PAR96_PTT | PAR97_POWER); parport_release(bc->pdev); parport_unregister_device(bc->pdev); printk(KERN_INFO "%s: close par96 at iobase 0x%lx irq %u\n", @@ -449,7 +445,7 @@ return 0; case HDLCDRVCTL_SETMODE: - if (dev->start || !suser()) + if (test_bit(LINK_STATE_START, &dev->state) || !suser()) return -EACCES; hi->data.modename[sizeof(hi->data.modename)-1] = '\0'; return baycom_setmode(bc, hi->data.modename); diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/baycom_ser_fdx.c linux/drivers/net/hamradio/baycom_ser_fdx.c --- v2.3.43/linux/drivers/net/hamradio/baycom_ser_fdx.c Mon Oct 4 15:49:29 1999 +++ linux/drivers/net/hamradio/baycom_ser_fdx.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * baycom_ser_fdx.c -- baycom ser12 fullduplex radio modem driver. * - * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Copyright (C) 1996-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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 @@ -55,16 +55,17 @@ * * * History: - * 0.1 26.06.96 Adapted from baycom.c and made network driver interface - * 18.10.96 Changed to new user space access routines (copy_{to,from}_user) - * 0.3 26.04.97 init code/data tagged - * 0.4 08.07.97 alternative ser12 decoding algorithm (uses delta CTS ints) - * 0.5 11.11.97 ser12/par96 split into separate files - * 0.6 24.01.98 Thorsten Kranzkowski, dl8bcu and Thomas Sailer: - * reduced interrupt load in transmit case - * reworked receiver - * 0.7 03.08.99 adapt to Linus' new __setup/__initcall - * 0.8 10.08.99 use module_init/module_exit + * 0.1 26.06.1996 Adapted from baycom.c and made network driver interface + * 18.10.1996 Changed to new user space access routines (copy_{to,from}_user) + * 0.3 26.04.1997 init code/data tagged + * 0.4 08.07.1997 alternative ser12 decoding algorithm (uses delta CTS ints) + * 0.5 11.11.1997 ser12/par96 split into separate files + * 0.6 24.01.1998 Thorsten Kranzkowski, dl8bcu and Thomas Sailer: + * reduced interrupt load in transmit case + * reworked receiver + * 0.7 03.08.1999 adapt to Linus' new __setup/__initcall + * 0.8 10.08.1999 use module_init/module_exit + * 0.9 12.02.2000 adapted to softnet driver interface */ /*****************************************************************************/ @@ -86,8 +87,8 @@ /* --------------------------------------------------------------------- */ static const char bc_drvname[] = "baycom_ser_fdx"; -static const char bc_drvinfo[] = KERN_INFO "baycom_ser_fdx: (C) 1996-1999 Thomas Sailer, HB9JNX/AE4WA\n" -KERN_INFO "baycom_ser_fdx: version 0.7 compiled " __TIME__ " " __DATE__ "\n"; +static const char bc_drvinfo[] = KERN_INFO "baycom_ser_fdx: (C) 1996-2000 Thomas Sailer, HB9JNX/AE4WA\n" +KERN_INFO "baycom_ser_fdx: version 0.9 compiled " __TIME__ " " __DATE__ "\n"; /* --------------------------------------------------------------------- */ @@ -554,7 +555,7 @@ return 0; case HDLCDRVCTL_SETMODE: - if (dev->start || !suser()) + if (test_bit(LINK_STATE_START, &dev->state) || !suser()) return -EACCES; hi->data.modename[sizeof(hi->data.modename)-1] = '\0'; return baycom_setmode(bc, hi->data.modename); diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/baycom_ser_hdx.c linux/drivers/net/hamradio/baycom_ser_hdx.c --- v2.3.43/linux/drivers/net/hamradio/baycom_ser_hdx.c Mon Oct 4 15:49:29 1999 +++ linux/drivers/net/hamradio/baycom_ser_hdx.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * baycom_ser_hdx.c -- baycom ser12 halfduplex radio modem driver. * - * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Copyright (C) 1996-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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 @@ -47,14 +47,15 @@ * * * History: - * 0.1 26.06.96 Adapted from baycom.c and made network driver interface - * 18.10.96 Changed to new user space access routines (copy_{to,from}_user) - * 0.3 26.04.97 init code/data tagged - * 0.4 08.07.97 alternative ser12 decoding algorithm (uses delta CTS ints) - * 0.5 11.11.97 ser12/par96 split into separate files - * 0.6 14.04.98 cleanups - * 0.7 03.08.99 adapt to Linus' new __setup/__initcall - * 0.8 10.08.99 use module_init/module_exit + * 0.1 26.06.1996 Adapted from baycom.c and made network driver interface + * 18.10.1996 Changed to new user space access routines (copy_{to,from}_user) + * 0.3 26.04.1997 init code/data tagged + * 0.4 08.07.1997 alternative ser12 decoding algorithm (uses delta CTS ints) + * 0.5 11.11.1997 ser12/par96 split into separate files + * 0.6 14.04.1998 cleanups + * 0.7 03.08.1999 adapt to Linus' new __setup/__initcall + * 0.8 10.08.1999 use module_init/module_exit + * 0.9 12.02.2000 adapted to softnet driver interface */ /*****************************************************************************/ @@ -76,8 +77,8 @@ /* --------------------------------------------------------------------- */ static const char bc_drvname[] = "baycom_ser_hdx"; -static const char bc_drvinfo[] = KERN_INFO "baycom_ser_hdx: (C) 1996-1999 Thomas Sailer, HB9JNX/AE4WA\n" -KERN_INFO "baycom_ser_hdx: version 0.7 compiled " __TIME__ " " __DATE__ "\n"; +static const char bc_drvinfo[] = KERN_INFO "baycom_ser_hdx: (C) 1996-2000 Thomas Sailer, HB9JNX/AE4WA\n" +KERN_INFO "baycom_ser_hdx: version 0.9 compiled " __TIME__ " " __DATE__ "\n"; /* --------------------------------------------------------------------- */ @@ -597,7 +598,7 @@ return 0; case HDLCDRVCTL_SETMODE: - if (dev->start || !suser()) + if (test_bit(LINK_STATE_START, &dev->state) || !suser()) return -EACCES; hi->data.modename[sizeof(hi->data.modename)-1] = '\0'; return baycom_setmode(bc, hi->data.modename); diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/hdlcdrv.c linux/drivers/net/hamradio/hdlcdrv.c --- v2.3.43/linux/drivers/net/hamradio/hdlcdrv.c Wed Aug 18 11:38:50 1999 +++ linux/drivers/net/hamradio/hdlcdrv.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * hdlcdrv.c -- HDLC packet radio network driver. * - * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Copyright (C) 1996-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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 @@ -27,16 +27,17 @@ * Written 1993-94 by Donald Becker. * * History: - * 0.1 21.09.96 Started - * 18.10.96 Changed to new user space access routines - * (copy_{to,from}_user) - * 0.2 21.11.96 various small changes - * 0.3 03.03.97 fixed (hopefully) IP not working with ax.25 as a module - * 0.4 16.04.97 init code/data tagged - * 0.5 30.07.97 made HDLC buffers bigger (solves a problem with the - * soundmodem driver) - * 0.6 05.04.98 add spinlocks - * 0.7 03.08.99 removed some old compatibility cruft + * 0.1 21.09.1996 Started + * 18.10.1996 Changed to new user space access routines + * (copy_{to,from}_user) + * 0.2 21.11.1996 various small changes + * 0.3 03.03.1997 fixed (hopefully) IP not working with ax.25 as a module + * 0.4 16.04.1997 init code/data tagged + * 0.5 30.07.1997 made HDLC buffers bigger (solves a problem with the + * soundmodem driver) + * 0.6 05.04.1998 add spinlocks + * 0.7 03.08.1999 removed some old compatibility cruft + * 0.8 12.02.2000 adapted to softnet driver interface */ /*****************************************************************************/ @@ -366,20 +367,16 @@ clear_bit(0, &s->hdlctx.in_hdlc_tx); return; } - if (!(skb = skb_dequeue(&s->send_queue))) { - int flgs = tenms_to_2flags - (s, s->ch_params.tx_tail); + if (!(skb = s->skb)) { + int flgs = tenms_to_2flags(s, s->ch_params.tx_tail); if (flgs < 2) flgs = 2; s->hdlctx.tx_state = 1; s->hdlctx.numflags = flgs; break; } - if (skb->data[0] != 0) { - do_kiss_params(s, skb->data, skb->len); - dev_kfree_skb(skb); - break; - } + s->skb = NULL; + netif_wake_queue(dev); pkt_len = skb->len-1; /* strip KISS byte */ if (pkt_len >= HDLCDRV_MAXFLEN || pkt_len < 2) { s->hdlctx.tx_state = 0; @@ -454,8 +451,7 @@ void hdlcdrv_arbitrate(struct net_device *dev, struct hdlcdrv_state *s) { - if (!s || s->magic != HDLCDRV_MAGIC || s->hdlctx.ptt || - skb_queue_empty(&s->send_queue)) + if (!s || s->magic != HDLCDRV_MAGIC || s->hdlctx.ptt || !s->skb) return; if (s->ch_params.fulldup) { start_tx(dev, s); @@ -499,8 +495,15 @@ if (hdlcdrv_paranoia_check(dev, "hdlcdrv_send_packet")) return 0; sm = (struct hdlcdrv_state *)dev->priv; - skb_queue_tail(&sm->send_queue, skb); - dev->trans_start = jiffies; + if (skb->data[0] != 0) { + do_kiss_params(sm, skb->data, skb->len); + dev_kfree_skb(skb); + return 0; + } + if (sm->skb) + return -1; + netif_stop_queue(dev); + sm->skb = skb; return 0; } @@ -550,12 +553,9 @@ return -EINVAL; s = (struct hdlcdrv_state *)dev->priv; - if (dev->start) - return 0; if (!s->ops || !s->ops->open) return -ENODEV; - dev->start = 1; /* * initialise some variables */ @@ -573,14 +573,9 @@ s->hdlctx.calibrate = 0; i = s->ops->open(dev); - if (i) { - dev->start = 0; + if (i) return i; - } - - dev->tbusy = 0; - dev->interrupt = 0; - + netif_start_queue(dev); return 0; } @@ -592,23 +587,17 @@ static int hdlcdrv_close(struct net_device *dev) { struct hdlcdrv_state *s; - struct sk_buff *skb; int i = 0; if (hdlcdrv_paranoia_check(dev, "hdlcdrv_close")) return -EINVAL; s = (struct hdlcdrv_state *)dev->priv; - if (!dev->start) - return 0; - dev->start = 0; - dev->tbusy = 1; - if (s->ops && s->ops->close) i = s->ops->close(dev); - /* Free any buffers left in the hardware transmit queue */ - while ((skb = skb_dequeue(&s->send_queue))) - dev_kfree_skb(skb); + if (s->skb) + dev_kfree_skb(s->skb); + s->skb = NULL; return i; } @@ -667,7 +656,7 @@ break; case HDLCDRVCTL_SETMODEMPAR: - if ((!suser()) || dev->start) + if ((!suser()) || test_bit(LINK_STATE_START, &dev->state)) return -EACCES; dev->base_addr = bi.data.mp.iobase; dev->irq = bi.data.mp.irq; @@ -801,10 +790,9 @@ dev->get_stats = hdlcdrv_get_stats; /* Fill in the fields of the device structure */ - dev_init_buffers(dev); - skb_queue_head_init(&s->send_queue); + s->skb = NULL; #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) dev->hard_header = ax25_encapsulate; @@ -821,6 +809,7 @@ dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ memcpy(dev->broadcast, ax25_bcast, AX25_ADDR_LEN); memcpy(dev->dev_addr, ax25_nocall, AX25_ADDR_LEN); + dev->tx_queue_len = 16; /* New style flags */ dev->flags = 0; @@ -857,8 +846,6 @@ dev->name = s->ifname; dev->if_port = 0; dev->init = hdlcdrv_probe; - dev->start = 0; - dev->tbusy = 1; dev->base_addr = baseaddr; dev->irq = irq; dev->dma = dma; @@ -884,7 +871,7 @@ return -EINVAL; if (s->magic != HDLCDRV_MAGIC) return -EINVAL; - if (dev->start && s->ops->close) + if (s->ops->close) s->ops->close(dev); unregister_netdev(dev); kfree(s); @@ -911,8 +898,8 @@ int __init init_module(void) { - printk(KERN_INFO "hdlcdrv: (C) 1996 Thomas Sailer HB9JNX/AE4WA\n"); - printk(KERN_INFO "hdlcdrv: version 0.7 compiled " __TIME__ " " __DATE__ "\n"); + printk(KERN_INFO "hdlcdrv: (C) 1996-2000 Thomas Sailer HB9JNX/AE4WA\n"); + printk(KERN_INFO "hdlcdrv: version 0.8 compiled " __TIME__ " " __DATE__ "\n"); return 0; } diff -u --recursive --new-file v2.3.43/linux/drivers/net/hamradio/soundmodem/sm.c linux/drivers/net/hamradio/soundmodem/sm.c --- v2.3.43/linux/drivers/net/hamradio/soundmodem/sm.c Fri Oct 22 13:21:49 1999 +++ linux/drivers/net/hamradio/soundmodem/sm.c Sat Feb 12 09:50:29 2000 @@ -3,7 +3,7 @@ /* * sm.c -- soundcard radio modem driver. * - * Copyright (C) 1996-1999 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Copyright (C) 1996-2000 Thomas Sailer (sailer@ife.ee.ethz.ch) * * 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 @@ -34,17 +34,18 @@ * * * History: - * 0.1 21.09.96 Started - * 18.10.96 Changed to new user space access routines (copy_{to,from}_user) - * 0.4 21.01.97 Separately compileable soundcard/modem modules - * 0.5 03.03.97 fixed LPT probing (check_lpt result was interpreted the wrong way round) - * 0.6 16.04.97 init code/data tagged - * 0.7 30.07.97 fixed halfduplex interrupt handlers/hotfix for CS423X - * 0.8 14.04.98 cleanups - * 0.9 03.08.99 adapt to Linus' new __setup/__initcall - * use parport lowlevel drivers instead of directly writing to a parallel port - * removed some pre-2.2 kernel compatibility cruft - * 0.10 10.08.99 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.1 21.09.1996 Started + * 18.10.1996 Changed to new user space access routines (copy_{to,from}_user) + * 0.4 21.01.1997 Separately compileable soundcard/modem modules + * 0.5 03.03.1997 fixed LPT probing (check_lpt result was interpreted the wrong way round) + * 0.6 16.04.1997 init code/data tagged + * 0.7 30.07.1997 fixed halfduplex interrupt handlers/hotfix for CS423X + * 0.8 14.04.1998 cleanups + * 0.9 03.08.1999 adapt to Linus' new __setup/__initcall + * use parport lowlevel drivers instead of directly writing to a parallel port + * removed some pre-2.2 kernel compatibility cruft + * 0.10 10.08.1999 Check if parport can do SPP and is safe to access during interrupt contexts + * 0.11 12.02.2000 adapted to softnet driver interface */ /*****************************************************************************/ @@ -63,8 +64,8 @@ /* --------------------------------------------------------------------- */ /*static*/ const char sm_drvname[] = "soundmodem"; -static const char sm_drvinfo[] = KERN_INFO "soundmodem: (C) 1996-1999 Thomas Sailer, HB9JNX/AE4WA\n" -KERN_INFO "soundmodem: version 0.9 compiled " __TIME__ " " __DATE__ "\n"; +static const char sm_drvinfo[] = KERN_INFO "soundmodem: (C) 1996-2000 Thomas Sailer, HB9JNX/AE4WA\n" +KERN_INFO "soundmodem: version 0.11 compiled " __TIME__ " " __DATE__ "\n"; /* --------------------------------------------------------------------- */ @@ -508,7 +509,7 @@ return 0; case HDLCDRVCTL_SETMODE: - if (dev->start || !suser()) + if (test_bit(LINK_STATE_START, &dev->state) || !suser()) return -EACCES; hi->data.modename[sizeof(hi->data.modename)-1] = '\0'; return sethw(dev, sm, hi->data.modename); diff -u --recursive --new-file v2.3.43/linux/drivers/net/irda/irport.c linux/drivers/net/irda/irport.c --- v2.3.43/linux/drivers/net/irda/irport.c Tue Feb 1 01:35:44 2000 +++ linux/drivers/net/irda/irport.c Thu Feb 10 17:07:18 2000 @@ -85,6 +85,7 @@ static int irport_raw_write(struct net_device *dev, __u8 *buf, int len); static struct net_device_stats *irport_net_get_stats(struct net_device *dev); static int irport_change_speed_complete(struct irda_task *task); +static void irport_timeout(struct net_device *dev); EXPORT_SYMBOL(irport_open); EXPORT_SYMBOL(irport_close); @@ -92,6 +93,7 @@ EXPORT_SYMBOL(irport_stop); EXPORT_SYMBOL(irport_interrupt); EXPORT_SYMBOL(irport_hard_xmit); +EXPORT_SYMBOL(irport_timeout); EXPORT_SYMBOL(irport_change_speed); EXPORT_SYMBOL(irport_net_open); EXPORT_SYMBOL(irport_net_close); @@ -227,6 +229,8 @@ /* Override the network functions we need to use */ dev->init = irport_net_init; dev->hard_start_xmit = irport_hard_xmit; + dev->tx_timeout = irport_timeout; + dev->watchdog_timeo = HZ/20; dev->open = irport_net_open; dev->stop = irport_net_close; dev->get_stats = irport_net_get_stats; @@ -505,16 +509,11 @@ NULL, (void *) self->new_speed); self->new_speed = 0; } else { - self->netdev->tbusy = 0; /* Unlock */ - /* Tell network layer that we want more frames */ - mark_bh(NET_BH); + netif_wake_queue(self->netdev); } self->stats.tx_packets++; - /* Schedule network layer, so we can get some more frames */ - mark_bh(NET_BH); - /* * Reset Rx FIFO to make sure that all reflected transmit data * is discarded. This is needed for half duplex operation @@ -577,16 +576,37 @@ ASSERT(self->netdev != NULL, return -1;); /* Finished changing speed, so we are not busy any longer */ - self->netdev->tbusy = 0; - /* Signal network layer so it can try to send the frame */ - mark_bh(NET_BH); + netif_wake_queue(self->netdev); + return 0; } /* - * Function irport_xmit (void) + * Function irport_timeout (struct net_device *dev) + * + * The networking layer thinks we timed out. + * + */ + +static void irport_timeout(struct net_device *dev) +{ + struct irport_cb *self; + int iobase; + + self = (struct irport_cb *) dev->priv; + iobase = self->io.sir_base; + + WARNING("%s: transmit timed out\n", dev->name); + irport_start(self); + self->change_speed(self->priv, self->io.speed); + dev->trans_start = jiffies; + netif_wake_queue(dev); +} + +/* + * Function irport_hard_start_xmit (struct sk_buff *skb, struct net_device *dev) * * Transmits the current frame until FIFO is full, then * waits until the next transmitt interrupt, and continues until the @@ -606,19 +626,8 @@ iobase = self->io.sir_base; - /* Lock transmit buffer */ - if (irda_lock((void *) &dev->tbusy) == FALSE) { - int tickssofar = jiffies - dev->trans_start; - if ((tickssofar < 5) || !dev->start) - return -EBUSY; - - WARNING("%s: transmit timed out\n", dev->name); - irport_start(self); - self->change_speed(self->priv, self->io.speed); - - dev->trans_start = jiffies; - } - + netif_stop_queue(dev); + /* Check if we need to change the speed */ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; @@ -696,8 +705,6 @@ spin_lock(&self->lock); - dev->interrupt = 1; - iobase = self->io.sir_base; iir = inb(iobase+UART_IIR) & UART_IIR_ID; @@ -733,8 +740,6 @@ iir = inb(iobase + UART_IIR) & UART_IIR_ID; } - dev->interrupt = 0; - spin_unlock(&self->lock); } @@ -770,10 +775,6 @@ irport_start(self); - /* Ready to play! */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; /* * Open new IrLAP layer instance, now that everything should be @@ -782,7 +783,10 @@ self->irlap = irlap_open(dev, &self->qos); /* FIXME: change speed of dongle */ + /* Ready to play! */ + netif_start_queue(dev); + MOD_INC_USE_COUNT; return 0; @@ -809,9 +813,8 @@ iobase = self->io.sir_base; /* Stop device */ - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Stop and remove instance of IrLAP */ if (self->irlap) irlap_close(self->irlap); diff -u --recursive --new-file v2.3.43/linux/drivers/net/irda/irtty.c linux/drivers/net/irda/irtty.c --- v2.3.43/linux/drivers/net/irda/irtty.c Tue Feb 1 01:35:44 2000 +++ linux/drivers/net/irda/irtty.c Thu Feb 10 17:07:18 2000 @@ -615,11 +615,9 @@ ASSERT(self->netdev != NULL, return -1;); /* Finished changing speed, so we are not busy any longer */ - self->netdev->tbusy = 0; - /* Signal network layer so it can try to send the frame */ - mark_bh(NET_BH); - + netif_wake_queue(self->netdev); + return 0; } @@ -639,9 +637,8 @@ ASSERT(self != NULL, return 0;); /* Lock transmit buffer */ - if (irda_lock((void *) &dev->tbusy) == FALSE) - return -EBUSY; - + netif_stop_queue(dev); + /* Check if we need to change the speed */ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; @@ -727,10 +724,8 @@ NULL, (void *) self->new_speed); self->new_speed = 0; } else { - self->netdev->tbusy = 0; /* Unlock */ - /* Tell network layer that we want more frames */ - mark_bh(NET_BH); + netif_wake_queue(self->netdev); } } } @@ -899,10 +894,8 @@ IRDA_DEBUG(0, __FUNCTION__ "()\n"); /* Ready to play! */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); + /* Make sure we can receive more data */ irtty_stop_receiver(self, FALSE); @@ -928,9 +921,8 @@ irtty_stop_receiver(self, TRUE); /* Stop device */ - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Stop and remove instance of IrLAP */ if (self->irlap) irlap_close(self->irlap); diff -u --recursive --new-file v2.3.43/linux/drivers/net/irda/nsc-ircc.c linux/drivers/net/irda/nsc-ircc.c --- v2.3.43/linux/drivers/net/irda/nsc-ircc.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/irda/nsc-ircc.c Thu Feb 10 17:07:18 2000 @@ -1033,8 +1033,6 @@ switch_bank(iobase, BANK2); outb(EXCR2_RFSIZ|EXCR2_TFSIZ, iobase+EXCR2); - self->netdev->tbusy = 0; - /* Enable some interrupts so we can receive frames */ switch_bank(iobase, BANK0); if (speed > 115200) { @@ -1050,6 +1048,8 @@ /* Restore BSR */ outb(bank, iobase+BSR); + netif_wake_queue(dev); + } /* @@ -1072,10 +1072,8 @@ iobase = self->io.fir_base; - /* Lock transmit buffer */ - if (irda_lock((void *) &dev->tbusy) == FALSE) - return -EBUSY; - + netif_stop_queue(dev); + /* Check if we need to change the speed */ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; @@ -1118,10 +1116,8 @@ self = (struct nsc_ircc_cb *) dev->priv; iobase = self->io.fir_base; - /* Lock transmit buffer */ - if (irda_lock((void *) &dev->tbusy) == FALSE) - return -EBUSY; - + netif_stop_queue(dev); + /* Check if we need to change the speed */ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; @@ -1199,7 +1195,7 @@ out: /* Not busy transmitting anymore if window is not full */ if (self->tx_fifo.free < MAX_TX_WINDOW) - dev->tbusy = 0; + netif_wake_queue(self->netdev); /* Restore bank register */ outb(bank, iobase+BSR); @@ -1347,10 +1343,8 @@ /* Make sure we have room for more frames */ if (self->tx_fifo.free < MAX_TX_WINDOW) { /* Not busy transmitting anymore */ - self->netdev->tbusy = 0; - /* Tell the network layer, that we can accept more frames */ - mark_bh(NET_BH); + netif_wake_queue(self->netdev); } /* Restore bank */ @@ -1601,11 +1595,9 @@ if (self->tx_buff.len > 0) self->ier = IER_TXLDL_IE; else { - self->netdev->tbusy = 0; /* Unlock */ - self->stats.tx_packets++; - - mark_bh(NET_BH); + self->stats.tx_packets++; + netif_wakeup_queue(self->netdev); self->ier = IER_TXEMP_IE; } @@ -1731,7 +1723,6 @@ self = (struct nsc_ircc_cb *) dev->priv; spin_lock(&self->lock); - dev->interrupt = 1; iobase = self->io.fir_base; @@ -1754,7 +1745,6 @@ outb(self->ier, iobase+IER); /* Restore interrupts */ outb(bsr, iobase+BSR); /* Restore bank register */ - dev->interrupt = 0; spin_unlock(&self->lock); } @@ -1860,10 +1850,9 @@ outb(bank, iobase+BSR); /* Ready to play! */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue(dev); + /* * Open new IrLAP layer instance, now that everything should be * initialized properly @@ -1895,9 +1884,8 @@ ASSERT(self != NULL, return 0;); /* Stop device */ - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Stop and remove instance of IrLAP */ if (self->irlap) irlap_close(self->irlap); diff -u --recursive --new-file v2.3.43/linux/drivers/net/irda/toshoboe.c linux/drivers/net/irda/toshoboe.c --- v2.3.43/linux/drivers/net/irda/toshoboe.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/irda/toshoboe.c Thu Feb 10 17:07:18 2000 @@ -275,6 +275,8 @@ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; + netif_stop_queue(dev); + if (self->stopped) { dev_kfree_skb(skb); return 0; @@ -318,17 +320,14 @@ self->txpending++; - /*FIXME: ask about tbusy,media_busy stuff, for the moment */ - /*tbusy means can't queue any more */ + /*FIXME: ask about busy,media_busy stuff, for the moment */ + /*busy means can't queue any more */ #ifndef ONETASK - if (self->txpending == TX_SLOTS) - { -#else + if (self->txpending != TX_SLOTS) { -#endif - if (irda_lock ((void *) &dev->tbusy) == FALSE) - return -EBUSY; + netif_wake_queue(dev); } +#endif outb_p (0x80, OBOE_RST); outb_p (1, OBOE_REG_9); @@ -379,10 +378,8 @@ self->new_speed = 0; } - self->netdev->tbusy = 0; /* Unlock */ - /* Tell network layer that we want more frames */ - mark_bh(NET_BH); + netif_wake_queue(self->netdev); } if (irqstat & OBOE_ISR_RXDONE) @@ -529,10 +526,7 @@ toshoboe_initptrs (self); /* Ready to play! */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); /* * Open new IrLAP layer instance, now that everything should be * initialized properly @@ -559,9 +553,8 @@ self = (struct toshoboe_cb *) dev->priv; /* Stop device */ - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Stop and remove instance of IrLAP */ if (self->irlap) irlap_close(self->irlap); @@ -926,11 +919,7 @@ toshoboe_initptrs (self); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - self->stopped = 0; - + netif_wake_queue(self->netdev); restore_flags (flags); printk (KERN_WARNING "ToshOboe: waking up\n"); diff -u --recursive --new-file v2.3.43/linux/drivers/net/irda/w83977af_ir.c linux/drivers/net/irda/w83977af_ir.c --- v2.3.43/linux/drivers/net/irda/w83977af_ir.c Tue Feb 1 01:35:44 2000 +++ linux/drivers/net/irda/w83977af_ir.c Thu Feb 10 17:07:18 2000 @@ -475,8 +475,8 @@ outb(UFR_EN_FIFO, iobase+UFR); /* First we must enable FIFO */ outb(0xa7, iobase+UFR); - self->netdev->tbusy = 0; - + netif_wake_queue(self->netdev); + /* Enable some interrupts so we can receive frames */ switch_bank(iobase, SET0); if (speed > PIO_MAX_SPEED) { @@ -511,9 +511,8 @@ (int) skb->len); /* Lock transmit buffer */ - if (irda_lock((void *) &dev->tbusy) == FALSE) - return -EBUSY; - + netif_stop_queue(dev); + /* Check if we need to change the speed */ if ((speed = irda_get_speed(skb)) != self->io.speed) self->new_speed = speed; @@ -715,11 +714,9 @@ } /* Unlock tx_buff and request another frame */ - self->netdev->tbusy = 0; /* Unlock */ - /* Tell the network layer, that we want more frames */ - mark_bh(NET_BH); - + netif_wake_queue(self->netdev); + /* Restore set */ outb(set, iobase+SSR); } @@ -991,12 +988,10 @@ outb(AUDR_SFEND, iobase+AUDR); outb(set, iobase+SSR); - self->netdev->tbusy = 0; /* Unlock */ self->stats.tx_packets++; - /* Schedule network layer */ - mark_bh(NET_BH); - + /* Feed me more packets */ + netif_wake_queue(self->netdev); new_icr |= ICR_ETBREI; } } @@ -1124,8 +1119,6 @@ } self = (struct w83977af_ir *) dev->priv; - dev->interrupt = 1; - iobase = self->io.fir_base; /* Save current bank */ @@ -1148,7 +1141,6 @@ outb(icr, iobase+ICR); /* Restore (new) interrupts */ outb(set, iobase+SSR); /* Restore bank register */ - self->netdev->interrupt = 0; } /* @@ -1250,10 +1242,8 @@ outb(set, iobase+SSR); /* Ready to play! */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); + /* * Open new IrLAP layer instance, now that everything should be * initialized properly @@ -1288,9 +1278,8 @@ iobase = self->io.fir_base; /* Stop device */ - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + /* Stop and remove instance of IrLAP */ if (self->irlap) irlap_close(self->irlap); diff -u --recursive --new-file v2.3.43/linux/drivers/net/lance.c linux/drivers/net/lance.c --- v2.3.43/linux/drivers/net/lance.c Fri Jan 21 18:19:16 2000 +++ linux/drivers/net/lance.c Fri Feb 11 08:25:33 2000 @@ -195,6 +195,8 @@ #define LANCE_BUS_IF 0x16 #define LANCE_TOTAL_SIZE 0x18 +#define TX_TIMEOUT 20 + /* The LANCE Rx and Tx ring descriptors. */ struct lance_rx_head { s32 base; @@ -237,7 +239,7 @@ struct net_device_stats stats; unsigned char chip_version; /* See lance_chip_type. */ char tx_full; - unsigned long lock; + spinlock_t devlock; }; #define LANCE_MUST_PAD 0x00000001 @@ -296,6 +298,7 @@ static int lance_close(struct net_device *dev); static struct net_device_stats *lance_get_stats(struct net_device *dev); static void set_multicast_list(struct net_device *dev); +static void lance_tx_timeout (struct net_device *dev); @@ -518,6 +521,7 @@ lp->tx_bounce_buffs = NULL; lp->chip_version = lance_version; + lp->devlock = SPIN_LOCK_UNLOCKED; lp->init_block.mode = 0x0003; /* Disable Rx and Tx. */ for (i = 0; i < 6; i++) @@ -676,6 +680,8 @@ dev->stop = lance_close; dev->get_stats = lance_get_stats; dev->set_multicast_list = set_multicast_list; + dev->tx_timeout = lance_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; return 0; } @@ -747,9 +753,8 @@ outw(0x0000, ioaddr+LANCE_ADDR); outw(0x0001, ioaddr+LANCE_DATA); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; + netif_start_queue (dev); + i = 0; while (i++ < 100) if (inw(ioaddr+LANCE_DATA) & 0x0100) @@ -801,7 +806,7 @@ struct lance_private *lp = (struct lance_private *)dev->priv; int i; - lp->lock = 0, lp->tx_full = 0; + lp->tx_full = 0; lp->cur_rx = lp->cur_tx = 0; lp->dirty_rx = lp->dirty_tx = 0; @@ -852,48 +857,47 @@ outw(csr0_bits, dev->base_addr + LANCE_DATA); } -static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev) + +static void lance_tx_timeout (struct net_device *dev) { - struct lance_private *lp = (struct lance_private *)dev->priv; + struct lance_private *lp = (struct lance_private *) dev->priv; int ioaddr = dev->base_addr; - int entry; - unsigned long flags; - /* Transmitter timeout, serious problems. */ - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 20) - return 1; - outw(0, ioaddr+LANCE_ADDR); - printk("%s: transmit timed out, status %4.4x, resetting.\n", - dev->name, inw(ioaddr+LANCE_DATA)); - outw(0x0004, ioaddr+LANCE_DATA); - lp->stats.tx_errors++; + outw (0, ioaddr + LANCE_ADDR); + printk ("%s: transmit timed out, status %4.4x, resetting.\n", + dev->name, inw (ioaddr + LANCE_DATA)); + outw (0x0004, ioaddr + LANCE_DATA); + lp->stats.tx_errors++; #ifndef final_version - { - int i; - printk(" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.", - lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "", - lp->cur_rx); - for (i = 0 ; i < RX_RING_SIZE; i++) - printk("%s %08x %04x %04x", i & 0x3 ? "" : "\n ", - lp->rx_ring[i].base, -lp->rx_ring[i].buf_length, - lp->rx_ring[i].msg_length); - for (i = 0 ; i < TX_RING_SIZE; i++) - printk("%s %08x %04x %04x", i & 0x3 ? "" : "\n ", - lp->tx_ring[i].base, -lp->tx_ring[i].length, - lp->tx_ring[i].misc); - printk("\n"); - } + { + int i; + printk (" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.", + lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "", + lp->cur_rx); + for (i = 0; i < RX_RING_SIZE; i++) + printk ("%s %08x %04x %04x", i & 0x3 ? "" : "\n ", + lp->rx_ring[i].base, -lp->rx_ring[i].buf_length, + lp->rx_ring[i].msg_length); + for (i = 0; i < TX_RING_SIZE; i++) + printk ("%s %08x %04x %04x", i & 0x3 ? "" : "\n ", + lp->tx_ring[i].base, -lp->tx_ring[i].length, + lp->tx_ring[i].misc); + printk ("\n"); + } #endif - lance_restart(dev, 0x0043, 1); + lance_restart (dev, 0x0043, 1); - dev->tbusy=0; - dev->trans_start = jiffies; + dev->trans_start = jiffies; + netif_start_queue (dev); +} - return 0; - } +static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct lance_private *lp = (struct lance_private *)dev->priv; + int ioaddr = dev->base_addr; + int entry; + unsigned long flags; if (lance_debug > 3) { outw(0x0000, ioaddr+LANCE_ADDR); printk("%s: lance_start_xmit() called, csr0 %4.4x.\n", dev->name, @@ -901,20 +905,8 @@ outw(0x0000, ioaddr+LANCE_DATA); } - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk("%s: Transmitter access conflict.\n", dev->name); - return 1; - } - - if (test_and_set_bit(0, (void*)&lp->lock) != 0) { - if (lance_debug > 0) - printk("%s: tx queue lock!.\n", dev->name); - /* don't clear dev->tbusy flag. */ - return 1; - } - + netif_stop_queue (dev); + /* Fill in a Tx ring entry */ /* Mask to ring buffer boundary. */ @@ -955,14 +947,12 @@ dev->trans_start = jiffies; - save_flags(flags); - cli(); - lp->lock = 0; + spin_lock_irqsave (&lp->devlock, flags); if (lp->tx_ring[(entry+1) & TX_RING_MOD_MASK].base == 0) - dev->tbusy=0; + netif_start_queue (dev); else lp->tx_full = 1; - restore_flags(flags); + spin_unlock_irqrestore (&lp->devlock, flags); return 0; } @@ -983,10 +973,8 @@ ioaddr = dev->base_addr; lp = (struct lance_private *)dev->priv; - if (dev->interrupt) - printk(KERN_WARNING "%s: Re-entering the interrupt handler.\n", dev->name); - - dev->interrupt = 1; + + spin_lock (&lp->devlock); outw(0x00, dev->base_addr + LANCE_ADDR); while ((csr0 = inw(dev->base_addr + LANCE_DATA)) & 0x8600 @@ -1040,7 +1028,7 @@ /* We must free the original skb if it's not a data-only copy in the bounce buffer. */ if (lp->tx_skbuff[entry]) { - dev_kfree_skb(lp->tx_skbuff[entry]); + dev_kfree_skb_irq(lp->tx_skbuff[entry]); lp->tx_skbuff[entry] = 0; } dirty_tx++; @@ -1054,12 +1042,12 @@ } #endif - if (lp->tx_full && dev->tbusy - && dirty_tx > lp->cur_tx - TX_RING_SIZE + 2) { + if (lp->tx_full && + (test_bit(LINK_STATE_XOFF, &dev->flags)) && + dirty_tx > lp->cur_tx - TX_RING_SIZE + 2) { /* The ring is no longer full, clear tbusy. */ lp->tx_full = 0; - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue (dev); } lp->dirty_tx = dirty_tx; @@ -1092,8 +1080,7 @@ dev->name, inw(ioaddr + LANCE_ADDR), inw(dev->base_addr + LANCE_DATA)); - dev->interrupt = 0; - return; + spin_unlock (&lp->devlock); } static int @@ -1181,8 +1168,7 @@ struct lance_private *lp = (struct lance_private *)dev->priv; int i; - dev->start = 0; - dev->tbusy = 1; + netif_stop_queue (dev); if (chip_table[lp->chip_version].flags & LANCE_HAS_MISSED_FRAME) { outw(112, ioaddr+LANCE_ADDR); diff -u --recursive --new-file v2.3.43/linux/drivers/net/mace.c linux/drivers/net/mace.c --- v2.3.43/linux/drivers/net/mace.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/mace.c Fri Feb 11 16:38:27 2000 @@ -445,7 +445,7 @@ if (next >= N_TX_RING) next = 0; if (next == mp->tx_empty) { - dev->tbusy = 1; + netif_stop_queue(dev); mp->tx_fullup = 1; restore_flags(flags); return 1; /* can't take it at the moment */ @@ -480,7 +480,7 @@ if (++next >= N_TX_RING) next = 0; if (next == mp->tx_empty) - dev->tbusy = 1; + netif_stop_queue(dev); restore_flags(flags); return 0; @@ -695,8 +695,7 @@ if (i != mp->tx_empty) { mp->tx_fullup = 0; - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } mp->tx_empty = i; i += mp->tx_active; @@ -765,8 +764,7 @@ mp->tx_empty = i; } mp->tx_fullup = 0; - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); if (i != mp->tx_fill) { cp = mp->tx_cmds + NCMDS_TX * i; out_le16(&cp->xfer_status, 0); diff -u --recursive --new-file v2.3.43/linux/drivers/net/ne2.c linux/drivers/net/ne2.c --- v2.3.43/linux/drivers/net/ne2.c Wed Aug 18 11:36:42 1999 +++ linux/drivers/net/ne2.c Thu Feb 10 14:56:48 2000 @@ -425,9 +425,8 @@ If it does, it's the last thing you'll see */ if (ei_status.dmaing) { printk("%s: DMAing conflict in ne_get_8390_hdr " - "[DMAstat:%d][irqlock:%d][intr:%ld].\n", - dev->name, ei_status.dmaing, ei_status.irqlock, - dev->interrupt); + "[DMAstat:%d][irqlock:%d].\n", + dev->name, ei_status.dmaing, ei_status.irqlock); return; } @@ -468,9 +467,8 @@ If it does, it's the last thing you'll see */ if (ei_status.dmaing) { printk("%s: DMAing conflict in ne_block_input " - "[DMAstat:%d][irqlock:%d][intr:%ld].\n", - dev->name, ei_status.dmaing, ei_status.irqlock, - dev->interrupt); + "[DMAstat:%d][irqlock:%d].\n", + dev->name, ei_status.dmaing, ei_status.irqlock); return; } ei_status.dmaing |= 0x01; @@ -537,9 +535,8 @@ If it does, it's the last thing you'll see */ if (ei_status.dmaing) { printk("%s: DMAing conflict in ne_block_output." - "[DMAstat:%d][irqlock:%d][intr:%ld]\n", - dev->name, ei_status.dmaing, ei_status.irqlock, - dev->interrupt); + "[DMAstat:%d][irqlock:%d]\n", + dev->name, ei_status.dmaing, ei_status.irqlock); return; } ei_status.dmaing |= 0x01; diff -u --recursive --new-file v2.3.43/linux/drivers/net/ni5010.c linux/drivers/net/ni5010.c --- v2.3.43/linux/drivers/net/ni5010.c Thu Feb 10 17:11:10 2000 +++ linux/drivers/net/ni5010.c Fri Feb 11 13:20:53 2000 @@ -106,6 +106,7 @@ static int ni5010_send_packet(struct sk_buff *skb, struct net_device *dev); static void ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs); static void ni5010_rx(struct net_device *dev); +static void ni5010_timeout(struct net_device *dev); static int ni5010_close(struct net_device *dev); static struct net_device_stats *ni5010_get_stats(struct net_device *dev); static void ni5010_set_multicast_list(struct net_device *dev); @@ -320,15 +321,13 @@ dev->stop = ni5010_close; dev->hard_start_xmit = ni5010_send_packet; dev->get_stats = ni5010_get_stats; - dev->set_multicast_list = &ni5010_set_multicast_list; + dev->set_multicast_list = ni5010_set_multicast_list; + dev->tx_timeout = ni5010_timeout; + dev->watchdog_timeo = HZ/20; /* Fill in the fields of the device structure with ethernet values. */ ether_setup(dev); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 0; - dev->flags &= ~IFF_MULTICAST; /* Multicast doesn't work */ /* Shut up the ni5010 */ @@ -403,10 +402,8 @@ outb(0, EDLC_RESET); /* Un-reset the ni5010 */ - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); + if (NI5010_DEBUG) show_registers(dev); MOD_INC_USE_COUNT; @@ -426,42 +423,31 @@ outb(0xff, EDLC_RMASK); /* Enable all rcv interrupts */ } +static void ni5010_timeout(struct net_device *dev) +{ + printk(KERN_WARNING "%s: transmit timed out, %s?\n", dev->name, + tx_done(dev) ? "IRQ conflict" : "network cable problem"); + /* Try to restart the adaptor. */ + /* FIXME: Give it a real kick here */ + chipset_init(dev, 1); + dev->trans_start = jiffies; + netif_wake_queue(dev); +} + static int ni5010_send_packet(struct sk_buff *skb, struct net_device *dev) { + int length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + PRINTK2((KERN_DEBUG "%s: entering ni5010_send_packet\n", dev->name)); - if (dev->tbusy) { - /* - * If we get here, some higher level has decided we are broken. - * There should really be a "kick me" function call instead. - */ - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; - printk("tbusy\n"); - printk(KERN_WARNING "%s: transmit timed out, %s?\n", dev->name, - tx_done(dev) ? "IRQ conflict" : "network cable problem"); - /* Try to restart the adaptor. */ - /* FIXME: Give it a real kick here */ - chipset_init(dev, 1); - dev->tbusy=0; - dev->trans_start = jiffies; - } /* - * Block a timer-based transmit from overlapping. This could better be - * done with atomic_swap(1, dev->tbusy), but test_and_set_bit() works as well. + * Block sending */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk(KERN_WARNING "%s: Transmitter access conflict.\n", dev->name); - return 1; - } else { - int length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - - hardware_send_packet(dev, (unsigned char *)skb->data, length); - dev->trans_start = jiffies; - } + + netif_stop_queue(dev); + hardware_send_packet(dev, (unsigned char *)skb->data, length); + dev->trans_start = jiffies; dev_kfree_skb (skb); - return 0; } @@ -469,23 +455,13 @@ * The typical workload of the driver: * Handle the network interface interrupts. */ -static void -ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static void ni5010_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = dev_id; struct ni5010_local *lp; int ioaddr, status; int xmit_was_error = 0; - if (dev == NULL || dev->irq != irq) { - printk(KERN_WARNING "%s: irq %d for unknown device.\n", - boardname, irq); - return; - } - - if (dev->interrupt) printk(KERN_WARNING "%s: Reentering IRQ-handler!\n", dev->name); - dev->interrupt = 1; - PRINTK2((KERN_DEBUG "%s: entering ni5010_interrupt\n", dev->name)); ioaddr = dev->base_addr; @@ -507,8 +483,6 @@ if (!xmit_was_error) reset_receiver(dev); - - dev->interrupt = 0; return; } @@ -530,8 +504,7 @@ } /* We have a good packet, get it out of the buffer. */ -static void -ni5010_rx(struct net_device *dev) +static void ni5010_rx(struct net_device *dev) { struct ni5010_local *lp = (struct ni5010_local *)dev->priv; int ioaddr = dev->base_addr; @@ -624,8 +597,7 @@ lp->stats.tx_packets++; lp->stats.tx_bytes += lp->o_pkt_size; - dev->tbusy = 0; - mark_bh(NET_BH); /* Inform upper layers. */ + netif_wake_queue(dev); PRINTK2((KERN_DEBUG "%s: sent packet, size=%#4.4x\n", dev->name, lp->o_pkt_size)); @@ -634,8 +606,7 @@ } /* The inverse routine to ni5010_open(). */ -static int -ni5010_close(struct net_device *dev) +static int ni5010_close(struct net_device *dev) { int ioaddr = dev->base_addr; @@ -647,9 +618,8 @@ outb(0, IE_MMODE); outb(RS_RESET, EDLC_RESET); - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + MOD_DEC_USE_COUNT; PRINTK((KERN_DEBUG "%s: %s closed down\n", dev->name, boardname)); return 0; @@ -658,8 +628,7 @@ /* Get the current statistics. This may be called with the card open or closed. */ -static struct net_device_stats * -ni5010_get_stats(struct net_device *dev) +static struct net_device_stats *ni5010_get_stats(struct net_device *dev) { struct ni5010_local *lp = (struct ni5010_local *)dev->priv; @@ -681,8 +650,7 @@ num_addrs > 0 Multicast mode, receive normal and MC packets, and do best-effort filtering. */ -static void -ni5010_set_multicast_list(struct net_device *dev) +static void ni5010_set_multicast_list(struct net_device *dev) { short ioaddr = dev->base_addr; @@ -748,6 +716,8 @@ restore_flags(flags); + netif_wake_queue(dev); + if (NI5010_DEBUG) show_registers(dev); } diff -u --recursive --new-file v2.3.43/linux/drivers/net/ni52.c linux/drivers/net/ni52.c --- v2.3.43/linux/drivers/net/ni52.c Wed Aug 18 11:36:42 1999 +++ linux/drivers/net/ni52.c Fri Feb 11 13:20:53 2000 @@ -199,6 +199,7 @@ static int ni52_send_packet(struct sk_buff *,struct net_device *); static struct net_device_stats *ni52_get_stats(struct net_device *dev); static void set_multicast_list(struct net_device *dev); +static void ni52_timeout(struct net_device *dev); #if 0 static void ni52_dump(struct net_device *,void *); #endif @@ -244,9 +245,7 @@ ni_reset586(); /* the hard way to stop the receiver */ - dev->start = 0; - dev->tbusy = 0; - + netif_stop_queue(dev); MOD_DEC_USE_COUNT; return 0; @@ -269,10 +268,7 @@ return -EAGAIN; } - dev->interrupt = 0; - dev->tbusy = 0; - dev->start = 1; - + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; /* most done by init */ @@ -512,20 +508,18 @@ printk("IRQ %d (assigned and not checked!).\n",dev->irq); } - dev->open = &ni52_open; - dev->stop = &ni52_close; - dev->get_stats = &ni52_get_stats; - dev->hard_start_xmit = &ni52_send_packet; - dev->set_multicast_list = &set_multicast_list; + dev->open = ni52_open; + dev->stop = ni52_close; + dev->get_stats = ni52_get_stats; + dev->tx_timeout = ni52_timeout; + dev->watchdog_timeo = HZ/20; + dev->hard_start_xmit = ni52_send_packet; + dev->set_multicast_list = set_multicast_list; dev->if_port = 0; ether_setup(dev); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 0; - return 0; } @@ -831,8 +825,6 @@ if(debuglevel > 1) printk("I"); - dev->interrupt = 1; - WAIT_4_SCB_CMD(); /* wait for last command */ while((stat=p->scb->cus & STAT_MASK)) @@ -866,7 +858,7 @@ #ifndef NO_NOPCOMMANDS if(stat & STAT_CNA) /* CU went 'not ready' */ { - if(dev->start) + if(test_bit(LINK_STATE_START, &dev->state)) printk("%s: oops! CU has left active state. stat: %04x/%02x.\n",dev->name,(int) stat,(int) p->scb->cus); } #endif @@ -885,8 +877,6 @@ if(debuglevel > 1) printk("i"); - - dev->interrupt = 0; } /******************************************************* @@ -1083,9 +1073,7 @@ if( (++p->xmit_last) == NUM_XMIT_BUFFS) p->xmit_last = 0; #endif - - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue(dev); } /*********************************************************** @@ -1104,6 +1092,40 @@ WAIT_4_SCB_CMD_RUC(); /* wait for accept cmd. (no timeout!!) */ } +static void ni52_timeout(struct net_device *dev) +{ + struct priv *p = (struct priv *) dev->priv; +#ifndef NO_NOPCOMMANDS + if(p->scb->cus & CU_ACTIVE) /* COMMAND-UNIT active? */ + { + netif_wake_queue(dev); +#ifdef DEBUG + printk("%s: strange ... timeout with CU active?!?\n",dev->name); + printk("%s: X0: %04x N0: %04x N1: %04x %d\n",dev->name,(int)p->xmit_cmds[0]->cmd_status,(int)p->nop_cmds[0]->cmd_status,(int)p->nop_cmds[1]->cmd_status,(int)p->nop_point); +#endif + p->scb->cmd_cuc = CUC_ABORT; + ni_attn586(); + WAIT_4_SCB_CMD(); + p->scb->cbl_offset = make16(p->nop_cmds[p->nop_point]); + p->scb->cmd_cuc = CUC_START; + ni_attn586(); + WAIT_4_SCB_CMD(); + dev->trans_start = jiffies; + return 0; + } +#endif + { +#ifdef DEBUG + printk("%s: xmitter timed out, try to restart! stat: %02x\n",dev->name,p->scb->cus); + printk("%s: command-stats: %04x %04x\n",dev->name,p->xmit_cmds[0]->cmd_status,p->xmit_cmds[1]->cmd_status); + printk("%s: check, whether you set the right interrupt number!\n",dev->name); +#endif + ni52_close(dev); + ni52_open(dev); + } + dev->trans_start = jiffies; +} + /****************************************************** * send frame */ @@ -1116,62 +1138,21 @@ #endif struct priv *p = (struct priv *) dev->priv; - if(dev->tbusy) - { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; - -#ifndef NO_NOPCOMMANDS - if(p->scb->cus & CU_ACTIVE) /* COMMAND-UNIT active? */ - { - dev->tbusy = 0; -#ifdef DEBUG - printk("%s: strange ... timeout with CU active?!?\n",dev->name); - printk("%s: X0: %04x N0: %04x N1: %04x %d\n",dev->name,(int)p->xmit_cmds[0]->cmd_status,(int)p->nop_cmds[0]->cmd_status,(int)p->nop_cmds[1]->cmd_status,(int)p->nop_point); -#endif - p->scb->cmd_cuc = CUC_ABORT; - ni_attn586(); - WAIT_4_SCB_CMD(); - p->scb->cbl_offset = make16(p->nop_cmds[p->nop_point]); - p->scb->cmd_cuc = CUC_START; - ni_attn586(); - WAIT_4_SCB_CMD(); - dev->trans_start = jiffies; - return 0; - } - else -#endif - { -#ifdef DEBUG - printk("%s: xmitter timed out, try to restart! stat: %02x\n",dev->name,p->scb->cus); - printk("%s: command-stats: %04x %04x\n",dev->name,p->xmit_cmds[0]->cmd_status,p->xmit_cmds[1]->cmd_status); - printk("%s: check, whether you set the right interrupt number!\n",dev->name); -#endif - ni52_close(dev); - ni52_open(dev); - } - dev->trans_start = jiffies; - return 0; - } - if(skb->len > XMIT_BUFF_SIZE) { printk("%s: Sorry, max. framelength is %d bytes. The length of your frame is %d bytes.\n",dev->name,XMIT_BUFF_SIZE,skb->len); return 0; } - if (test_and_set_bit(0, (void*)&dev->tbusy)) { - printk("%s: Transmitter access conflict.\n", dev->name); - return 1; - } + netif_stop_queue(dev); + #if(NUM_XMIT_BUFFS > 1) - else if(test_and_set_bit(0,(void *) &p->lock)) { + if(test_and_set_bit(0,(void *) &p->lock)) { printk("%s: Queue was locked\n",dev->name); return 1; } -#endif else +#endif { memcpy((char *)p->xmit_cbuffs[p->xmit_count],(char *)(skb->data),skb->len); len = (ETH_ZLEN < skb->len) ? skb->len : ETH_ZLEN; @@ -1231,7 +1212,7 @@ next_nop = 0; p->xmit_cmds[p->xmit_count]->cmd_status = 0; - /* linkpointer of xmit-command already points to next nop cmd */ + /* linkpointer of xmit-command already points to next nop cmd */ p->nop_cmds[next_nop]->cmd_link = make16((p->nop_cmds[next_nop])); p->nop_cmds[next_nop]->cmd_status = 0; @@ -1240,11 +1221,11 @@ p->xmit_count = next_nop; { - long flags; + unsigned long flags; save_flags(flags); cli(); if(p->xmit_count != p->xmit_last) - dev->tbusy = 0; + netif_wake_queue(dev); p->lock = 0; restore_flags(flags); } @@ -1283,23 +1264,16 @@ /******************************************************** * Set MC list .. */ + static void set_multicast_list(struct net_device *dev) { - if(!dev->start) - { - printk("%s: Can't apply promiscuous/multicastmode to a not running interface.\n",dev->name); - return; - } - - dev->start = 0; - + netif_stop_queue(dev); ni_disint(); alloc586(dev); init586(dev); startrecv586(dev); ni_enaint(); - - dev->start = 1; + netif_wake_queue(dev); } #ifdef MODULE diff -u --recursive --new-file v2.3.43/linux/drivers/net/pcnet32.c linux/drivers/net/pcnet32.c --- v2.3.43/linux/drivers/net/pcnet32.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/pcnet32.c Fri Feb 11 08:25:33 2000 @@ -1139,7 +1139,7 @@ /* We must free the original skb */ if (lp->tx_skbuff[entry]) { - dev_kfree_skb(lp->tx_skbuff[entry]); + dev_kfree_skb_irq(lp->tx_skbuff[entry]); lp->tx_skbuff[entry] = 0; } dirty_tx++; diff -u --recursive --new-file v2.3.43/linux/drivers/net/plip.c linux/drivers/net/plip.c --- v2.3.43/linux/drivers/net/plip.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/plip.c Fri Feb 11 08:25:33 2000 @@ -442,8 +442,7 @@ struct net_local *nl = (struct net_local *)dev->priv; if (!(atomic_read (&nl->kill_timer))) { - if (!dev->interrupt) - plip_interrupt (-1, dev, NULL); + plip_interrupt (-1, dev, NULL); queue_task (&nl->timer, &tq_timer); } @@ -521,7 +520,7 @@ synchronize_irq(); } disable_parport_interrupts (dev); - dev->tbusy = 1; + netif_stop_queue (dev); nl->connection = PLIP_CN_ERROR; write_data (dev, 0x00); @@ -597,7 +596,6 @@ DISABLE(dev->irq); /* Don't need to synchronize irq, as we can safely ignore it */ disable_parport_interrupts (dev); - dev->interrupt = 0; write_data (dev, 0x01); /* send ACK */ if (net_debug > 2) printk(KERN_DEBUG "%s: receive start\n", dev->name); @@ -869,8 +867,7 @@ spin_lock_irq(&nl->lock); if (nl->connection == PLIP_CN_CLOSING) { nl->connection = PLIP_CN_NONE; - dev->tbusy = 0; - mark_bh(NET_BH); + netif_wake_queue (dev); } spin_unlock_irq(&nl->lock); if (nl->should_relinquish) { @@ -893,11 +890,10 @@ printk(KERN_DEBUG "%s: reset interface.\n", dev->name); nl->connection = PLIP_CN_NONE; nl->should_relinquish = 0; - dev->tbusy = 0; - dev->interrupt = 0; + netif_start_queue (dev); enable_parport_interrupts (dev); ENABLE(dev->irq); - mark_bh(NET_BH); + netif_wake_queue (dev); } else { nl->is_deferred = 1; queue_task(&nl->deferred, &tq_timer); @@ -923,23 +919,22 @@ nl = (struct net_local *)dev->priv; rcv = &nl->rcv_data; - if (dev->interrupt) - return; + spin_lock_irq (&nl->lock); c0 = read_status(dev); if ((c0 & 0xf8) != 0xc0) { if ((dev->irq != -1) && (net_debug > 1)) printk(KERN_DEBUG "%s: spurious interrupt\n", dev->name); + spin_unlock_irq (&nl->lock); return; } - dev->interrupt = 1; + if (net_debug > 3) printk(KERN_DEBUG "%s: interrupt.\n", dev->name); - spin_lock_irq(&nl->lock); switch (nl->connection) { case PLIP_CN_CLOSING: - dev->tbusy = 0; + netif_start_queue (dev); case PLIP_CN_NONE: case PLIP_CN_SEND: dev->last_rx = jiffies; @@ -948,21 +943,20 @@ nl->timeout_count = 0; queue_task(&nl->immediate, &tq_immediate); mark_bh(IMMEDIATE_BH); - spin_unlock_irq(&nl->lock); break; case PLIP_CN_RECEIVE: /* May occur because there is race condition around test and set of dev->interrupt. Ignore this interrupt. */ - spin_unlock_irq(&nl->lock); break; case PLIP_CN_ERROR: - spin_unlock_irq(&nl->lock); printk(KERN_ERR "%s: receive interrupt in error state\n", dev->name); break; } + + spin_unlock_irq(&nl->lock); } static int @@ -971,7 +965,7 @@ struct net_local *nl = (struct net_local *)dev->priv; struct plip_local *snd = &nl->snd_data; - if (dev->tbusy) + if (test_bit(LINK_STATE_XOFF, &dev->flags)) return 1; /* We may need to grab the bus */ @@ -981,14 +975,11 @@ nl->port_owner = 1; } - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - printk(KERN_WARNING "%s: Transmitter access conflict.\n", dev->name); - return 1; - } - + netif_stop_queue (dev); + if (skb->len > dev->mtu + dev->hard_header_len) { printk(KERN_WARNING "%s: packet too big, %d.\n", dev->name, (int)skb->len); - dev->tbusy = 0; + netif_start_queue (dev); return 0; } @@ -1007,7 +998,8 @@ queue_task(&nl->immediate, &tq_immediate); mark_bh(IMMEDIATE_BH); spin_unlock_irq(&nl->lock); - + + netif_start_queue (dev); return 0; } @@ -1115,9 +1107,7 @@ } } - dev->interrupt = 0; - dev->start = 1; - dev->tbusy = 0; + netif_start_queue (dev); MOD_INC_USE_COUNT; return 0; @@ -1131,8 +1121,7 @@ struct plip_local *snd = &nl->snd_data; struct plip_local *rcv = &nl->rcv_data; - dev->tbusy = 1; - dev->start = 0; + netif_stop_queue (dev); DISABLE(dev->irq); synchronize_irq(); diff -u --recursive --new-file v2.3.43/linux/drivers/net/rtl8139.c linux/drivers/net/rtl8139.c --- v2.3.43/linux/drivers/net/rtl8139.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/rtl8139.c Sat Feb 12 09:52:04 2000 @@ -96,11 +96,6 @@ #else #define PCI_SUPPORT_VER2 #endif -#if LINUX_VERSION_CODE < 0x20159 -#define dev_free_skb(skb) dev_kfree_skb(skb, FREE_WRITE); -#else -#define dev_free_skb(skb) dev_kfree_skb(skb); -#endif /* The I/O extent. */ #define RTL8129_TOTAL_SIZE 0x80 @@ -1096,7 +1091,7 @@ } /* Free the original skb. */ - dev_free_skb(tp->tx_info[entry].skb); + dev_kfree_skb_irq(tp->tx_info[entry].skb); tp->tx_info[entry].skb = NULL; if (tp->tx_full) { /* The ring is no longer full, wake the queue. */ @@ -1322,7 +1317,7 @@ if (skb) { if (mapping) pci_unmap_single(tp->pdev, mapping, skb->len); - dev_free_skb(skb); + dev_kfree_skb(skb); } tp->tx_info[i].skb = NULL; tp->tx_info[i].mapping = 0; diff -u --recursive --new-file v2.3.43/linux/drivers/net/sb1000.c linux/drivers/net/sb1000.c --- v2.3.43/linux/drivers/net/sb1000.c Mon Dec 20 18:48:21 1999 +++ linux/drivers/net/sb1000.c Thu Feb 10 14:56:48 2000 @@ -1002,10 +1002,8 @@ "(should be %x.%02x)\n", name, version[0], version[1], FirmwareVersion[0], FirmwareVersion[1]); - dev->interrupt = 0; - dev->tbusy = 0; - dev->start = 1; + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; /* Always succeed */ } @@ -1122,10 +1120,6 @@ irq); return; } - if (dev->interrupt) - printk(KERN_ERR "%s: Re-entering the interrupt handler.\n", - dev->name); - dev->interrupt = 1; ioaddr[0] = dev->base_addr; /* rmem_end holds the second I/O address - fv */ @@ -1135,7 +1129,6 @@ /* is it a good interrupt? */ st = inb(ioaddr[1] + 6); if (!(st & 0x08 && st & 0x20)) { - dev->interrupt = 0; return; } @@ -1167,7 +1160,6 @@ lp->rx_error_count = 0; } - dev->interrupt = 0; return; } @@ -1186,9 +1178,8 @@ if (sb1000_debug > 2) printk(KERN_DEBUG "%s: Shutting down sb1000.\n", dev->name); - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + ioaddr[0] = dev->base_addr; /* rmem_end holds the second I/O address - fv */ ioaddr[1] = dev->rmem_end; diff -u --recursive --new-file v2.3.43/linux/drivers/net/sis900.c linux/drivers/net/sis900.c --- v2.3.43/linux/drivers/net/sis900.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/sis900.c Thu Feb 10 22:42:35 2000 @@ -17,7 +17,8 @@ SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution, preliminary Rev. 1.0 Jan. 18, 1998 http://www.sis.com.tw/support/databook.htm - + + Rev 1.06.04 Feb. 11 2000 Jeff Garzik softnet and init for kernel 2.4 Rev 1.06.03 Dec. 23 1999 Ollie Lho Third release Rev 1.06.02 Nov. 23 1999 Ollie Lho bug in mac probing fixed Rev 1.06.01 Nov. 16 1999 Ollie Lho CRC calculation provide by Joseph Zbiciak (im14u2c@primenet.com) @@ -51,7 +52,7 @@ #include "sis900.h" static const char *version = -"sis900.c: v1.06.03 12/23/99\n"; +"sis900.c: v1.06.04 02/11/2000\n"; static int max_interrupt_work = 20; #define sis900_debug debug @@ -788,6 +789,7 @@ { struct sis900_private *sis_priv = (struct sis900_private *)net_dev->priv; long ioaddr = net_dev->base_addr; + unsigned long flags; int i; printk(KERN_INFO "%s: Transmit timeout, status %8.8x %8.8x \n", @@ -798,6 +800,7 @@ /* discard unsent packets, should this code section be protected by cli(), sti() ?? */ + spin_lock_irqsave(&sis_priv->lock, flags); sis_priv->dirty_tx = sis_priv->cur_tx = 0; for (i = 0; i < NUM_TX_DESC; i++) { if (sis_priv->tx_skbuff[i] != NULL) { @@ -808,6 +811,7 @@ sis_priv->stats.tx_dropped++; } } + spin_unlock_irqrestore(&sis_priv->lock, flags); net_dev->trans_start = jiffies; sis_priv->tx_full = 0; @@ -1048,7 +1052,7 @@ sis_priv->stats.tx_packets++; } /* Free the original skb. */ - dev_kfree_skb(sis_priv->tx_skbuff[entry]); + dev_kfree_skb_irq(sis_priv->tx_skbuff[entry]); sis_priv->tx_skbuff[entry] = NULL; sis_priv->tx_ring[entry].bufptr = 0; sis_priv->tx_ring[entry].cmdsts = 0; diff -u --recursive --new-file v2.3.43/linux/drivers/net/sk_mca.c linux/drivers/net/sk_mca.c --- v2.3.43/linux/drivers/net/sk_mca.c Thu Nov 11 20:11:42 1999 +++ linux/drivers/net/sk_mca.c Thu Feb 10 14:56:48 2000 @@ -96,12 +96,13 @@ * have to pack all state info into the device struct! * ------------------------------------------------------------------------ */ -static char *MediaNames[Media_Count]= - {"10Base2", "10BaseT", "10Base5", "Unknown"}; +static char *MediaNames[Media_Count] = { + "10Base2", "10BaseT", "10Base5", "Unknown" }; -static unsigned char poly[] = - {1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0}; +static unsigned char poly[] = { + 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0 +}; /* ------------------------------------------------------------------------ * private subfunctions @@ -112,64 +113,70 @@ #ifdef DEBUG static void dumpmem(struct net_device *dev, u32 start, u32 len) { - int z; + int z; - for (z = 0; z < len; z++) - { - if ((z & 15) == 0) - printk("%04x:", z); - printk(" %02x", readb(dev->mem_start + start + z)); - if ((z & 15) == 15) - printk("\n"); - } + for (z = 0; z < len; z++) { + if ((z & 15) == 0) + printk("%04x:", z); + printk(" %02x", readb(dev->mem_start + start + z)); + if ((z & 15) == 15) + printk("\n"); + } } /* print exact time - ditto */ static void PrTime(void) { - struct timeval tv; + struct timeval tv; - do_gettimeofday(&tv); - printk("%9d:%06d: ", tv.tv_sec, tv.tv_usec); + do_gettimeofday(&tv); + printk("%9d:%06d: ", tv.tv_sec, tv.tv_usec); } + #endif /* deduce resources out of POS registers */ static void getaddrs(int slot, int junior, int *base, int *irq, - skmca_medium *medium) + skmca_medium * medium) { - u_char pos0, pos1, pos2; - - if (junior) - { - pos0 = mca_read_stored_pos(slot, 2); - *base = ((pos0 & 0x0e) << 13) + 0xc0000; - *irq = ((pos0 & 0x10) >> 4) + 10; - *medium = Media_Unknown; - } - else - { - /* reset POS 104 Bits 0+1 so the shared memory region goes to the - configured area between 640K and 1M. Afterwards, enable the MC2. - I really don't know what rode SK to do this... */ - - mca_write_pos(slot, 4, mca_read_stored_pos(slot, 4) & 0xfc); - mca_write_pos(slot, 2, mca_read_stored_pos(slot, 2) | 0x01); - - pos1 = mca_read_stored_pos(slot, 3); - pos2 = mca_read_stored_pos(slot, 4); - *base = ((pos1 & 0x07) << 14) + 0xc0000; - switch (pos2 & 0x0c) - { - case 0: *irq = 3; break; - case 4: *irq = 5; break; - case 8: *irq = 10; break; - case 12: *irq = 11; break; - } - *medium = (pos2 >> 6) & 3; - } + u_char pos0, pos1, pos2; + + if (junior) { + pos0 = mca_read_stored_pos(slot, 2); + *base = ((pos0 & 0x0e) << 13) + 0xc0000; + *irq = ((pos0 & 0x10) >> 4) + 10; + *medium = Media_Unknown; + } else { + /* reset POS 104 Bits 0+1 so the shared memory region goes to the + configured area between 640K and 1M. Afterwards, enable the MC2. + I really don't know what rode SK to do this... */ + + mca_write_pos(slot, 4, + mca_read_stored_pos(slot, 4) & 0xfc); + mca_write_pos(slot, 2, + mca_read_stored_pos(slot, 2) | 0x01); + + pos1 = mca_read_stored_pos(slot, 3); + pos2 = mca_read_stored_pos(slot, 4); + *base = ((pos1 & 0x07) << 14) + 0xc0000; + switch (pos2 & 0x0c) { + case 0: + *irq = 3; + break; + case 4: + *irq = 5; + break; + case 8: + *irq = 10; + break; + case 12: + *irq = 11; + break; + } + *medium = (pos2 >> 6) & 3; + } } /* check for both cards: @@ -179,157 +186,162 @@ static int dofind(int *junior, int firstslot) { - int slot; - unsigned int id; + int slot; + unsigned int id; - for (slot = firstslot; slot < MCA_MAX_SLOT_NR; slot++) - { - id = mca_read_stored_pos(slot, 0) - + (((unsigned int) mca_read_stored_pos(slot, 1)) << 8); - - *junior = 0; - if (id == SKNET_MCA_ID) - return slot; - *junior = 1; - if (id == SKNET_JUNIOR_MCA_ID) - return slot; - } - return MCA_NOTFOUND; + for (slot = firstslot; slot < MCA_MAX_SLOT_NR; slot++) { + id = mca_read_stored_pos(slot, 0) + + (((unsigned int) mca_read_stored_pos(slot, 1)) << 8); + + *junior = 0; + if (id == SKNET_MCA_ID) + return slot; + *junior = 1; + if (id == SKNET_JUNIOR_MCA_ID) + return slot; + } + return MCA_NOTFOUND; } /* reset the whole board */ static void ResetBoard(struct net_device *dev) { - skmca_priv *priv = (skmca_priv*) dev->priv; + skmca_priv *priv = (skmca_priv *) dev->priv; - writeb(CTRL_RESET_ON, priv->ctrladdr); - udelay(10); - writeb(CTRL_RESET_OFF, priv->ctrladdr); + writeb(CTRL_RESET_ON, priv->ctrladdr); + udelay(10); + writeb(CTRL_RESET_OFF, priv->ctrladdr); } /* set LANCE register - must be atomic */ static void SetLANCE(struct net_device *dev, u16 addr, u16 value) { - skmca_priv *priv = (skmca_priv*) dev->priv; - unsigned long flags; + skmca_priv *priv = (skmca_priv *) dev->priv; + unsigned long flags; - /* disable interrupts */ + /* disable interrupts */ - save_flags(flags); - cli(); + save_flags(flags); + cli(); - /* wait until no transfer is pending */ - - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + /* wait until no transfer is pending */ - /* transfer register address to RAP */ + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_RAP, priv->ctrladdr); - writew(addr, priv->ioregaddr); - writeb(IOCMD_GO, priv->cmdaddr); - udelay(1); - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + /* transfer register address to RAP */ - /* transfer data to register */ + writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_RAP, + priv->ctrladdr); + writew(addr, priv->ioregaddr); + writeb(IOCMD_GO, priv->cmdaddr); + udelay(1); + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_DATA, priv->ctrladdr); - writew(value, priv->ioregaddr); - writeb(IOCMD_GO, priv->cmdaddr); - udelay(1); - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + /* transfer data to register */ - /* reenable interrupts */ + writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_DATA, + priv->ctrladdr); + writew(value, priv->ioregaddr); + writeb(IOCMD_GO, priv->cmdaddr); + udelay(1); + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - restore_flags(flags); + /* reenable interrupts */ + + restore_flags(flags); } /* get LANCE register */ static u16 GetLANCE(struct net_device *dev, u16 addr) { - skmca_priv *priv = (skmca_priv*) dev->priv; - unsigned long flags; - unsigned int res; + skmca_priv *priv = (skmca_priv *) dev->priv; + unsigned long flags; + unsigned int res; - /* disable interrupts */ + /* disable interrupts */ - save_flags(flags); - cli(); + save_flags(flags); + cli(); - /* wait until no transfer is pending */ + /* wait until no transfer is pending */ - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - /* transfer register address to RAP */ + /* transfer register address to RAP */ - writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_RAP, priv->ctrladdr); - writew(addr, priv->ioregaddr); - writeb(IOCMD_GO, priv->cmdaddr); - udelay(1); - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + writeb(CTRL_RESET_OFF | CTRL_RW_WRITE | CTRL_ADR_RAP, + priv->ctrladdr); + writew(addr, priv->ioregaddr); + writeb(IOCMD_GO, priv->cmdaddr); + udelay(1); + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - /* transfer data from register */ + /* transfer data from register */ - writeb(CTRL_RESET_OFF | CTRL_RW_READ | CTRL_ADR_DATA, priv->ctrladdr); - writeb(IOCMD_GO, priv->cmdaddr); - udelay(1); - while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); - res = readw(priv->ioregaddr); + writeb(CTRL_RESET_OFF | CTRL_RW_READ | CTRL_ADR_DATA, + priv->ctrladdr); + writeb(IOCMD_GO, priv->cmdaddr); + udelay(1); + while ((readb(priv->ctrladdr) & STAT_IO_BUSY) == STAT_IO_BUSY); + res = readw(priv->ioregaddr); - /* reenable interrupts */ + /* reenable interrupts */ - restore_flags(flags); + restore_flags(flags); - return res; + return res; } /* build up descriptors in shared RAM */ static void InitDscrs(struct net_device *dev) { - u32 bufaddr; + u32 bufaddr; - /* Set up Tx descriptors. The board has only 16K RAM so bits 16..23 - are always 0. */ + /* Set up Tx descriptors. The board has only 16K RAM so bits 16..23 + are always 0. */ - bufaddr = RAM_DATABASE; - { - LANCE_TxDescr descr; - int z; - - for (z = 0; z < TXCOUNT; z++) - { - descr.LowAddr = bufaddr; - descr.Flags = 0; - descr.Len = 0xf000; - descr.Status = 0; - isa_memcpy_toio(dev->mem_start + RAM_TXBASE + (z * sizeof(LANCE_TxDescr)), - &descr, sizeof(LANCE_TxDescr)); - memset_io(dev->mem_start + bufaddr, 0, RAM_BUFSIZE); - bufaddr += RAM_BUFSIZE; - } - } - - /* do the same for the Rx descriptors */ - - { - LANCE_RxDescr descr; - int z; - - for (z = 0; z < RXCOUNT; z++) - { - descr.LowAddr = bufaddr; - descr.Flags = RXDSCR_FLAGS_OWN; - descr.MaxLen = -RAM_BUFSIZE; - descr.Len = 0; - isa_memcpy_toio(dev->mem_start + RAM_RXBASE + (z * sizeof(LANCE_RxDescr)), - &descr, sizeof(LANCE_RxDescr)); - isa_memset_io(dev->mem_start + bufaddr, 0, RAM_BUFSIZE); - bufaddr += RAM_BUFSIZE; - } - } + bufaddr = RAM_DATABASE; + { + LANCE_TxDescr descr; + int z; + + for (z = 0; z < TXCOUNT; z++) { + descr.LowAddr = bufaddr; + descr.Flags = 0; + descr.Len = 0xf000; + descr.Status = 0; + isa_memcpy_toio(dev->mem_start + RAM_TXBASE + + (z * sizeof(LANCE_TxDescr)), + &descr, sizeof(LANCE_TxDescr)); + memset_io(dev->mem_start + bufaddr, 0, + RAM_BUFSIZE); + bufaddr += RAM_BUFSIZE; + } + } + + /* do the same for the Rx descriptors */ + + { + LANCE_RxDescr descr; + int z; + + for (z = 0; z < RXCOUNT; z++) { + descr.LowAddr = bufaddr; + descr.Flags = RXDSCR_FLAGS_OWN; + descr.MaxLen = -RAM_BUFSIZE; + descr.Len = 0; + isa_memcpy_toio(dev->mem_start + RAM_RXBASE + + (z * sizeof(LANCE_RxDescr)), + &descr, sizeof(LANCE_RxDescr)); + isa_memset_io(dev->mem_start + bufaddr, 0, + RAM_BUFSIZE); + bufaddr += RAM_BUFSIZE; + } + } } /* calculate the hash bit position for a given multicast address @@ -337,136 +349,138 @@ static void UpdateCRC(unsigned char *CRC, int bit) { - int j; + int j; - /* shift CRC one bit */ + /* shift CRC one bit */ - memmove(CRC + 1, CRC, 32 * sizeof(unsigned char)); - CRC[0] = 0; + memmove(CRC + 1, CRC, 32 * sizeof(unsigned char)); + CRC[0] = 0; - /* if bit XOR controlbit = 1, set CRC = CRC XOR polynomial */ + /* if bit XOR controlbit = 1, set CRC = CRC XOR polynomial */ - if (bit ^ CRC[32]) - for (j = 0; j < 32; j++) - CRC[j] ^= poly[j]; + if (bit ^ CRC[32]) + for (j = 0; j < 32; j++) + CRC[j] ^= poly[j]; } static unsigned int GetHash(char *address) { - unsigned char CRC[33]; - int i, byte, hashcode; + unsigned char CRC[33]; + int i, byte, hashcode; - /* a multicast address has bit 0 in the first byte set */ + /* a multicast address has bit 0 in the first byte set */ - if ((address[0] & 1) == 0) - return -1; + if ((address[0] & 1) == 0) + return -1; - /* initialize CRC */ + /* initialize CRC */ - memset(CRC, 1, sizeof(CRC)); + memset(CRC, 1, sizeof(CRC)); - /* loop through address bits */ + /* loop through address bits */ - for (byte = 0; byte < 6; byte++) - for (i = 0; i < 8; i++) - UpdateCRC(CRC, (address[byte] >> i) & 1); + for (byte = 0; byte < 6; byte++) + for (i = 0; i < 8; i++) + UpdateCRC(CRC, (address[byte] >> i) & 1); - /* hashcode is the 6 least significant bits of the CRC */ + /* hashcode is the 6 least significant bits of the CRC */ - hashcode = 0; - for (i = 0; i < 6; i++) - hashcode = (hashcode << 1) + CRC[i]; - return hashcode; + hashcode = 0; + for (i = 0; i < 6; i++) + hashcode = (hashcode << 1) + CRC[i]; + return hashcode; } /* feed ready-built initialization block into LANCE */ static void InitLANCE(struct net_device *dev) { - skmca_priv *priv = (skmca_priv*) dev->priv; - - /* build up descriptors. */ + skmca_priv *priv = (skmca_priv *) dev->priv; - InitDscrs(dev); + /* build up descriptors. */ - /* next RX descriptor to be read is the first one. Since the LANCE - will start from the beginning after initialization, we have to - reset out pointers too. */ + InitDscrs(dev); - priv->nextrx = 0; + /* next RX descriptor to be read is the first one. Since the LANCE + will start from the beginning after initialization, we have to + reset out pointers too. */ - /* no TX descriptors active */ + priv->nextrx = 0; - priv->nexttxput = priv->nexttxdone = priv->txbusy = 0; + /* no TX descriptors active */ - /* set up the LANCE bus control register - constant for SKnet boards */ + priv->nexttxput = priv->nexttxdone = priv->txbusy = 0; - SetLANCE(dev, LANCE_CSR3, CSR3_BSWAP_OFF | CSR3_ALE_LOW | CSR3_BCON_HOLD); + /* set up the LANCE bus control register - constant for SKnet boards */ - /* write address of initialization block into LANCE */ + SetLANCE(dev, LANCE_CSR3, + CSR3_BSWAP_OFF | CSR3_ALE_LOW | CSR3_BCON_HOLD); - SetLANCE(dev, LANCE_CSR1, RAM_INITBASE & 0xffff); - SetLANCE(dev, LANCE_CSR2, (RAM_INITBASE >> 16) & 0xff); + /* write address of initialization block into LANCE */ - /* we don't get ready until the LANCE has read the init block */ + SetLANCE(dev, LANCE_CSR1, RAM_INITBASE & 0xffff); + SetLANCE(dev, LANCE_CSR2, (RAM_INITBASE >> 16) & 0xff); - dev->tbusy = 1; + /* we don't get ready until the LANCE has read the init block */ - /* let LANCE read the initialization block. LANCE is ready - when we receive the corresponding interrupt. */ + netif_stop_queue(dev); + + /* let LANCE read the initialization block. LANCE is ready + when we receive the corresponding interrupt. */ - SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_INIT); + SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_INIT); } /* stop the LANCE so we can reinitialize it */ static void StopLANCE(struct net_device *dev) { - /* can't take frames any more */ + /* can't take frames any more */ - dev->tbusy = 1; + netif_stop_queue(dev); + + /* disable interrupts, stop it */ - /* disable interrupts, stop it */ - - SetLANCE(dev, LANCE_CSR0, CSR0_STOP); + SetLANCE(dev, LANCE_CSR0, CSR0_STOP); } /* initialize card and LANCE for proper operation */ static void InitBoard(struct net_device *dev) { - LANCE_InitBlock block; - - /* Lay out the shared RAM - first we create the init block for the LANCE. - We do not overwrite it later because we need it again when we switch - promiscous mode on/off. */ + LANCE_InitBlock block; - block.Mode = 0; - if (dev->flags & IFF_PROMISC) - block.Mode |= LANCE_INIT_PROM; - memcpy(block.PAdr, dev->dev_addr, 6); - memset(block.LAdrF, 0, sizeof(block.LAdrF)); - block.RdrP = (RAM_RXBASE & 0xffffff) | (LRXCOUNT << 29); - block.TdrP = (RAM_TXBASE & 0xffffff) | (LTXCOUNT << 29); + /* Lay out the shared RAM - first we create the init block for the LANCE. + We do not overwrite it later because we need it again when we switch + promiscous mode on/off. */ + + block.Mode = 0; + if (dev->flags & IFF_PROMISC) + block.Mode |= LANCE_INIT_PROM; + memcpy(block.PAdr, dev->dev_addr, 6); + memset(block.LAdrF, 0, sizeof(block.LAdrF)); + block.RdrP = (RAM_RXBASE & 0xffffff) | (LRXCOUNT << 29); + block.TdrP = (RAM_TXBASE & 0xffffff) | (LTXCOUNT << 29); - isa_memcpy_toio(dev->mem_start + RAM_INITBASE, &block, sizeof(block)); + isa_memcpy_toio(dev->mem_start + RAM_INITBASE, &block, + sizeof(block)); - /* initialize LANCE. Implicitly sets up other structures in RAM. */ + /* initialize LANCE. Implicitly sets up other structures in RAM. */ - InitLANCE(dev); + InitLANCE(dev); } /* deinitialize card and LANCE */ static void DeinitBoard(struct net_device *dev) { - /* stop LANCE */ + /* stop LANCE */ - StopLANCE(dev); + StopLANCE(dev); - /* reset board */ + /* reset board */ - ResetBoard(dev); + ResetBoard(dev); } /* ------------------------------------------------------------------------ @@ -477,210 +491,201 @@ static u16 irqstart_handler(struct net_device *dev, u16 oldcsr0) { - /* now we're ready to transmit */ + /* now we're ready to transmit */ - dev->tbusy = 0; + netif_wake_queue(dev); + + /* reset IDON bit, start LANCE */ - /* reset IDON bit, start LANCE */ - - SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_IDON | CSR0_STRT); - return GetLANCE(dev, LANCE_CSR0); + SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_IDON | CSR0_STRT); + return GetLANCE(dev, LANCE_CSR0); } /* receive interrupt */ static u16 irqrx_handler(struct net_device *dev, u16 oldcsr0) { - skmca_priv *priv = (skmca_priv*) dev->priv; - LANCE_RxDescr descr; - unsigned int descraddr; - - /* did we loose blocks due to a FIFO overrun ? */ - - if (oldcsr0 & CSR0_MISS) - priv->stat.rx_fifo_errors++; - - /* run through queue until we reach a descriptor we do not own */ - - descraddr = RAM_RXBASE + (priv->nextrx * sizeof(LANCE_RxDescr)); - while (1) - { - /* read descriptor */ - isa_memcpy_fromio(&descr, dev->mem_start + descraddr, sizeof(LANCE_RxDescr)); - - /* if we reach a descriptor we do not own, we're done */ - if ((descr.Flags & RXDSCR_FLAGS_OWN) != 0) - break; + skmca_priv *priv = (skmca_priv *) dev->priv; + LANCE_RxDescr descr; + unsigned int descraddr; + + /* did we loose blocks due to a FIFO overrun ? */ + + if (oldcsr0 & CSR0_MISS) + priv->stat.rx_fifo_errors++; + + /* run through queue until we reach a descriptor we do not own */ + + descraddr = RAM_RXBASE + (priv->nextrx * sizeof(LANCE_RxDescr)); + while (1) { + /* read descriptor */ + isa_memcpy_fromio(&descr, dev->mem_start + descraddr, + sizeof(LANCE_RxDescr)); + + /* if we reach a descriptor we do not own, we're done */ + if ((descr.Flags & RXDSCR_FLAGS_OWN) != 0) + break; #ifdef DEBUG - PrTime(); printk("Receive packet on descr %d len %d\n", priv->nextrx, descr.Len); + PrTime(); + printk("Receive packet on descr %d len %d\n", priv->nextrx, + descr.Len); #endif - /* erroneous packet ? */ - if ((descr.Flags & RXDSCR_FLAGS_ERR) != 0) - { - priv->stat.rx_errors++; - if ((descr.Flags & RXDSCR_FLAGS_CRC) != 0) - priv->stat.rx_crc_errors++; - else if ((descr.Flags & RXDSCR_FLAGS_CRC) != 0) - priv->stat.rx_frame_errors++; - else if ((descr.Flags & RXDSCR_FLAGS_OFLO) != 0) - priv->stat.rx_fifo_errors++; - } - - /* good packet ? */ - else - { - struct sk_buff *skb; - - skb = dev_alloc_skb(descr.Len + 2); - if (skb == NULL) - priv->stat.rx_dropped++; - else - { - isa_memcpy_fromio(skb_put(skb, descr.Len), - dev->mem_start + descr.LowAddr, descr.Len); - skb->dev = dev; - skb->protocol = eth_type_trans(skb, dev); - skb->ip_summed = CHECKSUM_NONE; - priv->stat.rx_packets++; -#if LINUX_VERSION_CODE >= 0x020119 /* byte counters for >= 2.1.25 */ - priv->stat.rx_bytes += descr.Len; + /* erroneous packet ? */ + if ((descr.Flags & RXDSCR_FLAGS_ERR) != 0) { + priv->stat.rx_errors++; + if ((descr.Flags & RXDSCR_FLAGS_CRC) != 0) + priv->stat.rx_crc_errors++; + else if ((descr.Flags & RXDSCR_FLAGS_CRC) != 0) + priv->stat.rx_frame_errors++; + else if ((descr.Flags & RXDSCR_FLAGS_OFLO) != 0) + priv->stat.rx_fifo_errors++; + } + + /* good packet ? */ + else { + struct sk_buff *skb; + + skb = dev_alloc_skb(descr.Len + 2); + if (skb == NULL) + priv->stat.rx_dropped++; + else { + isa_memcpy_fromio(skb_put(skb, descr.Len), + dev->mem_start + + descr.LowAddr, + descr.Len); + skb->dev = dev; + skb->protocol = eth_type_trans(skb, dev); + skb->ip_summed = CHECKSUM_NONE; + priv->stat.rx_packets++; +#if LINUX_VERSION_CODE >= 0x020119 /* byte counters for >= 2.1.25 */ + priv->stat.rx_bytes += descr.Len; #endif - netif_rx(skb); - } - } - - /* give descriptor back to LANCE */ - descr.Len = 0; - descr.Flags |= RXDSCR_FLAGS_OWN; - - /* update descriptor in shared RAM */ - isa_memcpy_toio(dev->mem_start + descraddr, &descr, sizeof(LANCE_RxDescr)); - - /* go to next descriptor */ - priv->nextrx++; descraddr += sizeof(LANCE_RxDescr); - if (priv->nextrx >= RXCOUNT) - { - priv->nextrx = 0; - descraddr = RAM_RXBASE; - } - } + netif_rx(skb); + } + } + + /* give descriptor back to LANCE */ + descr.Len = 0; + descr.Flags |= RXDSCR_FLAGS_OWN; + + /* update descriptor in shared RAM */ + isa_memcpy_toio(dev->mem_start + descraddr, &descr, + sizeof(LANCE_RxDescr)); + + /* go to next descriptor */ + priv->nextrx++; + descraddr += sizeof(LANCE_RxDescr); + if (priv->nextrx >= RXCOUNT) { + priv->nextrx = 0; + descraddr = RAM_RXBASE; + } + } - /* reset RINT bit */ + /* reset RINT bit */ - SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_RINT); - return GetLANCE(dev, LANCE_CSR0); + SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_RINT); + return GetLANCE(dev, LANCE_CSR0); } /* transmit interrupt */ static u16 irqtx_handler(struct net_device *dev, u16 oldcsr0) { - skmca_priv *priv = (skmca_priv*) dev->priv; - LANCE_TxDescr descr; - unsigned int descraddr; - - /* check descriptors at most until no busy one is left */ - - descraddr = RAM_TXBASE + (priv->nexttxdone * sizeof(LANCE_TxDescr)); - while (priv->txbusy > 0) - { - /* read descriptor */ - isa_memcpy_fromio(&descr, dev->mem_start + descraddr, sizeof(LANCE_TxDescr)); - - /* if the LANCE still owns this one, we've worked out all sent packets */ - if ((descr.Flags & TXDSCR_FLAGS_OWN) != 0) - break; + skmca_priv *priv = (skmca_priv *) dev->priv; + LANCE_TxDescr descr; + unsigned int descraddr; + + /* check descriptors at most until no busy one is left */ + + descraddr = + RAM_TXBASE + (priv->nexttxdone * sizeof(LANCE_TxDescr)); + while (priv->txbusy > 0) { + /* read descriptor */ + isa_memcpy_fromio(&descr, dev->mem_start + descraddr, + sizeof(LANCE_TxDescr)); + + /* if the LANCE still owns this one, we've worked out all sent packets */ + if ((descr.Flags & TXDSCR_FLAGS_OWN) != 0) + break; #ifdef DEBUG - PrTime(); printk("Send packet done on descr %d\n", priv->nexttxdone); + PrTime(); + printk("Send packet done on descr %d\n", priv->nexttxdone); #endif - /* update statistics */ - if ((descr.Flags & TXDSCR_FLAGS_ERR) == 0) - { - priv->stat.tx_packets++; -#if LINUX_VERSION_CODE >= 0x020119 /* byte counters for >= 2.1.25 */ - priv->stat.tx_bytes++; + /* update statistics */ + if ((descr.Flags & TXDSCR_FLAGS_ERR) == 0) { + priv->stat.tx_packets++; +#if LINUX_VERSION_CODE >= 0x020119 /* byte counters for >= 2.1.25 */ + priv->stat.tx_bytes++; #endif - } - else - { - priv->stat.tx_errors++; - if ((descr.Status & TXDSCR_STATUS_UFLO) != 0) - { - priv->stat.tx_fifo_errors++; - InitLANCE(dev); - } - else if ((descr.Status & TXDSCR_STATUS_LCOL) != 0) - priv->stat.tx_window_errors++; - else if ((descr.Status & TXDSCR_STATUS_LCAR) != 0) - priv->stat.tx_carrier_errors++; - else if ((descr.Status & TXDSCR_STATUS_RTRY) != 0) - priv->stat.tx_aborted_errors++; - } - - /* go to next descriptor */ - priv->nexttxdone++; - descraddr += sizeof(LANCE_TxDescr); - if (priv->nexttxdone >= TXCOUNT) - { - priv->nexttxdone = 0; - descraddr = RAM_TXBASE; - } - priv->txbusy--; - } - - /* reset TX interrupt bit */ - - SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_TINT); - oldcsr0 = GetLANCE(dev, LANCE_CSR0); - - /* at least one descriptor is freed. Therefore we can accept - a new one */ - - dev->tbusy = 0; - - /* inform upper layers we're in business again */ - - mark_bh(NET_BH); - - return oldcsr0; + } else { + priv->stat.tx_errors++; + if ((descr.Status & TXDSCR_STATUS_UFLO) != 0) { + priv->stat.tx_fifo_errors++; + InitLANCE(dev); + } + else + if ((descr.Status & TXDSCR_STATUS_LCOL) != + 0) priv->stat.tx_window_errors++; + else if ((descr.Status & TXDSCR_STATUS_LCAR) != 0) + priv->stat.tx_carrier_errors++; + else if ((descr.Status & TXDSCR_STATUS_RTRY) != 0) + priv->stat.tx_aborted_errors++; + } + + /* go to next descriptor */ + priv->nexttxdone++; + descraddr += sizeof(LANCE_TxDescr); + if (priv->nexttxdone >= TXCOUNT) { + priv->nexttxdone = 0; + descraddr = RAM_TXBASE; + } + priv->txbusy--; + } + + /* reset TX interrupt bit */ + + SetLANCE(dev, LANCE_CSR0, oldcsr0 | CSR0_TINT); + oldcsr0 = GetLANCE(dev, LANCE_CSR0); + + /* at least one descriptor is freed. Therefore we can accept + a new one */ + + netif_wake_queue(dev); + + return oldcsr0; } /* general interrupt entry */ static void irq_handler(int irq, void *device, struct pt_regs *regs) { - struct net_device *dev = (struct net_device*) device; - u16 csr0val; - - /* read CSR0 to get interrupt cause */ + struct net_device *dev = (struct net_device *) device; + u16 csr0val; - csr0val = GetLANCE(dev, LANCE_CSR0); + /* read CSR0 to get interrupt cause */ - /* in case we're not meant... */ + csr0val = GetLANCE(dev, LANCE_CSR0); - if ((csr0val & CSR0_INTR) == 0) - return; + /* in case we're not meant... */ - dev->interrupt = 1; + if ((csr0val & CSR0_INTR) == 0) + return; - /* loop through the interrupt bits until everything is clear */ + /* loop through the interrupt bits until everything is clear */ - do - { - if ((csr0val & CSR0_IDON) != 0) - csr0val = irqstart_handler(dev, csr0val); - if ((csr0val & CSR0_RINT) != 0) - csr0val = irqrx_handler(dev, csr0val); - if ((csr0val & CSR0_TINT) != 0) - csr0val = irqtx_handler(dev, csr0val); - } - while ((csr0val & CSR0_INTR) != 0); - - dev->interrupt = 0; + do { + if ((csr0val & CSR0_IDON) != 0) + csr0val = irqstart_handler(dev, csr0val); + if ((csr0val & CSR0_RINT) != 0) + csr0val = irqrx_handler(dev, csr0val); + if ((csr0val & CSR0_TINT) != 0) + csr0val = irqtx_handler(dev, csr0val); + } + while ((csr0val & CSR0_INTR) != 0); } /* ------------------------------------------------------------------------ @@ -691,184 +696,177 @@ static int skmca_getinfo(char *buf, int slot, void *d) { - int len = 0, i; - struct net_device *dev = (struct net_device*) d; - skmca_priv *priv; - - /* can't say anything about an uninitialized device... */ - - if (dev == NULL) - return len; - if (dev->priv == NULL) - return len; - priv = (skmca_priv*) dev->priv; - - /* print info */ - - len += sprintf(buf + len, "IRQ: %d\n", priv->realirq); - len += sprintf(buf + len, "Memory: %#lx-%#lx\n", dev->mem_start, - dev->mem_end - 1); - len += sprintf(buf + len, "Transceiver: %s\n", MediaNames[priv->medium]); - len += sprintf(buf + len, "Device: %s\n", dev->name); - len += sprintf(buf + len, "MAC address:"); - for (i = 0; i < 6; i ++ ) - len += sprintf( buf+len, " %02x", dev->dev_addr[i] ); - buf[len++] = '\n'; - buf[len] = 0; + int len = 0, i; + struct net_device *dev = (struct net_device *) d; + skmca_priv *priv; + + /* can't say anything about an uninitialized device... */ + + if (dev == NULL) + return len; + if (dev->priv == NULL) + return len; + priv = (skmca_priv *) dev->priv; + + /* print info */ + + len += sprintf(buf + len, "IRQ: %d\n", priv->realirq); + len += sprintf(buf + len, "Memory: %#lx-%#lx\n", dev->mem_start, + dev->mem_end - 1); + len += + sprintf(buf + len, "Transceiver: %s\n", + MediaNames[priv->medium]); + len += sprintf(buf + len, "Device: %s\n", dev->name); + len += sprintf(buf + len, "MAC address:"); + for (i = 0; i < 6; i++) + len += sprintf(buf + len, " %02x", dev->dev_addr[i]); + buf[len++] = '\n'; + buf[len] = 0; - return len; + return len; } /* open driver. Means also initialization and start of LANCE */ static int skmca_open(struct net_device *dev) { - int result; - skmca_priv *priv = (skmca_priv*) dev->priv; + int result; + skmca_priv *priv = (skmca_priv *) dev->priv; - /* register resources - only necessary for IRQ */ - result = request_irq(priv->realirq, irq_handler, SA_SHIRQ | SA_SAMPLE_RANDOM, - "sk_mca", dev); - if (result != 0) - { - printk("%s: failed to register irq %d\n", dev->name, dev->irq); - return result; - } - dev->irq = priv->realirq; + /* register resources - only necessary for IRQ */ + result = + request_irq(priv->realirq, irq_handler, + SA_SHIRQ | SA_SAMPLE_RANDOM, "sk_mca", dev); + if (result != 0) { + printk("%s: failed to register irq %d\n", dev->name, + dev->irq); + return result; + } + dev->irq = priv->realirq; - /* set up the card and LANCE */ - InitBoard(dev); + /* set up the card and LANCE */ + InitBoard(dev); #ifdef MODULE - MOD_INC_USE_COUNT; + MOD_INC_USE_COUNT; #endif - return 0; + return 0; } /* close driver. Shut down board and free allocated resources */ static int skmca_close(struct net_device *dev) { - /* turn off board */ - DeinitBoard(dev); + /* turn off board */ + DeinitBoard(dev); - /* release resources */ - if (dev->irq != 0) - free_irq(dev->irq, dev); - dev->irq = 0; + /* release resources */ + if (dev->irq != 0) + free_irq(dev->irq, dev); + dev->irq = 0; #ifdef MODULE - MOD_DEC_USE_COUNT; + MOD_DEC_USE_COUNT; #endif - return 0; + return 0; } /* transmit a block. */ static int skmca_tx(struct sk_buff *skb, struct net_device *dev) { - skmca_priv *priv = (skmca_priv*) dev->priv; - LANCE_TxDescr descr; - unsigned int address; - int tmplen, retval = 0; - unsigned long flags; - - /* if we get called with a NULL descriptor, the Ethernet layer thinks - our card is stuck an we should reset it. We'll do this completely: */ - - if (skb == NULL) - { - DeinitBoard(dev); - InitBoard(dev); - return 0; /* don't try to free the block here ;-) */ - } - - /* is there space in the Tx queue ? If no, the upper layer gave us a - packet in spite of us not being ready and is really in trouble. - We'll do the dropping for him: */ - if (priv->txbusy >= TXCOUNT) - { - priv->stat.tx_dropped++; - retval = -EIO; - goto tx_done; - } - - /* get TX descriptor */ - address = RAM_TXBASE + (priv->nexttxput * sizeof(LANCE_TxDescr)); - isa_memcpy_fromio(&descr, dev->mem_start + address, sizeof(LANCE_TxDescr)); - - /* enter packet length as 2s complement - assure minimum length */ - tmplen = skb->len; - if (tmplen < 60) - tmplen = 60; - descr.Len = 65536 - tmplen; - - /* copy filler into RAM - in case we're filling up... - we're filling a bit more than necessary, but that doesn't harm - since the buffer is far larger... */ - if (tmplen > skb->len) - { - char *fill = "NetBSD is a nice OS too! "; - unsigned int destoffs = 0, l = strlen(fill); - - while (destoffs < tmplen) - { - isa_memcpy_toio(dev->mem_start + descr.LowAddr + destoffs, fill, l); - destoffs += l; - } - } - - /* do the real data copying */ - isa_memcpy_toio(dev->mem_start + descr.LowAddr, skb->data, skb->len); - - /* hand descriptor over to LANCE - this is the first and last chunk */ - descr.Flags = TXDSCR_FLAGS_OWN | TXDSCR_FLAGS_STP | TXDSCR_FLAGS_ENP; + skmca_priv *priv = (skmca_priv *) dev->priv; + LANCE_TxDescr descr; + unsigned int address; + int tmplen, retval = 0; + unsigned long flags; + + netif_stop_queue(dev); + + /* is there space in the Tx queue ? If no, the upper layer gave us a + packet in spite of us not being ready and is really in trouble. + We'll do the dropping for him: */ + if (priv->txbusy >= TXCOUNT) { + priv->stat.tx_dropped++; + retval = -EIO; + goto tx_done; + } + + /* get TX descriptor */ + address = RAM_TXBASE + (priv->nexttxput * sizeof(LANCE_TxDescr)); + isa_memcpy_fromio(&descr, dev->mem_start + address, + sizeof(LANCE_TxDescr)); + + /* enter packet length as 2s complement - assure minimum length */ + tmplen = skb->len; + if (tmplen < 60) + tmplen = 60; + descr.Len = 65536 - tmplen; + + /* copy filler into RAM - in case we're filling up... + we're filling a bit more than necessary, but that doesn't harm + since the buffer is far larger... */ + if (tmplen > skb->len) { + char *fill = "NetBSD is a nice OS too! "; + unsigned int destoffs = 0, l = strlen(fill); + + while (destoffs < tmplen) { + isa_memcpy_toio(dev->mem_start + descr.LowAddr + + destoffs, fill, l); + destoffs += l; + } + } + + /* do the real data copying */ + isa_memcpy_toio(dev->mem_start + descr.LowAddr, skb->data, + skb->len); + + /* hand descriptor over to LANCE - this is the first and last chunk */ + descr.Flags = + TXDSCR_FLAGS_OWN | TXDSCR_FLAGS_STP | TXDSCR_FLAGS_ENP; #ifdef DEBUG - PrTime(); printk("Send packet on descr %d len %d\n", priv->nexttxput, skb->len); + PrTime(); + printk("Send packet on descr %d len %d\n", priv->nexttxput, + skb->len); #endif - /* one more descriptor busy */ - save_flags(flags); - cli(); - priv->nexttxput++; - if (priv->nexttxput >= TXCOUNT) - priv->nexttxput = 0; - priv->txbusy++; - dev->tbusy = (priv->txbusy >= TXCOUNT); - - /* write descriptor back to RAM */ - isa_memcpy_toio(dev->mem_start + address, &descr, sizeof(LANCE_TxDescr)); + /* one more descriptor busy */ + save_flags(flags); + cli(); + priv->nexttxput++; + if (priv->nexttxput >= TXCOUNT) + priv->nexttxput = 0; + priv->txbusy++; + if (priv->txbusy < TXCOUNT) + netif_wake_queue(dev); + + /* write descriptor back to RAM */ + isa_memcpy_toio(dev->mem_start + address, &descr, + sizeof(LANCE_TxDescr)); - /* if no descriptors were active, give the LANCE a hint to read it - immediately */ + /* if no descriptors were active, give the LANCE a hint to read it + immediately */ - if (priv->txbusy == 0) - SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_TDMD); + if (priv->txbusy == 0) + SetLANCE(dev, LANCE_CSR0, CSR0_INEA | CSR0_TDMD); - restore_flags(flags); + restore_flags(flags); tx_done: - - /* When did that change exactly ? */ - -#if LINUX_VERSION_CODE >= 0x020200 - dev_kfree_skb(skb); -#else - dev_kfree_skb(skb, FREE_WRITE); -#endif - return retval; + /* When did that change exactly ? */ + dev_kfree_skb(skb); + return retval; } /* return pointer to Ethernet statistics */ static struct enet_statistics *skmca_stats(struct net_device *dev) { - skmca_priv *priv = (skmca_priv*) dev->priv; - - return &(priv->stat); + skmca_priv *priv = (skmca_priv *) dev->priv; + return &(priv->stat); } /* we don't support runtime reconfiguration, since an MCA card can @@ -876,7 +874,7 @@ static int skmca_config(struct net_device *dev, struct ifmap *map) { - return 0; + return 0; } /* switch receiver mode. We use the LANCE's multicast filter to prefilter @@ -884,39 +882,38 @@ static void skmca_set_multicast_list(struct net_device *dev) { - LANCE_InitBlock block; + LANCE_InitBlock block; - /* first stop the LANCE... */ - StopLANCE(dev); + /* first stop the LANCE... */ + StopLANCE(dev); - /* ...then modify the initialization block... */ - isa_memcpy_fromio(&block, dev->mem_start + RAM_INITBASE, sizeof(block)); - if (dev->flags & IFF_PROMISC) - block.Mode |= LANCE_INIT_PROM; - else - block.Mode &= ~LANCE_INIT_PROM; - - if (dev->flags & IFF_ALLMULTI) /* get all multicasts */ - { - memset(block.LAdrF, 8, 0xff); - } - else /* get selected/no multicasts */ - { - struct dev_mc_list *mptr; - int code; - - memset(block.LAdrF, 8, 0x00); - for (mptr = dev->mc_list; mptr != NULL; mptr = mptr->next) - { - code = GetHash(mptr->dmi_addr); - block.LAdrF[(code >> 3) & 7] |= 1 << (code & 7); - } - } + /* ...then modify the initialization block... */ + isa_memcpy_fromio(&block, dev->mem_start + RAM_INITBASE, + sizeof(block)); + if (dev->flags & IFF_PROMISC) + block.Mode |= LANCE_INIT_PROM; + else + block.Mode &= ~LANCE_INIT_PROM; + + if (dev->flags & IFF_ALLMULTI) { /* get all multicasts */ + memset(block.LAdrF, 8, 0xff); + } else { /* get selected/no multicasts */ + + struct dev_mc_list *mptr; + int code; + + memset(block.LAdrF, 8, 0x00); + for (mptr = dev->mc_list; mptr != NULL; mptr = mptr->next) { + code = GetHash(mptr->dmi_addr); + block.LAdrF[(code >> 3) & 7] |= 1 << (code & 7); + } + } - isa_memcpy_toio(dev->mem_start + RAM_INITBASE, &block, sizeof(block)); + isa_memcpy_toio(dev->mem_start + RAM_INITBASE, &block, + sizeof(block)); - /* ...then reinit LANCE with the correct flags */ - InitLANCE(dev); + /* ...then reinit LANCE with the correct flags */ + InitLANCE(dev); } /* ------------------------------------------------------------------------ @@ -924,149 +921,143 @@ * ------------------------------------------------------------------------ */ #ifdef MODULE -static int startslot; /* counts through slots when probing multiple devices */ +static int startslot; /* counts through slots when probing multiple devices */ #else -#define startslot 0 /* otherwise a dummy, since there is only eth0 in-kern*/ +#define startslot 0 /* otherwise a dummy, since there is only eth0 in-kern */ #endif int skmca_probe(struct net_device *dev) { - int force_detect = 0; - int junior, slot, i; - int base = 0, irq = 0; - skmca_priv *priv; - skmca_medium medium; - - /* can't work without an MCA bus ;-) */ - - if (MCA_bus == 0) - return ENODEV; - - /* start address of 1 --> forced detection */ - - if (dev->mem_start == 1) - force_detect = 1; - - /* search through slots */ - - if (dev != NULL) - { - base = dev->mem_start; - irq = dev->irq; - } - slot = dofind(&junior, startslot); - - while (slot != -1) - { - /* deduce card addresses */ + int force_detect = 0; + int junior, slot, i; + int base = 0, irq = 0; + skmca_priv *priv; + skmca_medium medium; + + /* can't work without an MCA bus ;-) */ + + if (MCA_bus == 0) + return ENODEV; - getaddrs(slot, junior, &base, &irq, &medium); + /* start address of 1 --> forced detection */ + + if (dev->mem_start == 1) + force_detect = 1; + + /* search through slots */ + + if (dev != NULL) { + base = dev->mem_start; + irq = dev->irq; + } + slot = dofind(&junior, startslot); + + while (slot != -1) { + /* deduce card addresses */ + + getaddrs(slot, junior, &base, &irq, &medium); #if LINUX_VERSION_CODE >= 0x020200 - /* slot already in use ? */ + /* slot already in use ? */ - if (mca_is_adapter_used(slot)) - { - slot = dofind(&junior, slot + 1); - continue; - } + if (mca_is_adapter_used(slot)) { + slot = dofind(&junior, slot + 1); + continue; + } #endif - /* were we looking for something different ? */ - - if ((dev->irq != 0) || (dev->mem_start != 0)) - { - if ((dev->irq != 0) && (dev->irq != irq)) - { - slot = dofind(&junior, slot + 1); - continue; - } - if ((dev->mem_start != 0) && (dev->mem_start != base)) - { - slot = dofind(&junior, slot + 1); - continue; - } - } - - /* found something that matches */ - - break; - } - - /* nothing found ? */ - - if (slot == -1) - return ((base != 0) || (irq != 0)) ? ENXIO : ENODEV; - - /* make procfs entries */ - - if (junior) - mca_set_adapter_name(slot, "SKNET junior MC2 Ethernet Adapter"); - else - mca_set_adapter_name(slot, "SKNET MC2+ Ethernet Adapter"); - mca_set_adapter_procfn(slot, (MCA_ProcFn) skmca_getinfo, dev); + /* were we looking for something different ? */ + + if ((dev->irq != 0) || (dev->mem_start != 0)) { + if ((dev->irq != 0) && (dev->irq != irq)) { + slot = dofind(&junior, slot + 1); + continue; + } + if ((dev->mem_start != 0) + && (dev->mem_start != base)) { + slot = dofind(&junior, slot + 1); + continue; + } + } + + /* found something that matches */ + + break; + } + + /* nothing found ? */ + + if (slot == -1) + return ((base != 0) || (irq != 0)) ? ENXIO : ENODEV; + + /* make procfs entries */ + + if (junior) + mca_set_adapter_name(slot, + "SKNET junior MC2 Ethernet Adapter"); + else + mca_set_adapter_name(slot, "SKNET MC2+ Ethernet Adapter"); + mca_set_adapter_procfn(slot, (MCA_ProcFn) skmca_getinfo, dev); #if LINUX_VERSION_CODE >= 0x020200 - mca_mark_as_used(slot); + mca_mark_as_used(slot); #endif - - /* announce success */ - printk("%s: SKNet %s adapter found in slot %d\n", dev->name, - junior ? "Junior MC2" : "MC2+", slot + 1); - - /* allocate structure */ - priv = dev->priv = (skmca_priv*) kmalloc(sizeof(skmca_priv), GFP_KERNEL); - priv->slot = slot; - priv->macbase = base + 0x3fc0; - priv->ioregaddr = base + 0x3ff0; - priv->ctrladdr = base + 0x3ff2; - priv->cmdaddr = base + 0x3ff3; - priv->realirq = irq; - priv->medium = medium; - memset(&(priv->stat), 0, sizeof(struct enet_statistics)); - - /* set base + irq for this device (irq not allocated so far) */ - dev->irq = 0; - dev->mem_start = base; - dev->mem_end = base + 0x4000; - - /* set methods */ - dev->open = skmca_open; - dev->stop = skmca_close; - dev->set_config = skmca_config; - dev->hard_start_xmit = skmca_tx; - dev->do_ioctl = NULL; - dev->get_stats = skmca_stats; - dev->set_multicast_list = skmca_set_multicast_list; - dev->flags |= IFF_MULTICAST; - - /* generic setup */ - ether_setup(dev); - dev->interrupt = 0; - dev->tbusy = 0; - dev->start = 0; - - /* copy out MAC address */ - for (i = 0; i < 6; i++) - dev->dev_addr[i] = readb(priv->macbase + (i << 1)); - - /* print config */ - printk("%s: IRQ %d, memory %#lx-%#lx, " - "MAC address %02x:%02x:%02x:%02x:%02x:%02x.\n", - dev->name, priv->realirq, dev->mem_start, dev->mem_end - 1, - dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], - dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); - printk("%s: %s medium\n", dev->name, MediaNames[priv->medium]); - /* reset board */ + /* announce success */ + printk("%s: SKNet %s adapter found in slot %d\n", dev->name, + junior ? "Junior MC2" : "MC2+", slot + 1); + + /* allocate structure */ + priv = dev->priv = + (skmca_priv *) kmalloc(sizeof(skmca_priv), GFP_KERNEL); + priv->slot = slot; + priv->macbase = base + 0x3fc0; + priv->ioregaddr = base + 0x3ff0; + priv->ctrladdr = base + 0x3ff2; + priv->cmdaddr = base + 0x3ff3; + priv->realirq = irq; + priv->medium = medium; + memset(&(priv->stat), 0, sizeof(struct enet_statistics)); + + /* set base + irq for this device (irq not allocated so far) */ + dev->irq = 0; + dev->mem_start = base; + dev->mem_end = base + 0x4000; + + /* set methods */ + dev->open = skmca_open; + dev->stop = skmca_close; + dev->set_config = skmca_config; + dev->hard_start_xmit = skmca_tx; + dev->do_ioctl = NULL; + dev->get_stats = skmca_stats; + dev->set_multicast_list = skmca_set_multicast_list; + dev->flags |= IFF_MULTICAST; + + /* generic setup */ + ether_setup(dev); + + /* copy out MAC address */ + for (i = 0; i < 6; i++) + dev->dev_addr[i] = readb(priv->macbase + (i << 1)); + + /* print config */ + printk("%s: IRQ %d, memory %#lx-%#lx, " + "MAC address %02x:%02x:%02x:%02x:%02x:%02x.\n", + dev->name, priv->realirq, dev->mem_start, dev->mem_end - 1, + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], + dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); + printk("%s: %s medium\n", dev->name, MediaNames[priv->medium]); + + /* reset board */ - ResetBoard(dev); + ResetBoard(dev); #ifdef MODULE - startslot = slot + 1; + startslot = slot + 1; #endif - return 0; + return 0; } /* ------------------------------------------------------------------------ @@ -1079,61 +1070,58 @@ static char NameSpace[8 * DEVMAX]; static struct net_device moddevs[DEVMAX] = - {{NameSpace + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, - {NameSpace + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, - {NameSpace + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, - {NameSpace + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, - {NameSpace + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}}; + { {NameSpace + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, +{NameSpace + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, +{NameSpace + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, +{NameSpace + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe}, +{NameSpace + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, skmca_probe} +}; -int irq=0; -int io=0; +int irq = 0; +int io = 0; int init_module(void) { - int z, res; + int z, res; - startslot = 0; - for (z = 0; z < DEVMAX; z++) - { - strcpy(moddevs[z].name, " "); - res = register_netdev(moddevs + z); - if (res != 0) - return (z > 0) ? 0 : -EIO; - } + startslot = 0; + for (z = 0; z < DEVMAX; z++) { + strcpy(moddevs[z].name, " "); + res = register_netdev(moddevs + z); + if (res != 0) + return (z > 0) ? 0 : -EIO; + } - return 0; + return 0; } void cleanup_module(void) { - struct net_device *dev; - skmca_priv *priv; - int z; - - if (MOD_IN_USE) - { - printk("cannot unload, module in use\n"); - return; - } - - for (z = 0; z < DEVMAX; z++) - { - dev = moddevs + z; - if (dev->priv != NULL) - { - priv = (skmca_priv*) dev->priv; - DeinitBoard(dev); - if (dev->irq != 0) - free_irq(dev->irq, dev); - dev->irq = 0; - unregister_netdev(dev); + struct net_device *dev; + skmca_priv *priv; + int z; + + if (MOD_IN_USE) { + printk("cannot unload, module in use\n"); + return; + } + + for (z = 0; z < DEVMAX; z++) { + dev = moddevs + z; + if (dev->priv != NULL) { + priv = (skmca_priv *) dev->priv; + DeinitBoard(dev); + if (dev->irq != 0) + free_irq(dev->irq, dev); + dev->irq = 0; + unregister_netdev(dev); #if LINUX_VERSION_CODE >= 0x020200 - mca_mark_as_unused(priv->slot); + mca_mark_as_unused(priv->slot); #endif - mca_set_adapter_procfn(priv->slot, NULL, NULL); - kfree_s(dev->priv, sizeof(skmca_priv)); - dev->priv = NULL; - } - } + mca_set_adapter_procfn(priv->slot, NULL, NULL); + kfree_s(dev->priv, sizeof(skmca_priv)); + dev->priv = NULL; + } + } } -#endif /* MODULE */ +#endif /* MODULE */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/smc-ultra.c linux/drivers/net/smc-ultra.c --- v2.3.43/linux/drivers/net/smc-ultra.c Fri Jan 21 18:19:16 2000 +++ linux/drivers/net/smc-ultra.c Thu Feb 10 14:56:48 2000 @@ -403,8 +403,7 @@ { int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* CMDREG */ - dev->start = 0; - dev->tbusy = 1; + netif_stop_queue(dev); if (ei_debug > 1) printk("%s: Shutting down ethercard.\n", dev->name); diff -u --recursive --new-file v2.3.43/linux/drivers/net/smc-ultra32.c linux/drivers/net/smc-ultra32.c --- v2.3.43/linux/drivers/net/smc-ultra32.c Mon Nov 1 13:56:26 1999 +++ linux/drivers/net/smc-ultra32.c Thu Feb 10 14:56:48 2000 @@ -265,9 +265,8 @@ { int ioaddr = dev->base_addr - ULTRA32_NIC_OFFSET; /* CMDREG */ - dev->start = 0; - dev->tbusy = 1; - + netif_stop_queue(dev); + if (ei_debug > 1) printk("%s: Shutting down ethercard.\n", dev->name); diff -u --recursive --new-file v2.3.43/linux/drivers/net/sunbmac.c linux/drivers/net/sunbmac.c --- v2.3.43/linux/drivers/net/sunbmac.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/sunbmac.c Thu Feb 10 19:00:35 2000 @@ -1,4 +1,4 @@ -/* $Id: sunbmac.c,v 1.14 2000/02/09 11:15:35 davem Exp $ +/* $Id: sunbmac.c,v 1.15 2000/02/10 21:14:22 davem Exp $ * sunbmac.c: Driver for Sparc BigMAC 100baseT ethernet adapters. * * Copyright (C) 1997, 1998, 1999 David S. Miller (davem@redhat.com) diff -u --recursive --new-file v2.3.43/linux/drivers/net/sunhme.c linux/drivers/net/sunhme.c --- v2.3.43/linux/drivers/net/sunhme.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/sunhme.c Thu Feb 10 19:00:35 2000 @@ -1,4 +1,4 @@ -/* $Id: sunhme.c,v 1.86 2000/02/09 11:15:36 davem Exp $ +/* $Id: sunhme.c,v 1.87 2000/02/10 21:14:22 davem Exp $ * sunhme.c: Sparc HME/BigMac 10/100baseT half/full duplex auto switching, * auto carrier detecting ethernet driver. Also known as the * "Happy Meal Ethernet" found on SunSwift SBUS cards. diff -u --recursive --new-file v2.3.43/linux/drivers/net/sunlance.c linux/drivers/net/sunlance.c --- v2.3.43/linux/drivers/net/sunlance.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/sunlance.c Thu Feb 10 19:00:35 2000 @@ -1,4 +1,4 @@ -/* $Id: sunlance.c,v 1.94 2000/02/09 11:15:40 davem Exp $ +/* $Id: sunlance.c,v 1.95 2000/02/10 21:14:24 davem Exp $ * lance.c: Linux/Sparc/Lance driver * * Written 1995, 1996 by Miguel de Icaza diff -u --recursive --new-file v2.3.43/linux/drivers/net/sunqe.c linux/drivers/net/sunqe.c --- v2.3.43/linux/drivers/net/sunqe.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/sunqe.c Thu Feb 10 19:00:35 2000 @@ -1,4 +1,4 @@ -/* $Id: sunqe.c,v 1.43 2000/02/09 21:11:19 davem Exp $ +/* $Id: sunqe.c,v 1.44 2000/02/10 21:14:25 davem Exp $ * sunqe.c: Sparc QuadEthernet 10baseT SBUS card driver. * Once again I am out to prove that every ethernet * controller out there can be most efficiently programmed diff -u --recursive --new-file v2.3.43/linux/drivers/net/tlan.c linux/drivers/net/tlan.c --- v2.3.43/linux/drivers/net/tlan.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/tlan.c Thu Feb 10 19:01:42 2000 @@ -62,6 +62,10 @@ * driver (almost) * - Other minor stuff * + * v1.4 Feb 10, 2000 - Updated with more changes required after Dave's + * network cleanup in 2.3.43pre7 (Tigran & myself) + * - Minor stuff. + * *******************************************************************************/ @@ -102,7 +106,7 @@ static u8 *TLanPadBuffer; static char TLanSignature[] = "TLAN"; static int TLanVersionMajor = 1; -static int TLanVersionMinor = 3; +static int TLanVersionMinor = 4; static TLanAdapterEntry TLanAdapterList[] __initdata = { @@ -361,7 +365,7 @@ u32 io_base, index; int found; - printk(KERN_INFO "ThunderLAN driver v%d.%d:\n", + printk(KERN_INFO "ThunderLAN driver v%d.%d\n", TLanVersionMajor, TLanVersionMinor); @@ -461,7 +465,7 @@ * **************************************************************/ -int TLan_PciProbe(u8 *pci_dfn, u8 *pci_irq, u8 *pci_rev, u32 *pci_io_base, u32 *dl_ix ) +static int __init TLan_PciProbe(u8 *pci_dfn, u8 *pci_irq, u8 *pci_rev, u32 *pci_io_base, u32 *dl_ix ) { static int dl_index = 0; static struct pci_dev * pdev = NULL; @@ -626,7 +630,7 @@ * **************************************************************/ -int TLan_Open( struct net_device *dev ) +static int TLan_Open( struct net_device *dev ) { TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv; int err; @@ -642,7 +646,7 @@ } netif_start_queue(dev); - + /* NOTE: It might not be necessary to read the stats before a reset if you don't care what the values are. */ @@ -680,7 +684,7 @@ * **************************************************************/ -int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) +static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) { TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv; TLanList *tail_list; @@ -690,7 +694,10 @@ if ( ! priv->phyOnline ) { TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", dev->name ); - dev_kfree_skb( skb ); + if (in_irq()) + dev_kfree_skb_irq(skb); + else + dev_kfree_skb(skb); return 0; } @@ -748,7 +755,10 @@ CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS ); if ( bbuf ) { - dev_kfree_skb( skb ); + if (in_irq()) + dev_kfree_skb_irq(skb); + else + dev_kfree_skb(skb); } dev->trans_start = jiffies; @@ -780,7 +790,7 @@ * **************************************************************/ -void TLan_HandleInterrupt(int irq, void *dev_id, struct pt_regs *regs) +static void TLan_HandleInterrupt(int irq, void *dev_id, struct pt_regs *regs) { u32 ack; struct net_device *dev; @@ -828,7 +838,7 @@ * **************************************************************/ -int TLan_Close(struct net_device *dev) +static int TLan_Close(struct net_device *dev) { TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv; @@ -866,7 +876,7 @@ * **************************************************************/ -struct net_device_stats *TLan_GetStats( struct net_device *dev ) +static struct net_device_stats *TLan_GetStats( struct net_device *dev ) { TLanPrivateInfo *priv = (TLanPrivateInfo *) dev->priv; int i; @@ -914,7 +924,7 @@ * **************************************************************/ -void TLan_SetMulticastList( struct net_device *dev ) +static void TLan_SetMulticastList( struct net_device *dev ) { struct dev_mc_list *dmi = dev->mc_list; u32 hash1 = 0; @@ -1033,7 +1043,7 @@ head_list = priv->txList + priv->txHead; if ( ! bbuf ) { - dev_kfree_skb( (struct sk_buff *) head_list->buffer[9].address ); + dev_kfree_skb_irq( (struct sk_buff *) head_list->buffer[9].address ); head_list->buffer[9].address = 0; } @@ -1046,7 +1056,9 @@ priv->stats.tx_bytes += head_list->frameSize; head_list->cStat = TLAN_CSTAT_UNUSED; + netif_start_queue(dev); + CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS ); if ( eoc ) { TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); @@ -1614,7 +1626,10 @@ list = priv->txList + i; skb = (struct sk_buff *) list->buffer[9].address; if ( skb ) { - dev_kfree_skb( skb ); + if (in_irq()) + dev_kfree_skb_irq( skb ); + else + dev_kfree_skb( skb ); list->buffer[9].address = 0; } } @@ -1623,7 +1638,10 @@ list = priv->rxList + i; skb = (struct sk_buff *) list->buffer[9].address; if ( skb ) { - dev_kfree_skb( skb ); + if (in_irq()) + dev_kfree_skb_irq( skb ); + else + dev_kfree_skb( skb ); list->buffer[9].address = 0; } } @@ -2413,6 +2431,7 @@ *val = tmp; spin_unlock_irqrestore(&priv->lock, flags); + return err; } /* TLan_MiiReadReg */ @@ -2552,6 +2571,7 @@ TLan_SetBit( TLAN_NET_SIO_MINTEN, sio ); spin_unlock_irqrestore(&priv->lock, flags); + } /* TLan_MiiWriteReg */ @@ -2775,9 +2795,9 @@ goto fail; } TLan_EeReceiveByte( dev->base_addr, data, TLAN_EEPROM_STOP ); - fail: spin_unlock_irqrestore(&priv->lock, flags); + return ret; } /* TLan_EeReadByte */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/tokenring/ibmtr.c linux/drivers/net/tokenring/ibmtr.c --- v2.3.43/linux/drivers/net/tokenring/ibmtr.c Fri Jan 21 18:19:16 2000 +++ linux/drivers/net/tokenring/ibmtr.c Thu Feb 10 17:03:43 2000 @@ -833,11 +833,8 @@ if (ti->open_status==IN_PROGRESS) sleep_on(&ti->wait_for_reset); if (ti->open_status==SUCCESS) { - dev->tbusy=0; - dev->interrupt=0; - dev->start=1; /* NEED to see smem size *AND* reset high 512 bytes if needed */ - + netif_start_queue(dev); MOD_INC_USE_COUNT; return 0; @@ -850,6 +847,8 @@ struct tok_info *ti=(struct tok_info *) dev->priv; + netif_stop_queue(dev); + isa_writeb(DIR_CLOSE_ADAPTER, ti->srb + offsetof(struct srb_close_adapter, command)); isa_writeb(CMD_IN_SRB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); @@ -862,7 +861,6 @@ DPRINTK("close adapter failed: %02X\n", (int)isa_readb(ti->srb + offsetof(struct srb_close_adapter, ret_code))); - dev->start = 0; #ifdef PCMCIA ti->sram = 0 ; #endif @@ -886,7 +884,6 @@ spin_lock(&(ti->lock)); /* Disable interrupts till processing is finished */ - dev->interrupt=1; isa_writeb((~INT_ENABLE), ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_EVEN); /* Reset interrupt for ISA boards */ @@ -911,7 +908,6 @@ { DPRINTK("PCMCIA card removed.\n"); spin_unlock(&(ti->lock)); - dev->interrupt = 0; return; } @@ -920,7 +916,6 @@ { DPRINTK("PCMCIA card removed.\n"); spin_unlock(&(ti->lock)); - dev->interrupt = 0; return; } #endif @@ -941,7 +936,6 @@ isa_writeb((~ADAP_CHK_INT), ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_ODD); isa_writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); - dev->interrupt=0; } else if (isa_readb(ti->mmio + ACA_OFFSET + ACA_RW + ISRP_EVEN) & (TCR_INT | ERR_INT | ACCESS_INT)) { @@ -951,7 +945,6 @@ isa_writeb(~(TCR_INT | ERR_INT | ACCESS_INT), ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_EVEN); isa_writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); - dev->interrupt=0; } else if (status & (SRB_RESP_INT | ASB_FREE_INT | ARB_CMD_INT | SSB_RESP_INT)) { @@ -972,7 +965,7 @@ dev_kfree_skb(ti->current_skb); ti->current_skb=NULL; } - dev->tbusy=0; + netif_wake_queue(dev); if (ti->readlog_pending) ibmtr_readlog(dev); } } @@ -989,8 +982,9 @@ dev_kfree_skb(ti->current_skb); ti->current_skb=NULL; } - dev->tbusy=0; - if (ti->readlog_pending) ibmtr_readlog(dev); + netif_wake_queue(dev); + if (ti->readlog_pending) + ibmtr_readlog(dev); } } break; @@ -1115,7 +1109,7 @@ (int)isa_readb(ti->srb+offsetof(struct srb_read_log, token_errors))); } - dev->tbusy=0; + netif_wake_queue(dev); break; default: @@ -1183,7 +1177,7 @@ DPRINTK("New ring status: %02X\n", ring_status); if (ring_status & LOG_OVERFLOW) { - if (dev->tbusy) + if (test_bit(LINK_STATE_XOFF, &dev->state)) ti->readlog_pending = 1; else ibmtr_readlog(dev); @@ -1235,7 +1229,6 @@ } /* SRB, ARB, ASB or SSB response */ - dev->interrupt=0; isa_writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); break; @@ -1330,7 +1323,7 @@ ti->do_tok_int=FIRST_INT; /* Reset adapter */ - dev->tbusy=1; /* nothing can be done before reset and open completed */ + netif_stop_queue(dev); #ifdef ENABLE_PAGING if(ti->page_mask) @@ -1498,10 +1491,9 @@ isa_writeb(RESP_IN_ASB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); ti->tr_stats.tx_bytes+=ti->current_skb->len; - dev->tbusy=0; dev_kfree_skb(ti->current_skb); ti->current_skb=NULL; - mark_bh(NET_BH); + netif_wake_queue(dev); if (ti->readlog_pending) ibmtr_readlog(dev); } @@ -1661,38 +1653,22 @@ static int tok_send_packet(struct sk_buff *skb, struct net_device *dev) { struct tok_info *ti; + unsigned long flags; ti=(struct tok_info *) dev->priv; - if (dev->tbusy) { - int ticks_waited; - - ticks_waited=jiffies - dev->trans_start; - if (ticks_waitedtrans_start+=5; /* we fake the transmission start time... */ - return 1; - } - - if (test_and_set_bit(0,(void *)&dev->tbusy)!=0) - DPRINTK("Transmitter access conflict\n"); - else { - int flags; - - /* lock against other CPUs */ - spin_lock_irqsave(&(ti->lock), flags); - - /* Save skb; we'll need it when the adapter asks for the data */ - ti->current_skb=skb; - isa_writeb(XMIT_UI_FRAME, ti->srb + offsetof(struct srb_xmit, command)); - isa_writew(ti->exsap_station_id, ti->srb - +offsetof(struct srb_xmit, station_id)); - isa_writeb(CMD_IN_SRB, (ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD)); - spin_unlock_irqrestore(&(ti->lock), flags); - - dev->trans_start=jiffies; - } + netif_stop_queue(dev); + + /* lock against other CPUs */ + spin_lock_irqsave(&(ti->lock), flags); + /* Save skb; we'll need it when the adapter asks for the data */ + ti->current_skb=skb; + isa_writeb(XMIT_UI_FRAME, ti->srb + offsetof(struct srb_xmit, command)); + isa_writew(ti->exsap_station_id, ti->srb + +offsetof(struct srb_xmit, station_id)); + isa_writeb(CMD_IN_SRB, (ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD)); + spin_unlock_irqrestore(&(ti->lock), flags); + dev->trans_start=jiffies; return 0; } @@ -1712,7 +1688,8 @@ isa_writeb(DIR_READ_LOG, ti->srb); isa_writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); isa_writeb(CMD_IN_SRB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); - dev->tbusy=1; /* really srb busy... */ + + netif_stop_queue(dev); } /* tok_get_stats(): Basically a scaffold routine which will return diff -u --recursive --new-file v2.3.43/linux/drivers/net/tokenring/olympic.c linux/drivers/net/tokenring/olympic.c --- v2.3.43/linux/drivers/net/tokenring/olympic.c Fri Jan 21 18:19:16 2000 +++ linux/drivers/net/tokenring/olympic.c Thu Feb 10 17:03:43 2000 @@ -615,10 +615,7 @@ #endif - dev->start = 1; - dev->interrupt=0; - dev->tbusy=0; - + netif_start_queue(dev); MOD_INC_USE_COUNT ; return 0; @@ -762,11 +759,6 @@ spin_lock(&olympic_priv->olympic_lock); - if (dev->interrupt) - printk(KERN_WARNING "%s: Re-entering interrupt \n",dev->name) ; - - dev->interrupt = 1 ; - if (sisr & (SISR_SRB_REPLY | SISR_TX1_EOF | SISR_RX_STATUS | SISR_ADAPTER_CHECK | SISR_ASB_FREE | SISR_ARB_CMD | SISR_TRB_REPLY | SISR_RX_NOBUF)) { @@ -788,11 +780,7 @@ dev_kfree_skb(olympic_priv->tx_ring_skb[olympic_priv->tx_ring_last_status]); olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_last_status].buffer=0xdeadbeef; olympic_priv->olympic_tx_status_ring[olympic_priv->tx_ring_last_status].status=0; - - if(dev->tbusy) { - dev->tbusy=0; - mark_bh(NET_BH); - } + netif_wake_queue(dev); } /* SISR_TX1_EOF */ if (sisr & SISR_RX_STATUS) { @@ -804,7 +792,6 @@ writel(readl(olympic_mmio+LAPWWO),olympic_mmio+LAPA); adapter_check_area = (__u8 *)(olympic_mmio+LAPWWO) ; printk(KERN_WARNING "%s: Bytes %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",dev->name, readb(adapter_check_area+0), readb(adapter_check_area+1), readb(adapter_check_area+2), readb(adapter_check_area+3), readb(adapter_check_area+4), readb(adapter_check_area+5), readb(adapter_check_area+6), readb(adapter_check_area+7)) ; - dev->interrupt = 0 ; free_irq(dev->irq, dev) ; } /* SISR_ADAPTER_CHECK */ @@ -837,8 +824,6 @@ printk(KERN_WARNING "%s: SISR_MASK: %x\n",dev->name, readl(olympic_mmio+SISR_MASK)) ; } /* One if the interrupts we want */ - dev->interrupt = 0 ; - writel(SISR_MI,olympic_mmio+SISR_MASK_SUM); spin_unlock(&olympic_priv->olympic_lock) ; @@ -852,11 +837,8 @@ spin_lock_irqsave(&olympic_priv->olympic_lock, flags); - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) { - spin_unlock_irqrestore(&olympic_priv->olympic_lock,flags); - return 1; - } - + netif_stop_queue(dev); + if(olympic_priv->free_tx_ring_entries) { olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_free].buffer=virt_to_bus(skb->data); olympic_priv->olympic_tx_ring[olympic_priv->tx_ring_free].status_length=skb->len | (0x80000000); @@ -869,7 +851,7 @@ writew((((readw(olympic_mmio+TXENQ_1)) & 0x8000) ^ 0x8000) | 1,olympic_mmio+TXENQ_1); - dev->tbusy=0; + netif_wake_queue(dev); spin_unlock_irqrestore(&olympic_priv->olympic_lock,flags); return 0; } else { @@ -887,6 +869,8 @@ unsigned long flags; int i; + netif_stop_queue(dev); + writel(olympic_priv->srb,olympic_mmio+LAPA); srb=olympic_priv->olympic_lap + (olympic_priv->srb & (~0xf800)); @@ -936,7 +920,6 @@ printk("%x ",readb(srb+i)); printk("\n"); #endif - dev->start = 0; free_irq(dev->irq,dev); MOD_DEC_USE_COUNT ; @@ -1169,7 +1152,7 @@ struct sockaddr *saddr = addr ; struct olympic_private *olympic_priv = (struct olympic_private *)dev->priv ; - if (dev->start) { + if (test_bit(LINK_STATE_START, &dev->state)) { printk(KERN_WARNING "%s: Cannot set mac/laa address while card is open\n", dev->name) ; return -EIO ; } @@ -1304,9 +1287,7 @@ writel(readl(olympic_mmio+BCTL)|(3<<13),olympic_mmio+BCTL); udelay(1); writel(readl(olympic_mmio+BCTL)&~(3<<13),olympic_mmio+BCTL); - dev->tbusy = 1 ; - dev->interrupt = 1 ; - dev->start = 0 ; + netif_stop_queue(dev); olympic_priv->srb = readw(olympic_priv->olympic_lap + LAPWWO) ; free_irq(dev->irq,dev); diff -u --recursive --new-file v2.3.43/linux/drivers/net/tokenring/smctr.c linux/drivers/net/tokenring/smctr.c --- v2.3.43/linux/drivers/net/tokenring/smctr.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/tokenring/smctr.c Thu Feb 10 17:03:43 2000 @@ -131,7 +131,6 @@ /* H */ static int smctr_hardware_send_packet(struct net_device *dev, struct net_local *tp); - /* I */ static int smctr_init_acbs(struct net_device *dev); static int smctr_init_adapter(struct net_device *dev); @@ -282,6 +281,7 @@ static int smctr_status_chg(struct net_device *dev); /* T */ +static void smctr_timeout(struct net_device *dev); static int smctr_trc_send_packet(struct net_device *dev, FCBlock *fcb, __u16 queue); static __u16 smctr_tx_complete(struct net_device *dev, __u16 queue); @@ -730,9 +730,8 @@ struct sk_buff *skb; int err; - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + #ifdef MODULE MOD_DEC_USE_COUNT; #endif @@ -2030,13 +2029,9 @@ return; } - dev->interrupt = 1; - ioaddr = dev->base_addr; tp = (struct net_local *)dev->priv; - dev->interrupt = 0; - if(tp->status == NOT_INITIALIZED) return; @@ -3749,6 +3744,8 @@ dev->open = smctr_open; dev->stop = smctr_close; dev->hard_start_xmit = smctr_send_packet; + dev->tx_timeout = smctr_timeout; + dev->watchdog_timeo = HZ; dev->get_stats = smctr_get_stats; dev->set_multicast_list = &smctr_set_multicast_list; @@ -4723,6 +4720,20 @@ return (0); } +static void smctr_timeout(struct net_device *dev) +{ + /* + * If we get here, some higher level has decided we are broken. + * There should really be a "kick me" function call instead. + * + * Resetting the token ring adapter takes a long time so just + * fake transmission time and go on trying. Our own timeout + * routine is in sktr_timer_chk() + */ + dev->trans_start = jiffies; + netif_wake_queue(dev); +} + /* * Gets skb from system, queues it and checks if it can be sent */ @@ -4733,37 +4744,11 @@ if(smctr_debug > 10) printk("%s: smctr_send_packet\n", dev->name); - if(dev->tbusy) - { - /* - * If we get here, some higher level has decided we are broken. - * There should really be a "kick me" function call instead. - * - * Resetting the token ring adapter takes a long time so just - * fake transmission time and go on trying. Our own timeout - * routine is in sktr_timer_chk() - */ - dev->tbusy = 0; - dev->trans_start = jiffies; - return (1); - } - - /* - * If some higher layer thinks we've missed an tx-done interrupt we - * are passed NULL. - */ - if(skb == NULL) - return (0); - /* - * Block a timer-based transmit from overlapping. This could better be - * done with atomic_swap(1, dev->tbusy), but set_bit() works as well. + * Block a transmit overlap */ - if(test_and_set_bit(0, (void*)&dev->tbusy) != 0) - { - printk("%s: Transmitter access conflict.\n", dev->name); - return (1); - } + + netif_stop_queue(dev); if(tp->QueueSkb == 0) return (1); /* Return with tbusy set: queue full */ @@ -4772,8 +4757,8 @@ skb_queue_tail(&tp->SendSkbQueue, skb); smctr_hardware_send_packet(dev, tp); if(tp->QueueSkb > 0) - dev->tbusy = 0; - + netif_wake_queue(dev); + return (0); } @@ -5749,7 +5734,7 @@ tp->num_tx_fcbs_used[queue]--; fcb->frame_status = 0; tp->tx_fcb_end[queue] = fcb->next_ptr; - + netif_wake_queue(dev); return (0); } } diff -u --recursive --new-file v2.3.43/linux/drivers/net/tokenring/tms380tr.c linux/drivers/net/tokenring/tms380tr.c --- v2.3.43/linux/drivers/net/tokenring/tms380tr.c Fri Jan 28 15:09:07 2000 +++ linux/drivers/net/tokenring/tms380tr.c Thu Feb 10 17:03:43 2000 @@ -280,10 +280,8 @@ tms380tr_enable_interrupts(dev); tms380tr_open_adapter(dev); - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 0; - + netif_start_queue(dev); + /* Wait for interrupt from hardware. If interrupt does not come, * there will be a timeout from the timer. */ @@ -298,8 +296,6 @@ return (-1); } - dev->start = 1; - tp->StartTime = jiffies; /* Start function control timer */ @@ -571,6 +567,20 @@ return; } +static void tms380tr_timeout(struct net_device *dev) +{ + /* + * If we get here, some higher level has decided we are broken. + * There should really be a "kick me" function call instead. + * + * Resetting the token ring adapter takes a long time so just + * fake transmission time and go on trying. Our own timeout + * routine is in tms380tr_timer_chk() + */ + dev->trans_start = jiffies; + netif_wake_queue(dev); +} + /* * Gets skb from system, queues it and checks if it can be sent */ @@ -578,38 +588,12 @@ { struct net_local *tp = (struct net_local *)dev->priv; - if(dev->tbusy) - { - /* - * If we get here, some higher level has decided we are broken. - * There should really be a "kick me" function call instead. - * - * Resetting the token ring adapter takes a long time so just - * fake transmission time and go on trying. Our own timeout - * routine is in tms380tr_timer_chk() - */ - dev->tbusy = 0; - dev->trans_start = jiffies; - return (1); - } - /* - * If some higher layer thinks we've missed an tx-done interrupt we - * are passed NULL. + * Block transmits from overlapping. */ - if(skb == NULL) - return (0); - - /* - * Block a timer-based transmit from overlapping. This could better be - * done with atomic_swap(1, dev->tbusy), but set_bit() works as well. - */ - if(test_and_set_bit(0, (void*)&dev->tbusy) != 0) - { - printk("%s: Transmitter access conflict.\n", dev->name); - return (1); - } - + + netif_stop_queue(dev); + if(tp->QueueSkb == 0) return (1); /* Return with tbusy set: queue full */ @@ -617,8 +601,7 @@ skb_queue_tail(&tp->SendSkbQueue, skb); tms380tr_hardware_send_packet(dev, tp); if(tp->QueueSkb > 0) - dev->tbusy = 0; - + netif_wake_queue(dev); return (0); } @@ -773,8 +756,6 @@ return; } - dev->interrupt = 1; - tp = (struct net_local *)dev->priv; irq_type = SIFREADW(SIFSTS); @@ -854,8 +835,6 @@ irq_type = SIFREADW(SIFSTS); } - dev->interrupt = 0; - return; } @@ -1148,9 +1127,8 @@ int tms380tr_close(struct net_device *dev) { struct net_local *tp = (struct net_local *)dev->priv; - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + del_timer(&tp->timer); /* Flush the Tx and disable Rx here. */ @@ -2081,10 +2059,9 @@ tpl->BusyFlag = 0; /* "free" TPL */ } - dev->tbusy = 0; + netif_wake_queue(dev); if(tp->QueueSkb < MAX_TX_QUEUE) tms380tr_hardware_send_packet(dev, tp); - return; } @@ -2367,6 +2344,8 @@ dev->stop = tms380tr_close; dev->do_ioctl = NULL; dev->hard_start_xmit = tms380tr_send_packet; + dev->tx_timeout = tms380tr_timeout; + dev->watchdog_timeo = HZ; dev->get_stats = tms380tr_get_stats; dev->set_multicast_list = &tms380tr_set_multicast_list; dev->set_mac_address = tms380tr_set_mac_address; diff -u --recursive --new-file v2.3.43/linux/drivers/net/tulip.c linux/drivers/net/tulip.c --- v2.3.43/linux/drivers/net/tulip.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/tulip.c Thu Feb 10 19:00:35 2000 @@ -2148,11 +2148,11 @@ if (csr5 & (RxIntr | RxNoBuf)) work_budget -= tulip_rx(dev); - spin_lock(&tp->tx_lock); - if (csr5 & (TxNoBuf | TxDied | TxIntr)) { unsigned int dirty_tx; + spin_lock(&tp->tx_lock); + for (dirty_tx = tp->dirty_tx; tp->cur_tx - dirty_tx > 0; dirty_tx++) { int entry = dirty_tx % TX_RING_SIZE; @@ -2219,8 +2219,8 @@ outl(tp->csr6 | 0x0002, ioaddr + CSR6); outl(tp->csr6 | 0x2002, ioaddr + CSR6); } + spin_unlock(&tp->tx_lock); } - spin_unlock(&tp->tx_lock); /* Log errors. */ if (csr5 & AbnormalIntr) { /* Abnormal error summary bit. */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/wan/dlci.c linux/drivers/net/wan/dlci.c --- v2.3.43/linux/drivers/net/wan/dlci.c Mon Oct 11 15:38:15 1999 +++ linux/drivers/net/wan/dlci.c Thu Feb 10 17:03:43 2000 @@ -244,43 +244,34 @@ if (!skb || !dev) return(0); - if (dev->tbusy) - return(1); - dlp = dev->priv; - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk(KERN_WARNING "%s: transmitter access conflict.\n", dev->name); - else - { - ret = dlp->slave->hard_start_xmit(skb, dlp->slave); - switch (ret) - { - case DLCI_RET_OK: - dlp->stats.tx_packets++; - ret = 0; - break; - + netif_stop_queue(dev); + + ret = dlp->slave->hard_start_xmit(skb, dlp->slave); + switch (ret) + { + case DLCI_RET_OK: + dlp->stats.tx_packets++; + ret = 0; + break; case DLCI_RET_ERR: - dlp->stats.tx_errors++; - ret = 0; - break; - + dlp->stats.tx_errors++; + ret = 0; + break; case DLCI_RET_DROP: - dlp->stats.tx_dropped++; - ret = 1; - break; - } - - /* Alan Cox recommends always returning 0, and always freeing the packet */ - /* experience suggest a slightly more conservative approach */ - - if (!ret) - dev_kfree_skb(skb); - - dev->tbusy = 0; + dlp->stats.tx_dropped++; + ret = 1; + break; } + /* Alan Cox recommends always returning 0, and always freeing the packet */ + /* experience suggest a slightly more conservative approach */ + if (!ret) + { + dev_kfree_skb(skb); + netif_wake_queue(dev); + } return(ret); } @@ -370,19 +361,16 @@ if (!*(short *)(dev->dev_addr)) return(-EINVAL); - if (!dlp->slave->start) + if (!test_bit(LINK_STATE_START, &dlp->slave->state)) return(-ENOTCONN); - dev->flags = 0; - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - flp = dlp->slave->priv; err = (*flp->activate)(dlp->slave, dev); if (err) return(err); + netif_start_queue(dev); + return 0; } @@ -392,14 +380,13 @@ struct frad_local *flp; int err; + netif_stop_queue(dev); + dlp = dev->priv; flp = dlp->slave->priv; err = (*flp->deactivate)(dlp->slave, dev); - dev->start = 0; - dev->tbusy = 1; - return 0; } @@ -508,7 +495,7 @@ if (!master) return(-ENODEV); - if (master->start) + if (test_bit(LINK_STATE_START, &master->state)) return(-EBUSY); dlp = master->priv; diff -u --recursive --new-file v2.3.43/linux/drivers/net/wan/hostess_sv11.c linux/drivers/net/wan/hostess_sv11.c --- v2.3.43/linux/drivers/net/wan/hostess_sv11.c Mon Dec 20 18:48:21 1999 +++ linux/drivers/net/wan/hostess_sv11.c Thu Feb 10 17:03:43 2000 @@ -122,7 +122,8 @@ /* * Go go go */ - d->tbusy=0; + + netif_start_queue(d); MOD_INC_USE_COUNT; return 0; } @@ -141,8 +142,8 @@ /* * Link layer down */ - d->tbusy=1; - + netif_stop_queue(d); + switch(dma) { case 0: diff -u --recursive --new-file v2.3.43/linux/drivers/net/wan/sdla.c linux/drivers/net/wan/sdla.c --- v2.3.43/linux/drivers/net/wan/sdla.c Fri Jan 28 15:09:07 2000 +++ linux/drivers/net/wan/sdla.c Thu Feb 10 17:03:43 2000 @@ -510,7 +510,7 @@ flp->dlci[i] = abs(flp->dlci[i]); - if (slave->start && (flp->config.station == FRAD_STATION_NODE)) + if (test_bit(LINK_STATE_START, &slave->state) && (flp->config.station == FRAD_STATION_NODE)) sdla_cmd(slave, SDLA_ACTIVATE_DLCI, 0, 0, &flp->dlci[i], sizeof(short), NULL, NULL); return(0); @@ -532,7 +532,7 @@ flp->dlci[i] = -abs(flp->dlci[i]); - if (slave->start && (flp->config.station == FRAD_STATION_NODE)) + if (test_bit(LINK_STATE_START, &slave->state) && (flp->config.station == FRAD_STATION_NODE)) sdla_cmd(slave, SDLA_DEACTIVATE_DLCI, 0, 0, &flp->dlci[i], sizeof(short), NULL, NULL); return(0); @@ -565,7 +565,7 @@ flp->dlci[i] = -*(short *)(master->dev_addr); master->mtu = slave->mtu; - if (slave->start) { + if (test_bit(LINK_STATE_START, &slave->state)) { if (flp->config.station == FRAD_STATION_CPE) sdla_reconfig(slave); else @@ -594,7 +594,7 @@ MOD_DEC_USE_COUNT; - if (slave->start) { + if (test_bit(LINK_STATE_START, &slave->state)) { if (flp->config.station == FRAD_STATION_CPE) sdla_reconfig(slave); else @@ -624,7 +624,7 @@ ret = SDLA_RET_OK; len = sizeof(struct dlci_conf); - if (slave->start) { + if (test_bit(LINK_STATE_START, &slave->state)) { if (get) ret = sdla_cmd(slave, SDLA_READ_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, NULL, 0, &dlp->config, &len); @@ -646,7 +646,7 @@ static int sdla_transmit(struct sk_buff *skb, struct net_device *dev) { struct frad_local *flp; - int ret, addr, accept; + int ret, addr, accept, i; short size; unsigned long flags; struct buf_entry *pbuf; @@ -655,90 +655,80 @@ ret = 0; accept = 1; - if (dev->tbusy) - return(1); + netif_stop_queue(dev); - if (skb == NULL) - return(0); + /* + * stupid GateD insists on setting up the multicast router thru us + * and we're ill equipped to handle a non Frame Relay packet at this + * time! + */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk(KERN_WARNING "%s: transmitter access conflict.\n", dev->name); - else + accept = 1; + switch (dev->type) { - /* - * stupid GateD insists on setting up the multicast router thru us - * and we're ill equipped to handle a non Frame Relay packet at this - * time! - */ - - accept = 1; - switch (dev->type) + case ARPHRD_FRAD: + if (skb->dev->type != ARPHRD_DLCI) + { + printk(KERN_WARNING "%s: Non DLCI device, type %i, tried to send on FRAD module.\n", dev->name, skb->dev->type); + accept = 0; + } + break; + default: + printk(KERN_WARNING "%s: unknown firmware type 0x%4.4X\n", dev->name, dev->type); + accept = 0; + break; + } + if (accept) + { + /* this is frame specific, but till there's a PPP module, it's the default */ + switch (flp->type) { - case ARPHRD_FRAD: - if (skb->dev->type != ARPHRD_DLCI) + case SDLA_S502A: + case SDLA_S502E: + ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, skb->data, skb->len, NULL, NULL); + break; + case SDLA_S508: + size = sizeof(addr); + ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, NULL, skb->len, &addr, &size); + if (ret == SDLA_RET_OK) { - printk(KERN_WARNING "%s: Non DLCI device, type %i, tried to send on FRAD module.\n", dev->name, skb->dev->type); - accept = 0; + save_flags(flags); + cli(); + SDLA_WINDOW(dev, addr); + pbuf = (void *)(((int) dev->mem_start) + (addr & SDLA_ADDR_MASK)); + sdla_write(dev, pbuf->buf_addr, skb->data, skb->len); + SDLA_WINDOW(dev, addr); + pbuf->opp_flag = 1; + restore_flags(flags); } break; - - default: - printk(KERN_WARNING "%s: unknown firmware type 0x%4.4X\n", dev->name, dev->type); - accept = 0; - break; } - - if (accept) + switch (ret) { - /* this is frame specific, but till there's a PPP module, it's the default */ - switch (flp->type) - { - case SDLA_S502A: - case SDLA_S502E: - ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, skb->data, skb->len, NULL, NULL); - break; - - case SDLA_S508: - size = sizeof(addr); - ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, NULL, skb->len, &addr, &size); - if (ret == SDLA_RET_OK) - { - save_flags(flags); - cli(); - SDLA_WINDOW(dev, addr); - pbuf = (void *)(((int) dev->mem_start) + (addr & SDLA_ADDR_MASK)); - - sdla_write(dev, pbuf->buf_addr, skb->data, skb->len); - - SDLA_WINDOW(dev, addr); - pbuf->opp_flag = 1; - restore_flags(flags); - } - break; - } - - switch (ret) - { - case SDLA_RET_OK: - flp->stats.tx_packets++; - ret = DLCI_RET_OK; - break; + case SDLA_RET_OK: + flp->stats.tx_packets++; + ret = DLCI_RET_OK; + break; - case SDLA_RET_CIR_OVERFLOW: - case SDLA_RET_BUF_OVERSIZE: - case SDLA_RET_NO_BUFS: - flp->stats.tx_dropped++; - ret = DLCI_RET_DROP; - break; + case SDLA_RET_CIR_OVERFLOW: + case SDLA_RET_BUF_OVERSIZE: + case SDLA_RET_NO_BUFS: + flp->stats.tx_dropped++; + ret = DLCI_RET_DROP; + break; - default: - flp->stats.tx_errors++; - ret = DLCI_RET_ERR; - break; - } + default: + flp->stats.tx_errors++; + ret = DLCI_RET_ERR; + break; } - dev->tbusy = 0; } + netif_wake_queue(dev); + for(i=0;imaster[i]!=NULL) + netif_wake_queue(flp->master[i]); + } return(ret); } @@ -892,7 +882,6 @@ return; } - dev->interrupt = 1; byte = sdla_byte(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE); switch (byte) { @@ -925,7 +914,6 @@ /* this clears the byte, informing the Z80 we're done */ byte = 0; sdla_write(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE, &byte, sizeof(byte)); - dev->interrupt = 0; } static void sdla_poll(unsigned long device) @@ -992,9 +980,8 @@ sdla_cmd(dev, SDLA_DISABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL); - dev->tbusy = 1; - dev->start = 0; - + netif_stop_queue(dev); + MOD_DEC_USE_COUNT; return(0); @@ -1096,10 +1083,8 @@ sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, &dlp->config, sizeof(struct dlci_conf), NULL, NULL); } - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - + netif_start_queue(dev); + MOD_INC_USE_COUNT; return(0); @@ -1119,7 +1104,7 @@ if (!get) { - if (dev->start) + if (test_bit(LINK_STATE_START, &dev->state)) return(-EBUSY); if(copy_from_user(&data.config, conf, sizeof(struct frad_conf))) @@ -1182,7 +1167,7 @@ else { /* no sense reading if the CPU isn't started */ - if (dev->start) + if (test_bit(LINK_STATE_START, &dev->state)) { size = sizeof(data); if (sdla_cmd(dev, SDLA_READ_DLCI_CONFIGURATION, 0, 0, NULL, 0, &data, &size) != SDLA_RET_OK) @@ -1331,7 +1316,7 @@ flp = dev->priv; - if (dev->start) + if (test_bit(LINK_STATE_START, &dev->state)) return(-EBUSY); /* for now, you can't change the MTU! */ diff -u --recursive --new-file v2.3.43/linux/drivers/net/wan/sealevel.c linux/drivers/net/wan/sealevel.c --- v2.3.43/linux/drivers/net/wan/sealevel.c Mon Dec 20 18:48:21 1999 +++ linux/drivers/net/wan/sealevel.c Thu Feb 10 17:03:43 2000 @@ -119,7 +119,7 @@ /* * Go go go */ - d->tbusy=0; + netif_start_queue(d); MOD_INC_USE_COUNT; return 0; } @@ -142,8 +142,9 @@ /* * Link layer down */ - d->tbusy=1; - + + netif_stop_queue(d); + switch(unit) { case 0: diff -u --recursive --new-file v2.3.43/linux/drivers/net/wan/z85230.c linux/drivers/net/wan/z85230.c --- v2.3.43/linux/drivers/net/wan/z85230.c Fri Jan 21 18:19:16 2000 +++ linux/drivers/net/wan/z85230.c Thu Feb 10 17:03:43 2000 @@ -637,6 +637,7 @@ int z8530_sync_close(struct net_device *dev, struct z8530_channel *c) { u8 chk; + c->irqs = &z8530_nop; c->max = 0; c->sync = 0; @@ -753,6 +754,7 @@ c->irqs = &z8530_dma_sync; z8530_rtsdtr(c,1); write_zsreg(c, R3, c->regs[R3]|RxENABLE); + return 0; } @@ -898,6 +900,7 @@ z8530_rtsdtr(c,1); printk("Rx interrupts ON\n"); write_zsreg(c, R3, c->regs[R3]|RxENABLE); + return 0; } @@ -907,6 +910,7 @@ { unsigned long flags; u8 chk; + c->irqs = &z8530_nop; c->max = 0; c->sync = 0; @@ -1102,7 +1106,7 @@ c->tx_next_skb=NULL; c->tx_ptr=c->tx_next_ptr; - mark_bh(NET_BH); + netif_wake_queue(c->netdevice); if(c->tx_skb==NULL) { /* Idle on */ @@ -1184,7 +1188,7 @@ struct sk_buff *skb; spin_lock_irqsave(&z8530_buffer_lock, flags); - c->netdevice->tbusy=0; + netif_wake_queue(c->netdevice); /* Actually this can happen.*/ if(c->tx_skb==NULL) { @@ -1379,9 +1383,10 @@ int z8530_queue_xmit(struct z8530_channel *c, struct sk_buff *skb) { unsigned long flags; + + netif_stop_queue(c->netdevice); if(c->tx_next_skb) { - skb->dev->tbusy=1; return 1; } @@ -1414,6 +1419,8 @@ spin_lock_irqsave(&z8530_buffer_lock, flags); z8530_tx_begin(c); spin_unlock_irqrestore(&z8530_buffer_lock, flags); + + netif_wake_queue(c->netdevice); return 0; } diff -u --recursive --new-file v2.3.43/linux/drivers/net/yellowfin.c linux/drivers/net/yellowfin.c --- v2.3.43/linux/drivers/net/yellowfin.c Thu Feb 10 17:11:11 2000 +++ linux/drivers/net/yellowfin.c Sat Feb 12 09:52:04 2000 @@ -86,8 +86,6 @@ #define RUN_AT(x) (jiffies + (x)) -#define DEV_FREE_SKB(skb) dev_kfree_skb(skb); - /* The PCI I/O space extent. */ #define YELLOWFIN_TOTAL_SIZE 0x100 @@ -858,7 +856,7 @@ if (yp->tx_ring[entry].status == 0) break; /* Free the original skb. */ - DEV_FREE_SKB(yp->tx_skbuff[entry]); + dev_kfree_skb_irq(yp->tx_skbuff[entry]); yp->tx_skbuff[entry] = 0; yp->stats.tx_packets++; } @@ -921,7 +919,7 @@ } /* Free the original skb. */ - DEV_FREE_SKB(yp->tx_skbuff[entry]); + dev_kfree_skb_irq(yp->tx_skbuff[entry]); yp->tx_skbuff[entry] = 0; /* Mark status as empty. */ yp->tx_status[entry].tx_errs = 0; @@ -1193,13 +1191,13 @@ yp->rx_ring[i].cmd = CMD_STOP; yp->rx_ring[i].addr = 0xBADF00D0; /* An invalid address. */ if (yp->rx_skbuff[i]) { - DEV_FREE_SKB(yp->rx_skbuff[i]); + dev_kfree_skb(yp->rx_skbuff[i]); } yp->rx_skbuff[i] = 0; } for (i = 0; i < TX_RING_SIZE; i++) { if (yp->tx_skbuff[i]) - DEV_FREE_SKB(yp->tx_skbuff[i]); + dev_kfree_skb(yp->tx_skbuff[i]); yp->tx_skbuff[i] = 0; } diff -u --recursive --new-file v2.3.43/linux/drivers/sbus/char/pcikbd.c linux/drivers/sbus/char/pcikbd.c --- v2.3.43/linux/drivers/sbus/char/pcikbd.c Thu Feb 10 17:11:12 2000 +++ linux/drivers/sbus/char/pcikbd.c Fri Feb 11 08:28:41 2000 @@ -1,4 +1,4 @@ -/* $Id: pcikbd.c,v 1.43 2000/02/09 22:33:25 davem Exp $ +/* $Id: pcikbd.c,v 1.44 2000/02/11 04:49:13 davem Exp $ * pcikbd.c: Ultra/AX PC keyboard support. * * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) @@ -1024,9 +1024,6 @@ goto found; } #endif - if (!pci_present()) - goto do_enodev; - /* * Get the nodes for keyboard and mouse from aliases on normal systems. */ diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/README.aic7xxx linux/drivers/scsi/README.aic7xxx --- v2.3.43/linux/drivers/scsi/README.aic7xxx Sat Oct 9 11:47:50 1999 +++ linux/drivers/scsi/README.aic7xxx Thu Feb 10 19:00:35 2000 @@ -208,6 +208,19 @@ will often result in the machine crashing or spontaneously rebooting during startup. Examples of machines that need this are the Dell PowerEdge 6300 machines. + + "aic7xxx=seltime:2" - This option controls how long the card waits + during a device selection sequence for the device to respond. + The original SCSI spec says that this "should be" 256ms. This + is generally not required with modern devices. However, some + very old SCSI I devices need the full 256ms. Most modern devices + can run fine with only 64ms. The default for this option is + 64ms. If you need to change this option, then use the following + table to set the proper value in the example above: + 0 - 256ms + 1 - 128ms + 2 - 64ms + 3 - 32ms "aic7xxx=panic_on_abort" - This option is for debugging and will cause the driver to panic the linux kernel and freeze the system the first @@ -485,12 +498,14 @@ Web sites ------------------------------ - http://people.redhat.com/dledford/aic7xxx.html - - Primary web site maintained by Doug Ledford. + http://people.redhat.com/dledford/ + - My web site, also the primary aic7xxx site with several related + pages. Dean W. Gehnert deang@teleport.com $Revision: 3.0 $ -Modified by Doug Ledford 1998-9 +Modified by Doug Ledford 1998-2000 + diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx/aic7xxx.reg linux/drivers/scsi/aic7xxx/aic7xxx.reg --- v2.3.43/linux/drivers/scsi/aic7xxx/aic7xxx.reg Sun Jul 18 21:15:13 1999 +++ linux/drivers/scsi/aic7xxx/aic7xxx.reg Thu Feb 10 19:00:35 2000 @@ -691,7 +691,8 @@ mask NO_IDENT 0x20|SEQINT /* no IDENTIFY after reconnect*/ mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */ mask EXTENDED_MSG 0x40|SEQINT /* Extended message received */ - mask ABORT_REQUESTED 0x50|SEQINT /* Reconect of aborted SCB */ + mask WIDE_RESIDUE 0x50|SEQINT /* need kernel to back up */ + /* the SG array for us */ mask REJECT_MSG 0x60|SEQINT /* Reject message received */ mask BAD_STATUS 0x70|SEQINT /* Bad status from target */ mask RESIDUAL 0x80|SEQINT /* Residual byte count != 0 */ diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx/aic7xxx.seq linux/drivers/scsi/aic7xxx/aic7xxx.seq --- v2.3.43/linux/drivers/scsi/aic7xxx/aic7xxx.seq Fri Jan 28 15:09:08 2000 +++ linux/drivers/scsi/aic7xxx/aic7xxx.seq Thu Feb 10 19:00:35 2000 @@ -517,10 +517,12 @@ } data_phase_inbounds: /* If we are the last SG block, tell the hardware. */ -if ((p->features & AHC_ULTRA2) == 0) { cmp SG_COUNT,0x01 jne data_phase_wideodd; - and DMAPARAMS, ~WIDEODD; -} + if ((p->features & AHC_ULTRA2) == 0) { + and DMAPARAMS, ~WIDEODD; + } else { + mvi SG_CACHEPTR, LAST_SEG; + } data_phase_wideodd: if ((p->features & AHC_ULTRA2) != 0) { mov SINDEX, ALLONES; @@ -530,7 +532,7 @@ test SSTAT0, SDONE jnz data_phase_dma_done; test SSTAT1,PHASEMIS jz data_phase_dma_loop; /* ie. underrun */ data_phase_dma_phasemis: - test SSTAT0,SDONE jnz . + 2; + test SSTAT0,SDONE jnz data_phase_dma_done; clr SINDEX; /* Remember the phasemiss */ } else { mov DMAPARAMS call dma; @@ -615,9 +617,10 @@ test SSTAT1, REQINIT jz .; test SSTAT1,PHASEMIS jz data_phase_loop; +/* This drops the last SG segment down to the shadow layer for us */ if ((p->features & AHC_ULTRA2) != 0) { mov DFCNTRL, DMAPARAMS; - test SSTAT0, SDONE jnz .; + test SSTAT0, SDONE jnz .; } data_phase_finish: @@ -713,7 +716,7 @@ mvi DFCNTRL, (PRELOADEN|SCSIEN|HDMAEN|DIRECTION); test SSTAT0, SDONE jnz .; p_command_dma_loop: - test SSTAT0, DMADONE jnz p_command_ultra2_dma_done; + test SSTAT0, SDONE jnz p_command_ultra2_dma_done; test SSTAT1,PHASEMIS jz p_command_dma_loop; /* ie. underrun */ p_command_ultra2_dma_done: and DFCNTRL, ~HDMAEN; @@ -830,6 +833,7 @@ cmp A,MSG_EXTENDED je mesgin_extended; cmp A,MSG_MESSAGE_REJECT je mesgin_reject; cmp A,MSG_NOOP je mesgin_done; + cmp A,MSG_IGN_WIDE_RESIDUE je mesgin_wide_residue; rej_mesgin: /* @@ -1057,6 +1061,36 @@ jmp mesgin_done; /* + * Wide Residue. We handle the simple cases, but pass of the one hard case + * to the kernel (when the residue byte happened to cause us to advance our + * sg element array, so we know have to back that advance out). + */ +mesgin_wide_residue: + mvi ARG_1 call inb_next; /* ACK the wide_residue and get */ + /* the size byte */ +/* + * See if we'll ignore this wide residue (because it's an overrun byte) + */ + if ((p->features & AHC_ULTRA2) != 0) { + test SSTAT2, WIDE_RES jnz mesgin_done; + } else { + test SCB_RESID_SGCNT,0xff jnz wide_residue_int; + test SCB_RESID_DCNT[0],0xff jnz wide_residue_int; + test SCB_RESID_DCNT[1],0xff jnz wide_residue_int; + test SCB_RESID_DCNT[2],0xff jnz wide_residue_int; + jmp mesgin_done; + } +wide_residue_int: +/* + * In order for this to be reliable, we have to do all sorts of horrible + * magic in terms of resetting the datafifo and reloading the shadow layer + * with the correct new values (so that a subsequent save data pointers + * message will do the right thing). We let the kernel do that work. + */ + mvi INTSTAT,WIDE_RESIDUE; + jmp mesgin_done; + +/* * [ ADD MORE MESSAGE HANDLING HERE ] */ @@ -1093,7 +1127,7 @@ * before continuing. */ test SSTAT1, REQINIT jz inb_next_wait; - test SSTAT1, SCSIPERR jnz inb_next_wait; + test SSTAT1, SCSIPERR jnz .; and LASTPHASE, PHASE_MASK, SCSISIGI; cmp LASTPHASE, P_MESGIN jne mesgin_phasemis; inb_first: diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx.c linux/drivers/scsi/aic7xxx.c --- v2.3.43/linux/drivers/scsi/aic7xxx.c Wed Dec 8 14:11:26 1999 +++ linux/drivers/scsi/aic7xxx.c Thu Feb 10 19:00:35 2000 @@ -264,7 +264,7 @@ */ #define VIRT_TO_BUS(a) (unsigned int)virt_to_bus((void *)(a)) -#define AIC7XXX_C_VERSION "5.1.21" +#define AIC7XXX_C_VERSION "5.2.0" #define NUMBER(arr) (sizeof(arr) / sizeof(arr[0])) #define MIN(a,b) (((a) < (b)) ? (a) : (b)) @@ -823,6 +823,7 @@ * and what flags weren't. This way, I could clean up the flag usage on * a use by use basis. Doug Ledford */ + AHC_NO_STPWR = 0x00040000, AHC_RESET_DELAY = 0x00080000, AHC_A_SCANNED = 0x00100000, AHC_B_SCANNED = 0x00200000, @@ -883,6 +884,17 @@ AHC_AIC7899_FE = AHC_AIC7890_FE|AHC_ULTRA3, } ahc_feature; +#define SCB_DMA_ADDR(scb, addr) ((unsigned long)(addr) + (scb)->scb_dma->dma_offset) + +struct aic7xxx_scb_dma { + unsigned long dma_offset; /* Correction you have to add + * to virtual address to get + * dma handle in this region */ + dma_addr_t dma_address; /* DMA handle of the start, + * for unmap */ + unsigned int dma_len; /* DMA length */ +}; + struct aic7xxx_scb { struct aic7xxx_hwscb *hscb; /* corresponding hardware scb */ Scsi_Cmnd *cmd; /* Scsi_Cmnd for this scb */ @@ -891,15 +903,17 @@ struct hw_scatterlist *sg_list; /* SG list in adapter format */ unsigned char tag_action; unsigned char sg_count; - unsigned char sense_cmd[6]; /* + unsigned char *sense_cmd; /* * Allocate 6 characters for * sense command. */ + unsigned char *cmnd; unsigned int sg_length; /* We init this during buildscb so we * don't have to calculate anything * during underflow/overflow/stat code */ void *kmalloc_ptr; + struct aic7xxx_scb_dma *scb_dma; }; /* @@ -937,6 +951,8 @@ unsigned char numscbs; /* current number of scbs */ unsigned char maxhscbs; /* hardware scbs */ unsigned char maxscbs; /* max scbs including pageable scbs */ + unsigned int hscbs_dma; /* DMA handle to hscbs */ + unsigned int hscbs_dma_len; /* length of the above DMA area */ void *hscb_kmalloc_ptr; } scb_data_type; @@ -1014,6 +1030,9 @@ volatile unsigned char activescbs; /* active scbs */ volatile unsigned char max_activescbs; volatile unsigned char qinfifonext; + volatile unsigned char *untagged_scbs; + volatile unsigned char *qoutfifo; + volatile unsigned char *qinfifo; #define DEVICE_PRESENT 0x01 #define BUS_DEVICE_RESET_PENDING 0x02 @@ -1063,16 +1082,9 @@ * We put the less frequently used host structure items after the more * frequently used items to try and ease the burden on the cache subsystem. * These entries are not *commonly* accessed, whereas the preceding entries - * are accessed very often. The only exceptions are the qinfifo, qoutfifo, - * and untagged_scbs array. But, they are often accessed only once and each - * access into these arrays is likely to blow a cache line, so they are put - * down here so we can minimize the number of cache lines required to hold - * the preceeding entries. + * are accessed very often. */ - volatile unsigned char untagged_scbs[256]; - volatile unsigned char qoutfifo[256]; - volatile unsigned char qinfifo[256]; unsigned int irq; /* IRQ for this adapter */ int instance; /* aic7xxx instance number */ int scsi_id; /* host adapter SCSI ID */ @@ -1085,9 +1097,7 @@ unsigned short ultraenb; /* Ultra mode target list */ unsigned short bios_control; /* bios control - SEEPROM */ unsigned short adapter_control; /* adapter control - SEEPROM */ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) - struct pci_dev *pdev; -#endif + struct pci_dev *pdev; unsigned char pci_bus; unsigned char pci_device_fn; struct seeprom_config sc; @@ -1098,6 +1108,7 @@ int host_no; /* SCSI host number */ unsigned long mbase; /* I/O memory address */ ahc_chip chip; /* chip type */ + dma_addr_t fifo_dma; /* DMA handle for fifo arrays */ /* * Statistics Kept: @@ -1354,10 +1365,10 @@ /* * So that we can set how long each device is given as a selection timeout. * The table of values goes like this: - * 0 - 256ms - * 1 - 128ms - * 2 - 64ms - * 3 - 32ms + * 0 - 256ms + * 1 - 128ms + * 2 - 64ms + * 3 - 32ms * We default to 64ms because it's fast. Some old SCSI-I devices need a * longer time. The final value has to be left shifted by 3, hence 0x10 * is the final value. @@ -1467,6 +1478,7 @@ { x = inb(p->base + port); } + mb(); return(x); #else return(inb(p->base + port)); @@ -1770,6 +1782,7 @@ struct ins_format1 *fmt1_ins; struct ins_format3 *fmt3_ins; unsigned char opcode; + volatile unsigned char hcntrl; instr = *(union ins_formats*) &seqprog[instrptr * 4]; @@ -1871,12 +1884,13 @@ } } aic_outb(p, (instr.integer & 0xff), SEQRAM); - udelay(50); + hcntrl = aic_inb(p, HCNTRL); aic_outb(p, ((instr.integer >> 8) & 0xff), SEQRAM); - udelay(50); + hcntrl = aic_inb(p, HCNTRL); aic_outb(p, ((instr.integer >> 16) & 0xff), SEQRAM); - udelay(50); + hcntrl = aic_inb(p, HCNTRL); aic_outb(p, ((instr.integer >> 24) & 0xff), SEQRAM); + hcntrl = aic_inb(p, HCNTRL); udelay(50); break; @@ -1991,21 +2005,6 @@ /*+F************************************************************************* * Function: - * aic7xxx_delay - * - * Description: - * Delay for specified amount of time. We use mdelay because the timer - * interrupt is not guaranteed to be enabled. This will cause an - * infinite loop since jiffies (clock ticks) is not updated. - *-F*************************************************************************/ -static void -aic7xxx_delay(int seconds) -{ - mdelay(seconds * 1000); -} - -/*+F************************************************************************* - * Function: * aic7xxx_info * * Description: @@ -2728,15 +2727,14 @@ aic7xxx_allocate_scb(struct aic7xxx_host *p) { struct aic7xxx_scb *scbp = NULL; - int scb_size = sizeof(struct aic7xxx_scb) + - sizeof (struct hw_scatterlist) * AIC7XXX_MAX_SG; + int scb_size = (sizeof (struct hw_scatterlist) * AIC7XXX_MAX_SG) + 12 + 6; int i; int step = PAGE_SIZE / 1024; unsigned long scb_count = 0; struct hw_scatterlist *hsgp; struct aic7xxx_scb *scb_ap; - unsigned long temp; - + struct aic7xxx_scb_dma *scb_dma; + unsigned char *bufs; if (p->scb_data->numscbs < p->scb_data->maxscbs) { @@ -2750,6 +2748,11 @@ * efficiency since scb_size * (i -1) is growing slightly faster * than the right hand side. If the number of SG array elements * is changed, this function may not be near so efficient any more. + * + * Since the DMA'able buffers are now allocated in a seperate + * chunk this algorithm has been modified to match. The '12' + * and '6' factors in scb_size are for the DMA'able command byte + * and sensebuffers respectively. -DaveM */ for ( i=step;; i *= 2 ) { @@ -2760,44 +2763,53 @@ } } scb_count = MIN( (i-1), p->scb_data->maxscbs - p->scb_data->numscbs); - scb_ap = (struct aic7xxx_scb *)kmalloc(scb_size * scb_count, GFP_ATOMIC); - if (scb_ap != NULL) + scb_ap = (struct aic7xxx_scb *)kmalloc(sizeof (struct aic7xxx_scb) * scb_count + + sizeof(struct aic7xxx_scb_dma), GFP_ATOMIC); + if (scb_ap == NULL) + return(0); + scb_dma = (struct aic7xxx_scb_dma *)&scb_ap[scb_count]; + hsgp = (struct hw_scatterlist *) + pci_alloc_consistent(p->pdev, scb_size * scb_count, + &scb_dma->dma_address); + if (hsgp == NULL) { -#ifdef AIC7XXX_VERBOSE_DEBUGGING - if (aic7xxx_verbose > 0xffff) - { - if (p->scb_data->numscbs == 0) - printk(INFO_LEAD "Allocating initial %ld SCB structures.\n", - p->host_no, -1, -1, -1, scb_count); - else - printk(INFO_LEAD "Allocating %ld additional SCB structures.\n", - p->host_no, -1, -1, -1, scb_count); - } -#endif - memset(scb_ap, 0, scb_count * scb_size); - temp = (unsigned long) &scb_ap[scb_count]; - temp += 1023; - temp &= ~1023; - hsgp = (struct hw_scatterlist *)temp; - for (i=0; i < scb_count; i++) - { - scbp = &scb_ap[i]; - scbp->hscb = &p->scb_data->hscbs[p->scb_data->numscbs]; - scbp->sg_list = &hsgp[i * AIC7XXX_MAX_SG]; - memset(scbp->hscb, 0, sizeof(struct aic7xxx_hwscb)); - scbp->hscb->tag = p->scb_data->numscbs; - /* - * Place in the scb array; never is removed - */ - p->scb_data->scb_array[p->scb_data->numscbs++] = scbp; - scbq_insert_tail(&p->scb_data->free_scbs, scbp); - } - scbp->kmalloc_ptr = scb_ap; + kfree(scb_ap); + return(0); } - else + bufs = (unsigned char *)&hsgp[scb_count * AIC7XXX_MAX_SG]; +#ifdef AIC7XXX_VERBOSE_DEBUGGING + if (aic7xxx_verbose > 0xffff) { - return(0); + if (p->scb_data->numscbs == 0) + printk(INFO_LEAD "Allocating initial %ld SCB structures.\n", + p->host_no, -1, -1, -1, scb_count); + else + printk(INFO_LEAD "Allocating %ld additional SCB structures.\n", + p->host_no, -1, -1, -1, scb_count); + } +#endif + memset(scb_ap, 0, sizeof (struct aic7xxx_scb) * scb_count); + scb_dma->dma_offset = (unsigned long)scb_dma->dma_address + - (unsigned long)hsgp; + scb_dma->dma_len = scb_size * scb_count; + for (i=0; i < scb_count; i++) + { + scbp = &scb_ap[i]; + scbp->hscb = &p->scb_data->hscbs[p->scb_data->numscbs]; + scbp->sg_list = &hsgp[i * AIC7XXX_MAX_SG]; + scbp->sense_cmd = bufs; + scbp->cmnd = bufs + 6; + bufs += 12 + 6; + scbp->scb_dma = scb_dma; + memset(scbp->hscb, 0, sizeof(struct aic7xxx_hwscb)); + scbp->hscb->tag = p->scb_data->numscbs; + /* + * Place in the scb array; never is removed + */ + p->scb_data->scb_array[p->scb_data->numscbs++] = scbp; + scbq_insert_tail(&p->scb_data->free_scbs, scbp); } + scbp->kmalloc_ptr = scb_ap; } return(scb_count); } @@ -2882,6 +2894,16 @@ struct aic7xxx_scb *scbp; unsigned char queue_depth; + if (scb->sg_count == 1) + pci_unmap_single(p->pdev, le32_to_cpu(scb->sg_list[0].address), + le32_to_cpu(scb->sg_list[0].length)); + else if (scb->sg_count > 1) + { + struct scatterlist *sg; + + sg = (struct scatterlist *)cmd->request_buffer; + pci_unmap_sg(p->pdev, sg, cmd->use_sg); + } if (scb->flags & SCB_RECOVERY_SCB) { p->flags &= ~AHC_ABORT_PENDING; @@ -3889,11 +3911,19 @@ while ( (aic_inb(p, SCSISEQ) & SCSIRSTO) == 0) mdelay(5); - mdelay(10); + /* + * Some of the new Ultra2 chipsets need a longer delay after a chip + * reset than just the init setup creates, so we have to delay here + * before we go into a reset in order to make the chips happy. + */ + if (p->features & AHC_ULTRA2) + mdelay(250); + else + mdelay(50); /* Turn off the bus reset. */ aic_outb(p, 0, SCSISEQ); - mdelay(5); + mdelay(10); aic7xxx_clear_intstat(p); /* Re-enable reset interrupts. */ @@ -4772,6 +4802,7 @@ case CHECK_CONDITION: if ( !(scb->flags & SCB_SENSE) ) { + unsigned char *sense_buffer; /* * XXX - How do we save the residual (if there is one). */ @@ -4782,14 +4813,13 @@ * Send a sense command to the requesting target. * XXX - revisit this and get rid of the memcopys. */ - memcpy(&scb->sense_cmd[0], &generic_sense[0], + memcpy(scb->sense_cmd, &generic_sense[0], sizeof(generic_sense)); scb->sense_cmd[1] = (cmd->lun << 5); scb->sense_cmd[4] = sizeof(cmd->sense_buffer); - scb->sg_list[0].address = - cpu_to_le32(VIRT_TO_BUS(&cmd->sense_buffer[0])); + sense_buffer = cmd->sense_buffer; scb->sg_list[0].length = cpu_to_le32(sizeof(cmd->sense_buffer)); @@ -4801,11 +4831,10 @@ hscb->control = 0; hscb->target_status = 0; hscb->SG_list_pointer = - cpu_to_le32(VIRT_TO_BUS(&scb->sg_list[0])); - hscb->data_pointer = scb->sg_list[0].address; + cpu_to_le32(SCB_DMA_ADDR(scb, scb->sg_list)); hscb->data_count = scb->sg_list[0].length; hscb->SCSI_cmd_pointer = - cpu_to_le32(VIRT_TO_BUS(&scb->sense_cmd[0])); + cpu_to_le32(SCB_DMA_ADDR(scb, scb->sense_cmd)); hscb->SCSI_cmd_length = COMMAND_SIZE(scb->sense_cmd[0]); hscb->residual_SG_segment_count = 0; hscb->residual_data_count[0] = 0; @@ -4854,12 +4883,13 @@ * SENSE information anyway. */ if (cmd->next->cmnd[0] != TEST_UNIT_READY) - { - scb->sg_list[0].address = - cpu_to_le32(VIRT_TO_BUS(&cmd->next->sense_buffer[0])); - hscb->data_pointer = scb->sg_list[0].address; - } + sense_buffer = cmd->next->sense_buffer; } + scb->sg_list[0].address = + cpu_to_le32(pci_map_single(p->pdev, sense_buffer, + sizeof(cmd->sense_buffer))); + hscb->data_pointer = scb->sg_list[0].address; + scb->flags |= SCB_SENSE; /* * Ensure the target is busy since this will be an @@ -5134,7 +5164,7 @@ else if (scb->flags & SCB_MSGOUT_PPR) { unsigned int max_sync, period; - unsigned char options = p->transinfo[tindex].goal_options; + unsigned char options = 0; if (p->features & AHC_ULTRA2) { @@ -5145,9 +5175,10 @@ (p->dev_flags[tindex] & DEVICE_SCSI_3) && (p->transinfo[tindex].goal_width == MSG_EXT_WDTR_BUS_16_BIT) && - (options != 0) ) + (p->transinfo[tindex].goal_options != 0) ) { max_sync = AHC_SYNCRATE_ULTRA3; + options = p->transinfo[tindex].goal_options; } else { @@ -5296,6 +5327,188 @@ } break; + case WIDE_RESIDUE: + { + unsigned char resid_sgcnt, index; + unsigned char scb_index = aic_inb(p, SCB_TAG); + unsigned int cur_addr, resid_dcnt; + unsigned int native_addr, native_length; + int i; + + if(scb_index > p->scb_data->numscbs) + { + printk(WARN_LEAD "invalid scb_index during WIDE_RESIDUE.\n", + p->host_no, -1, -1, -1); + /* + * XXX: Add error handling here + */ + break; + } + scb = p->scb_data->scb_array[scb_index]; + if(!(scb->flags & SCB_ACTIVE) || (scb->cmd == NULL)) + { + printk(WARN_LEAD "invalid scb during WIDE_RESIDUE flags:0x%x " + "scb->cmd:0x%lx\n", p->host_no, CTL_OF_SCB(scb), + scb->flags, (unsigned long)scb->cmd); + break; + } + + /* + * We have a valid scb to use on this WIDE_RESIDUE message, so + * we need to walk the sg list looking for this particular sg + * segment, then see if we happen to be at the very beginning of + * the segment. If we are, then we have to back things up to + * the previous segment. If not, then we simply need to remove + * one byte from this segments address and add one to the byte + * count. + */ + cur_addr = aic_inb(p, SHADDR) | (aic_inb(p, SHADDR + 1) << 8) | + (aic_inb(p, SHADDR + 2) << 16) | (aic_inb(p, SHADDR + 3) << 24); + resid_sgcnt = aic_inb(p, SCB_RESID_SGCNT); + resid_dcnt = aic_inb(p, SCB_RESID_DCNT) | + (aic_inb(p, SCB_RESID_DCNT + 1) << 8) | + (aic_inb(p, SCB_RESID_DCNT + 2) << 24); + index = scb->sg_count - resid_sgcnt; + native_addr = le32_to_cpu(scb->sg_list[index].address); + native_length = le32_to_cpu(scb->sg_list[index].length); + /* + * Make sure this is a valid sg_seg for the given pointer + */ + if(cur_addr < native_addr || + cur_addr > (native_addr + native_length)) + { + printk(WARN_LEAD "invalid cur_addr:0x%x during WIDE_RESIDUE\n", + p->host_no, CTL_OF_SCB(scb), cur_addr); + if(index > 0) + printk(WARN_LEAD " sg_address[-1]:0x%x sg_length[-1]:%d\n", + p->host_no, CTL_OF_SCB(scb), + le32_to_cpu(scb->sg_list[index - 1].address), + le32_to_cpu(scb->sg_list[index - 1].length)); + printk(WARN_LEAD " sg_address:0x%x sg_length:%d\n", + p->host_no, CTL_OF_SCB(scb), + native_addr, native_length); + if(resid_sgcnt > 1) + printk(WARN_LEAD " sg_address[1]:0x%x sg_length[1]:%d\n", + p->host_no, CTL_OF_SCB(scb), + le32_to_cpu(scb->sg_list[index + 1].address), + le32_to_cpu(scb->sg_list[index + 1].length)); + break; + } + + /* + * If our current address matches the sg_seg->address then we + * have to back up the sg array to the previous segment and set + * it up to have only one byte of transfer left to go. + */ + if(cur_addr == native_addr) + { + if(index == 0) + { + printk(WARN_LEAD "bogus WIDE_RESIDUE message, no data has been " + "transferred.\n", p->host_no, CTL_OF_SCB(scb)); + break; + } + resid_sgcnt++; + index--; + cur_addr = le32_to_cpu(scb->sg_list[index].address) + + le32_to_cpu(scb->sg_list[index].length) - 1; + native_addr = aic_inb(p, SG_NEXT) | (aic_inb(p, SG_NEXT + 1) << 8) + | (aic_inb(p, SG_NEXT + 2) << 16) | (aic_inb(p, SG_NEXT + 3) << 24); + native_addr -= SG_SIZEOF; + aic_outb(p, resid_sgcnt, SG_COUNT); + aic_outb(p, resid_sgcnt, SCB_RESID_SGCNT); + aic_outb(p, native_addr & 0xff, SG_NEXT); + aic_outb(p, (native_addr >> 8) & 0xff, SG_NEXT + 1); + aic_outb(p, (native_addr >> 16) & 0xff, SG_NEXT + 2); + aic_outb(p, (native_addr >> 24) & 0xff, SG_NEXT + 3); + aic_outb(p, 1, SCB_RESID_DCNT); + aic_outb(p, 0, SCB_RESID_DCNT + 1); + aic_outb(p, 0, SCB_RESID_DCNT + 2); + aic_outb(p, 1, HCNT); + aic_outb(p, 0, HCNT + 1); + aic_outb(p, 0, HCNT + 2); + aic_outb(p, cur_addr & 0xff, HADDR); + aic_outb(p, (cur_addr >> 8) & 0xff, HADDR + 1); + aic_outb(p, (cur_addr >> 16) & 0xff, HADDR + 2); + aic_outb(p, (cur_addr >> 24) & 0xff, HADDR + 3); + /* + * The sequencer actually wants to find the new address and byte + * count in the SHCNT and SHADDR register sets. These registers + * are a shadow of the regular HCNT and HADDR registers. On the + * Ultra2 controllers, these registers are read only and the way + * we have to set their values is to put the values we want into + * the HCNT and HADDR registers and then output PRELOADEN into + * the DFCNTRL register which causes the card to latch the current + * values in the HADDR and HCNT registers and drop it through to + * the shadow registers. On older cards we copy them directly + * across by hand. + */ + if(p->features & AHC_ULTRA2) + { + aic_outb(p, aic_inb(p, DMAPARAMS), DFCNTRL); + i=0; + udelay(1); + while(((aic_inb(p, SSTAT0) & SDONE) != 0) && (i++ < 1000)) + { + aic_outb(p, aic_inb(p, DMAPARAMS), DFCNTRL); + udelay(1); + } + } + else + { + aic_outb(p, 1, STCNT); + aic_outb(p, 0, STCNT + 1); + aic_outb(p, 0, STCNT + 2); + aic_outb(p, cur_addr & 0xff, SHADDR); + aic_outb(p, (cur_addr >> 8) & 0xff, SHADDR + 1); + aic_outb(p, (cur_addr >> 16) & 0xff, SHADDR + 2); + aic_outb(p, (cur_addr >> 24) & 0xff, SHADDR + 3); + } + } + else + { + /* + * Back the data pointer up by one and add one to the remaining + * byte count. Then store that in the HCNT and HADDR registers. + */ + cur_addr--; + resid_dcnt++; + aic_outb(p, resid_dcnt & 0xff, SCB_RESID_DCNT); + aic_outb(p, (resid_dcnt >> 8) & 0xff, SCB_RESID_DCNT + 1); + aic_outb(p, (resid_dcnt >> 16) & 0xff, SCB_RESID_DCNT + 2); + aic_outb(p, resid_dcnt & 0xff, HCNT); + aic_outb(p, (resid_dcnt >> 8) & 0xff, HCNT + 1); + aic_outb(p, (resid_dcnt >> 16) & 0xff, HCNT + 2); + aic_outb(p, cur_addr & 0xff, HADDR); + aic_outb(p, (cur_addr >> 8) & 0xff, HADDR + 1); + aic_outb(p, (cur_addr >> 16) & 0xff, HADDR + 2); + aic_outb(p, (cur_addr >> 24) & 0xff, HADDR + 3); + if(p->features & AHC_ULTRA2) + { + aic_outb(p, aic_inb(p, DMAPARAMS), DFCNTRL); + i=0; + udelay(1); + while(((aic_inb(p, SSTAT0) & SDONE) != 0) && (i++ < 1000)) + { + aic_outb(p, aic_inb(p, DMAPARAMS), DFCNTRL); + udelay(1); + } + } + else + { + aic_outb(p, resid_dcnt & 0xff, STCNT); + aic_outb(p, (resid_dcnt >> 8) & 0xff, STCNT + 1); + aic_outb(p, (resid_dcnt >> 16) & 0xff, STCNT + 2); + aic_outb(p, cur_addr & 0xff, SHADDR); + aic_outb(p, (cur_addr >> 8) & 0xff, SHADDR + 1); + aic_outb(p, (cur_addr >> 16) & 0xff, SHADDR + 2); + aic_outb(p, (cur_addr >> 24) & 0xff, SHADDR + 3); + } + } + } + break; + + #if AIC7XXX_NOT_YET case TRACEPOINT: { @@ -5655,16 +5868,6 @@ break; } - /* - * If we aren't on one of the new Ultra3 cards, then reject any PPR - * message since we can't support any option field other than 0 - */ - if( !(p->features & AHC_ULTRA3) ) - { - reject = TRUE; - break; - } - if (p->msg_len < (MSG_EXT_PPR_LEN + 2)) { break; @@ -6810,7 +7013,7 @@ return; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,95) spin_lock_irqsave(&io_request_lock, cpu_flags); - if(test_and_set_bit(AHC_IN_ISR_BIT, &p->flags)) + if(test_and_set_bit(AHC_IN_ISR_BIT, (void *)&p->flags)) { return; } @@ -6820,7 +7023,7 @@ } while ( (aic_inb(p, INTSTAT) & INT_PEND) ); aic7xxx_done_cmds_complete(p); aic7xxx_run_waiting_queues(p); - clear_bit(AHC_IN_ISR_BIT, &p->flags); + clear_bit(AHC_IN_ISR_BIT, (void *)&p->flags); spin_unlock_irqrestore(&io_request_lock, cpu_flags); #else if(set_bit(AHC_IN_ISR_BIT, (int *)&p->flags)) @@ -7212,6 +7415,21 @@ #undef CLOCK_PULSE } +#define CLOCK_PULSE(p) \ + do { \ + int limit = 0; \ + do { \ + mb(); \ + pause_sequencer(p); /* This is just to generate some PCI */ \ + /* traffic so the PCI read is flushed */ \ + /* it shouldn't be needed, but some */ \ + /* chipsets do indeed appear to need */ \ + /* something to force PCI reads to get */ \ + /* flushed */ \ + udelay(1); /* Do nothing */ \ + } while (((aic_inb(p, SEECTL) & SEERDY) == 0) && (++limit < 1000)); \ + } while(0) + /*+F************************************************************************* * Function: * acquire_seeprom @@ -7222,7 +7440,6 @@ static int acquire_seeprom(struct aic7xxx_host *p) { - int wait; /* * Request access of the memory port. When access is @@ -7232,12 +7449,7 @@ * should be no contention. */ aic_outb(p, SEEMS, SEECTL); - wait = 1000; /* 1000 msec = 1 second */ - while ((wait > 0) && ((aic_inb(p, SEECTL) & SEERDY) == 0)) - { - wait--; - mdelay(1); /* 1 msec */ - } + CLOCK_PULSE(p); if ((aic_inb(p, SEECTL) & SEERDY) == 0) { aic_outb(p, 0, SEECTL); @@ -7256,7 +7468,12 @@ static void release_seeprom(struct aic7xxx_host *p) { + /* + * Make sure the SEEPROM is ready before we release it. + */ + CLOCK_PULSE(p); aic_outb(p, 0, SEECTL); + CLOCK_PULSE(p); } /*+F************************************************************************* @@ -7322,12 +7539,6 @@ }; struct seeprom_cmd seeprom_read = {3, {1, 1, 0}}; -#define CLOCK_PULSE(p) \ - while ((aic_inb(p, SEECTL) & SEERDY) == 0) \ - { \ - ; /* Do nothing */ \ - } - /* * Request access of the memory port. */ @@ -7443,7 +7654,6 @@ } return (1); -#undef CLOCK_PULSE } /*+F************************************************************************* @@ -7458,12 +7668,18 @@ { unsigned char brdctl, value; + /* + * Make sure the SEEPROM is ready before we access it + */ + CLOCK_PULSE(p); if (p->features & AHC_ULTRA2) { brdctl = BRDRW_ULTRA2; aic_outb(p, brdctl, BRDCTL); - udelay(4); - return(aic_inb(p, BRDCTL)); + CLOCK_PULSE(p); + value = aic_inb(p, BRDCTL); + CLOCK_PULSE(p); + return(value); } brdctl = BRDRW; if ( !((p->chip & AHC_CHIPID_MASK) == AHC_AIC7895) || @@ -7472,10 +7688,11 @@ brdctl |= BRDCS; } aic_outb(p, brdctl, BRDCTL); - udelay(1); + CLOCK_PULSE(p); value = aic_inb(p, BRDCTL); + CLOCK_PULSE(p); aic_outb(p, 0, BRDCTL); - udelay(1); + CLOCK_PULSE(p); return (value); } @@ -7491,18 +7708,23 @@ { unsigned char brdctl; + /* + * Make sure the SEEPROM is ready before we access it + */ + CLOCK_PULSE(p); if (p->features & AHC_ULTRA2) { brdctl = value; aic_outb(p, brdctl, BRDCTL); - udelay(4); + CLOCK_PULSE(p); brdctl |= BRDSTB_ULTRA2; aic_outb(p, brdctl, BRDCTL); - udelay(4); + CLOCK_PULSE(p); brdctl &= ~BRDSTB_ULTRA2; aic_outb(p, brdctl, BRDCTL); - udelay(4); + CLOCK_PULSE(p); read_brdctl(p); + CLOCK_PULSE(p); } else { @@ -7514,19 +7736,21 @@ } brdctl = BRDSTB | BRDCS; aic_outb(p, brdctl, BRDCTL); - udelay(1); + CLOCK_PULSE(p); brdctl |= value; aic_outb(p, brdctl, BRDCTL); - udelay(1); + CLOCK_PULSE(p); brdctl &= ~BRDSTB; aic_outb(p, brdctl, BRDCTL); - udelay(1); + CLOCK_PULSE(p); brdctl &= ~BRDCS; aic_outb(p, brdctl, BRDCTL); - udelay(1); + CLOCK_PULSE(p); } } +#undef CLOCK_PULSE + /*+F************************************************************************* * Function: * aic785x_cable_detect @@ -7903,12 +8127,6 @@ unsigned char term, scsi_conf; struct Scsi_Host *host; - /* - * Lock out other contenders for our i/o space. - */ - request_region(p->base, MAXREG - MINREG, "aic7xxx"); - - host = p->host; p->scb_data->maxscbs = AIC7XXX_MAXSCB; @@ -7944,12 +8162,6 @@ p->dev_timer.function = (void *)aic7xxx_timer; p->dev_timer_active = 0; - for (i = 0; i < NUMBER(p->untagged_scbs); i++) - { - p->untagged_scbs[i] = SCB_LIST_NULL; - p->qinfifo[i] = SCB_LIST_NULL; - p->qoutfifo[i] = SCB_LIST_NULL; - } /* * We currently have no commands of any type */ @@ -7980,7 +8192,7 @@ printk("VLB slot %d\n", p->pci_device_fn); break; default: - printk("PCI %d/%d\n", PCI_SLOT(p->pci_device_fn), + printk("PCI %d/%d/%d\n", p->pci_bus, PCI_SLOT(p->pci_device_fn), PCI_FUNC(p->pci_device_fn)); break; } @@ -8016,6 +8228,20 @@ } aic_outb(p, 0, SEQ_FLAGS); + /* + * We are starting to do real work on the card....it's possible we could + * generate some spurious interrupts at this point, especially in the + * event of a PCI error or some such. If there are other devices already + * registered on the same interrupt as us, this could cause the machine + * to lock up. So, we disable the interrupt this card is on until we + * finish our card setup. We only need to do this for modules, if we are + * compiled into the kernel then interrupts are already off during this + * part of the code. + */ +#ifdef MODULE + disable_irq(p->irq); +#endif + detect_maxscb(p); @@ -8051,15 +8277,15 @@ #endif if ( (aic7xxx_stpwlev >> p->instance) & 0x01 ) { - devconfig |= 0x02; + devconfig |= STPWLEVEL; if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("(scsi%d) Force setting STPWLEV bit\n", p->host_no); + printk("(scsi%d) Force setting STPWLEVEL bit\n", p->host_no); } else { - devconfig &= ~0x02; + devconfig &= ~STPWLEVEL; if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("(scsi%d) Force clearing STPWLEV bit\n", p->host_no); + printk("(scsi%d) Force clearing STPWLEVEL bit\n", p->host_no); } #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) pci_write_config_byte(p->pdev, DEVCONFIG, devconfig); @@ -8121,11 +8347,6 @@ } /* - * Clear out any possible pending interrupts. - */ - aic7xxx_clear_intstat(p); - - /* * Set the SCSI Id, SXFRCTL0, SXFRCTL1, and SIMODE1, for both channels */ if (p->features & AHC_TWIN) @@ -8168,7 +8389,17 @@ aic_outb(p, (scsi_conf & ENSPCHK) | aic7xxx_seltime | term | ENSTIMER | ACTNEGEN, SXFRCTL1); aic_outb(p, 0, SIMODE0); - aic_outb(p, ENSELTIMO | ENSCSIRST | ENSCSIPERR, SIMODE1); + /* + * If we are a cardbus adapter then don't enable SCSI reset detection. + * We shouldn't likely be sharing SCSI busses with someone else, and + * if we don't have a cable currently plugged into the controller then + * we won't have a power source for the SCSI termination, which means + * we'll see infinite incoming bus resets. + */ + if(p->flags & AHC_NO_STPWR) + aic_outb(p, ENSELTIMO | ENSCSIPERR, SIMODE1); + else + aic_outb(p, ENSELTIMO | ENSCSIRST | ENSCSIPERR, SIMODE1); aic_outb(p, 0, SCSIRATE); if ( p->features & AHC_ULTRA2) aic_outb(p, 0, SCSIOFFSET); @@ -8227,44 +8458,57 @@ { size_t array_size; unsigned int hscb_physaddr; - unsigned long temp; array_size = p->scb_data->maxscbs * sizeof(struct aic7xxx_hwscb); if (p->scb_data->hscbs == NULL) { - /* - * A little padding so we can align thing the way we want + /* pci_alloc_consistent enforces the alignment already and + * clears the area as well. */ - p->scb_data->hscbs = kmalloc(array_size + 0x1f, GFP_ATOMIC); + p->scb_data->hscbs = pci_alloc_consistent(p->pdev, array_size, + &p->scb_data->hscbs_dma); + /* We have to use pci_free_consistent, not kfree */ + p->scb_data->hscb_kmalloc_ptr = NULL; + p->scb_data->hscbs_dma_len = array_size; } if (p->scb_data->hscbs == NULL) { printk("(scsi%d) Unable to allocate hardware SCB array; " "failing detection.\n", p->host_no); + aic_outb(p, 0, SIMODE1); +#ifdef MODULE + enable_irq(p->irq); +#endif p->irq = 0; return(0); } - /* - * Save the actual kmalloc buffer pointer off, then align our - * buffer to a 32 byte boundary - */ - p->scb_data->hscb_kmalloc_ptr = p->scb_data->hscbs; - temp = (unsigned long)p->scb_data->hscbs; - temp += 0x1f; - temp &= ~0x1f; - p->scb_data->hscbs = (struct aic7xxx_hwscb *)temp; - /* At least the control byte of each SCB needs to be 0. */ - memset(p->scb_data->hscbs, 0, array_size); - /* Tell the sequencer where it can find the hardware SCB array. */ - hscb_physaddr = VIRT_TO_BUS(p->scb_data->hscbs); + hscb_physaddr = p->scb_data->hscbs_dma; aic_outb(p, hscb_physaddr & 0xFF, HSCB_ADDR); aic_outb(p, (hscb_physaddr >> 8) & 0xFF, HSCB_ADDR + 1); aic_outb(p, (hscb_physaddr >> 16) & 0xFF, HSCB_ADDR + 2); aic_outb(p, (hscb_physaddr >> 24) & 0xFF, HSCB_ADDR + 3); /* Set up the fifo areas at the same time */ - hscb_physaddr = VIRT_TO_BUS(&p->untagged_scbs[0]); + p->untagged_scbs = pci_alloc_consistent(p->pdev, 3*256, &p->fifo_dma); + if (p->untagged_scbs == NULL) + { + printk("(scsi%d) Unable to allocate hardware FIFO arrays; " + "failing detection.\n", p->host_no); + p->irq = 0; + return(0); + } + + p->qoutfifo = p->untagged_scbs + 256; + p->qinfifo = p->qoutfifo + 256; + for (i = 0; i < 256; i++) + { + p->untagged_scbs[i] = SCB_LIST_NULL; + p->qinfifo[i] = SCB_LIST_NULL; + p->qoutfifo[i] = SCB_LIST_NULL; + } + + hscb_physaddr = p->fifo_dma; aic_outb(p, hscb_physaddr & 0xFF, SCBID_ADDR); aic_outb(p, (hscb_physaddr >> 8) & 0xFF, SCBID_ADDR + 1); aic_outb(p, (hscb_physaddr >> 16) & 0xFF, SCBID_ADDR + 2); @@ -8315,11 +8559,6 @@ first_aic7xxx = p; /* - * Clear out any possible pending interrupts, again. - */ - aic7xxx_clear_intstat(p); - - /* * Allocate the first set of scbs for this controller. This is to stream- * line code elsewhere in the driver. If we have to check for the existence * of scbs in certain code sections, it slows things down. However, as @@ -8373,20 +8612,21 @@ printk(KERN_INFO "(scsi%d) Resetting channel%s\n", p->host_no, channel); } - /* - * Some of the new Ultra2 chipsets need a longer delay after a chip - * reset than just the init setup creates, so we have to delay here - * before we go into a reset in order to make the chips happy. - */ - if (p->features & AHC_ULTRA2) - mdelay(250); aic7xxx_reset_current_bus(p); /* - * Delay for the reset delay. + * Delay for the reset delay by setting the timer, this will delay + * future commands sent to any devices. */ - if (!reset_delay) - aic7xxx_delay(AIC7XXX_RESET_DELAY); + p->flags |= AHC_RESET_DELAY; + for(i=0; idev_expires[i] = jiffies + (4 * HZ); + p->dev_timer_active |= (0x01 << i); + } + p->dev_timer.expires = p->dev_expires[p->scsi_id]; + add_timer(&p->dev_timer); + p->dev_timer_active |= (0x01 << MAX_TARGETS); } else { @@ -8396,11 +8636,6 @@ "the no_reset\n", p->host_no); printk(KERN_INFO "(scsi%d) option unless you have a verifiable need " "for it.\n", p->host_no); - printk(KERN_INFO "(scsi%d) The no_reset option is known to break some " - "systems,\n", p->host_no); - printk(KERN_INFO "(scsi%d) and is not supported by the driver author\n", - p->host_no); - aic7xxx_delay(AIC7XXX_RESET_DELAY); } } @@ -8426,10 +8661,23 @@ { printk(KERN_WARNING "(scsi%d) Couldn't register IRQ %d, ignoring " "controller.\n", p->host_no, p->irq); + aic_outb(p, 0, SIMODE1); +#ifdef MODULE + enable_irq(p->irq); +#endif p->irq = 0; return (0); } + if(aic_inb(p, INTSTAT) & INT_PEND) + printk(INFO_LEAD "spurious interrupt during configuration, cleared.\n", + p->host_no, -1, -1 , -1); + aic7xxx_clear_intstat(p); + +#ifdef MODULE + enable_irq(p->irq); +#endif + unpause_sequencer(p, /* unpause_always */ TRUE); return (found); @@ -8462,7 +8710,7 @@ wait = 1000; /* 1 second (1000 * 1 msec) */ while (--wait && !(aic_inb(p, HCNTRL) & CHIPRSTACK)) { - mdelay(1); /* 1 msec */ + udelay(1); /* 1 msec */ } pause_sequencer(p); @@ -8566,9 +8814,11 @@ */ if (p->scb_data != NULL) { + struct aic7xxx_scb_dma *scb_dma = NULL; if (p->scb_data->hscbs != NULL) { - kfree(p->scb_data->hscb_kmalloc_ptr); + pci_free_consistent(p->pdev, p->scb_data->hscbs_dma_len, + p->scb_data->hscbs, p->scb_data->hscbs_dma); p->scb_data->hscbs = p->scb_data->hscb_kmalloc_ptr = NULL; } /* @@ -8579,6 +8829,14 @@ */ for (i = 0; i < p->scb_data->numscbs; i++) { + if (p->scb_data->scb_array[i]->scb_dma != scb_dma) + { + scb_dma = p->scb_data->scb_array[i]->scb_dma; + pci_free_consistent(p->pdev, scb_dma->dma_len, + (void *)((unsigned long)scb_dma->dma_address + - scb_dma->dma_offset), + scb_dma->dma_address); + } if (p->scb_data->scb_array[i]->kmalloc_ptr != NULL) kfree(p->scb_data->scb_array[i]->kmalloc_ptr); p->scb_data->scb_array[i] = NULL; @@ -8606,6 +8864,7 @@ } } + pci_free_consistent(p->pdev, 3*256, (void *)p->untagged_scbs, p->fifo_dma); } /*+F************************************************************************* @@ -8657,15 +8916,15 @@ if (!have_seeprom) { p->sc_size = 128; - have_seeprom = read_seeprom(p, (p->flags & (AHC_CHNLB|AHC_CHNLC)), + have_seeprom = read_seeprom(p, 4*(p->flags & (AHC_CHNLB|AHC_CHNLC)), scarray, p->sc_size, p->sc_type); if (!have_seeprom) { if(p->sc_type == C46) - have_seeprom = read_seeprom(p, (p->flags & (AHC_CHNLB|AHC_CHNLC)), + have_seeprom = read_seeprom(p, 4*(p->flags & (AHC_CHNLB|AHC_CHNLC)), scarray, p->sc_size, C56_66); else - have_seeprom = read_seeprom(p, (p->flags & (AHC_CHNLB|AHC_CHNLC)), + have_seeprom = read_seeprom(p, 4*(p->flags & (AHC_CHNLB|AHC_CHNLC)), scarray, p->sc_size, C46); } } @@ -9098,271 +9357,17 @@ template->sg_tablesize = AIC7XXX_MAX_SG; -#if defined(__i386__) || defined(__alpha__) #ifdef CONFIG_PCI /* - * PCI-bus chipset probe. + * PCI-bus probe. */ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) if (pci_present()) - { - if (pci_find_device(PCI_VENDOR_ID_INTEL, - PCI_DEVICE_ID_INTEL_82450GX, - NULL)) - aic7xxx_no_probe = 1; - if (pci_find_device(PCI_VENDOR_ID_INTEL, - PCI_DEVICE_ID_INTEL_82451NX, - NULL)) - aic7xxx_no_probe = 1; - } #else -#define PCI_DEVICE_ID_INTEL_82451NX 0x84ca if (pcibios_present()) +#endif { - unsigned char pci_bus, pci_devfn; - if (!(pcibios_find_device(PCI_VENDOR_ID_INTEL, - PCI_DEVICE_ID_INTEL_82450GX, - 0, &pci_bus, &pci_devfn)) ) - aic7xxx_no_probe = 1; - if (!(pcibios_find_device(PCI_VENDOR_ID_INTEL, - PCI_DEVICE_ID_INTEL_82451NX, - 0, &pci_bus, &pci_devfn)) ) - aic7xxx_no_probe = 1; - } -#endif /* LINUX_VERSION_CODE */ -#endif /* CONFIG_PCI */ - /* - * EISA/VL-bus card signature probe. - */ - slot = MINSLOT; - while ( (slot <= MAXSLOT) && - !(aic7xxx_no_probe) ) - { - base = SLOTBASE(slot) + MINREG; - - if (check_region(base, MAXREG - MINREG)) - { - /* - * Some other driver has staked a - * claim to this i/o region already. - */ - slot++; - continue; /* back to the beginning of the for loop */ - } - flags = 0; - type = aic7xxx_probe(slot, base + AHC_HID0, &flags); - if (type == -1) - { - slot++; - continue; - } - temp_p = kmalloc(sizeof(struct aic7xxx_host), GFP_ATOMIC); - if (temp_p == NULL) - { - printk(KERN_WARNING "aic7xxx: Unable to allocate device space.\n"); - slot++; - continue; /* back to the beginning of the while loop */ - } - /* - * Pause the card preserving the IRQ type. Allow the operator - * to override the IRQ trigger. - */ - if (aic7xxx_irq_trigger == 1) - hcntrl = IRQMS; /* Level */ - else if (aic7xxx_irq_trigger == 0) - hcntrl = 0; /* Edge */ - else - hcntrl = inb(base + HCNTRL) & IRQMS; /* Default */ - memset(temp_p, 0, sizeof(struct aic7xxx_host)); - temp_p->unpause = hcntrl | INTEN; - temp_p->pause = hcntrl | PAUSE | INTEN; - temp_p->base = base; - temp_p->mbase = 0; - temp_p->maddr = 0; - temp_p->pci_bus = 0; - temp_p->pci_device_fn = slot; - aic_outb(temp_p, hcntrl | PAUSE, HCNTRL); - while( (aic_inb(temp_p, HCNTRL) & PAUSE) == 0 ) ; - if (aic7xxx_chip_reset(temp_p) == -1) - temp_p->irq = 0; - else - temp_p->irq = aic_inb(temp_p, INTDEF) & 0x0F; - temp_p->flags |= AHC_PAGESCBS; - - switch (temp_p->irq) - { - case 9: - case 10: - case 11: - case 12: - case 14: - case 15: - break; - - default: - printk(KERN_WARNING "aic7xxx: Host adapter uses unsupported IRQ " - "level %d, ignoring.\n", temp_p->irq); - kfree(temp_p); - slot++; - continue; /* back to the beginning of the while loop */ - } - - /* - * We are commited now, everything has been checked and this card - * has been found, now we just set it up - */ - - /* - * Insert our new struct into the list at the end - */ - if (list_p == NULL) - { - list_p = current_p = temp_p; - } - else - { - current_p = list_p; - while (current_p->next != NULL) - current_p = current_p->next; - current_p->next = temp_p; - } - - switch (type) - { - case 0: - temp_p->board_name_index = 2; - if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("aic7xxx: <%s> at EISA %d\n", - board_names[2], slot); - /* FALLTHROUGH */ - case 1: - { - temp_p->chip = AHC_AIC7770 | AHC_EISA; - temp_p->features |= AHC_AIC7770_FE; - temp_p->bios_control = aic_inb(temp_p, HA_274_BIOSCTRL); - - /* - * Get the primary channel information. Right now we don't - * do anything with this, but someday we will be able to inform - * the mid-level SCSI code which channel is primary. - */ - if (temp_p->board_name_index == 0) - { - temp_p->board_name_index = 3; - if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("aic7xxx: <%s> at EISA %d\n", - board_names[3], slot); - } - if (temp_p->bios_control & CHANNEL_B_PRIMARY) - { - temp_p->flags |= AHC_CHANNEL_B_PRIMARY; - } - - if ((temp_p->bios_control & BIOSMODE) == BIOSDISABLED) - { - temp_p->flags &= ~AHC_BIOS_ENABLED; - } - else - { - temp_p->flags &= ~AHC_USEDEFAULTS; - temp_p->flags |= AHC_BIOS_ENABLED; - if ( (temp_p->bios_control & 0x20) == 0 ) - { - temp_p->bios_address = 0xcc000; - temp_p->bios_address += (0x4000 * (temp_p->bios_control & 0x07)); - } - else - { - temp_p->bios_address = 0xd0000; - temp_p->bios_address += (0x8000 * (temp_p->bios_control & 0x06)); - } - } - temp_p->adapter_control = aic_inb(temp_p, SCSICONF) << 8; - temp_p->adapter_control |= aic_inb(temp_p, SCSICONF + 1); - if (temp_p->features & AHC_WIDE) - { - temp_p->scsi_id = temp_p->adapter_control & HWSCSIID; - temp_p->scsi_id_b = temp_p->scsi_id; - } - else - { - temp_p->scsi_id = (temp_p->adapter_control >> 8) & HSCSIID; - temp_p->scsi_id_b = temp_p->adapter_control & HSCSIID; - } - aic7xxx_load_seeprom(temp_p, &sxfrctl1); - break; - } - - case 2: - case 3: - temp_p->chip = AHC_AIC7770 | AHC_VL; - temp_p->features |= AHC_AIC7770_FE; - if (type == 2) - temp_p->flags |= AHC_BIOS_ENABLED; - else - temp_p->flags &= ~AHC_BIOS_ENABLED; - if (aic_inb(temp_p, SCSICONF) & TERM_ENB) - sxfrctl1 = STPWEN; - aic7xxx_load_seeprom(temp_p, &sxfrctl1); - temp_p->board_name_index = 4; - if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("aic7xxx: <%s> at VLB %d\n", - board_names[2], slot); - switch( aic_inb(temp_p, STATUS_2840) & BIOS_SEL ) - { - case 0x00: - temp_p->bios_address = 0xe0000; - break; - case 0x20: - temp_p->bios_address = 0xc8000; - break; - case 0x40: - temp_p->bios_address = 0xd0000; - break; - case 0x60: - temp_p->bios_address = 0xd8000; - break; - default: - break; /* can't get here */ - } - break; - - default: /* Won't get here. */ - break; - } - if (aic7xxx_verbose & VERBOSE_PROBE2) - { - printk(KERN_INFO "aic7xxx: BIOS %sabled, IO Port 0x%lx, IRQ %d (%s)\n", - (temp_p->flags & AHC_USEDEFAULTS) ? "dis" : "en", temp_p->base, - temp_p->irq, - (temp_p->pause & IRQMS) ? "level sensitive" : "edge triggered"); - printk(KERN_INFO "aic7xxx: Extended translation %sabled.\n", - (temp_p->flags & AHC_EXTEND_TRANS_A) ? "en" : "dis"); - } - - /* - * Set the FIFO threshold and the bus off time. - */ - hostconf = aic_inb(temp_p, HOSTCONF); - aic_outb(temp_p, hostconf & DFTHRSH, BUSSPD); - aic_outb(temp_p, (hostconf << 2) & BOFF, BUSTIME); - slot++; - found++; - } - -#endif /* defined(__i386__) || defined(__alpha__) */ - -#ifdef CONFIG_PCI - /* - * PCI-bus probe. - */ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) - if (pci_present()) -#else - if (pcibios_present()) -#endif - { - struct + struct { unsigned short vendor_id; unsigned short device_id; @@ -9485,7 +9490,7 @@ AHC_AIC7896_FE, 25, 32, C56_66 }, {PCI_VENDOR_ID_ADAPTEC, PCI_DEVICE_ID_ADAPTEC_1480A, AHC_AIC7860, - AHC_PAGESCBS | AHC_NEWEEPROM_FMT | AHC_BIOS_ENABLED, + AHC_PAGESCBS | AHC_NEWEEPROM_FMT | AHC_BIOS_ENABLED | AHC_NO_STPWR, AHC_AIC7860_FE, 26, 32, C46 }, {PCI_VENDOR_ID_ADAPTEC2, PCI_DEVICE_ID_ADAPTEC2_7892A, AHC_AIC7892, @@ -9594,8 +9599,8 @@ if (aic7xxx_verbose & VERBOSE_PROBE2) printk("aic7xxx: <%s> at PCI %d/%d\n", board_names[aic_pdevs[i].board_name_index], - PCI_SLOT(temp_p->pdev->devfn), - PCI_FUNC(temp_p->pdev->devfn)); + PCI_SLOT(pdev->devfn), + PCI_FUNC(pdev->devfn)); pci_read_config_word(pdev, PCI_COMMAND, &command); if (aic7xxx_verbose & VERBOSE_PROBE2) { @@ -9651,8 +9656,9 @@ if ( temp_p == NULL ) continue; if (aic7xxx_verbose & VERBOSE_PROBE2) - printk("aic7xxx: <%s> at PCI %d/%d\n", + printk("aic7xxx: <%s> at PCI %d/%d/%d\n", board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, PCI_SLOT(temp_p->pci_device_fn), PCI_FUNC(temp_p->pci_device_fn)); pcibios_read_config_word(pci_bus, pci_devfn, PCI_COMMAND, &command); @@ -9682,14 +9688,28 @@ #endif /* AIC7XXX_STRICT_PCI_SETUP */ #endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) */ + if(check_region(temp_p->base, MAXREG - MINREG)) + { + printk("aic7xxx: <%s> at PCI %d/%d/%d\n", + board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, + PCI_SLOT(temp_p->pci_device_fn), + PCI_FUNC(temp_p->pci_device_fn)); + printk("aic7xxx: I/O ports already in use, ignoring.\n"); + kfree(temp_p); + temp_p = NULL; + continue; + } + temp_p->unpause = INTEN; temp_p->pause = temp_p->unpause | PAUSE; if ( ((temp_p->base == 0) && (temp_p->mbase == 0)) || (temp_p->irq == 0) ) { - printk("aic7xxx: <%s> at PCI %d/%d\n", + printk("aic7xxx: <%s> at PCI %d/%d/%d\n", board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, PCI_SLOT(temp_p->pci_device_fn), PCI_FUNC(temp_p->pci_device_fn)); printk("aic7xxx: Controller disabled by BIOS, ignoring.\n"); @@ -9724,8 +9744,9 @@ /* * OK.....we failed our test....go back to programmed I/O */ - printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d\n", + printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d/%d\n", board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, PCI_SLOT(temp_p->pci_device_fn), PCI_FUNC(temp_p->pci_device_fn)); printk(KERN_INFO "aic7xxx: MMAPed I/O failed, reverting to " @@ -9742,6 +9763,11 @@ #endif /* + * Lock out other contenders for our i/o space. + */ + request_region(temp_p->base, MAXREG - MINREG, "aic7xxx"); + + /* * We HAVE to make sure the first pause_sequencer() and all other * subsequent I/O that isn't PCI config space I/O takes place * after the MMAPed I/O region is configured and tested. The @@ -9773,14 +9799,31 @@ /* * Get current termination setting */ - sxfrctl1 = aic_inb(temp_p, SXFRCTL1) & STPWEN; + sxfrctl1 = aic_inb(temp_p, SXFRCTL1); if (aic7xxx_chip_reset(temp_p) == -1) { + release_region(temp_p->base, MAXREG - MINREG); kfree(temp_p); temp_p = NULL; continue; } + /* + * Very quickly put the term setting back into the register since + * the chip reset may cause odd things to happen. This is to keep + * LVD busses with lots of drives from draining the power out of + * the diffsense line before we get around to running the + * configure_termination() function. Also restore the STPWLEVEL + * bit of DEVCONFIG + */ + aic_outb(temp_p, sxfrctl1, SXFRCTL1); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) + pcibios_write_config_dword(temp_p->pci_bus, temp_p->pci_device_fn, + DEVCONFIG, devconfig); +#else + pci_write_config_dword(temp_p->pdev, DEVCONFIG, devconfig); +#endif + sxfrctl1 &= STPWEN; /* * We need to set the CHNL? assignments before loading the SEEPROM @@ -9815,7 +9858,7 @@ case AHC_AIC7896: /* 7896/7 */ case AHC_AIC7899: /* 7899 */ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,92) - if (PCI_FUNC(temp_p->pdev->devfn) != 0) + if (PCI_FUNC(pdev->devfn) != 0) { temp_p->flags |= AHC_CHNLB; } @@ -10007,8 +10050,9 @@ } else if (aic_inb(temp_p, DSCOMMAND0) & RAMPSM_ULTRA2) { - printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d\n", + printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d/%d\n", board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, PCI_SLOT(temp_p->pci_device_fn), PCI_FUNC(temp_p->pci_device_fn)); printk("aic7xxx: external SCB RAM detected, " @@ -10025,8 +10069,9 @@ } else if (devconfig & RAMPSM) { - printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d\n", + printk(KERN_INFO "aic7xxx: <%s> at PCI %d/%d/%d\n", board_names[aic_pdevs[i].board_name_index], + temp_p->pci_bus, PCI_SLOT(temp_p->pci_device_fn), PCI_FUNC(temp_p->pci_device_fn)); printk("aic7xxx: external SCB RAM detected, " @@ -10091,6 +10136,235 @@ } /* for PCI_DEVICES */ } /* PCI BIOS present */ #endif CONFIG_PCI + +#if defined(__i386__) || defined(__alpha__) + /* + * EISA/VL-bus card signature probe. + */ + slot = MINSLOT; + while ( (slot <= MAXSLOT) && + !(aic7xxx_no_probe) ) + { + base = SLOTBASE(slot) + MINREG; + + if (check_region(base, MAXREG - MINREG)) + { + /* + * Some other driver has staked a + * claim to this i/o region already. + */ + slot++; + continue; /* back to the beginning of the for loop */ + } + flags = 0; + type = aic7xxx_probe(slot, base + AHC_HID0, &flags); + if (type == -1) + { + slot++; + continue; + } + temp_p = kmalloc(sizeof(struct aic7xxx_host), GFP_ATOMIC); + if (temp_p == NULL) + { + printk(KERN_WARNING "aic7xxx: Unable to allocate device space.\n"); + slot++; + continue; /* back to the beginning of the while loop */ + } + /* + * Lock out other contenders for our i/o space. + */ + request_region(base, MAXREG - MINREG, "aic7xxx"); + + /* + * Pause the card preserving the IRQ type. Allow the operator + * to override the IRQ trigger. + */ + if (aic7xxx_irq_trigger == 1) + hcntrl = IRQMS; /* Level */ + else if (aic7xxx_irq_trigger == 0) + hcntrl = 0; /* Edge */ + else + hcntrl = inb(base + HCNTRL) & IRQMS; /* Default */ + memset(temp_p, 0, sizeof(struct aic7xxx_host)); + temp_p->unpause = hcntrl | INTEN; + temp_p->pause = hcntrl | PAUSE | INTEN; + temp_p->base = base; + temp_p->mbase = 0; + temp_p->maddr = 0; + temp_p->pci_bus = 0; + temp_p->pci_device_fn = slot; + aic_outb(temp_p, hcntrl | PAUSE, HCNTRL); + while( (aic_inb(temp_p, HCNTRL) & PAUSE) == 0 ) ; + if (aic7xxx_chip_reset(temp_p) == -1) + temp_p->irq = 0; + else + temp_p->irq = aic_inb(temp_p, INTDEF) & 0x0F; + temp_p->flags |= AHC_PAGESCBS; + + switch (temp_p->irq) + { + case 9: + case 10: + case 11: + case 12: + case 14: + case 15: + break; + + default: + printk(KERN_WARNING "aic7xxx: Host adapter uses unsupported IRQ " + "level %d, ignoring.\n", temp_p->irq); + kfree(temp_p); + release_region(base, MAXREG - MINREG); + slot++; + continue; /* back to the beginning of the while loop */ + } + + /* + * We are commited now, everything has been checked and this card + * has been found, now we just set it up + */ + + /* + * Insert our new struct into the list at the end + */ + if (list_p == NULL) + { + list_p = current_p = temp_p; + } + else + { + current_p = list_p; + while (current_p->next != NULL) + current_p = current_p->next; + current_p->next = temp_p; + } + + switch (type) + { + case 0: + temp_p->board_name_index = 2; + if (aic7xxx_verbose & VERBOSE_PROBE2) + printk("aic7xxx: <%s> at EISA %d\n", + board_names[2], slot); + /* FALLTHROUGH */ + case 1: + { + temp_p->chip = AHC_AIC7770 | AHC_EISA; + temp_p->features |= AHC_AIC7770_FE; + temp_p->bios_control = aic_inb(temp_p, HA_274_BIOSCTRL); + + /* + * Get the primary channel information. Right now we don't + * do anything with this, but someday we will be able to inform + * the mid-level SCSI code which channel is primary. + */ + if (temp_p->board_name_index == 0) + { + temp_p->board_name_index = 3; + if (aic7xxx_verbose & VERBOSE_PROBE2) + printk("aic7xxx: <%s> at EISA %d\n", + board_names[3], slot); + } + if (temp_p->bios_control & CHANNEL_B_PRIMARY) + { + temp_p->flags |= AHC_CHANNEL_B_PRIMARY; + } + + if ((temp_p->bios_control & BIOSMODE) == BIOSDISABLED) + { + temp_p->flags &= ~AHC_BIOS_ENABLED; + } + else + { + temp_p->flags &= ~AHC_USEDEFAULTS; + temp_p->flags |= AHC_BIOS_ENABLED; + if ( (temp_p->bios_control & 0x20) == 0 ) + { + temp_p->bios_address = 0xcc000; + temp_p->bios_address += (0x4000 * (temp_p->bios_control & 0x07)); + } + else + { + temp_p->bios_address = 0xd0000; + temp_p->bios_address += (0x8000 * (temp_p->bios_control & 0x06)); + } + } + temp_p->adapter_control = aic_inb(temp_p, SCSICONF) << 8; + temp_p->adapter_control |= aic_inb(temp_p, SCSICONF + 1); + if (temp_p->features & AHC_WIDE) + { + temp_p->scsi_id = temp_p->adapter_control & HWSCSIID; + temp_p->scsi_id_b = temp_p->scsi_id; + } + else + { + temp_p->scsi_id = (temp_p->adapter_control >> 8) & HSCSIID; + temp_p->scsi_id_b = temp_p->adapter_control & HSCSIID; + } + aic7xxx_load_seeprom(temp_p, &sxfrctl1); + break; + } + + case 2: + case 3: + temp_p->chip = AHC_AIC7770 | AHC_VL; + temp_p->features |= AHC_AIC7770_FE; + if (type == 2) + temp_p->flags |= AHC_BIOS_ENABLED; + else + temp_p->flags &= ~AHC_BIOS_ENABLED; + if (aic_inb(temp_p, SCSICONF) & TERM_ENB) + sxfrctl1 = STPWEN; + aic7xxx_load_seeprom(temp_p, &sxfrctl1); + temp_p->board_name_index = 4; + if (aic7xxx_verbose & VERBOSE_PROBE2) + printk("aic7xxx: <%s> at VLB %d\n", + board_names[2], slot); + switch( aic_inb(temp_p, STATUS_2840) & BIOS_SEL ) + { + case 0x00: + temp_p->bios_address = 0xe0000; + break; + case 0x20: + temp_p->bios_address = 0xc8000; + break; + case 0x40: + temp_p->bios_address = 0xd0000; + break; + case 0x60: + temp_p->bios_address = 0xd8000; + break; + default: + break; /* can't get here */ + } + break; + + default: /* Won't get here. */ + break; + } + if (aic7xxx_verbose & VERBOSE_PROBE2) + { + printk(KERN_INFO "aic7xxx: BIOS %sabled, IO Port 0x%lx, IRQ %d (%s)\n", + (temp_p->flags & AHC_USEDEFAULTS) ? "dis" : "en", temp_p->base, + temp_p->irq, + (temp_p->pause & IRQMS) ? "level sensitive" : "edge triggered"); + printk(KERN_INFO "aic7xxx: Extended translation %sabled.\n", + (temp_p->flags & AHC_EXTEND_TRANS_A) ? "en" : "dis"); + } + + /* + * Set the FIFO threshold and the bus off time. + */ + hostconf = aic_inb(temp_p, HOSTCONF); + aic_outb(temp_p, hostconf & DFTHRSH, BUSSPD); + aic_outb(temp_p, (hostconf << 2) & BOFF, BUSTIME); + slot++; + found++; + } + +#endif /* defined(__i386__) || defined(__alpha__) */ + /* * Now, we re-order the probed devices by BIOS address and BUS class. * In general, we follow this algorithm to make the adapters show up @@ -10391,7 +10665,7 @@ * instead of slowing down if those exist. That's hard to do with simple * checksums though. */ - if(aic7xxx_verbose & VERBOSE_NEGOTIATION) + if(aic7xxx_verbose & VERBOSE_NEGOTIATION2) { printk(INFO_LEAD "reducing SCSI transfer speed due to Domain " "validation failure.\n", p->host_no, CTL_OF_CMD(cmd)); @@ -10422,7 +10696,7 @@ } else { - if(aic7xxx_verbose & VERBOSE_NEGOTIATION) + if(aic7xxx_verbose & VERBOSE_NEGOTIATION2) { printk(INFO_LEAD "Performing Domain validation.\n", p->host_no, CTL_OF_CMD(cmd)); @@ -10447,7 +10721,7 @@ } else { - if( (aic7xxx_verbose & VERBOSE_NEGOTIATION) && + if( (aic7xxx_verbose & VERBOSE_NEGOTIATION2) && (p->needdv & (1<SCSI_cmd_length = cmd->cmd_len; - hscb->SCSI_cmd_pointer = cpu_to_le32(VIRT_TO_BUS(cmd->cmnd)); + memcpy(scb->cmnd, cmd->cmnd, cmd->cmd_len); + hscb->SCSI_cmd_pointer = cpu_to_le32(SCB_DMA_ADDR(scb, scb->cmnd)); if (cmd->use_sg) { @@ -10675,10 +10950,11 @@ * differences and the kernel SG list uses virtual addresses where * we need physical addresses. */ - int i; + int i, use_sg; sg = (struct scatterlist *)cmd->request_buffer; scb->sg_length = 0; + use_sg = pci_map_sg(p->pdev, sg, cmd->use_sg); /* * Copy the segments into the SG array. NOTE!!! - We used to * have the first entry both in the data_pointer area and the first @@ -10686,29 +10962,32 @@ * entry in both places, but now we download the address of * scb->sg_list[1] instead of 0 to the sg pointer in the hscb. */ - for (i = 0; i < cmd->use_sg; i++) + for (i = 0; i < use_sg; i++) { - scb->sg_list[i].address = cpu_to_le32(VIRT_TO_BUS(sg[i].address)); - scb->sg_list[i].length = cpu_to_le32(sg[i].length); - scb->sg_length += sg[i].length; + unsigned int len = sg_dma_len(sg+i); + scb->sg_list[i].address = cpu_to_le32(sg_dma_address(sg+i)); + scb->sg_list[i].length = cpu_to_le32(len); + scb->sg_length += len; } /* Copy the first SG into the data pointer area. */ hscb->data_pointer = scb->sg_list[0].address; hscb->data_count = scb->sg_list[0].length; - scb->sg_count = cmd->use_sg; - hscb->SG_segment_count = cmd->use_sg; - hscb->SG_list_pointer = cpu_to_le32(VIRT_TO_BUS(&scb->sg_list[1])); + scb->sg_count = i; + hscb->SG_segment_count = i; + hscb->SG_list_pointer = cpu_to_le32(SCB_DMA_ADDR(scb, &scb->sg_list[1])); } else { if (cmd->request_bufflen) { - scb->sg_count = 1; - scb->sg_list[0].address = cpu_to_le32(VIRT_TO_BUS(cmd->request_buffer)); + unsigned int address = pci_map_single(p->pdev, cmd->request_buffer, + cmd->request_bufflen); + scb->sg_list[0].address = cpu_to_le32(address); scb->sg_list[0].length = cpu_to_le32(cmd->request_bufflen); + scb->sg_count = 1; scb->sg_length = cmd->request_bufflen; hscb->SG_segment_count = 1; - hscb->SG_list_pointer = cpu_to_le32(VIRT_TO_BUS(&scb->sg_list[0])); + hscb->SG_list_pointer = cpu_to_le32(SCB_DMA_ADDR(scb, &scb->sg_list[0])); hscb->data_count = scb->sg_list[0].length; hscb->data_pointer = scb->sg_list[0].address; } @@ -11991,7 +12270,7 @@ break; case AHC_PCI: default: - printk("PCI %d/%d.\n", PCI_SLOT(p->pci_device_fn), + printk("PCI %d/%d/%d.\n", p->pci_bus, PCI_SLOT(p->pci_device_fn), PCI_FUNC(p->pci_device_fn)); break; } diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx_proc.c linux/drivers/scsi/aic7xxx_proc.c --- v2.3.43/linux/drivers/scsi/aic7xxx_proc.c Tue Nov 23 22:42:21 1999 +++ linux/drivers/scsi/aic7xxx_proc.c Thu Feb 10 19:00:35 2000 @@ -178,7 +178,7 @@ size += sprintf(BLS, " SCSI Adapter: %s\n", board_names[p->board_name_index]); if (p->flags & AHC_TWIN) - size += sprintf(BLS, " Twin Channel\n"); + size += sprintf(BLS, " Twin Channel Controller "); else { char *channel = ""; @@ -209,9 +209,22 @@ ultra = "Ultra-2 LVD/SE "; else if (p->features & AHC_ULTRA) ultra = "Ultra "; - size += sprintf(BLS, " %s%sController%s\n", + size += sprintf(BLS, " %s%sController%s ", ultra, wide, channel); } + switch(p->chip & ~AHC_CHIPID_MASK) + { + case AHC_VL: + size += sprintf(BLS, "at VLB slot %d\n", p->pci_device_fn); + break; + case AHC_EISA: + size += sprintf(BLS, "at EISA slot %d\n", p->pci_device_fn); + break; + default: + size += sprintf(BLS, "at PCI %d/%d/%d\n", p->pci_bus, + PCI_SLOT(p->pci_device_fn), PCI_FUNC(p->pci_device_fn)); + break; + } if( !(p->maddr) ) { size += sprintf(BLS, " Programmed I/O Base: %lx\n", p->base); @@ -223,11 +236,6 @@ if( (p->chip & (AHC_VL | AHC_EISA)) ) { size += sprintf(BLS, " BIOS Memory Address: 0x%08x\n", p->bios_address); - } - if( p->chip & AHC_PCI ) - { - size += sprintf(BLS, " PCI Bus 0x%02x Device 0x%02x\n", p->pci_bus, - p->pci_device_fn); } size += sprintf(BLS, " Adapter SEEPROM Config: %s\n", (p->flags & AHC_SEEPROM_FOUND) ? "SEEPROM found and used." : diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx_reg.h linux/drivers/scsi/aic7xxx_reg.h --- v2.3.43/linux/drivers/scsi/aic7xxx_reg.h Sun Jul 18 21:15:13 1999 +++ linux/drivers/scsi/aic7xxx_reg.h Thu Feb 10 19:00:35 2000 @@ -188,8 +188,8 @@ #define BRDRW 0x04 #define BRDRW_ULTRA2 0x02 #define BRDCTL1 0x02 -#define BRDSTB_ULTRA2 0x01 #define BRDCTL0 0x01 +#define BRDSTB_ULTRA2 0x01 #define SEECTL 0x1e #define EXTARBACK 0x80 @@ -402,7 +402,7 @@ #define RESIDUAL 0x81 #define BAD_STATUS 0x71 #define REJECT_MSG 0x61 -#define ABORT_REQUESTED 0x51 +#define WIDE_RESIDUE 0x51 #define EXTENDED_MSG 0x41 #define NO_MATCH 0x31 #define NO_IDENT 0x21 @@ -465,6 +465,8 @@ #define TARGCRCENDEN 0x08 #define TARGCRCCNTEN 0x04 +#define QOUTCNT 0x9e + #define SCSIPHASE 0x9e #define SP_STATUS 0x20 #define SP_COMMAND 0x10 @@ -473,8 +475,6 @@ #define SP_DATA_IN 0x02 #define SP_DATA_OUT 0x01 -#define QOUTCNT 0x9e - #define SFUNCT 0x9f #define ALT_MODE 0x80 @@ -595,8 +595,8 @@ #define RD_DFTHRSH_63 0x03 #define RD_DFTHRSH_50 0x02 #define RD_DFTHRSH_25 0x01 -#define WR_DFTHRSH_MIN 0x00 #define RD_DFTHRSH_MIN 0x00 +#define WR_DFTHRSH_MIN 0x00 #define SG_CACHEPTR 0xfc #define SG_USER_DATA 0xfc @@ -604,18 +604,18 @@ #define LAST_SEG_DONE 0x01 +#define CMD_GROUP_CODE_SHIFT 0x05 +#define BUS_8_BIT 0x00 +#define QOUTFIFO_OFFSET 0x01 +#define CCSGRAM_MAXSEGS 0x10 #define CMD_GROUP2_BYTE_DELTA 0xfa #define MAX_OFFSET_8BIT 0x0f #define BUS_16_BIT 0x01 #define QINFIFO_OFFSET 0x02 #define CMD_GROUP5_BYTE_DELTA 0x0b -#define CMD_GROUP_CODE_SHIFT 0x05 #define MAX_OFFSET_ULTRA2 0x7f #define MAX_OFFSET_16BIT 0x08 -#define BUS_8_BIT 0x00 -#define QOUTFIFO_OFFSET 0x01 #define UNTAGGEDSCB_OFFSET 0x00 -#define CCSGRAM_MAXSEGS 0x10 #define SCB_LIST_NULL 0xff #define SG_SIZEOF 0x08 #define CMD_GROUP4_BYTE_DELTA 0x04 diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/aic7xxx_seq.c linux/drivers/scsi/aic7xxx_seq.c --- v2.3.43/linux/drivers/scsi/aic7xxx_seq.c Tue Nov 23 22:42:21 1999 +++ linux/drivers/scsi/aic7xxx_seq.c Thu Feb 10 19:00:35 2000 @@ -26,12 +26,12 @@ 0x00, 0x4d, 0x12, 0x70, 0x01, 0x4e, 0x9c, 0x18, 0xbf, 0x60, 0xc0, 0x08, - 0x00, 0x6a, 0xa8, 0x5c, + 0x00, 0x6a, 0xbe, 0x5c, 0xff, 0x4e, 0xc8, 0x18, - 0x02, 0x6a, 0xbe, 0x5b, + 0x02, 0x6a, 0xd4, 0x5b, 0xff, 0x52, 0x20, 0x09, 0x0d, 0x6a, 0x6a, 0x00, - 0x00, 0x52, 0x34, 0x5c, + 0x00, 0x52, 0x4a, 0x5c, 0x03, 0xb0, 0x52, 0x31, 0xff, 0xb0, 0x52, 0x09, 0xff, 0xb1, 0x54, 0x09, @@ -76,7 +76,7 @@ 0x10, 0x03, 0xfc, 0x78, 0xff, 0x50, 0xc8, 0x08, 0x88, 0x6a, 0xcc, 0x00, - 0x49, 0x6a, 0x24, 0x5c, + 0x49, 0x6a, 0x3a, 0x5c, 0x01, 0x6a, 0x26, 0x01, 0xff, 0x6a, 0xca, 0x08, 0x08, 0x01, 0x02, 0x00, @@ -117,11 +117,11 @@ 0xff, 0x65, 0xca, 0x18, 0xff, 0x65, 0xd8, 0x68, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x9a, 0x5c, + 0x00, 0x65, 0xb0, 0x5c, 0x40, 0x51, 0xf0, 0x78, 0xe4, 0x6a, 0x06, 0x00, 0x08, 0x01, 0x02, 0x00, - 0x04, 0x6a, 0x56, 0x5b, + 0x04, 0x6a, 0x6c, 0x5b, 0x01, 0x50, 0xa0, 0x18, 0x00, 0x50, 0xf6, 0xe0, 0xff, 0x6a, 0xa0, 0x08, @@ -147,13 +147,13 @@ 0x08, 0x6a, 0x66, 0x58, 0x80, 0x6a, 0x68, 0x00, 0x80, 0x36, 0x6c, 0x00, - 0x00, 0x65, 0x08, 0x5c, + 0x00, 0x65, 0x1e, 0x5c, 0xff, 0x3d, 0xc8, 0x08, 0xbf, 0x64, 0x5a, 0x79, - 0x80, 0x64, 0x20, 0x72, - 0xa0, 0x64, 0x50, 0x72, - 0xc0, 0x64, 0x48, 0x72, - 0xe0, 0x64, 0x90, 0x72, + 0x80, 0x64, 0x22, 0x72, + 0xa0, 0x64, 0x52, 0x72, + 0xc0, 0x64, 0x4a, 0x72, + 0xe0, 0x64, 0x92, 0x72, 0x01, 0x6a, 0x22, 0x01, 0x00, 0x65, 0x22, 0x41, 0xf7, 0x11, 0x22, 0x08, @@ -173,13 +173,13 @@ 0x03, 0xa9, 0x18, 0x31, 0x03, 0xa9, 0x10, 0x30, 0x08, 0x6a, 0xcc, 0x00, - 0xa9, 0x6a, 0x1e, 0x5c, + 0xa9, 0x6a, 0x34, 0x5c, 0x00, 0x65, 0x7a, 0x41, 0xa8, 0x6a, 0x6a, 0x00, 0x79, 0x6a, 0x6a, 0x00, 0x40, 0x3d, 0x62, 0x69, 0x04, 0x35, 0x6a, 0x00, - 0x00, 0x65, 0x78, 0x5b, + 0x00, 0x65, 0x8e, 0x5b, 0x80, 0x6a, 0xd4, 0x01, 0x10, 0x36, 0x4e, 0x69, 0x10, 0x36, 0x6c, 0x00, @@ -187,10 +187,10 @@ 0x03, 0x8c, 0x10, 0x30, 0x05, 0xa3, 0x70, 0x30, 0x88, 0x6a, 0xcc, 0x00, - 0xac, 0x6a, 0x16, 0x5c, - 0x00, 0x65, 0x10, 0x5c, + 0xac, 0x6a, 0x2c, 0x5c, + 0x00, 0x65, 0x26, 0x5c, 0x38, 0x6a, 0xcc, 0x00, - 0xa3, 0x6a, 0x1a, 0x5c, + 0xa3, 0x6a, 0x30, 0x5c, 0xff, 0x38, 0x8a, 0x69, 0x80, 0x02, 0x04, 0x00, 0xe7, 0x35, 0x6a, 0x08, @@ -199,51 +199,52 @@ 0xff, 0x6a, 0x10, 0x00, 0xff, 0x6a, 0x12, 0x00, 0xff, 0x6a, 0x14, 0x00, - 0x01, 0x38, 0x8e, 0x61, + 0x01, 0x38, 0x90, 0x61, 0xbf, 0x35, 0x6a, 0x08, + 0x02, 0x6a, 0xf8, 0x01, 0xff, 0x69, 0xca, 0x08, 0xff, 0x35, 0x26, 0x09, - 0x04, 0x0b, 0x92, 0x69, - 0x04, 0x0b, 0x9e, 0x69, - 0x10, 0x0c, 0x94, 0x79, - 0x04, 0x0b, 0x9c, 0x69, + 0x04, 0x0b, 0x94, 0x69, + 0x04, 0x0b, 0xa0, 0x69, + 0x10, 0x0c, 0x96, 0x79, + 0x04, 0x0b, 0xa0, 0x69, 0xff, 0x6a, 0xca, 0x08, - 0x00, 0x35, 0x60, 0x5b, - 0x80, 0x02, 0xf2, 0x69, - 0xff, 0x65, 0xe2, 0x79, + 0x00, 0x35, 0x76, 0x5b, + 0x80, 0x02, 0xf4, 0x69, + 0xff, 0x65, 0xe4, 0x79, 0xff, 0x38, 0x70, 0x18, - 0xff, 0x38, 0xe2, 0x79, - 0x80, 0xea, 0xbe, 0x61, + 0xff, 0x38, 0xe4, 0x79, + 0x80, 0xea, 0xc0, 0x61, 0xef, 0x38, 0xc8, 0x18, 0x80, 0x6a, 0xc8, 0x00, - 0x00, 0x65, 0xb0, 0x49, + 0x00, 0x65, 0xb2, 0x49, 0x33, 0x38, 0xc8, 0x28, 0xff, 0x64, 0xd0, 0x09, 0x04, 0x39, 0xc0, 0x31, 0x09, 0x6a, 0xd6, 0x01, - 0x80, 0xeb, 0xb6, 0x79, + 0x80, 0xeb, 0xb8, 0x79, 0xf7, 0xeb, 0xd6, 0x09, - 0x08, 0xeb, 0xba, 0x69, + 0x08, 0xeb, 0xbc, 0x69, 0x01, 0x6a, 0xd6, 0x01, 0x08, 0xe9, 0x10, 0x31, 0x03, 0x8c, 0x10, 0x30, 0x88, 0x6a, 0xcc, 0x00, - 0x39, 0x6a, 0x1c, 0x5c, + 0x39, 0x6a, 0x32, 0x5c, 0x08, 0x6a, 0x18, 0x01, 0xff, 0x6a, 0x1a, 0x09, 0xff, 0x6a, 0x1c, 0x09, 0x0d, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x9a, 0x5c, - 0x88, 0x6a, 0x8a, 0x5c, - 0x00, 0x65, 0x10, 0x5c, + 0x00, 0x65, 0xb0, 0x5c, + 0x88, 0x6a, 0xa0, 0x5c, + 0x00, 0x65, 0x26, 0x5c, 0xff, 0x6a, 0xc8, 0x08, 0x08, 0x39, 0x72, 0x18, 0x00, 0x3a, 0x74, 0x20, - 0x01, 0x0c, 0xda, 0x79, + 0x01, 0x0c, 0xdc, 0x79, 0x10, 0x0c, 0x7a, 0x79, 0xff, 0x35, 0x26, 0x09, - 0x04, 0x0b, 0xe0, 0x69, - 0x00, 0x65, 0xfa, 0x59, + 0x04, 0x0b, 0xe2, 0x69, + 0x00, 0x65, 0xfc, 0x59, 0x03, 0x08, 0x52, 0x31, 0xff, 0x38, 0x50, 0x09, 0xff, 0x08, 0x52, 0x09, @@ -251,275 +252,285 @@ 0xff, 0x0a, 0x56, 0x09, 0xff, 0x38, 0x50, 0x09, 0x00, 0x65, 0x22, 0x41, - 0x00, 0x65, 0xfa, 0x59, + 0x00, 0x65, 0xfc, 0x59, 0x7f, 0x02, 0x04, 0x08, 0xe1, 0x6a, 0x22, 0x01, 0x00, 0x65, 0x22, 0x41, - 0x04, 0x93, 0x10, 0x6a, + 0x04, 0x93, 0x12, 0x6a, 0xdf, 0x93, 0x26, 0x09, - 0x20, 0x93, 0xfe, 0x69, + 0x20, 0x93, 0x00, 0x6a, 0x02, 0x93, 0x26, 0x01, - 0x01, 0x94, 0x00, 0x7a, - 0x01, 0x94, 0x00, 0x7a, - 0x01, 0x94, 0x00, 0x7a, - 0x01, 0x94, 0x00, 0x7a, - 0x01, 0x94, 0x00, 0x7a, - 0x01, 0x94, 0x00, 0x7a, - 0x10, 0x94, 0x0e, 0x6a, + 0x01, 0x94, 0x02, 0x7a, + 0x01, 0x94, 0x02, 0x7a, + 0x01, 0x94, 0x02, 0x7a, + 0x01, 0x94, 0x02, 0x7a, + 0x01, 0x94, 0x02, 0x7a, + 0x01, 0x94, 0x02, 0x7a, + 0x10, 0x94, 0x10, 0x6a, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x12, 0x6a, + 0x08, 0x93, 0x14, 0x6a, 0xdf, 0x93, 0x26, 0x09, - 0x20, 0x93, 0x16, 0x6a, + 0x20, 0x93, 0x18, 0x6a, 0x03, 0x08, 0x52, 0x31, 0xff, 0x38, 0x50, 0x09, 0x12, 0x01, 0x02, 0x00, 0xff, 0x6a, 0xd4, 0x0c, - 0x00, 0x65, 0x78, 0x5b, + 0x00, 0x65, 0x8e, 0x5b, 0x05, 0xb4, 0x10, 0x31, 0x02, 0x6a, 0x1a, 0x31, 0x03, 0x8c, 0x10, 0x30, 0x88, 0x6a, 0xcc, 0x00, - 0xb4, 0x6a, 0x1a, 0x5c, + 0xb4, 0x6a, 0x30, 0x5c, 0xff, 0x6a, 0x1a, 0x09, 0xff, 0x6a, 0x1c, 0x09, - 0x00, 0x65, 0x10, 0x5c, - 0x3d, 0x6a, 0x60, 0x5b, + 0x00, 0x65, 0x26, 0x5c, + 0x3d, 0x6a, 0x76, 0x5b, 0xac, 0x6a, 0x26, 0x01, - 0x04, 0x0b, 0x36, 0x6a, - 0x01, 0x0b, 0x3c, 0x6a, - 0x10, 0x0c, 0x38, 0x7a, + 0x04, 0x0b, 0x38, 0x6a, + 0x04, 0x0b, 0x3e, 0x6a, + 0x10, 0x0c, 0x3a, 0x7a, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x3e, 0x6a, + 0x08, 0x93, 0x40, 0x6a, 0xdf, 0x93, 0x26, 0x09, - 0x20, 0x93, 0x42, 0x6a, + 0x20, 0x93, 0x44, 0x6a, 0x12, 0x01, 0x02, 0x00, 0x00, 0x65, 0x22, 0x41, - 0x00, 0x65, 0x78, 0x5b, + 0x00, 0x65, 0x8e, 0x5b, 0xff, 0x06, 0x44, 0x09, 0x00, 0x65, 0x22, 0x41, 0x10, 0x3d, 0x06, 0x00, 0xff, 0x34, 0xca, 0x08, - 0x80, 0x65, 0x74, 0x62, + 0x80, 0x65, 0x76, 0x62, 0x0f, 0xa1, 0xca, 0x08, 0x07, 0xa1, 0xca, 0x08, 0x40, 0xa0, 0xc8, 0x08, 0x00, 0x65, 0xca, 0x00, 0x80, 0x65, 0xca, 0x00, - 0x80, 0xa0, 0x64, 0x7a, + 0x80, 0xa0, 0x66, 0x7a, 0xff, 0x65, 0x0c, 0x08, - 0x00, 0x65, 0x76, 0x42, - 0x20, 0xa0, 0x7c, 0x7a, + 0x00, 0x65, 0x78, 0x42, + 0x20, 0xa0, 0x7e, 0x7a, 0xff, 0x65, 0x0c, 0x08, - 0x00, 0x65, 0x08, 0x5c, - 0xa0, 0x3d, 0x84, 0x62, + 0x00, 0x65, 0x1e, 0x5c, + 0xa0, 0x3d, 0x86, 0x62, 0x23, 0xa0, 0x0c, 0x08, - 0x00, 0x65, 0x08, 0x5c, - 0xa0, 0x3d, 0x84, 0x62, - 0x00, 0xb9, 0x7c, 0x42, - 0xff, 0x65, 0x7c, 0x62, + 0x00, 0x65, 0x1e, 0x5c, + 0xa0, 0x3d, 0x86, 0x62, + 0x00, 0xb9, 0x7e, 0x42, + 0xff, 0x65, 0x7e, 0x62, 0xa1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, - 0x10, 0x51, 0x84, 0x72, + 0x10, 0x51, 0x86, 0x72, 0x40, 0x6a, 0x18, 0x00, 0xff, 0x65, 0x0c, 0x08, - 0x00, 0x65, 0x08, 0x5c, - 0xa0, 0x3d, 0x4e, 0x72, + 0x00, 0x65, 0x1e, 0x5c, + 0xa0, 0x3d, 0x50, 0x72, 0x40, 0x6a, 0x18, 0x00, 0xff, 0x34, 0xa6, 0x08, - 0x80, 0x34, 0x8c, 0x62, + 0x80, 0x34, 0x8e, 0x62, 0x7f, 0xa0, 0x40, 0x09, 0x08, 0x6a, 0x68, 0x00, 0x00, 0x65, 0x22, 0x41, - 0x64, 0x6a, 0x50, 0x5b, - 0x80, 0x64, 0x00, 0x6b, - 0x04, 0x64, 0xe2, 0x72, - 0x02, 0x64, 0xe8, 0x72, - 0x00, 0x6a, 0xaa, 0x72, - 0x03, 0x64, 0xfc, 0x72, - 0x01, 0x64, 0xde, 0x72, - 0x07, 0x64, 0x3e, 0x73, - 0x08, 0x64, 0xa6, 0x72, + 0x64, 0x6a, 0x66, 0x5b, + 0x80, 0x64, 0x04, 0x6b, + 0x04, 0x64, 0xe6, 0x72, + 0x02, 0x64, 0xec, 0x72, + 0x00, 0x6a, 0xae, 0x72, + 0x03, 0x64, 0x00, 0x73, + 0x01, 0x64, 0xe2, 0x72, + 0x07, 0x64, 0x42, 0x73, + 0x08, 0x64, 0xaa, 0x72, + 0x23, 0x64, 0x46, 0x73, 0x11, 0x6a, 0x22, 0x01, - 0x07, 0x6a, 0x42, 0x5b, + 0x07, 0x6a, 0x58, 0x5b, 0xff, 0x06, 0xd4, 0x08, 0x00, 0x65, 0x22, 0x41, - 0xff, 0xa8, 0xae, 0x6a, - 0xff, 0xa2, 0xc6, 0x7a, + 0xff, 0xa8, 0xb2, 0x6a, + 0xff, 0xa2, 0xca, 0x7a, 0x01, 0x6a, 0x6a, 0x00, - 0x00, 0xb9, 0x34, 0x5c, - 0xff, 0xa2, 0xc6, 0x7a, + 0x00, 0xb9, 0x4a, 0x5c, + 0xff, 0xa2, 0xca, 0x7a, 0x71, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, - 0x40, 0x51, 0xc6, 0x62, + 0x40, 0x51, 0xca, 0x62, 0x0d, 0x6a, 0x6a, 0x00, - 0x00, 0xb9, 0x34, 0x5c, + 0x00, 0xb9, 0x4a, 0x5c, 0xff, 0x3e, 0x74, 0x09, 0xff, 0x90, 0x7c, 0x08, 0x00, 0x65, 0x50, 0x58, 0x00, 0x65, 0x34, 0x41, - 0x20, 0xa0, 0xce, 0x6a, + 0x20, 0xa0, 0xd2, 0x6a, 0xff, 0x37, 0xc8, 0x08, - 0x00, 0x6a, 0xde, 0x5b, - 0xff, 0x6a, 0xf4, 0x5b, + 0x00, 0x6a, 0xf4, 0x5b, + 0xff, 0x6a, 0x0a, 0x5c, 0xff, 0xf8, 0xc8, 0x08, 0xff, 0x4f, 0xc8, 0x08, - 0x01, 0x6a, 0xde, 0x5b, - 0x00, 0xb9, 0xf4, 0x5b, + 0x01, 0x6a, 0xf4, 0x5b, + 0x00, 0xb9, 0x0a, 0x5c, 0x01, 0x4f, 0x9e, 0x18, 0x02, 0x6a, 0x22, 0x01, - 0x00, 0x65, 0xa2, 0x5c, + 0x00, 0x65, 0xb8, 0x5c, 0x00, 0x65, 0x34, 0x41, 0x41, 0x6a, 0x22, 0x01, 0x00, 0x65, 0x22, 0x41, 0x04, 0xa0, 0x40, 0x01, - 0x00, 0x65, 0xba, 0x5c, + 0x00, 0x65, 0xd0, 0x5c, 0x00, 0x65, 0x34, 0x41, - 0x10, 0x36, 0xa6, 0x7a, + 0x10, 0x36, 0xaa, 0x7a, 0x05, 0x38, 0x46, 0x31, 0x04, 0x14, 0x58, 0x31, 0x03, 0xa9, 0x60, 0x31, 0xa3, 0x6a, 0xcc, 0x00, - 0x38, 0x6a, 0x1a, 0x5c, + 0x38, 0x6a, 0x30, 0x5c, 0xac, 0x6a, 0xcc, 0x00, - 0x14, 0x6a, 0x1c, 0x5c, - 0xa9, 0x6a, 0x1e, 0x5c, - 0x00, 0x65, 0xa6, 0x42, + 0x14, 0x6a, 0x32, 0x5c, + 0xa9, 0x6a, 0x34, 0x5c, + 0x00, 0x65, 0xaa, 0x42, 0xef, 0x36, 0x6c, 0x08, - 0x00, 0x65, 0xa6, 0x42, + 0x00, 0x65, 0xaa, 0x42, 0x0f, 0x64, 0xc8, 0x08, 0x07, 0x64, 0xc8, 0x08, 0x00, 0x37, 0x6e, 0x00, 0xff, 0x6a, 0xa4, 0x00, - 0x00, 0x65, 0xae, 0x5b, - 0xff, 0x51, 0x12, 0x73, - 0x20, 0x36, 0x1c, 0x7b, - 0x00, 0x90, 0x9c, 0x5b, - 0x00, 0x65, 0x1e, 0x43, + 0x00, 0x65, 0xc4, 0x5b, + 0xff, 0x51, 0x16, 0x73, + 0x20, 0x36, 0x20, 0x7b, + 0x00, 0x90, 0xb2, 0x5b, + 0x00, 0x65, 0x22, 0x43, 0xff, 0x06, 0xd4, 0x08, - 0x00, 0x65, 0x08, 0x5c, - 0xe0, 0x3d, 0x38, 0x63, - 0x20, 0x12, 0x38, 0x63, - 0x51, 0x6a, 0x46, 0x5b, - 0x00, 0x65, 0x96, 0x5b, + 0x00, 0x65, 0x1e, 0x5c, + 0xe0, 0x3d, 0x3c, 0x63, + 0x20, 0x12, 0x3c, 0x63, + 0x51, 0x6a, 0x5c, 0x5b, + 0x00, 0x65, 0xac, 0x5b, 0xff, 0x37, 0xc8, 0x08, - 0x00, 0xa1, 0x30, 0x63, - 0x04, 0xa0, 0x30, 0x7b, + 0x00, 0xa1, 0x34, 0x63, + 0x04, 0xa0, 0x34, 0x7b, 0xfb, 0xa0, 0x40, 0x09, 0x80, 0x36, 0x6c, 0x00, - 0x80, 0xa0, 0xa6, 0x7a, + 0x80, 0xa0, 0xaa, 0x7a, 0x7f, 0xa0, 0x40, 0x09, - 0xff, 0x6a, 0x42, 0x5b, - 0x00, 0x65, 0xa6, 0x42, - 0x04, 0xa0, 0x36, 0x7b, - 0x00, 0x65, 0xba, 0x5c, - 0x00, 0x65, 0x38, 0x43, - 0x00, 0x65, 0xa2, 0x5c, + 0xff, 0x6a, 0x58, 0x5b, + 0x00, 0x65, 0xaa, 0x42, + 0x04, 0xa0, 0x3a, 0x7b, + 0x00, 0x65, 0xd0, 0x5c, + 0x00, 0x65, 0x3c, 0x43, + 0x00, 0x65, 0xb8, 0x5c, 0x31, 0x6a, 0x22, 0x01, - 0x0c, 0x6a, 0x42, 0x5b, - 0x00, 0x65, 0xa6, 0x42, + 0x0c, 0x6a, 0x58, 0x5b, + 0x00, 0x65, 0xaa, 0x42, 0x61, 0x6a, 0x22, 0x01, - 0x00, 0x65, 0xa6, 0x42, + 0x00, 0x65, 0xaa, 0x42, + 0x51, 0x6a, 0x5c, 0x5b, + 0x20, 0x0d, 0xaa, 0x6a, + 0xff, 0xa8, 0x54, 0x6b, + 0xff, 0xa9, 0x54, 0x6b, + 0xff, 0xaa, 0x54, 0x6b, + 0xff, 0xab, 0x54, 0x6b, + 0x00, 0x65, 0xaa, 0x42, + 0x51, 0x6a, 0x22, 0x01, + 0x00, 0x65, 0xaa, 0x42, 0x10, 0x3d, 0x06, 0x00, 0xff, 0x65, 0x68, 0x0c, 0xff, 0x06, 0xd4, 0x08, - 0x01, 0x0c, 0x48, 0x7b, - 0x04, 0x0c, 0x48, 0x6b, + 0x01, 0x0c, 0x5e, 0x7b, + 0x04, 0x0c, 0x60, 0x6b, 0xe0, 0x03, 0x7a, 0x08, - 0xe0, 0x3d, 0x5c, 0x63, + 0xe0, 0x3d, 0x72, 0x63, 0xff, 0x65, 0xcc, 0x08, 0xff, 0x12, 0xda, 0x0c, 0xff, 0x06, 0xd4, 0x0c, 0xff, 0x65, 0x0c, 0x08, - 0x02, 0x0b, 0x58, 0x7b, + 0x02, 0x0b, 0x6e, 0x7b, 0xff, 0x6a, 0xd4, 0x0c, 0xd1, 0x6a, 0x22, 0x01, 0x00, 0x65, 0x22, 0x41, 0xff, 0x65, 0x26, 0x09, - 0x01, 0x0b, 0x70, 0x6b, - 0x10, 0x0c, 0x62, 0x7b, - 0x04, 0x0b, 0x6a, 0x6b, + 0x01, 0x0b, 0x86, 0x6b, + 0x10, 0x0c, 0x78, 0x7b, + 0x04, 0x0b, 0x80, 0x6b, 0xff, 0x6a, 0xca, 0x08, - 0x04, 0x93, 0x6e, 0x6b, - 0x01, 0x94, 0x6c, 0x7b, - 0x10, 0x94, 0x6e, 0x6b, + 0x04, 0x93, 0x84, 0x6b, + 0x01, 0x94, 0x82, 0x7b, + 0x10, 0x94, 0x84, 0x6b, 0xc7, 0x93, 0x26, 0x09, 0xff, 0x99, 0xd4, 0x08, - 0x38, 0x93, 0x72, 0x6b, + 0x38, 0x93, 0x88, 0x6b, 0xff, 0x6a, 0xd4, 0x0c, - 0x80, 0x36, 0x76, 0x6b, + 0x80, 0x36, 0x8c, 0x6b, 0x21, 0x6a, 0x22, 0x05, 0xff, 0x65, 0x20, 0x09, - 0xff, 0x51, 0x84, 0x63, + 0xff, 0x51, 0x9a, 0x63, 0xff, 0x37, 0xc8, 0x08, - 0xa1, 0x6a, 0x90, 0x43, + 0xa1, 0x6a, 0xa6, 0x43, 0xff, 0x51, 0xc8, 0x08, - 0xb9, 0x6a, 0x90, 0x43, + 0xb9, 0x6a, 0xa6, 0x43, 0xff, 0x90, 0xa4, 0x08, - 0xff, 0xba, 0x94, 0x73, + 0xff, 0xba, 0xaa, 0x73, 0xff, 0xba, 0x20, 0x09, 0xff, 0x65, 0xca, 0x18, - 0x00, 0x6c, 0x88, 0x63, + 0x00, 0x6c, 0x9e, 0x63, 0xff, 0x90, 0xca, 0x0c, 0xff, 0x6a, 0xca, 0x04, - 0x20, 0x36, 0xa8, 0x7b, - 0x00, 0x90, 0x7c, 0x5b, - 0xff, 0x65, 0xa8, 0x73, - 0xff, 0x52, 0xa6, 0x73, + 0x20, 0x36, 0xbe, 0x7b, + 0x00, 0x90, 0x92, 0x5b, + 0xff, 0x65, 0xbe, 0x73, + 0xff, 0x52, 0xbc, 0x73, 0xff, 0xba, 0xcc, 0x08, 0xff, 0x52, 0x20, 0x09, 0xff, 0x66, 0x74, 0x09, 0xff, 0x65, 0x20, 0x0d, 0xff, 0xba, 0x7e, 0x0c, - 0x00, 0x6a, 0xa8, 0x5c, + 0x00, 0x6a, 0xbe, 0x5c, 0x0d, 0x6a, 0x6a, 0x00, - 0x00, 0x51, 0x34, 0x44, - 0xff, 0x3f, 0x02, 0x74, + 0x00, 0x51, 0x4a, 0x44, + 0xff, 0x3f, 0x18, 0x74, 0xff, 0x6a, 0xa2, 0x00, - 0x00, 0x3f, 0x7c, 0x5b, - 0xff, 0x65, 0x02, 0x74, + 0x00, 0x3f, 0x92, 0x5b, + 0xff, 0x65, 0x18, 0x74, 0x20, 0x36, 0x6c, 0x00, - 0x20, 0xa0, 0xbc, 0x6b, + 0x20, 0xa0, 0xd2, 0x6b, 0xff, 0xb9, 0xa2, 0x0c, 0xff, 0x6a, 0xa2, 0x04, 0xff, 0x65, 0xa4, 0x08, 0xe0, 0x6a, 0xcc, 0x00, - 0x45, 0x6a, 0x28, 0x5c, + 0x45, 0x6a, 0x3e, 0x5c, 0x01, 0x6a, 0xd0, 0x01, 0x09, 0x6a, 0xd6, 0x01, - 0x80, 0xeb, 0xc8, 0x7b, + 0x80, 0xeb, 0xde, 0x7b, 0x01, 0x6a, 0xd6, 0x01, 0x01, 0xe9, 0xa4, 0x34, 0x88, 0x6a, 0xcc, 0x00, - 0x45, 0x6a, 0x28, 0x5c, + 0x45, 0x6a, 0x3e, 0x5c, 0x01, 0x6a, 0x18, 0x01, 0xff, 0x6a, 0x1a, 0x09, 0xff, 0x6a, 0x1c, 0x09, 0x0d, 0x6a, 0x26, 0x01, - 0x00, 0x65, 0x9a, 0x5c, + 0x00, 0x65, 0xb0, 0x5c, 0xff, 0x99, 0xa4, 0x0c, 0xff, 0x65, 0xa4, 0x08, 0xe0, 0x6a, 0xcc, 0x00, - 0x45, 0x6a, 0x28, 0x5c, + 0x45, 0x6a, 0x3e, 0x5c, 0x01, 0x6a, 0xd0, 0x01, 0x01, 0x6a, 0xdc, 0x05, 0x88, 0x6a, 0xcc, 0x00, - 0x45, 0x6a, 0x28, 0x5c, + 0x45, 0x6a, 0x3e, 0x5c, 0x01, 0x6a, 0x18, 0x01, 0xff, 0x6a, 0x1a, 0x09, 0xff, 0x6a, 0x1c, 0x09, 0x01, 0x6a, 0x26, 0x05, 0x01, 0x65, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0xf8, 0x7b, + 0x80, 0xee, 0x0e, 0x7c, 0xff, 0x6a, 0xdc, 0x0d, 0xff, 0x65, 0x32, 0x09, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x9a, 0x44, + 0x00, 0x65, 0xb0, 0x44, 0xff, 0x37, 0xc8, 0x08, - 0x00, 0x6a, 0xbe, 0x5b, + 0x00, 0x6a, 0xd4, 0x5b, 0xff, 0x52, 0xa2, 0x0c, - 0x01, 0x0c, 0x08, 0x7c, - 0x04, 0x0c, 0x08, 0x6c, + 0x01, 0x0c, 0x1e, 0x7c, + 0x04, 0x0c, 0x1e, 0x6c, 0xe0, 0x03, 0x06, 0x08, 0xe0, 0x03, 0x7a, 0x0c, 0xff, 0x8c, 0x10, 0x08, @@ -542,29 +553,29 @@ 0x00, 0x6c, 0xda, 0x24, 0xff, 0x65, 0xc8, 0x08, 0xe0, 0x6a, 0xcc, 0x00, - 0x41, 0x6a, 0x24, 0x5c, + 0x41, 0x6a, 0x3a, 0x5c, 0xff, 0x90, 0xe2, 0x09, 0x20, 0x6a, 0xd0, 0x01, - 0x04, 0x35, 0x46, 0x7c, + 0x04, 0x35, 0x5c, 0x7c, 0x1d, 0x6a, 0xdc, 0x01, - 0xdc, 0xee, 0x42, 0x64, - 0x00, 0x65, 0x52, 0x44, + 0xdc, 0xee, 0x58, 0x64, + 0x00, 0x65, 0x68, 0x44, 0x01, 0x6a, 0xdc, 0x01, 0x20, 0xa0, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0x4c, 0x7c, + 0x80, 0xee, 0x62, 0x7c, 0x19, 0x6a, 0xdc, 0x01, - 0xd8, 0xee, 0x50, 0x64, + 0xd8, 0xee, 0x66, 0x64, 0xff, 0x6a, 0xdc, 0x09, - 0x18, 0xee, 0x54, 0x6c, + 0x18, 0xee, 0x6a, 0x6c, 0xff, 0x6a, 0xd4, 0x0c, 0x88, 0x6a, 0xcc, 0x00, - 0x41, 0x6a, 0x24, 0x5c, + 0x41, 0x6a, 0x3a, 0x5c, 0x20, 0x6a, 0x18, 0x01, 0xff, 0x6a, 0x1a, 0x09, 0xff, 0x6a, 0x1c, 0x09, 0xff, 0x35, 0x26, 0x09, - 0x04, 0x35, 0x7e, 0x6c, + 0x04, 0x35, 0x94, 0x6c, 0xa0, 0x6a, 0xca, 0x00, 0x20, 0x65, 0xc8, 0x18, 0xff, 0x6c, 0x32, 0x09, @@ -575,14 +586,14 @@ 0xff, 0x6c, 0x32, 0x09, 0xff, 0x6c, 0x32, 0x09, 0xff, 0x6c, 0x32, 0x09, - 0x00, 0x65, 0x6a, 0x64, + 0x00, 0x65, 0x80, 0x64, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x9a, 0x5c, - 0x04, 0x35, 0x76, 0x7b, - 0xa0, 0x6a, 0x8a, 0x5c, - 0x00, 0x65, 0x8c, 0x5c, - 0x00, 0x65, 0x8c, 0x5c, - 0x00, 0x65, 0x8c, 0x44, + 0x00, 0x65, 0xb0, 0x5c, + 0x04, 0x35, 0x8c, 0x7b, + 0xa0, 0x6a, 0xa0, 0x5c, + 0x00, 0x65, 0xa2, 0x5c, + 0x00, 0x65, 0xa2, 0x5c, + 0x00, 0x65, 0xa2, 0x44, 0xff, 0x65, 0xcc, 0x08, 0xff, 0x99, 0xda, 0x08, 0xff, 0x99, 0xda, 0x08, @@ -591,19 +602,19 @@ 0xff, 0x99, 0xda, 0x08, 0xff, 0x99, 0xda, 0x08, 0xff, 0x99, 0xda, 0x0c, - 0x08, 0x94, 0x9a, 0x7c, + 0x08, 0x94, 0xb0, 0x7c, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x9e, 0x6c, + 0x08, 0x93, 0xb4, 0x6c, 0xff, 0x6a, 0xd4, 0x0c, 0xff, 0x40, 0x74, 0x09, 0xff, 0x90, 0x80, 0x08, 0xff, 0x6a, 0x72, 0x05, - 0xff, 0x40, 0xb6, 0x64, - 0xff, 0x3f, 0xae, 0x64, + 0xff, 0x40, 0xcc, 0x64, + 0xff, 0x3f, 0xc4, 0x64, 0xff, 0x6a, 0xca, 0x04, 0xff, 0x3f, 0x20, 0x09, 0x01, 0x6a, 0x6a, 0x00, - 0x00, 0xb9, 0x34, 0x5c, + 0x00, 0xb9, 0x4a, 0x5c, 0xff, 0xba, 0x7e, 0x0c, 0xff, 0x40, 0x20, 0x09, 0xff, 0xba, 0x80, 0x0c, @@ -761,49 +772,52 @@ { aic7xxx_patch2_func, 192, 2, 3 }, { aic7xxx_patch8_func, 192, 1, 1 }, { aic7xxx_patch0_func, 194, 3, 1 }, - { aic7xxx_patch10_func, 197, 2, 1 }, - { aic7xxx_patch8_func, 199, 7, 2 }, - { aic7xxx_patch0_func, 206, 1, 1 }, - { aic7xxx_patch2_func, 211, 14, 3 }, - { aic7xxx_patch10_func, 224, 1, 1 }, - { aic7xxx_patch0_func, 225, 9, 1 }, - { aic7xxx_patch8_func, 239, 2, 1 }, - { aic7xxx_patch8_func, 241, 1, 1 }, - { aic7xxx_patch10_func, 242, 6, 3 }, - { aic7xxx_patch2_func, 242, 2, 2 }, - { aic7xxx_patch0_func, 244, 4, 1 }, - { aic7xxx_patch8_func, 249, 1, 1 }, - { aic7xxx_patch8_func, 253, 19, 1 }, - { aic7xxx_patch2_func, 273, 3, 3 }, - { aic7xxx_patch10_func, 275, 1, 1 }, - { aic7xxx_patch0_func, 276, 5, 1 }, - { aic7xxx_patch10_func, 281, 1, 2 }, - { aic7xxx_patch0_func, 282, 9, 1 }, - { aic7xxx_patch11_func, 298, 1, 2 }, - { aic7xxx_patch0_func, 299, 1, 1 }, - { aic7xxx_patch5_func, 359, 1, 2 }, - { aic7xxx_patch0_func, 360, 1, 1 }, - { aic7xxx_patch3_func, 363, 1, 1 }, - { aic7xxx_patch2_func, 373, 3, 2 }, - { aic7xxx_patch0_func, 376, 5, 1 }, - { aic7xxx_patch11_func, 384, 1, 2 }, - { aic7xxx_patch0_func, 385, 1, 1 }, - { aic7xxx_patch6_func, 390, 1, 1 }, - { aic7xxx_patch1_func, 427, 3, 1 }, - { aic7xxx_patch10_func, 432, 11, 1 }, - { aic7xxx_patch2_func, 480, 7, 2 }, - { aic7xxx_patch0_func, 487, 8, 1 }, - { aic7xxx_patch2_func, 496, 4, 2 }, - { aic7xxx_patch0_func, 500, 6, 1 }, - { aic7xxx_patch2_func, 506, 4, 2 }, - { aic7xxx_patch0_func, 510, 3, 1 }, - { aic7xxx_patch12_func, 520, 10, 1 }, - { aic7xxx_patch2_func, 539, 17, 4 }, - { aic7xxx_patch13_func, 547, 4, 2 }, - { aic7xxx_patch0_func, 551, 2, 1 }, - { aic7xxx_patch0_func, 556, 33, 1 }, - { aic7xxx_patch12_func, 589, 4, 1 }, - { aic7xxx_patch6_func, 593, 2, 1 }, - { aic7xxx_patch6_func, 596, 9, 1 }, + { aic7xxx_patch10_func, 198, 1, 2 }, + { aic7xxx_patch0_func, 199, 1, 1 }, + { aic7xxx_patch8_func, 200, 7, 2 }, + { aic7xxx_patch0_func, 207, 1, 1 }, + { aic7xxx_patch2_func, 212, 14, 3 }, + { aic7xxx_patch10_func, 225, 1, 1 }, + { aic7xxx_patch0_func, 226, 9, 1 }, + { aic7xxx_patch8_func, 240, 2, 1 }, + { aic7xxx_patch8_func, 242, 1, 1 }, + { aic7xxx_patch10_func, 243, 6, 3 }, + { aic7xxx_patch2_func, 243, 2, 2 }, + { aic7xxx_patch0_func, 245, 4, 1 }, + { aic7xxx_patch8_func, 250, 1, 1 }, + { aic7xxx_patch8_func, 254, 19, 1 }, + { aic7xxx_patch2_func, 274, 3, 3 }, + { aic7xxx_patch10_func, 276, 1, 1 }, + { aic7xxx_patch0_func, 277, 5, 1 }, + { aic7xxx_patch10_func, 282, 1, 2 }, + { aic7xxx_patch0_func, 283, 9, 1 }, + { aic7xxx_patch11_func, 299, 1, 2 }, + { aic7xxx_patch0_func, 300, 1, 1 }, + { aic7xxx_patch5_func, 361, 1, 2 }, + { aic7xxx_patch0_func, 362, 1, 1 }, + { aic7xxx_patch3_func, 365, 1, 1 }, + { aic7xxx_patch2_func, 375, 3, 2 }, + { aic7xxx_patch0_func, 378, 5, 1 }, + { aic7xxx_patch11_func, 386, 1, 2 }, + { aic7xxx_patch0_func, 387, 1, 1 }, + { aic7xxx_patch6_func, 392, 1, 1 }, + { aic7xxx_patch8_func, 420, 1, 2 }, + { aic7xxx_patch0_func, 421, 5, 1 }, + { aic7xxx_patch1_func, 438, 3, 1 }, + { aic7xxx_patch10_func, 443, 11, 1 }, + { aic7xxx_patch2_func, 491, 7, 2 }, + { aic7xxx_patch0_func, 498, 8, 1 }, + { aic7xxx_patch2_func, 507, 4, 2 }, + { aic7xxx_patch0_func, 511, 6, 1 }, + { aic7xxx_patch2_func, 517, 4, 2 }, + { aic7xxx_patch0_func, 521, 3, 1 }, + { aic7xxx_patch12_func, 531, 10, 1 }, + { aic7xxx_patch2_func, 550, 17, 4 }, + { aic7xxx_patch13_func, 558, 4, 2 }, + { aic7xxx_patch0_func, 562, 2, 1 }, + { aic7xxx_patch0_func, 567, 33, 1 }, + { aic7xxx_patch12_func, 600, 4, 1 }, + { aic7xxx_patch6_func, 604, 2, 1 }, + { aic7xxx_patch6_func, 607, 9, 1 }, }; diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c --- v2.3.43/linux/drivers/scsi/sd.c Thu Feb 10 17:11:13 2000 +++ linux/drivers/scsi/sd.c Sat Feb 12 09:48:40 2000 @@ -720,7 +720,7 @@ SCpnt->sense_buffer[2] = 0; scsi_wait_cmd(SCpnt, (void *) cmd, (void *) buffer, - 512, SD_TIMEOUT, MAX_RETRIES); + 0/*512*/, SD_TIMEOUT, MAX_RETRIES); } spintime = 1; spintime_value = jiffies; diff -u --recursive --new-file v2.3.43/linux/drivers/scsi/st.c linux/drivers/scsi/st.c --- v2.3.43/linux/drivers/scsi/st.c Thu Feb 10 17:11:13 2000 +++ linux/drivers/scsi/st.c Fri Feb 11 12:52:37 2000 @@ -11,7 +11,7 @@ Copyright 1992 - 2000 Kai Makisara email Kai.Makisara@metla.fi - Last modified: Tue Jan 4 21:43:17 2000 by makisara@kai.makisara.local + Last modified: Fri Feb 11 19:43:57 2000 by makisara@kai.makisara.local Some small formal changes - aeb, 950809 */ @@ -66,15 +66,15 @@ static int write_threshold_kbs = 0; static int max_buffers = (-1); static int max_sg_segs = 0; -#ifdef MODULE + MODULE_AUTHOR("Kai Makisara"); MODULE_DESCRIPTION("SCSI Tape Driver"); MODULE_PARM(buffer_kbs, "i"); MODULE_PARM(write_threshold_kbs, "i"); MODULE_PARM(max_buffers, "i"); MODULE_PARM(max_sg_segs, "i"); -#else +#ifndef MODULE static struct st_dev_parm { char *name; int *val; @@ -92,7 +92,6 @@ "max_sg_segs", &max_sg_segs } }; - #endif @@ -380,7 +379,7 @@ static int cross_eof(Scsi_Tape * STp, int forward) { Scsi_Cmnd *SCpnt; - unsigned char cmd[10]; + unsigned char cmd[MAX_COMMAND_SIZE]; cmd[0] = SPACE; cmd[1] = 0x01; /* Space FileMarks */ @@ -414,7 +413,7 @@ { int offset, transfer, blks; int result; - unsigned char cmd[10]; + unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; ST_partstat *STps; @@ -443,7 +442,7 @@ memset((STp->buffer)->b_data + offset, 0, transfer - offset); - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = WRITE_6; cmd[1] = 1; blks = transfer / STp->block_size; @@ -582,7 +581,8 @@ { unsigned short flags; int i, need_dma_buffer, new_session = FALSE; - unsigned char cmd[10]; + int retval; + unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp; ST_mode *STm; @@ -601,8 +601,14 @@ DEB( printk(ST_DEB_MSG "st%d: Device already in use.\n", dev); ) return (-EBUSY); } + STp->in_use = 1; STp->rew_at_close = (MINOR(inode->i_rdev) & 0x80) == 0; + if (scsi_tapes[dev].device->host->hostt->module) + __MOD_INC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); + if (st_template.module) + __MOD_INC_USE_COUNT(st_template.module); + if (mode != STp->current_mode) { DEBC(printk(ST_DEB_MSG "st%d: Mode change from %d to %d.\n", dev, STp->current_mode, mode)); @@ -621,7 +627,8 @@ STp->buffer = new_tape_buffer(FALSE, need_dma_buffer); if (STp->buffer == NULL) { printk(KERN_WARNING "st%d: Can't allocate tape buffer.\n", dev); - return (-EBUSY); + retval = (-EBUSY); + goto err_out; } } else STp->buffer = st_buffers[i]; @@ -651,22 +658,14 @@ STp->recover_count = 0; DEB( STp->nbr_waits = STp->nbr_finished = 0; ) - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_INC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_INC_USE_COUNT(st_template.module); - - memset((void *) &cmd[0], 0, 10); + memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = TEST_UNIT_READY; SCpnt = st_do_scsi(NULL, STp, cmd, 0, STp->long_timeout, MAX_READY_RETRIES, TRUE); if (!SCpnt) { - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_DEC_USE_COUNT(st_template.module); - return (STp->buffer)->last_result_fatal; + retval = (STp->buffer)->last_result_fatal; + goto err_out; } if ((SCpnt->sense_buffer[0] & 0x70) == 0x70 && @@ -674,7 +673,7 @@ /* Flush the queued UNIT ATTENTION sense data */ for (i=0; i < 10; i++) { - memset((void *) &cmd[0], 0, 10); + memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = TEST_UNIT_READY; SCpnt = st_do_scsi(SCpnt, STp, cmd, 0, STp->long_timeout, MAX_READY_RETRIES, TRUE); @@ -716,14 +715,13 @@ STp->ps[0].drv_file = STp->ps[0].drv_block = (-1); STp->partition = STp->new_partition = 0; STp->door_locked = ST_UNLOCKED; - STp->in_use = 1; return 0; } if (STp->omit_blklims) STp->min_block = STp->max_block = (-1); else { - memset((void *) &cmd[0], 0, 10); + memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = READ_BLOCK_LIMITS; SCpnt = st_do_scsi(SCpnt, STp, cmd, 6, STp->timeout, MAX_READY_RETRIES, @@ -745,7 +743,7 @@ } } - memset((void *) &cmd[0], 0, 10); + memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = MODE_SENSE; cmd[4] = 12; @@ -780,13 +778,8 @@ printk(KERN_NOTICE "st%d: Blocksize %d too large for buffer.\n", dev, STp->block_size); scsi_release_command(SCpnt); - (STp->buffer)->in_use = 0; - STp->buffer = NULL; - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_DEC_USE_COUNT(st_template.module); - return (-EIO); + retval = (-EIO); + goto err_out; } STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0; } @@ -812,13 +805,8 @@ DEBC(printk(ST_DEB_MSG "st%d: Write protected\n", dev)); if ((flags & O_ACCMODE) == O_WRONLY || (flags & O_ACCMODE) == O_RDWR) { - (STp->buffer)->in_use = 0; - STp->buffer = NULL; - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_DEC_USE_COUNT(st_template.module); - return (-EROFS); + retval = (-EROFS); + goto err_out; } } @@ -829,13 +817,8 @@ DEBC(printk(ST_DEB_MSG "st%d: Updating partition number in status.\n", dev)); if ((STp->partition = find_partition(inode)) < 0) { - (STp->buffer)->in_use = 0; - STp->buffer = NULL; - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_DEC_USE_COUNT(st_template.module); - return STp->partition; + retval = STp->partition; + goto err_out; } STp->new_partition = STp->partition; STp->nbr_partitions = 1; /* This guess will be updated when necessary */ @@ -845,15 +828,8 @@ STp->density_changed = STp->blksize_changed = FALSE; STp->compression_changed = FALSE; if (!(STm->defaults_for_writes) && - (i = set_mode_densblk(inode, STp, STm)) < 0) { - (STp->buffer)->in_use = 0; - STp->buffer = NULL; - if (scsi_tapes[dev].device->host->hostt->module) - __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); - if (st_template.module) - __MOD_DEC_USE_COUNT(st_template.module); - return i; - } + (retval = set_mode_densblk(inode, STp, STm)) < 0) + goto err_out; if (STp->default_drvbuffer != 0xff) { if (st_int_ioctl(inode, MTSETDRVBUFFER, STp->default_drvbuffer)) @@ -862,9 +838,21 @@ dev, STp->default_drvbuffer); } } - STp->in_use = 1; return 0; + + err_out: + if (STp->buffer != NULL) { + (STp->buffer)->in_use = 0; + STp->buffer = NULL; + } + STp->in_use = 0; + if (scsi_tapes[dev].device->host->hostt->module) + __MOD_DEC_USE_COUNT(scsi_tapes[dev].device->host->hostt->module); + if (st_template.module) + __MOD_DEC_USE_COUNT(st_template.module); + return retval; + } @@ -872,7 +860,7 @@ static int scsi_tape_flush(struct file *filp) { int result = 0, result2; - static unsigned char cmd[10]; + static unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp; ST_mode *STm; @@ -890,59 +878,62 @@ STm = &(STp->modes[STp->current_mode]); STps = &(STp->ps[STp->partition]); + if (STps->rw == ST_WRITING && !(STp->device)->was_reset) { + result = flush_write_buffer(STp); + if (result != 0 && result != (-ENOSPC)) + goto out; + } + if (STp->can_partitions && - (result = update_partition(inode)) < 0) { + (result2 = update_partition(inode)) < 0) { DEBC(printk(ST_DEB_MSG "st%d: update_partition at close failed.\n", dev)); + if (result == 0) + result = result2; goto out; } if (STps->rw == ST_WRITING && !(STp->device)->was_reset) { - result = flush_write_buffer(STp); - DEBC(printk(ST_DEB_MSG "st%d: File length %ld bytes.\n", dev, (long) (filp->f_pos)); printk(ST_DEB_MSG "st%d: Async write waits %d, finished %d.\n", dev, STp->nbr_waits, STp->nbr_finished); ) - if (result == 0 || result == (-ENOSPC)) { + memset(cmd, 0, MAX_COMMAND_SIZE); + cmd[0] = WRITE_FILEMARKS; + cmd[4] = 1 + STp->two_fm; - memset(cmd, 0, 10); - cmd[0] = WRITE_FILEMARKS; - cmd[4] = 1 + STp->two_fm; - - SCpnt = st_do_scsi(NULL, STp, cmd, 0, STp->timeout, - MAX_WRITE_RETRIES, TRUE); - if (!SCpnt) { - result = (STp->buffer)->last_result_fatal; - goto out; - } + SCpnt = st_do_scsi(NULL, STp, cmd, 0, STp->timeout, + MAX_WRITE_RETRIES, TRUE); + if (!SCpnt) { + result = (STp->buffer)->last_result_fatal; + goto out; + } - if ((STp->buffer)->last_result_fatal != 0 && - ((SCpnt->sense_buffer[0] & 0x70) != 0x70 || - (SCpnt->sense_buffer[2] & 0x4f) != 0x40 || - ((SCpnt->sense_buffer[0] & 0x80) != 0 && - (SCpnt->sense_buffer[3] | SCpnt->sense_buffer[4] | - SCpnt->sense_buffer[5] | - SCpnt->sense_buffer[6]) == 0))) { - /* Filter out successful write at EOM */ - scsi_release_command(SCpnt); - SCpnt = NULL; - printk(KERN_ERR "st%d: Error on write filemark.\n", dev); - if (result == 0) - result = (-EIO); - } else { - scsi_release_command(SCpnt); - SCpnt = NULL; - if (STps->drv_file >= 0) - STps->drv_file++; - STps->drv_block = 0; - if (STp->two_fm) - cross_eof(STp, FALSE); - STps->eof = ST_FM; - } + if ((STp->buffer)->last_result_fatal != 0 && + ((SCpnt->sense_buffer[0] & 0x70) != 0x70 || + (SCpnt->sense_buffer[2] & 0x4f) != 0x40 || + ((SCpnt->sense_buffer[0] & 0x80) != 0 && + (SCpnt->sense_buffer[3] | SCpnt->sense_buffer[4] | + SCpnt->sense_buffer[5] | + SCpnt->sense_buffer[6]) == 0))) { + /* Filter out successful write at EOM */ + scsi_release_command(SCpnt); + SCpnt = NULL; + printk(KERN_ERR "st%d: Error on write filemark.\n", dev); + if (result == 0) + result = (-EIO); + } else { + scsi_release_command(SCpnt); + SCpnt = NULL; + if (STps->drv_file >= 0) + STps->drv_file++; + STps->drv_block = 0; + if (STp->two_fm) + cross_eof(STp, FALSE); + STps->eof = ST_FM; } DEBC(printk(ST_DEB_MSG "st%d: Buffer flushed, %d EOF(s) written\n", @@ -1021,7 +1012,7 @@ ssize_t i, do_count, blks, retval, transfer; int write_threshold; int doing_write = 0; - static unsigned char cmd[10]; + static unsigned char cmd[MAX_COMMAND_SIZE]; const char *b_point; Scsi_Cmnd *SCpnt = NULL; Scsi_Tape *STp; @@ -1153,7 +1144,7 @@ total = count; - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = WRITE_6; cmd[1] = (STp->block_size != 0); @@ -1331,7 +1322,7 @@ static long read_tape(struct inode *inode, long count, Scsi_Cmnd ** aSCpnt) { int transfer, blks, bytes; - static unsigned char cmd[10]; + static unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp; ST_mode *STm; @@ -1348,7 +1339,7 @@ if (STps->eof == ST_FM_HIT) return 1; - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = READ_6; cmd[1] = (STp->block_size != 0); if (STp->block_size == 0) @@ -1836,14 +1827,14 @@ static int st_compression(Scsi_Tape * STp, int state) { int dev; - unsigned char cmd[10]; + unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt = NULL; if (STp->ready != ST_READY) return (-EIO); /* Read the current page contents */ - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = MODE_SENSE; cmd[1] = 8; cmd[2] = COMPRESSION_PAGE; @@ -1879,7 +1870,7 @@ else (STp->buffer)->b_data[MODE_HEADER_LENGTH + 2] &= ~DCE_MASK; - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = MODE_SELECT; cmd[1] = 0x10; cmd[4] = COMPRESSION_PAGE_LENGTH + MODE_HEADER_LENGTH; @@ -1913,7 +1904,7 @@ long ltmp; int i, ioctl_result; int chg_eof = TRUE; - unsigned char cmd[10]; + unsigned char cmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp; ST_partstat *STps; @@ -1933,7 +1924,7 @@ blkno = STps->drv_block; at_sm = STps->at_sm; - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); datalen = 0; switch (cmd_in) { case MTFSFM: @@ -2368,14 +2359,14 @@ Scsi_Tape *STp; int dev = TAPE_NR(inode->i_rdev); int result; - unsigned char scmd[10]; + unsigned char scmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; STp = &(scsi_tapes[dev]); if (STp->ready != ST_READY) return (-EIO); - memset(scmd, 0, 10); + memset(scmd, 0, MAX_COMMAND_SIZE); if ((STp->device)->scsi_level < SCSI_2) { scmd[0] = QFA_REQUEST_BLOCK; scmd[4] = 3; @@ -2432,7 +2423,7 @@ int result, p; unsigned int blk; int timeout; - unsigned char scmd[10]; + unsigned char scmd[MAX_COMMAND_SIZE]; Scsi_Cmnd *SCpnt; STp = &(scsi_tapes[dev]); @@ -2462,7 +2453,7 @@ } } - memset(scmd, 0, 10); + memset(scmd, 0, MAX_COMMAND_SIZE); if ((STp->device)->scsi_level < SCSI_2) { scmd[0] = QFA_SEEK_BLOCK; scmd[2] = (block >> 16); @@ -2569,13 +2560,13 @@ int dev = TAPE_NR(inode->i_rdev), result; Scsi_Tape *STp; Scsi_Cmnd *SCpnt = NULL; - unsigned char cmd[10]; + unsigned char cmd[MAX_COMMAND_SIZE]; STp = &(scsi_tapes[dev]); if (STp->ready != ST_READY) return (-EIO); - memset((void *) &cmd[0], 0, 10); + memset((void *) &cmd[0], 0, MAX_COMMAND_SIZE); cmd[0] = MODE_SENSE; cmd[1] = 8; /* Page format */ cmd[2] = PART_PAGE; @@ -2609,7 +2600,7 @@ int length; Scsi_Tape *STp; Scsi_Cmnd *SCpnt = NULL; - unsigned char cmd[10], *bp; + unsigned char cmd[MAX_COMMAND_SIZE], *bp; if ((result = nbr_partitions(inode)) < 0) return result; @@ -2640,7 +2631,7 @@ bp[MODE_HEADER_LENGTH] &= 0x3f; bp[MODE_HEADER_LENGTH + 1] = length - 2; - memset(cmd, 0, 10); + memset(cmd, 0, MAX_COMMAND_SIZE); cmd[0] = MODE_SELECT; cmd[1] = 0x10; cmd[4] = length + MODE_HEADER_LENGTH; diff -u --recursive --new-file v2.3.43/linux/drivers/usb/acm.c linux/drivers/usb/acm.c --- v2.3.43/linux/drivers/usb/acm.c Thu Feb 10 17:11:14 2000 +++ linux/drivers/usb/acm.c Thu Feb 10 17:07:27 2000 @@ -665,3 +665,5 @@ return 0; } + +__initcall(usb_acm_init); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/hid-debug.h linux/drivers/usb/hid-debug.h --- v2.3.43/linux/drivers/usb/hid-debug.h Fri Jan 21 18:19:17 2000 +++ linux/drivers/usb/hid-debug.h Thu Feb 10 17:07:26 2000 @@ -67,19 +67,19 @@ {0, 0x45, "Vbrz"}, {0, 0x46, "Vno"}, {0, 0x80, "SystemControl"}, - {0, 0x81, "System PowerDown"}, - {0, 0x82, "System Sleep"}, - {0, 0x83, "System WakeUp"}, - {0, 0x84, "System ContextMenu"}, - {0, 0x85, "System MainMenu"}, - {0, 0x86, "System AppMenu"}, - {0, 0x87, "System MenuHelp"}, - {0, 0x88, "System MenuExit"}, - {0, 0x89, "System MenuSelect"}, - {0, 0x8a, "System MenuRight"}, - {0, 0x8b, "System MenuLeft"}, - {0, 0x8c, "System MenuUp"}, - {0, 0x8d, "System MenuDown"}, + {0, 0x81, "SystemPowerDown"}, + {0, 0x82, "SystemSleep"}, + {0, 0x83, "SystemWakeUp"}, + {0, 0x84, "SystemContextMenu"}, + {0, 0x85, "SystemMainMenu"}, + {0, 0x86, "SystemAppMenu"}, + {0, 0x87, "SystemMenuHelp"}, + {0, 0x88, "SystemMenuExit"}, + {0, 0x89, "SystemMenuSelect"}, + {0, 0x8a, "SystemMenuRight"}, + {0, 0x8b, "SystemMenuLeft"}, + {0, 0x8c, "SystemMenuUp"}, + {0, 0x8d, "SystemMenuDown"}, {0, 0x90, "D-padUp"}, {0, 0x91, "D-padDown"}, {0, 0x92, "D-padRight"}, @@ -87,6 +87,7 @@ { 7, 0, "Keyboard" }, { 8, 0, "LED" }, { 9, 0, "Button" }, + { 12, 0, "Hotkey" }, { 13, 0, "Digitizers" }, {0, 0x01, "Digitizer"}, {0, 0x02, "Pen"}, diff -u --recursive --new-file v2.3.43/linux/drivers/usb/hid.c linux/drivers/usb/hid.c --- v2.3.43/linux/drivers/usb/hid.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/hid.c Thu Feb 10 17:07:27 2000 @@ -754,8 +754,25 @@ case HID_UP_GENDESK: + if ((usage->hid & 0xf0) == 0x80) { /* SystemControl */ + switch (usage->hid & 0xf) { + case 0x1: usage->code = KEY_POWER; break; + case 0x2: usage->code = KEY_SLEEP; break; + case 0x3: usage->code = KEY_WAKEUP; break; + default: usage->code = KEY_UNKNOWN; break; + } + usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; + break; + } + usage->code = usage->hid & 0xf; + if (field->report_size == 1) { + usage->code = BTN_MISC; + usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; + break; + } + if (field->flags & HID_MAIN_ITEM_RELATIVE) { usage->type = EV_REL; bit = input->relbit; max = REL_MAX; break; @@ -816,14 +833,31 @@ } break; - default: - unknown: + case HID_UP_HOTKEY: + + switch (usage->hid & HID_USAGE) { + + case 0x0034: usage->code = KEY_PHONE; break; + case 0x0036: usage->code = KEY_NOTEPAD; break; + case 0x008a: usage->code = KEY_MAIL; break; + case 0x0095: usage->code = KEY_CALENDAR; break; + case 0x00b7: usage->code = KEY_PRINT; break; + case 0x00b8: usage->code = KEY_HELP; break; + case 0x00cd: usage->code = KEY_SOUND; break; + case 0x00e2: usage->code = KEY_PROG1; break; + case 0x00e9: usage->code = KEY_PROG2; break; + case 0x00ea: usage->code = KEY_PROG3; break; + case 0x018a: usage->code = KEY_WWW; break; + case 0x0223: usage->code = KEY_FULLSCREEN; break; + default: usage->code = KEY_UNKNOWN; break; - if (field->flags & HID_MAIN_ITEM_RELATIVE) { - usage->code = REL_MISC; - usage->type = EV_REL; bit = input->relbit; max = REL_MAX; - break; } + + usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; + break; + + default: + unknown: if (field->report_size == 1) { usage->code = BTN_MISC; @@ -831,6 +865,12 @@ break; } + if (field->flags & HID_MAIN_ITEM_RELATIVE) { + usage->code = REL_MISC; + usage->type = EV_REL; bit = input->relbit; max = REL_MAX; + break; + } + usage->code = ABS_MISC; usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX; break; @@ -864,7 +904,7 @@ } } -static void hid_process_event(struct input_dev *input, struct hid_usage *usage, __s32 value) +static void hid_process_event(struct input_dev *input, int flags, struct hid_usage *usage, __s32 value) { hid_dump_input(usage, value); @@ -876,6 +916,9 @@ } input_event(input, usage->type, usage->code, value); + + if ((flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY)) + input_event(input, usage->type, usage->code, 0); } /* @@ -917,19 +960,19 @@ } else { if (value[n] == field->value[n]) continue; } - hid_process_event(&dev->input, &field->usage[n], value[n]); + hid_process_event(&dev->input, field->flags, &field->usage[n], value[n]); } else { if (field->value[n] >= min && field->value[n] <= max /* non-NULL value */ && field->usage[field->value[n] - min].hid /* nonzero usage */ && search(value, field->value[n], count)) - hid_process_event(&dev->input, &field->usage[field->value[n] - min], 0); + hid_process_event(&dev->input, field->flags, &field->usage[field->value[n] - min], 0); if (value[n] >= min && value[n] <= max /* non-NULL value */ && field->usage[value[n] - min].hid /* nonzero usage */ && search(field->value, value[n], count)) - hid_process_event(&dev->input, &field->usage[value[n] - min], 1); + hid_process_event(&dev->input, field->flags, &field->usage[value[n] - min], 1); } } @@ -1340,3 +1383,5 @@ usb_register(&hid_driver); return 0; } + +__initcall(hid_init); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/hid.h linux/drivers/usb/hid.h --- v2.3.43/linux/drivers/usb/hid.h Fri Jan 28 15:09:08 2000 +++ linux/drivers/usb/hid.h Thu Feb 10 17:07:26 2000 @@ -158,6 +158,7 @@ #define HID_UP_KEYBOARD 0x00070000 #define HID_UP_LED 0x00080000 #define HID_UP_BUTTON 0x00090000 +#define HID_UP_HOTKEY 0x000c0000 #define HID_UP_DIGITIZER 0x000d0000 #define HID_UP_PID 0x000f0000 diff -u --recursive --new-file v2.3.43/linux/drivers/usb/hub.c linux/drivers/usb/hub.c --- v2.3.43/linux/drivers/usb/hub.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/hub.c Thu Feb 10 17:07:26 2000 @@ -453,7 +453,7 @@ // be shutdown by the hub, this hack enables them again. // Works at least with mouse driver. if (!(portstatus & USB_PORT_STAT_ENABLE) && - (portstatus & USB_PORT_STAT_CONNECTION)) { + (portstatus & USB_PORT_STAT_CONNECTION) && (dev->children[i])) { err("already running port %i disabled by hub (EMI?), re-enabling...", i + 1); usb_hub_port_connect_change(dev, i); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/inode.c linux/drivers/usb/inode.c --- v2.3.43/linux/drivers/usb/inode.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/inode.c Fri Feb 11 10:19:20 2000 @@ -31,6 +31,7 @@ #define __NO_VERSION__ #include #include +#include #include #include #include diff -u --recursive --new-file v2.3.43/linux/drivers/usb/input.c linux/drivers/usb/input.c --- v2.3.43/linux/drivers/usb/input.c Tue Jan 4 13:57:17 2000 +++ linux/drivers/usb/input.c Thu Feb 10 17:07:27 2000 @@ -333,3 +333,5 @@ { } #endif + +__initcall(input_init); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/keybdev.c linux/drivers/usb/keybdev.c --- v2.3.43/linux/drivers/usb/keybdev.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/keybdev.c Thu Feb 10 17:07:26 2000 @@ -118,9 +118,16 @@ static int keybdev_connect(struct input_handler *handler, struct input_dev *dev) { struct input_handle *handle; + int i; - if (!test_bit(EV_KEY, dev->evbit) || !test_bit(KEY_A, dev->keybit) || !test_bit(KEY_Z, dev->keybit)) + if (!test_bit(EV_KEY, dev->evbit)) return -1; + + for (i = KEY_RESERVED; i < BTN_MISC; i++) + if (test_bit(i, dev->keybit)) break; + + if (i == BTN_MISC) + return -1; if (!(handle = kmalloc(sizeof(struct input_handle), GFP_KERNEL))) return -1; diff -u --recursive --new-file v2.3.43/linux/drivers/usb/printer.c linux/drivers/usb/printer.c --- v2.3.43/linux/drivers/usb/printer.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/printer.c Thu Feb 10 17:07:27 2000 @@ -447,3 +447,5 @@ return 0; } + +__initcall(usb_printer_init); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/usb-core.c linux/drivers/usb/usb-core.c --- v2.3.43/linux/drivers/usb/usb-core.c Tue Feb 1 01:35:44 2000 +++ linux/drivers/usb/usb-core.c Thu Feb 10 17:07:27 2000 @@ -29,19 +29,14 @@ * USB device drivers */ -int usb_acm_init(void); int usb_audio_init(void); int usb_cpia_init(void); int usb_ibmcam_init(void); int usb_ov511_init(void); int usb_dc2xx_init(void); int usb_scanner_init(void); -int usb_printer_init(void); int usb_stor_init(void); -int usb_serial_init(void); int dabusb_init(void); -int hid_init(void); -int input_init(void); int usb_mouse_init(void); int usb_kbd_init(void); int graphire_init(void); @@ -62,9 +57,8 @@ void cleanup_module(void) { usb_major_cleanup(); - usbdevfs_cleanup(); + usbdevfs_cleanup(); usb_hub_cleanup(); - } /* @@ -87,15 +81,6 @@ #ifdef CONFIG_USB_AUDIO usb_audio_init(); #endif -#ifdef CONFIG_USB_ACM - usb_acm_init(); -#endif -#ifdef CONFIG_USB_PRINTER - usb_printer_init(); -#endif -#ifdef CONFIG_USB_SERIAL - usb_serial_init(); -#endif #ifdef CONFIG_USB_CPIA usb_cpia_init(); #endif @@ -113,12 +98,6 @@ #endif #ifdef CONFIG_USB_DABUSB dabusb_init(); -#endif -#if defined(CONFIG_USB_HID) || defined(CONFIG_USB_MOUSE) || defined(CONFIG_USB_KBD) || defined(CONFIG_USB_GRAPHIRE) - input_init(); -#endif -#ifdef CONFIG_USB_HID - hid_init(); #endif #ifdef CONFIG_USB_MOUSE usb_mouse_init(); diff -u --recursive --new-file v2.3.43/linux/drivers/usb/usb-serial.c linux/drivers/usb/usb-serial.c --- v2.3.43/linux/drivers/usb/usb-serial.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/usb-serial.c Thu Feb 10 17:07:27 2000 @@ -1403,5 +1403,7 @@ usb_deregister(&usb_serial_driver); } +#else +__initcall(usb_serial_init); #endif diff -u --recursive --new-file v2.3.43/linux/drivers/usb/usb.c linux/drivers/usb/usb.c --- v2.3.43/linux/drivers/usb/usb.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/usb/usb.c Fri Feb 11 10:19:32 2000 @@ -1625,7 +1625,6 @@ err = usb_get_string(dev, dev->string_langid, index, tbuf, 255); if (err < 0) goto errout; - info("actual string desc. length = %d", err); size--; /* leave room for trailing NULL char in output buffer */ for (idx = 0, u = 2; u < err; u += 2) { @@ -1729,6 +1728,8 @@ return -1; } + info("new device strings: Mfr=%d, Product=%d, SerialNumber=%d", + dev->descriptor.iManufacturer, dev->descriptor.iProduct, dev->descriptor.iSerialNumber); if (dev->descriptor.iManufacturer) usb_show_string(dev, "Manufacturer", dev->descriptor.iManufacturer); if (dev->descriptor.iProduct) diff -u --recursive --new-file v2.3.43/linux/drivers/video/aty128fb.c linux/drivers/video/aty128fb.c --- v2.3.43/linux/drivers/video/aty128fb.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/video/aty128fb.c Fri Feb 11 16:38:27 2000 @@ -1669,10 +1669,10 @@ var = default_var; #else memset(&var, 0, sizeof(var)); -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC if (default_vmode == VMODE_CHOOSE) { var = default_var; -#endif /* CONFIG_PMAC */ +#endif /* CONFIG_PPC */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,1) if (!fb_find_mode(&var, &info->fb_info, mode_option, NULL, 0, @@ -1680,11 +1680,11 @@ var = default_var; #endif -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC } else { if (mac_vmode_to_var(default_vmode, default_cmode, &var)) var = default_var; -#endif /* CONFIG_PMAC */ +#endif /* CONFIG_PPC */ #endif /* MODULE */ if (noaccel) diff -u --recursive --new-file v2.3.43/linux/drivers/video/atyfb.c linux/drivers/video/atyfb.c --- v2.3.43/linux/drivers/video/atyfb.c Thu Feb 10 17:11:15 2000 +++ linux/drivers/video/atyfb.c Fri Feb 11 16:38:27 2000 @@ -4049,7 +4049,7 @@ default_pll = simple_strtoul(this_opt+4, NULL, 0); else if (!strncmp(this_opt, "mclk:", 5)) default_mclk = simple_strtoul(this_opt+5, NULL, 0); -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC else if (!strncmp(this_opt, "vmode:", 6)) { unsigned int vmode = simple_strtoul(this_opt+6, NULL, 0); if (vmode > 0 && vmode <= VMODE_MAX) @@ -4186,7 +4186,7 @@ struct fb_info_aty *info = (struct fb_info_aty *)fb; u8 gen_cntl; -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC if ((_machine == _MACH_Pmac) && blank) pmu_enable_backlight(0); #endif @@ -4211,7 +4211,7 @@ gen_cntl &= ~(0x4c); aty_st_8(CRTC_GEN_CNTL, gen_cntl, info); -#ifdef CONFIG_PMAC +#ifdef CONFIG_PPC if ((_machine == _MACH_Pmac) && !blank) pmu_enable_backlight(1); #endif diff -u --recursive --new-file v2.3.43/linux/drivers/video/igafb.c linux/drivers/video/igafb.c --- v2.3.43/linux/drivers/video/igafb.c Fri Jan 28 15:09:08 2000 +++ linux/drivers/video/igafb.c Fri Feb 11 08:28:41 2000 @@ -657,7 +657,7 @@ memset(info, 0, sizeof(struct fb_info_iga)); if ((addr = pdev->resource[0].start) == 0) { - printk("igafb_init: no memory start\n", addr); + printk("igafb_init: no memory start\n"); kfree(info); return -ENXIO; } @@ -697,7 +697,7 @@ } if ((info->io_base = (int) ioremap(info->io_base_phys, 0x1000)) == 0) { printk("igafb_init: can't remap %lx[4K]\n", info->io_base_phys); - iounmap(info->frame_buffer); + iounmap((void *)info->frame_buffer); kfree(info); return -ENXIO; } @@ -714,7 +714,7 @@ if (!info->mmap_map) { printk("igafb_init: can't alloc mmap_map\n"); iounmap(info->io_base); - iounmap(info->frame_buffer); + iounmap((void *)info->frame_buffer); kfree(info); return -ENOMEM; } @@ -769,7 +769,7 @@ if (!iga_init(info)) { iounmap(info->io_base); - iounmap(info->frame_buffer); + iounmap((void *)info->frame_buffer); if (info->mmap_map) kfree(info->mmap_map); kfree(info); diff -u --recursive --new-file v2.3.43/linux/fs/inode.c linux/fs/inode.c --- v2.3.43/linux/fs/inode.c Thu Feb 10 17:11:17 2000 +++ linux/fs/inode.c Thu Feb 10 19:12:16 2000 @@ -464,6 +464,7 @@ */ static void clean_inode(struct inode *inode) { + static struct address_space_operations empty_aops = {}; memset(&inode->u, 0, sizeof(inode->u)); inode->i_sock = 0; inode->i_op = NULL; @@ -474,8 +475,9 @@ memset(&inode->i_dquot, 0, sizeof(inode->i_dquot)); inode->i_pipe = NULL; inode->i_bdev = NULL; + inode->i_data.a_ops = &empty_aops; + inode->i_data.host = (void*)inode; inode->i_mapping = &inode->i_data; - inode->i_mapping->host = (void*)inode; } /* diff -u --recursive --new-file v2.3.43/linux/fs/openpromfs/inode.c linux/fs/openpromfs/inode.c --- v2.3.43/linux/fs/openpromfs/inode.c Thu Feb 10 17:11:18 2000 +++ linux/fs/openpromfs/inode.c Thu Feb 10 19:00:35 2000 @@ -1,4 +1,4 @@ -/* $Id: inode.c,v 1.4 2000/02/09 22:35:50 davem Exp $ +/* $Id: inode.c,v 1.5 2000/02/10 21:16:06 davem Exp $ * openpromfs.c: /proc/openprom handling routines * * Copyright (C) 1996-1999 Jakub Jelinek (jakub@redhat.com) diff -u --recursive --new-file v2.3.43/linux/fs/partitions/Config.in linux/fs/partitions/Config.in --- v2.3.43/linux/fs/partitions/Config.in Fri Jan 28 15:09:09 2000 +++ linux/fs/partitions/Config.in Thu Feb 10 22:02:32 2000 @@ -27,9 +27,6 @@ if [ "$ARCH" = "alpha" ]; then define_bool CONFIG_OSF_PARTITION y fi - if [ "$ARCH" = "ppc" -o "$CONFIG_MAC" = "y" ]; then - define_bool CONFIG_MAC_PARTITION y - fi if [ "$CONFIG_AMIGA" != "y" -a "$CONFIG_ATARI" != "y" -a \ "$CONFIG_MAC" != "y" ]; then define_bool CONFIG_MSDOS_PARTITION y diff -u --recursive --new-file v2.3.43/linux/fs/qnx4/bitmap.c linux/fs/qnx4/bitmap.c --- v2.3.43/linux/fs/qnx4/bitmap.c Tue Feb 1 01:35:44 2000 +++ linux/fs/qnx4/bitmap.c Fri Feb 11 16:10:03 2000 @@ -61,11 +61,11 @@ unsigned long qnx4_count_free_blocks(struct super_block *sb) { - int start = sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk - 1; + int start = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk) - 1; int total = 0; int total_free = 0; int offset = 0; - int size = sb->u.qnx4_sb.BitMap->di_size; + int size = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_size); struct buffer_head *bh; while (total < size) { @@ -86,8 +86,8 @@ int qnx4_is_free(struct super_block *sb, long block) { - int start = sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk - 1; - int size = sb->u.qnx4_sb.BitMap->di_size; + int start = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk) - 1; + int size = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_size); struct buffer_head *bh; const char *g; int ret = -EIO; @@ -115,8 +115,8 @@ int qnx4_set_bitmap(struct super_block *sb, long block, int busy) { - int start = sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk - 1; - int size = sb->u.qnx4_sb.BitMap->di_size; + int start = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_first_xtnt.xtnt_blk) - 1; + int size = le32_to_cpu(sb->u.qnx4_sb.BitMap->di_size); struct buffer_head *bh; char *g; diff -u --recursive --new-file v2.3.43/linux/fs/qnx4/inode.c linux/fs/qnx4/inode.c --- v2.3.43/linux/fs/qnx4/inode.c Thu Feb 10 17:11:18 2000 +++ linux/fs/qnx4/inode.c Fri Feb 11 16:10:03 2000 @@ -98,15 +98,15 @@ } raw_inode = ((struct qnx4_inode_entry *) bh->b_data) + (ino % QNX4_INODES_PER_BLOCK); - raw_inode->di_mode = inode->i_mode; - raw_inode->di_uid = fs_high2lowuid(inode->i_uid); - raw_inode->di_gid = fs_high2lowgid(inode->i_gid); - raw_inode->di_nlink = inode->i_nlink; - raw_inode->di_size = inode->i_size; - raw_inode->di_mtime = inode->i_mtime; - raw_inode->di_atime = inode->i_atime; - raw_inode->di_ctime = inode->i_ctime; - raw_inode->di_first_xtnt.xtnt_size = inode->i_blocks; + raw_inode->di_mode = cpu_to_le16(inode->i_mode); + raw_inode->di_uid = cpu_to_le16(fs_high2lowuid(inode->i_uid)); + raw_inode->di_gid = cpu_to_le16(fs_high2lowgid(inode->i_gid)); + raw_inode->di_nlink = cpu_to_le16(inode->i_nlink); + raw_inode->di_size = cpu_to_le32(inode->i_size); + raw_inode->di_mtime = cpu_to_le32(inode->i_mtime); + raw_inode->di_atime = cpu_to_le32(inode->i_atime); + raw_inode->di_ctime = cpu_to_le32(inode->i_ctime); + raw_inode->di_first_xtnt.xtnt_size = cpu_to_le32(inode->i_blocks); mark_buffer_dirty(bh, 1); brelse(bh); } @@ -224,15 +224,15 @@ struct buffer_head *bh = 0; struct qnx4_xblk *xblk = 0; struct qnx4_inode_info *qnx4_inode = &inode->u.qnx4_i; - qnx4_nxtnt_t nxtnt = qnx4_inode->i_num_xtnts; + qnx4_nxtnt_t nxtnt = le16_to_cpu(qnx4_inode->i_num_xtnts); - if ( iblock < qnx4_inode->i_first_xtnt.xtnt_size ) { + if ( iblock < le32_to_cpu(qnx4_inode->i_first_xtnt.xtnt_size) ) { // iblock is in the first extent. This is easy. - block = qnx4_inode->i_first_xtnt.xtnt_blk + iblock - 1; + block = le32_to_cpu(qnx4_inode->i_first_xtnt.xtnt_blk) + iblock - 1; } else { // iblock is beyond first extent. We have to follow the extent chain. i_xblk = qnx4_inode->i_xblk; - offset = iblock - qnx4_inode->i_first_xtnt.xtnt_size; + offset = iblock - le32_to_cpu(qnx4_inode->i_first_xtnt.xtnt_size); ix = 0; while ( --nxtnt > 0 ) { if ( ix == 0 ) { @@ -248,14 +248,14 @@ return -EIO; } } - if ( offset < xblk->xblk_xtnts[ix].xtnt_size ) { + if ( offset < le32_to_cpu(xblk->xblk_xtnts[ix].xtnt_size) ) { // got it! - block = xblk->xblk_xtnts[ix].xtnt_blk + offset - 1; + block = le32_to_cpu(xblk->xblk_xtnts[ix].xtnt_blk) + offset - 1; break; } - offset -= xblk->xblk_xtnts[ix].xtnt_size; + offset -= le32_to_cpu(xblk->xblk_xtnts[ix].xtnt_size); if ( ++ix >= xblk->xblk_num_xtnts ) { - i_xblk = xblk->xblk_next_xblk; + i_xblk = le32_to_cpu(xblk->xblk_next_xblk); ix = 0; brelse( bh ); bh = 0; @@ -304,8 +304,8 @@ return "no qnx4 filesystem (no root dir)."; } else { QNX4DEBUG(("QNX4 filesystem found on dev %s.\n", kdevname(sb->s_dev))); - rd = sb->u.qnx4_sb.sb->RootDir.di_first_xtnt.xtnt_blk - 1; - rl = sb->u.qnx4_sb.sb->RootDir.di_first_xtnt.xtnt_size; + rd = le32_to_cpu(sb->u.qnx4_sb.sb->RootDir.di_first_xtnt.xtnt_blk) - 1; + rl = le32_to_cpu(sb->u.qnx4_sb.sb->RootDir.di_first_xtnt.xtnt_size); for (j = 0; j < rl; j++) { bh = bread(sb->s_dev, rd + j, QNX4_BLOCK_SIZE); /* root dir, first block */ if (bh == NULL) { @@ -347,7 +347,7 @@ lock_super(s); set_blocksize(dev, QNX4_BLOCK_SIZE); s->s_blocksize = QNX4_BLOCK_SIZE; - s->s_blocksize_bits = 9; + s->s_blocksize_bits = QNX4_BLOCK_SIZE_BITS; s->s_dev = dev; /* Check the boot signature. Since the qnx4 code is @@ -474,15 +474,15 @@ raw_inode = ((struct qnx4_inode_entry *) bh->b_data) + (ino % QNX4_INODES_PER_BLOCK); - inode->i_mode = raw_inode->di_mode; - inode->i_uid = (uid_t)raw_inode->di_uid; - inode->i_gid = (gid_t)raw_inode->di_gid; - inode->i_nlink = raw_inode->di_nlink; - inode->i_size = raw_inode->di_size; - inode->i_mtime = raw_inode->di_mtime; - inode->i_atime = raw_inode->di_atime; - inode->i_ctime = raw_inode->di_ctime; - inode->i_blocks = raw_inode->di_first_xtnt.xtnt_size; + inode->i_mode = le16_to_cpu(raw_inode->di_mode); + inode->i_uid = (uid_t)le16_to_cpu(raw_inode->di_uid); + inode->i_gid = (gid_t)le16_to_cpu(raw_inode->di_gid); + inode->i_nlink = le16_to_cpu(raw_inode->di_nlink); + inode->i_size = le32_to_cpu(raw_inode->di_size); + inode->i_mtime = le32_to_cpu(raw_inode->di_mtime); + inode->i_atime = le32_to_cpu(raw_inode->di_atime); + inode->i_ctime = le32_to_cpu(raw_inode->di_ctime); + inode->i_blocks = le32_to_cpu(raw_inode->di_first_xtnt.xtnt_size); inode->i_blksize = QNX4_DIR_ENTRY_SIZE; memcpy(&inode->u.qnx4_i, (struct qnx4_inode_info *) raw_inode, QNX4_DIR_ENTRY_SIZE); @@ -497,9 +497,7 @@ inode->i_mapping->a_ops = &qnx4_aops; inode->u.qnx4_i.mmu_private = inode->i_size; } else - /* HUH??? Where is device number? Oh, well... */ - init_special_inode(inode, inode->i_mode, 0); - + printk("qnx4: bad inode %d on dev %s\n",ino,kdevname(inode->i_dev)); brelse(bh); } @@ -513,7 +511,7 @@ int __init init_qnx4_fs(void) { - printk("QNX4 filesystem 0.2.1 registered.\n"); + printk("QNX4 filesystem 0.2.2 registered.\n"); return register_filesystem(&qnx4_fs_type); } diff -u --recursive --new-file v2.3.43/linux/fs/qnx4/namei.c linux/fs/qnx4/namei.c --- v2.3.43/linux/fs/qnx4/namei.c Tue Jan 11 22:31:43 2000 +++ linux/fs/qnx4/namei.c Fri Feb 11 16:10:03 2000 @@ -120,7 +120,8 @@ /* The entry is linked, let's get the real info */ if ((de->di_status & QNX4_FILE_LINK) == QNX4_FILE_LINK) { lnk = (struct qnx4_link_info *) de; - ino = (lnk->dl_inode_blk - 1) * QNX4_INODES_PER_BLOCK + + ino = (le32_to_cpu(lnk->dl_inode_blk) - 1) * + QNX4_INODES_PER_BLOCK + lnk->dl_inode_ndx; } brelse(bh); diff -u --recursive --new-file v2.3.43/linux/fs/read_write.c linux/fs/read_write.c --- v2.3.43/linux/fs/read_write.c Mon Dec 20 18:48:22 1999 +++ linux/fs/read_write.c Fri Feb 11 08:30:11 2000 @@ -170,12 +170,14 @@ unsigned long count) { typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *); + typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *); size_t tot_len; struct iovec iovstack[UIO_FASTIOV]; struct iovec *iov=iovstack; ssize_t ret, i; io_fn_t fn; + iov_fn_t fnv; struct inode *inode; /* @@ -188,6 +190,8 @@ ret = -EINVAL; if (count > UIO_MAXIOV) goto out_nofree; + if (!file->f_op) + goto out_nofree; if (count > UIO_FASTIOV) { ret = -ENOMEM; iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL); @@ -209,24 +213,15 @@ inode, file, file->f_pos, tot_len); if (ret) goto out; - /* - * Then do the actual IO. Note that sockets need to be handled - * specially as they have atomicity guarantees and can handle - * iovec's natively - */ - if (inode->i_sock) { - ret = sock_readv_writev(type,inode,file,iov,count,tot_len); + fnv = (type == VERIFY_WRITE ? file->f_op->readv : file->f_op->writev); + if (fnv) { + ret = fnv(file, iov, count, &file->f_pos); goto out; } - ret = -EINVAL; - if (!file->f_op) - goto out; - /* VERIFY_WRITE actually means a read, as we write to user space */ - fn = file->f_op->read; - if (type == VERIFY_READ) - fn = (io_fn_t) file->f_op->write; + fn = (type == VERIFY_WRITE ? file->f_op->read : + (io_fn_t) file->f_op->write); ret = 0; vector = iov; @@ -269,7 +264,8 @@ file = fget(fd); if (!file) goto bad_file; - if (file->f_op && file->f_op->read && (file->f_mode & FMODE_READ)) + if (file->f_op && (file->f_mode & FMODE_READ) && + (file->f_op->readv || file->f_op->read)) ret = do_readv_writev(VERIFY_WRITE, file, vector, count); fput(file); @@ -288,7 +284,8 @@ file = fget(fd); if (!file) goto bad_file; - if (file->f_op && file->f_op->write && (file->f_mode & FMODE_WRITE)) + if (file->f_op && (file->f_mode & FMODE_WRITE) && + (file->f_op->writev || file->f_op->write)) ret = do_readv_writev(VERIFY_READ, file, vector, count); fput(file); diff -u --recursive --new-file v2.3.43/linux/include/asm-alpha/pgtable.h linux/include/asm-alpha/pgtable.h --- v2.3.43/linux/include/asm-alpha/pgtable.h Mon Dec 20 18:48:22 1999 +++ linux/include/asm-alpha/pgtable.h Thu Feb 10 19:00:35 2000 @@ -249,7 +249,7 @@ #define pgd_offset_k(address) pgd_offset(&init_mm, address) /* to find an entry in a page-table-directory. */ -#define __pgd_offset(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) +#define __pgd_offset(address) ((address >> PGDIR_SHIFT) & PTRS_PER_PGD) #define pgd_offset(mm, address) ((mm)->pgd+__pgd_offset(address)) /* Find an entry in the second-level page table.. */ diff -u --recursive --new-file v2.3.43/linux/include/asm-i386/io.h linux/include/asm-i386/io.h --- v2.3.43/linux/include/asm-i386/io.h Thu Feb 10 17:11:20 2000 +++ linux/include/asm-i386/io.h Sat Feb 12 10:48:22 2000 @@ -195,15 +195,15 @@ */ #define __ISA_IO_base ((char *)(PAGE_OFFSET)) -#define isa_readb(a) readb(__ISA_IO_base + (unsigned long)(a)) -#define isa_readw(a) readw(__ISA_IO_base + (unsigned long)(a)) -#define isa_readl(a) readl(__ISA_IO_base + (unsigned long)(a)) -#define isa_writeb(b,a) writeb(b,__ISA_IO_base + (unsigned long)(a)) -#define isa_writew(w,a) writew(w,__ISA_IO_base + (unsigned long)(a)) -#define isa_writel(l,a) writel(l,__ISA_IO_base + (unsigned long)(a)) -#define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (unsigned long)(a),(b),(c)) -#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (unsigned long)(b),(c)) -#define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (unsigned long)(a),(b),(c)) +#define isa_readb(a) readb(__ISA_IO_base + (a)) +#define isa_readw(a) readw(__ISA_IO_base + (a)) +#define isa_readl(a) readl(__ISA_IO_base + (a)) +#define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a)) +#define isa_writew(w,a) writew(w,__ISA_IO_base + (a)) +#define isa_writel(l,a) writel(l,__ISA_IO_base + (a)) +#define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c)) +#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c)) +#define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c)) /* @@ -211,7 +211,7 @@ */ #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(b),(c),(d)) -#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(__ISA_IO_base + (unsigned long)(b)),(c),(d)) +#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(__ISA_IO_base + (b)),(c),(d)) static inline int check_signature(unsigned long io_addr, const unsigned char *signature, int length) diff -u --recursive --new-file v2.3.43/linux/include/asm-i386/pgtable.h linux/include/asm-i386/pgtable.h --- v2.3.43/linux/include/asm-i386/pgtable.h Thu Feb 10 17:11:20 2000 +++ linux/include/asm-i386/pgtable.h Sat Feb 12 10:48:07 2000 @@ -51,7 +51,7 @@ "movl %%cr3, %0; # flush TLB \n" \ "movl %0, %%cr3; \n" \ "movl %2, %%cr4; # turn PGE back on \n" \ - : "=r" (tmpreg) \ + : "=&r" (tmpreg) \ : "r" (mmu_cr4_features & ~X86_CR4_PGE), \ "r" (mmu_cr4_features) \ : "memory"); \ diff -u --recursive --new-file v2.3.43/linux/include/asm-sparc/asm_offsets.h linux/include/asm-sparc/asm_offsets.h --- v2.3.43/linux/include/asm-sparc/asm_offsets.h Fri Jan 28 15:09:09 2000 +++ linux/include/asm-sparc/asm_offsets.h Thu Feb 10 19:00:35 2000 @@ -97,66 +97,66 @@ #define AOFF_task_it_virt_incr 0x000000c4 #define ASIZ_task_it_virt_incr 0x00000004 #define AOFF_task_real_timer 0x000000c8 -#define ASIZ_task_real_timer 0x00000014 -#define AOFF_task_times 0x000000dc +#define ASIZ_task_real_timer 0x00000018 +#define AOFF_task_times 0x000000e0 #define ASIZ_task_times 0x00000010 -#define AOFF_task_start_time 0x000000ec +#define AOFF_task_start_time 0x000000f0 #define ASIZ_task_start_time 0x00000004 -#define AOFF_task_per_cpu_utime 0x000000f0 +#define AOFF_task_per_cpu_utime 0x000000f4 #define ASIZ_task_per_cpu_utime 0x00000004 -#define AOFF_task_min_flt 0x000000f8 +#define AOFF_task_min_flt 0x000000fc #define ASIZ_task_min_flt 0x00000004 -#define AOFF_task_maj_flt 0x000000fc +#define AOFF_task_maj_flt 0x00000100 #define ASIZ_task_maj_flt 0x00000004 -#define AOFF_task_nswap 0x00000100 +#define AOFF_task_nswap 0x00000104 #define ASIZ_task_nswap 0x00000004 -#define AOFF_task_cmin_flt 0x00000104 +#define AOFF_task_cmin_flt 0x00000108 #define ASIZ_task_cmin_flt 0x00000004 -#define AOFF_task_cmaj_flt 0x00000108 +#define AOFF_task_cmaj_flt 0x0000010c #define ASIZ_task_cmaj_flt 0x00000004 -#define AOFF_task_cnswap 0x0000010c +#define AOFF_task_cnswap 0x00000110 #define ASIZ_task_cnswap 0x00000004 -#define AOFF_task_uid 0x00000114 +#define AOFF_task_uid 0x00000118 #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x00000118 +#define AOFF_task_euid 0x0000011c #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x0000011c +#define AOFF_task_suid 0x00000120 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x00000120 +#define AOFF_task_fsuid 0x00000124 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x00000124 +#define AOFF_task_gid 0x00000128 #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000128 +#define AOFF_task_egid 0x0000012c #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x0000012c +#define AOFF_task_sgid 0x00000130 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x00000130 +#define AOFF_task_fsgid 0x00000134 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000134 +#define AOFF_task_ngroups 0x00000138 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000138 +#define AOFF_task_groups 0x0000013c #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x000001b8 +#define AOFF_task_cap_effective 0x000001bc #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x000001bc +#define AOFF_task_cap_inheritable 0x000001c0 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x000001c0 +#define AOFF_task_cap_permitted 0x000001c4 #define ASIZ_task_cap_permitted 0x00000004 -#define AOFF_task_user 0x000001c4 +#define AOFF_task_user 0x000001c8 #define ASIZ_task_user 0x00000004 -#define AOFF_task_rlim 0x000001c8 +#define AOFF_task_rlim 0x000001cc #define ASIZ_task_rlim 0x00000050 -#define AOFF_task_used_math 0x00000218 +#define AOFF_task_used_math 0x0000021c #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x0000021a +#define AOFF_task_comm 0x0000021e #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x0000022c +#define AOFF_task_link_count 0x00000230 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000230 +#define AOFF_task_tty 0x00000234 #define ASIZ_task_tty 0x00000004 -#define AOFF_task_semundo 0x00000234 +#define AOFF_task_semundo 0x00000238 #define ASIZ_task_semundo 0x00000004 -#define AOFF_task_semsleeping 0x00000238 +#define AOFF_task_semsleeping 0x0000023c #define ASIZ_task_semsleeping 0x00000004 #define AOFF_task_thread 0x00000240 #define ASIZ_task_thread 0x00000380 @@ -378,66 +378,66 @@ #define AOFF_task_it_virt_incr 0x000000cc #define ASIZ_task_it_virt_incr 0x00000004 #define AOFF_task_real_timer 0x000000d0 -#define ASIZ_task_real_timer 0x00000014 -#define AOFF_task_times 0x000000e4 +#define ASIZ_task_real_timer 0x00000018 +#define AOFF_task_times 0x000000e8 #define ASIZ_task_times 0x00000010 -#define AOFF_task_start_time 0x000000f4 +#define AOFF_task_start_time 0x000000f8 #define ASIZ_task_start_time 0x00000004 -#define AOFF_task_per_cpu_utime 0x000000f8 +#define AOFF_task_per_cpu_utime 0x000000fc #define ASIZ_task_per_cpu_utime 0x00000080 -#define AOFF_task_min_flt 0x000001f8 +#define AOFF_task_min_flt 0x000001fc #define ASIZ_task_min_flt 0x00000004 -#define AOFF_task_maj_flt 0x000001fc +#define AOFF_task_maj_flt 0x00000200 #define ASIZ_task_maj_flt 0x00000004 -#define AOFF_task_nswap 0x00000200 +#define AOFF_task_nswap 0x00000204 #define ASIZ_task_nswap 0x00000004 -#define AOFF_task_cmin_flt 0x00000204 +#define AOFF_task_cmin_flt 0x00000208 #define ASIZ_task_cmin_flt 0x00000004 -#define AOFF_task_cmaj_flt 0x00000208 +#define AOFF_task_cmaj_flt 0x0000020c #define ASIZ_task_cmaj_flt 0x00000004 -#define AOFF_task_cnswap 0x0000020c +#define AOFF_task_cnswap 0x00000210 #define ASIZ_task_cnswap 0x00000004 -#define AOFF_task_uid 0x00000214 +#define AOFF_task_uid 0x00000218 #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x00000218 +#define AOFF_task_euid 0x0000021c #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x0000021c +#define AOFF_task_suid 0x00000220 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x00000220 +#define AOFF_task_fsuid 0x00000224 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x00000224 +#define AOFF_task_gid 0x00000228 #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000228 +#define AOFF_task_egid 0x0000022c #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x0000022c +#define AOFF_task_sgid 0x00000230 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x00000230 +#define AOFF_task_fsgid 0x00000234 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000234 +#define AOFF_task_ngroups 0x00000238 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000238 +#define AOFF_task_groups 0x0000023c #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x000002b8 +#define AOFF_task_cap_effective 0x000002bc #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x000002bc +#define AOFF_task_cap_inheritable 0x000002c0 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x000002c0 +#define AOFF_task_cap_permitted 0x000002c4 #define ASIZ_task_cap_permitted 0x00000004 -#define AOFF_task_user 0x000002c4 +#define AOFF_task_user 0x000002c8 #define ASIZ_task_user 0x00000004 -#define AOFF_task_rlim 0x000002c8 +#define AOFF_task_rlim 0x000002cc #define ASIZ_task_rlim 0x00000050 -#define AOFF_task_used_math 0x00000318 +#define AOFF_task_used_math 0x0000031c #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x0000031a +#define AOFF_task_comm 0x0000031e #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x0000032c +#define AOFF_task_link_count 0x00000330 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000330 +#define AOFF_task_tty 0x00000334 #define ASIZ_task_tty 0x00000004 -#define AOFF_task_semundo 0x00000334 +#define AOFF_task_semundo 0x00000338 #define ASIZ_task_semundo 0x00000004 -#define AOFF_task_semsleeping 0x00000338 +#define AOFF_task_semsleeping 0x0000033c #define ASIZ_task_semsleeping 0x00000004 #define AOFF_task_thread 0x00000340 #define ASIZ_task_thread 0x00000380 diff -u --recursive --new-file v2.3.43/linux/include/asm-sparc/hardirq.h linux/include/asm-sparc/hardirq.h --- v2.3.43/linux/include/asm-sparc/hardirq.h Thu Feb 10 17:11:21 2000 +++ linux/include/asm-sparc/hardirq.h Sat Feb 12 09:52:04 2000 @@ -18,8 +18,8 @@ */ #define in_interrupt() ((local_irq_count + local_bh_count) != 0) -#define hardirq_trylock(cpu) (local_irq_count == 0) -#define hardirq_endlock(cpu) do { } while (0) +#define hardirq_trylock(cpu) ((void)(cpu), local_irq_count == 0) +#define hardirq_endlock(cpu) do { (void)(cpu); } while (0) #define hardirq_enter(cpu) (local_irq_count++) #define hardirq_exit(cpu) (local_irq_count--) diff -u --recursive --new-file v2.3.43/linux/include/asm-sparc64/asm_offsets.h linux/include/asm-sparc64/asm_offsets.h --- v2.3.43/linux/include/asm-sparc64/asm_offsets.h Fri Jan 28 15:09:09 2000 +++ linux/include/asm-sparc64/asm_offsets.h Thu Feb 10 19:00:35 2000 @@ -103,96 +103,96 @@ #define AOFF_task_it_virt_incr 0x00000158 #define ASIZ_task_it_virt_incr 0x00000008 #define AOFF_task_real_timer 0x00000160 -#define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000188 +#define ASIZ_task_real_timer 0x00000030 +#define AOFF_task_times 0x00000190 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x000001a8 +#define AOFF_task_start_time 0x000001b0 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x000001b0 +#define AOFF_task_per_cpu_utime 0x000001b8 #define ASIZ_task_per_cpu_utime 0x00000008 -#define AOFF_task_min_flt 0x000001c0 +#define AOFF_task_min_flt 0x000001c8 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x000001c8 +#define AOFF_task_maj_flt 0x000001d0 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x000001d0 +#define AOFF_task_nswap 0x000001d8 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x000001d8 +#define AOFF_task_cmin_flt 0x000001e0 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x000001e0 +#define AOFF_task_cmaj_flt 0x000001e8 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x000001e8 +#define AOFF_task_cnswap 0x000001f0 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_uid 0x000001f4 +#define AOFF_task_uid 0x000001fc #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000001f8 +#define AOFF_task_euid 0x00000200 #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000001fc +#define AOFF_task_suid 0x00000204 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x00000200 +#define AOFF_task_fsuid 0x00000208 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x00000204 +#define AOFF_task_gid 0x0000020c #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000208 +#define AOFF_task_egid 0x00000210 #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x0000020c +#define AOFF_task_sgid 0x00000214 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x00000210 +#define AOFF_task_fsgid 0x00000218 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000214 +#define AOFF_task_ngroups 0x0000021c #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000218 +#define AOFF_task_groups 0x00000220 #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x00000298 +#define AOFF_task_cap_effective 0x000002a0 #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x0000029c +#define AOFF_task_cap_inheritable 0x000002a4 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x000002a0 +#define AOFF_task_cap_permitted 0x000002a8 #define ASIZ_task_cap_permitted 0x00000004 -#define AOFF_task_user 0x000002a8 +#define AOFF_task_user 0x000002b0 #define ASIZ_task_user 0x00000008 -#define AOFF_task_rlim 0x000002b0 +#define AOFF_task_rlim 0x000002b8 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000350 +#define AOFF_task_used_math 0x00000358 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x00000352 +#define AOFF_task_comm 0x0000035a #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x00000364 +#define AOFF_task_link_count 0x0000036c #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000368 +#define AOFF_task_tty 0x00000370 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000370 +#define AOFF_task_semundo 0x00000378 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000378 +#define AOFF_task_semsleeping 0x00000380 #define ASIZ_task_semsleeping 0x00000008 -#define AOFF_task_thread 0x00000380 +#define AOFF_task_thread 0x00000390 #define ASIZ_task_thread 0x00000450 -#define AOFF_task_fs 0x000007d0 +#define AOFF_task_fs 0x000007e0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x000007d8 +#define AOFF_task_files 0x000007e8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_sigmask_lock 0x000007e0 +#define AOFF_task_sigmask_lock 0x000007f0 #define ASIZ_task_sigmask_lock 0x00000000 -#define AOFF_task_sig 0x000007e0 +#define AOFF_task_sig 0x000007f0 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x000007e8 +#define AOFF_task_signal 0x000007f8 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x000007f0 +#define AOFF_task_blocked 0x00000800 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x000007f8 +#define AOFF_task_sigqueue 0x00000808 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x00000800 +#define AOFF_task_sigqueue_tail 0x00000810 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_sas_ss_sp 0x00000808 +#define AOFF_task_sas_ss_sp 0x00000818 #define ASIZ_task_sas_ss_sp 0x00000008 -#define AOFF_task_sas_ss_size 0x00000810 +#define AOFF_task_sas_ss_size 0x00000820 #define ASIZ_task_sas_ss_size 0x00000008 -#define AOFF_task_parent_exec_id 0x00000818 +#define AOFF_task_parent_exec_id 0x00000828 #define ASIZ_task_parent_exec_id 0x00000004 -#define AOFF_task_self_exec_id 0x0000081c +#define AOFF_task_self_exec_id 0x0000082c #define ASIZ_task_self_exec_id 0x00000004 -#define AOFF_task_exit_sem 0x00000820 +#define AOFF_task_exit_sem 0x00000830 #define ASIZ_task_exit_sem 0x00000030 -#define ASIZ_task 0x00000850 +#define ASIZ_task 0x00000860 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_avl 0x00000008 @@ -391,66 +391,66 @@ #define AOFF_task_it_virt_incr 0x00000160 #define ASIZ_task_it_virt_incr 0x00000008 #define AOFF_task_real_timer 0x00000168 -#define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000190 +#define ASIZ_task_real_timer 0x00000030 +#define AOFF_task_times 0x00000198 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x000001b0 +#define AOFF_task_start_time 0x000001b8 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x000001b8 +#define AOFF_task_per_cpu_utime 0x000001c0 #define ASIZ_task_per_cpu_utime 0x00000100 -#define AOFF_task_min_flt 0x000003b8 +#define AOFF_task_min_flt 0x000003c0 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x000003c0 +#define AOFF_task_maj_flt 0x000003c8 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x000003c8 +#define AOFF_task_nswap 0x000003d0 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x000003d0 +#define AOFF_task_cmin_flt 0x000003d8 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x000003d8 +#define AOFF_task_cmaj_flt 0x000003e0 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x000003e0 +#define AOFF_task_cnswap 0x000003e8 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_uid 0x000003ec +#define AOFF_task_uid 0x000003f4 #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000003f0 +#define AOFF_task_euid 0x000003f8 #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000003f4 +#define AOFF_task_suid 0x000003fc #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x000003f8 +#define AOFF_task_fsuid 0x00000400 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x000003fc +#define AOFF_task_gid 0x00000404 #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000400 +#define AOFF_task_egid 0x00000408 #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x00000404 +#define AOFF_task_sgid 0x0000040c #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x00000408 +#define AOFF_task_fsgid 0x00000410 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x0000040c +#define AOFF_task_ngroups 0x00000414 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000410 +#define AOFF_task_groups 0x00000418 #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x00000490 +#define AOFF_task_cap_effective 0x00000498 #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x00000494 +#define AOFF_task_cap_inheritable 0x0000049c #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x00000498 +#define AOFF_task_cap_permitted 0x000004a0 #define ASIZ_task_cap_permitted 0x00000004 -#define AOFF_task_user 0x000004a0 +#define AOFF_task_user 0x000004a8 #define ASIZ_task_user 0x00000008 -#define AOFF_task_rlim 0x000004a8 +#define AOFF_task_rlim 0x000004b0 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000548 +#define AOFF_task_used_math 0x00000550 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x0000054a +#define AOFF_task_comm 0x00000552 #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x0000055c +#define AOFF_task_link_count 0x00000564 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000560 +#define AOFF_task_tty 0x00000568 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000568 +#define AOFF_task_semundo 0x00000570 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000570 +#define AOFF_task_semsleeping 0x00000578 #define ASIZ_task_semsleeping 0x00000008 #define AOFF_task_thread 0x00000580 #define ASIZ_task_thread 0x00000450 @@ -677,96 +677,96 @@ #define AOFF_task_it_virt_incr 0x00000168 #define ASIZ_task_it_virt_incr 0x00000008 #define AOFF_task_real_timer 0x00000170 -#define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000198 +#define ASIZ_task_real_timer 0x00000030 +#define AOFF_task_times 0x000001a0 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x000001b8 +#define AOFF_task_start_time 0x000001c0 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x000001c0 +#define AOFF_task_per_cpu_utime 0x000001c8 #define ASIZ_task_per_cpu_utime 0x00000100 -#define AOFF_task_min_flt 0x000003c0 +#define AOFF_task_min_flt 0x000003c8 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x000003c8 +#define AOFF_task_maj_flt 0x000003d0 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x000003d0 +#define AOFF_task_nswap 0x000003d8 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x000003d8 +#define AOFF_task_cmin_flt 0x000003e0 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x000003e0 +#define AOFF_task_cmaj_flt 0x000003e8 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x000003e8 +#define AOFF_task_cnswap 0x000003f0 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_uid 0x000003f4 +#define AOFF_task_uid 0x000003fc #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000003f8 +#define AOFF_task_euid 0x00000400 #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000003fc +#define AOFF_task_suid 0x00000404 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x00000400 +#define AOFF_task_fsuid 0x00000408 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x00000404 +#define AOFF_task_gid 0x0000040c #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000408 +#define AOFF_task_egid 0x00000410 #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x0000040c +#define AOFF_task_sgid 0x00000414 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x00000410 +#define AOFF_task_fsgid 0x00000418 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000414 +#define AOFF_task_ngroups 0x0000041c #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000418 +#define AOFF_task_groups 0x00000420 #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x00000498 +#define AOFF_task_cap_effective 0x000004a0 #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x0000049c +#define AOFF_task_cap_inheritable 0x000004a4 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x000004a0 +#define AOFF_task_cap_permitted 0x000004a8 #define ASIZ_task_cap_permitted 0x00000004 -#define AOFF_task_user 0x000004a8 +#define AOFF_task_user 0x000004b0 #define ASIZ_task_user 0x00000008 -#define AOFF_task_rlim 0x000004b0 +#define AOFF_task_rlim 0x000004b8 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000550 +#define AOFF_task_used_math 0x00000558 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x00000552 +#define AOFF_task_comm 0x0000055a #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x00000564 +#define AOFF_task_link_count 0x0000056c #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000568 +#define AOFF_task_tty 0x00000570 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000570 +#define AOFF_task_semundo 0x00000578 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000578 +#define AOFF_task_semsleeping 0x00000580 #define ASIZ_task_semsleeping 0x00000008 -#define AOFF_task_thread 0x00000580 +#define AOFF_task_thread 0x00000590 #define ASIZ_task_thread 0x00000450 -#define AOFF_task_fs 0x000009d0 +#define AOFF_task_fs 0x000009e0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x000009d8 +#define AOFF_task_files 0x000009e8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_sigmask_lock 0x000009e0 +#define AOFF_task_sigmask_lock 0x000009f0 #define ASIZ_task_sigmask_lock 0x0000000c -#define AOFF_task_sig 0x000009f0 +#define AOFF_task_sig 0x00000a00 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x000009f8 +#define AOFF_task_signal 0x00000a08 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x00000a00 +#define AOFF_task_blocked 0x00000a10 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x00000a08 +#define AOFF_task_sigqueue 0x00000a18 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x00000a10 +#define AOFF_task_sigqueue_tail 0x00000a20 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_sas_ss_sp 0x00000a18 +#define AOFF_task_sas_ss_sp 0x00000a28 #define ASIZ_task_sas_ss_sp 0x00000008 -#define AOFF_task_sas_ss_size 0x00000a20 +#define AOFF_task_sas_ss_size 0x00000a30 #define ASIZ_task_sas_ss_size 0x00000008 -#define AOFF_task_parent_exec_id 0x00000a28 +#define AOFF_task_parent_exec_id 0x00000a38 #define ASIZ_task_parent_exec_id 0x00000004 -#define AOFF_task_self_exec_id 0x00000a2c +#define AOFF_task_self_exec_id 0x00000a3c #define ASIZ_task_self_exec_id 0x00000004 -#define AOFF_task_exit_sem 0x00000a30 +#define AOFF_task_exit_sem 0x00000a40 #define ASIZ_task_exit_sem 0x00000040 -#define ASIZ_task 0x00000a70 +#define ASIZ_task 0x00000a80 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_avl 0x00000008 diff -u --recursive --new-file v2.3.43/linux/include/asm-sparc64/hardirq.h linux/include/asm-sparc64/hardirq.h --- v2.3.43/linux/include/asm-sparc64/hardirq.h Thu Feb 10 17:11:21 2000 +++ linux/include/asm-sparc64/hardirq.h Sat Feb 12 09:52:04 2000 @@ -25,11 +25,11 @@ #ifndef __SMP__ -#define hardirq_trylock(cpu) (local_irq_count == 0) -#define hardirq_endlock(cpu) do { } while(0) +#define hardirq_trylock(cpu) ((void)(cpu), local_irq_count == 0) +#define hardirq_endlock(cpu) do { (void)(cpu); } while(0) -#define hardirq_enter(cpu) (local_irq_count++) -#define hardirq_exit(cpu) (local_irq_count--) +#define hardirq_enter(cpu) ((void)(cpu), local_irq_count++) +#define hardirq_exit(cpu) ((void)(cpu), local_irq_count--) #define synchronize_irq() barrier() @@ -73,7 +73,7 @@ ! spin_is_locked (&global_irq_lock)); } -#define hardirq_endlock(cpu) do { } while (0) +#define hardirq_endlock(cpu) do { (void)(cpu); } while (0) extern void synchronize_irq(void); diff -u --recursive --new-file v2.3.43/linux/include/linux/fs.h linux/include/linux/fs.h --- v2.3.43/linux/include/linux/fs.h Thu Feb 10 17:11:21 2000 +++ linux/include/linux/fs.h Sat Feb 12 10:48:11 2000 @@ -654,6 +654,8 @@ int (*fsync) (struct file *, struct dentry *); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); + ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); + ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); }; struct inode_operations { diff -u --recursive --new-file v2.3.43/linux/include/linux/hdlcdrv.h linux/include/linux/hdlcdrv.h --- v2.3.43/linux/include/linux/hdlcdrv.h Fri Sep 10 23:57:37 1999 +++ linux/include/linux/hdlcdrv.h Fri Feb 11 08:47:40 2000 @@ -250,7 +250,8 @@ #endif int ptt_keyed; - struct sk_buff_head send_queue; /* Packets awaiting transmission */ + /* queued skb for transmission */ + struct sk_buff *skb; }; diff -u --recursive --new-file v2.3.43/linux/include/linux/input.h linux/include/linux/input.h --- v2.3.43/linux/include/linux/input.h Thu Feb 10 17:11:22 2000 +++ linux/include/linux/input.h Thu Feb 10 17:07:26 2000 @@ -233,6 +233,13 @@ #define KEY_STOPCD 166 #define KEY_RECORD 167 #define KEY_REWIND 168 +#define KEY_PHONE 169 +#define KEY_CALENDAR 170 +#define KEY_NOTEPAD 171 +#define KEY_PROG3 172 +#define KEY_PRINT 173 +#define KEY_SOUND 174 +#define KEY_FULLSCREEN 175 #define KEY_UNKNOWN 180 diff -u --recursive --new-file v2.3.43/linux/include/linux/interrupt.h linux/include/linux/interrupt.h --- v2.3.43/linux/include/linux/interrupt.h Thu Feb 10 17:11:22 2000 +++ linux/include/linux/interrupt.h Sat Feb 12 10:48:07 2000 @@ -4,6 +4,7 @@ #include #include +#include #include #include diff -u --recursive --new-file v2.3.43/linux/include/linux/kmod.h linux/include/linux/kmod.h --- v2.3.43/linux/include/linux/kmod.h Wed Aug 18 16:43:30 1999 +++ linux/include/linux/kmod.h Sat Feb 12 10:48:07 2000 @@ -6,7 +6,12 @@ #ifdef CONFIG_KMOD extern int request_module(const char * name); +extern int exec_usermodehelper(char *program_path, char *argv[], char *envp[]); #else #define request_module(x) do {} while(0) +extern inline int exec_usermodehelper(char *program_path, char *argv[], char *envp[]) +{ + return -EACCES; +} #endif diff -u --recursive --new-file v2.3.43/linux/include/linux/mm.h linux/include/linux/mm.h --- v2.3.43/linux/include/linux/mm.h Thu Feb 10 17:11:22 2000 +++ linux/include/linux/mm.h Sat Feb 12 10:48:15 2000 @@ -396,7 +396,7 @@ extern void paging_init(void); extern void free_area_init(unsigned long * zones_size); extern void free_area_init_node(int nid, pg_data_t *pgdat, - unsigned int * zones_size, unsigned long zone_start_paddr); + unsigned long * zones_size, unsigned long zone_start_paddr); extern void mem_init(void); extern void show_mem(void); extern void oom(struct task_struct * tsk); @@ -453,14 +453,13 @@ #define __GFP_WAIT 0x01 #define __GFP_HIGH 0x02 #define __GFP_IO 0x04 -#define __GFP_SWAP 0x08 +#define __GFP_DMA 0x08 #ifdef CONFIG_HIGHMEM #define __GFP_HIGHMEM 0x10 #else #define __GFP_HIGHMEM 0x0 /* noop */ #endif -#define __GFP_DMA 0x20 #define GFP_BUFFER (__GFP_HIGH | __GFP_WAIT) #define GFP_ATOMIC (__GFP_HIGH) @@ -468,7 +467,7 @@ #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM) #define GFP_KERNEL (__GFP_HIGH | __GFP_WAIT | __GFP_IO) #define GFP_NFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO) -#define GFP_KSWAPD (__GFP_IO | __GFP_SWAP) +#define GFP_KSWAPD (__GFP_IO) /* Flag - indicates that the buffer will be suitable for DMA. Ignored on some platforms, used as appropriate on others */ diff -u --recursive --new-file v2.3.43/linux/include/linux/mmzone.h linux/include/linux/mmzone.h --- v2.3.43/linux/include/linux/mmzone.h Thu Feb 10 17:11:22 2000 +++ linux/include/linux/mmzone.h Sat Feb 12 10:48:06 2000 @@ -30,7 +30,6 @@ unsigned long free_pages; int low_on_memory; unsigned long pages_min, pages_low, pages_high; - struct pglist_data *zone_pgdat; /* * free areas of different sizes @@ -42,6 +41,13 @@ */ char * name; unsigned long size; + /* + * Discontig memory support fields. + */ + struct pglist_data *zone_pgdat; + unsigned long zone_start_paddr; + unsigned long zone_start_mapnr; + struct page * zone_mem_map; } zone_t; #define ZONE_DMA 0 @@ -74,6 +80,10 @@ struct page *node_mem_map; unsigned long *valid_addr_bitmap; struct bootmem_data *bdata; + unsigned long node_start_paddr; + unsigned long node_start_mapnr; + unsigned long node_size; + int node_id; } pg_data_t; extern int numnodes; @@ -82,6 +92,14 @@ && (((pgzone) - (pgzone)->zone_pgdat->node_zones) <= \ ((tzone) - (pgzone)->zone_pgdat->node_zones))) +/* + * The following two are not meant for general usage. They are here as + * prototypes for the discontig memory code. + */ +extern void show_free_areas_core(int); +extern void free_area_init_core(int nid, pg_data_t *pgdat, struct page **gmap, + unsigned long *zones_size, unsigned long paddr); + #ifndef CONFIG_DISCONTIGMEM extern pg_data_t contig_page_data; @@ -97,19 +115,6 @@ #define MAP_ALIGN(x) ((((x) % sizeof(mem_map_t)) == 0) ? (x) : ((x) + \ sizeof(mem_map_t) - ((x) % sizeof(mem_map_t)))) - -#ifdef CONFIG_DISCONTIGMEM - -#define LOCAL_MAP_NR(kvaddr) \ - (((unsigned long)(kvaddr)-LOCAL_BASE_ADDR((kvaddr))) >> PAGE_SHIFT) -#define MAP_NR(kaddr) (LOCAL_MAP_NR((kaddr)) + \ - (((unsigned long)ADDR_TO_MAPBASE((kaddr)) - PAGE_OFFSET) / \ - sizeof(mem_map_t))) -#define kern_addr_valid(addr) ((KVADDR_TO_NID((unsigned long)addr) >= \ - numnodes) ? 0 : (test_bit(LOCAL_MAP_NR((addr)), \ - NODE_DATA(KVADDR_TO_NID((unsigned long)addr))->valid_addr_bitmap))) - -#endif /* CONFIG_DISCONTIGMEM */ #endif /* !__ASSEMBLY__ */ #endif /* __KERNEL__ */ diff -u --recursive --new-file v2.3.43/linux/include/linux/netdevice.h linux/include/linux/netdevice.h --- v2.3.43/linux/include/linux/netdevice.h Thu Feb 10 17:11:22 2000 +++ linux/include/linux/netdevice.h Sat Feb 12 10:49:38 2000 @@ -125,6 +125,7 @@ extern const char *if_port_text[]; +#include #include struct neighbour; diff -u --recursive --new-file v2.3.43/linux/include/linux/pci_ids.h linux/include/linux/pci_ids.h --- v2.3.43/linux/include/linux/pci_ids.h Fri Jan 28 15:09:09 2000 +++ linux/include/linux/pci_ids.h Sat Feb 12 10:55:39 2000 @@ -1153,7 +1153,7 @@ #define PCI_DEVICE_ID_INTEL_82443BX_0 0x7190 #define PCI_DEVICE_ID_INTEL_82443BX_1 0x7191 #define PCI_DEVICE_ID_INTEL_82443BX_2 0x7192 -#define PCI_DEVICE_ID_INTEL_P6 0x84c4 +#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4 #define PCI_DEVICE_ID_INTEL_82450GX 0x84c5 #define PCI_DEVICE_ID_INTEL_82451NX 0x84ca diff -u --recursive --new-file v2.3.43/linux/include/linux/slab.h linux/include/linux/slab.h --- v2.3.43/linux/include/linux/slab.h Fri Jan 28 15:09:09 2000 +++ linux/include/linux/slab.h Sat Feb 12 10:48:17 2000 @@ -22,8 +22,7 @@ #define SLAB_NFS GFP_NFS #define SLAB_DMA GFP_DMA -#define SLAB_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_SWAP| \ - __GFP_HIGHMEM) +#define SLAB_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHMEM) #define SLAB_NO_GROW 0x00001000UL /* don't grow a cache */ /* flags to pass to kmem_cache_create(). diff -u --recursive --new-file v2.3.43/linux/include/net/ip.h linux/include/net/ip.h --- v2.3.43/linux/include/net/ip.h Fri Jan 28 15:09:09 2000 +++ linux/include/net/ip.h Sat Feb 12 10:49:43 2000 @@ -41,7 +41,6 @@ struct inet_skb_parm { struct ip_options opt; /* Compiled IP options */ - u16 redirport; /* Redirect port */ unsigned char flags; #define IPSKB_MASQUERADED 1 diff -u --recursive --new-file v2.3.43/linux/include/net/sock.h linux/include/net/sock.h --- v2.3.43/linux/include/net/sock.h Thu Feb 10 17:11:23 2000 +++ linux/include/net/sock.h Sat Feb 12 10:49:41 2000 @@ -35,6 +35,7 @@ #include #include +#include #include /* struct sockaddr_in */ #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) diff -u --recursive --new-file v2.3.43/linux/init/main.c linux/init/main.c --- v2.3.43/linux/init/main.c Thu Feb 10 17:11:23 2000 +++ linux/init/main.c Thu Feb 10 17:07:26 2000 @@ -91,6 +91,7 @@ extern void signals_init(void); extern void bdev_init(void); extern int init_pcmcia_ds(void); +extern int usb_init(void); extern void free_initmem(void); extern void filesystem_setup(void); @@ -646,6 +647,10 @@ #endif #ifdef CONFIG_ISAPNP isapnp_init(); +#endif +#ifdef CONFIG_USB + usb_init(); /* Do this before doing initcalls, so that we can make + usbcore initialize here, and all drivers initialize later */ #endif /* Networking initialization needs a process context */ diff -u --recursive --new-file v2.3.43/linux/kernel/kmod.c linux/kernel/kmod.c --- v2.3.43/linux/kernel/kmod.c Fri Jan 7 19:13:23 2000 +++ linux/kernel/kmod.c Sat Feb 12 09:50:29 2000 @@ -63,10 +63,8 @@ unlock_kernel(); } -static int exec_modprobe(void * module_name) +int exec_usermodehelper(char *program_path, char *argv[], char *envp[]) { - static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; - char *argv[] = { modprobe_path, "-s", "-k", (char*)module_name, NULL }; int i; current->session = 1; @@ -101,13 +99,24 @@ set_fs(KERNEL_DS); /* Go, go, go... */ - if (execve(modprobe_path, argv, envp) < 0) { + if (execve(program_path, argv, envp) < 0) + return -errno; + return 0; +} + +static int exec_modprobe(void * module_name) +{ + static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; + char *argv[] = { modprobe_path, "-s", "-k", (char*)module_name, NULL }; + int ret; + + ret = exec_usermodehelper(modprobe_path, argv, envp); + if (ret) { printk(KERN_ERR "kmod: failed to exec %s -s -k %s, errno = %d\n", modprobe_path, (char*) module_name, errno); - return -errno; } - return 0; + return ret; } /* diff -u --recursive --new-file v2.3.43/linux/kernel/ksyms.c linux/kernel/ksyms.c --- v2.3.43/linux/kernel/ksyms.c Thu Feb 10 17:11:23 2000 +++ linux/kernel/ksyms.c Sat Feb 12 09:50:29 2000 @@ -74,6 +74,7 @@ #ifdef CONFIG_KMOD EXPORT_SYMBOL(request_module); +EXPORT_SYMBOL(exec_usermodehelper); #endif #ifdef CONFIG_MODULES @@ -461,6 +462,7 @@ /* software interrupts */ EXPORT_SYMBOL(tasklet_hi_vec); +EXPORT_SYMBOL(tasklet_vec); EXPORT_SYMBOL(bh_task_vec); EXPORT_SYMBOL(init_bh); EXPORT_SYMBOL(remove_bh); diff -u --recursive --new-file v2.3.43/linux/mm/numa.c linux/mm/numa.c --- v2.3.43/linux/mm/numa.c Wed Dec 8 14:11:28 1999 +++ linux/mm/numa.c Fri Feb 11 08:22:00 2000 @@ -16,6 +16,18 @@ static bootmem_data_t contig_bootmem_data; pg_data_t contig_page_data = { bdata: &contig_bootmem_data }; +/* + * This is meant to be invoked by platforms whose physical memory starts + * at a considerably higher value than 0. Examples are Super-H, ARM, m68k. + * Should be invoked with paramters (0, 0, unsigned long *[], start_paddr). + */ +void __init free_area_init_node(int nid, pg_data_t *pgdat, + unsigned long *zones_size, unsigned long zone_start_paddr) +{ + free_area_init_core(0, NODE_DATA(0), &mem_map, zones_size, + zone_start_paddr); +} + #endif /* !CONFIG_DISCONTIGMEM */ struct page * alloc_pages_node(int nid, int gfp_mask, unsigned long order) @@ -29,10 +41,6 @@ static spinlock_t node_lock = SPIN_LOCK_UNLOCKED; -extern void show_free_areas_core(int); -extern void __init free_area_init_core(int nid, pg_data_t *pgdat, - struct page **gmap, unsigned int *zones_size, unsigned long paddr); - void show_free_areas_node(int nid) { unsigned long flags; @@ -47,7 +55,7 @@ * Nodes can be initialized parallely, in no particular order. */ void __init free_area_init_node(int nid, pg_data_t *pgdat, - unsigned int *zones_size, unsigned long zone_start_paddr) + unsigned long *zones_size, unsigned long zone_start_paddr) { int i, size = 0; struct page *discard; @@ -56,6 +64,7 @@ mem_map = (mem_map_t *)PAGE_OFFSET; free_area_init_core(nid, pgdat, &discard, zones_size, zone_start_paddr); + pgdat->node_id = nid; /* * Get space for the valid bitmap. diff -u --recursive --new-file v2.3.43/linux/mm/page_alloc.c linux/mm/page_alloc.c --- v2.3.43/linux/mm/page_alloc.c Thu Feb 10 17:11:23 2000 +++ linux/mm/page_alloc.c Fri Feb 11 08:22:00 2000 @@ -525,6 +525,9 @@ lmem_map = (struct page *)(PAGE_OFFSET + MAP_ALIGN((unsigned long)lmem_map - PAGE_OFFSET)); *gmap = pgdat->node_mem_map = lmem_map; + pgdat->node_size = totalpages; + pgdat->node_start_paddr = zone_start_paddr; + pgdat->node_start_mapnr = (lmem_map - mem_map); /* * Initially all pages are reserved - free ones are freed @@ -565,6 +568,9 @@ zone->pages_low = mask*2; zone->pages_high = mask*3; zone->low_on_memory = 0; + zone->zone_mem_map = mem_map + offset; + zone->zone_start_mapnr = offset; + zone->zone_start_paddr = zone_start_paddr; for (i = 0; i < size; i++) { struct page *page = mem_map + offset + i; diff -u --recursive --new-file v2.3.43/linux/mm/vmscan.c linux/mm/vmscan.c --- v2.3.43/linux/mm/vmscan.c Thu Feb 10 17:11:23 2000 +++ linux/mm/vmscan.c Fri Feb 11 08:38:35 2000 @@ -457,12 +457,11 @@ * The background pageout daemon, started as a kernel thread * from the init process. * - * This basically executes once a second, trickling out pages - * so that we have _some_ free memory available even if there - * is no other activity that frees anything up. This is needed - * for things like routing etc, where we otherwise might have - * all activity going on in asynchronous contexts that cannot - * page things out. + * This basically trickles out pages so that we have _some_ + * free memory available even if there is no other activity + * that frees anything up. This is needed for things like routing + * etc, where we otherwise might have all activity going on in + * asynchronous contexts that cannot page things out. * * If there are applications that are active memory-allocators * (most normal use), this basically shouldn't matter. @@ -479,7 +478,7 @@ /* * Tell the memory management that we're a "memory allocator", * and that if we need more memory we should get access to it - * regardless (see "__get_free_pages()"). "kswapd" should + * regardless (see "__alloc_pages()"). "kswapd" should * never get caught in the normal page freeing logic. * * (Kswapd normally doesn't need memory anyway, but sometimes @@ -492,9 +491,6 @@ while (1) { /* - * Wake up once a second to see if we need to make - * more memory available. - * * If we actually get into a low-memory situation, * the processes needing more memory will wake us * up on a more timely basis. diff -u --recursive --new-file v2.3.43/linux/net/atm/clip.c linux/net/atm/clip.c --- v2.3.43/linux/net/atm/clip.c Thu Feb 10 17:11:23 2000 +++ linux/net/atm/clip.c Thu Feb 10 19:00:35 2000 @@ -223,10 +223,8 @@ DPRINTK("clip_pop(vcc %p)\n",vcc); CLIP_VCC(vcc)->old_pop(vcc,skb); /* skb->dev == NULL in outbound ARP packets */ - if (atm_may_send(vcc,0) && skb->dev) { - skb->dev->tbusy = 0; - mark_bh(NET_BH); - } + if (atm_may_send(vcc,0) && skb->dev) + netif_wake_queue(skb->dev); } @@ -403,7 +401,8 @@ ((u16 *) here)[3] = skb->protocol; } atomic_add(skb->truesize,&vcc->tx_inuse); - dev->tbusy = !atm_may_send(vcc,0); + if (!atm_may_send(vcc,0)) + netif_stop_queue(dev); ATM_SKB(skb)->iovcnt = 0; ATM_SKB(skb)->atm_options = vcc->atm_options; entry->vccs->last_use = jiffies; diff -u --recursive --new-file v2.3.43/linux/net/core/skbuff.c linux/net/core/skbuff.c --- v2.3.43/linux/net/core/skbuff.c Thu Feb 10 17:11:24 2000 +++ linux/net/core/skbuff.c Sat Feb 12 09:52:04 2000 @@ -4,7 +4,7 @@ * Authors: Alan Cox * Florian La Roche * - * Version: $Id: skbuff.c,v 1.66 2000/02/09 21:11:30 davem Exp $ + * Version: $Id: skbuff.c,v 1.67 2000/02/11 22:27:23 davem Exp $ * * Fixes: * Alan Cox : Fixed the worst of the load balancer bugs. @@ -49,6 +49,7 @@ #include #include #include +#include #include #include diff -u --recursive --new-file v2.3.43/linux/net/decnet/af_decnet.c linux/net/decnet/af_decnet.c --- v2.3.43/linux/net/decnet/af_decnet.c Tue Jan 11 22:31:46 2000 +++ linux/net/decnet/af_decnet.c Sat Feb 12 09:52:04 2000 @@ -2080,8 +2080,8 @@ #ifdef CONFIG_DECNET_RAW proc_net_create("decnet_raw", 0, dn_raw_get_info); #endif - dn_dev_init(); dn_neigh_init(); + dn_dev_init(); dn_route_init(); #ifdef CONFIG_DECNET_ROUTER @@ -2149,8 +2149,8 @@ unregister_netdevice_notifier(&dn_dev_notifier); dn_route_cleanup(); - dn_neigh_cleanup(); dn_dev_cleanup(); + dn_neigh_cleanup(); #ifdef CONFIG_DECNET_ROUTER dn_fib_cleanup(); diff -u --recursive --new-file v2.3.43/linux/net/ipv4/tcp_ipv4.c linux/net/ipv4/tcp_ipv4.c --- v2.3.43/linux/net/ipv4/tcp_ipv4.c Thu Feb 10 17:11:24 2000 +++ linux/net/ipv4/tcp_ipv4.c Sat Feb 12 09:52:04 2000 @@ -5,7 +5,7 @@ * * Implementation of the Transmission Control Protocol(TCP). * - * Version: $Id: tcp_ipv4.c,v 1.199 2000/02/08 21:27:17 davem Exp $ + * Version: $Id: tcp_ipv4.c,v 1.200 2000/02/11 22:27:26 davem Exp $ * * IPv4 specific functions * @@ -51,6 +51,7 @@ #include #include #include +#include #include #include diff -u --recursive --new-file v2.3.43/linux/net/socket.c linux/net/socket.c --- v2.3.43/linux/net/socket.c Thu Feb 10 17:11:25 2000 +++ linux/net/socket.c Sat Feb 12 09:52:04 2000 @@ -69,6 +69,7 @@ #include #include #include +#include #if defined(CONFIG_KMOD) && defined(CONFIG_NET) #include @@ -98,6 +99,10 @@ static int sock_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); static int sock_fasync(int fd, struct file *filp, int on); +static ssize_t sock_readv(struct file *file, const struct iovec *vector, + unsigned long count, loff_t *ppos); +static ssize_t sock_writev(struct file *file, const struct iovec *vector, + unsigned long count, loff_t *ppos); /* @@ -114,7 +119,9 @@ mmap: sock_mmap, open: sock_no_open, /* special open code to disallow open via /proc */ release: sock_close, - fasync: sock_fasync + fasync: sock_fasync, + readv: sock_readv, + writev: sock_writev }; /* @@ -512,6 +519,27 @@ return sock_sendmsg(sock, &msg, size); } +static ssize_t sock_readv(struct file *file, const struct iovec *vector, + unsigned long count, loff_t *ppos) +{ + size_t tot_len = 0; + int i; + for (i = 0 ; i < count ; i++) + tot_len += vector[i].iov_len; + return sock_readv_writev(VERIFY_WRITE, file->f_dentry->d_inode, + file, vector, count, tot_len); +} + +static ssize_t sock_writev(struct file *file, const struct iovec *vector, + unsigned long count, loff_t *ppos) +{ + size_t tot_len = 0; + int i; + for (i = 0 ; i < count ; i++) + tot_len += vector[i].iov_len; + return sock_readv_writev(VERIFY_READ, file->f_dentry->d_inode, + file, vector, count, tot_len); +} /* * With an ioctl arg may well be a user mode pointer, but we don't know what to do diff -u --recursive --new-file v2.3.43/linux/net/sunrpc/svcsock.c linux/net/sunrpc/svcsock.c --- v2.3.43/linux/net/sunrpc/svcsock.c Thu Feb 10 17:11:25 2000 +++ linux/net/sunrpc/svcsock.c Sat Feb 12 09:52:58 2000 @@ -64,7 +64,6 @@ static inline void svc_serv_enqueue(struct svc_serv *serv, struct svc_rqst *rqstp) { - BUG_TRAP(spin_is_locked(&serv->sv_lock)); rpc_append_list(&serv->sv_threads, rqstp); } @@ -74,7 +73,6 @@ static inline void svc_serv_dequeue(struct svc_serv *serv, struct svc_rqst *rqstp) { - BUG_TRAP(spin_is_locked(&serv->sv_lock)); rpc_remove_list(&serv->sv_threads, rqstp); } @@ -106,8 +104,6 @@ struct svc_serv *serv = svsk->sk_server; struct svc_rqst *rqstp; - BUG_TRAP(spin_is_locked(&svsk->sk_lock)); - /* NOTE: Local BH is already disabled by our caller. */ spin_lock(&serv->sv_lock); @@ -155,8 +151,6 @@ svc_sock_dequeue(struct svc_serv *serv) { struct svc_sock *svsk; - - BUG_TRAP(spin_is_locked(&serv->sv_lock)); if ((svsk = serv->sv_sockets) != NULL) rpc_remove_list(&serv->sv_sockets, svsk);