aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2006-01-17 10:29:06 -0500
committerJeff Garzik <jgarzik@pobox.com>2006-01-17 10:29:06 -0500
commitea9b395fe20ac74be788f415af2622ac8f0c35c7 (patch)
treed1653e1a4cbe360aa7132ea4e29ab92a02038224 /drivers/scsi
parent61420e147a706ee7c7a902008045547fb2a2a330 (diff)
parent1bc4ccfff8675adc3d96f91245eb7e2dc0043ca9 (diff)
Merge branch 'upstream'
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/.gitignore3
-rw-r--r--drivers/scsi/3w-9xxx.c7
-rw-r--r--drivers/scsi/3w-9xxx.h2
-rw-r--r--drivers/scsi/3w-xxxx.c7
-rw-r--r--drivers/scsi/3w-xxxx.h2
-rw-r--r--drivers/scsi/53c700.c6
-rw-r--r--drivers/scsi/53c700.h22
-rw-r--r--drivers/scsi/53c7xx.c7
-rw-r--r--drivers/scsi/BusLogic.c3
-rw-r--r--drivers/scsi/FlashPoint.c2
-rw-r--r--drivers/scsi/Kconfig23
-rw-r--r--drivers/scsi/Makefile5
-rw-r--r--drivers/scsi/NCR5380.c7
-rw-r--r--drivers/scsi/NCR53C9x.c5
-rw-r--r--drivers/scsi/aacraid/README74
-rw-r--r--drivers/scsi/aacraid/aacraid.h7
-rw-r--r--drivers/scsi/aacraid/commctrl.c4
-rw-r--r--drivers/scsi/aacraid/linit.c36
-rw-r--r--drivers/scsi/aha152x.c7
-rw-r--r--drivers/scsi/ahci.c11
-rw-r--r--drivers/scsi/aic7xxx/.gitignore6
-rw-r--r--drivers/scsi/aic7xxx/Kconfig.aic7xxx4
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.h39
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.reg60
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.seq241
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_core.c771
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_inline.h38
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.c73
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.h2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_pci.c24
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_pci.h5
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_reg.h_shipped646
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped507
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_seq.h_shipped1250
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm.c46
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm.h25
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_pci.c24
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_pci.h1
-rw-r--r--drivers/scsi/aic7xxx_old.c4
-rw-r--r--drivers/scsi/arm/Kconfig1
-rw-r--r--drivers/scsi/arm/acornscsi.c8
-rw-r--r--drivers/scsi/arm/arxescsi.c1
-rw-r--r--drivers/scsi/arm/cumana_1.c1
-rw-r--r--drivers/scsi/arm/cumana_2.c1
-rw-r--r--drivers/scsi/arm/eesox.c1
-rw-r--r--drivers/scsi/arm/powertec.c1
-rw-r--r--drivers/scsi/ata_piix.c5
-rw-r--r--drivers/scsi/atari_NCR5380.c7
-rw-r--r--drivers/scsi/blz1230.c4
-rw-r--r--drivers/scsi/blz2060.c4
-rw-r--r--drivers/scsi/ch.c38
-rw-r--r--drivers/scsi/constants.c118
-rw-r--r--drivers/scsi/cyberstorm.c4
-rw-r--r--drivers/scsi/cyberstormII.c4
-rw-r--r--drivers/scsi/dpt_i2o.c45
-rw-r--r--drivers/scsi/fastlane.c4
-rw-r--r--drivers/scsi/gdth.c2
-rw-r--r--drivers/scsi/hosts.c17
-rw-r--r--drivers/scsi/ide-scsi.c4
-rw-r--r--drivers/scsi/ipr.c19
-rw-r--r--drivers/scsi/ipr.h5
-rw-r--r--drivers/scsi/ips.c3
-rw-r--r--drivers/scsi/iscsi_tcp.c420
-rw-r--r--drivers/scsi/iscsi_tcp.h9
-rw-r--r--drivers/scsi/libata-core.c195
-rw-r--r--drivers/scsi/libata-scsi.c48
-rw-r--r--drivers/scsi/libata.h4
-rw-r--r--drivers/scsi/lpfc/lpfc.h14
-rw-r--r--drivers/scsi/lpfc/lpfc_attr.c92
-rw-r--r--drivers/scsi/lpfc/lpfc_crtn.h3
-rw-r--r--drivers/scsi/lpfc/lpfc_disc.h2
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c4
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c18
-rw-r--r--drivers/scsi/lpfc/lpfc_hw.h40
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c183
-rw-r--r--drivers/scsi/lpfc/lpfc_nportdisc.c69
-rw-r--r--drivers/scsi/lpfc/lpfc_scsi.c297
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c217
-rw-r--r--drivers/scsi/lpfc/lpfc_version.h2
-rw-r--r--drivers/scsi/mac53c94.c22
-rw-r--r--drivers/scsi/megaraid.c33
-rw-r--r--drivers/scsi/megaraid.h4
-rw-r--r--drivers/scsi/megaraid/Kconfig.megaraid2
-rw-r--r--drivers/scsi/megaraid/megaraid_mbox.c92
-rw-r--r--drivers/scsi/megaraid/megaraid_mbox.h4
-rw-r--r--drivers/scsi/megaraid/megaraid_mm.h1
-rw-r--r--drivers/scsi/megaraid/megaraid_sas.c25
-rw-r--r--drivers/scsi/mesh.c3
-rw-r--r--drivers/scsi/ncr53c8xx.c749
-rw-r--r--drivers/scsi/ncr53c8xx.h1263
-rw-r--r--drivers/scsi/oktagon_esp.c2
-rw-r--r--drivers/scsi/pcmcia/aha152x_stub.c99
-rw-r--r--drivers/scsi/pcmcia/fdomain_stub.c117
-rw-r--r--drivers/scsi/pcmcia/nsp_cs.c167
-rw-r--r--drivers/scsi/pcmcia/nsp_cs.h4
-rw-r--r--drivers/scsi/pcmcia/qlogic_stub.c127
-rw-r--r--drivers/scsi/pcmcia/sym53c500_cs.c133
-rw-r--r--drivers/scsi/qla2xxx/Kconfig79
-rw-r--r--drivers/scsi/qla2xxx/Makefile5
-rw-r--r--drivers/scsi/qla2xxx/ql2400.c111
-rw-r--r--drivers/scsi/qla2xxx/ql2400_fw.c12376
-rw-r--r--drivers/scsi/qla2xxx/qla_attr.c6
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c105
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.h4
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h24
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h10
-rw-r--r--drivers/scsi/qla2xxx/qla_gs.c8
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c272
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c14
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c107
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c202
-rw-r--r--drivers/scsi/qla2xxx/qla_sup.c3
-rw-r--r--drivers/scsi/qla2xxx/qla_version.h4
-rw-r--r--drivers/scsi/raid_class.c4
-rw-r--r--drivers/scsi/sata_mv.c1
-rw-r--r--drivers/scsi/sata_nv.c31
-rw-r--r--drivers/scsi/sata_promise.c17
-rw-r--r--drivers/scsi/sata_sil.c1
-rw-r--r--drivers/scsi/sata_sil24.c1
-rw-r--r--drivers/scsi/sata_sis.c1
-rw-r--r--drivers/scsi/sata_svw.c2
-rw-r--r--drivers/scsi/sata_sx4.c1
-rw-r--r--drivers/scsi/sata_uli.c1
-rw-r--r--drivers/scsi/sata_via.c1
-rw-r--r--drivers/scsi/sata_vsc.c1
-rw-r--r--drivers/scsi/scsi.c122
-rw-r--r--drivers/scsi/scsi_debug.c4
-rw-r--r--drivers/scsi/scsi_devinfo.c5
-rw-r--r--drivers/scsi/scsi_error.c47
-rw-r--r--drivers/scsi/scsi_lib.c358
-rw-r--r--drivers/scsi/scsi_priv.h11
-rw-r--r--drivers/scsi/scsi_proc.c17
-rw-r--r--drivers/scsi/scsi_scan.c34
-rw-r--r--drivers/scsi/scsi_sysfs.c44
-rw-r--r--drivers/scsi/scsi_transport_fc.c34
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c859
-rw-r--r--drivers/scsi/scsi_transport_sas.c58
-rw-r--r--drivers/scsi/scsi_transport_spi.c146
-rw-r--r--drivers/scsi/sd.c173
-rw-r--r--drivers/scsi/sg.c688
-rw-r--r--drivers/scsi/sr.c47
-rw-r--r--drivers/scsi/sr_ioctl.c202
-rw-r--r--drivers/scsi/sr_vendor.c4
-rw-r--r--drivers/scsi/st.c309
-rw-r--r--drivers/scsi/st.h14
-rw-r--r--drivers/scsi/sun3_NCR5380.c7
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_defs.h2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_fw.c18
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_fw.h6
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_fw1.h48
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_fw2.h52
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.c117
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.h2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.c164
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.h104
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_malloc.c4
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_nvram.c29
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_nvram.h4
-rw-r--r--drivers/scsi/sym53c8xx_comm.h792
-rw-r--r--drivers/scsi/sym53c8xx_defs.h1320
-rw-r--r--drivers/scsi/wd33c93.c4
161 files changed, 20538 insertions, 7470 deletions
diff --git a/drivers/scsi/.gitignore b/drivers/scsi/.gitignore
new file mode 100644
index 000000000000..b385af314356
--- /dev/null
+++ b/drivers/scsi/.gitignore
@@ -0,0 +1,3 @@
153c700_d.h
253c7xx_d.h
353c7xx_u.h
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index 3ff74f472249..31c497542272 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -73,6 +73,7 @@
73#include <linux/delay.h> 73#include <linux/delay.h>
74#include <linux/pci.h> 74#include <linux/pci.h>
75#include <linux/time.h> 75#include <linux/time.h>
76#include <linux/mutex.h>
76#include <asm/io.h> 77#include <asm/io.h>
77#include <asm/irq.h> 78#include <asm/irq.h>
78#include <asm/uaccess.h> 79#include <asm/uaccess.h>
@@ -615,7 +616,7 @@ static int twa_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int
615 void __user *argp = (void __user *)arg; 616 void __user *argp = (void __user *)arg;
616 617
617 /* Only let one of these through at a time */ 618 /* Only let one of these through at a time */
618 if (down_interruptible(&tw_dev->ioctl_sem)) { 619 if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) {
619 retval = TW_IOCTL_ERROR_OS_EINTR; 620 retval = TW_IOCTL_ERROR_OS_EINTR;
620 goto out; 621 goto out;
621 } 622 }
@@ -852,7 +853,7 @@ out3:
852 /* Now free ioctl buf memory */ 853 /* Now free ioctl buf memory */
853 dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_Ioctl_Buf_Apache) - 1, cpu_addr, dma_handle); 854 dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_Ioctl_Buf_Apache) - 1, cpu_addr, dma_handle);
854out2: 855out2:
855 up(&tw_dev->ioctl_sem); 856 mutex_unlock(&tw_dev->ioctl_lock);
856out: 857out:
857 return retval; 858 return retval;
858} /* End twa_chrdev_ioctl() */ 859} /* End twa_chrdev_ioctl() */
@@ -1182,7 +1183,7 @@ static int twa_initialize_device_extension(TW_Device_Extension *tw_dev)
1182 tw_dev->error_sequence_id = 1; 1183 tw_dev->error_sequence_id = 1;
1183 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; 1184 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
1184 1185
1185 init_MUTEX(&tw_dev->ioctl_sem); 1186 mutex_init(&tw_dev->ioctl_lock);
1186 init_waitqueue_head(&tw_dev->ioctl_wqueue); 1187 init_waitqueue_head(&tw_dev->ioctl_wqueue);
1187 1188
1188 retval = 0; 1189 retval = 0;
diff --git a/drivers/scsi/3w-9xxx.h b/drivers/scsi/3w-9xxx.h
index 46f22cdc8298..1b16d57f0314 100644
--- a/drivers/scsi/3w-9xxx.h
+++ b/drivers/scsi/3w-9xxx.h
@@ -672,7 +672,7 @@ typedef struct TAG_TW_Device_Extension {
672 u32 ioctl_msec; 672 u32 ioctl_msec;
673 int chrdev_request_id; 673 int chrdev_request_id;
674 wait_queue_head_t ioctl_wqueue; 674 wait_queue_head_t ioctl_wqueue;
675 struct semaphore ioctl_sem; 675 struct mutex ioctl_lock;
676 char aen_clobber; 676 char aen_clobber;
677 unsigned short working_srl; 677 unsigned short working_srl;
678 unsigned short working_branch; 678 unsigned short working_branch;
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index 283f6d25892b..25f678d0780b 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -203,6 +203,7 @@
203#include <linux/delay.h> 203#include <linux/delay.h>
204#include <linux/pci.h> 204#include <linux/pci.h>
205#include <linux/time.h> 205#include <linux/time.h>
206#include <linux/mutex.h>
206#include <asm/io.h> 207#include <asm/io.h>
207#include <asm/irq.h> 208#include <asm/irq.h>
208#include <asm/uaccess.h> 209#include <asm/uaccess.h>
@@ -888,7 +889,7 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int
888 dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl()\n"); 889 dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl()\n");
889 890
890 /* Only let one of these through at a time */ 891 /* Only let one of these through at a time */
891 if (down_interruptible(&tw_dev->ioctl_sem)) 892 if (mutex_lock_interruptible(&tw_dev->ioctl_lock))
892 return -EINTR; 893 return -EINTR;
893 894
894 /* First copy down the buffer length */ 895 /* First copy down the buffer length */
@@ -1029,7 +1030,7 @@ out2:
1029 /* Now free ioctl buf memory */ 1030 /* Now free ioctl buf memory */
1030 dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, cpu_addr, dma_handle); 1031 dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, cpu_addr, dma_handle);
1031out: 1032out:
1032 up(&tw_dev->ioctl_sem); 1033 mutex_unlock(&tw_dev->ioctl_lock);
1033 return retval; 1034 return retval;
1034} /* End tw_chrdev_ioctl() */ 1035} /* End tw_chrdev_ioctl() */
1035 1036
@@ -1270,7 +1271,7 @@ static int tw_initialize_device_extension(TW_Device_Extension *tw_dev)
1270 tw_dev->pending_tail = TW_Q_START; 1271 tw_dev->pending_tail = TW_Q_START;
1271 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; 1272 tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE;
1272 1273
1273 init_MUTEX(&tw_dev->ioctl_sem); 1274 mutex_init(&tw_dev->ioctl_lock);
1274 init_waitqueue_head(&tw_dev->ioctl_wqueue); 1275 init_waitqueue_head(&tw_dev->ioctl_wqueue);
1275 1276
1276 return 0; 1277 return 0;
diff --git a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h
index 4f81fc39ec57..31fe5ea15920 100644
--- a/drivers/scsi/3w-xxxx.h
+++ b/drivers/scsi/3w-xxxx.h
@@ -420,7 +420,7 @@ typedef struct TAG_TW_Device_Extension {
420 u32 max_sector_count; 420 u32 max_sector_count;
421 u32 aen_count; 421 u32 aen_count;
422 struct Scsi_Host *host; 422 struct Scsi_Host *host;
423 struct semaphore ioctl_sem; 423 struct mutex ioctl_lock;
424 unsigned short aen_queue[TW_Q_LENGTH]; 424 unsigned short aen_queue[TW_Q_LENGTH];
425 unsigned char aen_head; 425 unsigned char aen_head;
426 unsigned char aen_tail; 426 unsigned char aen_tail;
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index e7ad269041a4..4ce7438608ec 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -857,7 +857,7 @@ process_extended_message(struct Scsi_Host *host,
857 printk(KERN_INFO "scsi%d (%d:%d): Unexpected message %s: ", 857 printk(KERN_INFO "scsi%d (%d:%d): Unexpected message %s: ",
858 host->host_no, pun, lun, 858 host->host_no, pun, lun,
859 NCR_700_phase[(dsps & 0xf00) >> 8]); 859 NCR_700_phase[(dsps & 0xf00) >> 8]);
860 scsi_print_msg(hostdata->msgin); 860 spi_print_msg(hostdata->msgin);
861 printk("\n"); 861 printk("\n");
862 /* just reject it */ 862 /* just reject it */
863 hostdata->msgout[0] = A_REJECT_MSG; 863 hostdata->msgout[0] = A_REJECT_MSG;
@@ -887,7 +887,7 @@ process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata
887#ifdef NCR_700_DEBUG 887#ifdef NCR_700_DEBUG
888 printk("scsi%d (%d:%d): message %s: ", host->host_no, pun, lun, 888 printk("scsi%d (%d:%d): message %s: ", host->host_no, pun, lun,
889 NCR_700_phase[(dsps & 0xf00) >> 8]); 889 NCR_700_phase[(dsps & 0xf00) >> 8]);
890 scsi_print_msg(hostdata->msgin); 890 spi_print_msg(hostdata->msgin);
891 printk("\n"); 891 printk("\n");
892#endif 892#endif
893 893
@@ -939,7 +939,7 @@ process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata
939 host->host_no, pun, lun, 939 host->host_no, pun, lun,
940 NCR_700_phase[(dsps & 0xf00) >> 8]); 940 NCR_700_phase[(dsps & 0xf00) >> 8]);
941 941
942 scsi_print_msg(hostdata->msgin); 942 spi_print_msg(hostdata->msgin);
943 printk("\n"); 943 printk("\n");
944 /* just reject it */ 944 /* just reject it */
945 hostdata->msgout[0] = A_REJECT_MSG; 945 hostdata->msgout[0] = A_REJECT_MSG;
diff --git a/drivers/scsi/53c700.h b/drivers/scsi/53c700.h
index 362d78483d09..a8c83bb03630 100644
--- a/drivers/scsi/53c700.h
+++ b/drivers/scsi/53c700.h
@@ -238,21 +238,23 @@ struct NCR_700_Host_Parameters {
238#ifdef CONFIG_53C700_LE_ON_BE 238#ifdef CONFIG_53C700_LE_ON_BE
239#define bE (hostdata->force_le_on_be ? 0 : 3) 239#define bE (hostdata->force_le_on_be ? 0 : 3)
240#define bSWAP (hostdata->force_le_on_be) 240#define bSWAP (hostdata->force_le_on_be)
241/* This is terrible, but there's no raw version of ioread32. That means 241#define bEBus (!hostdata->force_le_on_be)
242 * that on a be board we swap twice (once in ioread32 and once again to
243 * get the value correct) */
244#define bS_to_io(x) ((hostdata->force_le_on_be) ? (x) : cpu_to_le32(x))
245#elif defined(__BIG_ENDIAN) 242#elif defined(__BIG_ENDIAN)
246#define bE 3 243#define bE 3
247#define bSWAP 0 244#define bSWAP 0
248#define bS_to_io(x) (x)
249#elif defined(__LITTLE_ENDIAN) 245#elif defined(__LITTLE_ENDIAN)
250#define bE 0 246#define bE 0
251#define bSWAP 0 247#define bSWAP 0
252#define bS_to_io(x) (x)
253#else 248#else
254#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined, did you include byteorder.h?" 249#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined, did you include byteorder.h?"
255#endif 250#endif
251#ifndef bEBus
252#ifdef CONFIG_53C700_BE_BUS
253#define bEBus 1
254#else
255#define bEBus 0
256#endif
257#endif
256#define bS_to_cpu(x) (bSWAP ? le32_to_cpu(x) : (x)) 258#define bS_to_cpu(x) (bSWAP ? le32_to_cpu(x) : (x))
257#define bS_to_host(x) (bSWAP ? cpu_to_le32(x) : (x)) 259#define bS_to_host(x) (bSWAP ? cpu_to_le32(x) : (x))
258 260
@@ -466,14 +468,15 @@ NCR_700_readl(struct Scsi_Host *host, __u32 reg)
466{ 468{
467 const struct NCR_700_Host_Parameters *hostdata 469 const struct NCR_700_Host_Parameters *hostdata
468 = (struct NCR_700_Host_Parameters *)host->hostdata[0]; 470 = (struct NCR_700_Host_Parameters *)host->hostdata[0];
469 __u32 value = ioread32(hostdata->base + reg); 471 __u32 value = bEBus ? ioread32be(hostdata->base + reg) :
472 ioread32(hostdata->base + reg);
470#if 1 473#if 1
471 /* sanity check the register */ 474 /* sanity check the register */
472 if((reg & 0x3) != 0) 475 if((reg & 0x3) != 0)
473 BUG(); 476 BUG();
474#endif 477#endif
475 478
476 return bS_to_io(value); 479 return value;
477} 480}
478 481
479static inline void 482static inline void
@@ -497,7 +500,8 @@ NCR_700_writel(__u32 value, struct Scsi_Host *host, __u32 reg)
497 BUG(); 500 BUG();
498#endif 501#endif
499 502
500 iowrite32(bS_to_io(value), hostdata->base + reg); 503 bEBus ? iowrite32be(value, hostdata->base + reg):
504 iowrite32(value, hostdata->base + reg);
501} 505}
502 506
503#endif 507#endif
diff --git a/drivers/scsi/53c7xx.c b/drivers/scsi/53c7xx.c
index 9cb5dd48383f..7894b8ea84bd 100644
--- a/drivers/scsi/53c7xx.c
+++ b/drivers/scsi/53c7xx.c
@@ -282,6 +282,7 @@
282#include "scsi.h" 282#include "scsi.h"
283#include <scsi/scsi_dbg.h> 283#include <scsi/scsi_dbg.h>
284#include <scsi/scsi_host.h> 284#include <scsi/scsi_host.h>
285#include <scsi/scsi_transport_spi.h>
285#include "53c7xx.h" 286#include "53c7xx.h"
286#include <linux/stat.h> 287#include <linux/stat.h>
287#include <linux/stddef.h> 288#include <linux/stddef.h>
@@ -1724,7 +1725,7 @@ NCR53c7xx_run_tests (struct Scsi_Host *host) {
1724 printk ("scsi%d : status ", host->host_no); 1725 printk ("scsi%d : status ", host->host_no);
1725 scsi_print_status (status); 1726 scsi_print_status (status);
1726 printk ("\nscsi%d : message ", host->host_no); 1727 printk ("\nscsi%d : message ", host->host_no);
1727 scsi_print_msg (&msg); 1728 spi_print_msg(&msg);
1728 printk ("\n"); 1729 printk ("\n");
1729 } else if (hostdata->test_completed == 3) { 1730 } else if (hostdata->test_completed == 3) {
1730 printk("scsi%d : test 2 no connection with target %d\n", 1731 printk("scsi%d : test 2 no connection with target %d\n",
@@ -2313,7 +2314,7 @@ NCR53c7x0_dstat_sir_intr (struct Scsi_Host *host, struct
2313 printk ("scsi%d : received message", host->host_no); 2314 printk ("scsi%d : received message", host->host_no);
2314 if (c) 2315 if (c)
2315 printk (" from target %d lun %d ", c->device->id, c->device->lun); 2316 printk (" from target %d lun %d ", c->device->id, c->device->lun);
2316 scsi_print_msg ((unsigned char *) hostdata->msg_buf); 2317 spi_print_msg((unsigned char *) hostdata->msg_buf);
2317 printk("\n"); 2318 printk("\n");
2318 } 2319 }
2319 2320
@@ -5540,7 +5541,7 @@ print_dsa (struct Scsi_Host *host, u32 *dsa, const char *prefix) {
5540 i > 0 && !check_address ((unsigned long) ptr, 1); 5541 i > 0 && !check_address ((unsigned long) ptr, 1);
5541 ptr += len, i -= len) { 5542 ptr += len, i -= len) {
5542 printk(" "); 5543 printk(" ");
5543 len = scsi_print_msg (ptr); 5544 len = spi_print_msg(ptr);
5544 printk("\n"); 5545 printk("\n");
5545 if (!len) 5546 if (!len)
5546 break; 5547 break;
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 9d6040bfa064..1c459343292b 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -2216,6 +2216,7 @@ static int __init BusLogic_init(void)
2216 HostAdapter->PCI_Address = ProbeInfo->PCI_Address; 2216 HostAdapter->PCI_Address = ProbeInfo->PCI_Address;
2217 HostAdapter->Bus = ProbeInfo->Bus; 2217 HostAdapter->Bus = ProbeInfo->Bus;
2218 HostAdapter->Device = ProbeInfo->Device; 2218 HostAdapter->Device = ProbeInfo->Device;
2219 HostAdapter->PCI_Device = ProbeInfo->PCI_Device;
2219 HostAdapter->IRQ_Channel = ProbeInfo->IRQ_Channel; 2220 HostAdapter->IRQ_Channel = ProbeInfo->IRQ_Channel;
2220 HostAdapter->AddressCount = BusLogic_HostAdapterAddressCount[HostAdapter->HostAdapterType]; 2221 HostAdapter->AddressCount = BusLogic_HostAdapterAddressCount[HostAdapter->HostAdapterType];
2221 /* 2222 /*
@@ -2296,7 +2297,7 @@ static int __init BusLogic_init(void)
2296 scsi_host_put(Host); 2297 scsi_host_put(Host);
2297 } else { 2298 } else {
2298 BusLogic_InitializeHostStructure(HostAdapter, Host); 2299 BusLogic_InitializeHostStructure(HostAdapter, Host);
2299 scsi_add_host(Host, NULL); 2300 scsi_add_host(Host, HostAdapter->PCI_Device ? &HostAdapter->PCI_Device->dev : NULL);
2300 scsi_scan_host(Host); 2301 scsi_scan_host(Host);
2301 BusLogicHostAdapterCount++; 2302 BusLogicHostAdapterCount++;
2302 } 2303 }
diff --git a/drivers/scsi/FlashPoint.c b/drivers/scsi/FlashPoint.c
index 5beed4f6d985..8d64f0bed628 100644
--- a/drivers/scsi/FlashPoint.c
+++ b/drivers/scsi/FlashPoint.c
@@ -149,7 +149,7 @@ typedef SCCBMGR_INFO * PSCCBMGR_INFO;
149#define PCI_BUS_CARD 0x03 149#define PCI_BUS_CARD 0x03
150#define VESA_BUS_CARD 0x04 150#define VESA_BUS_CARD 0x04
151 151
152/* SCCB struc used for both SCCB and UCB manager compiles! 152/* SCCB struct used for both SCCB and UCB manager compiles!
153 * The UCB Manager treats the SCCB as it's 'native hardware structure' 153 * The UCB Manager treats the SCCB as it's 'native hardware structure'
154 */ 154 */
155 155
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 20dd85a77813..3c606cf8c8ca 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -336,6 +336,7 @@ config SCSI_ACARD
336config SCSI_AHA152X 336config SCSI_AHA152X
337 tristate "Adaptec AHA152X/2825 support" 337 tristate "Adaptec AHA152X/2825 support"
338 depends on ISA && SCSI && !64BIT 338 depends on ISA && SCSI && !64BIT
339 select SCSI_SPI_ATTRS
339 ---help--- 340 ---help---
340 This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825 341 This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825
341 SCSI host adapters. It also works for the AVA-1505, but the IRQ etc. 342 SCSI host adapters. It also works for the AVA-1505, but the IRQ etc.
@@ -623,6 +624,7 @@ config SCSI_OMIT_FLASHPOINT
623config SCSI_DMX3191D 624config SCSI_DMX3191D
624 tristate "DMX3191D SCSI support" 625 tristate "DMX3191D SCSI support"
625 depends on PCI && SCSI 626 depends on PCI && SCSI
627 select SCSI_SPI_ATTRS
626 help 628 help
627 This is support for Domex DMX3191D SCSI Host Adapters. 629 This is support for Domex DMX3191D SCSI Host Adapters.
628 630
@@ -632,6 +634,7 @@ config SCSI_DMX3191D
632config SCSI_DTC3280 634config SCSI_DTC3280
633 tristate "DTC3180/3280 SCSI support" 635 tristate "DTC3180/3280 SCSI support"
634 depends on ISA && SCSI 636 depends on ISA && SCSI
637 select SCSI_SPI_ATTRS
635 help 638 help
636 This is support for DTC 3180/3280 SCSI Host Adapters. Please read 639 This is support for DTC 3180/3280 SCSI Host Adapters. Please read
637 the SCSI-HOWTO, available from 640 the SCSI-HOWTO, available from
@@ -752,6 +755,7 @@ config SCSI_GDTH
752config SCSI_GENERIC_NCR5380 755config SCSI_GENERIC_NCR5380
753 tristate "Generic NCR5380/53c400 SCSI PIO support" 756 tristate "Generic NCR5380/53c400 SCSI PIO support"
754 depends on ISA && SCSI 757 depends on ISA && SCSI
758 select SCSI_SPI_ATTRS
755 ---help--- 759 ---help---
756 This is a driver for the old NCR 53c80 series of SCSI controllers 760 This is a driver for the old NCR 53c80 series of SCSI controllers
757 on boards using PIO. Most boards such as the Trantor T130 fit this 761 on boards using PIO. Most boards such as the Trantor T130 fit this
@@ -771,6 +775,7 @@ config SCSI_GENERIC_NCR5380
771config SCSI_GENERIC_NCR5380_MMIO 775config SCSI_GENERIC_NCR5380_MMIO
772 tristate "Generic NCR5380/53c400 SCSI MMIO support" 776 tristate "Generic NCR5380/53c400 SCSI MMIO support"
773 depends on ISA && SCSI 777 depends on ISA && SCSI
778 select SCSI_SPI_ATTRS
774 ---help--- 779 ---help---
775 This is a driver for the old NCR 53c80 series of SCSI controllers 780 This is a driver for the old NCR 53c80 series of SCSI controllers
776 on boards using memory mapped I/O. 781 on boards using memory mapped I/O.
@@ -909,7 +914,7 @@ config SCSI_INIA100
909 914
910config SCSI_PPA 915config SCSI_PPA
911 tristate "IOMEGA parallel port (ppa - older drives)" 916 tristate "IOMEGA parallel port (ppa - older drives)"
912 depends on SCSI && PARPORT 917 depends on SCSI && PARPORT_PC
913 ---help--- 918 ---help---
914 This driver supports older versions of IOMEGA's parallel port ZIP 919 This driver supports older versions of IOMEGA's parallel port ZIP
915 drive (a 100 MB removable media device). 920 drive (a 100 MB removable media device).
@@ -936,7 +941,7 @@ config SCSI_PPA
936 941
937config SCSI_IMM 942config SCSI_IMM
938 tristate "IOMEGA parallel port (imm - newer drives)" 943 tristate "IOMEGA parallel port (imm - newer drives)"
939 depends on SCSI && PARPORT 944 depends on SCSI && PARPORT_PC
940 ---help--- 945 ---help---
941 This driver supports newer versions of IOMEGA's parallel port ZIP 946 This driver supports newer versions of IOMEGA's parallel port ZIP
942 drive (a 100 MB removable media device). 947 drive (a 100 MB removable media device).
@@ -963,7 +968,7 @@ config SCSI_IMM
963 968
964config SCSI_IZIP_EPP16 969config SCSI_IZIP_EPP16
965 bool "ppa/imm option - Use slow (but safe) EPP-16" 970 bool "ppa/imm option - Use slow (but safe) EPP-16"
966 depends on PARPORT && (SCSI_PPA || SCSI_IMM) 971 depends on SCSI_PPA || SCSI_IMM
967 ---help--- 972 ---help---
968 EPP (Enhanced Parallel Port) is a standard for parallel ports which 973 EPP (Enhanced Parallel Port) is a standard for parallel ports which
969 allows them to act as expansion buses that can handle up to 64 974 allows them to act as expansion buses that can handle up to 64
@@ -978,7 +983,7 @@ config SCSI_IZIP_EPP16
978 983
979config SCSI_IZIP_SLOW_CTR 984config SCSI_IZIP_SLOW_CTR
980 bool "ppa/imm option - Assume slow parport control register" 985 bool "ppa/imm option - Assume slow parport control register"
981 depends on PARPORT && (SCSI_PPA || SCSI_IMM) 986 depends on SCSI_PPA || SCSI_IMM
982 help 987 help
983 Some parallel ports are known to have excessive delays between 988 Some parallel ports are known to have excessive delays between
984 changing the parallel port control register and good data being 989 changing the parallel port control register and good data being
@@ -1254,6 +1259,7 @@ config SCSI_MCA_53C9X
1254config SCSI_PAS16 1259config SCSI_PAS16
1255 tristate "PAS16 SCSI support" 1260 tristate "PAS16 SCSI support"
1256 depends on ISA && SCSI 1261 depends on ISA && SCSI
1262 select SCSI_SPI_ATTRS
1257 ---help--- 1263 ---help---
1258 This is support for a SCSI host adapter. It is explained in section 1264 This is support for a SCSI host adapter. It is explained in section
1259 3.10 of the SCSI-HOWTO, available from 1265 3.10 of the SCSI-HOWTO, available from
@@ -1423,6 +1429,7 @@ config SCSI_DC390T
1423config SCSI_T128 1429config SCSI_T128
1424 tristate "Trantor T128/T128F/T228 SCSI support" 1430 tristate "Trantor T128/T128F/T228 SCSI support"
1425 depends on ISA && SCSI 1431 depends on ISA && SCSI
1432 select SCSI_SPI_ATTRS
1426 ---help--- 1433 ---help---
1427 This is support for a SCSI host adapter. It is explained in section 1434 This is support for a SCSI host adapter. It is explained in section
1428 3.11 of the SCSI-HOWTO, available from 1435 3.11 of the SCSI-HOWTO, available from
@@ -1681,6 +1688,7 @@ config OKTAGON_SCSI
1681config ATARI_SCSI 1688config ATARI_SCSI
1682 tristate "Atari native SCSI support" 1689 tristate "Atari native SCSI support"
1683 depends on ATARI && SCSI && BROKEN 1690 depends on ATARI && SCSI && BROKEN
1691 select SCSI_SPI_ATTRS
1684 ---help--- 1692 ---help---
1685 If you have an Atari with built-in NCR5380 SCSI controller (TT, 1693 If you have an Atari with built-in NCR5380 SCSI controller (TT,
1686 Falcon, ...) say Y to get it supported. Of course also, if you have 1694 Falcon, ...) say Y to get it supported. Of course also, if you have
@@ -1722,6 +1730,7 @@ config TT_DMA_EMUL
1722config MAC_SCSI 1730config MAC_SCSI
1723 bool "Macintosh NCR5380 SCSI" 1731 bool "Macintosh NCR5380 SCSI"
1724 depends on MAC && SCSI=y 1732 depends on MAC && SCSI=y
1733 select SCSI_SPI_ATTRS
1725 help 1734 help
1726 This is the NCR 5380 SCSI controller included on most of the 68030 1735 This is the NCR 5380 SCSI controller included on most of the 68030
1727 based Macintoshes. If you have one of these say Y and read the 1736 based Macintoshes. If you have one of these say Y and read the
@@ -1743,6 +1752,7 @@ config SCSI_MAC_ESP
1743config MVME147_SCSI 1752config MVME147_SCSI
1744 bool "WD33C93 SCSI driver for MVME147" 1753 bool "WD33C93 SCSI driver for MVME147"
1745 depends on MVME147 && SCSI=y 1754 depends on MVME147 && SCSI=y
1755 select SCSI_SPI_ATTRS
1746 help 1756 help
1747 Support for the on-board SCSI controller on the Motorola MVME147 1757 Support for the on-board SCSI controller on the Motorola MVME147
1748 single-board computer. 1758 single-board computer.
@@ -1750,6 +1760,7 @@ config MVME147_SCSI
1750config MVME16x_SCSI 1760config MVME16x_SCSI
1751 bool "NCR53C710 SCSI driver for MVME16x" 1761 bool "NCR53C710 SCSI driver for MVME16x"
1752 depends on MVME16x && SCSI && BROKEN 1762 depends on MVME16x && SCSI && BROKEN
1763 select SCSI_SPI_ATTRS
1753 help 1764 help
1754 The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710 1765 The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710
1755 SCSI controller chip. Almost everyone using one of these boards 1766 SCSI controller chip. Almost everyone using one of these boards
@@ -1758,6 +1769,7 @@ config MVME16x_SCSI
1758config BVME6000_SCSI 1769config BVME6000_SCSI
1759 bool "NCR53C710 SCSI driver for BVME6000" 1770 bool "NCR53C710 SCSI driver for BVME6000"
1760 depends on BVME6000 && SCSI && BROKEN 1771 depends on BVME6000 && SCSI && BROKEN
1772 select SCSI_SPI_ATTRS
1761 help 1773 help
1762 The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710 1774 The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710
1763 SCSI controller chip. Almost everyone using one of these boards 1775 SCSI controller chip. Almost everyone using one of these boards
@@ -1774,6 +1786,7 @@ config SCSI_NCR53C7xx_FAST
1774config SUN3_SCSI 1786config SUN3_SCSI
1775 tristate "Sun3 NCR5380 SCSI" 1787 tristate "Sun3 NCR5380 SCSI"
1776 depends on SUN3 && SCSI && BROKEN 1788 depends on SUN3 && SCSI && BROKEN
1789 select SCSI_SPI_ATTRS
1777 help 1790 help
1778 This option will enable support for the OBIO (onboard io) NCR5380 1791 This option will enable support for the OBIO (onboard io) NCR5380
1779 SCSI controller found in the Sun 3/50 and 3/60, as well as for 1792 SCSI controller found in the Sun 3/50 and 3/60, as well as for
@@ -1802,7 +1815,7 @@ config SCSI_SUNESP
1802 1815
1803config ZFCP 1816config ZFCP
1804 tristate "FCP host bus adapter driver for IBM eServer zSeries" 1817 tristate "FCP host bus adapter driver for IBM eServer zSeries"
1805 depends on ARCH_S390 && QDIO && SCSI 1818 depends on S390 && QDIO && SCSI
1806 select SCSI_FC_ATTRS 1819 select SCSI_FC_ATTRS
1807 help 1820 help
1808 If you want to access SCSI devices attached to your IBM eServer 1821 If you want to access SCSI devices attached to your IBM eServer
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index f062ea0f813a..320e765fa0cd 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -45,7 +45,7 @@ obj-$(CONFIG_CYBERSTORMII_SCSI) += NCR53C9x.o cyberstormII.o
45obj-$(CONFIG_BLZ2060_SCSI) += NCR53C9x.o blz2060.o 45obj-$(CONFIG_BLZ2060_SCSI) += NCR53C9x.o blz2060.o
46obj-$(CONFIG_BLZ1230_SCSI) += NCR53C9x.o blz1230.o 46obj-$(CONFIG_BLZ1230_SCSI) += NCR53C9x.o blz1230.o
47obj-$(CONFIG_FASTLANE_SCSI) += NCR53C9x.o fastlane.o 47obj-$(CONFIG_FASTLANE_SCSI) += NCR53C9x.o fastlane.o
48obj-$(CONFIG_OKTAGON_SCSI) += NCR53C9x.o oktagon_esp.o oktagon_io.o 48obj-$(CONFIG_OKTAGON_SCSI) += NCR53C9x.o oktagon_esp_mod.o
49obj-$(CONFIG_ATARI_SCSI) += atari_scsi.o 49obj-$(CONFIG_ATARI_SCSI) += atari_scsi.o
50obj-$(CONFIG_MAC_SCSI) += mac_scsi.o 50obj-$(CONFIG_MAC_SCSI) += mac_scsi.o
51obj-$(CONFIG_SCSI_MAC_ESP) += mac_esp.o NCR53C9x.o 51obj-$(CONFIG_SCSI_MAC_ESP) += mac_esp.o NCR53C9x.o
@@ -80,7 +80,7 @@ obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o
80obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o 80obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o
81obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o 81obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o
82obj-$(CONFIG_SCSI_QLOGIC_1280) += qla1280.o 82obj-$(CONFIG_SCSI_QLOGIC_1280) += qla1280.o
83obj-$(CONFIG_SCSI_QLA2XXX) += qla2xxx/ 83obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx/
84obj-$(CONFIG_SCSI_LPFC) += lpfc/ 84obj-$(CONFIG_SCSI_LPFC) += lpfc/
85obj-$(CONFIG_SCSI_PAS16) += pas16.o 85obj-$(CONFIG_SCSI_PAS16) += pas16.o
86obj-$(CONFIG_SCSI_SEAGATE) += seagate.o 86obj-$(CONFIG_SCSI_SEAGATE) += seagate.o
@@ -164,6 +164,7 @@ CFLAGS_ncr53c8xx.o := $(ncr53c8xx-flags-y) $(ncr53c8xx-flags-m)
164zalon7xx-objs := zalon.o ncr53c8xx.o 164zalon7xx-objs := zalon.o ncr53c8xx.o
165NCR_Q720_mod-objs := NCR_Q720.o ncr53c8xx.o 165NCR_Q720_mod-objs := NCR_Q720.o ncr53c8xx.o
166libata-objs := libata-core.o libata-scsi.o 166libata-objs := libata-core.o libata-scsi.o
167oktagon_esp_mod-objs := oktagon_esp.o oktagon_io.o
167 168
168# Files generated that shall be removed upon make clean 169# Files generated that shall be removed upon make clean
169clean-files := 53c7xx_d.h 53c700_d.h \ 170clean-files := 53c7xx_d.h 53c700_d.h \
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
index cba9655d0f14..9f0ddbe6dc76 100644
--- a/drivers/scsi/NCR5380.c
+++ b/drivers/scsi/NCR5380.c
@@ -87,6 +87,7 @@
87 * the high level code. 87 * the high level code.
88 */ 88 */
89#include <scsi/scsi_dbg.h> 89#include <scsi/scsi_dbg.h>
90#include <scsi/scsi_transport_spi.h>
90 91
91#ifndef NDEBUG 92#ifndef NDEBUG
92#define NDEBUG 0 93#define NDEBUG 0
@@ -2377,7 +2378,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) {
2377 * 3..length+1 arguments 2378 * 3..length+1 arguments
2378 * 2379 *
2379 * Start the extended message buffer with the EXTENDED_MESSAGE 2380 * Start the extended message buffer with the EXTENDED_MESSAGE
2380 * byte, since scsi_print_msg() wants the whole thing. 2381 * byte, since spi_print_msg() wants the whole thing.
2381 */ 2382 */
2382 extended_msg[0] = EXTENDED_MESSAGE; 2383 extended_msg[0] = EXTENDED_MESSAGE;
2383 /* Accept first byte by clearing ACK */ 2384 /* Accept first byte by clearing ACK */
@@ -2424,7 +2425,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) {
2424 default: 2425 default:
2425 if (!tmp) { 2426 if (!tmp) {
2426 printk("scsi%d: rejecting message ", instance->host_no); 2427 printk("scsi%d: rejecting message ", instance->host_no);
2427 scsi_print_msg(extended_msg); 2428 spi_print_msg(extended_msg);
2428 printk("\n"); 2429 printk("\n");
2429 } else if (tmp != EXTENDED_MESSAGE) 2430 } else if (tmp != EXTENDED_MESSAGE)
2430 scmd_printk(KERN_INFO, cmd, 2431 scmd_printk(KERN_INFO, cmd,
@@ -2560,7 +2561,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) {
2560 2561
2561 if (!(msg[0] & 0x80)) { 2562 if (!(msg[0] & 0x80)) {
2562 printk(KERN_ERR "scsi%d : expecting IDENTIFY message, got ", instance->host_no); 2563 printk(KERN_ERR "scsi%d : expecting IDENTIFY message, got ", instance->host_no);
2563 scsi_print_msg(msg); 2564 spi_print_msg(msg);
2564 abort = 1; 2565 abort = 1;
2565 } else { 2566 } else {
2566 /* Accept message by clearing ACK */ 2567 /* Accept message by clearing ACK */
diff --git a/drivers/scsi/NCR53C9x.c b/drivers/scsi/NCR53C9x.c
index 640590bd014a..c7dd0154d012 100644
--- a/drivers/scsi/NCR53C9x.c
+++ b/drivers/scsi/NCR53C9x.c
@@ -1799,6 +1799,7 @@ static int esp_do_data(struct NCR_ESP *esp, struct ESP_regs *eregs)
1799 */ 1799 */
1800 int oldphase, i = 0; /* or where we left off last time ?? esp->current_data ?? */ 1800 int oldphase, i = 0; /* or where we left off last time ?? esp->current_data ?? */
1801 int fifocnt = 0; 1801 int fifocnt = 0;
1802 unsigned char *p = phys_to_virt((unsigned long)SCptr->SCp.ptr);
1802 1803
1803 oldphase = esp_read(eregs->esp_status) & ESP_STAT_PMASK; 1804 oldphase = esp_read(eregs->esp_status) & ESP_STAT_PMASK;
1804 1805
@@ -1860,7 +1861,7 @@ static int esp_do_data(struct NCR_ESP *esp, struct ESP_regs *eregs)
1860 1861
1861 /* read fifo */ 1862 /* read fifo */
1862 for(j=0;j<fifocnt;j++) 1863 for(j=0;j<fifocnt;j++)
1863 SCptr->SCp.ptr[i++] = esp_read(eregs->esp_fdata); 1864 p[i++] = esp_read(eregs->esp_fdata);
1864 1865
1865 ESPDATA(("(%d) ", i)); 1866 ESPDATA(("(%d) ", i));
1866 1867
@@ -1882,7 +1883,7 @@ static int esp_do_data(struct NCR_ESP *esp, struct ESP_regs *eregs)
1882 1883
1883 /* fill fifo */ 1884 /* fill fifo */
1884 for(j=0;j<this_count;j++) 1885 for(j=0;j<this_count;j++)
1885 esp_write(eregs->esp_fdata, SCptr->SCp.ptr[i++]); 1886 esp_write(eregs->esp_fdata, p[i++]);
1886 1887
1887 /* how many left if this goes out ?? */ 1888 /* how many left if this goes out ?? */
1888 hmuch -= this_count; 1889 hmuch -= this_count;
diff --git a/drivers/scsi/aacraid/README b/drivers/scsi/aacraid/README
deleted file mode 100644
index 4193865d419c..000000000000
--- a/drivers/scsi/aacraid/README
+++ /dev/null
@@ -1,74 +0,0 @@
1AACRAID Driver for Linux (take two)
2
3Introduction
4-------------------------
5The aacraid driver adds support for Adaptec (http://www.adaptec.com)
6RAID controllers. This is a major rewrite from the original
7Adaptec supplied driver. It has signficantly cleaned up both the code
8and the running binary size (the module is less than half the size of
9the original).
10
11Supported Cards/Chipsets
12-------------------------
13 Adaptec 2020S
14 Adaptec 2025S
15 Adaptec 2120S
16 Adaptec 2130S
17 Adaptec 2200S
18 Adaptec 2230S
19 Adaptec 2240S
20 Adaptec 2410SA
21 Adaptec 2610SA
22 Adaptec 2810SA
23 Adaptec 21610SA
24 Adaptec 3230S
25 Adaptec 3240S
26 Adaptec 4000SAS
27 Adaptec 4005SAS
28 Adaptec 4800SAS
29 Adaptec 4805SAS
30 Adaptec 5400S
31 Dell PERC 2 Quad Channel
32 Dell PERC 2/Si
33 Dell PERC 3/Si
34 Dell PERC 3/Di
35 Dell CERC 2
36 HP NetRAID-4M
37 Legend S220
38 Legend S230
39 IBM ServeRAID 8i
40 ICP 9014R0
41 ICP 9024R0
42 ICP 9047MA
43 ICP 9087MA
44 ICP 9085LI
45 ICP 5085AU
46
47People
48-------------------------
49Alan Cox <alan@redhat.com>
50Christoph Hellwig <hch@infradead.org> (updates for new-style PCI probing and SCSI host registration,
51 small cleanups/fixes)
52Matt Domsch <matt_domsch@dell.com> (revision ioctl, adapter messages)
53Deanna Bonds (non-DASD support, PAE fibs and 64 bit, added new adaptec controllers
54 added new ioctls, changed scsi interface to use new error handler,
55 increased the number of fibs and outstanding commands to a container)
56
57 (fixed 64bit and 64G memory model, changed confusing naming convention
58 where fibs that go to the hardware are consistently called hw_fibs and
59 not just fibs like the name of the driver tracking structure)
60Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations.
61
62Original Driver
63-------------------------
64Adaptec Unix OEM Product Group
65
66Mailing List
67-------------------------
68linux-scsi@vger.kernel.org (Interested parties troll here)
69Also note this is very different to Brian's original driver
70so don't expect him to support it.
71Adaptec does support this driver. Contact either tech support or Mark Salyzyn.
72
73Original by Brian Boerner February 2001
74Rewritten by Alan Cox, November 2001
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 30fd8d6e3f31..66dbb6d2c506 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -532,6 +532,13 @@ struct aac_driver_ident
532#define AAC_QUIRK_MASTER 0x0008 532#define AAC_QUIRK_MASTER 0x0008
533 533
534/* 534/*
535 * Some adapter firmware perform poorly when it must split up scatter gathers
536 * in order to deal with the limits of the underlying CHIM. This limit in this
537 * class of adapters is 17 scatter gather elements.
538 */
539#define AAC_QUIRK_17SG 0x0010
540
541/*
535 * The adapter interface specs all queues to be located in the same 542 * The adapter interface specs all queues to be located in the same
536 * physically contigous block. The host structure that defines the 543 * physically contigous block. The host structure that defines the
537 * commuication queues will assume they are each a separate physically 544 * commuication queues will assume they are each a separate physically
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c
index ef623bd965f5..4fe79cd7c957 100644
--- a/drivers/scsi/aacraid/commctrl.c
+++ b/drivers/scsi/aacraid/commctrl.c
@@ -85,6 +85,10 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg)
85 if (size < le16_to_cpu(kfib->header.SenderSize)) 85 if (size < le16_to_cpu(kfib->header.SenderSize))
86 size = le16_to_cpu(kfib->header.SenderSize); 86 size = le16_to_cpu(kfib->header.SenderSize);
87 if (size > dev->max_fib_size) { 87 if (size > dev->max_fib_size) {
88 if (size > 2048) {
89 retval = -EINVAL;
90 goto cleanup;
91 }
88 /* Highjack the hw_fib */ 92 /* Highjack the hw_fib */
89 hw_fib = fibptr->hw_fib; 93 hw_fib = fibptr->hw_fib;
90 hw_fib_pa = fibptr->hw_fib_pa; 94 hw_fib_pa = fibptr->hw_fib_pa;
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 3cb68af90456..0bf5f9a943e8 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -46,7 +46,6 @@
46#include <linux/slab.h> 46#include <linux/slab.h>
47#include <linux/spinlock.h> 47#include <linux/spinlock.h>
48#include <linux/syscalls.h> 48#include <linux/syscalls.h>
49#include <linux/ioctl32.h>
50#include <linux/delay.h> 49#include <linux/delay.h>
51#include <linux/smp_lock.h> 50#include <linux/smp_lock.h>
52#include <asm/semaphore.h> 51#include <asm/semaphore.h>
@@ -201,10 +200,10 @@ static struct aac_driver_ident aac_drivers[] = {
201 { aac_rkt_init, "aacraid", "ADAPTEC ", "Callisto ", 2, AAC_QUIRK_MASTER }, /* Jupiter Platform */ 200 { aac_rkt_init, "aacraid", "ADAPTEC ", "Callisto ", 2, AAC_QUIRK_MASTER }, /* Jupiter Platform */
202 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2020SA ", 1 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */ 201 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2020SA ", 1 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
203 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2025SA ", 1 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */ 202 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2025SA ", 1 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */
204 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2410SA SATA ", 1 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */ 203 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2410SA SATA ", 1, AAC_QUIRK_17SG }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */
205 { aac_rx_init, "aacraid", "DELL ", "CERC SR2 ", 1 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */ 204 { aac_rx_init, "aacraid", "DELL ", "CERC SR2 ", 1, AAC_QUIRK_17SG }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */
206 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2810SA SATA ", 1 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */ 205 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2810SA SATA ", 1, AAC_QUIRK_17SG }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */
207 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-21610SA SATA", 1 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */ 206 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-21610SA SATA", 1, AAC_QUIRK_17SG }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */
208 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */ 207 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
209 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */ 208 { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */
210 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */ 209 { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */
@@ -575,7 +574,15 @@ static ssize_t aac_show_model(struct class_device *class_dev,
575 struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; 574 struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
576 int len; 575 int len;
577 576
578 len = snprintf(buf, PAGE_SIZE, "%s\n", 577 if (dev->supplement_adapter_info.AdapterTypeText[0]) {
578 char * cp = dev->supplement_adapter_info.AdapterTypeText;
579 while (*cp && *cp != ' ')
580 ++cp;
581 while (*cp == ' ')
582 ++cp;
583 len = snprintf(buf, PAGE_SIZE, "%s\n", cp);
584 } else
585 len = snprintf(buf, PAGE_SIZE, "%s\n",
579 aac_drivers[dev->cardtype].model); 586 aac_drivers[dev->cardtype].model);
580 return len; 587 return len;
581} 588}
@@ -586,7 +593,15 @@ static ssize_t aac_show_vendor(struct class_device *class_dev,
586 struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; 593 struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata;
587 int len; 594 int len;
588 595
589 len = snprintf(buf, PAGE_SIZE, "%s\n", 596 if (dev->supplement_adapter_info.AdapterTypeText[0]) {
597 char * cp = dev->supplement_adapter_info.AdapterTypeText;
598 while (*cp && *cp != ' ')
599 ++cp;
600 len = snprintf(buf, PAGE_SIZE, "%.*s\n",
601 (int)(cp - (char *)dev->supplement_adapter_info.AdapterTypeText),
602 dev->supplement_adapter_info.AdapterTypeText);
603 } else
604 len = snprintf(buf, PAGE_SIZE, "%s\n",
590 aac_drivers[dev->cardtype].vname); 605 aac_drivers[dev->cardtype].vname);
591 return len; 606 return len;
592} 607}
@@ -838,6 +853,13 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
838 = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; 853 = (aac->scsi_host_ptr->sg_tablesize * 8) + 112;
839 } 854 }
840 855
856 if ((aac_drivers[index].quirks & AAC_QUIRK_17SG) &&
857 (aac->scsi_host_ptr->sg_tablesize > 17)) {
858 aac->scsi_host_ptr->sg_tablesize = 17;
859 aac->scsi_host_ptr->max_sectors
860 = (aac->scsi_host_ptr->sg_tablesize * 8) + 112;
861 }
862
841 /* 863 /*
842 * Firware printf works only with older firmware. 864 * Firware printf works only with older firmware.
843 */ 865 */
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index 9df23b654cec..cb2ee25f213f 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -259,6 +259,7 @@
259#include "scsi.h" 259#include "scsi.h"
260#include <scsi/scsi_dbg.h> 260#include <scsi/scsi_dbg.h>
261#include <scsi/scsi_host.h> 261#include <scsi/scsi_host.h>
262#include <scsi/scsi_transport_spi.h>
262#include "aha152x.h" 263#include "aha152x.h"
263 264
264 265
@@ -1845,7 +1846,7 @@ static void msgi_run(struct Scsi_Host *shpnt)
1845#if defined(AHA152X_DEBUG) 1846#if defined(AHA152X_DEBUG)
1846 if (HOSTDATA(shpnt)->debug & debug_msgi) { 1847 if (HOSTDATA(shpnt)->debug & debug_msgi) {
1847 printk(INFO_LEAD "inbound message %02x ", CMDINFO(CURRENT_SC), MSGI(0)); 1848 printk(INFO_LEAD "inbound message %02x ", CMDINFO(CURRENT_SC), MSGI(0));
1848 scsi_print_msg(&MSGI(0)); 1849 spi_print_msg(&MSGI(0));
1849 printk("\n"); 1850 printk("\n");
1850 } 1851 }
1851#endif 1852#endif
@@ -1933,7 +1934,7 @@ static void msgi_run(struct Scsi_Host *shpnt)
1933 break; 1934 break;
1934 1935
1935 printk(INFO_LEAD, CMDINFO(CURRENT_SC)); 1936 printk(INFO_LEAD, CMDINFO(CURRENT_SC));
1936 scsi_print_msg(&MSGI(0)); 1937 spi_print_msg(&MSGI(0));
1937 printk("\n"); 1938 printk("\n");
1938 1939
1939 ticks = (MSGI(3) * 4 + 49) / 50; 1940 ticks = (MSGI(3) * 4 + 49) / 50;
@@ -2031,7 +2032,7 @@ static void msgo_init(struct Scsi_Host *shpnt)
2031 int i; 2032 int i;
2032 2033
2033 printk(DEBUG_LEAD "messages( ", CMDINFO(CURRENT_SC)); 2034 printk(DEBUG_LEAD "messages( ", CMDINFO(CURRENT_SC));
2034 for (i=0; i<MSGOLEN; i+=scsi_print_msg(&MSGO(i)), printk(" ")) 2035 for (i=0; i<MSGOLEN; i+=spi_print_msg(&MSGO(i)), printk(" "))
2035 ; 2036 ;
2036 printk(")\n"); 2037 printk(")\n");
2037 } 2038 }
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c
index 887eaa2a3ebf..19bd346951dd 100644
--- a/drivers/scsi/ahci.c
+++ b/drivers/scsi/ahci.c
@@ -214,7 +214,6 @@ static struct scsi_host_template ahci_sht = {
214 .dma_boundary = AHCI_DMA_BOUNDARY, 214 .dma_boundary = AHCI_DMA_BOUNDARY,
215 .slave_configure = ata_scsi_slave_config, 215 .slave_configure = ata_scsi_slave_config,
216 .bios_param = ata_std_bios_param, 216 .bios_param = ata_std_bios_param,
217 .ordered_flush = 1,
218}; 217};
219 218
220static const struct ata_port_operations ahci_ops = { 219static const struct ata_port_operations ahci_ops = {
@@ -277,6 +276,16 @@ static const struct pci_device_id ahci_pci_tbl[] = {
277 board_ahci }, /* ESB2 */ 276 board_ahci }, /* ESB2 */
278 { PCI_VENDOR_ID_INTEL, 0x27c6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 277 { PCI_VENDOR_ID_INTEL, 0x27c6, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
279 board_ahci }, /* ICH7-M DH */ 278 board_ahci }, /* ICH7-M DH */
279 { PCI_VENDOR_ID_INTEL, 0x2821, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
280 board_ahci }, /* ICH8 */
281 { PCI_VENDOR_ID_INTEL, 0x2822, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
282 board_ahci }, /* ICH8 */
283 { PCI_VENDOR_ID_INTEL, 0x2824, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
284 board_ahci }, /* ICH8 */
285 { PCI_VENDOR_ID_INTEL, 0x2829, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
286 board_ahci }, /* ICH8M */
287 { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
288 board_ahci }, /* ICH8M */
280 { } /* terminate list */ 289 { } /* terminate list */
281}; 290};
282 291
diff --git a/drivers/scsi/aic7xxx/.gitignore b/drivers/scsi/aic7xxx/.gitignore
new file mode 100644
index 000000000000..b8ee24d5748a
--- /dev/null
+++ b/drivers/scsi/aic7xxx/.gitignore
@@ -0,0 +1,6 @@
1aic79xx_reg.h
2aic79xx_reg_print.c
3aic79xx_seq.h
4aic7xxx_reg.h
5aic7xxx_reg_print.c
6aic7xxx_seq.h
diff --git a/drivers/scsi/aic7xxx/Kconfig.aic7xxx b/drivers/scsi/aic7xxx/Kconfig.aic7xxx
index ac8de03c9fa2..6c2c395554ff 100644
--- a/drivers/scsi/aic7xxx/Kconfig.aic7xxx
+++ b/drivers/scsi/aic7xxx/Kconfig.aic7xxx
@@ -42,13 +42,13 @@ config AIC7XXX_CMDS_PER_DEVICE
42config AIC7XXX_RESET_DELAY_MS 42config AIC7XXX_RESET_DELAY_MS
43 int "Initial bus reset delay in milli-seconds" 43 int "Initial bus reset delay in milli-seconds"
44 depends on SCSI_AIC7XXX 44 depends on SCSI_AIC7XXX
45 default "15000" 45 default "5000"
46 ---help--- 46 ---help---
47 The number of milliseconds to delay after an initial bus reset. 47 The number of milliseconds to delay after an initial bus reset.
48 The bus settle delay following all error recovery actions is 48 The bus settle delay following all error recovery actions is
49 dictated by the SCSI layer and is not affected by this value. 49 dictated by the SCSI layer and is not affected by this value.
50 50
51 Default: 15000 (15 seconds) 51 Default: 5000 (5 seconds)
52 52
53config AIC7XXX_PROBE_EISA_VL 53config AIC7XXX_PROBE_EISA_VL
54 bool "Probe for EISA and VL AIC7XXX Adapters" 54 bool "Probe for EISA and VL AIC7XXX Adapters"
diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h
index 653fb0b42aea..2cfdbef447db 100644
--- a/drivers/scsi/aic7xxx/aic79xx.h
+++ b/drivers/scsi/aic7xxx/aic79xx.h
@@ -37,7 +37,7 @@
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES. 38 * POSSIBILITY OF SUCH DAMAGES.
39 * 39 *
40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#95 $ 40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#108 $
41 * 41 *
42 * $FreeBSD$ 42 * $FreeBSD$
43 */ 43 */
@@ -75,8 +75,7 @@ struct scb_platform_data;
75#define INITIATOR_WILDCARD (~0) 75#define INITIATOR_WILDCARD (~0)
76#define SCB_LIST_NULL 0xFF00 76#define SCB_LIST_NULL 0xFF00
77#define SCB_LIST_NULL_LE (ahd_htole16(SCB_LIST_NULL)) 77#define SCB_LIST_NULL_LE (ahd_htole16(SCB_LIST_NULL))
78#define QOUTFIFO_ENTRY_VALID 0x8000 78#define QOUTFIFO_ENTRY_VALID 0x80
79#define QOUTFIFO_ENTRY_VALID_LE (ahd_htole16(0x8000))
80#define SCBID_IS_NULL(scbid) (((scbid) & 0xFF00 ) == SCB_LIST_NULL) 79#define SCBID_IS_NULL(scbid) (((scbid) & 0xFF00 ) == SCB_LIST_NULL)
81 80
82#define SCSIID_TARGET(ahd, scsiid) \ 81#define SCSIID_TARGET(ahd, scsiid) \
@@ -1053,6 +1052,13 @@ typedef uint8_t ahd_mode_state;
1053 1052
1054typedef void ahd_callback_t (void *); 1053typedef void ahd_callback_t (void *);
1055 1054
1055struct ahd_completion
1056{
1057 uint16_t tag;
1058 uint8_t sg_status;
1059 uint8_t valid_tag;
1060};
1061
1056struct ahd_softc { 1062struct ahd_softc {
1057 bus_space_tag_t tags[2]; 1063 bus_space_tag_t tags[2];
1058 bus_space_handle_t bshs[2]; 1064 bus_space_handle_t bshs[2];
@@ -1062,6 +1068,7 @@ struct ahd_softc {
1062 struct scb_data scb_data; 1068 struct scb_data scb_data;
1063 1069
1064 struct hardware_scb *next_queued_hscb; 1070 struct hardware_scb *next_queued_hscb;
1071 struct map_node *next_queued_hscb_map;
1065 1072
1066 /* 1073 /*
1067 * SCBs that have been sent to the controller 1074 * SCBs that have been sent to the controller
@@ -1140,16 +1147,23 @@ struct ahd_softc {
1140 ahd_flag flags; 1147 ahd_flag flags;
1141 struct seeprom_config *seep_config; 1148 struct seeprom_config *seep_config;
1142 1149
1143 /* Values to store in the SEQCTL register for pause and unpause */
1144 uint8_t unpause;
1145 uint8_t pause;
1146
1147 /* Command Queues */ 1150 /* Command Queues */
1151 struct ahd_completion *qoutfifo;
1148 uint16_t qoutfifonext; 1152 uint16_t qoutfifonext;
1149 uint16_t qoutfifonext_valid_tag; 1153 uint16_t qoutfifonext_valid_tag;
1150 uint16_t qinfifonext; 1154 uint16_t qinfifonext;
1151 uint16_t qinfifo[AHD_SCB_MAX]; 1155 uint16_t qinfifo[AHD_SCB_MAX];
1152 uint16_t *qoutfifo; 1156
1157 /*
1158 * Our qfreeze count. The sequencer compares
1159 * this value with its own counter to determine
1160 * whether to allow selections to occur.
1161 */
1162 uint16_t qfreeze_cnt;
1163
1164 /* Values to store in the SEQCTL register for pause and unpause */
1165 uint8_t unpause;
1166 uint8_t pause;
1153 1167
1154 /* Critical Section Data */ 1168 /* Critical Section Data */
1155 struct cs *critical_sections; 1169 struct cs *critical_sections;
@@ -1197,8 +1211,7 @@ struct ahd_softc {
1197 */ 1211 */
1198 bus_dma_tag_t parent_dmat; 1212 bus_dma_tag_t parent_dmat;
1199 bus_dma_tag_t shared_data_dmat; 1213 bus_dma_tag_t shared_data_dmat;
1200 bus_dmamap_t shared_data_dmamap; 1214 struct map_node shared_data_map;
1201 dma_addr_t shared_data_busaddr;
1202 1215
1203 /* Information saved through suspend/resume cycles */ 1216 /* Information saved through suspend/resume cycles */
1204 struct ahd_suspend_state suspend_state; 1217 struct ahd_suspend_state suspend_state;
@@ -1296,9 +1309,9 @@ struct ahd_devinfo {
1296}; 1309};
1297 1310
1298/****************************** PCI Structures ********************************/ 1311/****************************** PCI Structures ********************************/
1299#define AHD_PCI_IOADDR0 PCIR_MAPS /* I/O BAR*/ 1312#define AHD_PCI_IOADDR0 PCIR_BAR(0) /* I/O BAR*/
1300#define AHD_PCI_MEMADDR (PCIR_MAPS + 4) /* Memory BAR */ 1313#define AHD_PCI_MEMADDR PCIR_BAR(1) /* Memory BAR */
1301#define AHD_PCI_IOADDR1 (PCIR_MAPS + 12)/* Second I/O BAR */ 1314#define AHD_PCI_IOADDR1 PCIR_BAR(3) /* Second I/O BAR */
1302 1315
1303typedef int (ahd_device_setup_t)(struct ahd_softc *); 1316typedef int (ahd_device_setup_t)(struct ahd_softc *);
1304 1317
diff --git a/drivers/scsi/aic7xxx/aic79xx.reg b/drivers/scsi/aic7xxx/aic79xx.reg
index cca58edc8648..3a3204703b15 100644
--- a/drivers/scsi/aic7xxx/aic79xx.reg
+++ b/drivers/scsi/aic7xxx/aic79xx.reg
@@ -39,7 +39,7 @@
39 * 39 *
40 * $FreeBSD$ 40 * $FreeBSD$
41 */ 41 */
42VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $" 42VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $"
43 43
44/* 44/*
45 * This file is processed by the aic7xxx_asm utility for use in assembling 45 * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -65,13 +65,6 @@ VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $"
65 mvi MODE_PTR, MK_MODE(src, dst); \ 65 mvi MODE_PTR, MK_MODE(src, dst); \
66 } 66 }
67 67
68#define TOGGLE_DFF_MODE \
69 if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) { \
70 call toggle_dff_mode_work_around; \
71 } else { \
72 xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); \
73 }
74
75#define RESTORE_MODE(mode) \ 68#define RESTORE_MODE(mode) \
76 if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) { \ 69 if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) { \
77 mov mode call set_mode_work_around; \ 70 mov mode call set_mode_work_around; \
@@ -1199,7 +1192,7 @@ register TARGPCISTAT {
1199 1192
1200/* 1193/*
1201 * LQ Packet In 1194 * LQ Packet In
1202 * The last LQ Packet received 1195 * The last LQ Packet recieved
1203 */ 1196 */
1204register LQIN { 1197register LQIN {
1205 address 0x020 1198 address 0x020
@@ -3542,10 +3535,34 @@ scratch_ram {
3542 COMPLETE_DMA_SCB_HEAD { 3535 COMPLETE_DMA_SCB_HEAD {
3543 size 2 3536 size 2
3544 } 3537 }
3545 /* Counting semaphore to prevent new select-outs */ 3538 /*
3539 * tail of list of SCBs that have
3540 * completed but need to be uploaded
3541 * to the host prior to being completed.
3542 */
3543 COMPLETE_DMA_SCB_TAIL {
3544 size 2
3545 }
3546 /*
3547 * head of list of SCBs that have
3548 * been uploaded to the host, but cannot
3549 * be completed until the QFREEZE is in
3550 * full effect (i.e. no selections pending).
3551 */
3552 COMPLETE_ON_QFREEZE_HEAD {
3553 size 2
3554 }
3555 /*
3556 * Counting semaphore to prevent new select-outs
3557 * The queue is frozen so long as the sequencer
3558 * and kernel freeze counts differ.
3559 */
3546 QFREEZE_COUNT { 3560 QFREEZE_COUNT {
3547 size 2 3561 size 2
3548 } 3562 }
3563 KERNEL_QFREEZE_COUNT {
3564 size 2
3565 }
3549 /* 3566 /*
3550 * Mode to restore on legacy idle loop exit. 3567 * Mode to restore on legacy idle loop exit.
3551 */ 3568 */
@@ -3625,6 +3642,17 @@ scratch_ram {
3625 size 1 3642 size 1
3626 } 3643 }
3627 /* 3644 /*
3645 * Kernel and sequencer offsets into the queue of
3646 * incoming target mode command descriptors. The
3647 * queue is full when the KERNEL_TQINPOS == TQINPOS.
3648 */
3649 KERNEL_TQINPOS {
3650 size 1
3651 }
3652 TQINPOS {
3653 size 1
3654 }
3655 /*
3628 * Base address of our shared data with the kernel driver in host 3656 * Base address of our shared data with the kernel driver in host
3629 * memory. This includes the qoutfifo and target mode 3657 * memory. This includes the qoutfifo and target mode
3630 * incoming command queue. 3658 * incoming command queue.
@@ -3639,17 +3667,6 @@ scratch_ram {
3639 QOUTFIFO_NEXT_ADDR { 3667 QOUTFIFO_NEXT_ADDR {
3640 size 4 3668 size 4
3641 } 3669 }
3642 /*
3643 * Kernel and sequencer offsets into the queue of
3644 * incoming target mode command descriptors. The
3645 * queue is full when the KERNEL_TQINPOS == TQINPOS.
3646 */
3647 KERNEL_TQINPOS {
3648 size 1
3649 }
3650 TQINPOS {
3651 size 1
3652 }
3653 ARG_1 { 3670 ARG_1 {
3654 size 1 3671 size 1
3655 mask SEND_MSG 0x80 3672 mask SEND_MSG 0x80
@@ -3951,6 +3968,7 @@ const SG_PREFETCH_ADDR_MASK download
3951const SG_SIZEOF download 3968const SG_SIZEOF download
3952const PKT_OVERRUN_BUFOFFSET download 3969const PKT_OVERRUN_BUFOFFSET download
3953const SCB_TRANSFER_SIZE download 3970const SCB_TRANSFER_SIZE download
3971const CACHELINE_MASK download
3954 3972
3955/* 3973/*
3956 * BIOS SCB offsets 3974 * BIOS SCB offsets
diff --git a/drivers/scsi/aic7xxx/aic79xx.seq b/drivers/scsi/aic7xxx/aic79xx.seq
index 65339bc1ca99..bef1f9d369b6 100644
--- a/drivers/scsi/aic7xxx/aic79xx.seq
+++ b/drivers/scsi/aic7xxx/aic79xx.seq
@@ -40,7 +40,7 @@
40 * $FreeBSD$ 40 * $FreeBSD$
41 */ 41 */
42 42
43VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#99 $" 43VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $"
44PATCH_ARG_LIST = "struct ahd_softc *ahd" 44PATCH_ARG_LIST = "struct ahd_softc *ahd"
45PREFIX = "ahd_" 45PREFIX = "ahd_"
46 46
@@ -68,13 +68,47 @@ no_error_set:
68 } 68 }
69 SET_MODE(M_SCSI, M_SCSI) 69 SET_MODE(M_SCSI, M_SCSI)
70 test SCSISEQ0, ENSELO|ENARBO jnz idle_loop_checkbus; 70 test SCSISEQ0, ENSELO|ENARBO jnz idle_loop_checkbus;
71 test SEQ_FLAGS2, SELECTOUT_QFROZEN jnz idle_loop_checkbus; 71 test SEQ_FLAGS2, SELECTOUT_QFROZEN jz check_waiting_list;
72 /*
73 * If the kernel has caught up with us, thaw the queue.
74 */
75 mov A, KERNEL_QFREEZE_COUNT;
76 cmp QFREEZE_COUNT, A jne check_frozen_completions;
77 mov A, KERNEL_QFREEZE_COUNT[1];
78 cmp QFREEZE_COUNT[1], A jne check_frozen_completions;
79 and SEQ_FLAGS2, ~SELECTOUT_QFROZEN;
80 jmp check_waiting_list;
81check_frozen_completions:
82 test SSTAT0, SELDO|SELINGO jnz idle_loop_checkbus;
83BEGIN_CRITICAL;
84 /*
85 * If we have completions stalled waiting for the qfreeze
86 * to take effect, move them over to the complete_scb list
87 * now that no selections are pending.
88 */
89 cmp COMPLETE_ON_QFREEZE_HEAD[1],SCB_LIST_NULL je idle_loop_checkbus;
90 /*
91 * Find the end of the qfreeze list. The first element has
92 * to be treated specially.
93 */
94 bmov SCBPTR, COMPLETE_ON_QFREEZE_HEAD, 2;
95 cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je join_lists;
96 /*
97 * Now the normal loop.
98 */
99 bmov SCBPTR, SCB_NEXT_COMPLETE, 2;
100 cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL jne . - 1;
101join_lists:
102 bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2;
103 bmov COMPLETE_SCB_HEAD, COMPLETE_ON_QFREEZE_HEAD, 2;
104 mvi COMPLETE_ON_QFREEZE_HEAD[1], SCB_LIST_NULL;
105 jmp idle_loop_checkbus;
106check_waiting_list:
72 cmp WAITING_TID_HEAD[1], SCB_LIST_NULL je idle_loop_checkbus; 107 cmp WAITING_TID_HEAD[1], SCB_LIST_NULL je idle_loop_checkbus;
73 /* 108 /*
74 * ENSELO is cleared by a SELDO, so we must test for SELDO 109 * ENSELO is cleared by a SELDO, so we must test for SELDO
75 * one last time. 110 * one last time.
76 */ 111 */
77BEGIN_CRITICAL;
78 test SSTAT0, SELDO jnz select_out; 112 test SSTAT0, SELDO jnz select_out;
79END_CRITICAL; 113END_CRITICAL;
80 call start_selection; 114 call start_selection;
@@ -90,6 +124,13 @@ idle_loop_check_nonpackreq:
90 test SSTAT2, NONPACKREQ jz . + 2; 124 test SSTAT2, NONPACKREQ jz . + 2;
91 call unexpected_nonpkt_phase_find_ctxt; 125 call unexpected_nonpkt_phase_find_ctxt;
92 if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) { 126 if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) {
127 /*
128 * On Rev A. hardware, the busy LED is only
129 * turned on automaically during selections
130 * and re-selections. Make the LED status
131 * more useful by forcing it to be on so
132 * long as one of our data FIFOs is active.
133 */
93 and A, FIFO0FREE|FIFO1FREE, DFFSTAT; 134 and A, FIFO0FREE|FIFO1FREE, DFFSTAT;
94 cmp A, FIFO0FREE|FIFO1FREE jne . + 3; 135 cmp A, FIFO0FREE|FIFO1FREE jne . + 3;
95 and SBLKCTL, ~DIAGLEDEN|DIAGLEDON; 136 and SBLKCTL, ~DIAGLEDEN|DIAGLEDON;
@@ -101,9 +142,9 @@ idle_loop_check_nonpackreq:
101 call idle_loop_cchan; 142 call idle_loop_cchan;
102 jmp idle_loop; 143 jmp idle_loop;
103 144
104BEGIN_CRITICAL;
105idle_loop_gsfifo: 145idle_loop_gsfifo:
106 SET_MODE(M_SCSI, M_SCSI) 146 SET_MODE(M_SCSI, M_SCSI)
147BEGIN_CRITICAL;
107idle_loop_gsfifo_in_scsi_mode: 148idle_loop_gsfifo_in_scsi_mode:
108 test LQISTAT2, LQIGSAVAIL jz return; 149 test LQISTAT2, LQIGSAVAIL jz return;
109 /* 150 /*
@@ -152,11 +193,15 @@ END_CRITICAL;
152 193
153idle_loop_service_fifos: 194idle_loop_service_fifos:
154 SET_MODE(M_DFF0, M_DFF0) 195 SET_MODE(M_DFF0, M_DFF0)
196BEGIN_CRITICAL;
155 test LONGJMP_ADDR[1], INVALID_ADDR jnz idle_loop_next_fifo; 197 test LONGJMP_ADDR[1], INVALID_ADDR jnz idle_loop_next_fifo;
156 call longjmp; 198 call longjmp;
199END_CRITICAL;
157idle_loop_next_fifo: 200idle_loop_next_fifo:
158 SET_MODE(M_DFF1, M_DFF1) 201 SET_MODE(M_DFF1, M_DFF1)
202BEGIN_CRITICAL;
159 test LONGJMP_ADDR[1], INVALID_ADDR jz longjmp; 203 test LONGJMP_ADDR[1], INVALID_ADDR jz longjmp;
204END_CRITICAL;
160return: 205return:
161 ret; 206 ret;
162 207
@@ -170,7 +215,6 @@ BEGIN_CRITICAL;
170 test CCSCBCTL, CCARREN|CCSCBEN jz scbdma_idle; 215 test CCSCBCTL, CCARREN|CCSCBEN jz scbdma_idle;
171 test CCSCBCTL, CCSCBDIR jnz fetch_new_scb_inprog; 216 test CCSCBCTL, CCSCBDIR jnz fetch_new_scb_inprog;
172 test CCSCBCTL, CCSCBDONE jz return; 217 test CCSCBCTL, CCSCBDONE jz return;
173END_CRITICAL;
174 /* FALLTHROUGH */ 218 /* FALLTHROUGH */
175scbdma_tohost_done: 219scbdma_tohost_done:
176 test CCSCBCTL, CCARREN jz fill_qoutfifo_dmadone; 220 test CCSCBCTL, CCARREN jz fill_qoutfifo_dmadone;
@@ -180,26 +224,18 @@ scbdma_tohost_done:
180 * bad SCSI status (currently only for underruns), we 224 * bad SCSI status (currently only for underruns), we
181 * queue the SCB for normal completion. Otherwise, we 225 * queue the SCB for normal completion. Otherwise, we
182 * wait until any select-out activity has halted, and 226 * wait until any select-out activity has halted, and
183 * then notify the host so that the transaction can be 227 * then queue the completion.
184 * dealt with.
185 */ 228 */
186 test SCB_SCSI_STATUS, 0xff jnz scbdma_notify_host;
187 and CCSCBCTL, ~(CCARREN|CCSCBEN); 229 and CCSCBCTL, ~(CCARREN|CCSCBEN);
188 bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; 230 bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2;
231 cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL jne . + 2;
232 mvi COMPLETE_DMA_SCB_TAIL[1], SCB_LIST_NULL;
233 test SCB_SCSI_STATUS, 0xff jz scbdma_queue_completion;
234 bmov SCB_NEXT_COMPLETE, COMPLETE_ON_QFREEZE_HEAD, 2;
235 bmov COMPLETE_ON_QFREEZE_HEAD, SCBPTR, 2 ret;
236scbdma_queue_completion:
189 bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; 237 bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2;
190 bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; 238 bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret;
191scbdma_notify_host:
192 SET_MODE(M_SCSI, M_SCSI)
193 test SCSISEQ0, ENSELO jnz return;
194 test SSTAT0, (SELDO|SELINGO) jnz return;
195 SET_MODE(M_CCHAN, M_CCHAN)
196 /*
197 * Remove SCB and notify host.
198 */
199 and CCSCBCTL, ~(CCARREN|CCSCBEN);
200 bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2;
201 SET_SEQINTCODE(BAD_SCB_STATUS)
202 ret;
203fill_qoutfifo_dmadone: 239fill_qoutfifo_dmadone:
204 and CCSCBCTL, ~(CCARREN|CCSCBEN); 240 and CCSCBCTL, ~(CCARREN|CCSCBEN);
205 call qoutfifo_updated; 241 call qoutfifo_updated;
@@ -208,6 +244,7 @@ fill_qoutfifo_dmadone:
208 test QOFF_CTLSTA, SDSCB_ROLLOVR jz return; 244 test QOFF_CTLSTA, SDSCB_ROLLOVR jz return;
209 bmov QOUTFIFO_NEXT_ADDR, SHARED_DATA_ADDR, 4; 245 bmov QOUTFIFO_NEXT_ADDR, SHARED_DATA_ADDR, 4;
210 xor QOUTFIFO_ENTRY_VALID_TAG, QOUTFIFO_ENTRY_VALID_TOGGLE ret; 246 xor QOUTFIFO_ENTRY_VALID_TAG, QOUTFIFO_ENTRY_VALID_TOGGLE ret;
247END_CRITICAL;
211 248
212qoutfifo_updated: 249qoutfifo_updated:
213 /* 250 /*
@@ -324,14 +361,15 @@ fill_qoutfifo:
324 * Keep track of the SCBs we are dmaing just 361 * Keep track of the SCBs we are dmaing just
325 * in case the DMA fails or is aborted. 362 * in case the DMA fails or is aborted.
326 */ 363 */
327 mov A, QOUTFIFO_ENTRY_VALID_TAG;
328 bmov COMPLETE_SCB_DMAINPROG_HEAD, COMPLETE_SCB_HEAD, 2; 364 bmov COMPLETE_SCB_DMAINPROG_HEAD, COMPLETE_SCB_HEAD, 2;
329 mvi CCSCBCTL, CCSCBRESET; 365 mvi CCSCBCTL, CCSCBRESET;
330 bmov SCBHADDR, QOUTFIFO_NEXT_ADDR, 4; 366 bmov SCBHADDR, QOUTFIFO_NEXT_ADDR, 4;
367 mov A, QOUTFIFO_NEXT_ADDR;
331 bmov SCBPTR, COMPLETE_SCB_HEAD, 2; 368 bmov SCBPTR, COMPLETE_SCB_HEAD, 2;
332fill_qoutfifo_loop: 369fill_qoutfifo_loop:
333 mov CCSCBRAM, SCBPTR; 370 bmov CCSCBRAM, SCBPTR, 2;
334 or CCSCBRAM, A, SCBPTR[1]; 371 mov CCSCBRAM, SCB_SGPTR[0];
372 mov CCSCBRAM, QOUTFIFO_ENTRY_VALID_TAG;
335 mov NONE, SDSCB_QOFF; 373 mov NONE, SDSCB_QOFF;
336 inc INT_COALESCING_CMDCOUNT; 374 inc INT_COALESCING_CMDCOUNT;
337 add CMDS_PENDING, -1; 375 add CMDS_PENDING, -1;
@@ -339,6 +377,18 @@ fill_qoutfifo_loop:
339 cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je fill_qoutfifo_done; 377 cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je fill_qoutfifo_done;
340 cmp CCSCBADDR, CCSCBADDR_MAX je fill_qoutfifo_done; 378 cmp CCSCBADDR, CCSCBADDR_MAX je fill_qoutfifo_done;
341 test QOFF_CTLSTA, SDSCB_ROLLOVR jnz fill_qoutfifo_done; 379 test QOFF_CTLSTA, SDSCB_ROLLOVR jnz fill_qoutfifo_done;
380 /*
381 * Don't cross an ADB or Cachline boundary when DMA'ing
382 * completion entries. In PCI mode, at least in 32/33
383 * configurations, the SCB DMA engine may lose its place
384 * in the data-stream should the target force a retry on
385 * something other than an 8byte aligned boundary. In
386 * PCI-X mode, we do this to avoid split transactions since
387 * many chipsets seem to be unable to format proper split
388 * completions to continue the data transfer.
389 */
390 add SINDEX, A, CCSCBADDR;
391 test SINDEX, CACHELINE_MASK jz fill_qoutfifo_done;
342 bmov SCBPTR, SCB_NEXT_COMPLETE, 2; 392 bmov SCBPTR, SCB_NEXT_COMPLETE, 2;
343 jmp fill_qoutfifo_loop; 393 jmp fill_qoutfifo_loop;
344fill_qoutfifo_done: 394fill_qoutfifo_done:
@@ -354,7 +404,6 @@ dma_complete_scb:
354 bmov SCBPTR, COMPLETE_DMA_SCB_HEAD, 2; 404 bmov SCBPTR, COMPLETE_DMA_SCB_HEAD, 2;
355 bmov SCBHADDR, SCB_BUSADDR, 4; 405 bmov SCBHADDR, SCB_BUSADDR, 4;
356 mvi CCARREN|CCSCBEN|CCSCBRESET jmp dma_scb; 406 mvi CCARREN|CCSCBEN|CCSCBRESET jmp dma_scb;
357END_CRITICAL;
358 407
359/* 408/*
360 * Either post or fetch an SCB from host memory. The caller 409 * Either post or fetch an SCB from host memory. The caller
@@ -371,9 +420,19 @@ dma_scb:
371 mvi SCBHCNT, SCB_TRANSFER_SIZE; 420 mvi SCBHCNT, SCB_TRANSFER_SIZE;
372 mov CCSCBCTL, SINDEX ret; 421 mov CCSCBCTL, SINDEX ret;
373 422
374BEGIN_CRITICAL;
375setjmp: 423setjmp:
376 bmov LONGJMP_ADDR, STACK, 2 ret; 424 /*
425 * At least on the A, a return in the same
426 * instruction as the bmov results in a return
427 * to the caller, not to the new address at the
428 * top of the stack. Since we want the latter
429 * (we use setjmp to register a handler from an
430 * interrupt context but not invoke that handler
431 * until we return to our idle loop), use a
432 * separate ret instruction.
433 */
434 bmov LONGJMP_ADDR, STACK, 2;
435 ret;
377setjmp_inline: 436setjmp_inline:
378 bmov LONGJMP_ADDR, STACK, 2; 437 bmov LONGJMP_ADDR, STACK, 2;
379longjmp: 438longjmp:
@@ -392,11 +451,6 @@ set_mode_work_around:
392 mvi SEQINTCTL, INTVEC1DSL; 451 mvi SEQINTCTL, INTVEC1DSL;
393 mov MODE_PTR, SINDEX; 452 mov MODE_PTR, SINDEX;
394 clr SEQINTCTL ret; 453 clr SEQINTCTL ret;
395
396toggle_dff_mode_work_around:
397 mvi SEQINTCTL, INTVEC1DSL;
398 xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1);
399 clr SEQINTCTL ret;
400} 454}
401 455
402 456
@@ -490,6 +544,21 @@ allocate_fifo1:
490SET_SRC_MODE M_SCSI; 544SET_SRC_MODE M_SCSI;
491SET_DST_MODE M_SCSI; 545SET_DST_MODE M_SCSI;
492select_in: 546select_in:
547 if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) {
548 /*
549 * On Rev A. hardware, the busy LED is only
550 * turned on automaically during selections
551 * and re-selections. Make the LED status
552 * more useful by forcing it to be on from
553 * the point of selection until our idle
554 * loop determines that neither of our FIFOs
555 * are busy. This handles the non-packetized
556 * case nicely as we will not return to the
557 * idle loop until the busfree at the end of
558 * each transaction.
559 */
560 or SBLKCTL, DIAGLEDEN|DIAGLEDON;
561 }
493 if ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0) { 562 if ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0) {
494 /* 563 /*
495 * Test to ensure that the bus has not 564 * Test to ensure that the bus has not
@@ -528,6 +597,21 @@ SET_SRC_MODE M_SCSI;
528SET_DST_MODE M_SCSI; 597SET_DST_MODE M_SCSI;
529select_out: 598select_out:
530BEGIN_CRITICAL; 599BEGIN_CRITICAL;
600 if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) {
601 /*
602 * On Rev A. hardware, the busy LED is only
603 * turned on automaically during selections
604 * and re-selections. Make the LED status
605 * more useful by forcing it to be on from
606 * the point of re-selection until our idle
607 * loop determines that neither of our FIFOs
608 * are busy. This handles the non-packetized
609 * case nicely as we will not return to the
610 * idle loop until the busfree at the end of
611 * each transaction.
612 */
613 or SBLKCTL, DIAGLEDEN|DIAGLEDON;
614 }
531 /* Clear out all SCBs that have been successfully sent. */ 615 /* Clear out all SCBs that have been successfully sent. */
532 if ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0) { 616 if ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0) {
533 /* 617 /*
@@ -1000,15 +1084,9 @@ not_found_ITloop:
1000/* 1084/*
1001 * We received a "command complete" message. Put the SCB on the complete 1085 * We received a "command complete" message. Put the SCB on the complete
1002 * queue and trigger a completion interrupt via the idle loop. Before doing 1086 * queue and trigger a completion interrupt via the idle loop. Before doing
1003 * so, check to see if there 1087 * so, check to see if there is a residual or the status byte is something
1004 * is a residual or the status byte is something other than STATUS_GOOD (0). 1088 * other than STATUS_GOOD (0). In either of these conditions, we upload the
1005 * In either of these conditions, we upload the SCB back to the host so it can 1089 * SCB back to the host so it can process this information.
1006 * process this information. In the case of a non zero status byte, we
1007 * additionally interrupt the kernel driver synchronously, allowing it to
1008 * decide if sense should be retrieved. If the kernel driver wishes to request
1009 * sense, it will fill the kernel SCB with a request sense command, requeue
1010 * it to the QINFIFO and tell us not to post to the QOUTFIFO by setting
1011 * RETURN_1 to SEND_SENSE.
1012 */ 1090 */
1013mesgin_complete: 1091mesgin_complete:
1014 1092
@@ -1053,6 +1131,7 @@ complete_nomsg:
1053 call queue_scb_completion; 1131 call queue_scb_completion;
1054 jmp await_busfree; 1132 jmp await_busfree;
1055 1133
1134BEGIN_CRITICAL;
1056freeze_queue: 1135freeze_queue:
1057 /* Cancel any pending select-out. */ 1136 /* Cancel any pending select-out. */
1058 test SSTAT0, SELDO|SELINGO jnz . + 2; 1137 test SSTAT0, SELDO|SELINGO jnz . + 2;
@@ -1063,6 +1142,7 @@ freeze_queue:
1063 adc QFREEZE_COUNT[1], A; 1142 adc QFREEZE_COUNT[1], A;
1064 or SEQ_FLAGS2, SELECTOUT_QFROZEN; 1143 or SEQ_FLAGS2, SELECTOUT_QFROZEN;
1065 mov A, ACCUM_SAVE ret; 1144 mov A, ACCUM_SAVE ret;
1145END_CRITICAL;
1066 1146
1067/* 1147/*
1068 * Complete the current FIFO's SCB if data for this same 1148 * Complete the current FIFO's SCB if data for this same
@@ -1085,8 +1165,10 @@ queue_scb_completion:
1085 test SCB_SGPTR, SG_FULL_RESID jnz upload_scb;/* Never xfered */ 1165 test SCB_SGPTR, SG_FULL_RESID jnz upload_scb;/* Never xfered */
1086 test SCB_RESIDUAL_SGPTR, SG_LIST_NULL jz upload_scb; 1166 test SCB_RESIDUAL_SGPTR, SG_LIST_NULL jz upload_scb;
1087complete: 1167complete:
1168BEGIN_CRITICAL;
1088 bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; 1169 bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2;
1089 bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; 1170 bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret;
1171END_CRITICAL;
1090bad_status: 1172bad_status:
1091 cmp SCB_SCSI_STATUS, STATUS_PKT_SENSE je upload_scb; 1173 cmp SCB_SCSI_STATUS, STATUS_PKT_SENSE je upload_scb;
1092 call freeze_queue; 1174 call freeze_queue;
@@ -1097,9 +1179,18 @@ upload_scb:
1097 * it on the host. 1179 * it on the host.
1098 */ 1180 */
1099 bmov SCB_TAG, SCBPTR, 2; 1181 bmov SCB_TAG, SCBPTR, 2;
1100 bmov SCB_NEXT_COMPLETE, COMPLETE_DMA_SCB_HEAD, 2; 1182BEGIN_CRITICAL;
1183 or SCB_SGPTR, SG_STATUS_VALID;
1184 mvi SCB_NEXT_COMPLETE[1], SCB_LIST_NULL;
1185 cmp COMPLETE_DMA_SCB_HEAD[1], SCB_LIST_NULL jne add_dma_scb_tail;
1101 bmov COMPLETE_DMA_SCB_HEAD, SCBPTR, 2; 1186 bmov COMPLETE_DMA_SCB_HEAD, SCBPTR, 2;
1102 or SCB_SGPTR, SG_STATUS_VALID ret; 1187 bmov COMPLETE_DMA_SCB_TAIL, SCBPTR, 2 ret;
1188add_dma_scb_tail:
1189 bmov REG0, SCBPTR, 2;
1190 bmov SCBPTR, COMPLETE_DMA_SCB_TAIL, 2;
1191 bmov SCB_NEXT_COMPLETE, REG0, 2;
1192 bmov COMPLETE_DMA_SCB_TAIL, REG0, 2 ret;
1193END_CRITICAL;
1103 1194
1104/* 1195/*
1105 * Is it a disconnect message? Set a flag in the SCB to remind us 1196 * Is it a disconnect message? Set a flag in the SCB to remind us
@@ -1146,8 +1237,18 @@ SET_DST_MODE M_DFF1;
1146await_busfree_clrchn: 1237await_busfree_clrchn:
1147 mvi DFFSXFRCTL, CLRCHN; 1238 mvi DFFSXFRCTL, CLRCHN;
1148await_busfree_not_m_dff: 1239await_busfree_not_m_dff:
1149 call clear_target_state; 1240 /* clear target specific flags */
1241 mvi SEQ_FLAGS, NOT_IDENTIFIED|NO_CDB_SENT;
1150 test SSTAT1,REQINIT|BUSFREE jz .; 1242 test SSTAT1,REQINIT|BUSFREE jz .;
1243 /*
1244 * We only set BUSFREE status once either a new
1245 * phase has been detected or we are really
1246 * BUSFREE. This allows the driver to know
1247 * that we are active on the bus even though
1248 * no identified transaction exists should a
1249 * timeout occur while awaiting busfree.
1250 */
1251 mvi LASTPHASE, P_BUSFREE;
1151 test SSTAT1, BUSFREE jnz idle_loop; 1252 test SSTAT1, BUSFREE jnz idle_loop;
1152 SET_SEQINTCODE(MISSED_BUSFREE) 1253 SET_SEQINTCODE(MISSED_BUSFREE)
1153 1254
@@ -1202,11 +1303,6 @@ msgin_rdptrs_get_fifo:
1202 call allocate_fifo; 1303 call allocate_fifo;
1203 jmp mesgin_done; 1304 jmp mesgin_done;
1204 1305
1205clear_target_state:
1206 mvi LASTPHASE, P_BUSFREE;
1207 /* clear target specific flags */
1208 mvi SEQ_FLAGS, NOT_IDENTIFIED|NO_CDB_SENT ret;
1209
1210phase_lock: 1306phase_lock:
1211 if ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0) { 1307 if ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0) {
1212 /* 1308 /*
@@ -1298,6 +1394,47 @@ service_fifo:
1298 test CCSGCTL, CCSGENACK jnz return; 1394 test CCSGCTL, CCSGENACK jnz return;
1299 1395
1300 /* 1396 /*
1397 * Should the other FIFO get the S/G cache first? If
1398 * both FIFOs have been allocated since we last checked
1399 * any FIFO, it is important that we service a FIFO
1400 * that is not actively on the bus first. This guarantees
1401 * that a FIFO will be freed to handle snapshot requests for
1402 * any FIFO that is still on the bus. Chips with RTI do not
1403 * perform snapshots, so don't bother with this test there.
1404 */
1405 if ((ahd->features & AHD_RTI) == 0) {
1406 /*
1407 * If we're not still receiving SCSI data,
1408 * it is safe to allocate the S/G cache to
1409 * this FIFO.
1410 */
1411 test DFCNTRL, SCSIEN jz idle_sgfetch_start;
1412
1413 /*
1414 * Switch to the other FIFO. Non-RTI chips
1415 * also have the "set mode" bug, so we must
1416 * disable interrupts during the switch.
1417 */
1418 mvi SEQINTCTL, INTVEC1DSL;
1419 xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1);
1420
1421 /*
1422 * If the other FIFO needs loading, then it
1423 * must not have claimed the S/G cache yet
1424 * (SG_CACHE_AVAIL would have been cleared in
1425 * the orginal FIFO mode and we test this above).
1426 * Return to the idle loop so we can process the
1427 * FIFO not currently on the bus first.
1428 */
1429 test SG_STATE, LOADING_NEEDED jz idle_sgfetch_okay;
1430 clr SEQINTCTL ret;
1431idle_sgfetch_okay:
1432 xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1);
1433 clr SEQINTCTL;
1434 }
1435
1436idle_sgfetch_start:
1437 /*
1301 * We fetch a "cacheline aligned" and sized amount of data 1438 * We fetch a "cacheline aligned" and sized amount of data
1302 * so we don't end up referencing a non-existant page. 1439 * so we don't end up referencing a non-existant page.
1303 * Cacheline aligned is in quotes because the kernel will 1440 * Cacheline aligned is in quotes because the kernel will
@@ -1308,7 +1445,7 @@ service_fifo:
1308 mvi SGHCNT, SG_PREFETCH_CNT; 1445 mvi SGHCNT, SG_PREFETCH_CNT;
1309 if ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0) { 1446 if ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0) {
1310 /* 1447 /*
1311 * Need two instruction between "touches" of SGHADDR. 1448 * Need two instructions between "touches" of SGHADDR.
1312 */ 1449 */
1313 nop; 1450 nop;
1314 } 1451 }
@@ -1658,7 +1795,7 @@ export seq_isr:
1658 * savepointer in the current FIFO. We do this so that 1795 * savepointer in the current FIFO. We do this so that
1659 * a pending CTXTDONE or SAVEPTR is visible in the active 1796 * a pending CTXTDONE or SAVEPTR is visible in the active
1660 * FIFO. This status is the only way we can detect if we 1797 * FIFO. This status is the only way we can detect if we
1661 * have lost the race (e.g. host paused us) and our attepts 1798 * have lost the race (e.g. host paused us) and our attempts
1662 * to disable the channel occurred after all REQs were 1799 * to disable the channel occurred after all REQs were
1663 * already seen and acked (REQINIT never comes true). 1800 * already seen and acked (REQINIT never comes true).
1664 */ 1801 */
@@ -1667,7 +1804,7 @@ export seq_isr:
1667 test DFCNTRL, DIRECTION jz interrupt_return; 1804 test DFCNTRL, DIRECTION jz interrupt_return;
1668 and DFCNTRL, ~SCSIEN; 1805 and DFCNTRL, ~SCSIEN;
1669snapshot_wait_data_valid: 1806snapshot_wait_data_valid:
1670 test SEQINTSRC, (CTXTDONE|SAVEPTRS) jnz snapshot_data_valid; 1807 test SEQINTSRC, (CTXTDONE|SAVEPTRS) jnz interrupt_return;
1671 test SSTAT1, REQINIT jz snapshot_wait_data_valid; 1808 test SSTAT1, REQINIT jz snapshot_wait_data_valid;
1672snapshot_data_valid: 1809snapshot_data_valid:
1673 or DFCNTRL, SCSIEN; 1810 or DFCNTRL, SCSIEN;
@@ -1834,7 +1971,6 @@ pkt_saveptrs_check_status:
1834 dec SCB_FIFO_USE_COUNT; 1971 dec SCB_FIFO_USE_COUNT;
1835 test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle; 1972 test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle;
1836 mvi DFFSXFRCTL, CLRCHN ret; 1973 mvi DFFSXFRCTL, CLRCHN ret;
1837END_CRITICAL;
1838 1974
1839/* 1975/*
1840 * LAST_SEG_DONE status has been seen in the current FIFO. 1976 * LAST_SEG_DONE status has been seen in the current FIFO.
@@ -1843,7 +1979,6 @@ END_CRITICAL;
1843 * Check for overrun and see if we can complete this command. 1979 * Check for overrun and see if we can complete this command.
1844 */ 1980 */
1845pkt_last_seg_done: 1981pkt_last_seg_done:
1846BEGIN_CRITICAL;
1847 /* 1982 /*
1848 * Mark transfer as completed. 1983 * Mark transfer as completed.
1849 */ 1984 */
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index 4e8f00df978d..db8f5ce99ee3 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -37,9 +37,7 @@
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES. 38 * POSSIBILITY OF SUCH DAMAGES.
39 * 39 *
40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#202 $ 40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#247 $
41 *
42 * $FreeBSD$
43 */ 41 */
44 42
45#ifdef __linux__ 43#ifdef __linux__
@@ -332,6 +330,14 @@ ahd_restart(struct ahd_softc *ahd)
332 ahd_outb(ahd, SCSISEQ1, 330 ahd_outb(ahd, SCSISEQ1,
333 ahd_inb(ahd, SCSISEQ_TEMPLATE) & (ENSELI|ENRSELI|ENAUTOATNP)); 331 ahd_inb(ahd, SCSISEQ_TEMPLATE) & (ENSELI|ENRSELI|ENAUTOATNP));
334 ahd_set_modes(ahd, AHD_MODE_CCHAN, AHD_MODE_CCHAN); 332 ahd_set_modes(ahd, AHD_MODE_CCHAN, AHD_MODE_CCHAN);
333
334 /*
335 * Clear any pending sequencer interrupt. It is no
336 * longer relevant since we're resetting the Program
337 * Counter.
338 */
339 ahd_outb(ahd, CLRINT, CLRSEQINT);
340
335 ahd_outb(ahd, SEQCTL0, FASTMODE|SEQRESET); 341 ahd_outb(ahd, SEQCTL0, FASTMODE|SEQRESET);
336 ahd_unpause(ahd); 342 ahd_unpause(ahd);
337} 343}
@@ -373,13 +379,7 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
373 saved_modes = ahd_save_modes(ahd); 379 saved_modes = ahd_save_modes(ahd);
374 380
375 /* 381 /*
376 * Complete any SCBs that just finished being 382 * Flush the good status FIFO for completed packetized commands.
377 * DMA'ed into the qoutfifo.
378 */
379 ahd_run_qoutfifo(ahd);
380
381 /*
382 * Flush the good status FIFO for compelted packetized commands.
383 */ 383 */
384 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 384 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
385 saved_scbptr = ahd_get_scbptr(ahd); 385 saved_scbptr = ahd_get_scbptr(ahd);
@@ -387,8 +387,7 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
387 u_int fifo_mode; 387 u_int fifo_mode;
388 u_int i; 388 u_int i;
389 389
390 scbid = (ahd_inb(ahd, GSFIFO+1) << 8) 390 scbid = ahd_inw(ahd, GSFIFO);
391 | ahd_inb(ahd, GSFIFO);
392 scb = ahd_lookup_scb(ahd, scbid); 391 scb = ahd_lookup_scb(ahd, scbid);
393 if (scb == NULL) { 392 if (scb == NULL) {
394 printf("%s: Warning - GSFIFO SCB %d invalid\n", 393 printf("%s: Warning - GSFIFO SCB %d invalid\n",
@@ -401,22 +400,33 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
401 * the host before completing the command. 400 * the host before completing the command.
402 */ 401 */
403 fifo_mode = 0; 402 fifo_mode = 0;
403rescan_fifos:
404 for (i = 0; i < 2; i++) { 404 for (i = 0; i < 2; i++) {
405 /* Toggle to the other mode. */ 405 /* Toggle to the other mode. */
406 fifo_mode ^= 1; 406 fifo_mode ^= 1;
407 ahd_set_modes(ahd, fifo_mode, fifo_mode); 407 ahd_set_modes(ahd, fifo_mode, fifo_mode);
408
408 if (ahd_scb_active_in_fifo(ahd, scb) == 0) 409 if (ahd_scb_active_in_fifo(ahd, scb) == 0)
409 continue; 410 continue;
410 411
411 ahd_run_data_fifo(ahd, scb); 412 ahd_run_data_fifo(ahd, scb);
412 413
413 /* 414 /*
414 * Clearing this transaction in this FIFO may 415 * Running this FIFO may cause a CFG4DATA for
415 * cause a CFG4DATA for this same transaction 416 * this same transaction to assert in the other
416 * to assert in the other FIFO. Make sure we 417 * FIFO or a new snapshot SAVEPTRS interrupt
417 * loop one more time and check the other FIFO. 418 * in this FIFO. Even running a FIFO may not
419 * clear the transaction if we are still waiting
420 * for data to drain to the host. We must loop
421 * until the transaction is not active in either
422 * FIFO just to be sure. Reset our loop counter
423 * so we will visit both FIFOs again before
424 * declaring this transaction finished. We
425 * also delay a bit so that status has a chance
426 * to change before we look at this FIFO again.
418 */ 427 */
419 i = 0; 428 ahd_delay(200);
429 goto rescan_fifos;
420 } 430 }
421 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 431 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
422 ahd_set_scbptr(ahd, scbid); 432 ahd_set_scbptr(ahd, scbid);
@@ -429,19 +439,28 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
429 /* 439 /*
430 * The transfer completed with a residual. 440 * The transfer completed with a residual.
431 * Place this SCB on the complete DMA list 441 * Place this SCB on the complete DMA list
432 * so that we Update our in-core copy of the 442 * so that we update our in-core copy of the
433 * SCB before completing the command. 443 * SCB before completing the command.
434 */ 444 */
435 ahd_outb(ahd, SCB_SCSI_STATUS, 0); 445 ahd_outb(ahd, SCB_SCSI_STATUS, 0);
436 ahd_outb(ahd, SCB_SGPTR, 446 ahd_outb(ahd, SCB_SGPTR,
437 ahd_inb_scbram(ahd, SCB_SGPTR) 447 ahd_inb_scbram(ahd, SCB_SGPTR)
438 | SG_STATUS_VALID); 448 | SG_STATUS_VALID);
439 ahd_outw(ahd, SCB_TAG, SCB_GET_TAG(scb)); 449 ahd_outw(ahd, SCB_TAG, scbid);
450 ahd_outw(ahd, SCB_NEXT_COMPLETE, SCB_LIST_NULL);
440 comp_head = ahd_inw(ahd, COMPLETE_DMA_SCB_HEAD); 451 comp_head = ahd_inw(ahd, COMPLETE_DMA_SCB_HEAD);
441 ahd_outw(ahd, SCB_NEXT_COMPLETE, comp_head); 452 if (SCBID_IS_NULL(comp_head)) {
442 if (SCBID_IS_NULL(comp_head)) 453 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, scbid);
443 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, 454 ahd_outw(ahd, COMPLETE_DMA_SCB_TAIL, scbid);
444 SCB_GET_TAG(scb)); 455 } else {
456 u_int tail;
457
458 tail = ahd_inw(ahd, COMPLETE_DMA_SCB_TAIL);
459 ahd_set_scbptr(ahd, tail);
460 ahd_outw(ahd, SCB_NEXT_COMPLETE, scbid);
461 ahd_outw(ahd, COMPLETE_DMA_SCB_TAIL, scbid);
462 ahd_set_scbptr(ahd, scbid);
463 }
445 } else 464 } else
446 ahd_complete_scb(ahd, scb); 465 ahd_complete_scb(ahd, scb);
447 } 466 }
@@ -465,9 +484,22 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
465 break; 484 break;
466 ahd_delay(200); 485 ahd_delay(200);
467 } 486 }
468 if ((ccscbctl & CCSCBDIR) != 0) 487 /*
488 * We leave the sequencer to cleanup in the case of DMA's to
489 * update the qoutfifo. In all other cases (DMA's to the
490 * chip or a push of an SCB from the COMPLETE_DMA_SCB list),
491 * we disable the DMA engine so that the sequencer will not
492 * attempt to handle the DMA completion.
493 */
494 if ((ccscbctl & CCSCBDIR) != 0 || (ccscbctl & ARRDONE) != 0)
469 ahd_outb(ahd, CCSCBCTL, ccscbctl & ~(CCARREN|CCSCBEN)); 495 ahd_outb(ahd, CCSCBCTL, ccscbctl & ~(CCARREN|CCSCBEN));
470 496
497 /*
498 * Complete any SCBs that just finished
499 * being DMA'ed into the qoutfifo.
500 */
501 ahd_run_qoutfifo(ahd);
502
471 saved_scbptr = ahd_get_scbptr(ahd); 503 saved_scbptr = ahd_get_scbptr(ahd);
472 /* 504 /*
473 * Manually update/complete any completed SCBs that are waiting to be 505 * Manually update/complete any completed SCBs that are waiting to be
@@ -494,6 +526,24 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
494 scbid = next_scbid; 526 scbid = next_scbid;
495 } 527 }
496 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, SCB_LIST_NULL); 528 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, SCB_LIST_NULL);
529 ahd_outw(ahd, COMPLETE_DMA_SCB_TAIL, SCB_LIST_NULL);
530
531 scbid = ahd_inw(ahd, COMPLETE_ON_QFREEZE_HEAD);
532 while (!SCBID_IS_NULL(scbid)) {
533
534 ahd_set_scbptr(ahd, scbid);
535 next_scbid = ahd_inw_scbram(ahd, SCB_NEXT_COMPLETE);
536 scb = ahd_lookup_scb(ahd, scbid);
537 if (scb == NULL) {
538 printf("%s: Warning - Complete Qfrz SCB %d invalid\n",
539 ahd_name(ahd), scbid);
540 continue;
541 }
542
543 ahd_complete_scb(ahd, scb);
544 scbid = next_scbid;
545 }
546 ahd_outw(ahd, COMPLETE_ON_QFREEZE_HEAD, SCB_LIST_NULL);
497 547
498 scbid = ahd_inw(ahd, COMPLETE_SCB_HEAD); 548 scbid = ahd_inw(ahd, COMPLETE_SCB_HEAD);
499 while (!SCBID_IS_NULL(scbid)) { 549 while (!SCBID_IS_NULL(scbid)) {
@@ -558,150 +608,146 @@ ahd_run_data_fifo(struct ahd_softc *ahd, struct scb *scb)
558{ 608{
559 u_int seqintsrc; 609 u_int seqintsrc;
560 610
561 while (1) { 611 seqintsrc = ahd_inb(ahd, SEQINTSRC);
562 seqintsrc = ahd_inb(ahd, SEQINTSRC); 612 if ((seqintsrc & CFG4DATA) != 0) {
563 if ((seqintsrc & CFG4DATA) != 0) { 613 uint32_t datacnt;
564 uint32_t datacnt; 614 uint32_t sgptr;
565 uint32_t sgptr;
566
567 /*
568 * Clear full residual flag.
569 */
570 sgptr = ahd_inl_scbram(ahd, SCB_SGPTR) & ~SG_FULL_RESID;
571 ahd_outb(ahd, SCB_SGPTR, sgptr);
572 615
573 /* 616 /*
574 * Load datacnt and address. 617 * Clear full residual flag.
575 */ 618 */
576 datacnt = ahd_inl_scbram(ahd, SCB_DATACNT); 619 sgptr = ahd_inl_scbram(ahd, SCB_SGPTR) & ~SG_FULL_RESID;
577 if ((datacnt & AHD_DMA_LAST_SEG) != 0) { 620 ahd_outb(ahd, SCB_SGPTR, sgptr);
578 sgptr |= LAST_SEG;
579 ahd_outb(ahd, SG_STATE, 0);
580 } else
581 ahd_outb(ahd, SG_STATE, LOADING_NEEDED);
582 ahd_outq(ahd, HADDR, ahd_inq_scbram(ahd, SCB_DATAPTR));
583 ahd_outl(ahd, HCNT, datacnt & AHD_SG_LEN_MASK);
584 ahd_outb(ahd, SG_CACHE_PRE, sgptr);
585 ahd_outb(ahd, DFCNTRL, PRELOADEN|SCSIEN|HDMAEN);
586 621
587 /* 622 /*
588 * Initialize Residual Fields. 623 * Load datacnt and address.
589 */ 624 */
590 ahd_outb(ahd, SCB_RESIDUAL_DATACNT+3, datacnt >> 24); 625 datacnt = ahd_inl_scbram(ahd, SCB_DATACNT);
591 ahd_outl(ahd, SCB_RESIDUAL_SGPTR, sgptr & SG_PTR_MASK); 626 if ((datacnt & AHD_DMA_LAST_SEG) != 0) {
627 sgptr |= LAST_SEG;
628 ahd_outb(ahd, SG_STATE, 0);
629 } else
630 ahd_outb(ahd, SG_STATE, LOADING_NEEDED);
631 ahd_outq(ahd, HADDR, ahd_inq_scbram(ahd, SCB_DATAPTR));
632 ahd_outl(ahd, HCNT, datacnt & AHD_SG_LEN_MASK);
633 ahd_outb(ahd, SG_CACHE_PRE, sgptr);
634 ahd_outb(ahd, DFCNTRL, PRELOADEN|SCSIEN|HDMAEN);
592 635
593 /* 636 /*
594 * Mark the SCB as having a FIFO in use. 637 * Initialize Residual Fields.
595 */ 638 */
596 ahd_outb(ahd, SCB_FIFO_USE_COUNT, 639 ahd_outb(ahd, SCB_RESIDUAL_DATACNT+3, datacnt >> 24);
597 ahd_inb_scbram(ahd, SCB_FIFO_USE_COUNT) + 1); 640 ahd_outl(ahd, SCB_RESIDUAL_SGPTR, sgptr & SG_PTR_MASK);
598 641
599 /* 642 /*
600 * Install a "fake" handler for this FIFO. 643 * Mark the SCB as having a FIFO in use.
601 */ 644 */
602 ahd_outw(ahd, LONGJMP_ADDR, 0); 645 ahd_outb(ahd, SCB_FIFO_USE_COUNT,
646 ahd_inb_scbram(ahd, SCB_FIFO_USE_COUNT) + 1);
603 647
604 /* 648 /*
605 * Notify the hardware that we have satisfied 649 * Install a "fake" handler for this FIFO.
606 * this sequencer interrupt. 650 */
607 */ 651 ahd_outw(ahd, LONGJMP_ADDR, 0);
608 ahd_outb(ahd, CLRSEQINTSRC, CLRCFG4DATA);
609 } else if ((seqintsrc & SAVEPTRS) != 0) {
610 uint32_t sgptr;
611 uint32_t resid;
612 652
613 if ((ahd_inb(ahd, LONGJMP_ADDR+1)&INVALID_ADDR) != 0) { 653 /*
614 /* 654 * Notify the hardware that we have satisfied
615 * Snapshot Save Pointers. Clear 655 * this sequencer interrupt.
616 * the snapshot and continue. 656 */
617 */ 657 ahd_outb(ahd, CLRSEQINTSRC, CLRCFG4DATA);
618 ahd_outb(ahd, DFFSXFRCTL, CLRCHN); 658 } else if ((seqintsrc & SAVEPTRS) != 0) {
619 continue; 659 uint32_t sgptr;
620 } 660 uint32_t resid;
621 661
662 if ((ahd_inb(ahd, LONGJMP_ADDR+1)&INVALID_ADDR) != 0) {
622 /* 663 /*
623 * Disable S/G fetch so the DMA engine 664 * Snapshot Save Pointers. All that
624 * is available to future users. 665 * is necessary to clear the snapshot
666 * is a CLRCHN.
625 */ 667 */
626 if ((ahd_inb(ahd, SG_STATE) & FETCH_INPROG) != 0) 668 goto clrchn;
627 ahd_outb(ahd, CCSGCTL, 0); 669 }
628 ahd_outb(ahd, SG_STATE, 0);
629 670
630 /* 671 /*
631 * Flush the data FIFO. Strickly only 672 * Disable S/G fetch so the DMA engine
632 * necessary for Rev A parts. 673 * is available to future users.
633 */ 674 */
634 ahd_outb(ahd, DFCNTRL, 675 if ((ahd_inb(ahd, SG_STATE) & FETCH_INPROG) != 0)
635 ahd_inb(ahd, DFCNTRL) | FIFOFLUSH); 676 ahd_outb(ahd, CCSGCTL, 0);
677 ahd_outb(ahd, SG_STATE, 0);
636 678
637 /* 679 /*
638 * Calculate residual. 680 * Flush the data FIFO. Strickly only
639 */ 681 * necessary for Rev A parts.
640 sgptr = ahd_inl_scbram(ahd, SCB_RESIDUAL_SGPTR); 682 */
641 resid = ahd_inl(ahd, SHCNT); 683 ahd_outb(ahd, DFCNTRL, ahd_inb(ahd, DFCNTRL) | FIFOFLUSH);
642 resid |=
643 ahd_inb_scbram(ahd, SCB_RESIDUAL_DATACNT+3) << 24;
644 ahd_outl(ahd, SCB_RESIDUAL_DATACNT, resid);
645 if ((ahd_inb(ahd, SG_CACHE_SHADOW) & LAST_SEG) == 0) {
646 /*
647 * Must back up to the correct S/G element.
648 * Typically this just means resetting our
649 * low byte to the offset in the SG_CACHE,
650 * but if we wrapped, we have to correct
651 * the other bytes of the sgptr too.
652 */
653 if ((ahd_inb(ahd, SG_CACHE_SHADOW) & 0x80) != 0
654 && (sgptr & 0x80) == 0)
655 sgptr -= 0x100;
656 sgptr &= ~0xFF;
657 sgptr |= ahd_inb(ahd, SG_CACHE_SHADOW)
658 & SG_ADDR_MASK;
659 ahd_outl(ahd, SCB_RESIDUAL_SGPTR, sgptr);
660 ahd_outb(ahd, SCB_RESIDUAL_DATACNT + 3, 0);
661 } else if ((resid & AHD_SG_LEN_MASK) == 0) {
662 ahd_outb(ahd, SCB_RESIDUAL_SGPTR,
663 sgptr | SG_LIST_NULL);
664 }
665 /*
666 * Save Pointers.
667 */
668 ahd_outq(ahd, SCB_DATAPTR, ahd_inq(ahd, SHADDR));
669 ahd_outl(ahd, SCB_DATACNT, resid);
670 ahd_outl(ahd, SCB_SGPTR, sgptr);
671 ahd_outb(ahd, CLRSEQINTSRC, CLRSAVEPTRS);
672 ahd_outb(ahd, SEQIMODE,
673 ahd_inb(ahd, SEQIMODE) | ENSAVEPTRS);
674 /*
675 * If the data is to the SCSI bus, we are
676 * done, otherwise wait for FIFOEMP.
677 */
678 if ((ahd_inb(ahd, DFCNTRL) & DIRECTION) != 0)
679 break;
680 } else if ((ahd_inb(ahd, SG_STATE) & LOADING_NEEDED) != 0) {
681 uint32_t sgptr;
682 uint64_t data_addr;
683 uint32_t data_len;
684 u_int dfcntrl;
685 684
685 /*
686 * Calculate residual.
687 */
688 sgptr = ahd_inl_scbram(ahd, SCB_RESIDUAL_SGPTR);
689 resid = ahd_inl(ahd, SHCNT);
690 resid |= ahd_inb_scbram(ahd, SCB_RESIDUAL_DATACNT+3) << 24;
691 ahd_outl(ahd, SCB_RESIDUAL_DATACNT, resid);
692 if ((ahd_inb(ahd, SG_CACHE_SHADOW) & LAST_SEG) == 0) {
686 /* 693 /*
687 * Disable S/G fetch so the DMA engine 694 * Must back up to the correct S/G element.
688 * is available to future users. 695 * Typically this just means resetting our
696 * low byte to the offset in the SG_CACHE,
697 * but if we wrapped, we have to correct
698 * the other bytes of the sgptr too.
689 */ 699 */
690 if ((ahd_inb(ahd, SG_STATE) & FETCH_INPROG) != 0) { 700 if ((ahd_inb(ahd, SG_CACHE_SHADOW) & 0x80) != 0
691 ahd_outb(ahd, CCSGCTL, 0); 701 && (sgptr & 0x80) == 0)
692 ahd_outb(ahd, SG_STATE, LOADING_NEEDED); 702 sgptr -= 0x100;
693 } 703 sgptr &= ~0xFF;
704 sgptr |= ahd_inb(ahd, SG_CACHE_SHADOW)
705 & SG_ADDR_MASK;
706 ahd_outl(ahd, SCB_RESIDUAL_SGPTR, sgptr);
707 ahd_outb(ahd, SCB_RESIDUAL_DATACNT + 3, 0);
708 } else if ((resid & AHD_SG_LEN_MASK) == 0) {
709 ahd_outb(ahd, SCB_RESIDUAL_SGPTR,
710 sgptr | SG_LIST_NULL);
711 }
712 /*
713 * Save Pointers.
714 */
715 ahd_outq(ahd, SCB_DATAPTR, ahd_inq(ahd, SHADDR));
716 ahd_outl(ahd, SCB_DATACNT, resid);
717 ahd_outl(ahd, SCB_SGPTR, sgptr);
718 ahd_outb(ahd, CLRSEQINTSRC, CLRSAVEPTRS);
719 ahd_outb(ahd, SEQIMODE,
720 ahd_inb(ahd, SEQIMODE) | ENSAVEPTRS);
721 /*
722 * If the data is to the SCSI bus, we are
723 * done, otherwise wait for FIFOEMP.
724 */
725 if ((ahd_inb(ahd, DFCNTRL) & DIRECTION) != 0)
726 goto clrchn;
727 } else if ((ahd_inb(ahd, SG_STATE) & LOADING_NEEDED) != 0) {
728 uint32_t sgptr;
729 uint64_t data_addr;
730 uint32_t data_len;
731 u_int dfcntrl;
694 732
695 /* 733 /*
696 * Wait for the DMA engine to notice that the 734 * Disable S/G fetch so the DMA engine
697 * host transfer is enabled and that there is 735 * is available to future users. We won't
698 * space in the S/G FIFO for new segments before 736 * be using the DMA engine to load segments.
699 * loading more segments. 737 */
700 */ 738 if ((ahd_inb(ahd, SG_STATE) & FETCH_INPROG) != 0) {
701 if ((ahd_inb(ahd, DFSTATUS) & PRELOAD_AVAIL) == 0) 739 ahd_outb(ahd, CCSGCTL, 0);
702 continue; 740 ahd_outb(ahd, SG_STATE, LOADING_NEEDED);
703 if ((ahd_inb(ahd, DFCNTRL) & HDMAENACK) == 0) 741 }
704 continue; 742
743 /*
744 * Wait for the DMA engine to notice that the
745 * host transfer is enabled and that there is
746 * space in the S/G FIFO for new segments before
747 * loading more segments.
748 */
749 if ((ahd_inb(ahd, DFSTATUS) & PRELOAD_AVAIL) != 0
750 && (ahd_inb(ahd, DFCNTRL) & HDMAENACK) != 0) {
705 751
706 /* 752 /*
707 * Determine the offset of the next S/G 753 * Determine the offset of the next S/G
@@ -748,7 +794,7 @@ ahd_run_data_fifo(struct ahd_softc *ahd, struct scb *scb)
748 * Advertise the segment to the hardware. 794 * Advertise the segment to the hardware.
749 */ 795 */
750 dfcntrl = ahd_inb(ahd, DFCNTRL)|PRELOADEN|HDMAEN; 796 dfcntrl = ahd_inb(ahd, DFCNTRL)|PRELOADEN|HDMAEN;
751 if ((ahd->features & AHD_NEW_DFCNTRL_OPTS)!=0) { 797 if ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0) {
752 /* 798 /*
753 * Use SCSIENWRDIS so that SCSIEN 799 * Use SCSIENWRDIS so that SCSIEN
754 * is never modified by this 800 * is never modified by this
@@ -757,35 +803,44 @@ ahd_run_data_fifo(struct ahd_softc *ahd, struct scb *scb)
757 dfcntrl |= SCSIENWRDIS; 803 dfcntrl |= SCSIENWRDIS;
758 } 804 }
759 ahd_outb(ahd, DFCNTRL, dfcntrl); 805 ahd_outb(ahd, DFCNTRL, dfcntrl);
760 } else if ((ahd_inb(ahd, SG_CACHE_SHADOW)
761 & LAST_SEG_DONE) != 0) {
762
763 /*
764 * Transfer completed to the end of SG list
765 * and has flushed to the host.
766 */
767 ahd_outb(ahd, SCB_SGPTR,
768 ahd_inb_scbram(ahd, SCB_SGPTR) | SG_LIST_NULL);
769 break;
770 } else if ((ahd_inb(ahd, DFSTATUS) & FIFOEMP) != 0) {
771 break;
772 } 806 }
773 ahd_delay(200); 807 } else if ((ahd_inb(ahd, SG_CACHE_SHADOW) & LAST_SEG_DONE) != 0) {
808
809 /*
810 * Transfer completed to the end of SG list
811 * and has flushed to the host.
812 */
813 ahd_outb(ahd, SCB_SGPTR,
814 ahd_inb_scbram(ahd, SCB_SGPTR) | SG_LIST_NULL);
815 goto clrchn;
816 } else if ((ahd_inb(ahd, DFSTATUS) & FIFOEMP) != 0) {
817clrchn:
818 /*
819 * Clear any handler for this FIFO, decrement
820 * the FIFO use count for the SCB, and release
821 * the FIFO.
822 */
823 ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR);
824 ahd_outb(ahd, SCB_FIFO_USE_COUNT,
825 ahd_inb_scbram(ahd, SCB_FIFO_USE_COUNT) - 1);
826 ahd_outb(ahd, DFFSXFRCTL, CLRCHN);
774 } 827 }
775 /*
776 * Clear any handler for this FIFO, decrement
777 * the FIFO use count for the SCB, and release
778 * the FIFO.
779 */
780 ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR);
781 ahd_outb(ahd, SCB_FIFO_USE_COUNT,
782 ahd_inb_scbram(ahd, SCB_FIFO_USE_COUNT) - 1);
783 ahd_outb(ahd, DFFSXFRCTL, CLRCHN);
784} 828}
785 829
830/*
831 * Look for entries in the QoutFIFO that have completed.
832 * The valid_tag completion field indicates the validity
833 * of the entry - the valid value toggles each time through
834 * the queue. We use the sg_status field in the completion
835 * entry to avoid referencing the hscb if the completion
836 * occurred with no errors and no residual. sg_status is
837 * a copy of the first byte (little endian) of the sgptr
838 * hscb field.
839 */
786void 840void
787ahd_run_qoutfifo(struct ahd_softc *ahd) 841ahd_run_qoutfifo(struct ahd_softc *ahd)
788{ 842{
843 struct ahd_completion *completion;
789 struct scb *scb; 844 struct scb *scb;
790 u_int scb_index; 845 u_int scb_index;
791 846
@@ -793,11 +848,13 @@ ahd_run_qoutfifo(struct ahd_softc *ahd)
793 panic("ahd_run_qoutfifo recursion"); 848 panic("ahd_run_qoutfifo recursion");
794 ahd->flags |= AHD_RUNNING_QOUTFIFO; 849 ahd->flags |= AHD_RUNNING_QOUTFIFO;
795 ahd_sync_qoutfifo(ahd, BUS_DMASYNC_POSTREAD); 850 ahd_sync_qoutfifo(ahd, BUS_DMASYNC_POSTREAD);
796 while ((ahd->qoutfifo[ahd->qoutfifonext] 851 for (;;) {
797 & QOUTFIFO_ENTRY_VALID_LE) == ahd->qoutfifonext_valid_tag) { 852 completion = &ahd->qoutfifo[ahd->qoutfifonext];
798 853
799 scb_index = ahd_le16toh(ahd->qoutfifo[ahd->qoutfifonext] 854 if (completion->valid_tag != ahd->qoutfifonext_valid_tag)
800 & ~QOUTFIFO_ENTRY_VALID_LE); 855 break;
856
857 scb_index = ahd_le16toh(completion->tag);
801 scb = ahd_lookup_scb(ahd, scb_index); 858 scb = ahd_lookup_scb(ahd, scb_index);
802 if (scb == NULL) { 859 if (scb == NULL) {
803 printf("%s: WARNING no command for scb %d " 860 printf("%s: WARNING no command for scb %d "
@@ -805,12 +862,15 @@ ahd_run_qoutfifo(struct ahd_softc *ahd)
805 ahd_name(ahd), scb_index, 862 ahd_name(ahd), scb_index,
806 ahd->qoutfifonext); 863 ahd->qoutfifonext);
807 ahd_dump_card_state(ahd); 864 ahd_dump_card_state(ahd);
808 } else 865 } else if ((completion->sg_status & SG_STATUS_VALID) != 0) {
809 ahd_complete_scb(ahd, scb); 866 ahd_handle_scb_status(ahd, scb);
867 } else {
868 ahd_done(ahd, scb);
869 }
810 870
811 ahd->qoutfifonext = (ahd->qoutfifonext+1) & (AHD_QOUT_SIZE-1); 871 ahd->qoutfifonext = (ahd->qoutfifonext+1) & (AHD_QOUT_SIZE-1);
812 if (ahd->qoutfifonext == 0) 872 if (ahd->qoutfifonext == 0)
813 ahd->qoutfifonext_valid_tag ^= QOUTFIFO_ENTRY_VALID_LE; 873 ahd->qoutfifonext_valid_tag ^= QOUTFIFO_ENTRY_VALID;
814 } 874 }
815 ahd->flags &= ~AHD_RUNNING_QOUTFIFO; 875 ahd->flags &= ~AHD_RUNNING_QOUTFIFO;
816} 876}
@@ -876,26 +936,6 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
876 ahd_name(ahd), seqintcode); 936 ahd_name(ahd), seqintcode);
877#endif 937#endif
878 switch (seqintcode) { 938 switch (seqintcode) {
879 case BAD_SCB_STATUS:
880 {
881 struct scb *scb;
882 u_int scbid;
883 int cmds_pending;
884
885 scbid = ahd_get_scbptr(ahd);
886 scb = ahd_lookup_scb(ahd, scbid);
887 if (scb != NULL) {
888 ahd_complete_scb(ahd, scb);
889 } else {
890 printf("%s: WARNING no command for scb %d "
891 "(bad status)\n", ahd_name(ahd), scbid);
892 ahd_dump_card_state(ahd);
893 }
894 cmds_pending = ahd_inw(ahd, CMDS_PENDING);
895 if (cmds_pending > 0)
896 ahd_outw(ahd, CMDS_PENDING, cmds_pending - 1);
897 break;
898 }
899 case ENTERING_NONPACK: 939 case ENTERING_NONPACK:
900 { 940 {
901 struct scb *scb; 941 struct scb *scb;
@@ -1060,7 +1100,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
1060 ahd_outb(ahd, SAVED_LUN, 0); 1100 ahd_outb(ahd, SAVED_LUN, 0);
1061 ahd_outb(ahd, SEQ_FLAGS, 0); 1101 ahd_outb(ahd, SEQ_FLAGS, 0);
1062 ahd_assert_atn(ahd); 1102 ahd_assert_atn(ahd);
1063 scb->flags &= ~(SCB_PACKETIZED); 1103 scb->flags &= ~SCB_PACKETIZED;
1064 scb->flags |= SCB_ABORT|SCB_CMDPHASE_ABORT; 1104 scb->flags |= SCB_ABORT|SCB_CMDPHASE_ABORT;
1065 ahd_freeze_devq(ahd, scb); 1105 ahd_freeze_devq(ahd, scb);
1066 ahd_set_transaction_status(scb, CAM_REQUEUE_REQ); 1106 ahd_set_transaction_status(scb, CAM_REQUEUE_REQ);
@@ -1503,9 +1543,6 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1503 && (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) != 0) 1543 && (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) != 0)
1504 scb = NULL; 1544 scb = NULL;
1505 1545
1506 /* Make sure the sequencer is in a safe location. */
1507 ahd_clear_critical_section(ahd);
1508
1509 if ((status0 & IOERR) != 0) { 1546 if ((status0 & IOERR) != 0) {
1510 u_int now_lvd; 1547 u_int now_lvd;
1511 1548
@@ -1521,26 +1558,35 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1521 ahd_setup_iocell_workaround(ahd); 1558 ahd_setup_iocell_workaround(ahd);
1522 ahd_unpause(ahd); 1559 ahd_unpause(ahd);
1523 } else if ((status0 & OVERRUN) != 0) { 1560 } else if ((status0 & OVERRUN) != 0) {
1561
1524 printf("%s: SCSI offset overrun detected. Resetting bus.\n", 1562 printf("%s: SCSI offset overrun detected. Resetting bus.\n",
1525 ahd_name(ahd)); 1563 ahd_name(ahd));
1526 ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE); 1564 ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
1527 } else if ((status & SCSIRSTI) != 0) { 1565 } else if ((status & SCSIRSTI) != 0) {
1566
1528 printf("%s: Someone reset channel A\n", ahd_name(ahd)); 1567 printf("%s: Someone reset channel A\n", ahd_name(ahd));
1529 ahd_reset_channel(ahd, 'A', /*Initiate Reset*/FALSE); 1568 ahd_reset_channel(ahd, 'A', /*Initiate Reset*/FALSE);
1530 } else if ((status & SCSIPERR) != 0) { 1569 } else if ((status & SCSIPERR) != 0) {
1570
1571 /* Make sure the sequencer is in a safe location. */
1572 ahd_clear_critical_section(ahd);
1573
1531 ahd_handle_transmission_error(ahd); 1574 ahd_handle_transmission_error(ahd);
1532 } else if (lqostat0 != 0) { 1575 } else if (lqostat0 != 0) {
1576
1533 printf("%s: lqostat0 == 0x%x!\n", ahd_name(ahd), lqostat0); 1577 printf("%s: lqostat0 == 0x%x!\n", ahd_name(ahd), lqostat0);
1534 ahd_outb(ahd, CLRLQOINT0, lqostat0); 1578 ahd_outb(ahd, CLRLQOINT0, lqostat0);
1535 if ((ahd->bugs & AHD_CLRLQO_AUTOCLR_BUG) != 0) { 1579 if ((ahd->bugs & AHD_CLRLQO_AUTOCLR_BUG) != 0)
1536 ahd_outb(ahd, CLRLQOINT1, 0); 1580 ahd_outb(ahd, CLRLQOINT1, 0);
1537 }
1538 } else if ((status & SELTO) != 0) { 1581 } else if ((status & SELTO) != 0) {
1539 u_int scbid; 1582 u_int scbid;
1540 1583
1541 /* Stop the selection */ 1584 /* Stop the selection */
1542 ahd_outb(ahd, SCSISEQ0, 0); 1585 ahd_outb(ahd, SCSISEQ0, 0);
1543 1586
1587 /* Make sure the sequencer is in a safe location. */
1588 ahd_clear_critical_section(ahd);
1589
1544 /* No more pending messages */ 1590 /* No more pending messages */
1545 ahd_clear_msg_state(ahd); 1591 ahd_clear_msg_state(ahd);
1546 1592
@@ -1573,24 +1619,27 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1573 scbid); 1619 scbid);
1574 } 1620 }
1575#endif 1621#endif
1576 /*
1577 * Force a renegotiation with this target just in
1578 * case the cable was pulled and will later be
1579 * re-attached. The target may forget its negotiation
1580 * settings with us should it attempt to reselect
1581 * during the interruption. The target will not issue
1582 * a unit attention in this case, so we must always
1583 * renegotiate.
1584 */
1585 ahd_scb_devinfo(ahd, &devinfo, scb); 1622 ahd_scb_devinfo(ahd, &devinfo, scb);
1586 ahd_force_renegotiation(ahd, &devinfo);
1587 ahd_set_transaction_status(scb, CAM_SEL_TIMEOUT); 1623 ahd_set_transaction_status(scb, CAM_SEL_TIMEOUT);
1588 ahd_freeze_devq(ahd, scb); 1624 ahd_freeze_devq(ahd, scb);
1625
1626 /*
1627 * Cancel any pending transactions on the device
1628 * now that it seems to be missing. This will
1629 * also revert us to async/narrow transfers until
1630 * we can renegotiate with the device.
1631 */
1632 ahd_handle_devreset(ahd, &devinfo,
1633 CAM_LUN_WILDCARD,
1634 CAM_SEL_TIMEOUT,
1635 "Selection Timeout",
1636 /*verbose_level*/1);
1589 } 1637 }
1590 ahd_outb(ahd, CLRINT, CLRSCSIINT); 1638 ahd_outb(ahd, CLRINT, CLRSCSIINT);
1591 ahd_iocell_first_selection(ahd); 1639 ahd_iocell_first_selection(ahd);
1592 ahd_unpause(ahd); 1640 ahd_unpause(ahd);
1593 } else if ((status0 & (SELDI|SELDO)) != 0) { 1641 } else if ((status0 & (SELDI|SELDO)) != 0) {
1642
1594 ahd_iocell_first_selection(ahd); 1643 ahd_iocell_first_selection(ahd);
1595 ahd_unpause(ahd); 1644 ahd_unpause(ahd);
1596 } else if (status3 != 0) { 1645 } else if (status3 != 0) {
@@ -1598,6 +1647,10 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1598 ahd_name(ahd), status3); 1647 ahd_name(ahd), status3);
1599 ahd_outb(ahd, CLRSINT3, status3); 1648 ahd_outb(ahd, CLRSINT3, status3);
1600 } else if ((lqistat1 & (LQIPHASE_LQ|LQIPHASE_NLQ)) != 0) { 1649 } else if ((lqistat1 & (LQIPHASE_LQ|LQIPHASE_NLQ)) != 0) {
1650
1651 /* Make sure the sequencer is in a safe location. */
1652 ahd_clear_critical_section(ahd);
1653
1601 ahd_handle_lqiphase_error(ahd, lqistat1); 1654 ahd_handle_lqiphase_error(ahd, lqistat1);
1602 } else if ((lqistat1 & LQICRCI_NLQ) != 0) { 1655 } else if ((lqistat1 & LQICRCI_NLQ) != 0) {
1603 /* 1656 /*
@@ -1622,6 +1675,9 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1622 */ 1675 */
1623 ahd_outb(ahd, SCSISEQ0, 0); 1676 ahd_outb(ahd, SCSISEQ0, 0);
1624 1677
1678 /* Make sure the sequencer is in a safe location. */
1679 ahd_clear_critical_section(ahd);
1680
1625 /* 1681 /*
1626 * Determine what we were up to at the time of 1682 * Determine what we were up to at the time of
1627 * the busfree. 1683 * the busfree.
@@ -1659,7 +1715,16 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1659 clear_fifo = 0; 1715 clear_fifo = 0;
1660 packetized = (lqostat1 & LQOBUSFREE) != 0; 1716 packetized = (lqostat1 & LQOBUSFREE) != 0;
1661 if (!packetized 1717 if (!packetized
1662 && ahd_inb(ahd, LASTPHASE) == P_BUSFREE) 1718 && ahd_inb(ahd, LASTPHASE) == P_BUSFREE
1719 && (ahd_inb(ahd, SSTAT0) & SELDI) == 0
1720 && ((ahd_inb(ahd, SSTAT0) & SELDO) == 0
1721 || (ahd_inb(ahd, SCSISEQ0) & ENSELO) == 0))
1722 /*
1723 * Assume packetized if we are not
1724 * on the bus in a non-packetized
1725 * capacity and any pending selection
1726 * was a packetized selection.
1727 */
1663 packetized = 1; 1728 packetized = 1;
1664 break; 1729 break;
1665 } 1730 }
@@ -2310,8 +2375,7 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2310 "PRGMCNT == 0x%x\n", 2375 "PRGMCNT == 0x%x\n",
2311 ahd_lookup_phase_entry(lastphase)->phasemsg, 2376 ahd_lookup_phase_entry(lastphase)->phasemsg,
2312 aborted, 2377 aborted,
2313 ahd_inb(ahd, PRGMCNT) 2378 ahd_inw(ahd, PRGMCNT));
2314 | (ahd_inb(ahd, PRGMCNT+1) << 8));
2315 ahd_dump_card_state(ahd); 2379 ahd_dump_card_state(ahd);
2316 } 2380 }
2317 /* Always restart the sequencer. */ 2381 /* Always restart the sequencer. */
@@ -2474,8 +2538,7 @@ ahd_clear_critical_section(struct ahd_softc *ahd)
2474 u_int i; 2538 u_int i;
2475 2539
2476 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 2540 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
2477 seqaddr = ahd_inb(ahd, CURADDR) 2541 seqaddr = ahd_inw(ahd, CURADDR);
2478 | (ahd_inb(ahd, CURADDR+1) << 8);
2479 2542
2480 cs = ahd->critical_sections; 2543 cs = ahd->critical_sections;
2481 for (i = 0; i < ahd->num_critical_sections; i++, cs++) { 2544 for (i = 0; i < ahd->num_critical_sections; i++, cs++) {
@@ -3196,14 +3259,25 @@ ahd_update_neg_table(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
3196 iocell_opts[AHD_PRECOMP_SLEW_INDEX] &= ~AHD_PRECOMP_MASK; 3259 iocell_opts[AHD_PRECOMP_SLEW_INDEX] &= ~AHD_PRECOMP_MASK;
3197 3260
3198 if ((ahd->features & AHD_NEW_IOCELL_OPTS) != 0 3261 if ((ahd->features & AHD_NEW_IOCELL_OPTS) != 0
3199 && (ppr_opts & MSG_EXT_PPR_DT_REQ) != 0) { 3262 && (ppr_opts & MSG_EXT_PPR_DT_REQ) != 0
3263 && (ppr_opts & MSG_EXT_PPR_IU_REQ) == 0) {
3200 /* 3264 /*
3201 * Slow down our CRC interval to be 3265 * Slow down our CRC interval to be
3202 * compatible with devices that can't 3266 * compatible with non-packetized
3203 * handle a CRC at full speed. 3267 * U160 devices that can't handle a
3268 * CRC at full speed.
3204 */ 3269 */
3205 con_opts |= ENSLOWCRC; 3270 con_opts |= ENSLOWCRC;
3206 } 3271 }
3272
3273 if ((ahd->bugs & AHD_PACED_NEGTABLE_BUG) != 0) {
3274 /*
3275 * On H2A4, revert to a slower slewrate
3276 * on non-paced transfers.
3277 */
3278 iocell_opts[AHD_PRECOMP_SLEW_INDEX] &=
3279 ~AHD_SLEWRATE_MASK;
3280 }
3207 } 3281 }
3208 3282
3209 ahd_outb(ahd, ANNEXCOL, AHD_ANNEXCOL_PRECOMP_SLEW); 3283 ahd_outb(ahd, ANNEXCOL, AHD_ANNEXCOL_PRECOMP_SLEW);
@@ -3292,11 +3366,15 @@ ahd_update_pending_scbs(struct ahd_softc *ahd)
3292 * Force the sequencer to reinitialize the selection for 3366 * Force the sequencer to reinitialize the selection for
3293 * the command at the head of the execution queue if it 3367 * the command at the head of the execution queue if it
3294 * has already been setup. The negotiation changes may 3368 * has already been setup. The negotiation changes may
3295 * effect whether we select-out with ATN. 3369 * effect whether we select-out with ATN. It is only
3370 * safe to clear ENSELO when the bus is not free and no
3371 * selection is in progres or completed.
3296 */ 3372 */
3297 saved_modes = ahd_save_modes(ahd); 3373 saved_modes = ahd_save_modes(ahd);
3298 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 3374 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
3299 ahd_outb(ahd, SCSISEQ0, ahd_inb(ahd, SCSISEQ0) & ~ENSELO); 3375 if ((ahd_inb(ahd, SCSISIGI) & BSYI) != 0
3376 && (ahd_inb(ahd, SSTAT0) & (SELDO|SELINGO)) == 0)
3377 ahd_outb(ahd, SCSISEQ0, ahd_inb(ahd, SCSISEQ0) & ~ENSELO);
3300 saved_scbptr = ahd_get_scbptr(ahd); 3378 saved_scbptr = ahd_get_scbptr(ahd);
3301 /* Ensure that the hscbs down on the card match the new information */ 3379 /* Ensure that the hscbs down on the card match the new information */
3302 for (scb_tag = 0; scb_tag < ahd->scb_data.maxhscbs; scb_tag++) { 3380 for (scb_tag = 0; scb_tag < ahd->scb_data.maxhscbs; scb_tag++) {
@@ -4909,10 +4987,7 @@ ahd_reinitialize_dataptrs(struct ahd_softc *ahd)
4909 * Determine initial values for data_addr and data_cnt 4987 * Determine initial values for data_addr and data_cnt
4910 * for resuming the data phase. 4988 * for resuming the data phase.
4911 */ 4989 */
4912 sgptr = (ahd_inb_scbram(ahd, SCB_RESIDUAL_SGPTR + 3) << 24) 4990 sgptr = ahd_inl_scbram(ahd, SCB_RESIDUAL_SGPTR);
4913 | (ahd_inb_scbram(ahd, SCB_RESIDUAL_SGPTR + 2) << 16)
4914 | (ahd_inb_scbram(ahd, SCB_RESIDUAL_SGPTR + 1) << 8)
4915 | ahd_inb_scbram(ahd, SCB_RESIDUAL_SGPTR);
4916 sgptr &= SG_PTR_MASK; 4991 sgptr &= SG_PTR_MASK;
4917 4992
4918 resid = (ahd_inb_scbram(ahd, SCB_RESIDUAL_DATACNT + 2) << 16) 4993 resid = (ahd_inb_scbram(ahd, SCB_RESIDUAL_DATACNT + 2) << 16)
@@ -4930,10 +5005,7 @@ ahd_reinitialize_dataptrs(struct ahd_softc *ahd)
4930 dataptr = ahd_le64toh(sg->addr) 5005 dataptr = ahd_le64toh(sg->addr)
4931 + (ahd_le32toh(sg->len) & AHD_SG_LEN_MASK) 5006 + (ahd_le32toh(sg->len) & AHD_SG_LEN_MASK)
4932 - resid; 5007 - resid;
4933 ahd_outb(ahd, HADDR + 7, dataptr >> 56); 5008 ahd_outl(ahd, HADDR + 4, dataptr >> 32);
4934 ahd_outb(ahd, HADDR + 6, dataptr >> 48);
4935 ahd_outb(ahd, HADDR + 5, dataptr >> 40);
4936 ahd_outb(ahd, HADDR + 4, dataptr >> 32);
4937 } else { 5009 } else {
4938 struct ahd_dma_seg *sg; 5010 struct ahd_dma_seg *sg;
4939 5011
@@ -4948,10 +5020,7 @@ ahd_reinitialize_dataptrs(struct ahd_softc *ahd)
4948 ahd_outb(ahd, HADDR + 4, 5020 ahd_outb(ahd, HADDR + 4,
4949 (ahd_le32toh(sg->len) & ~AHD_SG_LEN_MASK) >> 24); 5021 (ahd_le32toh(sg->len) & ~AHD_SG_LEN_MASK) >> 24);
4950 } 5022 }
4951 ahd_outb(ahd, HADDR + 3, dataptr >> 24); 5023 ahd_outl(ahd, HADDR, dataptr);
4952 ahd_outb(ahd, HADDR + 2, dataptr >> 16);
4953 ahd_outb(ahd, HADDR + 1, dataptr >> 8);
4954 ahd_outb(ahd, HADDR, dataptr);
4955 ahd_outb(ahd, HCNT + 2, resid >> 16); 5024 ahd_outb(ahd, HCNT + 2, resid >> 16);
4956 ahd_outb(ahd, HCNT + 1, resid >> 8); 5025 ahd_outb(ahd, HCNT + 1, resid >> 8);
4957 ahd_outb(ahd, HCNT, resid); 5026 ahd_outb(ahd, HCNT, resid);
@@ -5011,13 +5080,14 @@ ahd_handle_devreset(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
5011 ahd_set_width(ahd, devinfo, MSG_EXT_WDTR_BUS_8_BIT, 5080 ahd_set_width(ahd, devinfo, MSG_EXT_WDTR_BUS_8_BIT,
5012 AHD_TRANS_CUR, /*paused*/TRUE); 5081 AHD_TRANS_CUR, /*paused*/TRUE);
5013 ahd_set_syncrate(ahd, devinfo, /*period*/0, /*offset*/0, 5082 ahd_set_syncrate(ahd, devinfo, /*period*/0, /*offset*/0,
5014 /*ppr_options*/0, AHD_TRANS_CUR, /*paused*/TRUE); 5083 /*ppr_options*/0, AHD_TRANS_CUR,
5084 /*paused*/TRUE);
5015 5085
5016 ahd_send_async(ahd, devinfo->channel, devinfo->target, 5086 if (status != CAM_SEL_TIMEOUT)
5017 lun, AC_SENT_BDR, NULL); 5087 ahd_send_async(ahd, devinfo->channel, devinfo->target,
5088 CAM_LUN_WILDCARD, AC_SENT_BDR, NULL);
5018 5089
5019 if (message != NULL 5090 if (message != NULL && bootverbose)
5020 && (verbose_level <= bootverbose))
5021 printf("%s: %s on %c:%d. %d SCBs aborted\n", ahd_name(ahd), 5091 printf("%s: %s on %c:%d. %d SCBs aborted\n", ahd_name(ahd),
5022 message, devinfo->channel, devinfo->target, found); 5092 message, devinfo->channel, devinfo->target, found);
5023} 5093}
@@ -5203,13 +5273,13 @@ ahd_free(struct ahd_softc *ahd)
5203 /* FALLTHROUGH */ 5273 /* FALLTHROUGH */
5204 case 4: 5274 case 4:
5205 ahd_dmamap_unload(ahd, ahd->shared_data_dmat, 5275 ahd_dmamap_unload(ahd, ahd->shared_data_dmat,
5206 ahd->shared_data_dmamap); 5276 ahd->shared_data_map.dmamap);
5207 /* FALLTHROUGH */ 5277 /* FALLTHROUGH */
5208 case 3: 5278 case 3:
5209 ahd_dmamem_free(ahd, ahd->shared_data_dmat, ahd->qoutfifo, 5279 ahd_dmamem_free(ahd, ahd->shared_data_dmat, ahd->qoutfifo,
5210 ahd->shared_data_dmamap); 5280 ahd->shared_data_map.dmamap);
5211 ahd_dmamap_destroy(ahd, ahd->shared_data_dmat, 5281 ahd_dmamap_destroy(ahd, ahd->shared_data_dmat,
5212 ahd->shared_data_dmamap); 5282 ahd->shared_data_map.dmamap);
5213 /* FALLTHROUGH */ 5283 /* FALLTHROUGH */
5214 case 2: 5284 case 2:
5215 ahd_dma_tag_destroy(ahd, ahd->shared_data_dmat); 5285 ahd_dma_tag_destroy(ahd, ahd->shared_data_dmat);
@@ -5975,16 +6045,13 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
5975 newcount = MIN(scb_data->sense_left, scb_data->scbs_left); 6045 newcount = MIN(scb_data->sense_left, scb_data->scbs_left);
5976 newcount = MIN(newcount, scb_data->sgs_left); 6046 newcount = MIN(newcount, scb_data->sgs_left);
5977 newcount = MIN(newcount, (AHD_SCB_MAX_ALLOC - scb_data->numscbs)); 6047 newcount = MIN(newcount, (AHD_SCB_MAX_ALLOC - scb_data->numscbs));
5978 scb_data->sense_left -= newcount;
5979 scb_data->scbs_left -= newcount;
5980 scb_data->sgs_left -= newcount;
5981 for (i = 0; i < newcount; i++) { 6048 for (i = 0; i < newcount; i++) {
5982 u_int col_tag;
5983
5984 struct scb_platform_data *pdata; 6049 struct scb_platform_data *pdata;
6050 u_int col_tag;
5985#ifndef __linux__ 6051#ifndef __linux__
5986 int error; 6052 int error;
5987#endif 6053#endif
6054
5988 next_scb = (struct scb *)malloc(sizeof(*next_scb), 6055 next_scb = (struct scb *)malloc(sizeof(*next_scb),
5989 M_DEVBUF, M_NOWAIT); 6056 M_DEVBUF, M_NOWAIT);
5990 if (next_scb == NULL) 6057 if (next_scb == NULL)
@@ -6041,6 +6108,9 @@ ahd_alloc_scbs(struct ahd_softc *ahd)
6041 sense_data += AHD_SENSE_BUFSIZE; 6108 sense_data += AHD_SENSE_BUFSIZE;
6042 sense_busaddr += AHD_SENSE_BUFSIZE; 6109 sense_busaddr += AHD_SENSE_BUFSIZE;
6043 scb_data->numscbs++; 6110 scb_data->numscbs++;
6111 scb_data->sense_left--;
6112 scb_data->scbs_left--;
6113 scb_data->sgs_left--;
6044 } 6114 }
6045} 6115}
6046 6116
@@ -6088,7 +6158,6 @@ static const char *termstat_strings[] = {
6088int 6158int
6089ahd_init(struct ahd_softc *ahd) 6159ahd_init(struct ahd_softc *ahd)
6090{ 6160{
6091 uint8_t *base_vaddr;
6092 uint8_t *next_vaddr; 6161 uint8_t *next_vaddr;
6093 dma_addr_t next_baddr; 6162 dma_addr_t next_baddr;
6094 size_t driver_data_size; 6163 size_t driver_data_size;
@@ -6156,7 +6225,7 @@ ahd_init(struct ahd_softc *ahd)
6156 * for the target mode role, we must additionally provide space for 6225 * for the target mode role, we must additionally provide space for
6157 * the incoming target command fifo. 6226 * the incoming target command fifo.
6158 */ 6227 */
6159 driver_data_size = AHD_SCB_MAX * sizeof(uint16_t) 6228 driver_data_size = AHD_SCB_MAX * sizeof(*ahd->qoutfifo)
6160 + sizeof(struct hardware_scb); 6229 + sizeof(struct hardware_scb);
6161 if ((ahd->features & AHD_TARGETMODE) != 0) 6230 if ((ahd->features & AHD_TARGETMODE) != 0)
6162 driver_data_size += AHD_TMODE_CMDS * sizeof(struct target_cmd); 6231 driver_data_size += AHD_TMODE_CMDS * sizeof(struct target_cmd);
@@ -6178,20 +6247,23 @@ ahd_init(struct ahd_softc *ahd)
6178 6247
6179 /* Allocation of driver data */ 6248 /* Allocation of driver data */
6180 if (ahd_dmamem_alloc(ahd, ahd->shared_data_dmat, 6249 if (ahd_dmamem_alloc(ahd, ahd->shared_data_dmat,
6181 (void **)&base_vaddr, 6250 (void **)&ahd->shared_data_map.vaddr,
6182 BUS_DMA_NOWAIT, &ahd->shared_data_dmamap) != 0) { 6251 BUS_DMA_NOWAIT,
6252 &ahd->shared_data_map.dmamap) != 0) {
6183 return (ENOMEM); 6253 return (ENOMEM);
6184 } 6254 }
6185 6255
6186 ahd->init_level++; 6256 ahd->init_level++;
6187 6257
6188 /* And permanently map it in */ 6258 /* And permanently map it in */
6189 ahd_dmamap_load(ahd, ahd->shared_data_dmat, ahd->shared_data_dmamap, 6259 ahd_dmamap_load(ahd, ahd->shared_data_dmat, ahd->shared_data_map.dmamap,
6190 base_vaddr, driver_data_size, ahd_dmamap_cb, 6260 ahd->shared_data_map.vaddr, driver_data_size,
6191 &ahd->shared_data_busaddr, /*flags*/0); 6261 ahd_dmamap_cb, &ahd->shared_data_map.physaddr,
6192 ahd->qoutfifo = (uint16_t *)base_vaddr; 6262 /*flags*/0);
6263 ahd->qoutfifo = (struct ahd_completion *)ahd->shared_data_map.vaddr;
6193 next_vaddr = (uint8_t *)&ahd->qoutfifo[AHD_QOUT_SIZE]; 6264 next_vaddr = (uint8_t *)&ahd->qoutfifo[AHD_QOUT_SIZE];
6194 next_baddr = ahd->shared_data_busaddr + AHD_QOUT_SIZE*sizeof(uint16_t); 6265 next_baddr = ahd->shared_data_map.physaddr
6266 + AHD_QOUT_SIZE*sizeof(struct ahd_completion);
6195 if ((ahd->features & AHD_TARGETMODE) != 0) { 6267 if ((ahd->features & AHD_TARGETMODE) != 0) {
6196 ahd->targetcmds = (struct target_cmd *)next_vaddr; 6268 ahd->targetcmds = (struct target_cmd *)next_vaddr;
6197 next_vaddr += AHD_TMODE_CMDS * sizeof(struct target_cmd); 6269 next_vaddr += AHD_TMODE_CMDS * sizeof(struct target_cmd);
@@ -6212,6 +6284,7 @@ ahd_init(struct ahd_softc *ahd)
6212 * specially from the DMA safe memory chunk used for the QOUTFIFO. 6284 * specially from the DMA safe memory chunk used for the QOUTFIFO.
6213 */ 6285 */
6214 ahd->next_queued_hscb = (struct hardware_scb *)next_vaddr; 6286 ahd->next_queued_hscb = (struct hardware_scb *)next_vaddr;
6287 ahd->next_queued_hscb_map = &ahd->shared_data_map;
6215 ahd->next_queued_hscb->hscb_busaddr = ahd_htole32(next_baddr); 6288 ahd->next_queued_hscb->hscb_busaddr = ahd_htole32(next_baddr);
6216 6289
6217 ahd->init_level++; 6290 ahd->init_level++;
@@ -6517,10 +6590,10 @@ ahd_chip_init(struct ahd_softc *ahd)
6517 6590
6518 /* All of our queues are empty */ 6591 /* All of our queues are empty */
6519 ahd->qoutfifonext = 0; 6592 ahd->qoutfifonext = 0;
6520 ahd->qoutfifonext_valid_tag = QOUTFIFO_ENTRY_VALID_LE; 6593 ahd->qoutfifonext_valid_tag = QOUTFIFO_ENTRY_VALID;
6521 ahd_outb(ahd, QOUTFIFO_ENTRY_VALID_TAG, QOUTFIFO_ENTRY_VALID >> 8); 6594 ahd_outb(ahd, QOUTFIFO_ENTRY_VALID_TAG, QOUTFIFO_ENTRY_VALID);
6522 for (i = 0; i < AHD_QOUT_SIZE; i++) 6595 for (i = 0; i < AHD_QOUT_SIZE; i++)
6523 ahd->qoutfifo[i] = 0; 6596 ahd->qoutfifo[i].valid_tag = 0;
6524 ahd_sync_qoutfifo(ahd, BUS_DMASYNC_PREREAD); 6597 ahd_sync_qoutfifo(ahd, BUS_DMASYNC_PREREAD);
6525 6598
6526 ahd->qinfifonext = 0; 6599 ahd->qinfifonext = 0;
@@ -6553,24 +6626,22 @@ ahd_chip_init(struct ahd_softc *ahd)
6553 ahd_outw(ahd, COMPLETE_SCB_HEAD, SCB_LIST_NULL); 6626 ahd_outw(ahd, COMPLETE_SCB_HEAD, SCB_LIST_NULL);
6554 ahd_outw(ahd, COMPLETE_SCB_DMAINPROG_HEAD, SCB_LIST_NULL); 6627 ahd_outw(ahd, COMPLETE_SCB_DMAINPROG_HEAD, SCB_LIST_NULL);
6555 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, SCB_LIST_NULL); 6628 ahd_outw(ahd, COMPLETE_DMA_SCB_HEAD, SCB_LIST_NULL);
6629 ahd_outw(ahd, COMPLETE_DMA_SCB_TAIL, SCB_LIST_NULL);
6630 ahd_outw(ahd, COMPLETE_ON_QFREEZE_HEAD, SCB_LIST_NULL);
6556 6631
6557 /* 6632 /*
6558 * The Freeze Count is 0. 6633 * The Freeze Count is 0.
6559 */ 6634 */
6635 ahd->qfreeze_cnt = 0;
6560 ahd_outw(ahd, QFREEZE_COUNT, 0); 6636 ahd_outw(ahd, QFREEZE_COUNT, 0);
6637 ahd_outw(ahd, KERNEL_QFREEZE_COUNT, 0);
6561 6638
6562 /* 6639 /*
6563 * Tell the sequencer where it can find our arrays in memory. 6640 * Tell the sequencer where it can find our arrays in memory.
6564 */ 6641 */
6565 busaddr = ahd->shared_data_busaddr; 6642 busaddr = ahd->shared_data_map.physaddr;
6566 ahd_outb(ahd, SHARED_DATA_ADDR, busaddr & 0xFF); 6643 ahd_outl(ahd, SHARED_DATA_ADDR, busaddr);
6567 ahd_outb(ahd, SHARED_DATA_ADDR + 1, (busaddr >> 8) & 0xFF); 6644 ahd_outl(ahd, QOUTFIFO_NEXT_ADDR, busaddr);
6568 ahd_outb(ahd, SHARED_DATA_ADDR + 2, (busaddr >> 16) & 0xFF);
6569 ahd_outb(ahd, SHARED_DATA_ADDR + 3, (busaddr >> 24) & 0xFF);
6570 ahd_outb(ahd, QOUTFIFO_NEXT_ADDR, busaddr & 0xFF);
6571 ahd_outb(ahd, QOUTFIFO_NEXT_ADDR + 1, (busaddr >> 8) & 0xFF);
6572 ahd_outb(ahd, QOUTFIFO_NEXT_ADDR + 2, (busaddr >> 16) & 0xFF);
6573 ahd_outb(ahd, QOUTFIFO_NEXT_ADDR + 3, (busaddr >> 24) & 0xFF);
6574 6645
6575 /* 6646 /*
6576 * Setup the allowed SCSI Sequences based on operational mode. 6647 * Setup the allowed SCSI Sequences based on operational mode.
@@ -6619,10 +6690,7 @@ ahd_chip_init(struct ahd_softc *ahd)
6619 * Tell the sequencer which SCB will be the next one it receives. 6690 * Tell the sequencer which SCB will be the next one it receives.
6620 */ 6691 */
6621 busaddr = ahd_le32toh(ahd->next_queued_hscb->hscb_busaddr); 6692 busaddr = ahd_le32toh(ahd->next_queued_hscb->hscb_busaddr);
6622 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 0, busaddr & 0xFF); 6693 ahd_outl(ahd, NEXT_QUEUED_SCB_ADDR, busaddr);
6623 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 1, (busaddr >> 8) & 0xFF);
6624 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 2, (busaddr >> 16) & 0xFF);
6625 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 3, (busaddr >> 24) & 0xFF);
6626 6694
6627 /* 6695 /*
6628 * Default to coalescing disabled. 6696 * Default to coalescing disabled.
@@ -6926,43 +6994,34 @@ ahd_pause_and_flushwork(struct ahd_softc *ahd)
6926{ 6994{
6927 u_int intstat; 6995 u_int intstat;
6928 u_int maxloops; 6996 u_int maxloops;
6929 u_int qfreeze_cnt;
6930 6997
6931 maxloops = 1000; 6998 maxloops = 1000;
6932 ahd->flags |= AHD_ALL_INTERRUPTS; 6999 ahd->flags |= AHD_ALL_INTERRUPTS;
6933 ahd_pause(ahd); 7000 ahd_pause(ahd);
6934 /* 7001 /*
6935 * Increment the QFreeze Count so that the sequencer 7002 * Freeze the outgoing selections. We do this only
6936 * will not start new selections. We do this only
6937 * until we are safely paused without further selections 7003 * until we are safely paused without further selections
6938 * pending. 7004 * pending.
6939 */ 7005 */
6940 ahd_outw(ahd, QFREEZE_COUNT, ahd_inw(ahd, QFREEZE_COUNT) + 1); 7006 ahd->qfreeze_cnt--;
7007 ahd_outw(ahd, KERNEL_QFREEZE_COUNT, ahd->qfreeze_cnt);
6941 ahd_outb(ahd, SEQ_FLAGS2, ahd_inb(ahd, SEQ_FLAGS2) | SELECTOUT_QFROZEN); 7008 ahd_outb(ahd, SEQ_FLAGS2, ahd_inb(ahd, SEQ_FLAGS2) | SELECTOUT_QFROZEN);
6942 do { 7009 do {
6943 struct scb *waiting_scb;
6944 7010
6945 ahd_unpause(ahd); 7011 ahd_unpause(ahd);
7012 /*
7013 * Give the sequencer some time to service
7014 * any active selections.
7015 */
7016 ahd_delay(500);
7017
6946 ahd_intr(ahd); 7018 ahd_intr(ahd);
6947 ahd_pause(ahd); 7019 ahd_pause(ahd);
6948 ahd_clear_critical_section(ahd);
6949 intstat = ahd_inb(ahd, INTSTAT); 7020 intstat = ahd_inb(ahd, INTSTAT);
6950 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 7021 if ((intstat & INT_PEND) == 0) {
6951 if ((ahd_inb(ahd, SSTAT0) & (SELDO|SELINGO)) == 0) 7022 ahd_clear_critical_section(ahd);
6952 ahd_outb(ahd, SCSISEQ0, 7023 intstat = ahd_inb(ahd, INTSTAT);
6953 ahd_inb(ahd, SCSISEQ0) & ~ENSELO); 7024 }
6954 /*
6955 * In the non-packetized case, the sequencer (for Rev A),
6956 * relies on ENSELO remaining set after SELDO. The hardware
6957 * auto-clears ENSELO in the packetized case.
6958 */
6959 waiting_scb = ahd_lookup_scb(ahd,
6960 ahd_inw(ahd, WAITING_TID_HEAD));
6961 if (waiting_scb != NULL
6962 && (waiting_scb->flags & SCB_PACKETIZED) == 0
6963 && (ahd_inb(ahd, SSTAT0) & (SELDO|SELINGO)) != 0)
6964 ahd_outb(ahd, SCSISEQ0,
6965 ahd_inb(ahd, SCSISEQ0) | ENSELO);
6966 } while (--maxloops 7025 } while (--maxloops
6967 && (intstat != 0xFF || (ahd->features & AHD_REMOVABLE) == 0) 7026 && (intstat != 0xFF || (ahd->features & AHD_REMOVABLE) == 0)
6968 && ((intstat & INT_PEND) != 0 7027 && ((intstat & INT_PEND) != 0
@@ -6973,17 +7032,8 @@ ahd_pause_and_flushwork(struct ahd_softc *ahd)
6973 printf("Infinite interrupt loop, INTSTAT = %x", 7032 printf("Infinite interrupt loop, INTSTAT = %x",
6974 ahd_inb(ahd, INTSTAT)); 7033 ahd_inb(ahd, INTSTAT));
6975 } 7034 }
6976 qfreeze_cnt = ahd_inw(ahd, QFREEZE_COUNT); 7035 ahd->qfreeze_cnt++;
6977 if (qfreeze_cnt == 0) { 7036 ahd_outw(ahd, KERNEL_QFREEZE_COUNT, ahd->qfreeze_cnt);
6978 printf("%s: ahd_pause_and_flushwork with 0 qfreeze count!\n",
6979 ahd_name(ahd));
6980 } else {
6981 qfreeze_cnt--;
6982 }
6983 ahd_outw(ahd, QFREEZE_COUNT, qfreeze_cnt);
6984 if (qfreeze_cnt == 0)
6985 ahd_outb(ahd, SEQ_FLAGS2,
6986 ahd_inb(ahd, SEQ_FLAGS2) & ~SELECTOUT_QFROZEN);
6987 7037
6988 ahd_flush_qoutfifo(ahd); 7038 ahd_flush_qoutfifo(ahd);
6989 7039
@@ -7155,10 +7205,7 @@ ahd_qinfifo_requeue(struct ahd_softc *ahd, struct scb *prev_scb,
7155 uint32_t busaddr; 7205 uint32_t busaddr;
7156 7206
7157 busaddr = ahd_le32toh(scb->hscb->hscb_busaddr); 7207 busaddr = ahd_le32toh(scb->hscb->hscb_busaddr);
7158 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 0, busaddr & 0xFF); 7208 ahd_outl(ahd, NEXT_QUEUED_SCB_ADDR, busaddr);
7159 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 1, (busaddr >> 8) & 0xFF);
7160 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 2, (busaddr >> 16) & 0xFF);
7161 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 3, (busaddr >> 24) & 0xFF);
7162 } else { 7209 } else {
7163 prev_scb->hscb->next_hscb_busaddr = scb->hscb->hscb_busaddr; 7210 prev_scb->hscb->next_hscb_busaddr = scb->hscb->hscb_busaddr;
7164 ahd_sync_scb(ahd, prev_scb, 7211 ahd_sync_scb(ahd, prev_scb,
@@ -7265,10 +7312,7 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7265 */ 7312 */
7266 ahd->qinfifonext = qinstart; 7313 ahd->qinfifonext = qinstart;
7267 busaddr = ahd_le32toh(ahd->next_queued_hscb->hscb_busaddr); 7314 busaddr = ahd_le32toh(ahd->next_queued_hscb->hscb_busaddr);
7268 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 0, busaddr & 0xFF); 7315 ahd_outl(ahd, NEXT_QUEUED_SCB_ADDR, busaddr);
7269 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 1, (busaddr >> 8) & 0xFF);
7270 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 2, (busaddr >> 16) & 0xFF);
7271 ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 3, (busaddr >> 24) & 0xFF);
7272 7316
7273 while (qinpos != qintail) { 7317 while (qinpos != qintail) {
7274 scb = ahd_lookup_scb(ahd, ahd->qinfifo[qinpos]); 7318 scb = ahd_lookup_scb(ahd, ahd->qinfifo[qinpos]);
@@ -7330,6 +7374,7 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7330 * appropriate, traverse the SCBs of each "their id" 7374 * appropriate, traverse the SCBs of each "their id"
7331 * looking for matches. 7375 * looking for matches.
7332 */ 7376 */
7377 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
7333 savedscbptr = ahd_get_scbptr(ahd); 7378 savedscbptr = ahd_get_scbptr(ahd);
7334 tid_next = ahd_inw(ahd, WAITING_TID_HEAD); 7379 tid_next = ahd_inw(ahd, WAITING_TID_HEAD);
7335 tid_prev = SCB_LIST_NULL; 7380 tid_prev = SCB_LIST_NULL;
@@ -7399,7 +7444,7 @@ ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
7399 u_int prev; 7444 u_int prev;
7400 int found; 7445 int found;
7401 7446
7402 AHD_ASSERT_MODES(ahd, AHD_MODE_CCHAN_MSK, AHD_MODE_CCHAN_MSK); 7447 AHD_ASSERT_MODES(ahd, AHD_MODE_SCSI_MSK, AHD_MODE_SCSI_MSK);
7403 found = 0; 7448 found = 0;
7404 prev = SCB_LIST_NULL; 7449 prev = SCB_LIST_NULL;
7405 next = *list_head; 7450 next = *list_head;
@@ -7466,7 +7511,7 @@ static void
7466ahd_stitch_tid_list(struct ahd_softc *ahd, u_int tid_prev, 7511ahd_stitch_tid_list(struct ahd_softc *ahd, u_int tid_prev,
7467 u_int tid_cur, u_int tid_next) 7512 u_int tid_cur, u_int tid_next)
7468{ 7513{
7469 AHD_ASSERT_MODES(ahd, AHD_MODE_CCHAN_MSK, AHD_MODE_CCHAN_MSK); 7514 AHD_ASSERT_MODES(ahd, AHD_MODE_SCSI_MSK, AHD_MODE_SCSI_MSK);
7470 7515
7471 if (SCBID_IS_NULL(tid_cur)) { 7516 if (SCBID_IS_NULL(tid_cur)) {
7472 7517
@@ -7506,7 +7551,7 @@ ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid,
7506{ 7551{
7507 u_int tail_offset; 7552 u_int tail_offset;
7508 7553
7509 AHD_ASSERT_MODES(ahd, AHD_MODE_CCHAN_MSK, AHD_MODE_CCHAN_MSK); 7554 AHD_ASSERT_MODES(ahd, AHD_MODE_SCSI_MSK, AHD_MODE_SCSI_MSK);
7510 if (!SCBID_IS_NULL(prev)) { 7555 if (!SCBID_IS_NULL(prev)) {
7511 ahd_set_scbptr(ahd, prev); 7556 ahd_set_scbptr(ahd, prev);
7512 ahd_outw(ahd, SCB_NEXT, next); 7557 ahd_outw(ahd, SCB_NEXT, next);
@@ -7739,7 +7784,7 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset)
7739 */ 7784 */
7740 ahd_clear_msg_state(ahd); 7785 ahd_clear_msg_state(ahd);
7741 ahd_outb(ahd, SIMODE1, 7786 ahd_outb(ahd, SIMODE1,
7742 ahd_inb(ahd, SIMODE1) & ~(ENBUSFREE|ENSCSIRST|ENBUSFREE)); 7787 ahd_inb(ahd, SIMODE1) & ~(ENBUSFREE|ENSCSIRST));
7743 7788
7744 if (initiate_reset) 7789 if (initiate_reset)
7745 ahd_reset_current_bus(ahd); 7790 ahd_reset_current_bus(ahd);
@@ -7910,30 +7955,35 @@ ahd_handle_scb_status(struct ahd_softc *ahd, struct scb *scb)
7910void 7955void
7911ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb) 7956ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)
7912{ 7957{
7913 struct hardware_scb *hscb; 7958 struct hardware_scb *hscb;
7914 u_int qfreeze_cnt; 7959 int paused;
7915 7960
7916 /* 7961 /*
7917 * The sequencer freezes its select-out queue 7962 * The sequencer freezes its select-out queue
7918 * anytime a SCSI status error occurs. We must 7963 * anytime a SCSI status error occurs. We must
7919 * handle the error and decrement the QFREEZE count 7964 * handle the error and increment our qfreeze count
7920 * to allow the sequencer to continue. 7965 * to allow the sequencer to continue. We don't
7966 * bother clearing critical sections here since all
7967 * operations are on data structures that the sequencer
7968 * is not touching once the queue is frozen.
7921 */ 7969 */
7922 hscb = scb->hscb; 7970 hscb = scb->hscb;
7923 7971
7972 if (ahd_is_paused(ahd)) {
7973 paused = 1;
7974 } else {
7975 paused = 0;
7976 ahd_pause(ahd);
7977 }
7978
7924 /* Freeze the queue until the client sees the error. */ 7979 /* Freeze the queue until the client sees the error. */
7925 ahd_freeze_devq(ahd, scb); 7980 ahd_freeze_devq(ahd, scb);
7926 ahd_freeze_scb(scb); 7981 ahd_freeze_scb(scb);
7927 qfreeze_cnt = ahd_inw(ahd, QFREEZE_COUNT); 7982 ahd->qfreeze_cnt++;
7928 if (qfreeze_cnt == 0) { 7983 ahd_outw(ahd, KERNEL_QFREEZE_COUNT, ahd->qfreeze_cnt);
7929 printf("%s: Bad status with 0 qfreeze count!\n", ahd_name(ahd)); 7984
7930 } else { 7985 if (paused == 0)
7931 qfreeze_cnt--; 7986 ahd_unpause(ahd);
7932 ahd_outw(ahd, QFREEZE_COUNT, qfreeze_cnt);
7933 }
7934 if (qfreeze_cnt == 0)
7935 ahd_outb(ahd, SEQ_FLAGS2,
7936 ahd_inb(ahd, SEQ_FLAGS2) & ~SELECTOUT_QFROZEN);
7937 7987
7938 /* Don't want to clobber the original sense code */ 7988 /* Don't want to clobber the original sense code */
7939 if ((scb->flags & SCB_SENSE) != 0) { 7989 if ((scb->flags & SCB_SENSE) != 0) {
@@ -8317,8 +8367,7 @@ ahd_dumpseq(struct ahd_softc* ahd)
8317 max_prog = 2048; 8367 max_prog = 2048;
8318 8368
8319 ahd_outb(ahd, SEQCTL0, PERRORDIS|FAILDIS|FASTMODE|LOADRAM); 8369 ahd_outb(ahd, SEQCTL0, PERRORDIS|FAILDIS|FASTMODE|LOADRAM);
8320 ahd_outb(ahd, PRGMCNT, 0); 8370 ahd_outw(ahd, PRGMCNT, 0);
8321 ahd_outb(ahd, PRGMCNT+1, 0);
8322 for (i = 0; i < max_prog; i++) { 8371 for (i = 0; i < max_prog; i++) {
8323 uint8_t ins_bytes[4]; 8372 uint8_t ins_bytes[4];
8324 8373
@@ -8347,13 +8396,14 @@ ahd_loadseq(struct ahd_softc *ahd)
8347 u_int sg_prefetch_cnt_limit; 8396 u_int sg_prefetch_cnt_limit;
8348 u_int sg_prefetch_align; 8397 u_int sg_prefetch_align;
8349 u_int sg_size; 8398 u_int sg_size;
8399 u_int cacheline_mask;
8350 uint8_t download_consts[DOWNLOAD_CONST_COUNT]; 8400 uint8_t download_consts[DOWNLOAD_CONST_COUNT];
8351 8401
8352 if (bootverbose) 8402 if (bootverbose)
8353 printf("%s: Downloading Sequencer Program...", 8403 printf("%s: Downloading Sequencer Program...",
8354 ahd_name(ahd)); 8404 ahd_name(ahd));
8355 8405
8356#if DOWNLOAD_CONST_COUNT != 7 8406#if DOWNLOAD_CONST_COUNT != 8
8357#error "Download Const Mismatch" 8407#error "Download Const Mismatch"
8358#endif 8408#endif
8359 /* 8409 /*
@@ -8389,6 +8439,9 @@ ahd_loadseq(struct ahd_softc *ahd)
8389 /* Round down to the nearest power of 2. */ 8439 /* Round down to the nearest power of 2. */
8390 while (powerof2(sg_prefetch_align) == 0) 8440 while (powerof2(sg_prefetch_align) == 0)
8391 sg_prefetch_align--; 8441 sg_prefetch_align--;
8442
8443 cacheline_mask = sg_prefetch_align - 1;
8444
8392 /* 8445 /*
8393 * If the cacheline boundary is greater than half our prefetch RAM 8446 * If the cacheline boundary is greater than half our prefetch RAM
8394 * we risk not being able to fetch even a single complete S/G 8447 * we risk not being able to fetch even a single complete S/G
@@ -8429,12 +8482,12 @@ ahd_loadseq(struct ahd_softc *ahd)
8429 download_consts[PKT_OVERRUN_BUFOFFSET] = 8482 download_consts[PKT_OVERRUN_BUFOFFSET] =
8430 (ahd->overrun_buf - (uint8_t *)ahd->qoutfifo) / 256; 8483 (ahd->overrun_buf - (uint8_t *)ahd->qoutfifo) / 256;
8431 download_consts[SCB_TRANSFER_SIZE] = SCB_TRANSFER_SIZE_1BYTE_LUN; 8484 download_consts[SCB_TRANSFER_SIZE] = SCB_TRANSFER_SIZE_1BYTE_LUN;
8485 download_consts[CACHELINE_MASK] = cacheline_mask;
8432 cur_patch = patches; 8486 cur_patch = patches;
8433 downloaded = 0; 8487 downloaded = 0;
8434 skip_addr = 0; 8488 skip_addr = 0;
8435 ahd_outb(ahd, SEQCTL0, PERRORDIS|FAILDIS|FASTMODE|LOADRAM); 8489 ahd_outb(ahd, SEQCTL0, PERRORDIS|FAILDIS|FASTMODE|LOADRAM);
8436 ahd_outb(ahd, PRGMCNT, 0); 8490 ahd_outw(ahd, PRGMCNT, 0);
8437 ahd_outb(ahd, PRGMCNT+1, 0);
8438 8491
8439 for (i = 0; i < sizeof(seqprog)/4; i++) { 8492 for (i = 0; i < sizeof(seqprog)/4; i++) {
8440 if (ahd_check_patch(ahd, &cur_patch, i, &skip_addr) == 0) { 8493 if (ahd_check_patch(ahd, &cur_patch, i, &skip_addr) == 0) {
@@ -8727,7 +8780,7 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8727 printf(">>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<<<<<<<<<<<<<\n" 8780 printf(">>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<<<<<<<<<<<<<\n"
8728 "%s: Dumping Card State at program address 0x%x Mode 0x%x\n", 8781 "%s: Dumping Card State at program address 0x%x Mode 0x%x\n",
8729 ahd_name(ahd), 8782 ahd_name(ahd),
8730 ahd_inb(ahd, CURADDR) | (ahd_inb(ahd, CURADDR+1) << 8), 8783 ahd_inw(ahd, CURADDR),
8731 ahd_build_mode_state(ahd, ahd->saved_src_mode, 8784 ahd_build_mode_state(ahd, ahd->saved_src_mode,
8732 ahd->saved_dst_mode)); 8785 ahd->saved_dst_mode));
8733 if (paused) 8786 if (paused)
@@ -8843,6 +8896,15 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8843 scb_index = ahd_inw_scbram(ahd, SCB_NEXT_COMPLETE); 8896 scb_index = ahd_inw_scbram(ahd, SCB_NEXT_COMPLETE);
8844 } 8897 }
8845 printf("\n"); 8898 printf("\n");
8899 printf("Sequencer On QFreeze and Complete list: ");
8900 scb_index = ahd_inw(ahd, COMPLETE_ON_QFREEZE_HEAD);
8901 i = 0;
8902 while (!SCBID_IS_NULL(scb_index) && i++ < AHD_SCB_MAX) {
8903 ahd_set_scbptr(ahd, scb_index);
8904 printf("%d ", scb_index);
8905 scb_index = ahd_inw_scbram(ahd, SCB_NEXT_COMPLETE);
8906 }
8907 printf("\n");
8846 ahd_set_scbptr(ahd, saved_scb_index); 8908 ahd_set_scbptr(ahd, saved_scb_index);
8847 dffstat = ahd_inb(ahd, DFFSTAT); 8909 dffstat = ahd_inb(ahd, DFFSTAT);
8848 for (i = 0; i < 2; i++) { 8910 for (i = 0; i < 2; i++) {
@@ -9077,7 +9139,7 @@ ahd_wait_seeprom(struct ahd_softc *ahd)
9077{ 9139{
9078 int cnt; 9140 int cnt;
9079 9141
9080 cnt = 20; 9142 cnt = 5000;
9081 while ((ahd_inb(ahd, SEESTAT) & (SEEARBACK|SEEBUSY)) != 0 && --cnt) 9143 while ((ahd_inb(ahd, SEESTAT) & (SEEARBACK|SEEBUSY)) != 0 && --cnt)
9082 ahd_delay(5); 9144 ahd_delay(5);
9083 9145
@@ -9423,13 +9485,9 @@ ahd_handle_en_lun(struct ahd_softc *ahd, struct cam_sim *sim, union ccb *ccb)
9423 if ((ahd->features & AHD_MULTI_TID) != 0) { 9485 if ((ahd->features & AHD_MULTI_TID) != 0) {
9424 u_int targid_mask; 9486 u_int targid_mask;
9425 9487
9426 targid_mask = ahd_inb(ahd, TARGID) 9488 targid_mask = ahd_inw(ahd, TARGID);
9427 | (ahd_inb(ahd, TARGID + 1) << 8);
9428
9429 targid_mask |= target_mask; 9489 targid_mask |= target_mask;
9430 ahd_outb(ahd, TARGID, targid_mask); 9490 ahd_outw(ahd, TARGID, targid_mask);
9431 ahd_outb(ahd, TARGID+1, (targid_mask >> 8));
9432
9433 ahd_update_scsiid(ahd, targid_mask); 9491 ahd_update_scsiid(ahd, targid_mask);
9434 } else { 9492 } else {
9435 u_int our_id; 9493 u_int our_id;
@@ -9543,14 +9601,9 @@ ahd_handle_en_lun(struct ahd_softc *ahd, struct cam_sim *sim, union ccb *ccb)
9543 if (ahd->features & AHD_MULTI_TID) { 9601 if (ahd->features & AHD_MULTI_TID) {
9544 u_int targid_mask; 9602 u_int targid_mask;
9545 9603
9546 targid_mask = ahd_inb(ahd, TARGID) 9604 targid_mask = ahd_inw(ahd, TARGID);
9547 | (ahd_inb(ahd, TARGID + 1)
9548 << 8);
9549
9550 targid_mask &= ~target_mask; 9605 targid_mask &= ~target_mask;
9551 ahd_outb(ahd, TARGID, targid_mask); 9606 ahd_outw(ahd, TARGID, targid_mask);
9552 ahd_outb(ahd, TARGID+1,
9553 (targid_mask >> 8));
9554 ahd_update_scsiid(ahd, targid_mask); 9607 ahd_update_scsiid(ahd, targid_mask);
9555 } 9608 }
9556 } 9609 }
@@ -9651,7 +9704,7 @@ ahd_run_tqinfifo(struct ahd_softc *ahd, int paused)
9651 9704
9652 cmd->cmd_valid = 0; 9705 cmd->cmd_valid = 0;
9653 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, 9706 ahd_dmamap_sync(ahd, ahd->shared_data_dmat,
9654 ahd->shared_data_dmamap, 9707 ahd->shared_data_map.dmamap,
9655 ahd_targetcmd_offset(ahd, ahd->tqinfifonext), 9708 ahd_targetcmd_offset(ahd, ahd->tqinfifonext),
9656 sizeof(struct target_cmd), 9709 sizeof(struct target_cmd),
9657 BUS_DMASYNC_PREREAD); 9710 BUS_DMASYNC_PREREAD);
diff --git a/drivers/scsi/aic7xxx/aic79xx_inline.h b/drivers/scsi/aic7xxx/aic79xx_inline.h
index d80bc5161fb1..91c4f7f484b1 100644
--- a/drivers/scsi/aic7xxx/aic79xx_inline.h
+++ b/drivers/scsi/aic7xxx/aic79xx_inline.h
@@ -37,7 +37,7 @@
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES. 38 * POSSIBILITY OF SUCH DAMAGES.
39 * 39 *
40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#51 $ 40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#58 $
41 * 41 *
42 * $FreeBSD$ 42 * $FreeBSD$
43 */ 43 */
@@ -522,12 +522,21 @@ do { \
522static __inline uint16_t 522static __inline uint16_t
523ahd_inw(struct ahd_softc *ahd, u_int port) 523ahd_inw(struct ahd_softc *ahd, u_int port)
524{ 524{
525 /*
526 * Read high byte first as some registers increment
527 * or have other side effects when the low byte is
528 * read.
529 */
525 return ((ahd_inb(ahd, port+1) << 8) | ahd_inb(ahd, port)); 530 return ((ahd_inb(ahd, port+1) << 8) | ahd_inb(ahd, port));
526} 531}
527 532
528static __inline void 533static __inline void
529ahd_outw(struct ahd_softc *ahd, u_int port, u_int value) 534ahd_outw(struct ahd_softc *ahd, u_int port, u_int value)
530{ 535{
536 /*
537 * Write low byte first to accomodate registers
538 * such as PRGMCNT where the order maters.
539 */
531 ahd_outb(ahd, port, value & 0xFF); 540 ahd_outb(ahd, port, value & 0xFF);
532 ahd_outb(ahd, port+1, (value >> 8) & 0xFF); 541 ahd_outb(ahd, port+1, (value >> 8) & 0xFF);
533} 542}
@@ -684,7 +693,7 @@ ahd_inb_scbram(struct ahd_softc *ahd, u_int offset)
684 * Razor #528 693 * Razor #528
685 */ 694 */
686 value = ahd_inb(ahd, offset); 695 value = ahd_inb(ahd, offset);
687 if ((ahd->flags & AHD_PCIX_SCBRAM_RD_BUG) != 0) 696 if ((ahd->bugs & AHD_PCIX_SCBRAM_RD_BUG) != 0)
688 ahd_inb(ahd, MODE_PTR); 697 ahd_inb(ahd, MODE_PTR);
689 return (value); 698 return (value);
690} 699}
@@ -727,7 +736,8 @@ ahd_lookup_scb(struct ahd_softc *ahd, u_int tag)
727static __inline void 736static __inline void
728ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb) 737ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb)
729{ 738{
730 struct hardware_scb *q_hscb; 739 struct hardware_scb *q_hscb;
740 struct map_node *q_hscb_map;
731 uint32_t saved_hscb_busaddr; 741 uint32_t saved_hscb_busaddr;
732 742
733 /* 743 /*
@@ -743,6 +753,7 @@ ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb)
743 * locate the correct SCB by SCB_TAG. 753 * locate the correct SCB by SCB_TAG.
744 */ 754 */
745 q_hscb = ahd->next_queued_hscb; 755 q_hscb = ahd->next_queued_hscb;
756 q_hscb_map = ahd->next_queued_hscb_map;
746 saved_hscb_busaddr = q_hscb->hscb_busaddr; 757 saved_hscb_busaddr = q_hscb->hscb_busaddr;
747 memcpy(q_hscb, scb->hscb, sizeof(*scb->hscb)); 758 memcpy(q_hscb, scb->hscb, sizeof(*scb->hscb));
748 q_hscb->hscb_busaddr = saved_hscb_busaddr; 759 q_hscb->hscb_busaddr = saved_hscb_busaddr;
@@ -750,7 +761,9 @@ ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb)
750 761
751 /* Now swap HSCB pointers. */ 762 /* Now swap HSCB pointers. */
752 ahd->next_queued_hscb = scb->hscb; 763 ahd->next_queued_hscb = scb->hscb;
764 ahd->next_queued_hscb_map = scb->hscb_map;
753 scb->hscb = q_hscb; 765 scb->hscb = q_hscb;
766 scb->hscb_map = q_hscb_map;
754 767
755 /* Now define the mapping from tag to SCB in the scbindex */ 768 /* Now define the mapping from tag to SCB in the scbindex */
756 ahd->scb_data.scbindex[SCB_GET_TAG(scb)] = scb; 769 ahd->scb_data.scbindex[SCB_GET_TAG(scb)] = scb;
@@ -824,8 +837,9 @@ static __inline int ahd_intr(struct ahd_softc *ahd);
824static __inline void 837static __inline void
825ahd_sync_qoutfifo(struct ahd_softc *ahd, int op) 838ahd_sync_qoutfifo(struct ahd_softc *ahd, int op)
826{ 839{
827 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, ahd->shared_data_dmamap, 840 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, ahd->shared_data_map.dmamap,
828 /*offset*/0, /*len*/AHC_SCB_MAX * sizeof(uint16_t), op); 841 /*offset*/0,
842 /*len*/AHD_SCB_MAX * sizeof(struct ahd_completion), op);
829} 843}
830 844
831static __inline void 845static __inline void
@@ -834,7 +848,7 @@ ahd_sync_tqinfifo(struct ahd_softc *ahd, int op)
834#ifdef AHD_TARGET_MODE 848#ifdef AHD_TARGET_MODE
835 if ((ahd->flags & AHD_TARGETROLE) != 0) { 849 if ((ahd->flags & AHD_TARGETROLE) != 0) {
836 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, 850 ahd_dmamap_sync(ahd, ahd->shared_data_dmat,
837 ahd->shared_data_dmamap, 851 ahd->shared_data_map.dmamap,
838 ahd_targetcmd_offset(ahd, 0), 852 ahd_targetcmd_offset(ahd, 0),
839 sizeof(struct target_cmd) * AHD_TMODE_CMDS, 853 sizeof(struct target_cmd) * AHD_TMODE_CMDS,
840 op); 854 op);
@@ -854,17 +868,17 @@ ahd_check_cmdcmpltqueues(struct ahd_softc *ahd)
854 u_int retval; 868 u_int retval;
855 869
856 retval = 0; 870 retval = 0;
857 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, ahd->shared_data_dmamap, 871 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, ahd->shared_data_map.dmamap,
858 /*offset*/ahd->qoutfifonext, /*len*/2, 872 /*offset*/ahd->qoutfifonext * sizeof(*ahd->qoutfifo),
859 BUS_DMASYNC_POSTREAD); 873 /*len*/sizeof(*ahd->qoutfifo), BUS_DMASYNC_POSTREAD);
860 if ((ahd->qoutfifo[ahd->qoutfifonext] 874 if (ahd->qoutfifo[ahd->qoutfifonext].valid_tag
861 & QOUTFIFO_ENTRY_VALID_LE) == ahd->qoutfifonext_valid_tag) 875 == ahd->qoutfifonext_valid_tag)
862 retval |= AHD_RUN_QOUTFIFO; 876 retval |= AHD_RUN_QOUTFIFO;
863#ifdef AHD_TARGET_MODE 877#ifdef AHD_TARGET_MODE
864 if ((ahd->flags & AHD_TARGETROLE) != 0 878 if ((ahd->flags & AHD_TARGETROLE) != 0
865 && (ahd->flags & AHD_TQINFIFO_BLOCKED) == 0) { 879 && (ahd->flags & AHD_TQINFIFO_BLOCKED) == 0) {
866 ahd_dmamap_sync(ahd, ahd->shared_data_dmat, 880 ahd_dmamap_sync(ahd, ahd->shared_data_dmat,
867 ahd->shared_data_dmamap, 881 ahd->shared_data_map.dmamap,
868 ahd_targetcmd_offset(ahd, ahd->tqinfifofnext), 882 ahd_targetcmd_offset(ahd, ahd->tqinfifofnext),
869 /*len*/sizeof(struct target_cmd), 883 /*len*/sizeof(struct target_cmd),
870 BUS_DMASYNC_POSTREAD); 884 BUS_DMASYNC_POSTREAD);
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
index 6aab9dacdeea..2567e29960bd 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c
@@ -1064,6 +1064,7 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
1064 struct Scsi_Host *host; 1064 struct Scsi_Host *host;
1065 char *new_name; 1065 char *new_name;
1066 u_long s; 1066 u_long s;
1067 int retval;
1067 1068
1068 template->name = ahd->description; 1069 template->name = ahd->description;
1069 host = scsi_host_alloc(template, sizeof(struct ahd_softc *)); 1070 host = scsi_host_alloc(template, sizeof(struct ahd_softc *));
@@ -1096,9 +1097,15 @@ ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *templa
1096 1097
1097 host->transportt = ahd_linux_transport_template; 1098 host->transportt = ahd_linux_transport_template;
1098 1099
1099 scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */ 1100 retval = scsi_add_host(host, &ahd->dev_softc->dev);
1101 if (retval) {
1102 printk(KERN_WARNING "aic79xx: scsi_add_host failed\n");
1103 scsi_host_put(host);
1104 return retval;
1105 }
1106
1100 scsi_scan_host(host); 1107 scsi_scan_host(host);
1101 return (0); 1108 return 0;
1102} 1109}
1103 1110
1104uint64_t 1111uint64_t
@@ -1461,6 +1468,30 @@ ahd_linux_run_command(struct ahd_softc *ahd, struct ahd_linux_device *dev,
1461 if ((tstate->auto_negotiate & mask) != 0) { 1468 if ((tstate->auto_negotiate & mask) != 0) {
1462 scb->flags |= SCB_AUTO_NEGOTIATE; 1469 scb->flags |= SCB_AUTO_NEGOTIATE;
1463 scb->hscb->control |= MK_MESSAGE; 1470 scb->hscb->control |= MK_MESSAGE;
1471 } else if (cmd->cmnd[0] == INQUIRY
1472 && (tinfo->curr.offset != 0
1473 || tinfo->curr.width != MSG_EXT_WDTR_BUS_8_BIT
1474 || tinfo->curr.ppr_options != 0)
1475 && (tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ)==0) {
1476 /*
1477 * The SCSI spec requires inquiry
1478 * commands to complete without
1479 * reporting unit attention conditions.
1480 * Because of this, an inquiry command
1481 * that occurs just after a device is
1482 * reset will result in a data phase
1483 * with mismatched negotiated rates.
1484 * The core already forces a renegotiation
1485 * for reset events that are visible to
1486 * our controller or that we initiate,
1487 * but a third party device reset or a
1488 * hot-plug insertion can still cause this
1489 * issue. Therefore, we force a re-negotiation
1490 * for every inquiry command unless we
1491 * are async.
1492 */
1493 scb->flags |= SCB_NEGOTIATE;
1494 scb->hscb->control |= MK_MESSAGE;
1464 } 1495 }
1465 1496
1466 if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) != 0) { 1497 if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) != 0) {
@@ -2051,6 +2082,7 @@ ahd_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
2051 int paused; 2082 int paused;
2052 int wait; 2083 int wait;
2053 int disconnected; 2084 int disconnected;
2085 int found;
2054 ahd_mode_state saved_modes; 2086 ahd_mode_state saved_modes;
2055 unsigned long flags; 2087 unsigned long flags;
2056 2088
@@ -2169,7 +2201,8 @@ ahd_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
2169 last_phase = ahd_inb(ahd, LASTPHASE); 2201 last_phase = ahd_inb(ahd, LASTPHASE);
2170 saved_scbptr = ahd_get_scbptr(ahd); 2202 saved_scbptr = ahd_get_scbptr(ahd);
2171 active_scbptr = saved_scbptr; 2203 active_scbptr = saved_scbptr;
2172 if (disconnected && (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) == 0) { 2204 if (disconnected && ((last_phase != P_BUSFREE) ||
2205 (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) == 0)) {
2173 struct scb *bus_scb; 2206 struct scb *bus_scb;
2174 2207
2175 bus_scb = ahd_lookup_scb(ahd, active_scbptr); 2208 bus_scb = ahd_lookup_scb(ahd, active_scbptr);
@@ -2187,28 +2220,41 @@ ahd_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
2187 * bus or is in the disconnected state. 2220 * bus or is in the disconnected state.
2188 */ 2221 */
2189 saved_scsiid = ahd_inb(ahd, SAVED_SCSIID); 2222 saved_scsiid = ahd_inb(ahd, SAVED_SCSIID);
2190 if (last_phase != P_BUSFREE 2223 if (SCB_GET_TAG(pending_scb) == active_scbptr
2191 && (SCB_GET_TAG(pending_scb) == active_scbptr
2192 || (flag == SCB_DEVICE_RESET 2224 || (flag == SCB_DEVICE_RESET
2193 && SCSIID_TARGET(ahd, saved_scsiid) == scmd_id(cmd)))) { 2225 && SCSIID_TARGET(ahd, saved_scsiid) == scmd_id(cmd))) {
2194 2226
2195 /* 2227 /*
2196 * We're active on the bus, so assert ATN 2228 * We're active on the bus, so assert ATN
2197 * and hope that the target responds. 2229 * and hope that the target responds.
2198 */ 2230 */
2199 pending_scb = ahd_lookup_scb(ahd, active_scbptr); 2231 pending_scb = ahd_lookup_scb(ahd, active_scbptr);
2200 pending_scb->flags |= SCB_RECOVERY_SCB|flag; 2232 pending_scb->flags |= SCB_RECOVERY_SCB|SCB_DEVICE_RESET;
2201 ahd_outb(ahd, MSG_OUT, HOST_MSG); 2233 ahd_outb(ahd, MSG_OUT, HOST_MSG);
2202 ahd_outb(ahd, SCSISIGO, last_phase|ATNO); 2234 ahd_outb(ahd, SCSISIGO, last_phase|ATNO);
2203 scmd_printk(KERN_INFO, cmd, "Device is active, asserting ATN\n"); 2235 scmd_printk(KERN_INFO, cmd, "BDR message in message buffer\n");
2204 wait = TRUE; 2236 wait = TRUE;
2237 } else if (last_phase != P_BUSFREE
2238 && ahd_inb(ahd, SCSIPHASE) == 0) {
2239 /*
2240 * SCB is not identified, there
2241 * is no pending REQ, and the sequencer
2242 * has not seen a busfree. Looks like
2243 * a stuck connection waiting to
2244 * go busfree. Reset the bus.
2245 */
2246 found = ahd_reset_channel(ahd, cmd->device->channel + 'A',
2247 /*Initiate Reset*/TRUE);
2248 printf("%s: Issued Channel %c Bus Reset. "
2249 "%d SCBs aborted\n", ahd_name(ahd),
2250 cmd->device->channel + 'A', found);
2205 } else if (disconnected) { 2251 } else if (disconnected) {
2206 2252
2207 /* 2253 /*
2208 * Actually re-queue this SCB in an attempt 2254 * Actually re-queue this SCB in an attempt
2209 * to select the device before it reconnects. 2255 * to select the device before it reconnects.
2210 */ 2256 */
2211 pending_scb->flags |= SCB_RECOVERY_SCB|SCB_ABORT; 2257 pending_scb->flags |= SCB_RECOVERY_SCB|flag;
2212 ahd_set_scbptr(ahd, SCB_GET_TAG(pending_scb)); 2258 ahd_set_scbptr(ahd, SCB_GET_TAG(pending_scb));
2213 pending_scb->hscb->cdb_len = 0; 2259 pending_scb->hscb->cdb_len = 0;
2214 pending_scb->hscb->task_attribute = 0; 2260 pending_scb->hscb->task_attribute = 0;
@@ -2289,16 +2335,17 @@ done:
2289 timer.expires = jiffies + (5 * HZ); 2335 timer.expires = jiffies + (5 * HZ);
2290 timer.function = ahd_linux_sem_timeout; 2336 timer.function = ahd_linux_sem_timeout;
2291 add_timer(&timer); 2337 add_timer(&timer);
2292 printf("Recovery code sleeping\n"); 2338 printf("%s: Recovery code sleeping\n", ahd_name(ahd));
2293 down(&ahd->platform_data->eh_sem); 2339 down(&ahd->platform_data->eh_sem);
2294 printf("Recovery code awake\n"); 2340 printf("%s: Recovery code awake\n", ahd_name(ahd));
2295 ret = del_timer_sync(&timer); 2341 ret = del_timer_sync(&timer);
2296 if (ret == 0) { 2342 if (ret == 0) {
2297 printf("Timer Expired\n"); 2343 printf("%s: Timer Expired (active %d)\n",
2344 ahd_name(ahd), dev->active);
2298 retval = FAILED; 2345 retval = FAILED;
2299 } 2346 }
2300 } 2347 }
2301 ahd_unlock(ahd, &flags); 2348 ahd_unlock(ahd, &flags);
2302 return (retval); 2349 return (retval);
2303} 2350}
2304 2351
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h
index bc44222d6cc3..cb74fccc8100 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.h
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.h
@@ -252,7 +252,7 @@ ahd_scb_timer_reset(struct scb *scb, u_int usec)
252/***************************** SMP support ************************************/ 252/***************************** SMP support ************************************/
253#include <linux/spinlock.h> 253#include <linux/spinlock.h>
254 254
255#define AIC79XX_DRIVER_VERSION "1.3.11" 255#define AIC79XX_DRIVER_VERSION "3.0"
256 256
257/*************************** Device Data Structures ***************************/ 257/*************************** Device Data Structures ***************************/
258/* 258/*
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c
index 2131db60018a..196a6344b037 100644
--- a/drivers/scsi/aic7xxx/aic79xx_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c
@@ -38,9 +38,7 @@
38 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 * POSSIBILITY OF SUCH DAMAGES. 39 * POSSIBILITY OF SUCH DAMAGES.
40 * 40 *
41 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#77 $ 41 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#89 $
42 *
43 * $FreeBSD$
44 */ 42 */
45 43
46#ifdef __linux__ 44#ifdef __linux__
@@ -114,6 +112,13 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
114 "Adaptec 29320ALP Ultra320 SCSI adapter", 112 "Adaptec 29320ALP Ultra320 SCSI adapter",
115 ahd_aic7901_setup 113 ahd_aic7901_setup
116 }, 114 },
115 /* aic7901A based controllers */
116 {
117 ID_AHA_29320LP,
118 ID_ALL_MASK,
119 "Adaptec 29320LP Ultra320 SCSI adapter",
120 ahd_aic7901A_setup
121 },
117 /* aic7902 based controllers */ 122 /* aic7902 based controllers */
118 { 123 {
119 ID_AHA_29320, 124 ID_AHA_29320,
@@ -128,12 +133,6 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
128 ahd_aic7902_setup 133 ahd_aic7902_setup
129 }, 134 },
130 { 135 {
131 ID_AHA_29320LP,
132 ID_ALL_MASK,
133 "Adaptec 29320LP Ultra320 SCSI adapter",
134 ahd_aic7901A_setup
135 },
136 {
137 ID_AHA_39320, 136 ID_AHA_39320,
138 ID_ALL_MASK, 137 ID_ALL_MASK,
139 "Adaptec 39320 Ultra320 SCSI adapter", 138 "Adaptec 39320 Ultra320 SCSI adapter",
@@ -146,6 +145,12 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
146 ahd_aic7902_setup 145 ahd_aic7902_setup
147 }, 146 },
148 { 147 {
148 ID_AHA_39320_B_DELL,
149 ID_ALL_MASK,
150 "Adaptec (Dell OEM) 39320 Ultra320 SCSI adapter",
151 ahd_aic7902_setup
152 },
153 {
149 ID_AHA_39320A, 154 ID_AHA_39320A,
150 ID_ALL_MASK, 155 ID_ALL_MASK,
151 "Adaptec 39320A Ultra320 SCSI adapter", 156 "Adaptec 39320A Ultra320 SCSI adapter",
@@ -668,6 +673,7 @@ ahd_configure_termination(struct ahd_softc *ahd, u_int adapter_control)
668 * Now set the termination based on what we found. 673 * Now set the termination based on what we found.
669 */ 674 */
670 sxfrctl1 = ahd_inb(ahd, SXFRCTL1) & ~STPWEN; 675 sxfrctl1 = ahd_inb(ahd, SXFRCTL1) & ~STPWEN;
676 ahd->flags &= ~AHD_TERM_ENB_A;
671 if ((termctl & FLX_TERMCTL_ENPRILOW) != 0) { 677 if ((termctl & FLX_TERMCTL_ENPRILOW) != 0) {
672 ahd->flags |= AHD_TERM_ENB_A; 678 ahd->flags |= AHD_TERM_ENB_A;
673 sxfrctl1 |= STPWEN; 679 sxfrctl1 |= STPWEN;
diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.h b/drivers/scsi/aic7xxx/aic79xx_pci.h
index b5cfeabdfecf..da45153668c7 100644
--- a/drivers/scsi/aic7xxx/aic79xx_pci.h
+++ b/drivers/scsi/aic7xxx/aic79xx_pci.h
@@ -53,14 +53,15 @@
53#define ID_AHA_29320ALP 0x8017900500449005ull 53#define ID_AHA_29320ALP 0x8017900500449005ull
54 54
55#define ID_AIC7901A 0x801E9005FFFF9005ull 55#define ID_AIC7901A 0x801E9005FFFF9005ull
56#define ID_AHA_29320 0x8012900500429005ull
57#define ID_AHA_29320B 0x8013900500439005ull
58#define ID_AHA_29320LP 0x8014900500449005ull 56#define ID_AHA_29320LP 0x8014900500449005ull
59 57
60#define ID_AIC7902 0x801F9005FFFF9005ull 58#define ID_AIC7902 0x801F9005FFFF9005ull
61#define ID_AIC7902_B 0x801D9005FFFF9005ull 59#define ID_AIC7902_B 0x801D9005FFFF9005ull
62#define ID_AHA_39320 0x8010900500409005ull 60#define ID_AHA_39320 0x8010900500409005ull
61#define ID_AHA_29320 0x8012900500429005ull
62#define ID_AHA_29320B 0x8013900500439005ull
63#define ID_AHA_39320_B 0x8015900500409005ull 63#define ID_AHA_39320_B 0x8015900500409005ull
64#define ID_AHA_39320_B_DELL 0x8015900501681028ull
64#define ID_AHA_39320A 0x8016900500409005ull 65#define ID_AHA_39320A 0x8016900500409005ull
65#define ID_AHA_39320D 0x8011900500419005ull 66#define ID_AHA_39320D 0x8011900500419005ull
66#define ID_AHA_39320D_B 0x801C900500419005ull 67#define ID_AHA_39320D_B 0x801C900500419005ull
diff --git a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
index c01ac39090d9..8763b158856b 100644
--- a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
@@ -2,8 +2,8 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#94 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $
7 */ 7 */
8typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); 8typedef int (ahd_reg_print_t)(u_int, u_int *, u_int);
9typedef struct ahd_reg_parse_entry { 9typedef struct ahd_reg_parse_entry {
@@ -83,17 +83,17 @@ ahd_reg_print_t ahd_hs_mailbox_print;
83#endif 83#endif
84 84
85#if AIC_DEBUG_REGISTERS 85#if AIC_DEBUG_REGISTERS
86ahd_reg_print_t ahd_clrseqintstat_print; 86ahd_reg_print_t ahd_seqintstat_print;
87#else 87#else
88#define ahd_clrseqintstat_print(regvalue, cur_col, wrap) \ 88#define ahd_seqintstat_print(regvalue, cur_col, wrap) \
89 ahd_print_register(NULL, 0, "CLRSEQINTSTAT", 0x0c, regvalue, cur_col, wrap) 89 ahd_print_register(NULL, 0, "SEQINTSTAT", 0x0c, regvalue, cur_col, wrap)
90#endif 90#endif
91 91
92#if AIC_DEBUG_REGISTERS 92#if AIC_DEBUG_REGISTERS
93ahd_reg_print_t ahd_seqintstat_print; 93ahd_reg_print_t ahd_clrseqintstat_print;
94#else 94#else
95#define ahd_seqintstat_print(regvalue, cur_col, wrap) \ 95#define ahd_clrseqintstat_print(regvalue, cur_col, wrap) \
96 ahd_print_register(NULL, 0, "SEQINTSTAT", 0x0c, regvalue, cur_col, wrap) 96 ahd_print_register(NULL, 0, "CLRSEQINTSTAT", 0x0c, regvalue, cur_col, wrap)
97#endif 97#endif
98 98
99#if AIC_DEBUG_REGISTERS 99#if AIC_DEBUG_REGISTERS
@@ -412,17 +412,17 @@ ahd_reg_print_t ahd_sxfrctl0_print;
412#endif 412#endif
413 413
414#if AIC_DEBUG_REGISTERS 414#if AIC_DEBUG_REGISTERS
415ahd_reg_print_t ahd_businitid_print; 415ahd_reg_print_t ahd_dlcount_print;
416#else 416#else
417#define ahd_businitid_print(regvalue, cur_col, wrap) \ 417#define ahd_dlcount_print(regvalue, cur_col, wrap) \
418 ahd_print_register(NULL, 0, "BUSINITID", 0x3c, regvalue, cur_col, wrap) 418 ahd_print_register(NULL, 0, "DLCOUNT", 0x3c, regvalue, cur_col, wrap)
419#endif 419#endif
420 420
421#if AIC_DEBUG_REGISTERS 421#if AIC_DEBUG_REGISTERS
422ahd_reg_print_t ahd_dlcount_print; 422ahd_reg_print_t ahd_businitid_print;
423#else 423#else
424#define ahd_dlcount_print(regvalue, cur_col, wrap) \ 424#define ahd_businitid_print(regvalue, cur_col, wrap) \
425 ahd_print_register(NULL, 0, "DLCOUNT", 0x3c, regvalue, cur_col, wrap) 425 ahd_print_register(NULL, 0, "BUSINITID", 0x3c, regvalue, cur_col, wrap)
426#endif 426#endif
427 427
428#if AIC_DEBUG_REGISTERS 428#if AIC_DEBUG_REGISTERS
@@ -517,13 +517,6 @@ ahd_reg_print_t ahd_selid_print;
517#endif 517#endif
518 518
519#if AIC_DEBUG_REGISTERS 519#if AIC_DEBUG_REGISTERS
520ahd_reg_print_t ahd_sblkctl_print;
521#else
522#define ahd_sblkctl_print(regvalue, cur_col, wrap) \
523 ahd_print_register(NULL, 0, "SBLKCTL", 0x4a, regvalue, cur_col, wrap)
524#endif
525
526#if AIC_DEBUG_REGISTERS
527ahd_reg_print_t ahd_optionmode_print; 520ahd_reg_print_t ahd_optionmode_print;
528#else 521#else
529#define ahd_optionmode_print(regvalue, cur_col, wrap) \ 522#define ahd_optionmode_print(regvalue, cur_col, wrap) \
@@ -531,10 +524,10 @@ ahd_reg_print_t ahd_optionmode_print;
531#endif 524#endif
532 525
533#if AIC_DEBUG_REGISTERS 526#if AIC_DEBUG_REGISTERS
534ahd_reg_print_t ahd_sstat0_print; 527ahd_reg_print_t ahd_sblkctl_print;
535#else 528#else
536#define ahd_sstat0_print(regvalue, cur_col, wrap) \ 529#define ahd_sblkctl_print(regvalue, cur_col, wrap) \
537 ahd_print_register(NULL, 0, "SSTAT0", 0x4b, regvalue, cur_col, wrap) 530 ahd_print_register(NULL, 0, "SBLKCTL", 0x4a, regvalue, cur_col, wrap)
538#endif 531#endif
539 532
540#if AIC_DEBUG_REGISTERS 533#if AIC_DEBUG_REGISTERS
@@ -545,6 +538,13 @@ ahd_reg_print_t ahd_clrsint0_print;
545#endif 538#endif
546 539
547#if AIC_DEBUG_REGISTERS 540#if AIC_DEBUG_REGISTERS
541ahd_reg_print_t ahd_sstat0_print;
542#else
543#define ahd_sstat0_print(regvalue, cur_col, wrap) \
544 ahd_print_register(NULL, 0, "SSTAT0", 0x4b, regvalue, cur_col, wrap)
545#endif
546
547#if AIC_DEBUG_REGISTERS
548ahd_reg_print_t ahd_simode0_print; 548ahd_reg_print_t ahd_simode0_print;
549#else 549#else
550#define ahd_simode0_print(regvalue, cur_col, wrap) \ 550#define ahd_simode0_print(regvalue, cur_col, wrap) \
@@ -573,17 +573,17 @@ ahd_reg_print_t ahd_sstat2_print;
573#endif 573#endif
574 574
575#if AIC_DEBUG_REGISTERS 575#if AIC_DEBUG_REGISTERS
576ahd_reg_print_t ahd_clrsint2_print; 576ahd_reg_print_t ahd_simode2_print;
577#else 577#else
578#define ahd_clrsint2_print(regvalue, cur_col, wrap) \ 578#define ahd_simode2_print(regvalue, cur_col, wrap) \
579 ahd_print_register(NULL, 0, "CLRSINT2", 0x4d, regvalue, cur_col, wrap) 579 ahd_print_register(NULL, 0, "SIMODE2", 0x4d, regvalue, cur_col, wrap)
580#endif 580#endif
581 581
582#if AIC_DEBUG_REGISTERS 582#if AIC_DEBUG_REGISTERS
583ahd_reg_print_t ahd_simode2_print; 583ahd_reg_print_t ahd_clrsint2_print;
584#else 584#else
585#define ahd_simode2_print(regvalue, cur_col, wrap) \ 585#define ahd_clrsint2_print(regvalue, cur_col, wrap) \
586 ahd_print_register(NULL, 0, "SIMODE2", 0x4d, regvalue, cur_col, wrap) 586 ahd_print_register(NULL, 0, "CLRSINT2", 0x4d, regvalue, cur_col, wrap)
587#endif 587#endif
588 588
589#if AIC_DEBUG_REGISTERS 589#if AIC_DEBUG_REGISTERS
@@ -685,13 +685,6 @@ ahd_reg_print_t ahd_clrsint3_print;
685#endif 685#endif
686 686
687#if AIC_DEBUG_REGISTERS 687#if AIC_DEBUG_REGISTERS
688ahd_reg_print_t ahd_lqomode0_print;
689#else
690#define ahd_lqomode0_print(regvalue, cur_col, wrap) \
691 ahd_print_register(NULL, 0, "LQOMODE0", 0x54, regvalue, cur_col, wrap)
692#endif
693
694#if AIC_DEBUG_REGISTERS
695ahd_reg_print_t ahd_lqostat0_print; 688ahd_reg_print_t ahd_lqostat0_print;
696#else 689#else
697#define ahd_lqostat0_print(regvalue, cur_col, wrap) \ 690#define ahd_lqostat0_print(regvalue, cur_col, wrap) \
@@ -706,6 +699,20 @@ ahd_reg_print_t ahd_clrlqoint0_print;
706#endif 699#endif
707 700
708#if AIC_DEBUG_REGISTERS 701#if AIC_DEBUG_REGISTERS
702ahd_reg_print_t ahd_lqomode0_print;
703#else
704#define ahd_lqomode0_print(regvalue, cur_col, wrap) \
705 ahd_print_register(NULL, 0, "LQOMODE0", 0x54, regvalue, cur_col, wrap)
706#endif
707
708#if AIC_DEBUG_REGISTERS
709ahd_reg_print_t ahd_lqomode1_print;
710#else
711#define ahd_lqomode1_print(regvalue, cur_col, wrap) \
712 ahd_print_register(NULL, 0, "LQOMODE1", 0x55, regvalue, cur_col, wrap)
713#endif
714
715#if AIC_DEBUG_REGISTERS
709ahd_reg_print_t ahd_lqostat1_print; 716ahd_reg_print_t ahd_lqostat1_print;
710#else 717#else
711#define ahd_lqostat1_print(regvalue, cur_col, wrap) \ 718#define ahd_lqostat1_print(regvalue, cur_col, wrap) \
@@ -720,13 +727,6 @@ ahd_reg_print_t ahd_clrlqoint1_print;
720#endif 727#endif
721 728
722#if AIC_DEBUG_REGISTERS 729#if AIC_DEBUG_REGISTERS
723ahd_reg_print_t ahd_lqomode1_print;
724#else
725#define ahd_lqomode1_print(regvalue, cur_col, wrap) \
726 ahd_print_register(NULL, 0, "LQOMODE1", 0x55, regvalue, cur_col, wrap)
727#endif
728
729#if AIC_DEBUG_REGISTERS
730ahd_reg_print_t ahd_lqostat2_print; 730ahd_reg_print_t ahd_lqostat2_print;
731#else 731#else
732#define ahd_lqostat2_print(regvalue, cur_col, wrap) \ 732#define ahd_lqostat2_print(regvalue, cur_col, wrap) \
@@ -909,17 +909,17 @@ ahd_reg_print_t ahd_annexcol_print;
909#endif 909#endif
910 910
911#if AIC_DEBUG_REGISTERS 911#if AIC_DEBUG_REGISTERS
912ahd_reg_print_t ahd_scschkn_print; 912ahd_reg_print_t ahd_annexdat_print;
913#else 913#else
914#define ahd_scschkn_print(regvalue, cur_col, wrap) \ 914#define ahd_annexdat_print(regvalue, cur_col, wrap) \
915 ahd_print_register(NULL, 0, "SCSCHKN", 0x66, regvalue, cur_col, wrap) 915 ahd_print_register(NULL, 0, "ANNEXDAT", 0x66, regvalue, cur_col, wrap)
916#endif 916#endif
917 917
918#if AIC_DEBUG_REGISTERS 918#if AIC_DEBUG_REGISTERS
919ahd_reg_print_t ahd_annexdat_print; 919ahd_reg_print_t ahd_scschkn_print;
920#else 920#else
921#define ahd_annexdat_print(regvalue, cur_col, wrap) \ 921#define ahd_scschkn_print(regvalue, cur_col, wrap) \
922 ahd_print_register(NULL, 0, "ANNEXDAT", 0x66, regvalue, cur_col, wrap) 922 ahd_print_register(NULL, 0, "SCSCHKN", 0x66, regvalue, cur_col, wrap)
923#endif 923#endif
924 924
925#if AIC_DEBUG_REGISTERS 925#if AIC_DEBUG_REGISTERS
@@ -1000,17 +1000,17 @@ ahd_reg_print_t ahd_pll400ctl1_print;
1000#endif 1000#endif
1001 1001
1002#if AIC_DEBUG_REGISTERS 1002#if AIC_DEBUG_REGISTERS
1003ahd_reg_print_t ahd_pll400cnt0_print; 1003ahd_reg_print_t ahd_unfairness_print;
1004#else 1004#else
1005#define ahd_pll400cnt0_print(regvalue, cur_col, wrap) \ 1005#define ahd_unfairness_print(regvalue, cur_col, wrap) \
1006 ahd_print_register(NULL, 0, "PLL400CNT0", 0x6e, regvalue, cur_col, wrap) 1006 ahd_print_register(NULL, 0, "UNFAIRNESS", 0x6e, regvalue, cur_col, wrap)
1007#endif 1007#endif
1008 1008
1009#if AIC_DEBUG_REGISTERS 1009#if AIC_DEBUG_REGISTERS
1010ahd_reg_print_t ahd_unfairness_print; 1010ahd_reg_print_t ahd_pll400cnt0_print;
1011#else 1011#else
1012#define ahd_unfairness_print(regvalue, cur_col, wrap) \ 1012#define ahd_pll400cnt0_print(regvalue, cur_col, wrap) \
1013 ahd_print_register(NULL, 0, "UNFAIRNESS", 0x6e, regvalue, cur_col, wrap) 1013 ahd_print_register(NULL, 0, "PLL400CNT0", 0x6e, regvalue, cur_col, wrap)
1014#endif 1014#endif
1015 1015
1016#if AIC_DEBUG_REGISTERS 1016#if AIC_DEBUG_REGISTERS
@@ -1056,13 +1056,6 @@ ahd_reg_print_t ahd_hodmaen_print;
1056#endif 1056#endif
1057 1057
1058#if AIC_DEBUG_REGISTERS 1058#if AIC_DEBUG_REGISTERS
1059ahd_reg_print_t ahd_sghaddr_print;
1060#else
1061#define ahd_sghaddr_print(regvalue, cur_col, wrap) \
1062 ahd_print_register(NULL, 0, "SGHADDR", 0x7c, regvalue, cur_col, wrap)
1063#endif
1064
1065#if AIC_DEBUG_REGISTERS
1066ahd_reg_print_t ahd_scbhaddr_print; 1059ahd_reg_print_t ahd_scbhaddr_print;
1067#else 1060#else
1068#define ahd_scbhaddr_print(regvalue, cur_col, wrap) \ 1061#define ahd_scbhaddr_print(regvalue, cur_col, wrap) \
@@ -1070,10 +1063,10 @@ ahd_reg_print_t ahd_scbhaddr_print;
1070#endif 1063#endif
1071 1064
1072#if AIC_DEBUG_REGISTERS 1065#if AIC_DEBUG_REGISTERS
1073ahd_reg_print_t ahd_sghcnt_print; 1066ahd_reg_print_t ahd_sghaddr_print;
1074#else 1067#else
1075#define ahd_sghcnt_print(regvalue, cur_col, wrap) \ 1068#define ahd_sghaddr_print(regvalue, cur_col, wrap) \
1076 ahd_print_register(NULL, 0, "SGHCNT", 0x84, regvalue, cur_col, wrap) 1069 ahd_print_register(NULL, 0, "SGHADDR", 0x7c, regvalue, cur_col, wrap)
1077#endif 1070#endif
1078 1071
1079#if AIC_DEBUG_REGISTERS 1072#if AIC_DEBUG_REGISTERS
@@ -1084,6 +1077,13 @@ ahd_reg_print_t ahd_scbhcnt_print;
1084#endif 1077#endif
1085 1078
1086#if AIC_DEBUG_REGISTERS 1079#if AIC_DEBUG_REGISTERS
1080ahd_reg_print_t ahd_sghcnt_print;
1081#else
1082#define ahd_sghcnt_print(regvalue, cur_col, wrap) \
1083 ahd_print_register(NULL, 0, "SGHCNT", 0x84, regvalue, cur_col, wrap)
1084#endif
1085
1086#if AIC_DEBUG_REGISTERS
1087ahd_reg_print_t ahd_dff_thrsh_print; 1087ahd_reg_print_t ahd_dff_thrsh_print;
1088#else 1088#else
1089#define ahd_dff_thrsh_print(regvalue, cur_col, wrap) \ 1089#define ahd_dff_thrsh_print(regvalue, cur_col, wrap) \
@@ -1154,13 +1154,6 @@ ahd_reg_print_t ahd_nsenable_print;
1154#endif 1154#endif
1155 1155
1156#if AIC_DEBUG_REGISTERS 1156#if AIC_DEBUG_REGISTERS
1157ahd_reg_print_t ahd_dchrxmsg1_print;
1158#else
1159#define ahd_dchrxmsg1_print(regvalue, cur_col, wrap) \
1160 ahd_print_register(NULL, 0, "DCHRXMSG1", 0x91, regvalue, cur_col, wrap)
1161#endif
1162
1163#if AIC_DEBUG_REGISTERS
1164ahd_reg_print_t ahd_cmcrxmsg1_print; 1157ahd_reg_print_t ahd_cmcrxmsg1_print;
1165#else 1158#else
1166#define ahd_cmcrxmsg1_print(regvalue, cur_col, wrap) \ 1159#define ahd_cmcrxmsg1_print(regvalue, cur_col, wrap) \
@@ -1168,17 +1161,17 @@ ahd_reg_print_t ahd_cmcrxmsg1_print;
1168#endif 1161#endif
1169 1162
1170#if AIC_DEBUG_REGISTERS 1163#if AIC_DEBUG_REGISTERS
1171ahd_reg_print_t ahd_dchrxmsg2_print; 1164ahd_reg_print_t ahd_dchrxmsg1_print;
1172#else 1165#else
1173#define ahd_dchrxmsg2_print(regvalue, cur_col, wrap) \ 1166#define ahd_dchrxmsg1_print(regvalue, cur_col, wrap) \
1174 ahd_print_register(NULL, 0, "DCHRXMSG2", 0x92, regvalue, cur_col, wrap) 1167 ahd_print_register(NULL, 0, "DCHRXMSG1", 0x91, regvalue, cur_col, wrap)
1175#endif 1168#endif
1176 1169
1177#if AIC_DEBUG_REGISTERS 1170#if AIC_DEBUG_REGISTERS
1178ahd_reg_print_t ahd_ovlyrxmsg2_print; 1171ahd_reg_print_t ahd_dchrxmsg2_print;
1179#else 1172#else
1180#define ahd_ovlyrxmsg2_print(regvalue, cur_col, wrap) \ 1173#define ahd_dchrxmsg2_print(regvalue, cur_col, wrap) \
1181 ahd_print_register(NULL, 0, "OVLYRXMSG2", 0x92, regvalue, cur_col, wrap) 1174 ahd_print_register(NULL, 0, "DCHRXMSG2", 0x92, regvalue, cur_col, wrap)
1182#endif 1175#endif
1183 1176
1184#if AIC_DEBUG_REGISTERS 1177#if AIC_DEBUG_REGISTERS
@@ -1196,6 +1189,13 @@ ahd_reg_print_t ahd_ost_print;
1196#endif 1189#endif
1197 1190
1198#if AIC_DEBUG_REGISTERS 1191#if AIC_DEBUG_REGISTERS
1192ahd_reg_print_t ahd_ovlyrxmsg2_print;
1193#else
1194#define ahd_ovlyrxmsg2_print(regvalue, cur_col, wrap) \
1195 ahd_print_register(NULL, 0, "OVLYRXMSG2", 0x92, regvalue, cur_col, wrap)
1196#endif
1197
1198#if AIC_DEBUG_REGISTERS
1199ahd_reg_print_t ahd_dchrxmsg3_print; 1199ahd_reg_print_t ahd_dchrxmsg3_print;
1200#else 1200#else
1201#define ahd_dchrxmsg3_print(regvalue, cur_col, wrap) \ 1201#define ahd_dchrxmsg3_print(regvalue, cur_col, wrap) \
@@ -1203,6 +1203,13 @@ ahd_reg_print_t ahd_dchrxmsg3_print;
1203#endif 1203#endif
1204 1204
1205#if AIC_DEBUG_REGISTERS 1205#if AIC_DEBUG_REGISTERS
1206ahd_reg_print_t ahd_ovlyrxmsg3_print;
1207#else
1208#define ahd_ovlyrxmsg3_print(regvalue, cur_col, wrap) \
1209 ahd_print_register(NULL, 0, "OVLYRXMSG3", 0x93, regvalue, cur_col, wrap)
1210#endif
1211
1212#if AIC_DEBUG_REGISTERS
1206ahd_reg_print_t ahd_cmcrxmsg3_print; 1213ahd_reg_print_t ahd_cmcrxmsg3_print;
1207#else 1214#else
1208#define ahd_cmcrxmsg3_print(regvalue, cur_col, wrap) \ 1215#define ahd_cmcrxmsg3_print(regvalue, cur_col, wrap) \
@@ -1217,13 +1224,6 @@ ahd_reg_print_t ahd_pcixctl_print;
1217#endif 1224#endif
1218 1225
1219#if AIC_DEBUG_REGISTERS 1226#if AIC_DEBUG_REGISTERS
1220ahd_reg_print_t ahd_ovlyrxmsg3_print;
1221#else
1222#define ahd_ovlyrxmsg3_print(regvalue, cur_col, wrap) \
1223 ahd_print_register(NULL, 0, "OVLYRXMSG3", 0x93, regvalue, cur_col, wrap)
1224#endif
1225
1226#if AIC_DEBUG_REGISTERS
1227ahd_reg_print_t ahd_ovlyseqbcnt_print; 1227ahd_reg_print_t ahd_ovlyseqbcnt_print;
1228#else 1228#else
1229#define ahd_ovlyseqbcnt_print(regvalue, cur_col, wrap) \ 1229#define ahd_ovlyseqbcnt_print(regvalue, cur_col, wrap) \
@@ -1231,13 +1231,6 @@ ahd_reg_print_t ahd_ovlyseqbcnt_print;
1231#endif 1231#endif
1232 1232
1233#if AIC_DEBUG_REGISTERS 1233#if AIC_DEBUG_REGISTERS
1234ahd_reg_print_t ahd_cmcseqbcnt_print;
1235#else
1236#define ahd_cmcseqbcnt_print(regvalue, cur_col, wrap) \
1237 ahd_print_register(NULL, 0, "CMCSEQBCNT", 0x94, regvalue, cur_col, wrap)
1238#endif
1239
1240#if AIC_DEBUG_REGISTERS
1241ahd_reg_print_t ahd_dchseqbcnt_print; 1234ahd_reg_print_t ahd_dchseqbcnt_print;
1242#else 1235#else
1243#define ahd_dchseqbcnt_print(regvalue, cur_col, wrap) \ 1236#define ahd_dchseqbcnt_print(regvalue, cur_col, wrap) \
@@ -1245,17 +1238,17 @@ ahd_reg_print_t ahd_dchseqbcnt_print;
1245#endif 1238#endif
1246 1239
1247#if AIC_DEBUG_REGISTERS 1240#if AIC_DEBUG_REGISTERS
1248ahd_reg_print_t ahd_cmcspltstat0_print; 1241ahd_reg_print_t ahd_cmcseqbcnt_print;
1249#else 1242#else
1250#define ahd_cmcspltstat0_print(regvalue, cur_col, wrap) \ 1243#define ahd_cmcseqbcnt_print(regvalue, cur_col, wrap) \
1251 ahd_print_register(NULL, 0, "CMCSPLTSTAT0", 0x96, regvalue, cur_col, wrap) 1244 ahd_print_register(NULL, 0, "CMCSEQBCNT", 0x94, regvalue, cur_col, wrap)
1252#endif 1245#endif
1253 1246
1254#if AIC_DEBUG_REGISTERS 1247#if AIC_DEBUG_REGISTERS
1255ahd_reg_print_t ahd_ovlyspltstat0_print; 1248ahd_reg_print_t ahd_cmcspltstat0_print;
1256#else 1249#else
1257#define ahd_ovlyspltstat0_print(regvalue, cur_col, wrap) \ 1250#define ahd_cmcspltstat0_print(regvalue, cur_col, wrap) \
1258 ahd_print_register(NULL, 0, "OVLYSPLTSTAT0", 0x96, regvalue, cur_col, wrap) 1251 ahd_print_register(NULL, 0, "CMCSPLTSTAT0", 0x96, regvalue, cur_col, wrap)
1259#endif 1252#endif
1260 1253
1261#if AIC_DEBUG_REGISTERS 1254#if AIC_DEBUG_REGISTERS
@@ -1266,10 +1259,10 @@ ahd_reg_print_t ahd_dchspltstat0_print;
1266#endif 1259#endif
1267 1260
1268#if AIC_DEBUG_REGISTERS 1261#if AIC_DEBUG_REGISTERS
1269ahd_reg_print_t ahd_dchspltstat1_print; 1262ahd_reg_print_t ahd_ovlyspltstat0_print;
1270#else 1263#else
1271#define ahd_dchspltstat1_print(regvalue, cur_col, wrap) \ 1264#define ahd_ovlyspltstat0_print(regvalue, cur_col, wrap) \
1272 ahd_print_register(NULL, 0, "DCHSPLTSTAT1", 0x97, regvalue, cur_col, wrap) 1265 ahd_print_register(NULL, 0, "OVLYSPLTSTAT0", 0x96, regvalue, cur_col, wrap)
1273#endif 1266#endif
1274 1267
1275#if AIC_DEBUG_REGISTERS 1268#if AIC_DEBUG_REGISTERS
@@ -1287,6 +1280,13 @@ ahd_reg_print_t ahd_ovlyspltstat1_print;
1287#endif 1280#endif
1288 1281
1289#if AIC_DEBUG_REGISTERS 1282#if AIC_DEBUG_REGISTERS
1283ahd_reg_print_t ahd_dchspltstat1_print;
1284#else
1285#define ahd_dchspltstat1_print(regvalue, cur_col, wrap) \
1286 ahd_print_register(NULL, 0, "DCHSPLTSTAT1", 0x97, regvalue, cur_col, wrap)
1287#endif
1288
1289#if AIC_DEBUG_REGISTERS
1290ahd_reg_print_t ahd_sgrxmsg0_print; 1290ahd_reg_print_t ahd_sgrxmsg0_print;
1291#else 1291#else
1292#define ahd_sgrxmsg0_print(regvalue, cur_col, wrap) \ 1292#define ahd_sgrxmsg0_print(regvalue, cur_col, wrap) \
@@ -1378,17 +1378,17 @@ ahd_reg_print_t ahd_sgspltstat0_print;
1378#endif 1378#endif
1379 1379
1380#if AIC_DEBUG_REGISTERS 1380#if AIC_DEBUG_REGISTERS
1381ahd_reg_print_t ahd_sfunct_print; 1381ahd_reg_print_t ahd_sgspltstat1_print;
1382#else 1382#else
1383#define ahd_sfunct_print(regvalue, cur_col, wrap) \ 1383#define ahd_sgspltstat1_print(regvalue, cur_col, wrap) \
1384 ahd_print_register(NULL, 0, "SFUNCT", 0x9f, regvalue, cur_col, wrap) 1384 ahd_print_register(NULL, 0, "SGSPLTSTAT1", 0x9f, regvalue, cur_col, wrap)
1385#endif 1385#endif
1386 1386
1387#if AIC_DEBUG_REGISTERS 1387#if AIC_DEBUG_REGISTERS
1388ahd_reg_print_t ahd_sgspltstat1_print; 1388ahd_reg_print_t ahd_sfunct_print;
1389#else 1389#else
1390#define ahd_sgspltstat1_print(regvalue, cur_col, wrap) \ 1390#define ahd_sfunct_print(regvalue, cur_col, wrap) \
1391 ahd_print_register(NULL, 0, "SGSPLTSTAT1", 0x9f, regvalue, cur_col, wrap) 1391 ahd_print_register(NULL, 0, "SFUNCT", 0x9f, regvalue, cur_col, wrap)
1392#endif 1392#endif
1393 1393
1394#if AIC_DEBUG_REGISTERS 1394#if AIC_DEBUG_REGISTERS
@@ -1504,17 +1504,17 @@ ahd_reg_print_t ahd_ccsgaddr_print;
1504#endif 1504#endif
1505 1505
1506#if AIC_DEBUG_REGISTERS 1506#if AIC_DEBUG_REGISTERS
1507ahd_reg_print_t ahd_ccscbaddr_print; 1507ahd_reg_print_t ahd_ccscbadr_bk_print;
1508#else 1508#else
1509#define ahd_ccscbaddr_print(regvalue, cur_col, wrap) \ 1509#define ahd_ccscbadr_bk_print(regvalue, cur_col, wrap) \
1510 ahd_print_register(NULL, 0, "CCSCBADDR", 0xac, regvalue, cur_col, wrap) 1510 ahd_print_register(NULL, 0, "CCSCBADR_BK", 0xac, regvalue, cur_col, wrap)
1511#endif 1511#endif
1512 1512
1513#if AIC_DEBUG_REGISTERS 1513#if AIC_DEBUG_REGISTERS
1514ahd_reg_print_t ahd_ccscbadr_bk_print; 1514ahd_reg_print_t ahd_ccscbaddr_print;
1515#else 1515#else
1516#define ahd_ccscbadr_bk_print(regvalue, cur_col, wrap) \ 1516#define ahd_ccscbaddr_print(regvalue, cur_col, wrap) \
1517 ahd_print_register(NULL, 0, "CCSCBADR_BK", 0xac, regvalue, cur_col, wrap) 1517 ahd_print_register(NULL, 0, "CCSCBADDR", 0xac, regvalue, cur_col, wrap)
1518#endif 1518#endif
1519 1519
1520#if AIC_DEBUG_REGISTERS 1520#if AIC_DEBUG_REGISTERS
@@ -1525,17 +1525,17 @@ ahd_reg_print_t ahd_cmc_rambist_print;
1525#endif 1525#endif
1526 1526
1527#if AIC_DEBUG_REGISTERS 1527#if AIC_DEBUG_REGISTERS
1528ahd_reg_print_t ahd_ccsgctl_print; 1528ahd_reg_print_t ahd_ccscbctl_print;
1529#else 1529#else
1530#define ahd_ccsgctl_print(regvalue, cur_col, wrap) \ 1530#define ahd_ccscbctl_print(regvalue, cur_col, wrap) \
1531 ahd_print_register(NULL, 0, "CCSGCTL", 0xad, regvalue, cur_col, wrap) 1531 ahd_print_register(NULL, 0, "CCSCBCTL", 0xad, regvalue, cur_col, wrap)
1532#endif 1532#endif
1533 1533
1534#if AIC_DEBUG_REGISTERS 1534#if AIC_DEBUG_REGISTERS
1535ahd_reg_print_t ahd_ccscbctl_print; 1535ahd_reg_print_t ahd_ccsgctl_print;
1536#else 1536#else
1537#define ahd_ccscbctl_print(regvalue, cur_col, wrap) \ 1537#define ahd_ccsgctl_print(regvalue, cur_col, wrap) \
1538 ahd_print_register(NULL, 0, "CCSCBCTL", 0xad, regvalue, cur_col, wrap) 1538 ahd_print_register(NULL, 0, "CCSGCTL", 0xad, regvalue, cur_col, wrap)
1539#endif 1539#endif
1540 1540
1541#if AIC_DEBUG_REGISTERS 1541#if AIC_DEBUG_REGISTERS
@@ -1707,13 +1707,6 @@ ahd_reg_print_t ahd_wrtbiascalc_print;
1707#endif 1707#endif
1708 1708
1709#if AIC_DEBUG_REGISTERS 1709#if AIC_DEBUG_REGISTERS
1710ahd_reg_print_t ahd_dfptrs_print;
1711#else
1712#define ahd_dfptrs_print(regvalue, cur_col, wrap) \
1713 ahd_print_register(NULL, 0, "DFPTRS", 0xc8, regvalue, cur_col, wrap)
1714#endif
1715
1716#if AIC_DEBUG_REGISTERS
1717ahd_reg_print_t ahd_rcvrbiascalc_print; 1710ahd_reg_print_t ahd_rcvrbiascalc_print;
1718#else 1711#else
1719#define ahd_rcvrbiascalc_print(regvalue, cur_col, wrap) \ 1712#define ahd_rcvrbiascalc_print(regvalue, cur_col, wrap) \
@@ -1721,10 +1714,10 @@ ahd_reg_print_t ahd_rcvrbiascalc_print;
1721#endif 1714#endif
1722 1715
1723#if AIC_DEBUG_REGISTERS 1716#if AIC_DEBUG_REGISTERS
1724ahd_reg_print_t ahd_dfbkptr_print; 1717ahd_reg_print_t ahd_dfptrs_print;
1725#else 1718#else
1726#define ahd_dfbkptr_print(regvalue, cur_col, wrap) \ 1719#define ahd_dfptrs_print(regvalue, cur_col, wrap) \
1727 ahd_print_register(NULL, 0, "DFBKPTR", 0xc9, regvalue, cur_col, wrap) 1720 ahd_print_register(NULL, 0, "DFPTRS", 0xc8, regvalue, cur_col, wrap)
1728#endif 1721#endif
1729 1722
1730#if AIC_DEBUG_REGISTERS 1723#if AIC_DEBUG_REGISTERS
@@ -1735,6 +1728,13 @@ ahd_reg_print_t ahd_skewcalc_print;
1735#endif 1728#endif
1736 1729
1737#if AIC_DEBUG_REGISTERS 1730#if AIC_DEBUG_REGISTERS
1731ahd_reg_print_t ahd_dfbkptr_print;
1732#else
1733#define ahd_dfbkptr_print(regvalue, cur_col, wrap) \
1734 ahd_print_register(NULL, 0, "DFBKPTR", 0xc9, regvalue, cur_col, wrap)
1735#endif
1736
1737#if AIC_DEBUG_REGISTERS
1738ahd_reg_print_t ahd_dfdbctl_print; 1738ahd_reg_print_t ahd_dfdbctl_print;
1739#else 1739#else
1740#define ahd_dfdbctl_print(regvalue, cur_col, wrap) \ 1740#define ahd_dfdbctl_print(regvalue, cur_col, wrap) \
@@ -1826,17 +1826,17 @@ ahd_reg_print_t ahd_dindex_print;
1826#endif 1826#endif
1827 1827
1828#if AIC_DEBUG_REGISTERS 1828#if AIC_DEBUG_REGISTERS
1829ahd_reg_print_t ahd_brkaddr1_print; 1829ahd_reg_print_t ahd_brkaddr0_print;
1830#else 1830#else
1831#define ahd_brkaddr1_print(regvalue, cur_col, wrap) \ 1831#define ahd_brkaddr0_print(regvalue, cur_col, wrap) \
1832 ahd_print_register(NULL, 0, "BRKADDR1", 0xe6, regvalue, cur_col, wrap) 1832 ahd_print_register(NULL, 0, "BRKADDR0", 0xe6, regvalue, cur_col, wrap)
1833#endif 1833#endif
1834 1834
1835#if AIC_DEBUG_REGISTERS 1835#if AIC_DEBUG_REGISTERS
1836ahd_reg_print_t ahd_brkaddr0_print; 1836ahd_reg_print_t ahd_brkaddr1_print;
1837#else 1837#else
1838#define ahd_brkaddr0_print(regvalue, cur_col, wrap) \ 1838#define ahd_brkaddr1_print(regvalue, cur_col, wrap) \
1839 ahd_print_register(NULL, 0, "BRKADDR0", 0xe6, regvalue, cur_col, wrap) 1839 ahd_print_register(NULL, 0, "BRKADDR1", 0xe6, regvalue, cur_col, wrap)
1840#endif 1840#endif
1841 1841
1842#if AIC_DEBUG_REGISTERS 1842#if AIC_DEBUG_REGISTERS
@@ -1889,13 +1889,6 @@ ahd_reg_print_t ahd_stack_print;
1889#endif 1889#endif
1890 1890
1891#if AIC_DEBUG_REGISTERS 1891#if AIC_DEBUG_REGISTERS
1892ahd_reg_print_t ahd_curaddr_print;
1893#else
1894#define ahd_curaddr_print(regvalue, cur_col, wrap) \
1895 ahd_print_register(NULL, 0, "CURADDR", 0xf4, regvalue, cur_col, wrap)
1896#endif
1897
1898#if AIC_DEBUG_REGISTERS
1899ahd_reg_print_t ahd_intvec1_addr_print; 1892ahd_reg_print_t ahd_intvec1_addr_print;
1900#else 1893#else
1901#define ahd_intvec1_addr_print(regvalue, cur_col, wrap) \ 1894#define ahd_intvec1_addr_print(regvalue, cur_col, wrap) \
@@ -1903,10 +1896,10 @@ ahd_reg_print_t ahd_intvec1_addr_print;
1903#endif 1896#endif
1904 1897
1905#if AIC_DEBUG_REGISTERS 1898#if AIC_DEBUG_REGISTERS
1906ahd_reg_print_t ahd_intvec2_addr_print; 1899ahd_reg_print_t ahd_curaddr_print;
1907#else 1900#else
1908#define ahd_intvec2_addr_print(regvalue, cur_col, wrap) \ 1901#define ahd_curaddr_print(regvalue, cur_col, wrap) \
1909 ahd_print_register(NULL, 0, "INTVEC2_ADDR", 0xf6, regvalue, cur_col, wrap) 1902 ahd_print_register(NULL, 0, "CURADDR", 0xf4, regvalue, cur_col, wrap)
1910#endif 1903#endif
1911 1904
1912#if AIC_DEBUG_REGISTERS 1905#if AIC_DEBUG_REGISTERS
@@ -1917,6 +1910,13 @@ ahd_reg_print_t ahd_lastaddr_print;
1917#endif 1910#endif
1918 1911
1919#if AIC_DEBUG_REGISTERS 1912#if AIC_DEBUG_REGISTERS
1913ahd_reg_print_t ahd_intvec2_addr_print;
1914#else
1915#define ahd_intvec2_addr_print(regvalue, cur_col, wrap) \
1916 ahd_print_register(NULL, 0, "INTVEC2_ADDR", 0xf6, regvalue, cur_col, wrap)
1917#endif
1918
1919#if AIC_DEBUG_REGISTERS
1920ahd_reg_print_t ahd_longjmp_addr_print; 1920ahd_reg_print_t ahd_longjmp_addr_print;
1921#else 1921#else
1922#define ahd_longjmp_addr_print(regvalue, cur_col, wrap) \ 1922#define ahd_longjmp_addr_print(regvalue, cur_col, wrap) \
@@ -1994,192 +1994,213 @@ ahd_reg_print_t ahd_complete_dma_scb_head_print;
1994#endif 1994#endif
1995 1995
1996#if AIC_DEBUG_REGISTERS 1996#if AIC_DEBUG_REGISTERS
1997ahd_reg_print_t ahd_complete_dma_scb_tail_print;
1998#else
1999#define ahd_complete_dma_scb_tail_print(regvalue, cur_col, wrap) \
2000 ahd_print_register(NULL, 0, "COMPLETE_DMA_SCB_TAIL", 0x12e, regvalue, cur_col, wrap)
2001#endif
2002
2003#if AIC_DEBUG_REGISTERS
2004ahd_reg_print_t ahd_complete_on_qfreeze_head_print;
2005#else
2006#define ahd_complete_on_qfreeze_head_print(regvalue, cur_col, wrap) \
2007 ahd_print_register(NULL, 0, "COMPLETE_ON_QFREEZE_HEAD", 0x130, regvalue, cur_col, wrap)
2008#endif
2009
2010#if AIC_DEBUG_REGISTERS
1997ahd_reg_print_t ahd_qfreeze_count_print; 2011ahd_reg_print_t ahd_qfreeze_count_print;
1998#else 2012#else
1999#define ahd_qfreeze_count_print(regvalue, cur_col, wrap) \ 2013#define ahd_qfreeze_count_print(regvalue, cur_col, wrap) \
2000 ahd_print_register(NULL, 0, "QFREEZE_COUNT", 0x12e, regvalue, cur_col, wrap) 2014 ahd_print_register(NULL, 0, "QFREEZE_COUNT", 0x132, regvalue, cur_col, wrap)
2015#endif
2016
2017#if AIC_DEBUG_REGISTERS
2018ahd_reg_print_t ahd_kernel_qfreeze_count_print;
2019#else
2020#define ahd_kernel_qfreeze_count_print(regvalue, cur_col, wrap) \
2021 ahd_print_register(NULL, 0, "KERNEL_QFREEZE_COUNT", 0x134, regvalue, cur_col, wrap)
2001#endif 2022#endif
2002 2023
2003#if AIC_DEBUG_REGISTERS 2024#if AIC_DEBUG_REGISTERS
2004ahd_reg_print_t ahd_saved_mode_print; 2025ahd_reg_print_t ahd_saved_mode_print;
2005#else 2026#else
2006#define ahd_saved_mode_print(regvalue, cur_col, wrap) \ 2027#define ahd_saved_mode_print(regvalue, cur_col, wrap) \
2007 ahd_print_register(NULL, 0, "SAVED_MODE", 0x130, regvalue, cur_col, wrap) 2028 ahd_print_register(NULL, 0, "SAVED_MODE", 0x136, regvalue, cur_col, wrap)
2008#endif 2029#endif
2009 2030
2010#if AIC_DEBUG_REGISTERS 2031#if AIC_DEBUG_REGISTERS
2011ahd_reg_print_t ahd_msg_out_print; 2032ahd_reg_print_t ahd_msg_out_print;
2012#else 2033#else
2013#define ahd_msg_out_print(regvalue, cur_col, wrap) \ 2034#define ahd_msg_out_print(regvalue, cur_col, wrap) \
2014 ahd_print_register(NULL, 0, "MSG_OUT", 0x131, regvalue, cur_col, wrap) 2035 ahd_print_register(NULL, 0, "MSG_OUT", 0x137, regvalue, cur_col, wrap)
2015#endif 2036#endif
2016 2037
2017#if AIC_DEBUG_REGISTERS 2038#if AIC_DEBUG_REGISTERS
2018ahd_reg_print_t ahd_dmaparams_print; 2039ahd_reg_print_t ahd_dmaparams_print;
2019#else 2040#else
2020#define ahd_dmaparams_print(regvalue, cur_col, wrap) \ 2041#define ahd_dmaparams_print(regvalue, cur_col, wrap) \
2021 ahd_print_register(NULL, 0, "DMAPARAMS", 0x132, regvalue, cur_col, wrap) 2042 ahd_print_register(NULL, 0, "DMAPARAMS", 0x138, regvalue, cur_col, wrap)
2022#endif 2043#endif
2023 2044
2024#if AIC_DEBUG_REGISTERS 2045#if AIC_DEBUG_REGISTERS
2025ahd_reg_print_t ahd_seq_flags_print; 2046ahd_reg_print_t ahd_seq_flags_print;
2026#else 2047#else
2027#define ahd_seq_flags_print(regvalue, cur_col, wrap) \ 2048#define ahd_seq_flags_print(regvalue, cur_col, wrap) \
2028 ahd_print_register(NULL, 0, "SEQ_FLAGS", 0x133, regvalue, cur_col, wrap) 2049 ahd_print_register(NULL, 0, "SEQ_FLAGS", 0x139, regvalue, cur_col, wrap)
2029#endif 2050#endif
2030 2051
2031#if AIC_DEBUG_REGISTERS 2052#if AIC_DEBUG_REGISTERS
2032ahd_reg_print_t ahd_saved_scsiid_print; 2053ahd_reg_print_t ahd_saved_scsiid_print;
2033#else 2054#else
2034#define ahd_saved_scsiid_print(regvalue, cur_col, wrap) \ 2055#define ahd_saved_scsiid_print(regvalue, cur_col, wrap) \
2035 ahd_print_register(NULL, 0, "SAVED_SCSIID", 0x134, regvalue, cur_col, wrap) 2056 ahd_print_register(NULL, 0, "SAVED_SCSIID", 0x13a, regvalue, cur_col, wrap)
2036#endif 2057#endif
2037 2058
2038#if AIC_DEBUG_REGISTERS 2059#if AIC_DEBUG_REGISTERS
2039ahd_reg_print_t ahd_saved_lun_print; 2060ahd_reg_print_t ahd_saved_lun_print;
2040#else 2061#else
2041#define ahd_saved_lun_print(regvalue, cur_col, wrap) \ 2062#define ahd_saved_lun_print(regvalue, cur_col, wrap) \
2042 ahd_print_register(NULL, 0, "SAVED_LUN", 0x135, regvalue, cur_col, wrap) 2063 ahd_print_register(NULL, 0, "SAVED_LUN", 0x13b, regvalue, cur_col, wrap)
2043#endif 2064#endif
2044 2065
2045#if AIC_DEBUG_REGISTERS 2066#if AIC_DEBUG_REGISTERS
2046ahd_reg_print_t ahd_lastphase_print; 2067ahd_reg_print_t ahd_lastphase_print;
2047#else 2068#else
2048#define ahd_lastphase_print(regvalue, cur_col, wrap) \ 2069#define ahd_lastphase_print(regvalue, cur_col, wrap) \
2049 ahd_print_register(NULL, 0, "LASTPHASE", 0x136, regvalue, cur_col, wrap) 2070 ahd_print_register(NULL, 0, "LASTPHASE", 0x13c, regvalue, cur_col, wrap)
2050#endif 2071#endif
2051 2072
2052#if AIC_DEBUG_REGISTERS 2073#if AIC_DEBUG_REGISTERS
2053ahd_reg_print_t ahd_qoutfifo_entry_valid_tag_print; 2074ahd_reg_print_t ahd_qoutfifo_entry_valid_tag_print;
2054#else 2075#else
2055#define ahd_qoutfifo_entry_valid_tag_print(regvalue, cur_col, wrap) \ 2076#define ahd_qoutfifo_entry_valid_tag_print(regvalue, cur_col, wrap) \
2056 ahd_print_register(NULL, 0, "QOUTFIFO_ENTRY_VALID_TAG", 0x137, regvalue, cur_col, wrap) 2077 ahd_print_register(NULL, 0, "QOUTFIFO_ENTRY_VALID_TAG", 0x13d, regvalue, cur_col, wrap)
2057#endif 2078#endif
2058 2079
2059#if AIC_DEBUG_REGISTERS 2080#if AIC_DEBUG_REGISTERS
2060ahd_reg_print_t ahd_shared_data_addr_print; 2081ahd_reg_print_t ahd_kernel_tqinpos_print;
2061#else 2082#else
2062#define ahd_shared_data_addr_print(regvalue, cur_col, wrap) \ 2083#define ahd_kernel_tqinpos_print(regvalue, cur_col, wrap) \
2063 ahd_print_register(NULL, 0, "SHARED_DATA_ADDR", 0x138, regvalue, cur_col, wrap) 2084 ahd_print_register(NULL, 0, "KERNEL_TQINPOS", 0x13e, regvalue, cur_col, wrap)
2064#endif 2085#endif
2065 2086
2066#if AIC_DEBUG_REGISTERS 2087#if AIC_DEBUG_REGISTERS
2067ahd_reg_print_t ahd_qoutfifo_next_addr_print; 2088ahd_reg_print_t ahd_tqinpos_print;
2068#else 2089#else
2069#define ahd_qoutfifo_next_addr_print(regvalue, cur_col, wrap) \ 2090#define ahd_tqinpos_print(regvalue, cur_col, wrap) \
2070 ahd_print_register(NULL, 0, "QOUTFIFO_NEXT_ADDR", 0x13c, regvalue, cur_col, wrap) 2091 ahd_print_register(NULL, 0, "TQINPOS", 0x13f, regvalue, cur_col, wrap)
2071#endif 2092#endif
2072 2093
2073#if AIC_DEBUG_REGISTERS 2094#if AIC_DEBUG_REGISTERS
2074ahd_reg_print_t ahd_kernel_tqinpos_print; 2095ahd_reg_print_t ahd_shared_data_addr_print;
2075#else 2096#else
2076#define ahd_kernel_tqinpos_print(regvalue, cur_col, wrap) \ 2097#define ahd_shared_data_addr_print(regvalue, cur_col, wrap) \
2077 ahd_print_register(NULL, 0, "KERNEL_TQINPOS", 0x140, regvalue, cur_col, wrap) 2098 ahd_print_register(NULL, 0, "SHARED_DATA_ADDR", 0x140, regvalue, cur_col, wrap)
2078#endif 2099#endif
2079 2100
2080#if AIC_DEBUG_REGISTERS 2101#if AIC_DEBUG_REGISTERS
2081ahd_reg_print_t ahd_tqinpos_print; 2102ahd_reg_print_t ahd_qoutfifo_next_addr_print;
2082#else 2103#else
2083#define ahd_tqinpos_print(regvalue, cur_col, wrap) \ 2104#define ahd_qoutfifo_next_addr_print(regvalue, cur_col, wrap) \
2084 ahd_print_register(NULL, 0, "TQINPOS", 0x141, regvalue, cur_col, wrap) 2105 ahd_print_register(NULL, 0, "QOUTFIFO_NEXT_ADDR", 0x144, regvalue, cur_col, wrap)
2085#endif 2106#endif
2086 2107
2087#if AIC_DEBUG_REGISTERS 2108#if AIC_DEBUG_REGISTERS
2088ahd_reg_print_t ahd_arg_1_print; 2109ahd_reg_print_t ahd_arg_1_print;
2089#else 2110#else
2090#define ahd_arg_1_print(regvalue, cur_col, wrap) \ 2111#define ahd_arg_1_print(regvalue, cur_col, wrap) \
2091 ahd_print_register(NULL, 0, "ARG_1", 0x142, regvalue, cur_col, wrap) 2112 ahd_print_register(NULL, 0, "ARG_1", 0x148, regvalue, cur_col, wrap)
2092#endif 2113#endif
2093 2114
2094#if AIC_DEBUG_REGISTERS 2115#if AIC_DEBUG_REGISTERS
2095ahd_reg_print_t ahd_arg_2_print; 2116ahd_reg_print_t ahd_arg_2_print;
2096#else 2117#else
2097#define ahd_arg_2_print(regvalue, cur_col, wrap) \ 2118#define ahd_arg_2_print(regvalue, cur_col, wrap) \
2098 ahd_print_register(NULL, 0, "ARG_2", 0x143, regvalue, cur_col, wrap) 2119 ahd_print_register(NULL, 0, "ARG_2", 0x149, regvalue, cur_col, wrap)
2099#endif 2120#endif
2100 2121
2101#if AIC_DEBUG_REGISTERS 2122#if AIC_DEBUG_REGISTERS
2102ahd_reg_print_t ahd_last_msg_print; 2123ahd_reg_print_t ahd_last_msg_print;
2103#else 2124#else
2104#define ahd_last_msg_print(regvalue, cur_col, wrap) \ 2125#define ahd_last_msg_print(regvalue, cur_col, wrap) \
2105 ahd_print_register(NULL, 0, "LAST_MSG", 0x144, regvalue, cur_col, wrap) 2126 ahd_print_register(NULL, 0, "LAST_MSG", 0x14a, regvalue, cur_col, wrap)
2106#endif 2127#endif
2107 2128
2108#if AIC_DEBUG_REGISTERS 2129#if AIC_DEBUG_REGISTERS
2109ahd_reg_print_t ahd_scsiseq_template_print; 2130ahd_reg_print_t ahd_scsiseq_template_print;
2110#else 2131#else
2111#define ahd_scsiseq_template_print(regvalue, cur_col, wrap) \ 2132#define ahd_scsiseq_template_print(regvalue, cur_col, wrap) \
2112 ahd_print_register(NULL, 0, "SCSISEQ_TEMPLATE", 0x145, regvalue, cur_col, wrap) 2133 ahd_print_register(NULL, 0, "SCSISEQ_TEMPLATE", 0x14b, regvalue, cur_col, wrap)
2113#endif 2134#endif
2114 2135
2115#if AIC_DEBUG_REGISTERS 2136#if AIC_DEBUG_REGISTERS
2116ahd_reg_print_t ahd_initiator_tag_print; 2137ahd_reg_print_t ahd_initiator_tag_print;
2117#else 2138#else
2118#define ahd_initiator_tag_print(regvalue, cur_col, wrap) \ 2139#define ahd_initiator_tag_print(regvalue, cur_col, wrap) \
2119 ahd_print_register(NULL, 0, "INITIATOR_TAG", 0x146, regvalue, cur_col, wrap) 2140 ahd_print_register(NULL, 0, "INITIATOR_TAG", 0x14c, regvalue, cur_col, wrap)
2120#endif 2141#endif
2121 2142
2122#if AIC_DEBUG_REGISTERS 2143#if AIC_DEBUG_REGISTERS
2123ahd_reg_print_t ahd_seq_flags2_print; 2144ahd_reg_print_t ahd_seq_flags2_print;
2124#else 2145#else
2125#define ahd_seq_flags2_print(regvalue, cur_col, wrap) \ 2146#define ahd_seq_flags2_print(regvalue, cur_col, wrap) \
2126 ahd_print_register(NULL, 0, "SEQ_FLAGS2", 0x147, regvalue, cur_col, wrap) 2147 ahd_print_register(NULL, 0, "SEQ_FLAGS2", 0x14d, regvalue, cur_col, wrap)
2127#endif 2148#endif
2128 2149
2129#if AIC_DEBUG_REGISTERS 2150#if AIC_DEBUG_REGISTERS
2130ahd_reg_print_t ahd_allocfifo_scbptr_print; 2151ahd_reg_print_t ahd_allocfifo_scbptr_print;
2131#else 2152#else
2132#define ahd_allocfifo_scbptr_print(regvalue, cur_col, wrap) \ 2153#define ahd_allocfifo_scbptr_print(regvalue, cur_col, wrap) \
2133 ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR", 0x148, regvalue, cur_col, wrap) 2154 ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR", 0x14e, regvalue, cur_col, wrap)
2134#endif 2155#endif
2135 2156
2136#if AIC_DEBUG_REGISTERS 2157#if AIC_DEBUG_REGISTERS
2137ahd_reg_print_t ahd_int_coalescing_timer_print; 2158ahd_reg_print_t ahd_int_coalescing_timer_print;
2138#else 2159#else
2139#define ahd_int_coalescing_timer_print(regvalue, cur_col, wrap) \ 2160#define ahd_int_coalescing_timer_print(regvalue, cur_col, wrap) \
2140 ahd_print_register(NULL, 0, "INT_COALESCING_TIMER", 0x14a, regvalue, cur_col, wrap) 2161 ahd_print_register(NULL, 0, "INT_COALESCING_TIMER", 0x150, regvalue, cur_col, wrap)
2141#endif 2162#endif
2142 2163
2143#if AIC_DEBUG_REGISTERS 2164#if AIC_DEBUG_REGISTERS
2144ahd_reg_print_t ahd_int_coalescing_maxcmds_print; 2165ahd_reg_print_t ahd_int_coalescing_maxcmds_print;
2145#else 2166#else
2146#define ahd_int_coalescing_maxcmds_print(regvalue, cur_col, wrap) \ 2167#define ahd_int_coalescing_maxcmds_print(regvalue, cur_col, wrap) \
2147 ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS", 0x14c, regvalue, cur_col, wrap) 2168 ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS", 0x152, regvalue, cur_col, wrap)
2148#endif 2169#endif
2149 2170
2150#if AIC_DEBUG_REGISTERS 2171#if AIC_DEBUG_REGISTERS
2151ahd_reg_print_t ahd_int_coalescing_mincmds_print; 2172ahd_reg_print_t ahd_int_coalescing_mincmds_print;
2152#else 2173#else
2153#define ahd_int_coalescing_mincmds_print(regvalue, cur_col, wrap) \ 2174#define ahd_int_coalescing_mincmds_print(regvalue, cur_col, wrap) \
2154 ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS", 0x14d, regvalue, cur_col, wrap) 2175 ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS", 0x153, regvalue, cur_col, wrap)
2155#endif 2176#endif
2156 2177
2157#if AIC_DEBUG_REGISTERS 2178#if AIC_DEBUG_REGISTERS
2158ahd_reg_print_t ahd_cmds_pending_print; 2179ahd_reg_print_t ahd_cmds_pending_print;
2159#else 2180#else
2160#define ahd_cmds_pending_print(regvalue, cur_col, wrap) \ 2181#define ahd_cmds_pending_print(regvalue, cur_col, wrap) \
2161 ahd_print_register(NULL, 0, "CMDS_PENDING", 0x14e, regvalue, cur_col, wrap) 2182 ahd_print_register(NULL, 0, "CMDS_PENDING", 0x154, regvalue, cur_col, wrap)
2162#endif 2183#endif
2163 2184
2164#if AIC_DEBUG_REGISTERS 2185#if AIC_DEBUG_REGISTERS
2165ahd_reg_print_t ahd_int_coalescing_cmdcount_print; 2186ahd_reg_print_t ahd_int_coalescing_cmdcount_print;
2166#else 2187#else
2167#define ahd_int_coalescing_cmdcount_print(regvalue, cur_col, wrap) \ 2188#define ahd_int_coalescing_cmdcount_print(regvalue, cur_col, wrap) \
2168 ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT", 0x150, regvalue, cur_col, wrap) 2189 ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT", 0x156, regvalue, cur_col, wrap)
2169#endif 2190#endif
2170 2191
2171#if AIC_DEBUG_REGISTERS 2192#if AIC_DEBUG_REGISTERS
2172ahd_reg_print_t ahd_local_hs_mailbox_print; 2193ahd_reg_print_t ahd_local_hs_mailbox_print;
2173#else 2194#else
2174#define ahd_local_hs_mailbox_print(regvalue, cur_col, wrap) \ 2195#define ahd_local_hs_mailbox_print(regvalue, cur_col, wrap) \
2175 ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX", 0x151, regvalue, cur_col, wrap) 2196 ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX", 0x157, regvalue, cur_col, wrap)
2176#endif 2197#endif
2177 2198
2178#if AIC_DEBUG_REGISTERS 2199#if AIC_DEBUG_REGISTERS
2179ahd_reg_print_t ahd_cmdsize_table_print; 2200ahd_reg_print_t ahd_cmdsize_table_print;
2180#else 2201#else
2181#define ahd_cmdsize_table_print(regvalue, cur_col, wrap) \ 2202#define ahd_cmdsize_table_print(regvalue, cur_col, wrap) \
2182 ahd_print_register(NULL, 0, "CMDSIZE_TABLE", 0x152, regvalue, cur_col, wrap) 2203 ahd_print_register(NULL, 0, "CMDSIZE_TABLE", 0x158, regvalue, cur_col, wrap)
2183#endif 2204#endif
2184 2205
2185#if AIC_DEBUG_REGISTERS 2206#if AIC_DEBUG_REGISTERS
@@ -2434,13 +2455,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2434#define HOST_TQINPOS 0x80 2455#define HOST_TQINPOS 0x80
2435#define ENINT_COALESCE 0x40 2456#define ENINT_COALESCE 0x40
2436 2457
2437#define CLRSEQINTSTAT 0x0c
2438#define CLRSEQ_SWTMRTO 0x10
2439#define CLRSEQ_SEQINT 0x08
2440#define CLRSEQ_SCSIINT 0x04
2441#define CLRSEQ_PCIINT 0x02
2442#define CLRSEQ_SPLTINT 0x01
2443
2444#define SEQINTSTAT 0x0c 2458#define SEQINTSTAT 0x0c
2445#define SEQ_SWTMRTO 0x10 2459#define SEQ_SWTMRTO 0x10
2446#define SEQ_SEQINT 0x08 2460#define SEQ_SEQINT 0x08
@@ -2448,6 +2462,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2448#define SEQ_PCIINT 0x02 2462#define SEQ_PCIINT 0x02
2449#define SEQ_SPLTINT 0x01 2463#define SEQ_SPLTINT 0x01
2450 2464
2465#define CLRSEQINTSTAT 0x0c
2466#define CLRSEQ_SWTMRTO 0x10
2467#define CLRSEQ_SEQINT 0x08
2468#define CLRSEQ_SCSIINT 0x04
2469#define CLRSEQ_PCIINT 0x02
2470#define CLRSEQ_SPLTINT 0x01
2471
2451#define SWTIMER 0x0e 2472#define SWTIMER 0x0e
2452 2473
2453#define SNSCB_QOFF 0x10 2474#define SNSCB_QOFF 0x10
@@ -2623,10 +2644,10 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2623#define BIOSCANCELEN 0x10 2644#define BIOSCANCELEN 0x10
2624#define SPIOEN 0x08 2645#define SPIOEN 0x08
2625 2646
2626#define BUSINITID 0x3c
2627
2628#define DLCOUNT 0x3c 2647#define DLCOUNT 0x3c
2629 2648
2649#define BUSINITID 0x3c
2650
2630#define SXFRCTL1 0x3d 2651#define SXFRCTL1 0x3d
2631#define BITBUCKET 0x80 2652#define BITBUCKET 0x80
2632#define ENSACHK 0x40 2653#define ENSACHK 0x40
@@ -2693,13 +2714,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2693#define SELID_MASK 0xf0 2714#define SELID_MASK 0xf0
2694#define ONEBIT 0x08 2715#define ONEBIT 0x08
2695 2716
2696#define SBLKCTL 0x4a
2697#define DIAGLEDEN 0x80
2698#define DIAGLEDON 0x40
2699#define ENAB40 0x08
2700#define ENAB20 0x04
2701#define SELWIDE 0x02
2702
2703#define OPTIONMODE 0x4a 2717#define OPTIONMODE 0x4a
2704#define OPTIONMODE_DEFAULTS 0x02 2718#define OPTIONMODE_DEFAULTS 0x02
2705#define BIOSCANCTL 0x80 2719#define BIOSCANCTL 0x80
@@ -2709,15 +2723,12 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2709#define ENDGFORMCHK 0x04 2723#define ENDGFORMCHK 0x04
2710#define AUTO_MSGOUT_DE 0x02 2724#define AUTO_MSGOUT_DE 0x02
2711 2725
2712#define SSTAT0 0x4b 2726#define SBLKCTL 0x4a
2713#define TARGET 0x80 2727#define DIAGLEDEN 0x80
2714#define SELDO 0x40 2728#define DIAGLEDON 0x40
2715#define SELDI 0x20 2729#define ENAB40 0x08
2716#define SELINGO 0x10 2730#define ENAB20 0x04
2717#define IOERR 0x08 2731#define SELWIDE 0x02
2718#define OVERRUN 0x04
2719#define SPIORDY 0x02
2720#define ARBDO 0x01
2721 2732
2722#define CLRSINT0 0x4b 2733#define CLRSINT0 0x4b
2723#define CLRSELDO 0x40 2734#define CLRSELDO 0x40
@@ -2728,6 +2739,16 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2728#define CLRSPIORDY 0x02 2739#define CLRSPIORDY 0x02
2729#define CLRARBDO 0x01 2740#define CLRARBDO 0x01
2730 2741
2742#define SSTAT0 0x4b
2743#define TARGET 0x80
2744#define SELDO 0x40
2745#define SELDI 0x20
2746#define SELINGO 0x10
2747#define IOERR 0x08
2748#define OVERRUN 0x04
2749#define SPIORDY 0x02
2750#define ARBDO 0x01
2751
2731#define SIMODE0 0x4b 2752#define SIMODE0 0x4b
2732#define ENSELDO 0x40 2753#define ENSELDO 0x40
2733#define ENSELDI 0x20 2754#define ENSELDI 0x20
@@ -2768,17 +2789,17 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2768#define BUSFREE_DFF0 0x80 2789#define BUSFREE_DFF0 0x80
2769#define BUSFREE_LQO 0x40 2790#define BUSFREE_LQO 0x40
2770 2791
2792#define SIMODE2 0x4d
2793#define ENWIDE_RES 0x04
2794#define ENSDONE 0x02
2795#define ENDMADONE 0x01
2796
2771#define CLRSINT2 0x4d 2797#define CLRSINT2 0x4d
2772#define CLRNONPACKREQ 0x20 2798#define CLRNONPACKREQ 0x20
2773#define CLRWIDE_RES 0x04 2799#define CLRWIDE_RES 0x04
2774#define CLRSDONE 0x02 2800#define CLRSDONE 0x02
2775#define CLRDMADONE 0x01 2801#define CLRDMADONE 0x01
2776 2802
2777#define SIMODE2 0x4d
2778#define ENWIDE_RES 0x04
2779#define ENSDONE 0x02
2780#define ENDMADONE 0x01
2781
2782#define PERRDIAG 0x4e 2803#define PERRDIAG 0x4e
2783#define HIZERO 0x80 2804#define HIZERO 0x80
2784#define HIPERR 0x40 2805#define HIPERR 0x40
@@ -2871,13 +2892,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2871#define CLRNTRAMPERR 0x02 2892#define CLRNTRAMPERR 0x02
2872#define CLROSRAMPERR 0x01 2893#define CLROSRAMPERR 0x01
2873 2894
2874#define LQOMODE0 0x54
2875#define ENLQOTARGSCBPERR 0x10
2876#define ENLQOSTOPT2 0x08
2877#define ENLQOATNLQ 0x04
2878#define ENLQOATNPKT 0x02
2879#define ENLQOTCRC 0x01
2880
2881#define LQOSTAT0 0x54 2895#define LQOSTAT0 0x54
2882#define LQOTARGSCBPERR 0x10 2896#define LQOTARGSCBPERR 0x10
2883#define LQOSTOPT2 0x08 2897#define LQOSTOPT2 0x08
@@ -2892,6 +2906,20 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2892#define CLRLQOATNPKT 0x02 2906#define CLRLQOATNPKT 0x02
2893#define CLRLQOTCRC 0x01 2907#define CLRLQOTCRC 0x01
2894 2908
2909#define LQOMODE0 0x54
2910#define ENLQOTARGSCBPERR 0x10
2911#define ENLQOSTOPT2 0x08
2912#define ENLQOATNLQ 0x04
2913#define ENLQOATNPKT 0x02
2914#define ENLQOTCRC 0x01
2915
2916#define LQOMODE1 0x55
2917#define ENLQOINITSCBPERR 0x10
2918#define ENLQOSTOPI2 0x08
2919#define ENLQOBADQAS 0x04
2920#define ENLQOBUSFREE 0x02
2921#define ENLQOPHACHGINPKT 0x01
2922
2895#define LQOSTAT1 0x55 2923#define LQOSTAT1 0x55
2896#define LQOINITSCBPERR 0x10 2924#define LQOINITSCBPERR 0x10
2897#define LQOSTOPI2 0x08 2925#define LQOSTOPI2 0x08
@@ -2906,13 +2934,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
2906#define CLRLQOBUSFREE 0x02 2934#define CLRLQOBUSFREE 0x02
2907#define CLRLQOPHACHGINPKT 0x01 2935#define CLRLQOPHACHGINPKT 0x01
2908 2936
2909#define LQOMODE1 0x55
2910#define ENLQOINITSCBPERR 0x10
2911#define ENLQOSTOPI2 0x08
2912#define ENLQOBADQAS 0x04
2913#define ENLQOBUSFREE 0x02
2914#define ENLQOPHACHGINPKT 0x01
2915
2916#define LQOSTAT2 0x56 2937#define LQOSTAT2 0x56
2917#define LQOPKT 0xe0 2938#define LQOPKT 0xe0
2918#define LQOWAITFIFO 0x10 2939#define LQOWAITFIFO 0x10
@@ -3028,6 +3049,8 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3028 3049
3029#define ANNEXCOL 0x65 3050#define ANNEXCOL 0x65
3030 3051
3052#define ANNEXDAT 0x66
3053
3031#define SCSCHKN 0x66 3054#define SCSCHKN 0x66
3032#define STSELSKIDDIS 0x40 3055#define STSELSKIDDIS 0x40
3033#define CURRFIFODEF 0x20 3056#define CURRFIFODEF 0x20
@@ -3037,8 +3060,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3037#define SHVALIDSTDIS 0x02 3060#define SHVALIDSTDIS 0x02
3038#define LSTSGCLRDIS 0x01 3061#define LSTSGCLRDIS 0x01
3039 3062
3040#define ANNEXDAT 0x66
3041
3042#define IOWNID 0x67 3063#define IOWNID 0x67
3043 3064
3044#define PLL960CTL0 0x68 3065#define PLL960CTL0 0x68
@@ -3071,10 +3092,10 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3071#define PLL_CNTCLR 0x40 3092#define PLL_CNTCLR 0x40
3072#define PLL_RST 0x01 3093#define PLL_RST 0x01
3073 3094
3074#define PLL400CNT0 0x6e
3075
3076#define UNFAIRNESS 0x6e 3095#define UNFAIRNESS 0x6e
3077 3096
3097#define PLL400CNT0 0x6e
3098
3078#define HADDR 0x70 3099#define HADDR 0x70
3079 3100
3080#define PLLDELAY 0x70 3101#define PLLDELAY 0x70
@@ -3088,14 +3109,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3088 3109
3089#define HODMAEN 0x7a 3110#define HODMAEN 0x7a
3090 3111
3091#define SGHADDR 0x7c
3092
3093#define SCBHADDR 0x7c 3112#define SCBHADDR 0x7c
3094 3113
3095#define SGHCNT 0x84 3114#define SGHADDR 0x7c
3096 3115
3097#define SCBHCNT 0x84 3116#define SCBHCNT 0x84
3098 3117
3118#define SGHCNT 0x84
3119
3099#define DFF_THRSH 0x88 3120#define DFF_THRSH 0x88
3100#define WR_DFTHRSH 0x70 3121#define WR_DFTHRSH 0x70
3101#define RD_DFTHRSH 0x07 3122#define RD_DFTHRSH 0x07
@@ -3113,8 +3134,8 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3113#define RD_DFTHRSH_63 0x03 3134#define RD_DFTHRSH_63 0x03
3114#define RD_DFTHRSH_50 0x02 3135#define RD_DFTHRSH_50 0x02
3115#define RD_DFTHRSH_25 0x01 3136#define RD_DFTHRSH_25 0x01
3116#define WR_DFTHRSH_MIN 0x00
3117#define RD_DFTHRSH_MIN 0x00 3137#define RD_DFTHRSH_MIN 0x00
3138#define WR_DFTHRSH_MIN 0x00
3118 3139
3119#define ROMADDR 0x8a 3140#define ROMADDR 0x8a
3120 3141
@@ -3150,20 +3171,22 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3150#define DCH1NSEN 0x02 3171#define DCH1NSEN 0x02
3151#define DCH0NSEN 0x01 3172#define DCH0NSEN 0x01
3152 3173
3153#define DCHRXMSG1 0x91
3154
3155#define CMCRXMSG1 0x91 3174#define CMCRXMSG1 0x91
3156 3175
3157#define DCHRXMSG2 0x92 3176#define DCHRXMSG1 0x91
3158 3177
3159#define OVLYRXMSG2 0x92 3178#define DCHRXMSG2 0x92
3160 3179
3161#define CMCRXMSG2 0x92 3180#define CMCRXMSG2 0x92
3162 3181
3163#define OST 0x92 3182#define OST 0x92
3164 3183
3184#define OVLYRXMSG2 0x92
3185
3165#define DCHRXMSG3 0x93 3186#define DCHRXMSG3 0x93
3166 3187
3188#define OVLYRXMSG3 0x93
3189
3167#define CMCRXMSG3 0x93 3190#define CMCRXMSG3 0x93
3168 3191
3169#define PCIXCTL 0x93 3192#define PCIXCTL 0x93
@@ -3175,26 +3198,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3175#define TSCSERREN 0x02 3198#define TSCSERREN 0x02
3176#define CMPABCDIS 0x01 3199#define CMPABCDIS 0x01
3177 3200
3178#define OVLYRXMSG3 0x93
3179
3180#define OVLYSEQBCNT 0x94 3201#define OVLYSEQBCNT 0x94
3181 3202
3182#define CMCSEQBCNT 0x94
3183
3184#define DCHSEQBCNT 0x94 3203#define DCHSEQBCNT 0x94
3185 3204
3186#define CMCSPLTSTAT0 0x96 3205#define CMCSEQBCNT 0x94
3187 3206
3188#define OVLYSPLTSTAT0 0x96 3207#define CMCSPLTSTAT0 0x96
3189 3208
3190#define DCHSPLTSTAT0 0x96 3209#define DCHSPLTSTAT0 0x96
3191 3210
3192#define DCHSPLTSTAT1 0x97 3211#define OVLYSPLTSTAT0 0x96
3193 3212
3194#define CMCSPLTSTAT1 0x97 3213#define CMCSPLTSTAT1 0x97
3195 3214
3196#define OVLYSPLTSTAT1 0x97 3215#define OVLYSPLTSTAT1 0x97
3197 3216
3217#define DCHSPLTSTAT1 0x97
3218
3198#define SGRXMSG0 0x98 3219#define SGRXMSG0 0x98
3199#define CDNUM 0xf8 3220#define CDNUM 0xf8
3200#define CFNUM 0x07 3221#define CFNUM 0x07
@@ -3244,13 +3265,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3244#define RXSCEMSG 0x02 3265#define RXSCEMSG 0x02
3245#define RXSPLTRSP 0x01 3266#define RXSPLTRSP 0x01
3246 3267
3268#define SGSPLTSTAT1 0x9f
3269#define RXDATABUCKET 0x01
3270
3247#define SFUNCT 0x9f 3271#define SFUNCT 0x9f
3248#define TEST_GROUP 0xf0 3272#define TEST_GROUP 0xf0
3249#define TEST_NUM 0x0f 3273#define TEST_NUM 0x0f
3250 3274
3251#define SGSPLTSTAT1 0x9f
3252#define RXDATABUCKET 0x01
3253
3254#define DF0PCISTAT 0xa0 3275#define DF0PCISTAT 0xa0
3255 3276
3256#define REG0 0xa0 3277#define REG0 0xa0
@@ -3299,10 +3320,10 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3299 3320
3300#define CCSGADDR 0xac 3321#define CCSGADDR 0xac
3301 3322
3302#define CCSCBADDR 0xac
3303
3304#define CCSCBADR_BK 0xac 3323#define CCSCBADR_BK 0xac
3305 3324
3325#define CCSCBADDR 0xac
3326
3306#define CMC_RAMBIST 0xad 3327#define CMC_RAMBIST 0xad
3307#define SG_ELEMENT_SIZE 0x80 3328#define SG_ELEMENT_SIZE 0x80
3308#define SCBRAMBIST_FAIL 0x40 3329#define SCBRAMBIST_FAIL 0x40
@@ -3311,14 +3332,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3311#define CMC_BUFFER_BIST_FAIL 0x02 3332#define CMC_BUFFER_BIST_FAIL 0x02
3312#define CMC_BUFFER_BIST_EN 0x01 3333#define CMC_BUFFER_BIST_EN 0x01
3313 3334
3314#define CCSGCTL 0xad
3315#define CCSGEN 0x0c
3316#define CCSGDONE 0x80
3317#define SG_CACHE_AVAIL 0x10
3318#define CCSGENACK 0x08
3319#define SG_FETCH_REQ 0x02
3320#define CCSGRESET 0x01
3321
3322#define CCSCBCTL 0xad 3335#define CCSCBCTL 0xad
3323#define CCSCBDONE 0x80 3336#define CCSCBDONE 0x80
3324#define ARRDONE 0x40 3337#define ARRDONE 0x40
@@ -3327,6 +3340,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3327#define CCSCBDIR 0x04 3340#define CCSCBDIR 0x04
3328#define CCSCBRESET 0x01 3341#define CCSCBRESET 0x01
3329 3342
3343#define CCSGCTL 0xad
3344#define CCSGEN 0x0c
3345#define CCSGDONE 0x80
3346#define SG_CACHE_AVAIL 0x10
3347#define CCSGENACK 0x08
3348#define SG_FETCH_REQ 0x02
3349#define CCSGRESET 0x01
3350
3330#define CCSGRAM 0xb0 3351#define CCSGRAM 0xb0
3331 3352
3332#define FLEXADR 0xb0 3353#define FLEXADR 0xb0
@@ -3356,8 +3377,8 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3356#define SEEDAT 0xbc 3377#define SEEDAT 0xbc
3357 3378
3358#define SEECTL 0xbe 3379#define SEECTL 0xbe
3359#define SEEOP_EWEN 0x40
3360#define SEEOP_WALL 0x40 3380#define SEEOP_WALL 0x40
3381#define SEEOP_EWEN 0x40
3361#define SEEOP_EWDS 0x40 3382#define SEEOP_EWDS 0x40
3362#define SEEOPCODE 0x70 3383#define SEEOPCODE 0x70
3363#define SEERST 0x02 3384#define SEERST 0x02
@@ -3414,14 +3435,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3414 3435
3415#define WRTBIASCALC 0xc7 3436#define WRTBIASCALC 0xc7
3416 3437
3417#define DFPTRS 0xc8
3418
3419#define RCVRBIASCALC 0xc8 3438#define RCVRBIASCALC 0xc8
3420 3439
3421#define DFBKPTR 0xc9 3440#define DFPTRS 0xc8
3422 3441
3423#define SKEWCALC 0xc9 3442#define SKEWCALC 0xc9
3424 3443
3444#define DFBKPTR 0xc9
3445
3425#define DFDBCTL 0xcb 3446#define DFDBCTL 0xcb
3426#define DFF_CIO_WR_RDY 0x20 3447#define DFF_CIO_WR_RDY 0x20
3427#define DFF_CIO_RD_RDY 0x10 3448#define DFF_CIO_RD_RDY 0x10
@@ -3475,11 +3496,11 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3475 3496
3476#define DINDEX 0xe4 3497#define DINDEX 0xe4
3477 3498
3499#define BRKADDR0 0xe6
3500
3478#define BRKADDR1 0xe6 3501#define BRKADDR1 0xe6
3479#define BRKDIS 0x80 3502#define BRKDIS 0x80
3480 3503
3481#define BRKADDR0 0xe6
3482
3483#define ALLONES 0xe8 3504#define ALLONES 0xe8
3484 3505
3485#define ALLZEROS 0xea 3506#define ALLZEROS 0xea
@@ -3494,14 +3515,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3494 3515
3495#define STACK 0xf2 3516#define STACK 0xf2
3496 3517
3497#define CURADDR 0xf4
3498
3499#define INTVEC1_ADDR 0xf4 3518#define INTVEC1_ADDR 0xf4
3500 3519
3501#define INTVEC2_ADDR 0xf6 3520#define CURADDR 0xf4
3502 3521
3503#define LASTADDR 0xf6 3522#define LASTADDR 0xf6
3504 3523
3524#define INTVEC2_ADDR 0xf6
3525
3505#define LONGJMP_ADDR 0xf8 3526#define LONGJMP_ADDR 0xf8
3506 3527
3507#define ACCUM_SAVE 0xfa 3528#define ACCUM_SAVE 0xfa
@@ -3524,25 +3545,31 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3524 3545
3525#define COMPLETE_DMA_SCB_HEAD 0x12c 3546#define COMPLETE_DMA_SCB_HEAD 0x12c
3526 3547
3527#define QFREEZE_COUNT 0x12e 3548#define COMPLETE_DMA_SCB_TAIL 0x12e
3549
3550#define COMPLETE_ON_QFREEZE_HEAD 0x130
3551
3552#define QFREEZE_COUNT 0x132
3528 3553
3529#define SAVED_MODE 0x130 3554#define KERNEL_QFREEZE_COUNT 0x134
3530 3555
3531#define MSG_OUT 0x131 3556#define SAVED_MODE 0x136
3532 3557
3533#define DMAPARAMS 0x132 3558#define MSG_OUT 0x137
3559
3560#define DMAPARAMS 0x138
3534#define PRELOADEN 0x80 3561#define PRELOADEN 0x80
3535#define WIDEODD 0x40 3562#define WIDEODD 0x40
3536#define SCSIEN 0x20 3563#define SCSIEN 0x20
3537#define SDMAEN 0x10 3564#define SDMAEN 0x10
3538#define SDMAENACK 0x10 3565#define SDMAENACK 0x10
3539#define HDMAENACK 0x08
3540#define HDMAEN 0x08 3566#define HDMAEN 0x08
3567#define HDMAENACK 0x08
3541#define DIRECTION 0x04 3568#define DIRECTION 0x04
3542#define FIFOFLUSH 0x02 3569#define FIFOFLUSH 0x02
3543#define FIFORESET 0x01 3570#define FIFORESET 0x01
3544 3571
3545#define SEQ_FLAGS 0x133 3572#define SEQ_FLAGS 0x139
3546#define NOT_IDENTIFIED 0x80 3573#define NOT_IDENTIFIED 0x80
3547#define NO_CDB_SENT 0x40 3574#define NO_CDB_SENT 0x40
3548#define TARGET_CMD_IS_TAGGED 0x40 3575#define TARGET_CMD_IS_TAGGED 0x40
@@ -3553,11 +3580,11 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3553#define SPHASE_PENDING 0x02 3580#define SPHASE_PENDING 0x02
3554#define NO_DISCONNECT 0x01 3581#define NO_DISCONNECT 0x01
3555 3582
3556#define SAVED_SCSIID 0x134 3583#define SAVED_SCSIID 0x13a
3557 3584
3558#define SAVED_LUN 0x135 3585#define SAVED_LUN 0x13b
3559 3586
3560#define LASTPHASE 0x136 3587#define LASTPHASE 0x13c
3561#define PHASE_MASK 0xe0 3588#define PHASE_MASK 0xe0
3562#define CDI 0x80 3589#define CDI 0x80
3563#define IOI 0x40 3590#define IOI 0x40
@@ -3572,18 +3599,18 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3572#define P_DATAOUT_DT 0x20 3599#define P_DATAOUT_DT 0x20
3573#define P_DATAOUT 0x00 3600#define P_DATAOUT 0x00
3574 3601
3575#define QOUTFIFO_ENTRY_VALID_TAG 0x137 3602#define QOUTFIFO_ENTRY_VALID_TAG 0x13d
3576 3603
3577#define SHARED_DATA_ADDR 0x138 3604#define KERNEL_TQINPOS 0x13e
3578 3605
3579#define QOUTFIFO_NEXT_ADDR 0x13c 3606#define TQINPOS 0x13f
3580 3607
3581#define KERNEL_TQINPOS 0x140 3608#define SHARED_DATA_ADDR 0x140
3582 3609
3583#define TQINPOS 0x141 3610#define QOUTFIFO_NEXT_ADDR 0x144
3584 3611
3585#define ARG_1 0x142 3612#define ARG_1 0x148
3586#define RETURN_1 0x142 3613#define RETURN_1 0x148
3587#define SEND_MSG 0x80 3614#define SEND_MSG 0x80
3588#define SEND_SENSE 0x40 3615#define SEND_SENSE 0x40
3589#define SEND_REJ 0x20 3616#define SEND_REJ 0x20
@@ -3593,12 +3620,12 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3593#define CONT_MSG_LOOP_READ 0x03 3620#define CONT_MSG_LOOP_READ 0x03
3594#define CONT_MSG_LOOP_TARG 0x02 3621#define CONT_MSG_LOOP_TARG 0x02
3595 3622
3596#define ARG_2 0x143 3623#define ARG_2 0x149
3597#define RETURN_2 0x143 3624#define RETURN_2 0x149
3598 3625
3599#define LAST_MSG 0x144 3626#define LAST_MSG 0x14a
3600 3627
3601#define SCSISEQ_TEMPLATE 0x145 3628#define SCSISEQ_TEMPLATE 0x14b
3602#define MANUALCTL 0x40 3629#define MANUALCTL 0x40
3603#define ENSELI 0x20 3630#define ENSELI 0x20
3604#define ENRSELI 0x10 3631#define ENRSELI 0x10
@@ -3606,27 +3633,27 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3606#define ENAUTOATNP 0x02 3633#define ENAUTOATNP 0x02
3607#define ALTSTIM 0x01 3634#define ALTSTIM 0x01
3608 3635
3609#define INITIATOR_TAG 0x146 3636#define INITIATOR_TAG 0x14c
3610 3637
3611#define SEQ_FLAGS2 0x147 3638#define SEQ_FLAGS2 0x14d
3612#define SELECTOUT_QFROZEN 0x04 3639#define SELECTOUT_QFROZEN 0x04
3613#define TARGET_MSG_PENDING 0x02 3640#define TARGET_MSG_PENDING 0x02
3614 3641
3615#define ALLOCFIFO_SCBPTR 0x148 3642#define ALLOCFIFO_SCBPTR 0x14e
3616 3643
3617#define INT_COALESCING_TIMER 0x14a 3644#define INT_COALESCING_TIMER 0x150
3618 3645
3619#define INT_COALESCING_MAXCMDS 0x14c 3646#define INT_COALESCING_MAXCMDS 0x152
3620 3647
3621#define INT_COALESCING_MINCMDS 0x14d 3648#define INT_COALESCING_MINCMDS 0x153
3622 3649
3623#define CMDS_PENDING 0x14e 3650#define CMDS_PENDING 0x154
3624 3651
3625#define INT_COALESCING_CMDCOUNT 0x150 3652#define INT_COALESCING_CMDCOUNT 0x156
3626 3653
3627#define LOCAL_HS_MAILBOX 0x151 3654#define LOCAL_HS_MAILBOX 0x157
3628 3655
3629#define CMDSIZE_TABLE 0x152 3656#define CMDSIZE_TABLE 0x158
3630 3657
3631#define SCB_BASE 0x180 3658#define SCB_BASE 0x180
3632 3659
@@ -3701,6 +3728,16 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3701#define SCB_DISCONNECTED_LISTS 0x1b8 3728#define SCB_DISCONNECTED_LISTS 0x1b8
3702 3729
3703 3730
3731#define AHD_TIMER_MAX_US 0x18ffe7
3732#define AHD_TIMER_MAX_TICKS 0xffff
3733#define AHD_SENSE_BUFSIZE 0x100
3734#define BUS_8_BIT 0x00
3735#define TARGET_CMD_CMPLT 0xfe
3736#define SEEOP_WRAL_ADDR 0x40
3737#define AHD_AMPLITUDE_DEF 0x07
3738#define AHD_PRECOMP_CUTBACK_37 0x07
3739#define AHD_PRECOMP_SHIFT 0x00
3740#define AHD_ANNEXCOL_PRECOMP_SLEW 0x04
3704#define AHD_TIMER_US_PER_TICK 0x19 3741#define AHD_TIMER_US_PER_TICK 0x19
3705#define SCB_TRANSFER_SIZE_FULL_LUN 0x38 3742#define SCB_TRANSFER_SIZE_FULL_LUN 0x38
3706#define STATUS_QUEUE_FULL 0x28 3743#define STATUS_QUEUE_FULL 0x28
@@ -3724,28 +3761,18 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3724#define B_CURRFIFO_0 0x02 3761#define B_CURRFIFO_0 0x02
3725#define LUNLEN_SINGLE_LEVEL_LUN 0x0f 3762#define LUNLEN_SINGLE_LEVEL_LUN 0x0f
3726#define NVRAM_SCB_OFFSET 0x2c 3763#define NVRAM_SCB_OFFSET 0x2c
3727#define AHD_TIMER_MAX_US 0x18ffe7
3728#define AHD_TIMER_MAX_TICKS 0xffff
3729#define STATUS_PKT_SENSE 0xff 3764#define STATUS_PKT_SENSE 0xff
3730#define CMD_GROUP_CODE_SHIFT 0x05 3765#define CMD_GROUP_CODE_SHIFT 0x05
3731#define AHD_SENSE_BUFSIZE 0x100
3732#define MAX_OFFSET_PACED_BUG 0x7f 3766#define MAX_OFFSET_PACED_BUG 0x7f
3733#define BUS_8_BIT 0x00
3734#define STIMESEL_BUG_ADJ 0x08 3767#define STIMESEL_BUG_ADJ 0x08
3735#define STIMESEL_MIN 0x18 3768#define STIMESEL_MIN 0x18
3736#define STIMESEL_SHIFT 0x03 3769#define STIMESEL_SHIFT 0x03
3737#define CCSGRAM_MAXSEGS 0x10 3770#define CCSGRAM_MAXSEGS 0x10
3738#define INVALID_ADDR 0x80 3771#define INVALID_ADDR 0x80
3739#define TARGET_CMD_CMPLT 0xfe
3740#define SEEOP_WRAL_ADDR 0x40
3741#define SEEOP_ERAL_ADDR 0x80 3772#define SEEOP_ERAL_ADDR 0x80
3742#define AHD_AMPLITUDE_DEF 0x07
3743#define AHD_SLEWRATE_DEF_REVB 0x08 3773#define AHD_SLEWRATE_DEF_REVB 0x08
3744#define AHD_PRECOMP_CUTBACK_37 0x07
3745#define AHD_PRECOMP_CUTBACK_17 0x04 3774#define AHD_PRECOMP_CUTBACK_17 0x04
3746#define AHD_PRECOMP_SHIFT 0x00
3747#define AHD_PRECOMP_MASK 0x07 3775#define AHD_PRECOMP_MASK 0x07
3748#define AHD_ANNEXCOL_PRECOMP_SLEW 0x04
3749#define SRC_MODE_SHIFT 0x00 3776#define SRC_MODE_SHIFT 0x00
3750#define PKT_OVERRUN_BUFSIZE 0x200 3777#define PKT_OVERRUN_BUFSIZE 0x200
3751#define SCB_TRANSFER_SIZE_1BYTE_LUN 0x30 3778#define SCB_TRANSFER_SIZE_1BYTE_LUN 0x30
@@ -3761,6 +3788,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3761 3788
3762 3789
3763/* Downloaded Constant Definitions */ 3790/* Downloaded Constant Definitions */
3791#define CACHELINE_MASK 0x07
3764#define SCB_TRANSFER_SIZE 0x06 3792#define SCB_TRANSFER_SIZE 0x06
3765#define PKT_OVERRUN_BUFOFFSET 0x05 3793#define PKT_OVERRUN_BUFOFFSET 0x05
3766#define SG_SIZEOF 0x04 3794#define SG_SIZEOF 0x04
@@ -3768,9 +3796,9 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3768#define SG_PREFETCH_ALIGN_MASK 0x02 3796#define SG_PREFETCH_ALIGN_MASK 0x02
3769#define SG_PREFETCH_CNT_LIMIT 0x01 3797#define SG_PREFETCH_CNT_LIMIT 0x01
3770#define SG_PREFETCH_CNT 0x00 3798#define SG_PREFETCH_CNT 0x00
3771#define DOWNLOAD_CONST_COUNT 0x07 3799#define DOWNLOAD_CONST_COUNT 0x08
3772 3800
3773 3801
3774/* Exported Labels */ 3802/* Exported Labels */
3775#define LABEL_seq_isr 0x269 3803#define LABEL_seq_isr 0x285
3776#define LABEL_timer_isr 0x265 3804#define LABEL_timer_isr 0x281
diff --git a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
index 3098a757e3d7..a4137c985376 100644
--- a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
@@ -2,8 +2,8 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#94 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#118 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#75 $
7 */ 7 */
8 8
9#include "aic79xx_osm.h" 9#include "aic79xx_osm.h"
@@ -172,21 +172,6 @@ ahd_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap)
172 0x0b, regvalue, cur_col, wrap)); 172 0x0b, regvalue, cur_col, wrap));
173} 173}
174 174
175static ahd_reg_parse_entry_t CLRSEQINTSTAT_parse_table[] = {
176 { "CLRSEQ_SPLTINT", 0x01, 0x01 },
177 { "CLRSEQ_PCIINT", 0x02, 0x02 },
178 { "CLRSEQ_SCSIINT", 0x04, 0x04 },
179 { "CLRSEQ_SEQINT", 0x08, 0x08 },
180 { "CLRSEQ_SWTMRTO", 0x10, 0x10 }
181};
182
183int
184ahd_clrseqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
185{
186 return (ahd_print_register(CLRSEQINTSTAT_parse_table, 5, "CLRSEQINTSTAT",
187 0x0c, regvalue, cur_col, wrap));
188}
189
190static ahd_reg_parse_entry_t SEQINTSTAT_parse_table[] = { 175static ahd_reg_parse_entry_t SEQINTSTAT_parse_table[] = {
191 { "SEQ_SPLTINT", 0x01, 0x01 }, 176 { "SEQ_SPLTINT", 0x01, 0x01 },
192 { "SEQ_PCIINT", 0x02, 0x02 }, 177 { "SEQ_PCIINT", 0x02, 0x02 },
@@ -202,6 +187,21 @@ ahd_seqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
202 0x0c, regvalue, cur_col, wrap)); 187 0x0c, regvalue, cur_col, wrap));
203} 188}
204 189
190static ahd_reg_parse_entry_t CLRSEQINTSTAT_parse_table[] = {
191 { "CLRSEQ_SPLTINT", 0x01, 0x01 },
192 { "CLRSEQ_PCIINT", 0x02, 0x02 },
193 { "CLRSEQ_SCSIINT", 0x04, 0x04 },
194 { "CLRSEQ_SEQINT", 0x08, 0x08 },
195 { "CLRSEQ_SWTMRTO", 0x10, 0x10 }
196};
197
198int
199ahd_clrseqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
200{
201 return (ahd_print_register(CLRSEQINTSTAT_parse_table, 5, "CLRSEQINTSTAT",
202 0x0c, regvalue, cur_col, wrap));
203}
204
205int 205int
206ahd_swtimer_print(u_int regvalue, u_int *cur_col, u_int wrap) 206ahd_swtimer_print(u_int regvalue, u_int *cur_col, u_int wrap)
207{ 207{
@@ -670,16 +670,16 @@ ahd_sxfrctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
670} 670}
671 671
672int 672int
673ahd_businitid_print(u_int regvalue, u_int *cur_col, u_int wrap) 673ahd_dlcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
674{ 674{
675 return (ahd_print_register(NULL, 0, "BUSINITID", 675 return (ahd_print_register(NULL, 0, "DLCOUNT",
676 0x3c, regvalue, cur_col, wrap)); 676 0x3c, regvalue, cur_col, wrap));
677} 677}
678 678
679int 679int
680ahd_dlcount_print(u_int regvalue, u_int *cur_col, u_int wrap) 680ahd_businitid_print(u_int regvalue, u_int *cur_col, u_int wrap)
681{ 681{
682 return (ahd_print_register(NULL, 0, "DLCOUNT", 682 return (ahd_print_register(NULL, 0, "BUSINITID",
683 0x3c, regvalue, cur_col, wrap)); 683 0x3c, regvalue, cur_col, wrap));
684} 684}
685 685
@@ -859,21 +859,6 @@ ahd_selid_print(u_int regvalue, u_int *cur_col, u_int wrap)
859 0x49, regvalue, cur_col, wrap)); 859 0x49, regvalue, cur_col, wrap));
860} 860}
861 861
862static ahd_reg_parse_entry_t SBLKCTL_parse_table[] = {
863 { "SELWIDE", 0x02, 0x02 },
864 { "ENAB20", 0x04, 0x04 },
865 { "ENAB40", 0x08, 0x08 },
866 { "DIAGLEDON", 0x40, 0x40 },
867 { "DIAGLEDEN", 0x80, 0x80 }
868};
869
870int
871ahd_sblkctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
872{
873 return (ahd_print_register(SBLKCTL_parse_table, 5, "SBLKCTL",
874 0x4a, regvalue, cur_col, wrap));
875}
876
877static ahd_reg_parse_entry_t OPTIONMODE_parse_table[] = { 862static ahd_reg_parse_entry_t OPTIONMODE_parse_table[] = {
878 { "AUTO_MSGOUT_DE", 0x02, 0x02 }, 863 { "AUTO_MSGOUT_DE", 0x02, 0x02 },
879 { "ENDGFORMCHK", 0x04, 0x04 }, 864 { "ENDGFORMCHK", 0x04, 0x04 },
@@ -891,22 +876,19 @@ ahd_optionmode_print(u_int regvalue, u_int *cur_col, u_int wrap)
891 0x4a, regvalue, cur_col, wrap)); 876 0x4a, regvalue, cur_col, wrap));
892} 877}
893 878
894static ahd_reg_parse_entry_t SSTAT0_parse_table[] = { 879static ahd_reg_parse_entry_t SBLKCTL_parse_table[] = {
895 { "ARBDO", 0x01, 0x01 }, 880 { "SELWIDE", 0x02, 0x02 },
896 { "SPIORDY", 0x02, 0x02 }, 881 { "ENAB20", 0x04, 0x04 },
897 { "OVERRUN", 0x04, 0x04 }, 882 { "ENAB40", 0x08, 0x08 },
898 { "IOERR", 0x08, 0x08 }, 883 { "DIAGLEDON", 0x40, 0x40 },
899 { "SELINGO", 0x10, 0x10 }, 884 { "DIAGLEDEN", 0x80, 0x80 }
900 { "SELDI", 0x20, 0x20 },
901 { "SELDO", 0x40, 0x40 },
902 { "TARGET", 0x80, 0x80 }
903}; 885};
904 886
905int 887int
906ahd_sstat0_print(u_int regvalue, u_int *cur_col, u_int wrap) 888ahd_sblkctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
907{ 889{
908 return (ahd_print_register(SSTAT0_parse_table, 8, "SSTAT0", 890 return (ahd_print_register(SBLKCTL_parse_table, 5, "SBLKCTL",
909 0x4b, regvalue, cur_col, wrap)); 891 0x4a, regvalue, cur_col, wrap));
910} 892}
911 893
912static ahd_reg_parse_entry_t CLRSINT0_parse_table[] = { 894static ahd_reg_parse_entry_t CLRSINT0_parse_table[] = {
@@ -926,6 +908,24 @@ ahd_clrsint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
926 0x4b, regvalue, cur_col, wrap)); 908 0x4b, regvalue, cur_col, wrap));
927} 909}
928 910
911static ahd_reg_parse_entry_t SSTAT0_parse_table[] = {
912 { "ARBDO", 0x01, 0x01 },
913 { "SPIORDY", 0x02, 0x02 },
914 { "OVERRUN", 0x04, 0x04 },
915 { "IOERR", 0x08, 0x08 },
916 { "SELINGO", 0x10, 0x10 },
917 { "SELDI", 0x20, 0x20 },
918 { "SELDO", 0x40, 0x40 },
919 { "TARGET", 0x80, 0x80 }
920};
921
922int
923ahd_sstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
924{
925 return (ahd_print_register(SSTAT0_parse_table, 8, "SSTAT0",
926 0x4b, regvalue, cur_col, wrap));
927}
928
929static ahd_reg_parse_entry_t SIMODE0_parse_table[] = { 929static ahd_reg_parse_entry_t SIMODE0_parse_table[] = {
930 { "ENARBDO", 0x01, 0x01 }, 930 { "ENARBDO", 0x01, 0x01 },
931 { "ENSPIORDY", 0x02, 0x02 }, 931 { "ENSPIORDY", 0x02, 0x02 },
@@ -998,30 +998,30 @@ ahd_sstat2_print(u_int regvalue, u_int *cur_col, u_int wrap)
998 0x4d, regvalue, cur_col, wrap)); 998 0x4d, regvalue, cur_col, wrap));
999} 999}
1000 1000
1001static ahd_reg_parse_entry_t CLRSINT2_parse_table[] = { 1001static ahd_reg_parse_entry_t SIMODE2_parse_table[] = {
1002 { "CLRDMADONE", 0x01, 0x01 }, 1002 { "ENDMADONE", 0x01, 0x01 },
1003 { "CLRSDONE", 0x02, 0x02 }, 1003 { "ENSDONE", 0x02, 0x02 },
1004 { "CLRWIDE_RES", 0x04, 0x04 }, 1004 { "ENWIDE_RES", 0x04, 0x04 }
1005 { "CLRNONPACKREQ", 0x20, 0x20 }
1006}; 1005};
1007 1006
1008int 1007int
1009ahd_clrsint2_print(u_int regvalue, u_int *cur_col, u_int wrap) 1008ahd_simode2_print(u_int regvalue, u_int *cur_col, u_int wrap)
1010{ 1009{
1011 return (ahd_print_register(CLRSINT2_parse_table, 4, "CLRSINT2", 1010 return (ahd_print_register(SIMODE2_parse_table, 3, "SIMODE2",
1012 0x4d, regvalue, cur_col, wrap)); 1011 0x4d, regvalue, cur_col, wrap));
1013} 1012}
1014 1013
1015static ahd_reg_parse_entry_t SIMODE2_parse_table[] = { 1014static ahd_reg_parse_entry_t CLRSINT2_parse_table[] = {
1016 { "ENDMADONE", 0x01, 0x01 }, 1015 { "CLRDMADONE", 0x01, 0x01 },
1017 { "ENSDONE", 0x02, 0x02 }, 1016 { "CLRSDONE", 0x02, 0x02 },
1018 { "ENWIDE_RES", 0x04, 0x04 } 1017 { "CLRWIDE_RES", 0x04, 0x04 },
1018 { "CLRNONPACKREQ", 0x20, 0x20 }
1019}; 1019};
1020 1020
1021int 1021int
1022ahd_simode2_print(u_int regvalue, u_int *cur_col, u_int wrap) 1022ahd_clrsint2_print(u_int regvalue, u_int *cur_col, u_int wrap)
1023{ 1023{
1024 return (ahd_print_register(SIMODE2_parse_table, 3, "SIMODE2", 1024 return (ahd_print_register(CLRSINT2_parse_table, 4, "CLRSINT2",
1025 0x4d, regvalue, cur_col, wrap)); 1025 0x4d, regvalue, cur_col, wrap));
1026} 1026}
1027 1027
@@ -1220,21 +1220,6 @@ ahd_clrsint3_print(u_int regvalue, u_int *cur_col, u_int wrap)
1220 0x53, regvalue, cur_col, wrap)); 1220 0x53, regvalue, cur_col, wrap));
1221} 1221}
1222 1222
1223static ahd_reg_parse_entry_t LQOMODE0_parse_table[] = {
1224 { "ENLQOTCRC", 0x01, 0x01 },
1225 { "ENLQOATNPKT", 0x02, 0x02 },
1226 { "ENLQOATNLQ", 0x04, 0x04 },
1227 { "ENLQOSTOPT2", 0x08, 0x08 },
1228 { "ENLQOTARGSCBPERR", 0x10, 0x10 }
1229};
1230
1231int
1232ahd_lqomode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
1233{
1234 return (ahd_print_register(LQOMODE0_parse_table, 5, "LQOMODE0",
1235 0x54, regvalue, cur_col, wrap));
1236}
1237
1238static ahd_reg_parse_entry_t LQOSTAT0_parse_table[] = { 1223static ahd_reg_parse_entry_t LQOSTAT0_parse_table[] = {
1239 { "LQOTCRC", 0x01, 0x01 }, 1224 { "LQOTCRC", 0x01, 0x01 },
1240 { "LQOATNPKT", 0x02, 0x02 }, 1225 { "LQOATNPKT", 0x02, 0x02 },
@@ -1265,6 +1250,36 @@ ahd_clrlqoint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
1265 0x54, regvalue, cur_col, wrap)); 1250 0x54, regvalue, cur_col, wrap));
1266} 1251}
1267 1252
1253static ahd_reg_parse_entry_t LQOMODE0_parse_table[] = {
1254 { "ENLQOTCRC", 0x01, 0x01 },
1255 { "ENLQOATNPKT", 0x02, 0x02 },
1256 { "ENLQOATNLQ", 0x04, 0x04 },
1257 { "ENLQOSTOPT2", 0x08, 0x08 },
1258 { "ENLQOTARGSCBPERR", 0x10, 0x10 }
1259};
1260
1261int
1262ahd_lqomode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
1263{
1264 return (ahd_print_register(LQOMODE0_parse_table, 5, "LQOMODE0",
1265 0x54, regvalue, cur_col, wrap));
1266}
1267
1268static ahd_reg_parse_entry_t LQOMODE1_parse_table[] = {
1269 { "ENLQOPHACHGINPKT", 0x01, 0x01 },
1270 { "ENLQOBUSFREE", 0x02, 0x02 },
1271 { "ENLQOBADQAS", 0x04, 0x04 },
1272 { "ENLQOSTOPI2", 0x08, 0x08 },
1273 { "ENLQOINITSCBPERR", 0x10, 0x10 }
1274};
1275
1276int
1277ahd_lqomode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1278{
1279 return (ahd_print_register(LQOMODE1_parse_table, 5, "LQOMODE1",
1280 0x55, regvalue, cur_col, wrap));
1281}
1282
1268static ahd_reg_parse_entry_t LQOSTAT1_parse_table[] = { 1283static ahd_reg_parse_entry_t LQOSTAT1_parse_table[] = {
1269 { "LQOPHACHGINPKT", 0x01, 0x01 }, 1284 { "LQOPHACHGINPKT", 0x01, 0x01 },
1270 { "LQOBUSFREE", 0x02, 0x02 }, 1285 { "LQOBUSFREE", 0x02, 0x02 },
@@ -1295,21 +1310,6 @@ ahd_clrlqoint1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1295 0x55, regvalue, cur_col, wrap)); 1310 0x55, regvalue, cur_col, wrap));
1296} 1311}
1297 1312
1298static ahd_reg_parse_entry_t LQOMODE1_parse_table[] = {
1299 { "ENLQOPHACHGINPKT", 0x01, 0x01 },
1300 { "ENLQOBUSFREE", 0x02, 0x02 },
1301 { "ENLQOBADQAS", 0x04, 0x04 },
1302 { "ENLQOSTOPI2", 0x08, 0x08 },
1303 { "ENLQOINITSCBPERR", 0x10, 0x10 }
1304};
1305
1306int
1307ahd_lqomode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1308{
1309 return (ahd_print_register(LQOMODE1_parse_table, 5, "LQOMODE1",
1310 0x55, regvalue, cur_col, wrap));
1311}
1312
1313static ahd_reg_parse_entry_t LQOSTAT2_parse_table[] = { 1313static ahd_reg_parse_entry_t LQOSTAT2_parse_table[] = {
1314 { "LQOSTOP0", 0x01, 0x01 }, 1314 { "LQOSTOP0", 0x01, 0x01 },
1315 { "LQOPHACHGOUTPKT", 0x02, 0x02 }, 1315 { "LQOPHACHGOUTPKT", 0x02, 0x02 },
@@ -1594,6 +1594,13 @@ ahd_annexcol_print(u_int regvalue, u_int *cur_col, u_int wrap)
1594 0x65, regvalue, cur_col, wrap)); 1594 0x65, regvalue, cur_col, wrap));
1595} 1595}
1596 1596
1597int
1598ahd_annexdat_print(u_int regvalue, u_int *cur_col, u_int wrap)
1599{
1600 return (ahd_print_register(NULL, 0, "ANNEXDAT",
1601 0x66, regvalue, cur_col, wrap));
1602}
1603
1597static ahd_reg_parse_entry_t SCSCHKN_parse_table[] = { 1604static ahd_reg_parse_entry_t SCSCHKN_parse_table[] = {
1598 { "LSTSGCLRDIS", 0x01, 0x01 }, 1605 { "LSTSGCLRDIS", 0x01, 0x01 },
1599 { "SHVALIDSTDIS", 0x02, 0x02 }, 1606 { "SHVALIDSTDIS", 0x02, 0x02 },
@@ -1612,13 +1619,6 @@ ahd_scschkn_print(u_int regvalue, u_int *cur_col, u_int wrap)
1612} 1619}
1613 1620
1614int 1621int
1615ahd_annexdat_print(u_int regvalue, u_int *cur_col, u_int wrap)
1616{
1617 return (ahd_print_register(NULL, 0, "ANNEXDAT",
1618 0x66, regvalue, cur_col, wrap));
1619}
1620
1621int
1622ahd_iownid_print(u_int regvalue, u_int *cur_col, u_int wrap) 1622ahd_iownid_print(u_int regvalue, u_int *cur_col, u_int wrap)
1623{ 1623{
1624 return (ahd_print_register(NULL, 0, "IOWNID", 1624 return (ahd_print_register(NULL, 0, "IOWNID",
@@ -1728,16 +1728,16 @@ ahd_pll400ctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1728} 1728}
1729 1729
1730int 1730int
1731ahd_pll400cnt0_print(u_int regvalue, u_int *cur_col, u_int wrap) 1731ahd_unfairness_print(u_int regvalue, u_int *cur_col, u_int wrap)
1732{ 1732{
1733 return (ahd_print_register(NULL, 0, "PLL400CNT0", 1733 return (ahd_print_register(NULL, 0, "UNFAIRNESS",
1734 0x6e, regvalue, cur_col, wrap)); 1734 0x6e, regvalue, cur_col, wrap));
1735} 1735}
1736 1736
1737int 1737int
1738ahd_unfairness_print(u_int regvalue, u_int *cur_col, u_int wrap) 1738ahd_pll400cnt0_print(u_int regvalue, u_int *cur_col, u_int wrap)
1739{ 1739{
1740 return (ahd_print_register(NULL, 0, "UNFAIRNESS", 1740 return (ahd_print_register(NULL, 0, "PLL400CNT0",
1741 0x6e, regvalue, cur_col, wrap)); 1741 0x6e, regvalue, cur_col, wrap));
1742} 1742}
1743 1743
@@ -1788,30 +1788,30 @@ ahd_hodmaen_print(u_int regvalue, u_int *cur_col, u_int wrap)
1788} 1788}
1789 1789
1790int 1790int
1791ahd_sghaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) 1791ahd_scbhaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
1792{ 1792{
1793 return (ahd_print_register(NULL, 0, "SGHADDR", 1793 return (ahd_print_register(NULL, 0, "SCBHADDR",
1794 0x7c, regvalue, cur_col, wrap)); 1794 0x7c, regvalue, cur_col, wrap));
1795} 1795}
1796 1796
1797int 1797int
1798ahd_scbhaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) 1798ahd_sghaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
1799{ 1799{
1800 return (ahd_print_register(NULL, 0, "SCBHADDR", 1800 return (ahd_print_register(NULL, 0, "SGHADDR",
1801 0x7c, regvalue, cur_col, wrap)); 1801 0x7c, regvalue, cur_col, wrap));
1802} 1802}
1803 1803
1804int 1804int
1805ahd_sghcnt_print(u_int regvalue, u_int *cur_col, u_int wrap) 1805ahd_scbhcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
1806{ 1806{
1807 return (ahd_print_register(NULL, 0, "SGHCNT", 1807 return (ahd_print_register(NULL, 0, "SCBHCNT",
1808 0x84, regvalue, cur_col, wrap)); 1808 0x84, regvalue, cur_col, wrap));
1809} 1809}
1810 1810
1811int 1811int
1812ahd_scbhcnt_print(u_int regvalue, u_int *cur_col, u_int wrap) 1812ahd_sghcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
1813{ 1813{
1814 return (ahd_print_register(NULL, 0, "SCBHCNT", 1814 return (ahd_print_register(NULL, 0, "SGHCNT",
1815 0x84, regvalue, cur_col, wrap)); 1815 0x84, regvalue, cur_col, wrap));
1816} 1816}
1817 1817
@@ -1950,25 +1950,25 @@ ahd_nsenable_print(u_int regvalue, u_int *cur_col, u_int wrap)
1950 0x91, regvalue, cur_col, wrap)); 1950 0x91, regvalue, cur_col, wrap));
1951} 1951}
1952 1952
1953static ahd_reg_parse_entry_t DCHRXMSG1_parse_table[] = { 1953static ahd_reg_parse_entry_t CMCRXMSG1_parse_table[] = {
1954 { "CBNUM", 0xff, 0xff } 1954 { "CBNUM", 0xff, 0xff }
1955}; 1955};
1956 1956
1957int 1957int
1958ahd_dchrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap) 1958ahd_cmcrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1959{ 1959{
1960 return (ahd_print_register(DCHRXMSG1_parse_table, 1, "DCHRXMSG1", 1960 return (ahd_print_register(CMCRXMSG1_parse_table, 1, "CMCRXMSG1",
1961 0x91, regvalue, cur_col, wrap)); 1961 0x91, regvalue, cur_col, wrap));
1962} 1962}
1963 1963
1964static ahd_reg_parse_entry_t CMCRXMSG1_parse_table[] = { 1964static ahd_reg_parse_entry_t DCHRXMSG1_parse_table[] = {
1965 { "CBNUM", 0xff, 0xff } 1965 { "CBNUM", 0xff, 0xff }
1966}; 1966};
1967 1967
1968int 1968int
1969ahd_cmcrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap) 1969ahd_dchrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
1970{ 1970{
1971 return (ahd_print_register(CMCRXMSG1_parse_table, 1, "CMCRXMSG1", 1971 return (ahd_print_register(DCHRXMSG1_parse_table, 1, "DCHRXMSG1",
1972 0x91, regvalue, cur_col, wrap)); 1972 0x91, regvalue, cur_col, wrap));
1973} 1973}
1974 1974
@@ -1983,17 +1983,6 @@ ahd_dchrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
1983 0x92, regvalue, cur_col, wrap)); 1983 0x92, regvalue, cur_col, wrap));
1984} 1984}
1985 1985
1986static ahd_reg_parse_entry_t OVLYRXMSG2_parse_table[] = {
1987 { "MINDEX", 0xff, 0xff }
1988};
1989
1990int
1991ahd_ovlyrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
1992{
1993 return (ahd_print_register(OVLYRXMSG2_parse_table, 1, "OVLYRXMSG2",
1994 0x92, regvalue, cur_col, wrap));
1995}
1996
1997static ahd_reg_parse_entry_t CMCRXMSG2_parse_table[] = { 1986static ahd_reg_parse_entry_t CMCRXMSG2_parse_table[] = {
1998 { "MINDEX", 0xff, 0xff } 1987 { "MINDEX", 0xff, 0xff }
1999}; 1988};
@@ -2012,6 +2001,17 @@ ahd_ost_print(u_int regvalue, u_int *cur_col, u_int wrap)
2012 0x92, regvalue, cur_col, wrap)); 2001 0x92, regvalue, cur_col, wrap));
2013} 2002}
2014 2003
2004static ahd_reg_parse_entry_t OVLYRXMSG2_parse_table[] = {
2005 { "MINDEX", 0xff, 0xff }
2006};
2007
2008int
2009ahd_ovlyrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
2010{
2011 return (ahd_print_register(OVLYRXMSG2_parse_table, 1, "OVLYRXMSG2",
2012 0x92, regvalue, cur_col, wrap));
2013}
2014
2015static ahd_reg_parse_entry_t DCHRXMSG3_parse_table[] = { 2015static ahd_reg_parse_entry_t DCHRXMSG3_parse_table[] = {
2016 { "MCLASS", 0x0f, 0x0f } 2016 { "MCLASS", 0x0f, 0x0f }
2017}; 2017};
@@ -2023,6 +2023,17 @@ ahd_dchrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
2023 0x93, regvalue, cur_col, wrap)); 2023 0x93, regvalue, cur_col, wrap));
2024} 2024}
2025 2025
2026static ahd_reg_parse_entry_t OVLYRXMSG3_parse_table[] = {
2027 { "MCLASS", 0x0f, 0x0f }
2028};
2029
2030int
2031ahd_ovlyrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
2032{
2033 return (ahd_print_register(OVLYRXMSG3_parse_table, 1, "OVLYRXMSG3",
2034 0x93, regvalue, cur_col, wrap));
2035}
2036
2026static ahd_reg_parse_entry_t CMCRXMSG3_parse_table[] = { 2037static ahd_reg_parse_entry_t CMCRXMSG3_parse_table[] = {
2027 { "MCLASS", 0x0f, 0x0f } 2038 { "MCLASS", 0x0f, 0x0f }
2028}; 2039};
@@ -2051,17 +2062,6 @@ ahd_pcixctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
2051 0x93, regvalue, cur_col, wrap)); 2062 0x93, regvalue, cur_col, wrap));
2052} 2063}
2053 2064
2054static ahd_reg_parse_entry_t OVLYRXMSG3_parse_table[] = {
2055 { "MCLASS", 0x0f, 0x0f }
2056};
2057
2058int
2059ahd_ovlyrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
2060{
2061 return (ahd_print_register(OVLYRXMSG3_parse_table, 1, "OVLYRXMSG3",
2062 0x93, regvalue, cur_col, wrap));
2063}
2064
2065int 2065int
2066ahd_ovlyseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap) 2066ahd_ovlyseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
2067{ 2067{
@@ -2070,16 +2070,16 @@ ahd_ovlyseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
2070} 2070}
2071 2071
2072int 2072int
2073ahd_cmcseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap) 2073ahd_dchseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
2074{ 2074{
2075 return (ahd_print_register(NULL, 0, "CMCSEQBCNT", 2075 return (ahd_print_register(NULL, 0, "DCHSEQBCNT",
2076 0x94, regvalue, cur_col, wrap)); 2076 0x94, regvalue, cur_col, wrap));
2077} 2077}
2078 2078
2079int 2079int
2080ahd_dchseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap) 2080ahd_cmcseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
2081{ 2081{
2082 return (ahd_print_register(NULL, 0, "DCHSEQBCNT", 2082 return (ahd_print_register(NULL, 0, "CMCSEQBCNT",
2083 0x94, regvalue, cur_col, wrap)); 2083 0x94, regvalue, cur_col, wrap));
2084} 2084}
2085 2085
@@ -2101,7 +2101,7 @@ ahd_cmcspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
2101 0x96, regvalue, cur_col, wrap)); 2101 0x96, regvalue, cur_col, wrap));
2102} 2102}
2103 2103
2104static ahd_reg_parse_entry_t OVLYSPLTSTAT0_parse_table[] = { 2104static ahd_reg_parse_entry_t DCHSPLTSTAT0_parse_table[] = {
2105 { "RXSPLTRSP", 0x01, 0x01 }, 2105 { "RXSPLTRSP", 0x01, 0x01 },
2106 { "RXSCEMSG", 0x02, 0x02 }, 2106 { "RXSCEMSG", 0x02, 0x02 },
2107 { "RXOVRUN", 0x04, 0x04 }, 2107 { "RXOVRUN", 0x04, 0x04 },
@@ -2113,13 +2113,13 @@ static ahd_reg_parse_entry_t OVLYSPLTSTAT0_parse_table[] = {
2113}; 2113};
2114 2114
2115int 2115int
2116ahd_ovlyspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap) 2116ahd_dchspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
2117{ 2117{
2118 return (ahd_print_register(OVLYSPLTSTAT0_parse_table, 8, "OVLYSPLTSTAT0", 2118 return (ahd_print_register(DCHSPLTSTAT0_parse_table, 8, "DCHSPLTSTAT0",
2119 0x96, regvalue, cur_col, wrap)); 2119 0x96, regvalue, cur_col, wrap));
2120} 2120}
2121 2121
2122static ahd_reg_parse_entry_t DCHSPLTSTAT0_parse_table[] = { 2122static ahd_reg_parse_entry_t OVLYSPLTSTAT0_parse_table[] = {
2123 { "RXSPLTRSP", 0x01, 0x01 }, 2123 { "RXSPLTRSP", 0x01, 0x01 },
2124 { "RXSCEMSG", 0x02, 0x02 }, 2124 { "RXSCEMSG", 0x02, 0x02 },
2125 { "RXOVRUN", 0x04, 0x04 }, 2125 { "RXOVRUN", 0x04, 0x04 },
@@ -2131,42 +2131,42 @@ static ahd_reg_parse_entry_t DCHSPLTSTAT0_parse_table[] = {
2131}; 2131};
2132 2132
2133int 2133int
2134ahd_dchspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap) 2134ahd_ovlyspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
2135{ 2135{
2136 return (ahd_print_register(DCHSPLTSTAT0_parse_table, 8, "DCHSPLTSTAT0", 2136 return (ahd_print_register(OVLYSPLTSTAT0_parse_table, 8, "OVLYSPLTSTAT0",
2137 0x96, regvalue, cur_col, wrap)); 2137 0x96, regvalue, cur_col, wrap));
2138} 2138}
2139 2139
2140static ahd_reg_parse_entry_t DCHSPLTSTAT1_parse_table[] = { 2140static ahd_reg_parse_entry_t CMCSPLTSTAT1_parse_table[] = {
2141 { "RXDATABUCKET", 0x01, 0x01 } 2141 { "RXDATABUCKET", 0x01, 0x01 }
2142}; 2142};
2143 2143
2144int 2144int
2145ahd_dchspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap) 2145ahd_cmcspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
2146{ 2146{
2147 return (ahd_print_register(DCHSPLTSTAT1_parse_table, 1, "DCHSPLTSTAT1", 2147 return (ahd_print_register(CMCSPLTSTAT1_parse_table, 1, "CMCSPLTSTAT1",
2148 0x97, regvalue, cur_col, wrap)); 2148 0x97, regvalue, cur_col, wrap));
2149} 2149}
2150 2150
2151static ahd_reg_parse_entry_t CMCSPLTSTAT1_parse_table[] = { 2151static ahd_reg_parse_entry_t OVLYSPLTSTAT1_parse_table[] = {
2152 { "RXDATABUCKET", 0x01, 0x01 } 2152 { "RXDATABUCKET", 0x01, 0x01 }
2153}; 2153};
2154 2154
2155int 2155int
2156ahd_cmcspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap) 2156ahd_ovlyspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
2157{ 2157{
2158 return (ahd_print_register(CMCSPLTSTAT1_parse_table, 1, "CMCSPLTSTAT1", 2158 return (ahd_print_register(OVLYSPLTSTAT1_parse_table, 1, "OVLYSPLTSTAT1",
2159 0x97, regvalue, cur_col, wrap)); 2159 0x97, regvalue, cur_col, wrap));
2160} 2160}
2161 2161
2162static ahd_reg_parse_entry_t OVLYSPLTSTAT1_parse_table[] = { 2162static ahd_reg_parse_entry_t DCHSPLTSTAT1_parse_table[] = {
2163 { "RXDATABUCKET", 0x01, 0x01 } 2163 { "RXDATABUCKET", 0x01, 0x01 }
2164}; 2164};
2165 2165
2166int 2166int
2167ahd_ovlyspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap) 2167ahd_dchspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
2168{ 2168{
2169 return (ahd_print_register(OVLYSPLTSTAT1_parse_table, 1, "OVLYSPLTSTAT1", 2169 return (ahd_print_register(DCHSPLTSTAT1_parse_table, 1, "DCHSPLTSTAT1",
2170 0x97, regvalue, cur_col, wrap)); 2170 0x97, regvalue, cur_col, wrap));
2171} 2171}
2172 2172
@@ -2320,26 +2320,26 @@ ahd_sgspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
2320 0x9e, regvalue, cur_col, wrap)); 2320 0x9e, regvalue, cur_col, wrap));
2321} 2321}
2322 2322
2323static ahd_reg_parse_entry_t SFUNCT_parse_table[] = { 2323static ahd_reg_parse_entry_t SGSPLTSTAT1_parse_table[] = {
2324 { "TEST_NUM", 0x0f, 0x0f }, 2324 { "RXDATABUCKET", 0x01, 0x01 }
2325 { "TEST_GROUP", 0xf0, 0xf0 }
2326}; 2325};
2327 2326
2328int 2327int
2329ahd_sfunct_print(u_int regvalue, u_int *cur_col, u_int wrap) 2328ahd_sgspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
2330{ 2329{
2331 return (ahd_print_register(SFUNCT_parse_table, 2, "SFUNCT", 2330 return (ahd_print_register(SGSPLTSTAT1_parse_table, 1, "SGSPLTSTAT1",
2332 0x9f, regvalue, cur_col, wrap)); 2331 0x9f, regvalue, cur_col, wrap));
2333} 2332}
2334 2333
2335static ahd_reg_parse_entry_t SGSPLTSTAT1_parse_table[] = { 2334static ahd_reg_parse_entry_t SFUNCT_parse_table[] = {
2336 { "RXDATABUCKET", 0x01, 0x01 } 2335 { "TEST_NUM", 0x0f, 0x0f },
2336 { "TEST_GROUP", 0xf0, 0xf0 }
2337}; 2337};
2338 2338
2339int 2339int
2340ahd_sgspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap) 2340ahd_sfunct_print(u_int regvalue, u_int *cur_col, u_int wrap)
2341{ 2341{
2342 return (ahd_print_register(SGSPLTSTAT1_parse_table, 1, "SGSPLTSTAT1", 2342 return (ahd_print_register(SFUNCT_parse_table, 2, "SFUNCT",
2343 0x9f, regvalue, cur_col, wrap)); 2343 0x9f, regvalue, cur_col, wrap));
2344} 2344}
2345 2345
@@ -2537,16 +2537,16 @@ ahd_ccsgaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
2537} 2537}
2538 2538
2539int 2539int
2540ahd_ccscbaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) 2540ahd_ccscbadr_bk_print(u_int regvalue, u_int *cur_col, u_int wrap)
2541{ 2541{
2542 return (ahd_print_register(NULL, 0, "CCSCBADDR", 2542 return (ahd_print_register(NULL, 0, "CCSCBADR_BK",
2543 0xac, regvalue, cur_col, wrap)); 2543 0xac, regvalue, cur_col, wrap));
2544} 2544}
2545 2545
2546int 2546int
2547ahd_ccscbadr_bk_print(u_int regvalue, u_int *cur_col, u_int wrap) 2547ahd_ccscbaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
2548{ 2548{
2549 return (ahd_print_register(NULL, 0, "CCSCBADR_BK", 2549 return (ahd_print_register(NULL, 0, "CCSCBADDR",
2550 0xac, regvalue, cur_col, wrap)); 2550 0xac, regvalue, cur_col, wrap));
2551} 2551}
2552 2552
@@ -2566,22 +2566,6 @@ ahd_cmc_rambist_print(u_int regvalue, u_int *cur_col, u_int wrap)
2566 0xad, regvalue, cur_col, wrap)); 2566 0xad, regvalue, cur_col, wrap));
2567} 2567}
2568 2568
2569static ahd_reg_parse_entry_t CCSGCTL_parse_table[] = {
2570 { "CCSGRESET", 0x01, 0x01 },
2571 { "SG_FETCH_REQ", 0x02, 0x02 },
2572 { "CCSGENACK", 0x08, 0x08 },
2573 { "SG_CACHE_AVAIL", 0x10, 0x10 },
2574 { "CCSGDONE", 0x80, 0x80 },
2575 { "CCSGEN", 0x0c, 0x0c }
2576};
2577
2578int
2579ahd_ccsgctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
2580{
2581 return (ahd_print_register(CCSGCTL_parse_table, 6, "CCSGCTL",
2582 0xad, regvalue, cur_col, wrap));
2583}
2584
2585static ahd_reg_parse_entry_t CCSCBCTL_parse_table[] = { 2569static ahd_reg_parse_entry_t CCSCBCTL_parse_table[] = {
2586 { "CCSCBRESET", 0x01, 0x01 }, 2570 { "CCSCBRESET", 0x01, 0x01 },
2587 { "CCSCBDIR", 0x04, 0x04 }, 2571 { "CCSCBDIR", 0x04, 0x04 },
@@ -2598,6 +2582,22 @@ ahd_ccscbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
2598 0xad, regvalue, cur_col, wrap)); 2582 0xad, regvalue, cur_col, wrap));
2599} 2583}
2600 2584
2585static ahd_reg_parse_entry_t CCSGCTL_parse_table[] = {
2586 { "CCSGRESET", 0x01, 0x01 },
2587 { "SG_FETCH_REQ", 0x02, 0x02 },
2588 { "CCSGENACK", 0x08, 0x08 },
2589 { "SG_CACHE_AVAIL", 0x10, 0x10 },
2590 { "CCSGDONE", 0x80, 0x80 },
2591 { "CCSGEN", 0x0c, 0x0c }
2592};
2593
2594int
2595ahd_ccsgctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
2596{
2597 return (ahd_print_register(CCSGCTL_parse_table, 6, "CCSGCTL",
2598 0xad, regvalue, cur_col, wrap));
2599}
2600
2601int 2601int
2602ahd_ccsgram_print(u_int regvalue, u_int *cur_col, u_int wrap) 2602ahd_ccsgram_print(u_int regvalue, u_int *cur_col, u_int wrap)
2603{ 2603{
@@ -2841,30 +2841,30 @@ ahd_wrtbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
2841} 2841}
2842 2842
2843int 2843int
2844ahd_dfptrs_print(u_int regvalue, u_int *cur_col, u_int wrap) 2844ahd_rcvrbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
2845{ 2845{
2846 return (ahd_print_register(NULL, 0, "DFPTRS", 2846 return (ahd_print_register(NULL, 0, "RCVRBIASCALC",
2847 0xc8, regvalue, cur_col, wrap)); 2847 0xc8, regvalue, cur_col, wrap));
2848} 2848}
2849 2849
2850int 2850int
2851ahd_rcvrbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap) 2851ahd_dfptrs_print(u_int regvalue, u_int *cur_col, u_int wrap)
2852{ 2852{
2853 return (ahd_print_register(NULL, 0, "RCVRBIASCALC", 2853 return (ahd_print_register(NULL, 0, "DFPTRS",
2854 0xc8, regvalue, cur_col, wrap)); 2854 0xc8, regvalue, cur_col, wrap));
2855} 2855}
2856 2856
2857int 2857int
2858ahd_dfbkptr_print(u_int regvalue, u_int *cur_col, u_int wrap) 2858ahd_skewcalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
2859{ 2859{
2860 return (ahd_print_register(NULL, 0, "DFBKPTR", 2860 return (ahd_print_register(NULL, 0, "SKEWCALC",
2861 0xc9, regvalue, cur_col, wrap)); 2861 0xc9, regvalue, cur_col, wrap));
2862} 2862}
2863 2863
2864int 2864int
2865ahd_skewcalc_print(u_int regvalue, u_int *cur_col, u_int wrap) 2865ahd_dfbkptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
2866{ 2866{
2867 return (ahd_print_register(NULL, 0, "SKEWCALC", 2867 return (ahd_print_register(NULL, 0, "DFBKPTR",
2868 0xc9, regvalue, cur_col, wrap)); 2868 0xc9, regvalue, cur_col, wrap));
2869} 2869}
2870 2870
@@ -3001,6 +3001,13 @@ ahd_dindex_print(u_int regvalue, u_int *cur_col, u_int wrap)
3001 0xe4, regvalue, cur_col, wrap)); 3001 0xe4, regvalue, cur_col, wrap));
3002} 3002}
3003 3003
3004int
3005ahd_brkaddr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
3006{
3007 return (ahd_print_register(NULL, 0, "BRKADDR0",
3008 0xe6, regvalue, cur_col, wrap));
3009}
3010
3004static ahd_reg_parse_entry_t BRKADDR1_parse_table[] = { 3011static ahd_reg_parse_entry_t BRKADDR1_parse_table[] = {
3005 { "BRKDIS", 0x80, 0x80 } 3012 { "BRKDIS", 0x80, 0x80 }
3006}; 3013};
@@ -3013,13 +3020,6 @@ ahd_brkaddr1_print(u_int regvalue, u_int *cur_col, u_int wrap)
3013} 3020}
3014 3021
3015int 3022int
3016ahd_brkaddr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
3017{
3018 return (ahd_print_register(NULL, 0, "BRKADDR0",
3019 0xe6, regvalue, cur_col, wrap));
3020}
3021
3022int
3023ahd_allones_print(u_int regvalue, u_int *cur_col, u_int wrap) 3023ahd_allones_print(u_int regvalue, u_int *cur_col, u_int wrap)
3024{ 3024{
3025 return (ahd_print_register(NULL, 0, "ALLONES", 3025 return (ahd_print_register(NULL, 0, "ALLONES",
@@ -3069,30 +3069,30 @@ ahd_stack_print(u_int regvalue, u_int *cur_col, u_int wrap)
3069} 3069}
3070 3070
3071int 3071int
3072ahd_curaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3072ahd_intvec1_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3073{ 3073{
3074 return (ahd_print_register(NULL, 0, "CURADDR", 3074 return (ahd_print_register(NULL, 0, "INTVEC1_ADDR",
3075 0xf4, regvalue, cur_col, wrap)); 3075 0xf4, regvalue, cur_col, wrap));
3076} 3076}
3077 3077
3078int 3078int
3079ahd_intvec1_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3079ahd_curaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3080{ 3080{
3081 return (ahd_print_register(NULL, 0, "INTVEC1_ADDR", 3081 return (ahd_print_register(NULL, 0, "CURADDR",
3082 0xf4, regvalue, cur_col, wrap)); 3082 0xf4, regvalue, cur_col, wrap));
3083} 3083}
3084 3084
3085int 3085int
3086ahd_intvec2_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3086ahd_lastaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3087{ 3087{
3088 return (ahd_print_register(NULL, 0, "INTVEC2_ADDR", 3088 return (ahd_print_register(NULL, 0, "LASTADDR",
3089 0xf6, regvalue, cur_col, wrap)); 3089 0xf6, regvalue, cur_col, wrap));
3090} 3090}
3091 3091
3092int 3092int
3093ahd_lastaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3093ahd_intvec2_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3094{ 3094{
3095 return (ahd_print_register(NULL, 0, "LASTADDR", 3095 return (ahd_print_register(NULL, 0, "INTVEC2_ADDR",
3096 0xf6, regvalue, cur_col, wrap)); 3096 0xf6, regvalue, cur_col, wrap));
3097} 3097}
3098 3098
@@ -3174,24 +3174,45 @@ ahd_complete_dma_scb_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
3174} 3174}
3175 3175
3176int 3176int
3177ahd_complete_dma_scb_tail_print(u_int regvalue, u_int *cur_col, u_int wrap)
3178{
3179 return (ahd_print_register(NULL, 0, "COMPLETE_DMA_SCB_TAIL",
3180 0x12e, regvalue, cur_col, wrap));
3181}
3182
3183int
3184ahd_complete_on_qfreeze_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
3185{
3186 return (ahd_print_register(NULL, 0, "COMPLETE_ON_QFREEZE_HEAD",
3187 0x130, regvalue, cur_col, wrap));
3188}
3189
3190int
3177ahd_qfreeze_count_print(u_int regvalue, u_int *cur_col, u_int wrap) 3191ahd_qfreeze_count_print(u_int regvalue, u_int *cur_col, u_int wrap)
3178{ 3192{
3179 return (ahd_print_register(NULL, 0, "QFREEZE_COUNT", 3193 return (ahd_print_register(NULL, 0, "QFREEZE_COUNT",
3180 0x12e, regvalue, cur_col, wrap)); 3194 0x132, regvalue, cur_col, wrap));
3195}
3196
3197int
3198ahd_kernel_qfreeze_count_print(u_int regvalue, u_int *cur_col, u_int wrap)
3199{
3200 return (ahd_print_register(NULL, 0, "KERNEL_QFREEZE_COUNT",
3201 0x134, regvalue, cur_col, wrap));
3181} 3202}
3182 3203
3183int 3204int
3184ahd_saved_mode_print(u_int regvalue, u_int *cur_col, u_int wrap) 3205ahd_saved_mode_print(u_int regvalue, u_int *cur_col, u_int wrap)
3185{ 3206{
3186 return (ahd_print_register(NULL, 0, "SAVED_MODE", 3207 return (ahd_print_register(NULL, 0, "SAVED_MODE",
3187 0x130, regvalue, cur_col, wrap)); 3208 0x136, regvalue, cur_col, wrap));
3188} 3209}
3189 3210
3190int 3211int
3191ahd_msg_out_print(u_int regvalue, u_int *cur_col, u_int wrap) 3212ahd_msg_out_print(u_int regvalue, u_int *cur_col, u_int wrap)
3192{ 3213{
3193 return (ahd_print_register(NULL, 0, "MSG_OUT", 3214 return (ahd_print_register(NULL, 0, "MSG_OUT",
3194 0x131, regvalue, cur_col, wrap)); 3215 0x137, regvalue, cur_col, wrap));
3195} 3216}
3196 3217
3197static ahd_reg_parse_entry_t DMAPARAMS_parse_table[] = { 3218static ahd_reg_parse_entry_t DMAPARAMS_parse_table[] = {
@@ -3211,7 +3232,7 @@ int
3211ahd_dmaparams_print(u_int regvalue, u_int *cur_col, u_int wrap) 3232ahd_dmaparams_print(u_int regvalue, u_int *cur_col, u_int wrap)
3212{ 3233{
3213 return (ahd_print_register(DMAPARAMS_parse_table, 10, "DMAPARAMS", 3234 return (ahd_print_register(DMAPARAMS_parse_table, 10, "DMAPARAMS",
3214 0x132, regvalue, cur_col, wrap)); 3235 0x138, regvalue, cur_col, wrap));
3215} 3236}
3216 3237
3217static ahd_reg_parse_entry_t SEQ_FLAGS_parse_table[] = { 3238static ahd_reg_parse_entry_t SEQ_FLAGS_parse_table[] = {
@@ -3230,21 +3251,21 @@ int
3230ahd_seq_flags_print(u_int regvalue, u_int *cur_col, u_int wrap) 3251ahd_seq_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
3231{ 3252{
3232 return (ahd_print_register(SEQ_FLAGS_parse_table, 9, "SEQ_FLAGS", 3253 return (ahd_print_register(SEQ_FLAGS_parse_table, 9, "SEQ_FLAGS",
3233 0x133, regvalue, cur_col, wrap)); 3254 0x139, regvalue, cur_col, wrap));
3234} 3255}
3235 3256
3236int 3257int
3237ahd_saved_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap) 3258ahd_saved_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
3238{ 3259{
3239 return (ahd_print_register(NULL, 0, "SAVED_SCSIID", 3260 return (ahd_print_register(NULL, 0, "SAVED_SCSIID",
3240 0x134, regvalue, cur_col, wrap)); 3261 0x13a, regvalue, cur_col, wrap));
3241} 3262}
3242 3263
3243int 3264int
3244ahd_saved_lun_print(u_int regvalue, u_int *cur_col, u_int wrap) 3265ahd_saved_lun_print(u_int regvalue, u_int *cur_col, u_int wrap)
3245{ 3266{
3246 return (ahd_print_register(NULL, 0, "SAVED_LUN", 3267 return (ahd_print_register(NULL, 0, "SAVED_LUN",
3247 0x135, regvalue, cur_col, wrap)); 3268 0x13b, regvalue, cur_col, wrap));
3248} 3269}
3249 3270
3250static ahd_reg_parse_entry_t LASTPHASE_parse_table[] = { 3271static ahd_reg_parse_entry_t LASTPHASE_parse_table[] = {
@@ -3267,42 +3288,42 @@ int
3267ahd_lastphase_print(u_int regvalue, u_int *cur_col, u_int wrap) 3288ahd_lastphase_print(u_int regvalue, u_int *cur_col, u_int wrap)
3268{ 3289{
3269 return (ahd_print_register(LASTPHASE_parse_table, 13, "LASTPHASE", 3290 return (ahd_print_register(LASTPHASE_parse_table, 13, "LASTPHASE",
3270 0x136, regvalue, cur_col, wrap)); 3291 0x13c, regvalue, cur_col, wrap));
3271} 3292}
3272 3293
3273int 3294int
3274ahd_qoutfifo_entry_valid_tag_print(u_int regvalue, u_int *cur_col, u_int wrap) 3295ahd_qoutfifo_entry_valid_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
3275{ 3296{
3276 return (ahd_print_register(NULL, 0, "QOUTFIFO_ENTRY_VALID_TAG", 3297 return (ahd_print_register(NULL, 0, "QOUTFIFO_ENTRY_VALID_TAG",
3277 0x137, regvalue, cur_col, wrap)); 3298 0x13d, regvalue, cur_col, wrap));
3278} 3299}
3279 3300
3280int 3301int
3281ahd_shared_data_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3302ahd_kernel_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
3282{ 3303{
3283 return (ahd_print_register(NULL, 0, "SHARED_DATA_ADDR", 3304 return (ahd_print_register(NULL, 0, "KERNEL_TQINPOS",
3284 0x138, regvalue, cur_col, wrap)); 3305 0x13e, regvalue, cur_col, wrap));
3285} 3306}
3286 3307
3287int 3308int
3288ahd_qoutfifo_next_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3309ahd_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
3289{ 3310{
3290 return (ahd_print_register(NULL, 0, "QOUTFIFO_NEXT_ADDR", 3311 return (ahd_print_register(NULL, 0, "TQINPOS",
3291 0x13c, regvalue, cur_col, wrap)); 3312 0x13f, regvalue, cur_col, wrap));
3292} 3313}
3293 3314
3294int 3315int
3295ahd_kernel_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap) 3316ahd_shared_data_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3296{ 3317{
3297 return (ahd_print_register(NULL, 0, "KERNEL_TQINPOS", 3318 return (ahd_print_register(NULL, 0, "SHARED_DATA_ADDR",
3298 0x140, regvalue, cur_col, wrap)); 3319 0x140, regvalue, cur_col, wrap));
3299} 3320}
3300 3321
3301int 3322int
3302ahd_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap) 3323ahd_qoutfifo_next_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3303{ 3324{
3304 return (ahd_print_register(NULL, 0, "TQINPOS", 3325 return (ahd_print_register(NULL, 0, "QOUTFIFO_NEXT_ADDR",
3305 0x141, regvalue, cur_col, wrap)); 3326 0x144, regvalue, cur_col, wrap));
3306} 3327}
3307 3328
3308static ahd_reg_parse_entry_t ARG_1_parse_table[] = { 3329static ahd_reg_parse_entry_t ARG_1_parse_table[] = {
@@ -3320,21 +3341,21 @@ int
3320ahd_arg_1_print(u_int regvalue, u_int *cur_col, u_int wrap) 3341ahd_arg_1_print(u_int regvalue, u_int *cur_col, u_int wrap)
3321{ 3342{
3322 return (ahd_print_register(ARG_1_parse_table, 8, "ARG_1", 3343 return (ahd_print_register(ARG_1_parse_table, 8, "ARG_1",
3323 0x142, regvalue, cur_col, wrap)); 3344 0x148, regvalue, cur_col, wrap));
3324} 3345}
3325 3346
3326int 3347int
3327ahd_arg_2_print(u_int regvalue, u_int *cur_col, u_int wrap) 3348ahd_arg_2_print(u_int regvalue, u_int *cur_col, u_int wrap)
3328{ 3349{
3329 return (ahd_print_register(NULL, 0, "ARG_2", 3350 return (ahd_print_register(NULL, 0, "ARG_2",
3330 0x143, regvalue, cur_col, wrap)); 3351 0x149, regvalue, cur_col, wrap));
3331} 3352}
3332 3353
3333int 3354int
3334ahd_last_msg_print(u_int regvalue, u_int *cur_col, u_int wrap) 3355ahd_last_msg_print(u_int regvalue, u_int *cur_col, u_int wrap)
3335{ 3356{
3336 return (ahd_print_register(NULL, 0, "LAST_MSG", 3357 return (ahd_print_register(NULL, 0, "LAST_MSG",
3337 0x144, regvalue, cur_col, wrap)); 3358 0x14a, regvalue, cur_col, wrap));
3338} 3359}
3339 3360
3340static ahd_reg_parse_entry_t SCSISEQ_TEMPLATE_parse_table[] = { 3361static ahd_reg_parse_entry_t SCSISEQ_TEMPLATE_parse_table[] = {
@@ -3350,14 +3371,14 @@ int
3350ahd_scsiseq_template_print(u_int regvalue, u_int *cur_col, u_int wrap) 3371ahd_scsiseq_template_print(u_int regvalue, u_int *cur_col, u_int wrap)
3351{ 3372{
3352 return (ahd_print_register(SCSISEQ_TEMPLATE_parse_table, 6, "SCSISEQ_TEMPLATE", 3373 return (ahd_print_register(SCSISEQ_TEMPLATE_parse_table, 6, "SCSISEQ_TEMPLATE",
3353 0x145, regvalue, cur_col, wrap)); 3374 0x14b, regvalue, cur_col, wrap));
3354} 3375}
3355 3376
3356int 3377int
3357ahd_initiator_tag_print(u_int regvalue, u_int *cur_col, u_int wrap) 3378ahd_initiator_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
3358{ 3379{
3359 return (ahd_print_register(NULL, 0, "INITIATOR_TAG", 3380 return (ahd_print_register(NULL, 0, "INITIATOR_TAG",
3360 0x146, regvalue, cur_col, wrap)); 3381 0x14c, regvalue, cur_col, wrap));
3361} 3382}
3362 3383
3363static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = { 3384static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
@@ -3369,63 +3390,63 @@ int
3369ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap) 3390ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap)
3370{ 3391{
3371 return (ahd_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2", 3392 return (ahd_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2",
3372 0x147, regvalue, cur_col, wrap)); 3393 0x14d, regvalue, cur_col, wrap));
3373} 3394}
3374 3395
3375int 3396int
3376ahd_allocfifo_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap) 3397ahd_allocfifo_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
3377{ 3398{
3378 return (ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR", 3399 return (ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR",
3379 0x148, regvalue, cur_col, wrap)); 3400 0x14e, regvalue, cur_col, wrap));
3380} 3401}
3381 3402
3382int 3403int
3383ahd_int_coalescing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap) 3404ahd_int_coalescing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap)
3384{ 3405{
3385 return (ahd_print_register(NULL, 0, "INT_COALESCING_TIMER", 3406 return (ahd_print_register(NULL, 0, "INT_COALESCING_TIMER",
3386 0x14a, regvalue, cur_col, wrap)); 3407 0x150, regvalue, cur_col, wrap));
3387} 3408}
3388 3409
3389int 3410int
3390ahd_int_coalescing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap) 3411ahd_int_coalescing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
3391{ 3412{
3392 return (ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS", 3413 return (ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS",
3393 0x14c, regvalue, cur_col, wrap)); 3414 0x152, regvalue, cur_col, wrap));
3394} 3415}
3395 3416
3396int 3417int
3397ahd_int_coalescing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap) 3418ahd_int_coalescing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
3398{ 3419{
3399 return (ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS", 3420 return (ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS",
3400 0x14d, regvalue, cur_col, wrap)); 3421 0x153, regvalue, cur_col, wrap));
3401} 3422}
3402 3423
3403int 3424int
3404ahd_cmds_pending_print(u_int regvalue, u_int *cur_col, u_int wrap) 3425ahd_cmds_pending_print(u_int regvalue, u_int *cur_col, u_int wrap)
3405{ 3426{
3406 return (ahd_print_register(NULL, 0, "CMDS_PENDING", 3427 return (ahd_print_register(NULL, 0, "CMDS_PENDING",
3407 0x14e, regvalue, cur_col, wrap)); 3428 0x154, regvalue, cur_col, wrap));
3408} 3429}
3409 3430
3410int 3431int
3411ahd_int_coalescing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap) 3432ahd_int_coalescing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
3412{ 3433{
3413 return (ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT", 3434 return (ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT",
3414 0x150, regvalue, cur_col, wrap)); 3435 0x156, regvalue, cur_col, wrap));
3415} 3436}
3416 3437
3417int 3438int
3418ahd_local_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap) 3439ahd_local_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap)
3419{ 3440{
3420 return (ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX", 3441 return (ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX",
3421 0x151, regvalue, cur_col, wrap)); 3442 0x157, regvalue, cur_col, wrap));
3422} 3443}
3423 3444
3424int 3445int
3425ahd_cmdsize_table_print(u_int regvalue, u_int *cur_col, u_int wrap) 3446ahd_cmdsize_table_print(u_int regvalue, u_int *cur_col, u_int wrap)
3426{ 3447{
3427 return (ahd_print_register(NULL, 0, "CMDSIZE_TABLE", 3448 return (ahd_print_register(NULL, 0, "CMDSIZE_TABLE",
3428 0x152, regvalue, cur_col, wrap)); 3449 0x158, regvalue, cur_col, wrap));
3429} 3450}
3430 3451
3431int 3452int
diff --git a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
index 77c471f934e0..b1e5365be230 100644
--- a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
@@ -2,215 +2,228 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#94 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $
7 */ 7 */
8static uint8_t seqprog[] = { 8static uint8_t seqprog[] = {
9 0xff, 0x02, 0x06, 0x78, 9 0xff, 0x02, 0x06, 0x78,
10 0x00, 0xea, 0x50, 0x59, 10 0x00, 0xea, 0x64, 0x59,
11 0x01, 0xea, 0x04, 0x30, 11 0x01, 0xea, 0x04, 0x30,
12 0xff, 0x04, 0x0c, 0x78, 12 0xff, 0x04, 0x0c, 0x78,
13 0x19, 0xea, 0x50, 0x59, 13 0x19, 0xea, 0x64, 0x59,
14 0x19, 0xea, 0x04, 0x00, 14 0x19, 0xea, 0x04, 0x00,
15 0x33, 0xea, 0x44, 0x59, 15 0x33, 0xea, 0x5e, 0x59,
16 0x33, 0xea, 0x00, 0x00, 16 0x33, 0xea, 0x00, 0x00,
17 0x60, 0x3a, 0x1a, 0x68, 17 0x60, 0x3a, 0x3a, 0x68,
18 0x04, 0x47, 0x1b, 0x68, 18 0x04, 0x4d, 0x35, 0x78,
19 0xff, 0x21, 0x1b, 0x70, 19 0x01, 0x34, 0xc1, 0x31,
20 0x40, 0x4b, 0x92, 0x69, 20 0x00, 0x32, 0x21, 0x60,
21 0x00, 0xe2, 0x54, 0x59, 21 0x01, 0x35, 0xc1, 0x31,
22 0x40, 0x4b, 0x92, 0x69, 22 0x00, 0x33, 0x21, 0x60,
23 0x20, 0x4b, 0x82, 0x69, 23 0xfb, 0x4d, 0x9b, 0x0a,
24 0xfc, 0x42, 0x24, 0x78, 24 0x00, 0xe2, 0x34, 0x40,
25 0x10, 0x40, 0x24, 0x78, 25 0x50, 0x4b, 0x3a, 0x68,
26 0x00, 0xe2, 0xc4, 0x5d, 26 0xff, 0x31, 0x3b, 0x70,
27 0x20, 0x4d, 0x28, 0x78, 27 0x02, 0x30, 0x51, 0x31,
28 0x00, 0xe2, 0xc4, 0x5d, 28 0xff, 0x8d, 0x2d, 0x70,
29 0x02, 0x8c, 0x51, 0x31,
30 0xff, 0x8d, 0x29, 0x60,
31 0x02, 0x28, 0x19, 0x33,
32 0x02, 0x30, 0x51, 0x32,
33 0xff, 0xea, 0x62, 0x02,
34 0x00, 0xe2, 0x3a, 0x40,
35 0xff, 0x21, 0x3b, 0x70,
36 0x40, 0x4b, 0xaa, 0x69,
37 0x00, 0xe2, 0x68, 0x59,
38 0x40, 0x4b, 0xaa, 0x69,
39 0x20, 0x4b, 0x96, 0x69,
40 0xfc, 0x42, 0x44, 0x78,
41 0x10, 0x40, 0x44, 0x78,
42 0x00, 0xe2, 0xfc, 0x5d,
43 0x20, 0x4d, 0x48, 0x78,
44 0x00, 0xe2, 0xfc, 0x5d,
29 0x30, 0x3f, 0xc0, 0x09, 45 0x30, 0x3f, 0xc0, 0x09,
30 0x30, 0xe0, 0x30, 0x60, 46 0x30, 0xe0, 0x50, 0x60,
31 0x7f, 0x4a, 0x94, 0x08, 47 0x7f, 0x4a, 0x94, 0x08,
32 0x00, 0xe2, 0x32, 0x40, 48 0x00, 0xe2, 0x52, 0x40,
33 0xc0, 0x4a, 0x94, 0x00, 49 0xc0, 0x4a, 0x94, 0x00,
34 0x00, 0xe2, 0x3e, 0x58, 50 0x00, 0xe2, 0x5e, 0x58,
35 0x00, 0xe2, 0x56, 0x58, 51 0x00, 0xe2, 0x76, 0x58,
36 0x00, 0xe2, 0x66, 0x58, 52 0x00, 0xe2, 0x86, 0x58,
37 0x00, 0xe2, 0x06, 0x40, 53 0x00, 0xe2, 0x06, 0x40,
38 0x33, 0xea, 0x44, 0x59, 54 0x33, 0xea, 0x5e, 0x59,
39 0x33, 0xea, 0x00, 0x00, 55 0x33, 0xea, 0x00, 0x00,
40 0x01, 0x52, 0x64, 0x78, 56 0x01, 0x52, 0x84, 0x78,
41 0x02, 0x58, 0x50, 0x31, 57 0x02, 0x58, 0x50, 0x31,
42 0xff, 0xea, 0x10, 0x0b, 58 0xff, 0xea, 0x10, 0x0b,
43 0xff, 0x97, 0x4f, 0x78, 59 0xff, 0x97, 0x6f, 0x78,
44 0x50, 0x4b, 0x4a, 0x68, 60 0x50, 0x4b, 0x6a, 0x68,
45 0xbf, 0x3a, 0x74, 0x08, 61 0xbf, 0x3a, 0x74, 0x08,
46 0x14, 0xea, 0x50, 0x59, 62 0x14, 0xea, 0x64, 0x59,
47 0x14, 0xea, 0x04, 0x00, 63 0x14, 0xea, 0x04, 0x00,
48 0x08, 0x92, 0x25, 0x03, 64 0x08, 0x92, 0x25, 0x03,
49 0xff, 0x90, 0x3f, 0x68, 65 0xff, 0x90, 0x5f, 0x68,
50 0x00, 0xe2, 0x56, 0x5b, 66 0x00, 0xe2, 0x76, 0x5b,
51 0x00, 0xe2, 0x3e, 0x40, 67 0x00, 0xe2, 0x5e, 0x40,
52 0x00, 0xea, 0x44, 0x59, 68 0x00, 0xea, 0x5e, 0x59,
53 0x01, 0xea, 0x00, 0x30, 69 0x01, 0xea, 0x00, 0x30,
54 0x80, 0xf9, 0x5e, 0x68, 70 0x80, 0xf9, 0x7e, 0x68,
55 0x00, 0xe2, 0x42, 0x59, 71 0x00, 0xe2, 0x5c, 0x59,
56 0x11, 0xea, 0x44, 0x59, 72 0x11, 0xea, 0x5e, 0x59,
57 0x11, 0xea, 0x00, 0x00, 73 0x11, 0xea, 0x00, 0x00,
58 0x80, 0xf9, 0x42, 0x79, 74 0x80, 0xf9, 0x5c, 0x79,
59 0xff, 0xea, 0xd4, 0x0d, 75 0xff, 0xea, 0xd4, 0x0d,
60 0x22, 0xea, 0x44, 0x59, 76 0x22, 0xea, 0x5e, 0x59,
61 0x22, 0xea, 0x00, 0x00, 77 0x22, 0xea, 0x00, 0x00,
62 0x10, 0x16, 0x70, 0x78, 78 0x10, 0x16, 0x90, 0x78,
63 0x01, 0x0b, 0xa2, 0x32,
64 0x10, 0x16, 0x2c, 0x00, 79 0x10, 0x16, 0x2c, 0x00,
65 0x18, 0xad, 0x00, 0x79, 80 0x01, 0x0b, 0xae, 0x32,
66 0x04, 0xad, 0xca, 0x68, 81 0x18, 0xad, 0x12, 0x79,
67 0x80, 0xad, 0x64, 0x78, 82 0x04, 0xad, 0xdc, 0x68,
68 0x10, 0xad, 0x98, 0x78, 83 0x80, 0xad, 0x84, 0x78,
69 0xff, 0x88, 0x83, 0x68, 84 0x10, 0xad, 0xaa, 0x78,
70 0xe7, 0xad, 0x5a, 0x09, 85 0xe7, 0xad, 0x5a, 0x09,
71 0x02, 0x8c, 0x59, 0x32, 86 0x02, 0x8c, 0x59, 0x32,
87 0xff, 0x8d, 0xa1, 0x60,
88 0xff, 0xea, 0x5e, 0x02,
89 0xff, 0x88, 0xa7, 0x78,
90 0x02, 0x30, 0x19, 0x33,
91 0x02, 0xa8, 0x60, 0x36,
72 0x02, 0x28, 0x19, 0x33, 92 0x02, 0x28, 0x19, 0x33,
73 0x02, 0xa8, 0x50, 0x36, 93 0x02, 0xa8, 0x50, 0x36,
74 0x33, 0xea, 0x44, 0x59,
75 0x33, 0xea, 0x00, 0x00,
76 0x40, 0x3a, 0x64, 0x68,
77 0x50, 0x4b, 0x64, 0x68,
78 0x22, 0xea, 0x44, 0x59,
79 0x22, 0xea, 0x00, 0x00,
80 0xe7, 0xad, 0x5a, 0x09,
81 0x02, 0x8c, 0x59, 0x32,
82 0x1a, 0xea, 0x50, 0x59,
83 0x1a, 0xea, 0x04, 0x00,
84 0xff, 0xea, 0xd4, 0x0d,
85 0xe7, 0xad, 0x5a, 0x09, 94 0xe7, 0xad, 0x5a, 0x09,
86 0x00, 0xe2, 0xa6, 0x58, 95 0x00, 0xe2, 0xb8, 0x58,
87 0xff, 0xea, 0x56, 0x02, 96 0xff, 0xea, 0x56, 0x02,
88 0x04, 0x7c, 0x78, 0x32, 97 0x04, 0x7c, 0x88, 0x32,
89 0x20, 0x16, 0x64, 0x78, 98 0x20, 0x16, 0x84, 0x78,
90 0x04, 0x38, 0x79, 0x32, 99 0x04, 0x40, 0x89, 0x32,
91 0x80, 0x37, 0x6f, 0x16, 100 0x80, 0x3d, 0x7b, 0x16,
92 0xff, 0x2d, 0xb5, 0x60, 101 0xff, 0x2d, 0xc7, 0x60,
93 0xff, 0x29, 0xb5, 0x60, 102 0xff, 0x29, 0xc7, 0x60,
94 0x40, 0x51, 0xc5, 0x78, 103 0x40, 0x57, 0xd7, 0x78,
95 0xff, 0x4f, 0xb5, 0x68, 104 0xff, 0x55, 0xc7, 0x68,
96 0xff, 0x4d, 0xc1, 0x19, 105 0xff, 0x53, 0xc1, 0x19,
97 0x00, 0x4e, 0xd5, 0x19, 106 0x00, 0x54, 0xd5, 0x19,
98 0x00, 0xe2, 0xc4, 0x50, 107 0x00, 0xe2, 0xd6, 0x50,
99 0x01, 0x4c, 0xc1, 0x31, 108 0x01, 0x52, 0xc1, 0x31,
100 0x00, 0x50, 0xd5, 0x19, 109 0x00, 0x56, 0xd5, 0x19,
101 0x00, 0xe2, 0xc4, 0x48, 110 0x00, 0xe2, 0xd6, 0x48,
102 0x80, 0x18, 0x64, 0x78, 111 0x80, 0x18, 0x84, 0x78,
103 0x02, 0x4a, 0x1d, 0x30, 112 0x02, 0x50, 0x1d, 0x30,
104 0x10, 0xea, 0x18, 0x00, 113 0x10, 0xea, 0x18, 0x00,
105 0x60, 0x18, 0x30, 0x00, 114 0x60, 0x18, 0x30, 0x00,
106 0x7f, 0x18, 0x30, 0x0c, 115 0x7f, 0x18, 0x30, 0x0c,
107 0x02, 0xea, 0x02, 0x00, 116 0x02, 0xea, 0x02, 0x00,
108 0xff, 0xea, 0xa0, 0x0a, 117 0xff, 0xea, 0xac, 0x0a,
109 0x80, 0x18, 0x30, 0x04, 118 0x80, 0x18, 0x30, 0x04,
110 0x40, 0xad, 0x64, 0x78, 119 0x40, 0xad, 0x84, 0x78,
111 0xe7, 0xad, 0x5a, 0x09, 120 0xe7, 0xad, 0x5a, 0x09,
112 0x02, 0xa8, 0x40, 0x31, 121 0x02, 0xa8, 0x40, 0x31,
113 0xff, 0xea, 0xc0, 0x09, 122 0xff, 0xea, 0xc0, 0x09,
114 0x01, 0x4e, 0x9d, 0x1a, 123 0x01, 0x54, 0xa9, 0x1a,
115 0x00, 0x4f, 0x9f, 0x22, 124 0x00, 0x55, 0xab, 0x22,
116 0x01, 0x94, 0x6d, 0x33, 125 0x01, 0x94, 0x6d, 0x33,
117 0x01, 0xea, 0x20, 0x33, 126 0xff, 0xea, 0x20, 0x0b,
118 0x04, 0xac, 0x49, 0x32, 127 0x04, 0xac, 0x49, 0x32,
119 0xff, 0xea, 0x5a, 0x03, 128 0xff, 0xea, 0x5a, 0x03,
120 0xff, 0xea, 0x5e, 0x03, 129 0xff, 0xea, 0x5e, 0x03,
121 0x01, 0x10, 0xd4, 0x31, 130 0x01, 0x10, 0xd4, 0x31,
122 0x10, 0x92, 0xf5, 0x68, 131 0x10, 0x92, 0x07, 0x69,
123 0x3d, 0x93, 0xc5, 0x29, 132 0x3d, 0x93, 0xc5, 0x29,
124 0xfe, 0xe2, 0xc4, 0x09, 133 0xfe, 0xe2, 0xc4, 0x09,
125 0x01, 0xea, 0xc6, 0x01, 134 0x01, 0xea, 0xc6, 0x01,
126 0x02, 0xe2, 0xc8, 0x31, 135 0x02, 0xe2, 0xc8, 0x31,
127 0x02, 0xec, 0x50, 0x31, 136 0x02, 0xec, 0x50, 0x31,
128 0x02, 0xa0, 0xda, 0x31, 137 0x02, 0xa0, 0xda, 0x31,
129 0xff, 0xa9, 0xf4, 0x70, 138 0xff, 0xa9, 0x06, 0x71,
130 0x02, 0xa0, 0x58, 0x37, 139 0x02, 0xa0, 0x58, 0x37,
131 0xff, 0x21, 0xfd, 0x70, 140 0xff, 0x21, 0x0f, 0x71,
132 0x02, 0x22, 0x51, 0x31, 141 0x02, 0x22, 0x51, 0x31,
133 0x02, 0xa0, 0x5c, 0x33, 142 0x02, 0xa0, 0x5c, 0x33,
134 0x02, 0xa0, 0x44, 0x36, 143 0x02, 0xa0, 0x44, 0x36,
135 0x02, 0xa0, 0x40, 0x32, 144 0x02, 0xa0, 0x40, 0x32,
136 0x02, 0xa0, 0x44, 0x36, 145 0x02, 0xa0, 0x44, 0x36,
137 0x04, 0x47, 0x05, 0x69, 146 0x04, 0x4d, 0x17, 0x69,
138 0x40, 0x16, 0x30, 0x69, 147 0x40, 0x16, 0x48, 0x69,
139 0xff, 0x2d, 0x35, 0x61, 148 0xff, 0x2d, 0x4d, 0x61,
140 0xff, 0x29, 0x65, 0x70, 149 0xff, 0x29, 0x85, 0x70,
141 0x01, 0x37, 0xc1, 0x31,
142 0x02, 0x28, 0x55, 0x32, 150 0x02, 0x28, 0x55, 0x32,
143 0x01, 0xea, 0x5a, 0x01, 151 0x01, 0xea, 0x5a, 0x01,
144 0x04, 0x3c, 0xf9, 0x30, 152 0x04, 0x44, 0xf9, 0x30,
153 0x01, 0x44, 0xc1, 0x31,
145 0x02, 0x28, 0x51, 0x31, 154 0x02, 0x28, 0x51, 0x31,
146 0x01, 0xa8, 0x60, 0x31, 155 0x02, 0xa8, 0x60, 0x31,
147 0x00, 0xa9, 0x60, 0x01, 156 0x01, 0xa4, 0x61, 0x31,
157 0x01, 0x3d, 0x61, 0x31,
148 0x01, 0x14, 0xd4, 0x31, 158 0x01, 0x14, 0xd4, 0x31,
149 0x01, 0x50, 0xa1, 0x1a, 159 0x01, 0x56, 0xad, 0x1a,
150 0xff, 0x4e, 0x9d, 0x1a, 160 0xff, 0x54, 0xa9, 0x1a,
151 0xff, 0x4f, 0x9f, 0x22, 161 0xff, 0x55, 0xab, 0x22,
152 0xff, 0x8d, 0x29, 0x71, 162 0xff, 0x8d, 0x41, 0x71,
153 0x80, 0xac, 0x28, 0x71, 163 0x80, 0xac, 0x40, 0x71,
154 0x20, 0x16, 0x28, 0x69, 164 0x20, 0x16, 0x40, 0x69,
165 0x00, 0xac, 0xc4, 0x19,
166 0x07, 0xe2, 0x40, 0xf9,
155 0x02, 0x8c, 0x51, 0x31, 167 0x02, 0x8c, 0x51, 0x31,
156 0x00, 0xe2, 0x12, 0x41, 168 0x00, 0xe2, 0x24, 0x41,
157 0x01, 0xac, 0x08, 0x31, 169 0x01, 0xac, 0x08, 0x31,
158 0x09, 0xea, 0x5a, 0x01, 170 0x09, 0xea, 0x5a, 0x01,
159 0x02, 0x8c, 0x51, 0x32, 171 0x02, 0x8c, 0x51, 0x32,
160 0xff, 0xea, 0x1a, 0x07, 172 0xff, 0xea, 0x1a, 0x07,
161 0x04, 0x24, 0xf9, 0x30, 173 0x04, 0x24, 0xf9, 0x30,
162 0x1d, 0xea, 0x3a, 0x41, 174 0x1d, 0xea, 0x52, 0x41,
163 0x02, 0x2c, 0x51, 0x31, 175 0x02, 0x2c, 0x51, 0x31,
164 0x04, 0xa8, 0xf9, 0x30, 176 0x04, 0xa8, 0xf9, 0x30,
165 0x19, 0xea, 0x3a, 0x41, 177 0x19, 0xea, 0x52, 0x41,
166 0x06, 0xea, 0x08, 0x81, 178 0x06, 0xea, 0x08, 0x81,
167 0x01, 0xe2, 0x5a, 0x35, 179 0x01, 0xe2, 0x5a, 0x35,
168 0x02, 0xf2, 0xf0, 0x35, 180 0x02, 0xf2, 0xf0, 0x31,
181 0xff, 0xea, 0xd4, 0x0d,
169 0x02, 0xf2, 0xf0, 0x31, 182 0x02, 0xf2, 0xf0, 0x31,
170 0x02, 0xf8, 0xe4, 0x35, 183 0x02, 0xf8, 0xe4, 0x35,
171 0x80, 0xea, 0xb2, 0x01, 184 0x80, 0xea, 0xb2, 0x01,
172 0x01, 0xe2, 0x00, 0x30, 185 0x01, 0xe2, 0x00, 0x30,
173 0xff, 0xea, 0xb2, 0x0d, 186 0xff, 0xea, 0xb2, 0x0d,
174 0x80, 0xea, 0xb2, 0x01,
175 0x11, 0x00, 0x00, 0x10,
176 0xff, 0xea, 0xb2, 0x0d,
177 0x01, 0xe2, 0x04, 0x30, 187 0x01, 0xe2, 0x04, 0x30,
178 0x01, 0xea, 0x04, 0x34, 188 0x01, 0xea, 0x04, 0x34,
179 0x02, 0x20, 0xbd, 0x30, 189 0x02, 0x20, 0xbd, 0x30,
180 0x02, 0x20, 0xb9, 0x30, 190 0x02, 0x20, 0xb9, 0x30,
181 0x02, 0x20, 0x51, 0x31, 191 0x02, 0x20, 0x51, 0x31,
182 0x4c, 0x93, 0xd7, 0x28, 192 0x4c, 0x93, 0xd7, 0x28,
183 0x10, 0x92, 0x63, 0x79, 193 0x10, 0x92, 0x77, 0x79,
184 0x01, 0x6b, 0xc0, 0x30, 194 0x01, 0x6b, 0xc0, 0x30,
185 0x02, 0x64, 0xc8, 0x00, 195 0x02, 0x64, 0xc8, 0x00,
186 0x40, 0x3a, 0x74, 0x04, 196 0x40, 0x3a, 0x74, 0x04,
187 0x00, 0xe2, 0x56, 0x58, 197 0x00, 0xe2, 0x76, 0x58,
188 0x33, 0xea, 0x44, 0x59, 198 0x33, 0xea, 0x5e, 0x59,
189 0x33, 0xea, 0x00, 0x00, 199 0x33, 0xea, 0x00, 0x00,
190 0x30, 0x3f, 0xc0, 0x09, 200 0x30, 0x3f, 0xc0, 0x09,
191 0x30, 0xe0, 0x64, 0x61, 201 0x30, 0xe0, 0x78, 0x61,
192 0x20, 0x3f, 0x7a, 0x69, 202 0x20, 0x3f, 0x8e, 0x69,
193 0x10, 0x3f, 0x64, 0x79, 203 0x10, 0x3f, 0x78, 0x79,
194 0x02, 0xea, 0x7e, 0x00, 204 0x02, 0xea, 0x7e, 0x00,
195 0x00, 0xea, 0x44, 0x59, 205 0x00, 0xea, 0x5e, 0x59,
196 0x01, 0xea, 0x00, 0x30, 206 0x01, 0xea, 0x00, 0x30,
197 0x02, 0x48, 0x51, 0x35, 207 0x02, 0x4e, 0x51, 0x35,
198 0x01, 0xea, 0x7e, 0x00, 208 0x01, 0xea, 0x7e, 0x00,
199 0x11, 0xea, 0x44, 0x59, 209 0x11, 0xea, 0x5e, 0x59,
200 0x11, 0xea, 0x00, 0x00, 210 0x11, 0xea, 0x00, 0x00,
201 0x02, 0x48, 0x51, 0x35, 211 0x02, 0x4e, 0x51, 0x35,
212 0xc0, 0x4a, 0x94, 0x00,
213 0x04, 0x41, 0x9c, 0x79,
202 0x08, 0xea, 0x98, 0x00, 214 0x08, 0xea, 0x98, 0x00,
203 0x08, 0x57, 0xae, 0x00, 215 0x08, 0x57, 0xae, 0x00,
204 0x08, 0x3c, 0x78, 0x00, 216 0x08, 0x3c, 0x78, 0x00,
205 0xf0, 0x49, 0x68, 0x0a, 217 0xf0, 0x49, 0x74, 0x0a,
206 0x0f, 0x67, 0xc0, 0x09, 218 0x0f, 0x67, 0xc0, 0x09,
207 0x00, 0x34, 0x69, 0x02, 219 0x00, 0x3a, 0x75, 0x02,
208 0x20, 0xea, 0x96, 0x00, 220 0x20, 0xea, 0x96, 0x00,
209 0x00, 0xe2, 0xf8, 0x41, 221 0x00, 0xe2, 0x14, 0x42,
210 0x40, 0x3a, 0xae, 0x69, 222 0xc0, 0x4a, 0x94, 0x00,
223 0x40, 0x3a, 0xc8, 0x69,
211 0x02, 0x55, 0x06, 0x68, 224 0x02, 0x55, 0x06, 0x68,
212 0x02, 0x56, 0xae, 0x69, 225 0x02, 0x56, 0xc8, 0x69,
213 0xff, 0x5b, 0xae, 0x61, 226 0xff, 0x5b, 0xc8, 0x61,
214 0x02, 0x20, 0x51, 0x31, 227 0x02, 0x20, 0x51, 0x31,
215 0x80, 0xea, 0xb2, 0x01, 228 0x80, 0xea, 0xb2, 0x01,
216 0x44, 0xea, 0x00, 0x00, 229 0x44, 0xea, 0x00, 0x00,
@@ -218,237 +231,246 @@ static uint8_t seqprog[] = {
218 0x33, 0xea, 0x00, 0x00, 231 0x33, 0xea, 0x00, 0x00,
219 0xff, 0xea, 0xb2, 0x09, 232 0xff, 0xea, 0xb2, 0x09,
220 0xff, 0xe0, 0xc0, 0x19, 233 0xff, 0xe0, 0xc0, 0x19,
221 0xff, 0xe0, 0xb0, 0x79, 234 0xff, 0xe0, 0xca, 0x79,
222 0x02, 0xac, 0x51, 0x31, 235 0x02, 0xac, 0x51, 0x31,
223 0x00, 0xe2, 0xa6, 0x41, 236 0x00, 0xe2, 0xc0, 0x41,
224 0x02, 0x5e, 0x50, 0x31, 237 0x02, 0x5e, 0x50, 0x31,
225 0x02, 0xa8, 0xb8, 0x30, 238 0x02, 0xa8, 0xb8, 0x30,
226 0x02, 0x5c, 0x50, 0x31, 239 0x02, 0x5c, 0x50, 0x31,
227 0xff, 0xad, 0xc1, 0x71, 240 0xff, 0xad, 0xdb, 0x71,
228 0x02, 0xac, 0x41, 0x31, 241 0x02, 0xac, 0x41, 0x31,
229 0x02, 0x22, 0x51, 0x31, 242 0x02, 0x22, 0x51, 0x31,
230 0x02, 0xa0, 0x5c, 0x33, 243 0x02, 0xa0, 0x5c, 0x33,
231 0x02, 0xa0, 0x44, 0x32, 244 0x02, 0xa0, 0x44, 0x32,
232 0x00, 0xe2, 0xca, 0x41, 245 0x00, 0xe2, 0xe4, 0x41,
233 0x10, 0x92, 0xcb, 0x69, 246 0x10, 0x92, 0xe5, 0x69,
234 0x3d, 0x93, 0xc9, 0x29, 247 0x3d, 0x93, 0xc9, 0x29,
235 0x01, 0xe4, 0xc8, 0x01, 248 0x01, 0xe4, 0xc8, 0x01,
236 0x01, 0xea, 0xca, 0x01, 249 0x01, 0xea, 0xca, 0x01,
237 0xff, 0xea, 0xda, 0x01, 250 0xff, 0xea, 0xda, 0x01,
238 0x02, 0x20, 0x51, 0x31, 251 0x02, 0x20, 0x51, 0x31,
239 0x02, 0xae, 0x41, 0x32, 252 0x02, 0xae, 0x41, 0x32,
240 0xff, 0x21, 0xd3, 0x61, 253 0xff, 0x21, 0xed, 0x61,
241 0xff, 0xea, 0x46, 0x02, 254 0xff, 0xea, 0x46, 0x02,
242 0x02, 0x5c, 0x50, 0x31, 255 0x02, 0x5c, 0x50, 0x31,
243 0x40, 0xea, 0x96, 0x00, 256 0x40, 0xea, 0x96, 0x00,
244 0x02, 0x56, 0xcc, 0x6d, 257 0x02, 0x56, 0x04, 0x6e,
245 0x01, 0x55, 0xcc, 0x6d, 258 0x01, 0x55, 0x04, 0x6e,
246 0x10, 0x92, 0xdf, 0x79, 259 0x10, 0x92, 0xf9, 0x79,
247 0x10, 0x40, 0xe8, 0x69, 260 0x10, 0x40, 0x02, 0x6a,
248 0x01, 0x56, 0xe8, 0x79, 261 0x01, 0x56, 0x02, 0x7a,
249 0xff, 0x97, 0x07, 0x78, 262 0xff, 0x97, 0x07, 0x78,
250 0x13, 0xea, 0x50, 0x59, 263 0x13, 0xea, 0x64, 0x59,
251 0x13, 0xea, 0x04, 0x00, 264 0x13, 0xea, 0x04, 0x00,
252 0x00, 0xe2, 0x06, 0x40, 265 0x00, 0xe2, 0x06, 0x40,
253 0xbf, 0x3a, 0x74, 0x08, 266 0xbf, 0x3a, 0x74, 0x08,
267 0x04, 0x41, 0x08, 0x7a,
254 0x08, 0xea, 0x98, 0x00, 268 0x08, 0xea, 0x98, 0x00,
255 0x08, 0x57, 0xae, 0x00, 269 0x08, 0x57, 0xae, 0x00,
256 0x01, 0x93, 0x69, 0x32, 270 0x01, 0x93, 0x75, 0x32,
257 0x01, 0x94, 0x6b, 0x32, 271 0x01, 0x94, 0x77, 0x32,
258 0x40, 0xea, 0x66, 0x02, 272 0x40, 0xea, 0x72, 0x02,
259 0x08, 0x3c, 0x78, 0x00, 273 0x08, 0x3c, 0x78, 0x00,
260 0x80, 0xea, 0x62, 0x02, 274 0x80, 0xea, 0x6e, 0x02,
261 0x00, 0xe2, 0xb8, 0x5b, 275 0x00, 0xe2, 0xe2, 0x5b,
262 0x01, 0x36, 0xc1, 0x31, 276 0x01, 0x3c, 0xc1, 0x31,
263 0x9f, 0xe0, 0x4c, 0x7c, 277 0x9f, 0xe0, 0x84, 0x7c,
264 0x80, 0xe0, 0x0c, 0x72, 278 0x80, 0xe0, 0x28, 0x72,
265 0xa0, 0xe0, 0x44, 0x72, 279 0xa0, 0xe0, 0x64, 0x72,
266 0xc0, 0xe0, 0x3a, 0x72, 280 0xc0, 0xe0, 0x5a, 0x72,
267 0xe0, 0xe0, 0x74, 0x72, 281 0xe0, 0xe0, 0x94, 0x72,
268 0x01, 0xea, 0x50, 0x59, 282 0x01, 0xea, 0x64, 0x59,
269 0x01, 0xea, 0x04, 0x00, 283 0x01, 0xea, 0x04, 0x00,
270 0x00, 0xe2, 0xf8, 0x41, 284 0x00, 0xe2, 0x14, 0x42,
271 0x80, 0x33, 0x13, 0x7a, 285 0x80, 0x39, 0x2f, 0x7a,
272 0x03, 0xea, 0x50, 0x59, 286 0x03, 0xea, 0x64, 0x59,
273 0x03, 0xea, 0x04, 0x00, 287 0x03, 0xea, 0x04, 0x00,
274 0xee, 0x00, 0x1a, 0x6a, 288 0xee, 0x00, 0x36, 0x6a,
275 0x05, 0xea, 0xb4, 0x00, 289 0x05, 0xea, 0xb4, 0x00,
276 0x33, 0xea, 0x44, 0x59, 290 0x33, 0xea, 0x5e, 0x59,
277 0x33, 0xea, 0x00, 0x00, 291 0x33, 0xea, 0x00, 0x00,
278 0x02, 0xa8, 0x90, 0x32, 292 0x02, 0xa8, 0x9c, 0x32,
279 0x00, 0xe2, 0x6a, 0x59, 293 0x00, 0xe2, 0x7e, 0x59,
280 0xef, 0x96, 0xd5, 0x19, 294 0xef, 0x96, 0xd5, 0x19,
281 0x00, 0xe2, 0x2a, 0x52, 295 0x00, 0xe2, 0x46, 0x52,
282 0x09, 0x80, 0xe1, 0x30, 296 0x09, 0x80, 0xe1, 0x30,
283 0x02, 0xea, 0x36, 0x00, 297 0x02, 0xea, 0x36, 0x00,
284 0xa8, 0xea, 0x32, 0x00, 298 0xa8, 0xea, 0x32, 0x00,
285 0x00, 0xe2, 0x30, 0x42, 299 0x00, 0xe2, 0x4c, 0x42,
286 0x01, 0x96, 0xd1, 0x30, 300 0x01, 0x96, 0xd1, 0x30,
287 0x10, 0x80, 0x89, 0x31, 301 0x10, 0x80, 0x89, 0x31,
288 0x20, 0xea, 0x32, 0x00, 302 0x20, 0xea, 0x32, 0x00,
289 0xbf, 0x33, 0x67, 0x0a, 303 0xbf, 0x39, 0x73, 0x0a,
290 0x20, 0x19, 0x32, 0x6a, 304 0x10, 0x4c, 0x56, 0x6a,
291 0x02, 0x4d, 0xf8, 0x69, 305 0x20, 0x19, 0x4e, 0x6a,
292 0x40, 0x33, 0x67, 0x02, 306 0x20, 0x19, 0x52, 0x6a,
293 0x00, 0xe2, 0xf8, 0x41, 307 0x02, 0x4d, 0x14, 0x6a,
294 0x80, 0x33, 0xb5, 0x6a, 308 0x40, 0x39, 0x73, 0x02,
309 0x00, 0xe2, 0x14, 0x42,
310 0x80, 0x39, 0xd5, 0x6a,
295 0x01, 0x44, 0x10, 0x33, 311 0x01, 0x44, 0x10, 0x33,
296 0x08, 0x92, 0x25, 0x03, 312 0x08, 0x92, 0x25, 0x03,
297 0x00, 0xe2, 0xf8, 0x41, 313 0x00, 0xe2, 0x14, 0x42,
298 0x10, 0xea, 0x80, 0x00, 314 0x10, 0xea, 0x80, 0x00,
299 0x01, 0x31, 0xc5, 0x31, 315 0x01, 0x37, 0xc5, 0x31,
300 0x80, 0xe2, 0x60, 0x62, 316 0x80, 0xe2, 0x80, 0x62,
301 0x10, 0x92, 0x85, 0x6a, 317 0x10, 0x92, 0xa5, 0x6a,
302 0xc0, 0x94, 0xc5, 0x01, 318 0xc0, 0x94, 0xc5, 0x01,
303 0x40, 0x92, 0x51, 0x6a, 319 0x40, 0x92, 0x71, 0x6a,
304 0xbf, 0xe2, 0xc4, 0x09, 320 0xbf, 0xe2, 0xc4, 0x09,
305 0x20, 0x92, 0x65, 0x7a, 321 0x20, 0x92, 0x85, 0x7a,
306 0x01, 0xe2, 0x88, 0x30, 322 0x01, 0xe2, 0x88, 0x30,
307 0x00, 0xe2, 0xb8, 0x5b, 323 0x00, 0xe2, 0xe2, 0x5b,
308 0xa0, 0x36, 0x6d, 0x62, 324 0xa0, 0x3c, 0x8d, 0x62,
309 0x23, 0x92, 0x89, 0x08, 325 0x23, 0x92, 0x89, 0x08,
310 0x00, 0xe2, 0xb8, 0x5b, 326 0x00, 0xe2, 0xe2, 0x5b,
311 0xa0, 0x36, 0x6d, 0x62, 327 0xa0, 0x3c, 0x8d, 0x62,
312 0x00, 0xa8, 0x64, 0x42, 328 0x00, 0xa8, 0x84, 0x42,
313 0xff, 0xe2, 0x64, 0x62, 329 0xff, 0xe2, 0x84, 0x62,
314 0x00, 0xe2, 0x84, 0x42, 330 0x00, 0xe2, 0xa4, 0x42,
315 0x40, 0xea, 0x98, 0x00, 331 0x40, 0xea, 0x98, 0x00,
316 0x01, 0xe2, 0x88, 0x30, 332 0x01, 0xe2, 0x88, 0x30,
317 0x00, 0xe2, 0xb8, 0x5b, 333 0x00, 0xe2, 0xe2, 0x5b,
318 0xa0, 0x36, 0x43, 0x72, 334 0xa0, 0x3c, 0x63, 0x72,
319 0x40, 0xea, 0x98, 0x00, 335 0x40, 0xea, 0x98, 0x00,
320 0x01, 0x31, 0x89, 0x32, 336 0x01, 0x37, 0x95, 0x32,
321 0x08, 0xea, 0x62, 0x02, 337 0x08, 0xea, 0x6e, 0x02,
322 0x00, 0xe2, 0xf8, 0x41, 338 0x00, 0xe2, 0x14, 0x42,
323 0xe0, 0xea, 0xd4, 0x5b, 339 0xe0, 0xea, 0xfe, 0x5b,
324 0x80, 0xe0, 0xc0, 0x6a, 340 0x80, 0xe0, 0xe0, 0x6a,
325 0x04, 0xe0, 0x66, 0x73, 341 0x04, 0xe0, 0x92, 0x73,
326 0x02, 0xe0, 0x96, 0x73, 342 0x02, 0xe0, 0xc4, 0x73,
327 0x00, 0xea, 0x1e, 0x73, 343 0x00, 0xea, 0x3e, 0x73,
328 0x03, 0xe0, 0xa6, 0x73, 344 0x03, 0xe0, 0xd4, 0x73,
329 0x23, 0xe0, 0x96, 0x72, 345 0x23, 0xe0, 0xb6, 0x72,
330 0x08, 0xe0, 0xbc, 0x72, 346 0x08, 0xe0, 0xdc, 0x72,
331 0x00, 0xe2, 0xb8, 0x5b, 347 0x00, 0xe2, 0xe2, 0x5b,
332 0x07, 0xea, 0x50, 0x59, 348 0x07, 0xea, 0x64, 0x59,
333 0x07, 0xea, 0x04, 0x00, 349 0x07, 0xea, 0x04, 0x00,
334 0x08, 0x42, 0xf9, 0x71, 350 0x08, 0x48, 0x15, 0x72,
335 0x04, 0x42, 0x93, 0x62, 351 0x04, 0x48, 0xb3, 0x62,
336 0x01, 0x43, 0x89, 0x30, 352 0x01, 0x49, 0x89, 0x30,
337 0x00, 0xe2, 0x84, 0x42, 353 0x00, 0xe2, 0xa4, 0x42,
338 0x01, 0x44, 0xd4, 0x31, 354 0x01, 0x44, 0xd4, 0x31,
339 0x00, 0xe2, 0x84, 0x42, 355 0x00, 0xe2, 0xa4, 0x42,
340 0x01, 0x00, 0x60, 0x32, 356 0x01, 0x00, 0x6c, 0x32,
341 0x33, 0xea, 0x44, 0x59, 357 0x33, 0xea, 0x5e, 0x59,
342 0x33, 0xea, 0x00, 0x00, 358 0x33, 0xea, 0x00, 0x00,
343 0x4c, 0x34, 0xc1, 0x28, 359 0x4c, 0x3a, 0xc1, 0x28,
344 0x01, 0x64, 0xc0, 0x31, 360 0x01, 0x64, 0xc0, 0x31,
345 0x00, 0x30, 0x45, 0x59, 361 0x00, 0x36, 0x5f, 0x59,
346 0x01, 0x30, 0x01, 0x30, 362 0x01, 0x36, 0x01, 0x30,
347 0x01, 0xe0, 0xba, 0x7a, 363 0x01, 0xe0, 0xda, 0x7a,
348 0xa0, 0xea, 0xca, 0x5b, 364 0xa0, 0xea, 0xf4, 0x5b,
349 0x01, 0xa0, 0xba, 0x62, 365 0x01, 0xa0, 0xda, 0x62,
350 0x01, 0x84, 0xaf, 0x7a, 366 0x01, 0x84, 0xcf, 0x7a,
351 0x01, 0x95, 0xbd, 0x6a, 367 0x01, 0x95, 0xdd, 0x6a,
352 0x05, 0xea, 0x50, 0x59, 368 0x05, 0xea, 0x64, 0x59,
353 0x05, 0xea, 0x04, 0x00, 369 0x05, 0xea, 0x04, 0x00,
354 0x00, 0xe2, 0xbc, 0x42, 370 0x00, 0xe2, 0xdc, 0x42,
355 0x03, 0xea, 0x50, 0x59, 371 0x03, 0xea, 0x64, 0x59,
356 0x03, 0xea, 0x04, 0x00, 372 0x03, 0xea, 0x04, 0x00,
357 0x00, 0xe2, 0xbc, 0x42, 373 0x00, 0xe2, 0xdc, 0x42,
358 0x07, 0xea, 0xdc, 0x5b, 374 0x07, 0xea, 0x06, 0x5c,
359 0x01, 0x44, 0xd4, 0x31, 375 0x01, 0x44, 0xd4, 0x31,
360 0x00, 0xe2, 0xf8, 0x41, 376 0x00, 0xe2, 0x14, 0x42,
361 0x3f, 0xe0, 0x6a, 0x0a, 377 0x3f, 0xe0, 0x76, 0x0a,
362 0xc0, 0x34, 0xc1, 0x09, 378 0xc0, 0x3a, 0xc1, 0x09,
363 0x00, 0x35, 0x51, 0x01, 379 0x00, 0x3b, 0x51, 0x01,
364 0xff, 0xea, 0x52, 0x09, 380 0xff, 0xea, 0x52, 0x09,
365 0x30, 0x34, 0xc5, 0x09, 381 0x30, 0x3a, 0xc5, 0x09,
366 0x3d, 0xe2, 0xc4, 0x29, 382 0x3d, 0xe2, 0xc4, 0x29,
367 0xb8, 0xe2, 0xc4, 0x19, 383 0xb8, 0xe2, 0xc4, 0x19,
368 0x01, 0xea, 0xc6, 0x01, 384 0x01, 0xea, 0xc6, 0x01,
369 0x02, 0xe2, 0xc8, 0x31, 385 0x02, 0xe2, 0xc8, 0x31,
370 0x02, 0xec, 0x40, 0x31, 386 0x02, 0xec, 0x40, 0x31,
371 0xff, 0xa1, 0xdc, 0x72, 387 0xff, 0xa1, 0xfc, 0x72,
372 0x02, 0xe8, 0xda, 0x31, 388 0x02, 0xe8, 0xda, 0x31,
373 0x02, 0xa0, 0x50, 0x31, 389 0x02, 0xa0, 0x50, 0x31,
374 0x00, 0xe2, 0xfe, 0x42, 390 0x00, 0xe2, 0x1e, 0x43,
375 0x80, 0x33, 0x67, 0x02, 391 0x80, 0x39, 0x73, 0x02,
376 0x01, 0x44, 0xd4, 0x31, 392 0x01, 0x44, 0xd4, 0x31,
377 0x00, 0xe2, 0xb8, 0x5b, 393 0x00, 0xe2, 0xe2, 0x5b,
378 0x01, 0x33, 0x67, 0x02, 394 0x01, 0x39, 0x73, 0x02,
379 0xe0, 0x36, 0x19, 0x63, 395 0xe0, 0x3c, 0x39, 0x63,
380 0x02, 0x33, 0x67, 0x02, 396 0x02, 0x39, 0x73, 0x02,
381 0x20, 0x46, 0x12, 0x63, 397 0x20, 0x46, 0x32, 0x63,
382 0xff, 0xea, 0x52, 0x09, 398 0xff, 0xea, 0x52, 0x09,
383 0xa8, 0xea, 0xca, 0x5b, 399 0xa8, 0xea, 0xf4, 0x5b,
384 0x04, 0x92, 0xf9, 0x7a, 400 0x04, 0x92, 0x19, 0x7b,
385 0x01, 0x34, 0xc1, 0x31, 401 0x01, 0x3a, 0xc1, 0x31,
386 0x00, 0x93, 0xf9, 0x62, 402 0x00, 0x93, 0x19, 0x63,
387 0x01, 0x35, 0xc1, 0x31, 403 0x01, 0x3b, 0xc1, 0x31,
388 0x00, 0x94, 0x03, 0x73, 404 0x00, 0x94, 0x23, 0x73,
389 0x01, 0xa9, 0x52, 0x11, 405 0x01, 0xa9, 0x52, 0x11,
390 0xff, 0xa9, 0xee, 0x6a, 406 0xff, 0xa9, 0x0e, 0x6b,
391 0x00, 0xe2, 0x12, 0x43, 407 0x00, 0xe2, 0x32, 0x43,
392 0x10, 0x33, 0x67, 0x02, 408 0x10, 0x39, 0x73, 0x02,
393 0x04, 0x92, 0x13, 0x7b, 409 0x04, 0x92, 0x33, 0x7b,
394 0xfb, 0x92, 0x25, 0x0b, 410 0xfb, 0x92, 0x25, 0x0b,
395 0xff, 0xea, 0x66, 0x0a, 411 0xff, 0xea, 0x72, 0x0a,
396 0x01, 0xa4, 0x0d, 0x6b, 412 0x01, 0xa4, 0x2d, 0x6b,
397 0x02, 0xa8, 0x90, 0x32, 413 0x02, 0xa8, 0x9c, 0x32,
398 0x00, 0xe2, 0x6a, 0x59, 414 0x00, 0xe2, 0x7e, 0x59,
399 0x10, 0x92, 0xbd, 0x7a, 415 0x10, 0x92, 0xdd, 0x7a,
400 0xff, 0xea, 0xdc, 0x5b, 416 0xff, 0xea, 0x06, 0x5c,
401 0x00, 0xe2, 0xbc, 0x42, 417 0x00, 0xe2, 0xdc, 0x42,
402 0x04, 0xea, 0x50, 0x59, 418 0x04, 0xea, 0x64, 0x59,
403 0x04, 0xea, 0x04, 0x00, 419 0x04, 0xea, 0x04, 0x00,
404 0x00, 0xe2, 0xbc, 0x42, 420 0x00, 0xe2, 0xdc, 0x42,
405 0x04, 0xea, 0x50, 0x59, 421 0x04, 0xea, 0x64, 0x59,
406 0x04, 0xea, 0x04, 0x00, 422 0x04, 0xea, 0x04, 0x00,
407 0x00, 0xe2, 0xf8, 0x41, 423 0x00, 0xe2, 0x14, 0x42,
408 0x08, 0x92, 0xb5, 0x7a, 424 0x08, 0x92, 0xd5, 0x7a,
409 0xc0, 0x33, 0x29, 0x7b, 425 0xc0, 0x39, 0x49, 0x7b,
410 0x80, 0x33, 0xb5, 0x6a, 426 0x80, 0x39, 0xd5, 0x6a,
411 0xff, 0x88, 0x29, 0x6b, 427 0xff, 0x88, 0x49, 0x6b,
412 0x40, 0x33, 0xb5, 0x6a, 428 0x40, 0x39, 0xd5, 0x6a,
413 0x10, 0x92, 0x2f, 0x7b, 429 0x10, 0x92, 0x4f, 0x7b,
414 0x0a, 0xea, 0x50, 0x59, 430 0x0a, 0xea, 0x64, 0x59,
415 0x0a, 0xea, 0x04, 0x00, 431 0x0a, 0xea, 0x04, 0x00,
416 0x00, 0xe2, 0x4e, 0x5b, 432 0x00, 0xe2, 0x6e, 0x5b,
417 0x00, 0xe2, 0x82, 0x43, 433 0x00, 0xe2, 0xae, 0x43,
418 0x50, 0x4b, 0x36, 0x6b, 434 0x50, 0x4b, 0x56, 0x6b,
419 0xbf, 0x3a, 0x74, 0x08, 435 0xbf, 0x3a, 0x74, 0x08,
420 0x01, 0xe0, 0xf4, 0x31, 436 0x01, 0xe0, 0xf4, 0x31,
421 0xff, 0xea, 0xc0, 0x09, 437 0xff, 0xea, 0xc0, 0x09,
422 0x01, 0x2e, 0x5d, 0x1a, 438 0x01, 0x32, 0x65, 0x1a,
423 0x00, 0x2f, 0x5f, 0x22, 439 0x00, 0x33, 0x67, 0x22,
424 0x04, 0x47, 0x8f, 0x02, 440 0x04, 0x4d, 0x9b, 0x02,
425 0x01, 0xfa, 0xc0, 0x35, 441 0x01, 0xfa, 0xc0, 0x35,
426 0x02, 0xa8, 0x84, 0x32, 442 0x02, 0xa8, 0x90, 0x32,
427 0x02, 0xea, 0xb4, 0x00, 443 0x02, 0xea, 0xb4, 0x00,
428 0x33, 0xea, 0x44, 0x59, 444 0x33, 0xea, 0x5e, 0x59,
429 0x33, 0xea, 0x00, 0x00, 445 0x33, 0xea, 0x00, 0x00,
430 0x02, 0x42, 0x51, 0x31, 446 0x02, 0x48, 0x51, 0x31,
431 0xff, 0x90, 0x65, 0x68, 447 0xff, 0x90, 0x85, 0x68,
432 0xff, 0x88, 0x5b, 0x6b, 448 0xff, 0x88, 0x7b, 0x6b,
433 0x01, 0xa4, 0x57, 0x6b, 449 0x01, 0xa4, 0x77, 0x6b,
434 0x02, 0xa4, 0x5f, 0x6b, 450 0x02, 0xa4, 0x7f, 0x6b,
435 0x01, 0x84, 0x5f, 0x7b, 451 0x01, 0x84, 0x7f, 0x7b,
436 0x02, 0x28, 0x19, 0x33, 452 0x02, 0x28, 0x19, 0x33,
437 0x02, 0xa8, 0x50, 0x36, 453 0x02, 0xa8, 0x50, 0x36,
438 0xff, 0x88, 0x5f, 0x73, 454 0xff, 0x88, 0x7f, 0x73,
439 0x00, 0xe2, 0x32, 0x5b, 455 0x00, 0xe2, 0x52, 0x5b,
440 0x02, 0xa8, 0x20, 0x33, 456 0x02, 0xa8, 0x20, 0x33,
441 0x02, 0x2c, 0x19, 0x33, 457 0x04, 0xa4, 0x49, 0x03,
458 0xff, 0xea, 0x1a, 0x03,
459 0xff, 0x2d, 0x8b, 0x63,
442 0x02, 0xa8, 0x58, 0x32, 460 0x02, 0xa8, 0x58, 0x32,
443 0x04, 0xa4, 0x49, 0x07, 461 0x02, 0xa8, 0x5c, 0x36,
444 0xc0, 0x33, 0xb5, 0x6a, 462 0x02, 0xa8, 0x40, 0x31,
463 0x02, 0x2e, 0x51, 0x31,
464 0x02, 0xa0, 0x18, 0x33,
465 0x02, 0xa0, 0x5c, 0x36,
466 0xc0, 0x39, 0xd5, 0x6a,
445 0x04, 0x92, 0x25, 0x03, 467 0x04, 0x92, 0x25, 0x03,
446 0x20, 0x92, 0x83, 0x6b, 468 0x20, 0x92, 0xaf, 0x6b,
447 0x02, 0xa8, 0x40, 0x31, 469 0x02, 0xa8, 0x40, 0x31,
448 0xc0, 0x34, 0xc1, 0x09, 470 0xc0, 0x3a, 0xc1, 0x09,
449 0x00, 0x35, 0x51, 0x01, 471 0x00, 0x3b, 0x51, 0x01,
450 0xff, 0xea, 0x52, 0x09, 472 0xff, 0xea, 0x52, 0x09,
451 0x30, 0x34, 0xc5, 0x09, 473 0x30, 0x3a, 0xc5, 0x09,
452 0x3d, 0xe2, 0xc4, 0x29, 474 0x3d, 0xe2, 0xc4, 0x29,
453 0xb8, 0xe2, 0xc4, 0x19, 475 0xb8, 0xe2, 0xc4, 0x19,
454 0x01, 0xea, 0xc6, 0x01, 476 0x01, 0xea, 0xc6, 0x01,
@@ -458,69 +480,75 @@ static uint8_t seqprog[] = {
458 0xf7, 0x57, 0xae, 0x08, 480 0xf7, 0x57, 0xae, 0x08,
459 0x08, 0xea, 0x98, 0x00, 481 0x08, 0xea, 0x98, 0x00,
460 0x01, 0x44, 0xd4, 0x31, 482 0x01, 0x44, 0xd4, 0x31,
461 0xee, 0x00, 0x8c, 0x6b, 483 0xee, 0x00, 0xb8, 0x6b,
462 0x02, 0xea, 0xb4, 0x00, 484 0x02, 0xea, 0xb4, 0x00,
463 0x00, 0xe2, 0xb4, 0x5b, 485 0xc0, 0xea, 0x72, 0x02,
464 0x09, 0x4c, 0x8e, 0x7b, 486 0x09, 0x4c, 0xba, 0x7b,
487 0x01, 0xea, 0x78, 0x02,
465 0x08, 0x4c, 0x06, 0x68, 488 0x08, 0x4c, 0x06, 0x68,
466 0x0b, 0xea, 0x50, 0x59, 489 0x0b, 0xea, 0x64, 0x59,
467 0x0b, 0xea, 0x04, 0x00, 490 0x0b, 0xea, 0x04, 0x00,
468 0x01, 0x44, 0xd4, 0x31, 491 0x01, 0x44, 0xd4, 0x31,
469 0x20, 0x33, 0xf9, 0x79, 492 0x20, 0x39, 0x15, 0x7a,
470 0x00, 0xe2, 0x9e, 0x5b, 493 0x00, 0xe2, 0xcc, 0x5b,
471 0x00, 0xe2, 0xf8, 0x41, 494 0x00, 0xe2, 0x14, 0x42,
472 0x01, 0x84, 0xa3, 0x7b, 495 0x01, 0x84, 0xd1, 0x7b,
473 0x01, 0xa4, 0x49, 0x07, 496 0x01, 0xa4, 0x49, 0x07,
474 0x08, 0x60, 0x30, 0x33, 497 0x08, 0x60, 0x30, 0x33,
475 0x08, 0x80, 0x41, 0x37, 498 0x08, 0x80, 0x41, 0x37,
476 0xdf, 0x33, 0x67, 0x0a, 499 0xdf, 0x39, 0x73, 0x0a,
477 0xee, 0x00, 0xb0, 0x6b, 500 0xee, 0x00, 0xde, 0x6b,
478 0x05, 0xea, 0xb4, 0x00, 501 0x05, 0xea, 0xb4, 0x00,
479 0x33, 0xea, 0x44, 0x59, 502 0x33, 0xea, 0x5e, 0x59,
480 0x33, 0xea, 0x00, 0x00, 503 0x33, 0xea, 0x00, 0x00,
481 0x00, 0xe2, 0x6a, 0x59, 504 0x00, 0xe2, 0x7e, 0x59,
482 0x00, 0xe2, 0xbc, 0x42, 505 0x00, 0xe2, 0xdc, 0x42,
483 0x01, 0xea, 0x6c, 0x02, 506 0xff, 0x42, 0xee, 0x6b,
484 0xc0, 0xea, 0x66, 0x06, 507 0x01, 0x41, 0xe2, 0x6b,
485 0xff, 0x42, 0xc4, 0x6b, 508 0x02, 0x41, 0xe2, 0x7b,
486 0x01, 0x41, 0xb8, 0x6b, 509 0xff, 0x42, 0xee, 0x6b,
487 0x02, 0x41, 0xb8, 0x7b, 510 0x01, 0x41, 0xe2, 0x6b,
488 0xff, 0x42, 0xc4, 0x6b, 511 0x02, 0x41, 0xe2, 0x7b,
489 0x01, 0x41, 0xb8, 0x6b, 512 0xff, 0x42, 0xee, 0x7b,
490 0x02, 0x41, 0xb8, 0x7b, 513 0x04, 0x4c, 0xe2, 0x6b,
491 0xff, 0x42, 0xc4, 0x7b, 514 0xe0, 0x41, 0x78, 0x0e,
492 0x04, 0x4c, 0xb8, 0x6b,
493 0xe0, 0x41, 0x6c, 0x0e,
494 0x01, 0x44, 0xd4, 0x31, 515 0x01, 0x44, 0xd4, 0x31,
495 0xff, 0x42, 0xcc, 0x7b, 516 0xff, 0x42, 0xf6, 0x7b,
496 0x04, 0x4c, 0xcc, 0x6b, 517 0x04, 0x4c, 0xf6, 0x6b,
497 0xe0, 0x41, 0x6c, 0x0a, 518 0xe0, 0x41, 0x78, 0x0a,
498 0xe0, 0x36, 0xf9, 0x61, 519 0xe0, 0x3c, 0x15, 0x62,
499 0xff, 0xea, 0xca, 0x09, 520 0xff, 0xea, 0xca, 0x09,
500 0x01, 0xe2, 0xc8, 0x31, 521 0x01, 0xe2, 0xc8, 0x31,
501 0x01, 0x46, 0xda, 0x35, 522 0x01, 0x46, 0xda, 0x35,
502 0x01, 0x44, 0xd4, 0x35, 523 0x01, 0x44, 0xd4, 0x35,
503 0x10, 0xea, 0x80, 0x00, 524 0x10, 0xea, 0x80, 0x00,
504 0x01, 0xe2, 0x62, 0x36, 525 0x01, 0xe2, 0x6e, 0x36,
505 0x04, 0xa6, 0xe4, 0x7b, 526 0x04, 0xa6, 0x0e, 0x7c,
506 0xff, 0xea, 0x5a, 0x09, 527 0xff, 0xea, 0x5a, 0x09,
507 0xff, 0xea, 0x4c, 0x0d, 528 0xff, 0xea, 0x4c, 0x0d,
508 0x01, 0xa6, 0x02, 0x6c, 529 0x01, 0xa6, 0x3a, 0x6c,
509 0x10, 0xad, 0x64, 0x78, 530 0x10, 0xad, 0x84, 0x78,
510 0x80, 0xad, 0xfa, 0x6b, 531 0x80, 0xad, 0x32, 0x6c,
511 0x08, 0xad, 0x64, 0x68, 532 0x08, 0xad, 0x84, 0x68,
533 0x20, 0x19, 0x26, 0x7c,
534 0x80, 0xea, 0xb2, 0x01,
535 0x11, 0x00, 0x00, 0x10,
536 0x02, 0xa6, 0x22, 0x7c,
537 0xff, 0xea, 0xb2, 0x0d,
538 0x11, 0x00, 0x00, 0x10,
539 0xff, 0xea, 0xb2, 0x09,
512 0x04, 0x84, 0xf9, 0x30, 540 0x04, 0x84, 0xf9, 0x30,
513 0x00, 0xea, 0x08, 0x81, 541 0x00, 0xea, 0x08, 0x81,
514 0xff, 0xea, 0xd4, 0x09, 542 0xff, 0xea, 0xd4, 0x09,
515 0x02, 0x84, 0xf9, 0x88, 543 0x02, 0x84, 0xf9, 0x88,
516 0x0d, 0xea, 0x5a, 0x01, 544 0x0d, 0xea, 0x5a, 0x01,
517 0x04, 0xa6, 0x4c, 0x05, 545 0x04, 0xa6, 0x4c, 0x05,
518 0x04, 0xa6, 0x64, 0x78, 546 0x04, 0xa6, 0x84, 0x78,
519 0xff, 0xea, 0x5a, 0x09, 547 0xff, 0xea, 0x5a, 0x09,
520 0x03, 0x84, 0x59, 0x89, 548 0x03, 0x84, 0x59, 0x89,
521 0x03, 0xea, 0x4c, 0x01, 549 0x03, 0xea, 0x4c, 0x01,
522 0x80, 0x1a, 0x64, 0x78, 550 0x80, 0x1a, 0x84, 0x78,
523 0x08, 0x19, 0x64, 0x78, 551 0x08, 0x19, 0x84, 0x78,
524 0x08, 0xb0, 0xe0, 0x30, 552 0x08, 0xb0, 0xe0, 0x30,
525 0x04, 0xb0, 0xe0, 0x30, 553 0x04, 0xb0, 0xe0, 0x30,
526 0x03, 0xb0, 0xf0, 0x30, 554 0x03, 0xb0, 0xf0, 0x30,
@@ -533,259 +561,259 @@ static uint8_t seqprog[] = {
533 0x00, 0x86, 0x0d, 0x23, 561 0x00, 0x86, 0x0d, 0x23,
534 0x00, 0x87, 0x0f, 0x23, 562 0x00, 0x87, 0x0f, 0x23,
535 0x01, 0x84, 0xc5, 0x31, 563 0x01, 0x84, 0xc5, 0x31,
536 0x80, 0x83, 0x25, 0x7c, 564 0x80, 0x83, 0x5d, 0x7c,
537 0x02, 0xe2, 0xc4, 0x01, 565 0x02, 0xe2, 0xc4, 0x01,
538 0xff, 0xea, 0x4c, 0x09, 566 0xff, 0xea, 0x4c, 0x09,
539 0x01, 0xe2, 0x36, 0x30, 567 0x01, 0xe2, 0x36, 0x30,
540 0xc8, 0x19, 0x32, 0x00, 568 0xc8, 0x19, 0x32, 0x00,
541 0x88, 0x19, 0x32, 0x00, 569 0x88, 0x19, 0x32, 0x00,
542 0x01, 0xac, 0xd4, 0x99, 570 0x01, 0xac, 0xd4, 0x99,
543 0x00, 0xe2, 0x64, 0x50, 571 0x00, 0xe2, 0x84, 0x50,
544 0xfe, 0xa6, 0x4c, 0x0d, 572 0xfe, 0xa6, 0x4c, 0x0d,
545 0x0b, 0x98, 0xe1, 0x30, 573 0x0b, 0x98, 0xe1, 0x30,
546 0xfd, 0xa4, 0x49, 0x09, 574 0xfd, 0xa4, 0x49, 0x09,
547 0x80, 0xa3, 0x39, 0x7c, 575 0x80, 0xa3, 0x71, 0x7c,
548 0x02, 0xa4, 0x48, 0x01, 576 0x02, 0xa4, 0x48, 0x01,
549 0x01, 0xa4, 0x36, 0x30, 577 0x01, 0xa4, 0x36, 0x30,
550 0xa8, 0xea, 0x32, 0x00, 578 0xa8, 0xea, 0x32, 0x00,
551 0xfd, 0xa4, 0x49, 0x0b, 579 0xfd, 0xa4, 0x49, 0x0b,
552 0x05, 0xa3, 0x07, 0x33, 580 0x05, 0xa3, 0x07, 0x33,
553 0x80, 0x83, 0x45, 0x6c, 581 0x80, 0x83, 0x7d, 0x6c,
554 0x02, 0xea, 0x4c, 0x05, 582 0x02, 0xea, 0x4c, 0x05,
555 0xff, 0xea, 0x4c, 0x0d, 583 0xff, 0xea, 0x4c, 0x0d,
556 0x00, 0xe2, 0x3e, 0x59, 584 0x00, 0xe2, 0x56, 0x59,
557 0x02, 0xa6, 0xe6, 0x6b, 585 0x02, 0xa6, 0x10, 0x6c,
558 0x80, 0xf9, 0xf2, 0x05, 586 0x80, 0xf9, 0xf2, 0x05,
559 0xc0, 0x33, 0x53, 0x7c, 587 0xc0, 0x39, 0x8b, 0x7c,
560 0x03, 0xea, 0x50, 0x59, 588 0x03, 0xea, 0x64, 0x59,
561 0x03, 0xea, 0x04, 0x00, 589 0x03, 0xea, 0x04, 0x00,
562 0x20, 0x33, 0x77, 0x7c, 590 0x20, 0x39, 0xaf, 0x7c,
563 0x01, 0x84, 0x5d, 0x6c, 591 0x01, 0x84, 0x95, 0x6c,
564 0x06, 0xea, 0x50, 0x59, 592 0x06, 0xea, 0x64, 0x59,
565 0x06, 0xea, 0x04, 0x00, 593 0x06, 0xea, 0x04, 0x00,
566 0x00, 0xe2, 0x7a, 0x44, 594 0x00, 0xe2, 0xb2, 0x44,
567 0x01, 0x00, 0x60, 0x32, 595 0x01, 0x00, 0x6c, 0x32,
568 0xee, 0x00, 0x66, 0x6c, 596 0xee, 0x00, 0x9e, 0x6c,
569 0x05, 0xea, 0xb4, 0x00, 597 0x05, 0xea, 0xb4, 0x00,
570 0x33, 0xea, 0x44, 0x59, 598 0x33, 0xea, 0x5e, 0x59,
571 0x33, 0xea, 0x00, 0x00, 599 0x33, 0xea, 0x00, 0x00,
572 0x80, 0x3d, 0x7a, 0x00, 600 0x80, 0x3d, 0x7a, 0x00,
573 0xfc, 0x42, 0x68, 0x7c, 601 0xfc, 0x42, 0xa0, 0x7c,
574 0x7f, 0x3d, 0x7a, 0x08, 602 0x7f, 0x3d, 0x7a, 0x08,
575 0x00, 0x30, 0x45, 0x59, 603 0x00, 0x36, 0x5f, 0x59,
576 0x01, 0x30, 0x01, 0x30, 604 0x01, 0x36, 0x01, 0x30,
577 0x09, 0xea, 0x50, 0x59, 605 0x09, 0xea, 0x64, 0x59,
578 0x09, 0xea, 0x04, 0x00, 606 0x09, 0xea, 0x04, 0x00,
579 0x00, 0xe2, 0xf8, 0x41, 607 0x00, 0xe2, 0x14, 0x42,
580 0x01, 0xa4, 0x5d, 0x6c, 608 0x01, 0xa4, 0x95, 0x6c,
581 0x00, 0xe2, 0x30, 0x5c, 609 0x00, 0xe2, 0x68, 0x5c,
582 0x20, 0x33, 0x67, 0x02, 610 0x20, 0x39, 0x73, 0x02,
583 0x01, 0x00, 0x60, 0x32, 611 0x01, 0x00, 0x6c, 0x32,
584 0x02, 0xa6, 0x82, 0x7c, 612 0x02, 0xa6, 0xba, 0x7c,
585 0x00, 0xe2, 0x46, 0x5c, 613 0x00, 0xe2, 0x7e, 0x5c,
586 0x00, 0xe2, 0x56, 0x58, 614 0x00, 0xe2, 0x76, 0x58,
587 0x00, 0xe2, 0x66, 0x58, 615 0x00, 0xe2, 0x86, 0x58,
588 0x00, 0xe2, 0x3a, 0x58, 616 0x00, 0xe2, 0x5a, 0x58,
589 0x00, 0x30, 0x45, 0x59, 617 0x00, 0x36, 0x5f, 0x59,
590 0x01, 0x30, 0x01, 0x30, 618 0x01, 0x36, 0x01, 0x30,
591 0x20, 0x19, 0x82, 0x6c, 619 0x20, 0x19, 0xba, 0x6c,
592 0x00, 0xe2, 0xb2, 0x5c, 620 0x00, 0xe2, 0xea, 0x5c,
593 0x04, 0x19, 0x9c, 0x6c, 621 0x04, 0x19, 0xd4, 0x6c,
594 0x02, 0x19, 0x32, 0x00, 622 0x02, 0x19, 0x32, 0x00,
595 0x01, 0x84, 0x9d, 0x7c, 623 0x01, 0x84, 0xd5, 0x7c,
596 0x01, 0x1b, 0x96, 0x7c, 624 0x01, 0x1b, 0xce, 0x7c,
597 0x01, 0x1a, 0x9c, 0x6c, 625 0x01, 0x1a, 0xd4, 0x6c,
598 0x00, 0xe2, 0x4c, 0x44, 626 0x00, 0xe2, 0x84, 0x44,
599 0x80, 0x4b, 0xa2, 0x6c, 627 0x80, 0x4b, 0xda, 0x6c,
600 0x01, 0x4c, 0x9e, 0x7c, 628 0x01, 0x4c, 0xd6, 0x7c,
601 0x03, 0x42, 0x4c, 0x6c, 629 0x03, 0x42, 0x84, 0x6c,
602 0x00, 0xe2, 0xe0, 0x5b, 630 0x00, 0xe2, 0x0a, 0x5c,
603 0x80, 0xf9, 0xf2, 0x01, 631 0x80, 0xf9, 0xf2, 0x01,
604 0x04, 0x33, 0xf9, 0x79, 632 0x04, 0x39, 0x15, 0x7a,
605 0x00, 0xe2, 0xf8, 0x41, 633 0x00, 0xe2, 0x14, 0x42,
606 0x08, 0x5d, 0xba, 0x6c, 634 0x08, 0x5d, 0xf2, 0x6c,
607 0x00, 0xe2, 0x56, 0x58, 635 0x00, 0xe2, 0x76, 0x58,
608 0x00, 0x30, 0x45, 0x59, 636 0x00, 0x36, 0x5f, 0x59,
609 0x01, 0x30, 0x01, 0x30, 637 0x01, 0x36, 0x01, 0x30,
610 0x02, 0x1b, 0xaa, 0x7c, 638 0x02, 0x1b, 0xe2, 0x7c,
611 0x08, 0x5d, 0xb8, 0x7c, 639 0x08, 0x5d, 0xf0, 0x7c,
612 0x03, 0x68, 0x00, 0x37, 640 0x03, 0x68, 0x00, 0x37,
613 0x01, 0x84, 0x09, 0x07, 641 0x01, 0x84, 0x09, 0x07,
614 0x80, 0x1b, 0xc4, 0x7c, 642 0x80, 0x1b, 0xfc, 0x7c,
615 0x80, 0x84, 0xc5, 0x6c, 643 0x80, 0x84, 0xfd, 0x6c,
616 0xff, 0x85, 0x0b, 0x1b, 644 0xff, 0x85, 0x0b, 0x1b,
617 0xff, 0x86, 0x0d, 0x23, 645 0xff, 0x86, 0x0d, 0x23,
618 0xff, 0x87, 0x0f, 0x23, 646 0xff, 0x87, 0x0f, 0x23,
619 0xf8, 0x1b, 0x08, 0x0b, 647 0xf8, 0x1b, 0x08, 0x0b,
620 0xff, 0xea, 0x06, 0x0b, 648 0xff, 0xea, 0x06, 0x0b,
621 0x03, 0x68, 0x00, 0x37, 649 0x03, 0x68, 0x00, 0x37,
622 0x00, 0xe2, 0xc4, 0x58, 650 0x00, 0xe2, 0xd6, 0x58,
623 0x10, 0xea, 0x18, 0x00, 651 0x10, 0xea, 0x18, 0x00,
624 0xf9, 0xd9, 0xb2, 0x0d, 652 0xf9, 0xd9, 0xb2, 0x0d,
625 0x01, 0xd9, 0xb2, 0x05, 653 0x01, 0xd9, 0xb2, 0x05,
626 0x01, 0x52, 0x48, 0x31, 654 0x01, 0x52, 0x48, 0x31,
627 0x20, 0xa4, 0xee, 0x7c, 655 0x20, 0xa4, 0x26, 0x7d,
628 0x20, 0x5b, 0xee, 0x7c, 656 0x20, 0x5b, 0x26, 0x7d,
629 0x80, 0xf9, 0xfc, 0x7c, 657 0x80, 0xf9, 0x34, 0x7d,
630 0x02, 0xea, 0xb4, 0x00, 658 0x02, 0xea, 0xb4, 0x00,
631 0x11, 0x00, 0x00, 0x10, 659 0x11, 0x00, 0x00, 0x10,
632 0x04, 0x19, 0x08, 0x7d, 660 0x04, 0x19, 0x40, 0x7d,
633 0xdf, 0x19, 0x32, 0x08, 661 0xdf, 0x19, 0x32, 0x08,
634 0x60, 0x5b, 0xe6, 0x6c, 662 0x60, 0x5b, 0x40, 0x6d,
635 0x01, 0x4c, 0xe2, 0x7c, 663 0x01, 0x4c, 0x1a, 0x7d,
636 0x20, 0x19, 0x32, 0x00, 664 0x20, 0x19, 0x32, 0x00,
637 0x01, 0xd9, 0xb2, 0x05, 665 0x01, 0xd9, 0xb2, 0x05,
638 0x02, 0xea, 0xb4, 0x00, 666 0x02, 0xea, 0xb4, 0x00,
639 0x01, 0xd9, 0xb2, 0x05, 667 0x01, 0xd9, 0xb2, 0x05,
640 0x10, 0x5b, 0x00, 0x6d, 668 0x10, 0x5b, 0x38, 0x6d,
641 0x08, 0x5b, 0x0a, 0x6d, 669 0x08, 0x5b, 0x42, 0x6d,
642 0x20, 0x5b, 0xfa, 0x6c, 670 0x20, 0x5b, 0x32, 0x6d,
643 0x02, 0x5b, 0x2a, 0x6d, 671 0x02, 0x5b, 0x62, 0x6d,
644 0x0e, 0xea, 0x50, 0x59, 672 0x0e, 0xea, 0x64, 0x59,
645 0x0e, 0xea, 0x04, 0x00, 673 0x0e, 0xea, 0x04, 0x00,
646 0x80, 0xf9, 0xea, 0x6c, 674 0x80, 0xf9, 0x22, 0x6d,
647 0xdf, 0x5c, 0xb8, 0x08, 675 0xdf, 0x5c, 0xb8, 0x08,
648 0x01, 0xd9, 0xb2, 0x05, 676 0x01, 0xd9, 0xb2, 0x05,
649 0x01, 0xa4, 0xe5, 0x6d, 677 0x01, 0xa4, 0x1d, 0x6e,
650 0x00, 0xe2, 0x30, 0x5c, 678 0x00, 0xe2, 0x68, 0x5c,
651 0x00, 0xe2, 0x34, 0x5d, 679 0x00, 0xe2, 0x6c, 0x5d,
652 0x01, 0x90, 0x21, 0x1b, 680 0x01, 0x90, 0x21, 0x1b,
653 0x01, 0xd9, 0xb2, 0x05, 681 0x01, 0xd9, 0xb2, 0x05,
654 0x00, 0xe2, 0x32, 0x5b, 682 0x00, 0xe2, 0x52, 0x5b,
655 0xf3, 0x96, 0xd5, 0x19, 683 0xf3, 0x96, 0xd5, 0x19,
656 0x00, 0xe2, 0x18, 0x55, 684 0x00, 0xe2, 0x50, 0x55,
657 0x80, 0x96, 0x19, 0x6d, 685 0x80, 0x96, 0x51, 0x6d,
658 0x0f, 0xea, 0x50, 0x59, 686 0x0f, 0xea, 0x64, 0x59,
659 0x0f, 0xea, 0x04, 0x00, 687 0x0f, 0xea, 0x04, 0x00,
660 0x00, 0xe2, 0x20, 0x45, 688 0x00, 0xe2, 0x58, 0x45,
661 0x04, 0x8c, 0xe1, 0x30, 689 0x04, 0x8c, 0xe1, 0x30,
662 0x01, 0xea, 0xf2, 0x00, 690 0x01, 0xea, 0xf2, 0x00,
663 0x02, 0xea, 0x36, 0x00, 691 0x02, 0xea, 0x36, 0x00,
664 0xa8, 0xea, 0x32, 0x00, 692 0xa8, 0xea, 0x32, 0x00,
665 0xff, 0x97, 0x27, 0x7d, 693 0xff, 0x97, 0x5f, 0x7d,
666 0x14, 0xea, 0x50, 0x59, 694 0x14, 0xea, 0x64, 0x59,
667 0x14, 0xea, 0x04, 0x00, 695 0x14, 0xea, 0x04, 0x00,
668 0x00, 0xe2, 0x96, 0x5d, 696 0x00, 0xe2, 0xce, 0x5d,
669 0x01, 0xd9, 0xb2, 0x05, 697 0x01, 0xd9, 0xb2, 0x05,
670 0x09, 0x80, 0xe1, 0x30, 698 0x09, 0x80, 0xe1, 0x30,
671 0x02, 0xea, 0x36, 0x00, 699 0x02, 0xea, 0x36, 0x00,
672 0xa8, 0xea, 0x32, 0x00, 700 0xa8, 0xea, 0x32, 0x00,
673 0x00, 0xe2, 0x8e, 0x5d, 701 0x00, 0xe2, 0xc6, 0x5d,
674 0x01, 0xd9, 0xb2, 0x05, 702 0x01, 0xd9, 0xb2, 0x05,
675 0x02, 0xa6, 0x44, 0x7d, 703 0x02, 0xa6, 0x7c, 0x7d,
676 0x00, 0xe2, 0x3e, 0x59, 704 0x00, 0xe2, 0x56, 0x59,
677 0x20, 0x5b, 0x52, 0x6d, 705 0x20, 0x5b, 0x8a, 0x6d,
678 0xfc, 0x42, 0x3e, 0x7d, 706 0xfc, 0x42, 0x76, 0x7d,
679 0x10, 0x40, 0x40, 0x6d, 707 0x10, 0x40, 0x78, 0x6d,
680 0x20, 0x4d, 0x42, 0x7d, 708 0x20, 0x4d, 0x7a, 0x7d,
681 0x08, 0x5d, 0x52, 0x6d, 709 0x08, 0x5d, 0x8a, 0x6d,
682 0x02, 0xa6, 0xe6, 0x6b, 710 0x02, 0xa6, 0x10, 0x6c,
683 0x00, 0xe2, 0x3e, 0x59, 711 0x00, 0xe2, 0x56, 0x59,
684 0x20, 0x5b, 0x52, 0x6d, 712 0x20, 0x5b, 0x8a, 0x6d,
685 0x01, 0x1b, 0x72, 0x6d, 713 0x01, 0x1b, 0xaa, 0x6d,
686 0xfc, 0x42, 0x4e, 0x7d, 714 0xfc, 0x42, 0x86, 0x7d,
687 0x10, 0x40, 0x50, 0x6d, 715 0x10, 0x40, 0x88, 0x6d,
688 0x20, 0x4d, 0x64, 0x78, 716 0x20, 0x4d, 0x84, 0x78,
689 0x08, 0x5d, 0x64, 0x78, 717 0x08, 0x5d, 0x84, 0x78,
690 0x02, 0x19, 0x32, 0x00, 718 0x02, 0x19, 0x32, 0x00,
691 0x01, 0x5b, 0x40, 0x31, 719 0x01, 0x5b, 0x40, 0x31,
692 0x00, 0xe2, 0xb2, 0x5c, 720 0x00, 0xe2, 0xea, 0x5c,
693 0x00, 0xe2, 0x9e, 0x5b, 721 0x00, 0xe2, 0xcc, 0x5b,
694 0x20, 0xea, 0xb6, 0x00, 722 0x20, 0xea, 0xb6, 0x00,
695 0x00, 0xe2, 0xe0, 0x5b, 723 0x00, 0xe2, 0x0a, 0x5c,
696 0x20, 0x5c, 0xb8, 0x00, 724 0x20, 0x5c, 0xb8, 0x00,
697 0x04, 0x19, 0x68, 0x6d, 725 0x04, 0x19, 0xa0, 0x6d,
698 0x01, 0x1a, 0x68, 0x6d, 726 0x01, 0x1a, 0xa0, 0x6d,
699 0x00, 0xe2, 0x3e, 0x59, 727 0x00, 0xe2, 0x56, 0x59,
700 0x01, 0x1a, 0x64, 0x78, 728 0x01, 0x1a, 0x84, 0x78,
701 0x80, 0xf9, 0xf2, 0x01, 729 0x80, 0xf9, 0xf2, 0x01,
702 0x20, 0xa0, 0xcc, 0x7d, 730 0x20, 0xa0, 0x04, 0x7e,
703 0xff, 0x90, 0x21, 0x1b, 731 0xff, 0x90, 0x21, 0x1b,
704 0x08, 0x92, 0x43, 0x6b, 732 0x08, 0x92, 0x63, 0x6b,
705 0x02, 0xea, 0xb4, 0x04, 733 0x02, 0xea, 0xb4, 0x04,
706 0x01, 0xa4, 0x49, 0x03, 734 0x01, 0xa4, 0x49, 0x03,
707 0x40, 0x5b, 0x82, 0x6d, 735 0x40, 0x5b, 0xba, 0x6d,
708 0x00, 0xe2, 0x3e, 0x59, 736 0x00, 0xe2, 0x56, 0x59,
709 0x40, 0x5b, 0x82, 0x6d, 737 0x40, 0x5b, 0xba, 0x6d,
710 0x04, 0x5d, 0xe6, 0x7d, 738 0x04, 0x5d, 0x1e, 0x7e,
711 0x01, 0x1a, 0xe6, 0x7d, 739 0x01, 0x1a, 0x1e, 0x7e,
712 0x20, 0x4d, 0x64, 0x78, 740 0x20, 0x4d, 0x84, 0x78,
713 0x40, 0x5b, 0xcc, 0x7d, 741 0x40, 0x5b, 0x04, 0x7e,
714 0x04, 0x5d, 0xe6, 0x7d, 742 0x04, 0x5d, 0x1e, 0x7e,
715 0x01, 0x1a, 0xe6, 0x7d, 743 0x01, 0x1a, 0x1e, 0x7e,
716 0x80, 0xf9, 0xf2, 0x01, 744 0x80, 0xf9, 0xf2, 0x01,
717 0xff, 0x90, 0x21, 0x1b, 745 0xff, 0x90, 0x21, 0x1b,
718 0x08, 0x92, 0x43, 0x6b, 746 0x08, 0x92, 0x63, 0x6b,
719 0x02, 0xea, 0xb4, 0x04, 747 0x02, 0xea, 0xb4, 0x04,
720 0x00, 0xe2, 0x3e, 0x59, 748 0x00, 0xe2, 0x56, 0x59,
721 0x01, 0x1b, 0x64, 0x78, 749 0x01, 0x1b, 0x84, 0x78,
722 0x80, 0xf9, 0xf2, 0x01, 750 0x80, 0xf9, 0xf2, 0x01,
723 0x02, 0xea, 0xb4, 0x04, 751 0x02, 0xea, 0xb4, 0x04,
724 0x00, 0xe2, 0x3e, 0x59, 752 0x00, 0xe2, 0x56, 0x59,
725 0x01, 0x1b, 0xaa, 0x6d, 753 0x01, 0x1b, 0xe2, 0x6d,
726 0x40, 0x5b, 0xb8, 0x7d, 754 0x40, 0x5b, 0xf0, 0x7d,
727 0x01, 0x1b, 0xaa, 0x6d, 755 0x01, 0x1b, 0xe2, 0x6d,
728 0x02, 0x19, 0x32, 0x00, 756 0x02, 0x19, 0x32, 0x00,
729 0x01, 0x1a, 0x64, 0x78, 757 0x01, 0x1a, 0x84, 0x78,
730 0x80, 0xf9, 0xf2, 0x01, 758 0x80, 0xf9, 0xf2, 0x01,
731 0xff, 0xea, 0x10, 0x03, 759 0xff, 0xea, 0x10, 0x03,
732 0x08, 0x92, 0x25, 0x03, 760 0x08, 0x92, 0x25, 0x03,
733 0x00, 0xe2, 0x42, 0x43, 761 0x00, 0xe2, 0x62, 0x43,
734 0x01, 0x1a, 0xb4, 0x7d, 762 0x01, 0x1a, 0xec, 0x7d,
735 0x40, 0x5b, 0xb0, 0x7d, 763 0x40, 0x5b, 0xe8, 0x7d,
736 0x01, 0x1a, 0x9e, 0x6d, 764 0x01, 0x1a, 0xd6, 0x6d,
737 0xfc, 0x42, 0x64, 0x78, 765 0xfc, 0x42, 0x84, 0x78,
738 0x01, 0x1a, 0xb8, 0x6d, 766 0x01, 0x1a, 0xf0, 0x6d,
739 0x10, 0xea, 0x50, 0x59, 767 0x10, 0xea, 0x64, 0x59,
740 0x10, 0xea, 0x04, 0x00, 768 0x10, 0xea, 0x04, 0x00,
741 0xfc, 0x42, 0x64, 0x78, 769 0xfc, 0x42, 0x84, 0x78,
742 0x10, 0x40, 0xbe, 0x6d, 770 0x10, 0x40, 0xf6, 0x6d,
743 0x20, 0x4d, 0x64, 0x78, 771 0x20, 0x4d, 0x84, 0x78,
744 0x40, 0x5b, 0x9e, 0x6d, 772 0x40, 0x5b, 0xd6, 0x6d,
745 0x01, 0x1a, 0x64, 0x78, 773 0x01, 0x1a, 0x84, 0x78,
746 0x01, 0x90, 0x21, 0x1b, 774 0x01, 0x90, 0x21, 0x1b,
747 0x30, 0x3f, 0xc0, 0x09, 775 0x30, 0x3f, 0xc0, 0x09,
748 0x30, 0xe0, 0x64, 0x60, 776 0x30, 0xe0, 0x84, 0x60,
749 0x40, 0x4b, 0x64, 0x68, 777 0x40, 0x4b, 0x84, 0x68,
750 0xff, 0xea, 0x52, 0x01, 778 0xff, 0xea, 0x52, 0x01,
751 0xee, 0x00, 0xd2, 0x6d, 779 0xee, 0x00, 0x0c, 0x6e,
752 0x80, 0xf9, 0xf2, 0x01, 780 0x80, 0xf9, 0xf2, 0x01,
753 0xff, 0x90, 0x21, 0x1b, 781 0xff, 0x90, 0x21, 0x1b,
754 0x02, 0xea, 0xb4, 0x00, 782 0x02, 0xea, 0xb4, 0x00,
755 0x20, 0xea, 0x9a, 0x00, 783 0x20, 0xea, 0x9a, 0x00,
756 0xf3, 0x42, 0xde, 0x6d, 784 0xf3, 0x42, 0x16, 0x6e,
757 0x12, 0xea, 0x50, 0x59, 785 0x12, 0xea, 0x64, 0x59,
758 0x12, 0xea, 0x04, 0x00, 786 0x12, 0xea, 0x04, 0x00,
759 0x00, 0xe2, 0xf8, 0x41, 787 0x00, 0xe2, 0x14, 0x42,
760 0x0d, 0xea, 0x50, 0x59, 788 0x0d, 0xea, 0x64, 0x59,
761 0x0d, 0xea, 0x04, 0x00, 789 0x0d, 0xea, 0x04, 0x00,
762 0x00, 0xe2, 0xf8, 0x41, 790 0x00, 0xe2, 0x14, 0x42,
763 0x01, 0x90, 0x21, 0x1b, 791 0x01, 0x90, 0x21, 0x1b,
764 0x11, 0xea, 0x50, 0x59, 792 0x11, 0xea, 0x64, 0x59,
765 0x11, 0xea, 0x04, 0x00, 793 0x11, 0xea, 0x04, 0x00,
766 0x00, 0xe2, 0x32, 0x5b, 794 0x00, 0xe2, 0x52, 0x5b,
767 0x08, 0x5a, 0xb4, 0x00, 795 0x08, 0x5a, 0xb4, 0x00,
768 0x00, 0xe2, 0x0c, 0x5e, 796 0x00, 0xe2, 0x44, 0x5e,
769 0xa8, 0xea, 0x32, 0x00, 797 0xa8, 0xea, 0x32, 0x00,
770 0x00, 0xe2, 0x3e, 0x59, 798 0x00, 0xe2, 0x56, 0x59,
771 0x80, 0x1a, 0xfa, 0x7d, 799 0x80, 0x1a, 0x32, 0x7e,
772 0x00, 0xe2, 0x0c, 0x5e, 800 0x00, 0xe2, 0x44, 0x5e,
773 0x80, 0x19, 0x32, 0x00, 801 0x80, 0x19, 0x32, 0x00,
774 0x40, 0x5b, 0x00, 0x6e, 802 0x40, 0x5b, 0x38, 0x6e,
775 0x08, 0x5a, 0x00, 0x7e, 803 0x08, 0x5a, 0x38, 0x7e,
776 0x20, 0x4d, 0x64, 0x78, 804 0x20, 0x4d, 0x84, 0x78,
777 0x02, 0x84, 0x09, 0x03, 805 0x02, 0x84, 0x09, 0x03,
778 0x40, 0x5b, 0xcc, 0x7d, 806 0x40, 0x5b, 0x04, 0x7e,
779 0xff, 0x90, 0x21, 0x1b, 807 0xff, 0x90, 0x21, 0x1b,
780 0x80, 0xf9, 0xf2, 0x01, 808 0x80, 0xf9, 0xf2, 0x01,
781 0x08, 0x92, 0x43, 0x6b, 809 0x08, 0x92, 0x63, 0x6b,
782 0x02, 0xea, 0xb4, 0x04, 810 0x02, 0xea, 0xb4, 0x04,
783 0x01, 0x38, 0xe1, 0x30, 811 0x01, 0x40, 0xe1, 0x30,
784 0x05, 0x39, 0xe3, 0x98, 812 0x05, 0x41, 0xe3, 0x98,
785 0x01, 0xe0, 0xf4, 0x31, 813 0x01, 0xe0, 0xf4, 0x31,
786 0xff, 0xea, 0xc0, 0x09, 814 0xff, 0xea, 0xc0, 0x09,
787 0x00, 0x3a, 0xe5, 0x20, 815 0x00, 0x42, 0xe5, 0x20,
788 0x00, 0x3b, 0xe7, 0x20, 816 0x00, 0x43, 0xe7, 0x20,
789 0x01, 0xfa, 0xc0, 0x31, 817 0x01, 0xfa, 0xc0, 0x31,
790 0x04, 0xea, 0xe8, 0x30, 818 0x04, 0xea, 0xe8, 0x30,
791 0xff, 0xea, 0xf0, 0x08, 819 0xff, 0xea, 0xf0, 0x08,
@@ -794,12 +822,20 @@ static uint8_t seqprog[] = {
794}; 822};
795 823
796typedef int ahd_patch_func_t (struct ahd_softc *ahd); 824typedef int ahd_patch_func_t (struct ahd_softc *ahd);
825static ahd_patch_func_t ahd_patch23_func;
826
827static int
828ahd_patch23_func(struct ahd_softc *ahd)
829{
830 return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0);
831}
832
797static ahd_patch_func_t ahd_patch22_func; 833static ahd_patch_func_t ahd_patch22_func;
798 834
799static int 835static int
800ahd_patch22_func(struct ahd_softc *ahd) 836ahd_patch22_func(struct ahd_softc *ahd)
801{ 837{
802 return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0); 838 return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0);
803} 839}
804 840
805static ahd_patch_func_t ahd_patch21_func; 841static ahd_patch_func_t ahd_patch21_func;
@@ -807,7 +843,7 @@ static ahd_patch_func_t ahd_patch21_func;
807static int 843static int
808ahd_patch21_func(struct ahd_softc *ahd) 844ahd_patch21_func(struct ahd_softc *ahd)
809{ 845{
810 return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0); 846 return ((ahd->flags & AHD_INITIATORROLE) != 0);
811} 847}
812 848
813static ahd_patch_func_t ahd_patch20_func; 849static ahd_patch_func_t ahd_patch20_func;
@@ -815,7 +851,7 @@ static ahd_patch_func_t ahd_patch20_func;
815static int 851static int
816ahd_patch20_func(struct ahd_softc *ahd) 852ahd_patch20_func(struct ahd_softc *ahd)
817{ 853{
818 return ((ahd->features & AHD_RTI) == 0); 854 return ((ahd->flags & AHD_TARGETROLE) != 0);
819} 855}
820 856
821static ahd_patch_func_t ahd_patch19_func; 857static ahd_patch_func_t ahd_patch19_func;
@@ -823,7 +859,7 @@ static ahd_patch_func_t ahd_patch19_func;
823static int 859static int
824ahd_patch19_func(struct ahd_softc *ahd) 860ahd_patch19_func(struct ahd_softc *ahd)
825{ 861{
826 return ((ahd->flags & AHD_INITIATORROLE) != 0); 862 return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0);
827} 863}
828 864
829static ahd_patch_func_t ahd_patch18_func; 865static ahd_patch_func_t ahd_patch18_func;
@@ -831,7 +867,7 @@ static ahd_patch_func_t ahd_patch18_func;
831static int 867static int
832ahd_patch18_func(struct ahd_softc *ahd) 868ahd_patch18_func(struct ahd_softc *ahd)
833{ 869{
834 return ((ahd->flags & AHD_TARGETROLE) != 0); 870 return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0);
835} 871}
836 872
837static ahd_patch_func_t ahd_patch17_func; 873static ahd_patch_func_t ahd_patch17_func;
@@ -839,7 +875,7 @@ static ahd_patch_func_t ahd_patch17_func;
839static int 875static int
840ahd_patch17_func(struct ahd_softc *ahd) 876ahd_patch17_func(struct ahd_softc *ahd)
841{ 877{
842 return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); 878 return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0);
843} 879}
844 880
845static ahd_patch_func_t ahd_patch16_func; 881static ahd_patch_func_t ahd_patch16_func;
@@ -847,7 +883,7 @@ static ahd_patch_func_t ahd_patch16_func;
847static int 883static int
848ahd_patch16_func(struct ahd_softc *ahd) 884ahd_patch16_func(struct ahd_softc *ahd)
849{ 885{
850 return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0); 886 return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0);
851} 887}
852 888
853static ahd_patch_func_t ahd_patch15_func; 889static ahd_patch_func_t ahd_patch15_func;
@@ -855,7 +891,7 @@ static ahd_patch_func_t ahd_patch15_func;
855static int 891static int
856ahd_patch15_func(struct ahd_softc *ahd) 892ahd_patch15_func(struct ahd_softc *ahd)
857{ 893{
858 return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0); 894 return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0);
859} 895}
860 896
861static ahd_patch_func_t ahd_patch14_func; 897static ahd_patch_func_t ahd_patch14_func;
@@ -863,7 +899,7 @@ static ahd_patch_func_t ahd_patch14_func;
863static int 899static int
864ahd_patch14_func(struct ahd_softc *ahd) 900ahd_patch14_func(struct ahd_softc *ahd)
865{ 901{
866 return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0); 902 return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0);
867} 903}
868 904
869static ahd_patch_func_t ahd_patch13_func; 905static ahd_patch_func_t ahd_patch13_func;
@@ -871,7 +907,7 @@ static ahd_patch_func_t ahd_patch13_func;
871static int 907static int
872ahd_patch13_func(struct ahd_softc *ahd) 908ahd_patch13_func(struct ahd_softc *ahd)
873{ 909{
874 return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0); 910 return ((ahd->features & AHD_RTI) == 0);
875} 911}
876 912
877static ahd_patch_func_t ahd_patch12_func; 913static ahd_patch_func_t ahd_patch12_func;
@@ -879,7 +915,7 @@ static ahd_patch_func_t ahd_patch12_func;
879static int 915static int
880ahd_patch12_func(struct ahd_softc *ahd) 916ahd_patch12_func(struct ahd_softc *ahd)
881{ 917{
882 return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); 918 return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0);
883} 919}
884 920
885static ahd_patch_func_t ahd_patch11_func; 921static ahd_patch_func_t ahd_patch11_func;
@@ -887,7 +923,7 @@ static ahd_patch_func_t ahd_patch11_func;
887static int 923static int
888ahd_patch11_func(struct ahd_softc *ahd) 924ahd_patch11_func(struct ahd_softc *ahd)
889{ 925{
890 return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0); 926 return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0);
891} 927}
892 928
893static ahd_patch_func_t ahd_patch10_func; 929static ahd_patch_func_t ahd_patch10_func;
@@ -895,7 +931,7 @@ static ahd_patch_func_t ahd_patch10_func;
895static int 931static int
896ahd_patch10_func(struct ahd_softc *ahd) 932ahd_patch10_func(struct ahd_softc *ahd)
897{ 933{
898 return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0); 934 return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0);
899} 935}
900 936
901static ahd_patch_func_t ahd_patch9_func; 937static ahd_patch_func_t ahd_patch9_func;
@@ -903,7 +939,7 @@ static ahd_patch_func_t ahd_patch9_func;
903static int 939static int
904ahd_patch9_func(struct ahd_softc *ahd) 940ahd_patch9_func(struct ahd_softc *ahd)
905{ 941{
906 return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0); 942 return ((ahd->features & AHD_FAST_CDB_DELIVERY) != 0);
907} 943}
908 944
909static ahd_patch_func_t ahd_patch8_func; 945static ahd_patch_func_t ahd_patch8_func;
@@ -992,147 +1028,149 @@ static struct patch {
992 { ahd_patch0_func, 5, 1, 1 }, 1028 { ahd_patch0_func, 5, 1, 1 },
993 { ahd_patch2_func, 6, 1, 2 }, 1029 { ahd_patch2_func, 6, 1, 2 },
994 { ahd_patch0_func, 7, 1, 1 }, 1030 { ahd_patch0_func, 7, 1, 1 },
995 { ahd_patch3_func, 20, 5, 1 }, 1031 { ahd_patch3_func, 36, 5, 1 },
996 { ahd_patch2_func, 29, 1, 2 }, 1032 { ahd_patch2_func, 45, 1, 2 },
997 { ahd_patch0_func, 30, 1, 1 }, 1033 { ahd_patch0_func, 46, 1, 1 },
998 { ahd_patch1_func, 37, 1, 2 }, 1034 { ahd_patch1_func, 53, 1, 2 },
999 { ahd_patch0_func, 38, 1, 1 }, 1035 { ahd_patch0_func, 54, 1, 1 },
1000 { ahd_patch2_func, 43, 1, 2 }, 1036 { ahd_patch2_func, 59, 1, 2 },
1001 { ahd_patch0_func, 44, 1, 1 }, 1037 { ahd_patch0_func, 60, 1, 1 },
1002 { ahd_patch2_func, 47, 1, 2 }, 1038 { ahd_patch2_func, 63, 1, 2 },
1003 { ahd_patch0_func, 48, 1, 1 }, 1039 { ahd_patch0_func, 64, 1, 1 },
1004 { ahd_patch2_func, 51, 1, 2 }, 1040 { ahd_patch2_func, 67, 1, 2 },
1005 { ahd_patch0_func, 52, 1, 1 }, 1041 { ahd_patch0_func, 68, 1, 1 },
1006 { ahd_patch2_func, 65, 1, 2 }, 1042 { ahd_patch4_func, 116, 1, 1 },
1007 { ahd_patch0_func, 66, 1, 1 }, 1043 { ahd_patch2_func, 175, 3, 1 },
1008 { ahd_patch2_func, 69, 1, 2 }, 1044 { ahd_patch1_func, 178, 2, 1 },
1009 { ahd_patch0_func, 70, 1, 1 }, 1045 { ahd_patch5_func, 180, 1, 1 },
1010 { ahd_patch1_func, 73, 1, 2 }, 1046 { ahd_patch2_func, 189, 1, 2 },
1011 { ahd_patch0_func, 74, 1, 1 }, 1047 { ahd_patch0_func, 190, 1, 1 },
1012 { ahd_patch4_func, 107, 1, 1 }, 1048 { ahd_patch6_func, 191, 2, 2 },
1013 { ahd_patch2_func, 162, 6, 1 }, 1049 { ahd_patch0_func, 193, 6, 3 },
1014 { ahd_patch1_func, 168, 2, 1 }, 1050 { ahd_patch2_func, 196, 1, 2 },
1015 { ahd_patch5_func, 170, 1, 1 }, 1051 { ahd_patch0_func, 197, 1, 1 },
1016 { ahd_patch2_func, 179, 1, 2 }, 1052 { ahd_patch2_func, 200, 1, 2 },
1017 { ahd_patch0_func, 180, 1, 1 }, 1053 { ahd_patch0_func, 201, 1, 1 },
1018 { ahd_patch6_func, 181, 2, 2 }, 1054 { ahd_patch3_func, 203, 1, 1 },
1019 { ahd_patch0_func, 183, 6, 3 }, 1055 { ahd_patch7_func, 204, 3, 1 },
1020 { ahd_patch2_func, 186, 1, 2 }, 1056 { ahd_patch3_func, 213, 1, 1 },
1021 { ahd_patch0_func, 187, 1, 1 }, 1057 { ahd_patch5_func, 214, 16, 2 },
1022 { ahd_patch2_func, 190, 1, 2 }, 1058 { ahd_patch0_func, 230, 1, 1 },
1023 { ahd_patch0_func, 191, 1, 1 }, 1059 { ahd_patch8_func, 250, 2, 1 },
1024 { ahd_patch7_func, 193, 2, 1 }, 1060 { ahd_patch1_func, 254, 1, 2 },
1025 { ahd_patch5_func, 201, 16, 2 }, 1061 { ahd_patch0_func, 255, 1, 1 },
1026 { ahd_patch0_func, 217, 1, 1 }, 1062 { ahd_patch7_func, 258, 3, 1 },
1027 { ahd_patch8_func, 237, 2, 1 }, 1063 { ahd_patch1_func, 273, 1, 2 },
1028 { ahd_patch1_func, 241, 1, 2 }, 1064 { ahd_patch0_func, 274, 1, 1 },
1029 { ahd_patch0_func, 242, 1, 1 }, 1065 { ahd_patch1_func, 277, 1, 2 },
1030 { ahd_patch7_func, 245, 2, 1 }, 1066 { ahd_patch0_func, 278, 1, 1 },
1031 { ahd_patch1_func, 259, 1, 2 }, 1067 { ahd_patch2_func, 281, 1, 2 },
1032 { ahd_patch0_func, 260, 1, 1 }, 1068 { ahd_patch0_func, 282, 1, 1 },
1033 { ahd_patch1_func, 263, 1, 2 }, 1069 { ahd_patch9_func, 295, 2, 2 },
1034 { ahd_patch0_func, 264, 1, 1 }, 1070 { ahd_patch0_func, 297, 1, 1 },
1035 { ahd_patch2_func, 267, 1, 2 }, 1071 { ahd_patch1_func, 339, 1, 2 },
1036 { ahd_patch0_func, 268, 1, 1 }, 1072 { ahd_patch0_func, 340, 1, 1 },
1037 { ahd_patch1_func, 323, 1, 2 }, 1073 { ahd_patch2_func, 348, 1, 2 },
1038 { ahd_patch0_func, 324, 1, 1 }, 1074 { ahd_patch0_func, 349, 1, 1 },
1039 { ahd_patch2_func, 332, 1, 2 }, 1075 { ahd_patch2_func, 352, 1, 2 },
1040 { ahd_patch0_func, 333, 1, 1 }, 1076 { ahd_patch0_func, 353, 1, 1 },
1041 { ahd_patch2_func, 336, 1, 2 }, 1077 { ahd_patch1_func, 359, 1, 2 },
1042 { ahd_patch0_func, 337, 1, 1 }, 1078 { ahd_patch0_func, 360, 1, 1 },
1043 { ahd_patch1_func, 343, 1, 2 }, 1079 { ahd_patch1_func, 362, 1, 2 },
1044 { ahd_patch0_func, 344, 1, 1 }, 1080 { ahd_patch0_func, 363, 1, 1 },
1045 { ahd_patch1_func, 346, 1, 2 }, 1081 { ahd_patch10_func, 382, 1, 1 },
1046 { ahd_patch0_func, 347, 1, 1 }, 1082 { ahd_patch10_func, 385, 1, 1 },
1047 { ahd_patch9_func, 366, 1, 1 }, 1083 { ahd_patch10_func, 387, 1, 1 },
1048 { ahd_patch9_func, 369, 1, 1 }, 1084 { ahd_patch10_func, 399, 1, 1 },
1049 { ahd_patch9_func, 371, 1, 1 }, 1085 { ahd_patch1_func, 409, 1, 2 },
1050 { ahd_patch9_func, 383, 1, 1 }, 1086 { ahd_patch0_func, 410, 1, 1 },
1051 { ahd_patch1_func, 393, 1, 2 }, 1087 { ahd_patch1_func, 412, 1, 2 },
1052 { ahd_patch0_func, 394, 1, 1 }, 1088 { ahd_patch0_func, 413, 1, 1 },
1053 { ahd_patch1_func, 396, 1, 2 }, 1089 { ahd_patch1_func, 421, 1, 2 },
1054 { ahd_patch0_func, 397, 1, 1 }, 1090 { ahd_patch0_func, 422, 1, 1 },
1055 { ahd_patch1_func, 405, 1, 2 }, 1091 { ahd_patch2_func, 435, 1, 2 },
1056 { ahd_patch0_func, 406, 1, 1 }, 1092 { ahd_patch0_func, 436, 1, 1 },
1057 { ahd_patch2_func, 419, 1, 2 }, 1093 { ahd_patch11_func, 472, 1, 1 },
1058 { ahd_patch0_func, 420, 1, 1 }, 1094 { ahd_patch1_func, 480, 1, 2 },
1059 { ahd_patch10_func, 450, 1, 1 }, 1095 { ahd_patch0_func, 481, 1, 1 },
1060 { ahd_patch1_func, 457, 1, 2 }, 1096 { ahd_patch2_func, 493, 1, 2 },
1061 { ahd_patch0_func, 458, 1, 1 }, 1097 { ahd_patch0_func, 494, 1, 1 },
1062 { ahd_patch2_func, 470, 1, 2 }, 1098 { ahd_patch12_func, 497, 6, 2 },
1063 { ahd_patch0_func, 471, 1, 1 }, 1099 { ahd_patch0_func, 503, 1, 1 },
1064 { ahd_patch11_func, 476, 6, 2 }, 1100 { ahd_patch13_func, 524, 7, 1 },
1065 { ahd_patch0_func, 482, 1, 1 }, 1101 { ahd_patch14_func, 533, 1, 1 },
1066 { ahd_patch12_func, 505, 1, 1 }, 1102 { ahd_patch15_func, 542, 1, 1 },
1067 { ahd_patch13_func, 514, 1, 1 }, 1103 { ahd_patch16_func, 543, 1, 2 },
1068 { ahd_patch14_func, 515, 1, 2 }, 1104 { ahd_patch0_func, 544, 1, 1 },
1069 { ahd_patch0_func, 516, 1, 1 }, 1105 { ahd_patch17_func, 547, 1, 1 },
1070 { ahd_patch15_func, 519, 1, 1 }, 1106 { ahd_patch16_func, 548, 1, 1 },
1071 { ahd_patch14_func, 520, 1, 1 }, 1107 { ahd_patch18_func, 559, 1, 2 },
1072 { ahd_patch16_func, 531, 1, 2 }, 1108 { ahd_patch0_func, 560, 1, 1 },
1073 { ahd_patch0_func, 532, 1, 1 }, 1109 { ahd_patch1_func, 579, 1, 2 },
1074 { ahd_patch1_func, 551, 1, 2 }, 1110 { ahd_patch0_func, 580, 1, 1 },
1075 { ahd_patch0_func, 552, 1, 1 }, 1111 { ahd_patch1_func, 583, 1, 2 },
1076 { ahd_patch1_func, 555, 1, 2 }, 1112 { ahd_patch0_func, 584, 1, 1 },
1077 { ahd_patch0_func, 556, 1, 1 }, 1113 { ahd_patch2_func, 589, 1, 2 },
1078 { ahd_patch2_func, 561, 1, 2 }, 1114 { ahd_patch0_func, 590, 1, 1 },
1079 { ahd_patch0_func, 562, 1, 1 }, 1115 { ahd_patch2_func, 594, 1, 2 },
1080 { ahd_patch2_func, 566, 1, 2 }, 1116 { ahd_patch0_func, 595, 1, 1 },
1081 { ahd_patch0_func, 567, 1, 1 }, 1117 { ahd_patch1_func, 596, 1, 2 },
1082 { ahd_patch1_func, 568, 1, 2 }, 1118 { ahd_patch0_func, 597, 1, 1 },
1083 { ahd_patch0_func, 569, 1, 1 }, 1119 { ahd_patch2_func, 608, 1, 2 },
1084 { ahd_patch2_func, 580, 1, 2 }, 1120 { ahd_patch0_func, 609, 1, 1 },
1085 { ahd_patch0_func, 581, 1, 1 }, 1121 { ahd_patch19_func, 613, 1, 1 },
1086 { ahd_patch17_func, 585, 1, 1 }, 1122 { ahd_patch20_func, 618, 1, 1 },
1087 { ahd_patch18_func, 590, 1, 1 }, 1123 { ahd_patch21_func, 619, 2, 1 },
1088 { ahd_patch19_func, 591, 2, 1 }, 1124 { ahd_patch20_func, 623, 1, 2 },
1089 { ahd_patch18_func, 595, 1, 2 }, 1125 { ahd_patch0_func, 624, 1, 1 },
1090 { ahd_patch0_func, 596, 1, 1 }, 1126 { ahd_patch2_func, 627, 1, 2 },
1091 { ahd_patch2_func, 599, 1, 2 }, 1127 { ahd_patch0_func, 628, 1, 1 },
1092 { ahd_patch0_func, 600, 1, 1 }, 1128 { ahd_patch2_func, 643, 1, 2 },
1093 { ahd_patch2_func, 615, 1, 2 }, 1129 { ahd_patch0_func, 644, 1, 1 },
1094 { ahd_patch0_func, 616, 1, 1 }, 1130 { ahd_patch13_func, 645, 14, 1 },
1095 { ahd_patch20_func, 617, 14, 1 }, 1131 { ahd_patch1_func, 663, 1, 2 },
1096 { ahd_patch1_func, 635, 1, 2 }, 1132 { ahd_patch0_func, 664, 1, 1 },
1097 { ahd_patch0_func, 636, 1, 1 }, 1133 { ahd_patch13_func, 665, 1, 1 },
1098 { ahd_patch20_func, 637, 1, 1 }, 1134 { ahd_patch1_func, 677, 1, 2 },
1099 { ahd_patch1_func, 649, 1, 2 }, 1135 { ahd_patch0_func, 678, 1, 1 },
1100 { ahd_patch0_func, 650, 1, 1 }, 1136 { ahd_patch1_func, 685, 1, 2 },
1101 { ahd_patch1_func, 657, 1, 2 }, 1137 { ahd_patch0_func, 686, 1, 1 },
1102 { ahd_patch0_func, 658, 1, 1 }, 1138 { ahd_patch19_func, 709, 1, 1 },
1103 { ahd_patch17_func, 681, 1, 1 }, 1139 { ahd_patch19_func, 747, 1, 1 },
1104 { ahd_patch17_func, 719, 1, 1 }, 1140 { ahd_patch1_func, 758, 1, 2 },
1105 { ahd_patch1_func, 730, 1, 2 }, 1141 { ahd_patch0_func, 759, 1, 1 },
1106 { ahd_patch0_func, 731, 1, 1 }, 1142 { ahd_patch1_func, 776, 1, 2 },
1107 { ahd_patch1_func, 748, 1, 2 }, 1143 { ahd_patch0_func, 777, 1, 1 },
1108 { ahd_patch0_func, 749, 1, 1 }, 1144 { ahd_patch1_func, 779, 1, 2 },
1109 { ahd_patch1_func, 751, 1, 2 }, 1145 { ahd_patch0_func, 780, 1, 1 },
1110 { ahd_patch0_func, 752, 1, 1 }, 1146 { ahd_patch1_func, 783, 1, 2 },
1111 { ahd_patch1_func, 755, 1, 2 }, 1147 { ahd_patch0_func, 784, 1, 1 },
1112 { ahd_patch0_func, 756, 1, 1 }, 1148 { ahd_patch22_func, 786, 1, 2 },
1113 { ahd_patch21_func, 758, 1, 2 }, 1149 { ahd_patch0_func, 787, 2, 1 },
1114 { ahd_patch0_func, 759, 2, 1 }, 1150 { ahd_patch23_func, 790, 4, 2 },
1115 { ahd_patch22_func, 762, 4, 2 }, 1151 { ahd_patch0_func, 794, 1, 1 },
1116 { ahd_patch0_func, 766, 1, 1 }, 1152 { ahd_patch23_func, 802, 11, 1 }
1117 { ahd_patch22_func, 774, 11, 1 }
1118}; 1153};
1119 1154
1120static struct cs { 1155static struct cs {
1121 uint16_t begin; 1156 uint16_t begin;
1122 uint16_t end; 1157 uint16_t end;
1123} critical_sections[] = { 1158} critical_sections[] = {
1124 { 11, 12 }, 1159 { 17, 28 },
1125 { 13, 14 }, 1160 { 29, 30 },
1126 { 29, 42 }, 1161 { 47, 58 },
1127 { 56, 59 }, 1162 { 61, 63 },
1128 { 101, 128 }, 1163 { 65, 66 },
1129 { 129, 157 }, 1164 { 72, 92 },
1130 { 159, 162 }, 1165 { 110, 137 },
1131 { 170, 178 }, 1166 { 138, 175 },
1132 { 201, 250 }, 1167 { 180, 188 },
1133 { 681, 697 }, 1168 { 213, 264 },
1134 { 697, 711 }, 1169 { 425, 433 },
1135 { 721, 725 } 1170 { 443, 445 },
1171 { 448, 457 },
1172 { 709, 739 },
1173 { 749, 753 }
1136}; 1174};
1137 1175
1138static const int num_critical_sections = sizeof(critical_sections) 1176static const int num_critical_sections = sizeof(critical_sections)
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
index d866213f42b8..051970efba68 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c
@@ -375,7 +375,7 @@ static void ahc_linux_queue_cmd_complete(struct ahc_softc *ahc,
375 struct scsi_cmnd *cmd); 375 struct scsi_cmnd *cmd);
376static void ahc_linux_sem_timeout(u_long arg); 376static void ahc_linux_sem_timeout(u_long arg);
377static void ahc_linux_freeze_simq(struct ahc_softc *ahc); 377static void ahc_linux_freeze_simq(struct ahc_softc *ahc);
378static void ahc_linux_release_simq(u_long arg); 378static void ahc_linux_release_simq(struct ahc_softc *ahc);
379static int ahc_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag); 379static int ahc_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag);
380static void ahc_linux_initialize_scsi_bus(struct ahc_softc *ahc); 380static void ahc_linux_initialize_scsi_bus(struct ahc_softc *ahc);
381static u_int ahc_linux_user_tagdepth(struct ahc_softc *ahc, 381static u_int ahc_linux_user_tagdepth(struct ahc_softc *ahc,
@@ -1061,10 +1061,11 @@ uint32_t aic7xxx_verbose;
1061int 1061int
1062ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *template) 1062ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *template)
1063{ 1063{
1064 char buf[80]; 1064 char buf[80];
1065 struct Scsi_Host *host; 1065 struct Scsi_Host *host;
1066 char *new_name; 1066 char *new_name;
1067 u_long s; 1067 u_long s;
1068 int retval;
1068 1069
1069 template->name = ahc->description; 1070 template->name = ahc->description;
1070 host = scsi_host_alloc(template, sizeof(struct ahc_softc *)); 1071 host = scsi_host_alloc(template, sizeof(struct ahc_softc *));
@@ -1072,7 +1073,6 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa
1072 return (ENOMEM); 1073 return (ENOMEM);
1073 1074
1074 *((struct ahc_softc **)host->hostdata) = ahc; 1075 *((struct ahc_softc **)host->hostdata) = ahc;
1075 ahc_lock(ahc, &s);
1076 ahc->platform_data->host = host; 1076 ahc->platform_data->host = host;
1077 host->can_queue = AHC_MAX_QUEUE; 1077 host->can_queue = AHC_MAX_QUEUE;
1078 host->cmd_per_lun = 2; 1078 host->cmd_per_lun = 2;
@@ -1083,7 +1083,9 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa
1083 host->max_lun = AHC_NUM_LUNS; 1083 host->max_lun = AHC_NUM_LUNS;
1084 host->max_channel = (ahc->features & AHC_TWIN) ? 1 : 0; 1084 host->max_channel = (ahc->features & AHC_TWIN) ? 1 : 0;
1085 host->sg_tablesize = AHC_NSEG; 1085 host->sg_tablesize = AHC_NSEG;
1086 ahc_lock(ahc, &s);
1086 ahc_set_unit(ahc, ahc_linux_unit++); 1087 ahc_set_unit(ahc, ahc_linux_unit++);
1088 ahc_unlock(ahc, &s);
1087 sprintf(buf, "scsi%d", host->host_no); 1089 sprintf(buf, "scsi%d", host->host_no);
1088 new_name = malloc(strlen(buf) + 1, M_DEVBUF, M_NOWAIT); 1090 new_name = malloc(strlen(buf) + 1, M_DEVBUF, M_NOWAIT);
1089 if (new_name != NULL) { 1091 if (new_name != NULL) {
@@ -1093,13 +1095,19 @@ ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *templa
1093 host->unique_id = ahc->unit; 1095 host->unique_id = ahc->unit;
1094 ahc_linux_initialize_scsi_bus(ahc); 1096 ahc_linux_initialize_scsi_bus(ahc);
1095 ahc_intr_enable(ahc, TRUE); 1097 ahc_intr_enable(ahc, TRUE);
1096 ahc_unlock(ahc, &s);
1097 1098
1098 host->transportt = ahc_linux_transport_template; 1099 host->transportt = ahc_linux_transport_template;
1099 1100
1100 scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */ 1101 retval = scsi_add_host(host,
1102 (ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
1103 if (retval) {
1104 printk(KERN_WARNING "aic7xxx: scsi_add_host failed\n");
1105 scsi_host_put(host);
1106 return retval;
1107 }
1108
1101 scsi_scan_host(host); 1109 scsi_scan_host(host);
1102 return (0); 1110 return 0;
1103} 1111}
1104 1112
1105/* 1113/*
@@ -1112,10 +1120,13 @@ ahc_linux_initialize_scsi_bus(struct ahc_softc *ahc)
1112{ 1120{
1113 int i; 1121 int i;
1114 int numtarg; 1122 int numtarg;
1123 unsigned long s;
1115 1124
1116 i = 0; 1125 i = 0;
1117 numtarg = 0; 1126 numtarg = 0;
1118 1127
1128 ahc_lock(ahc, &s);
1129
1119 if (aic7xxx_no_reset != 0) 1130 if (aic7xxx_no_reset != 0)
1120 ahc->flags &= ~(AHC_RESET_BUS_A|AHC_RESET_BUS_B); 1131 ahc->flags &= ~(AHC_RESET_BUS_A|AHC_RESET_BUS_B);
1121 1132
@@ -1162,16 +1173,12 @@ ahc_linux_initialize_scsi_bus(struct ahc_softc *ahc)
1162 ahc_update_neg_request(ahc, &devinfo, tstate, 1173 ahc_update_neg_request(ahc, &devinfo, tstate,
1163 tinfo, AHC_NEG_ALWAYS); 1174 tinfo, AHC_NEG_ALWAYS);
1164 } 1175 }
1176 ahc_unlock(ahc, &s);
1165 /* Give the bus some time to recover */ 1177 /* Give the bus some time to recover */
1166 if ((ahc->flags & (AHC_RESET_BUS_A|AHC_RESET_BUS_B)) != 0) { 1178 if ((ahc->flags & (AHC_RESET_BUS_A|AHC_RESET_BUS_B)) != 0) {
1167 ahc_linux_freeze_simq(ahc); 1179 ahc_linux_freeze_simq(ahc);
1168 init_timer(&ahc->platform_data->reset_timer); 1180 msleep(AIC7XXX_RESET_DELAY);
1169 ahc->platform_data->reset_timer.data = (u_long)ahc; 1181 ahc_linux_release_simq(ahc);
1170 ahc->platform_data->reset_timer.expires =
1171 jiffies + (AIC7XXX_RESET_DELAY * HZ)/1000;
1172 ahc->platform_data->reset_timer.function =
1173 ahc_linux_release_simq;
1174 add_timer(&ahc->platform_data->reset_timer);
1175 } 1182 }
1176} 1183}
1177 1184
@@ -2051,6 +2058,9 @@ ahc_linux_sem_timeout(u_long arg)
2051static void 2058static void
2052ahc_linux_freeze_simq(struct ahc_softc *ahc) 2059ahc_linux_freeze_simq(struct ahc_softc *ahc)
2053{ 2060{
2061 unsigned long s;
2062
2063 ahc_lock(ahc, &s);
2054 ahc->platform_data->qfrozen++; 2064 ahc->platform_data->qfrozen++;
2055 if (ahc->platform_data->qfrozen == 1) { 2065 if (ahc->platform_data->qfrozen == 1) {
2056 scsi_block_requests(ahc->platform_data->host); 2066 scsi_block_requests(ahc->platform_data->host);
@@ -2060,17 +2070,15 @@ ahc_linux_freeze_simq(struct ahc_softc *ahc)
2060 CAM_LUN_WILDCARD, SCB_LIST_NULL, 2070 CAM_LUN_WILDCARD, SCB_LIST_NULL,
2061 ROLE_INITIATOR, CAM_REQUEUE_REQ); 2071 ROLE_INITIATOR, CAM_REQUEUE_REQ);
2062 } 2072 }
2073 ahc_unlock(ahc, &s);
2063} 2074}
2064 2075
2065static void 2076static void
2066ahc_linux_release_simq(u_long arg) 2077ahc_linux_release_simq(struct ahc_softc *ahc)
2067{ 2078{
2068 struct ahc_softc *ahc;
2069 u_long s; 2079 u_long s;
2070 int unblock_reqs; 2080 int unblock_reqs;
2071 2081
2072 ahc = (struct ahc_softc *)arg;
2073
2074 unblock_reqs = 0; 2082 unblock_reqs = 0;
2075 ahc_lock(ahc, &s); 2083 ahc_lock(ahc, &s);
2076 if (ahc->platform_data->qfrozen > 0) 2084 if (ahc->platform_data->qfrozen > 0)
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h
index f2a95447142c..e0edacae895f 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.h
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h
@@ -223,9 +223,6 @@ int ahc_dmamap_unload(struct ahc_softc *, bus_dma_tag_t, bus_dmamap_t);
223 */ 223 */
224#define ahc_dmamap_sync(ahc, dma_tag, dmamap, offset, len, op) 224#define ahc_dmamap_sync(ahc, dma_tag, dmamap, offset, len, op)
225 225
226/************************** Timer DataStructures ******************************/
227typedef struct timer_list ahc_timer_t;
228
229/********************************** Includes **********************************/ 226/********************************** Includes **********************************/
230#ifdef CONFIG_AIC7XXX_REG_PRETTY_PRINT 227#ifdef CONFIG_AIC7XXX_REG_PRETTY_PRINT
231#define AIC_DEBUG_REGISTERS 1 228#define AIC_DEBUG_REGISTERS 1
@@ -235,30 +232,9 @@ typedef struct timer_list ahc_timer_t;
235#include "aic7xxx.h" 232#include "aic7xxx.h"
236 233
237/***************************** Timer Facilities *******************************/ 234/***************************** Timer Facilities *******************************/
238#define ahc_timer_init init_timer
239#define ahc_timer_stop del_timer_sync
240typedef void ahc_linux_callback_t (u_long);
241static __inline void ahc_timer_reset(ahc_timer_t *timer, int usec,
242 ahc_callback_t *func, void *arg);
243static __inline void ahc_scb_timer_reset(struct scb *scb, u_int usec);
244
245static __inline void
246ahc_timer_reset(ahc_timer_t *timer, int usec, ahc_callback_t *func, void *arg)
247{
248 struct ahc_softc *ahc;
249
250 ahc = (struct ahc_softc *)arg;
251 del_timer(timer);
252 timer->data = (u_long)arg;
253 timer->expires = jiffies + (usec * HZ)/1000000;
254 timer->function = (ahc_linux_callback_t*)func;
255 add_timer(timer);
256}
257
258static __inline void 235static __inline void
259ahc_scb_timer_reset(struct scb *scb, u_int usec) 236ahc_scb_timer_reset(struct scb *scb, u_int usec)
260{ 237{
261 mod_timer(&scb->io_ctx->eh_timeout, jiffies + (usec * HZ)/1000000);
262} 238}
263 239
264/***************************** SMP support ************************************/ 240/***************************** SMP support ************************************/
@@ -393,7 +369,6 @@ struct ahc_platform_data {
393 369
394 spinlock_t spin_lock; 370 spinlock_t spin_lock;
395 u_int qfrozen; 371 u_int qfrozen;
396 struct timer_list reset_timer;
397 struct semaphore eh_sem; 372 struct semaphore eh_sem;
398 struct Scsi_Host *host; /* pointer to scsi host */ 373 struct Scsi_Host *host; /* pointer to scsi host */
399#define AHC_LINUX_NOIRQ ((uint32_t)~0) 374#define AHC_LINUX_NOIRQ ((uint32_t)~0)
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c
index b3b2e2237eb3..5f586140e057 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c
@@ -39,9 +39,7 @@
39 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 39 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
40 * POSSIBILITY OF SUCH DAMAGES. 40 * POSSIBILITY OF SUCH DAMAGES.
41 * 41 *
42 * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#69 $ 42 * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#79 $
43 *
44 * $FreeBSD$
45 */ 43 */
46 44
47#ifdef __linux__ 45#ifdef __linux__
@@ -393,6 +391,12 @@ struct ahc_pci_identity ahc_pci_ident_table [] =
393 "Adaptec aic7892 Ultra160 SCSI adapter (ARO)", 391 "Adaptec aic7892 Ultra160 SCSI adapter (ARO)",
394 ahc_aic7892_setup 392 ahc_aic7892_setup
395 }, 393 },
394 {
395 ID_AHA_2915_30LP,
396 ID_ALL_MASK,
397 "Adaptec 2915/30LP Ultra160 SCSI adapter",
398 ahc_aic7892_setup
399 },
396 /* aic7895 based controllers */ 400 /* aic7895 based controllers */
397 { 401 {
398 ID_AHA_2940U_DUAL, 402 ID_AHA_2940U_DUAL,
@@ -1193,9 +1197,19 @@ ahc_pci_test_register_access(struct ahc_softc *ahc)
1193 * use for this test. 1197 * use for this test.
1194 */ 1198 */
1195 hcntrl = ahc_inb(ahc, HCNTRL); 1199 hcntrl = ahc_inb(ahc, HCNTRL);
1200
1196 if (hcntrl == 0xFF) 1201 if (hcntrl == 0xFF)
1197 goto fail; 1202 goto fail;
1198 1203
1204 if ((hcntrl & CHIPRST) != 0) {
1205 /*
1206 * The chip has not been initialized since
1207 * PCI/EISA/VLB bus reset. Don't trust
1208 * "left over BIOS data".
1209 */
1210 ahc->flags |= AHC_NO_BIOS_INIT;
1211 }
1212
1199 /* 1213 /*
1200 * Next create a situation where write combining 1214 * Next create a situation where write combining
1201 * or read prefetching could be initiated by the 1215 * or read prefetching could be initiated by the
@@ -1307,6 +1321,10 @@ check_extport(struct ahc_softc *ahc, u_int *sxfrctl1)
1307 sd.sd_chip = C56_66; 1321 sd.sd_chip = C56_66;
1308 } 1322 }
1309 ahc_release_seeprom(&sd); 1323 ahc_release_seeprom(&sd);
1324
1325 /* Remember the SEEPROM type for later */
1326 if (sd.sd_chip == C56_66)
1327 ahc->flags |= AHC_LARGE_SEEPROM;
1310 } 1328 }
1311 1329
1312 if (!have_seeprom) { 1330 if (!have_seeprom) {
diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.h b/drivers/scsi/aic7xxx/aic7xxx_pci.h
index be27fcb20346..263f85da405e 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_pci.h
+++ b/drivers/scsi/aic7xxx/aic7xxx_pci.h
@@ -105,6 +105,7 @@
105#define ID_AHA_29160C 0x0080900562209005ull 105#define ID_AHA_29160C 0x0080900562209005ull
106#define ID_AHA_29160B 0x00809005E2209005ull 106#define ID_AHA_29160B 0x00809005E2209005ull
107#define ID_AHA_19160B 0x0081900562A19005ull 107#define ID_AHA_19160B 0x0081900562A19005ull
108#define ID_AHA_2915_30LP 0x0082900502109005ull
108 109
109#define ID_AIC7896 0x005F9005FFFF9005ull 110#define ID_AIC7896 0x005F9005FFFF9005ull
110#define ID_AIC7896_ARO 0x00539005FFFF9005ull 111#define ID_AIC7896_ARO 0x00539005FFFF9005ull
diff --git a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
index 33d56c344944..770f1647e4d6 100644
--- a/drivers/scsi/aic7xxx_old.c
+++ b/drivers/scsi/aic7xxx_old.c
@@ -1290,7 +1290,7 @@ static void aic7xxx_check_scbs(struct aic7xxx_host *p, char *buffer);
1290 * 1290 *
1291 ***************************************************************************/ 1291 ***************************************************************************/
1292 1292
1293static inline unsigned char 1293static unsigned char
1294aic_inb(struct aic7xxx_host *p, long port) 1294aic_inb(struct aic7xxx_host *p, long port)
1295{ 1295{
1296#ifdef MMAPIO 1296#ifdef MMAPIO
@@ -1309,7 +1309,7 @@ aic_inb(struct aic7xxx_host *p, long port)
1309#endif 1309#endif
1310} 1310}
1311 1311
1312static inline void 1312static void
1313aic_outb(struct aic7xxx_host *p, unsigned char val, long port) 1313aic_outb(struct aic7xxx_host *p, unsigned char val, long port)
1314{ 1314{
1315#ifdef MMAPIO 1315#ifdef MMAPIO
diff --git a/drivers/scsi/arm/Kconfig b/drivers/scsi/arm/Kconfig
index 13f23043c8a3..06d7601cdf56 100644
--- a/drivers/scsi/arm/Kconfig
+++ b/drivers/scsi/arm/Kconfig
@@ -4,6 +4,7 @@
4config SCSI_ACORNSCSI_3 4config SCSI_ACORNSCSI_3
5 tristate "Acorn SCSI card (aka30) support" 5 tristate "Acorn SCSI card (aka30) support"
6 depends on ARCH_ACORN && SCSI && BROKEN 6 depends on ARCH_ACORN && SCSI && BROKEN
7 select SCSI_SPI_ATTRS
7 help 8 help
8 This enables support for the Acorn SCSI card (aka30). If you have an 9 This enables support for the Acorn SCSI card (aka30). If you have an
9 Acorn system with one of these, say Y. If unsure, say N. 10 Acorn system with one of these, say Y. If unsure, say N.
diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
index b7b20c689c24..dda5a5f79c53 100644
--- a/drivers/scsi/arm/acornscsi.c
+++ b/drivers/scsi/arm/acornscsi.c
@@ -146,12 +146,12 @@
146 146
147#include <asm/system.h> 147#include <asm/system.h>
148#include <asm/io.h> 148#include <asm/io.h>
149#include <asm/irq.h>
150#include <asm/ecard.h> 149#include <asm/ecard.h>
151 150
152#include "../scsi.h" 151#include "../scsi.h"
153#include <scsi/scsi_dbg.h> 152#include <scsi/scsi_dbg.h>
154#include <scsi/scsi_host.h> 153#include <scsi/scsi_host.h>
154#include <scsi/scsi_transport_spi.h>
155#include "acornscsi.h" 155#include "acornscsi.h"
156#include "msgqueue.h" 156#include "msgqueue.h"
157#include "scsi.h" 157#include "scsi.h"
@@ -1370,7 +1370,7 @@ void acornscsi_sendmessage(AS_Host *host)
1370 1370
1371 host->scsi.last_message = msg->msg[0]; 1371 host->scsi.last_message = msg->msg[0];
1372#if (DEBUG & DEBUG_MESSAGES) 1372#if (DEBUG & DEBUG_MESSAGES)
1373 scsi_print_msg(msg->msg); 1373 spi_print_msg(msg->msg);
1374#endif 1374#endif
1375 break; 1375 break;
1376 1376
@@ -1392,7 +1392,7 @@ void acornscsi_sendmessage(AS_Host *host)
1392 while ((msg = msgqueue_getmsg(&host->scsi.msgs, msgnr++)) != NULL) { 1392 while ((msg = msgqueue_getmsg(&host->scsi.msgs, msgnr++)) != NULL) {
1393 unsigned int i; 1393 unsigned int i;
1394#if (DEBUG & DEBUG_MESSAGES) 1394#if (DEBUG & DEBUG_MESSAGES)
1395 scsi_print_msg(msg); 1395 spi_print_msg(msg);
1396#endif 1396#endif
1397 i = 0; 1397 i = 0;
1398 if (acornscsi_write_pio(host, msg->msg, &i, msg->length, 1000000)) 1398 if (acornscsi_write_pio(host, msg->msg, &i, msg->length, 1000000))
@@ -1488,7 +1488,7 @@ void acornscsi_message(AS_Host *host)
1488#if (DEBUG & DEBUG_MESSAGES) 1488#if (DEBUG & DEBUG_MESSAGES)
1489 printk("scsi%d.%c: message in: ", 1489 printk("scsi%d.%c: message in: ",
1490 host->host->host_no, acornscsi_target(host)); 1490 host->host->host_no, acornscsi_target(host));
1491 scsi_print_msg(message); 1491 spi_print_msg(message);
1492 printk("\n"); 1492 printk("\n");
1493#endif 1493#endif
1494 1494
diff --git a/drivers/scsi/arm/arxescsi.c b/drivers/scsi/arm/arxescsi.c
index 804125e35fc3..a28940156703 100644
--- a/drivers/scsi/arm/arxescsi.c
+++ b/drivers/scsi/arm/arxescsi.c
@@ -33,7 +33,6 @@
33 33
34#include <asm/dma.h> 34#include <asm/dma.h>
35#include <asm/io.h> 35#include <asm/io.h>
36#include <asm/irq.h>
37#include <asm/ecard.h> 36#include <asm/ecard.h>
38 37
39#include "../scsi.h" 38#include "../scsi.h"
diff --git a/drivers/scsi/arm/cumana_1.c b/drivers/scsi/arm/cumana_1.c
index 81e266be26d0..e6c9491dc5c0 100644
--- a/drivers/scsi/arm/cumana_1.c
+++ b/drivers/scsi/arm/cumana_1.c
@@ -13,7 +13,6 @@
13 13
14#include <asm/ecard.h> 14#include <asm/ecard.h>
15#include <asm/io.h> 15#include <asm/io.h>
16#include <asm/irq.h>
17#include <asm/system.h> 16#include <asm/system.h>
18 17
19#include "../scsi.h" 18#include "../scsi.h"
diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c
index 3a7a46b0dc41..583d2d8c8335 100644
--- a/drivers/scsi/arm/cumana_2.c
+++ b/drivers/scsi/arm/cumana_2.c
@@ -31,7 +31,6 @@
31#include <asm/dma.h> 31#include <asm/dma.h>
32#include <asm/ecard.h> 32#include <asm/ecard.h>
33#include <asm/io.h> 33#include <asm/io.h>
34#include <asm/irq.h>
35#include <asm/pgtable.h> 34#include <asm/pgtable.h>
36 35
37#include "../scsi.h" 36#include "../scsi.h"
diff --git a/drivers/scsi/arm/eesox.c b/drivers/scsi/arm/eesox.c
index 4d1e8f52c924..3ffec7efc9d5 100644
--- a/drivers/scsi/arm/eesox.c
+++ b/drivers/scsi/arm/eesox.c
@@ -35,7 +35,6 @@
35#include <linux/dma-mapping.h> 35#include <linux/dma-mapping.h>
36 36
37#include <asm/io.h> 37#include <asm/io.h>
38#include <asm/irq.h>
39#include <asm/dma.h> 38#include <asm/dma.h>
40#include <asm/ecard.h> 39#include <asm/ecard.h>
41#include <asm/pgtable.h> 40#include <asm/pgtable.h>
diff --git a/drivers/scsi/arm/powertec.c b/drivers/scsi/arm/powertec.c
index 3333d7b39139..3113bdcedb13 100644
--- a/drivers/scsi/arm/powertec.c
+++ b/drivers/scsi/arm/powertec.c
@@ -22,7 +22,6 @@
22#include <asm/dma.h> 22#include <asm/dma.h>
23#include <asm/ecard.h> 23#include <asm/ecard.h>
24#include <asm/io.h> 24#include <asm/io.h>
25#include <asm/irq.h>
26#include <asm/pgtable.h> 25#include <asm/pgtable.h>
27 26
28#include "../scsi.h" 27#include "../scsi.h"
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c
index 0ea27873b9ff..557788ec4eec 100644
--- a/drivers/scsi/ata_piix.c
+++ b/drivers/scsi/ata_piix.c
@@ -166,6 +166,8 @@ static struct pci_driver piix_pci_driver = {
166 .id_table = piix_pci_tbl, 166 .id_table = piix_pci_tbl,
167 .probe = piix_init_one, 167 .probe = piix_init_one,
168 .remove = ata_pci_remove_one, 168 .remove = ata_pci_remove_one,
169 .suspend = ata_pci_device_suspend,
170 .resume = ata_pci_device_resume,
169}; 171};
170 172
171static struct scsi_host_template piix_sht = { 173static struct scsi_host_template piix_sht = {
@@ -185,7 +187,8 @@ static struct scsi_host_template piix_sht = {
185 .dma_boundary = ATA_DMA_BOUNDARY, 187 .dma_boundary = ATA_DMA_BOUNDARY,
186 .slave_configure = ata_scsi_slave_config, 188 .slave_configure = ata_scsi_slave_config,
187 .bios_param = ata_std_bios_param, 189 .bios_param = ata_std_bios_param,
188 .ordered_flush = 1, 190 .resume = ata_scsi_device_resume,
191 .suspend = ata_scsi_device_suspend,
189}; 192};
190 193
191static const struct ata_port_operations piix_pata_ops = { 194static const struct ata_port_operations piix_pata_ops = {
diff --git a/drivers/scsi/atari_NCR5380.c b/drivers/scsi/atari_NCR5380.c
index 2ae31ceb32a8..57295bcea3e7 100644
--- a/drivers/scsi/atari_NCR5380.c
+++ b/drivers/scsi/atari_NCR5380.c
@@ -74,6 +74,7 @@
74 * the high level code. 74 * the high level code.
75 */ 75 */
76#include <scsi/scsi_dbg.h> 76#include <scsi/scsi_dbg.h>
77#include <scsi/scsi_transport_spi.h>
77 78
78#if (NDEBUG & NDEBUG_LISTS) 79#if (NDEBUG & NDEBUG_LISTS)
79#define LIST(x,y) \ 80#define LIST(x,y) \
@@ -2355,7 +2356,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
2355 * 3..length+1 arguments 2356 * 3..length+1 arguments
2356 * 2357 *
2357 * Start the extended message buffer with the EXTENDED_MESSAGE 2358 * Start the extended message buffer with the EXTENDED_MESSAGE
2358 * byte, since scsi_print_msg() wants the whole thing. 2359 * byte, since spi_print_msg() wants the whole thing.
2359 */ 2360 */
2360 extended_msg[0] = EXTENDED_MESSAGE; 2361 extended_msg[0] = EXTENDED_MESSAGE;
2361 /* Accept first byte by clearing ACK */ 2362 /* Accept first byte by clearing ACK */
@@ -2408,7 +2409,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
2408 default: 2409 default:
2409 if (!tmp) { 2410 if (!tmp) {
2410 printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO); 2411 printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO);
2411 scsi_print_msg (extended_msg); 2412 spi_print_msg(extended_msg);
2412 printk("\n"); 2413 printk("\n");
2413 } else if (tmp != EXTENDED_MESSAGE) 2414 } else if (tmp != EXTENDED_MESSAGE)
2414 printk(KERN_DEBUG "scsi%d: rejecting unknown " 2415 printk(KERN_DEBUG "scsi%d: rejecting unknown "
@@ -2541,7 +2542,7 @@ static void NCR5380_reselect (struct Scsi_Host *instance)
2541 2542
2542 if (!(msg[0] & 0x80)) { 2543 if (!(msg[0] & 0x80)) {
2543 printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO); 2544 printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO);
2544 scsi_print_msg(msg); 2545 spi_print_msg(msg);
2545 do_abort(instance); 2546 do_abort(instance);
2546 return; 2547 return;
2547 } 2548 }
diff --git a/drivers/scsi/blz1230.c b/drivers/scsi/blz1230.c
index 763e409a1ff3..3867ac2de4c2 100644
--- a/drivers/scsi/blz1230.c
+++ b/drivers/scsi/blz1230.c
@@ -224,7 +224,7 @@ static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp)
224static void dma_dump_state(struct NCR_ESP *esp) 224static void dma_dump_state(struct NCR_ESP *esp)
225{ 225{
226 ESPLOG(("intreq:<%04x>, intena:<%04x>\n", 226 ESPLOG(("intreq:<%04x>, intena:<%04x>\n",
227 custom.intreqr, custom.intenar)); 227 amiga_custom.intreqr, amiga_custom.intenar));
228} 228}
229 229
230void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length) 230void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length)
@@ -298,7 +298,7 @@ static int dma_irq_p(struct NCR_ESP *esp)
298 298
299static int dma_ports_p(struct NCR_ESP *esp) 299static int dma_ports_p(struct NCR_ESP *esp)
300{ 300{
301 return ((custom.intenar) & IF_PORTS); 301 return ((amiga_custom.intenar) & IF_PORTS);
302} 302}
303 303
304static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 304static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/blz2060.c b/drivers/scsi/blz2060.c
index d72d05fffdfa..4ebe69e32756 100644
--- a/drivers/scsi/blz2060.c
+++ b/drivers/scsi/blz2060.c
@@ -190,7 +190,7 @@ static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp)
190static void dma_dump_state(struct NCR_ESP *esp) 190static void dma_dump_state(struct NCR_ESP *esp)
191{ 191{
192 ESPLOG(("intreq:<%04x>, intena:<%04x>\n", 192 ESPLOG(("intreq:<%04x>, intena:<%04x>\n",
193 custom.intreqr, custom.intenar)); 193 amiga_custom.intreqr, amiga_custom.intenar));
194} 194}
195 195
196static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length) 196static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length)
@@ -251,7 +251,7 @@ static void dma_led_on(struct NCR_ESP *esp)
251 251
252static int dma_ports_p(struct NCR_ESP *esp) 252static int dma_ports_p(struct NCR_ESP *esp)
253{ 253{
254 return ((custom.intenar) & IF_PORTS); 254 return ((amiga_custom.intenar) & IF_PORTS);
255} 255}
256 256
257static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 257static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/ch.c b/drivers/scsi/ch.c
index ccbbae2bf478..c3f27285db1b 100644
--- a/drivers/scsi/ch.c
+++ b/drivers/scsi/ch.c
@@ -20,9 +20,9 @@
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/blkdev.h> 21#include <linux/blkdev.h>
22#include <linux/completion.h> 22#include <linux/completion.h>
23#include <linux/ioctl32.h>
24#include <linux/compat.h> 23#include <linux/compat.h>
25#include <linux/chio.h> /* here are all the ioctls */ 24#include <linux/chio.h> /* here are all the ioctls */
25#include <linux/mutex.h>
26 26
27#include <scsi/scsi.h> 27#include <scsi/scsi.h>
28#include <scsi/scsi_cmnd.h> 28#include <scsi/scsi_cmnd.h>
@@ -75,7 +75,7 @@ static int vendor_counts[CH_TYPES-4];
75module_param_array(vendor_firsts, int, NULL, 0444); 75module_param_array(vendor_firsts, int, NULL, 0444);
76module_param_array(vendor_counts, int, NULL, 0444); 76module_param_array(vendor_counts, int, NULL, 0444);
77 77
78static char *vendor_labels[CH_TYPES-4] = { 78static const char * vendor_labels[CH_TYPES-4] = {
79 "v0", "v1", "v2", "v3" 79 "v0", "v1", "v2", "v3"
80}; 80};
81// module_param_string_array(vendor_labels, NULL, 0444); 81// module_param_string_array(vendor_labels, NULL, 0444);
@@ -112,7 +112,7 @@ typedef struct {
112 u_int counts[CH_TYPES]; 112 u_int counts[CH_TYPES];
113 u_int unit_attention; 113 u_int unit_attention;
114 u_int voltags; 114 u_int voltags;
115 struct semaphore lock; 115 struct mutex lock;
116} scsi_changer; 116} scsi_changer;
117 117
118static LIST_HEAD(ch_devlist); 118static LIST_HEAD(ch_devlist);
@@ -140,7 +140,7 @@ static struct file_operations changer_fops =
140#endif 140#endif
141}; 141};
142 142
143static struct { 143static const struct {
144 unsigned char sense; 144 unsigned char sense;
145 unsigned char asc; 145 unsigned char asc;
146 unsigned char ascq; 146 unsigned char ascq;
@@ -566,7 +566,7 @@ static int ch_gstatus(scsi_changer *ch, int type, unsigned char __user *dest)
566 u_char data[16]; 566 u_char data[16];
567 unsigned int i; 567 unsigned int i;
568 568
569 down(&ch->lock); 569 mutex_lock(&ch->lock);
570 for (i = 0; i < ch->counts[type]; i++) { 570 for (i = 0; i < ch->counts[type]; i++) {
571 if (0 != ch_read_element_status 571 if (0 != ch_read_element_status
572 (ch, ch->firsts[type]+i,data)) { 572 (ch, ch->firsts[type]+i,data)) {
@@ -583,7 +583,7 @@ static int ch_gstatus(scsi_changer *ch, int type, unsigned char __user *dest)
583 if (0 != retval) 583 if (0 != retval)
584 break; 584 break;
585 } 585 }
586 up(&ch->lock); 586 mutex_unlock(&ch->lock);
587 return retval; 587 return retval;
588} 588}
589 589
@@ -688,11 +688,11 @@ static int ch_ioctl(struct inode * inode, struct file * file,
688 dprintk("CHIOPOSITION: invalid parameter\n"); 688 dprintk("CHIOPOSITION: invalid parameter\n");
689 return -EBADSLT; 689 return -EBADSLT;
690 } 690 }
691 down(&ch->lock); 691 mutex_lock(&ch->lock);
692 retval = ch_position(ch,0, 692 retval = ch_position(ch,0,
693 ch->firsts[pos.cp_type] + pos.cp_unit, 693 ch->firsts[pos.cp_type] + pos.cp_unit,
694 pos.cp_flags & CP_INVERT); 694 pos.cp_flags & CP_INVERT);
695 up(&ch->lock); 695 mutex_unlock(&ch->lock);
696 return retval; 696 return retval;
697 } 697 }
698 698
@@ -709,12 +709,12 @@ static int ch_ioctl(struct inode * inode, struct file * file,
709 return -EBADSLT; 709 return -EBADSLT;
710 } 710 }
711 711
712 down(&ch->lock); 712 mutex_lock(&ch->lock);
713 retval = ch_move(ch,0, 713 retval = ch_move(ch,0,
714 ch->firsts[mv.cm_fromtype] + mv.cm_fromunit, 714 ch->firsts[mv.cm_fromtype] + mv.cm_fromunit,
715 ch->firsts[mv.cm_totype] + mv.cm_tounit, 715 ch->firsts[mv.cm_totype] + mv.cm_tounit,
716 mv.cm_flags & CM_INVERT); 716 mv.cm_flags & CM_INVERT);
717 up(&ch->lock); 717 mutex_unlock(&ch->lock);
718 return retval; 718 return retval;
719 } 719 }
720 720
@@ -732,14 +732,14 @@ static int ch_ioctl(struct inode * inode, struct file * file,
732 return -EBADSLT; 732 return -EBADSLT;
733 } 733 }
734 734
735 down(&ch->lock); 735 mutex_lock(&ch->lock);
736 retval = ch_exchange 736 retval = ch_exchange
737 (ch,0, 737 (ch,0,
738 ch->firsts[mv.ce_srctype] + mv.ce_srcunit, 738 ch->firsts[mv.ce_srctype] + mv.ce_srcunit,
739 ch->firsts[mv.ce_fdsttype] + mv.ce_fdstunit, 739 ch->firsts[mv.ce_fdsttype] + mv.ce_fdstunit,
740 ch->firsts[mv.ce_sdsttype] + mv.ce_sdstunit, 740 ch->firsts[mv.ce_sdsttype] + mv.ce_sdstunit,
741 mv.ce_flags & CE_INVERT1, mv.ce_flags & CE_INVERT2); 741 mv.ce_flags & CE_INVERT1, mv.ce_flags & CE_INVERT2);
742 up(&ch->lock); 742 mutex_unlock(&ch->lock);
743 return retval; 743 return retval;
744 } 744 }
745 745
@@ -773,7 +773,7 @@ static int ch_ioctl(struct inode * inode, struct file * file,
773 buffer = kmalloc(512, GFP_KERNEL | GFP_DMA); 773 buffer = kmalloc(512, GFP_KERNEL | GFP_DMA);
774 if (!buffer) 774 if (!buffer)
775 return -ENOMEM; 775 return -ENOMEM;
776 down(&ch->lock); 776 mutex_lock(&ch->lock);
777 777
778 voltag_retry: 778 voltag_retry:
779 memset(cmd,0,sizeof(cmd)); 779 memset(cmd,0,sizeof(cmd));
@@ -824,7 +824,7 @@ static int ch_ioctl(struct inode * inode, struct file * file,
824 goto voltag_retry; 824 goto voltag_retry;
825 } 825 }
826 kfree(buffer); 826 kfree(buffer);
827 up(&ch->lock); 827 mutex_unlock(&ch->lock);
828 828
829 if (copy_to_user(argp, &cge, sizeof (cge))) 829 if (copy_to_user(argp, &cge, sizeof (cge)))
830 return -EFAULT; 830 return -EFAULT;
@@ -833,9 +833,9 @@ static int ch_ioctl(struct inode * inode, struct file * file,
833 833
834 case CHIOINITELEM: 834 case CHIOINITELEM:
835 { 835 {
836 down(&ch->lock); 836 mutex_lock(&ch->lock);
837 retval = ch_init_elem(ch); 837 retval = ch_init_elem(ch);
838 up(&ch->lock); 838 mutex_unlock(&ch->lock);
839 return retval; 839 return retval;
840 } 840 }
841 841
@@ -852,12 +852,12 @@ static int ch_ioctl(struct inode * inode, struct file * file,
852 return -EBADSLT; 852 return -EBADSLT;
853 } 853 }
854 elem = ch->firsts[csv.csv_type] + csv.csv_unit; 854 elem = ch->firsts[csv.csv_type] + csv.csv_unit;
855 down(&ch->lock); 855 mutex_lock(&ch->lock);
856 retval = ch_set_voltag(ch, elem, 856 retval = ch_set_voltag(ch, elem,
857 csv.csv_flags & CSV_AVOLTAG, 857 csv.csv_flags & CSV_AVOLTAG,
858 csv.csv_flags & CSV_CLEARTAG, 858 csv.csv_flags & CSV_CLEARTAG,
859 csv.csv_voltag); 859 csv.csv_voltag);
860 up(&ch->lock); 860 mutex_unlock(&ch->lock);
861 return retval; 861 return retval;
862 } 862 }
863 863
@@ -930,7 +930,7 @@ static int ch_probe(struct device *dev)
930 memset(ch,0,sizeof(*ch)); 930 memset(ch,0,sizeof(*ch));
931 ch->minor = ch_devcount; 931 ch->minor = ch_devcount;
932 sprintf(ch->name,"ch%d",ch->minor); 932 sprintf(ch->name,"ch%d",ch->minor);
933 init_MUTEX(&ch->lock); 933 mutex_init(&ch->lock);
934 ch->device = sd; 934 ch->device = sd;
935 ch_readconfig(ch); 935 ch_readconfig(ch);
936 if (init) 936 if (init)
diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c
index 09bc81557b6e..30a335349cee 100644
--- a/drivers/scsi/constants.c
+++ b/drivers/scsi/constants.c
@@ -1065,7 +1065,7 @@ struct error_info2 {
1065 const char * fmt; 1065 const char * fmt;
1066}; 1066};
1067 1067
1068static struct error_info2 additional2[] = 1068static const struct error_info2 additional2[] =
1069{ 1069{
1070 {0x40,0x00,0x7f,"Ram failure (%x)"}, 1070 {0x40,0x00,0x7f,"Ram failure (%x)"},
1071 {0x40,0x80,0xff,"Diagnostic failure on component (%x)"}, 1071 {0x40,0x80,0xff,"Diagnostic failure on component (%x)"},
@@ -1077,7 +1077,7 @@ static struct error_info2 additional2[] =
1077}; 1077};
1078 1078
1079/* description of the sense key values */ 1079/* description of the sense key values */
1080static const char *snstext[] = { 1080static const char * const snstext[] = {
1081 "No Sense", /* 0: There is no sense information */ 1081 "No Sense", /* 0: There is no sense information */
1082 "Recovered Error", /* 1: The last command completed successfully 1082 "Recovered Error", /* 1: The last command completed successfully
1083 but used error correction */ 1083 but used error correction */
@@ -1278,114 +1278,6 @@ void scsi_print_req_sense(const char *devclass, struct scsi_request *sreq)
1278} 1278}
1279EXPORT_SYMBOL(scsi_print_req_sense); 1279EXPORT_SYMBOL(scsi_print_req_sense);
1280 1280
1281#ifdef CONFIG_SCSI_CONSTANTS
1282static const char *one_byte_msgs[] = {
1283/* 0x00 */ "Command Complete", NULL, "Save Pointers",
1284/* 0x03 */ "Restore Pointers", "Disconnect", "Initiator Error",
1285/* 0x06 */ "Abort", "Message Reject", "Nop", "Message Parity Error",
1286/* 0x0a */ "Linked Command Complete", "Linked Command Complete w/flag",
1287/* 0x0c */ "Bus device reset", "Abort Tag", "Clear Queue",
1288/* 0x0f */ "Initiate Recovery", "Release Recovery"
1289};
1290#define NO_ONE_BYTE_MSGS (sizeof(one_byte_msgs) / sizeof (const char *))
1291
1292static const char *two_byte_msgs[] = {
1293/* 0x20 */ "Simple Queue Tag", "Head of Queue Tag", "Ordered Queue Tag"
1294/* 0x23 */ "Ignore Wide Residue"
1295};
1296#define NO_TWO_BYTE_MSGS (sizeof(two_byte_msgs) / sizeof (const char *))
1297
1298static const char *extended_msgs[] = {
1299/* 0x00 */ "Modify Data Pointer", "Synchronous Data Transfer Request",
1300/* 0x02 */ "SCSI-I Extended Identify", "Wide Data Transfer Request"
1301};
1302#define NO_EXTENDED_MSGS (sizeof(two_byte_msgs) / sizeof (const char *))
1303
1304
1305int scsi_print_msg (const unsigned char *msg)
1306{
1307 int len = 0, i;
1308 if (msg[0] == EXTENDED_MESSAGE) {
1309 len = 3 + msg[1];
1310 if (msg[2] < NO_EXTENDED_MSGS)
1311 printk ("%s ", extended_msgs[msg[2]]);
1312 else
1313 printk ("Extended Message, reserved code (0x%02x) ",
1314 (int) msg[2]);
1315 switch (msg[2]) {
1316 case EXTENDED_MODIFY_DATA_POINTER:
1317 printk("pointer = %d", (int) (msg[3] << 24) |
1318 (msg[4] << 16) | (msg[5] << 8) | msg[6]);
1319 break;
1320 case EXTENDED_SDTR:
1321 printk("period = %d ns, offset = %d",
1322 (int) msg[3] * 4, (int) msg[4]);
1323 break;
1324 case EXTENDED_WDTR:
1325 printk("width = 2^%d bytes", msg[3]);
1326 break;
1327 default:
1328 for (i = 2; i < len; ++i)
1329 printk("%02x ", msg[i]);
1330 }
1331 /* Identify */
1332 } else if (msg[0] & 0x80) {
1333 printk("Identify disconnect %sallowed %s %d ",
1334 (msg[0] & 0x40) ? "" : "not ",
1335 (msg[0] & 0x20) ? "target routine" : "lun",
1336 msg[0] & 0x7);
1337 len = 1;
1338 /* Normal One byte */
1339 } else if (msg[0] < 0x1f) {
1340 if (msg[0] < NO_ONE_BYTE_MSGS)
1341 printk(one_byte_msgs[msg[0]]);
1342 else
1343 printk("reserved (%02x) ", msg[0]);
1344 len = 1;
1345 /* Two byte */
1346 } else if (msg[0] <= 0x2f) {
1347 if ((msg[0] - 0x20) < NO_TWO_BYTE_MSGS)
1348 printk("%s %02x ", two_byte_msgs[msg[0] - 0x20],
1349 msg[1]);
1350 else
1351 printk("reserved two byte (%02x %02x) ",
1352 msg[0], msg[1]);
1353 len = 2;
1354 } else
1355 printk("reserved");
1356 return len;
1357}
1358EXPORT_SYMBOL(scsi_print_msg);
1359
1360#else /* ifndef CONFIG_SCSI_CONSTANTS */
1361
1362int scsi_print_msg (const unsigned char *msg)
1363{
1364 int len = 0, i;
1365
1366 if (msg[0] == EXTENDED_MESSAGE) {
1367 len = 3 + msg[1];
1368 for (i = 0; i < len; ++i)
1369 printk("%02x ", msg[i]);
1370 /* Identify */
1371 } else if (msg[0] & 0x80) {
1372 printk("%02x ", msg[0]);
1373 len = 1;
1374 /* Normal One byte */
1375 } else if (msg[0] < 0x1f) {
1376 printk("%02x ", msg[0]);
1377 len = 1;
1378 /* Two byte */
1379 } else if (msg[0] <= 0x2f) {
1380 printk("%02x %02x", msg[0], msg[1]);
1381 len = 2;
1382 } else
1383 printk("%02x ", msg[0]);
1384 return len;
1385}
1386EXPORT_SYMBOL(scsi_print_msg);
1387#endif /* ! CONFIG_SCSI_CONSTANTS */
1388
1389void scsi_print_command(struct scsi_cmnd *cmd) 1281void scsi_print_command(struct scsi_cmnd *cmd)
1390{ 1282{
1391 /* Assume appended output (i.e. not at start of line) */ 1283 /* Assume appended output (i.e. not at start of line) */
@@ -1397,7 +1289,7 @@ EXPORT_SYMBOL(scsi_print_command);
1397 1289
1398#ifdef CONFIG_SCSI_CONSTANTS 1290#ifdef CONFIG_SCSI_CONSTANTS
1399 1291
1400static const char * hostbyte_table[]={ 1292static const char * const hostbyte_table[]={
1401"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET", 1293"DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET",
1402"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR", 1294"DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR",
1403"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"}; 1295"DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY"};
@@ -1422,12 +1314,12 @@ void scsi_print_hostbyte(int scsiresult)
1422 1314
1423#ifdef CONFIG_SCSI_CONSTANTS 1315#ifdef CONFIG_SCSI_CONSTANTS
1424 1316
1425static const char * driverbyte_table[]={ 1317static const char * const driverbyte_table[]={
1426"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR", 1318"DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT", "DRIVER_MEDIA", "DRIVER_ERROR",
1427"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"}; 1319"DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"};
1428#define NUM_DRIVERBYTE_STRS (sizeof(driverbyte_table) / sizeof(const char *)) 1320#define NUM_DRIVERBYTE_STRS (sizeof(driverbyte_table) / sizeof(const char *))
1429 1321
1430static const char * driversuggest_table[]={"SUGGEST_OK", 1322static const char * const driversuggest_table[]={"SUGGEST_OK",
1431"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE", 1323"SUGGEST_RETRY", "SUGGEST_ABORT", "SUGGEST_REMAP", "SUGGEST_DIE",
1432"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"}; 1324"SUGGEST_5", "SUGGEST_6", "SUGGEST_7", "SUGGEST_SENSE"};
1433#define NUM_SUGGEST_STRS (sizeof(driversuggest_table) / sizeof(const char *)) 1325#define NUM_SUGGEST_STRS (sizeof(driversuggest_table) / sizeof(const char *))
diff --git a/drivers/scsi/cyberstorm.c b/drivers/scsi/cyberstorm.c
index f9b940e56430..a4a4fac5c0a1 100644
--- a/drivers/scsi/cyberstorm.c
+++ b/drivers/scsi/cyberstorm.c
@@ -223,7 +223,7 @@ static void dma_dump_state(struct NCR_ESP *esp)
223 esp->esp_id, ((struct cyber_dma_registers *) 223 esp->esp_id, ((struct cyber_dma_registers *)
224 (esp->dregs))->cond_reg)); 224 (esp->dregs))->cond_reg));
225 ESPLOG(("intreq:<%04x>, intena:<%04x>\n", 225 ESPLOG(("intreq:<%04x>, intena:<%04x>\n",
226 custom.intreqr, custom.intenar)); 226 amiga_custom.intreqr, amiga_custom.intenar));
227} 227}
228 228
229static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length) 229static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length)
@@ -322,7 +322,7 @@ static void dma_led_on(struct NCR_ESP *esp)
322 322
323static int dma_ports_p(struct NCR_ESP *esp) 323static int dma_ports_p(struct NCR_ESP *esp)
324{ 324{
325 return ((custom.intenar) & IF_PORTS); 325 return ((amiga_custom.intenar) & IF_PORTS);
326} 326}
327 327
328static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 328static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/cyberstormII.c b/drivers/scsi/cyberstormII.c
index a3caabfd7557..3a803d73bc5f 100644
--- a/drivers/scsi/cyberstormII.c
+++ b/drivers/scsi/cyberstormII.c
@@ -200,7 +200,7 @@ static void dma_dump_state(struct NCR_ESP *esp)
200 esp->esp_id, ((struct cyberII_dma_registers *) 200 esp->esp_id, ((struct cyberII_dma_registers *)
201 (esp->dregs))->cond_reg)); 201 (esp->dregs))->cond_reg));
202 ESPLOG(("intreq:<%04x>, intena:<%04x>\n", 202 ESPLOG(("intreq:<%04x>, intena:<%04x>\n",
203 custom.intreqr, custom.intenar)); 203 amiga_custom.intreqr, amiga_custom.intenar));
204} 204}
205 205
206static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length) 206static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length)
@@ -259,7 +259,7 @@ static void dma_led_on(struct NCR_ESP *esp)
259 259
260static int dma_ports_p(struct NCR_ESP *esp) 260static int dma_ports_p(struct NCR_ESP *esp)
261{ 261{
262 return ((custom.intenar) & IF_PORTS); 262 return ((amiga_custom.intenar) & IF_PORTS);
263} 263}
264 264
265static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 265static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index 6252b9ddc01e..6e6b293dcb28 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -61,6 +61,7 @@ MODULE_DESCRIPTION("Adaptec I2O RAID Driver");
61#include <linux/timer.h> 61#include <linux/timer.h>
62#include <linux/string.h> 62#include <linux/string.h>
63#include <linux/ioport.h> 63#include <linux/ioport.h>
64#include <linux/mutex.h>
64 65
65#include <asm/processor.h> /* for boot_cpu_data */ 66#include <asm/processor.h> /* for boot_cpu_data */
66#include <asm/pgtable.h> 67#include <asm/pgtable.h>
@@ -106,7 +107,7 @@ static dpt_sig_S DPTI_sig = {
106 *============================================================================ 107 *============================================================================
107 */ 108 */
108 109
109static DECLARE_MUTEX(adpt_configuration_lock); 110static DEFINE_MUTEX(adpt_configuration_lock);
110 111
111static struct i2o_sys_tbl *sys_tbl = NULL; 112static struct i2o_sys_tbl *sys_tbl = NULL;
112static int sys_tbl_ind = 0; 113static int sys_tbl_ind = 0;
@@ -537,13 +538,13 @@ static int adpt_proc_info(struct Scsi_Host *host, char *buffer, char **start, of
537 */ 538 */
538 539
539 // Find HBA (host bus adapter) we are looking for 540 // Find HBA (host bus adapter) we are looking for
540 down(&adpt_configuration_lock); 541 mutex_lock(&adpt_configuration_lock);
541 for (pHba = hba_chain; pHba; pHba = pHba->next) { 542 for (pHba = hba_chain; pHba; pHba = pHba->next) {
542 if (pHba->host == host) { 543 if (pHba->host == host) {
543 break; /* found adapter */ 544 break; /* found adapter */
544 } 545 }
545 } 546 }
546 up(&adpt_configuration_lock); 547 mutex_unlock(&adpt_configuration_lock);
547 if (pHba == NULL) { 548 if (pHba == NULL) {
548 return 0; 549 return 0;
549 } 550 }
@@ -898,6 +899,12 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
898 if(pci_enable_device(pDev)) { 899 if(pci_enable_device(pDev)) {
899 return -EINVAL; 900 return -EINVAL;
900 } 901 }
902
903 if (pci_request_regions(pDev, "dpt_i2o")) {
904 PERROR("dpti: adpt_config_hba: pci request region failed\n");
905 return -EINVAL;
906 }
907
901 pci_set_master(pDev); 908 pci_set_master(pDev);
902 if (pci_set_dma_mask(pDev, 0xffffffffffffffffULL) && 909 if (pci_set_dma_mask(pDev, 0xffffffffffffffffULL) &&
903 pci_set_dma_mask(pDev, 0xffffffffULL)) 910 pci_set_dma_mask(pDev, 0xffffffffULL))
@@ -923,10 +930,6 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
923 raptorFlag = TRUE; 930 raptorFlag = TRUE;
924 } 931 }
925 932
926 if (pci_request_regions(pDev, "dpt_i2o")) {
927 PERROR("dpti: adpt_config_hba: pci request region failed\n");
928 return -EINVAL;
929 }
930 base_addr_virt = ioremap(base_addr0_phys,hba_map0_area_size); 933 base_addr_virt = ioremap(base_addr0_phys,hba_map0_area_size);
931 if (!base_addr_virt) { 934 if (!base_addr_virt) {
932 pci_release_regions(pDev); 935 pci_release_regions(pDev);
@@ -958,7 +961,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
958 } 961 }
959 memset(pHba, 0, sizeof(adpt_hba)); 962 memset(pHba, 0, sizeof(adpt_hba));
960 963
961 down(&adpt_configuration_lock); 964 mutex_lock(&adpt_configuration_lock);
962 965
963 if(hba_chain != NULL){ 966 if(hba_chain != NULL){
964 for(p = hba_chain; p->next; p = p->next); 967 for(p = hba_chain; p->next; p = p->next);
@@ -971,7 +974,7 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev
971 sprintf(pHba->name, "dpti%d", hba_count); 974 sprintf(pHba->name, "dpti%d", hba_count);
972 hba_count++; 975 hba_count++;
973 976
974 up(&adpt_configuration_lock); 977 mutex_unlock(&adpt_configuration_lock);
975 978
976 pHba->pDev = pDev; 979 pHba->pDev = pDev;
977 pHba->base_addr_phys = base_addr0_phys; 980 pHba->base_addr_phys = base_addr0_phys;
@@ -1027,7 +1030,7 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
1027 struct adpt_device* pNext; 1030 struct adpt_device* pNext;
1028 1031
1029 1032
1030 down(&adpt_configuration_lock); 1033 mutex_lock(&adpt_configuration_lock);
1031 // scsi_unregister calls our adpt_release which 1034 // scsi_unregister calls our adpt_release which
1032 // does a quiese 1035 // does a quiese
1033 if(pHba->host){ 1036 if(pHba->host){
@@ -1046,7 +1049,7 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
1046 } 1049 }
1047 1050
1048 hba_count--; 1051 hba_count--;
1049 up(&adpt_configuration_lock); 1052 mutex_unlock(&adpt_configuration_lock);
1050 1053
1051 iounmap(pHba->base_addr_virt); 1054 iounmap(pHba->base_addr_virt);
1052 pci_release_regions(pHba->pDev); 1055 pci_release_regions(pHba->pDev);
@@ -1549,7 +1552,7 @@ static int adpt_i2o_parse_lct(adpt_hba* pHba)
1549 1552
1550static int adpt_i2o_install_device(adpt_hba* pHba, struct i2o_device *d) 1553static int adpt_i2o_install_device(adpt_hba* pHba, struct i2o_device *d)
1551{ 1554{
1552 down(&adpt_configuration_lock); 1555 mutex_lock(&adpt_configuration_lock);
1553 d->controller=pHba; 1556 d->controller=pHba;
1554 d->owner=NULL; 1557 d->owner=NULL;
1555 d->next=pHba->devices; 1558 d->next=pHba->devices;
@@ -1560,7 +1563,7 @@ static int adpt_i2o_install_device(adpt_hba* pHba, struct i2o_device *d)
1560 pHba->devices=d; 1563 pHba->devices=d;
1561 *d->dev_name = 0; 1564 *d->dev_name = 0;
1562 1565
1563 up(&adpt_configuration_lock); 1566 mutex_unlock(&adpt_configuration_lock);
1564 return 0; 1567 return 0;
1565} 1568}
1566 1569
@@ -1575,24 +1578,24 @@ static int adpt_open(struct inode *inode, struct file *file)
1575 if (minor >= hba_count) { 1578 if (minor >= hba_count) {
1576 return -ENXIO; 1579 return -ENXIO;
1577 } 1580 }
1578 down(&adpt_configuration_lock); 1581 mutex_lock(&adpt_configuration_lock);
1579 for (pHba = hba_chain; pHba; pHba = pHba->next) { 1582 for (pHba = hba_chain; pHba; pHba = pHba->next) {
1580 if (pHba->unit == minor) { 1583 if (pHba->unit == minor) {
1581 break; /* found adapter */ 1584 break; /* found adapter */
1582 } 1585 }
1583 } 1586 }
1584 if (pHba == NULL) { 1587 if (pHba == NULL) {
1585 up(&adpt_configuration_lock); 1588 mutex_unlock(&adpt_configuration_lock);
1586 return -ENXIO; 1589 return -ENXIO;
1587 } 1590 }
1588 1591
1589// if(pHba->in_use){ 1592// if(pHba->in_use){
1590 // up(&adpt_configuration_lock); 1593 // mutex_unlock(&adpt_configuration_lock);
1591// return -EBUSY; 1594// return -EBUSY;
1592// } 1595// }
1593 1596
1594 pHba->in_use = 1; 1597 pHba->in_use = 1;
1595 up(&adpt_configuration_lock); 1598 mutex_unlock(&adpt_configuration_lock);
1596 1599
1597 return 0; 1600 return 0;
1598} 1601}
@@ -1606,13 +1609,13 @@ static int adpt_close(struct inode *inode, struct file *file)
1606 if (minor >= hba_count) { 1609 if (minor >= hba_count) {
1607 return -ENXIO; 1610 return -ENXIO;
1608 } 1611 }
1609 down(&adpt_configuration_lock); 1612 mutex_lock(&adpt_configuration_lock);
1610 for (pHba = hba_chain; pHba; pHba = pHba->next) { 1613 for (pHba = hba_chain; pHba; pHba = pHba->next) {
1611 if (pHba->unit == minor) { 1614 if (pHba->unit == minor) {
1612 break; /* found adapter */ 1615 break; /* found adapter */
1613 } 1616 }
1614 } 1617 }
1615 up(&adpt_configuration_lock); 1618 mutex_unlock(&adpt_configuration_lock);
1616 if (pHba == NULL) { 1619 if (pHba == NULL) {
1617 return -ENXIO; 1620 return -ENXIO;
1618 } 1621 }
@@ -1910,13 +1913,13 @@ static int adpt_ioctl(struct inode *inode, struct file *file, uint cmd,
1910 if (minor >= DPTI_MAX_HBA){ 1913 if (minor >= DPTI_MAX_HBA){
1911 return -ENXIO; 1914 return -ENXIO;
1912 } 1915 }
1913 down(&adpt_configuration_lock); 1916 mutex_lock(&adpt_configuration_lock);
1914 for (pHba = hba_chain; pHba; pHba = pHba->next) { 1917 for (pHba = hba_chain; pHba; pHba = pHba->next) {
1915 if (pHba->unit == minor) { 1918 if (pHba->unit == minor) {
1916 break; /* found adapter */ 1919 break; /* found adapter */
1917 } 1920 }
1918 } 1921 }
1919 up(&adpt_configuration_lock); 1922 mutex_unlock(&adpt_configuration_lock);
1920 if(pHba == NULL){ 1923 if(pHba == NULL){
1921 return -ENXIO; 1924 return -ENXIO;
1922 } 1925 }
diff --git a/drivers/scsi/fastlane.c b/drivers/scsi/fastlane.c
index ccee68b52f7e..8ae9c406a83b 100644
--- a/drivers/scsi/fastlane.c
+++ b/drivers/scsi/fastlane.c
@@ -268,7 +268,7 @@ static void dma_dump_state(struct NCR_ESP *esp)
268 esp->esp_id, ((struct fastlane_dma_registers *) 268 esp->esp_id, ((struct fastlane_dma_registers *)
269 (esp->dregs))->cond_reg)); 269 (esp->dregs))->cond_reg));
270 ESPLOG(("intreq:<%04x>, intena:<%04x>\n", 270 ESPLOG(("intreq:<%04x>, intena:<%04x>\n",
271 custom.intreqr, custom.intenar)); 271 amiga_custom.intreqr, amiga_custom.intenar));
272} 272}
273 273
274static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length) 274static void dma_init_read(struct NCR_ESP *esp, __u32 addr, int length)
@@ -368,7 +368,7 @@ static void dma_led_on(struct NCR_ESP *esp)
368 368
369static int dma_ports_p(struct NCR_ESP *esp) 369static int dma_ports_p(struct NCR_ESP *esp)
370{ 370{
371 return ((custom.intenar) & IF_PORTS); 371 return ((amiga_custom.intenar) & IF_PORTS);
372} 372}
373 373
374static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 374static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index a6deb016584c..bd3ffdf6c800 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -328,7 +328,7 @@
328 * hdr_channel:x x - number of virtual bus for host drives 328 * hdr_channel:x x - number of virtual bus for host drives
329 * shared_access:Y disable driver reserve/release protocol to 329 * shared_access:Y disable driver reserve/release protocol to
330 * access a shared resource from several nodes, 330 * access a shared resource from several nodes,
331 * appropiate controller firmware required 331 * appropriate controller firmware required
332 * shared_access:N enable driver reserve/release protocol 332 * shared_access:N enable driver reserve/release protocol
333 * probe_eisa_isa:Y scan for EISA/ISA controllers 333 * probe_eisa_isa:Y scan for EISA/ISA controllers
334 * probe_eisa_isa:N do not scan for EISA/ISA controllers 334 * probe_eisa_isa:N do not scan for EISA/ISA controllers
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index 5b9c2c5a7f0e..588107923499 100644
--- a/drivers/scsi/hosts.c
+++ b/drivers/scsi/hosts.c
@@ -156,16 +156,16 @@ EXPORT_SYMBOL(scsi_host_set_state);
156void scsi_remove_host(struct Scsi_Host *shost) 156void scsi_remove_host(struct Scsi_Host *shost)
157{ 157{
158 unsigned long flags; 158 unsigned long flags;
159 down(&shost->scan_mutex); 159 mutex_lock(&shost->scan_mutex);
160 spin_lock_irqsave(shost->host_lock, flags); 160 spin_lock_irqsave(shost->host_lock, flags);
161 if (scsi_host_set_state(shost, SHOST_CANCEL)) 161 if (scsi_host_set_state(shost, SHOST_CANCEL))
162 if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)) { 162 if (scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)) {
163 spin_unlock_irqrestore(shost->host_lock, flags); 163 spin_unlock_irqrestore(shost->host_lock, flags);
164 up(&shost->scan_mutex); 164 mutex_unlock(&shost->scan_mutex);
165 return; 165 return;
166 } 166 }
167 spin_unlock_irqrestore(shost->host_lock, flags); 167 spin_unlock_irqrestore(shost->host_lock, flags);
168 up(&shost->scan_mutex); 168 mutex_unlock(&shost->scan_mutex);
169 scsi_forget_host(shost); 169 scsi_forget_host(shost);
170 scsi_proc_host_rm(shost); 170 scsi_proc_host_rm(shost);
171 171
@@ -320,7 +320,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
320 INIT_LIST_HEAD(&shost->starved_list); 320 INIT_LIST_HEAD(&shost->starved_list);
321 init_waitqueue_head(&shost->host_wait); 321 init_waitqueue_head(&shost->host_wait);
322 322
323 init_MUTEX(&shost->scan_mutex); 323 mutex_init(&shost->scan_mutex);
324 324
325 shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */ 325 shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */
326 shost->dma_channel = 0xff; 326 shost->dma_channel = 0xff;
@@ -347,17 +347,8 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
347 shost->cmd_per_lun = sht->cmd_per_lun; 347 shost->cmd_per_lun = sht->cmd_per_lun;
348 shost->unchecked_isa_dma = sht->unchecked_isa_dma; 348 shost->unchecked_isa_dma = sht->unchecked_isa_dma;
349 shost->use_clustering = sht->use_clustering; 349 shost->use_clustering = sht->use_clustering;
350 shost->ordered_flush = sht->ordered_flush;
351 shost->ordered_tag = sht->ordered_tag; 350 shost->ordered_tag = sht->ordered_tag;
352 351
353 /*
354 * hosts/devices that do queueing must support ordered tags
355 */
356 if (shost->can_queue > 1 && shost->ordered_flush) {
357 printk(KERN_ERR "scsi: ordered flushes don't support queueing\n");
358 shost->ordered_flush = 0;
359 }
360
361 if (sht->max_host_blocked) 352 if (sht->max_host_blocked)
362 shost->max_host_blocked = sht->max_host_blocked; 353 shost->max_host_blocked = sht->max_host_blocked;
363 else 354 else
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 4cb1f3ed9100..3c688ef54660 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -1046,7 +1046,7 @@ static int idescsi_eh_reset (struct scsi_cmnd *cmd)
1046 1046
1047 /* kill current request */ 1047 /* kill current request */
1048 blkdev_dequeue_request(req); 1048 blkdev_dequeue_request(req);
1049 end_that_request_last(req); 1049 end_that_request_last(req, 0);
1050 if (req->flags & REQ_SENSE) 1050 if (req->flags & REQ_SENSE)
1051 kfree(scsi->pc->buffer); 1051 kfree(scsi->pc->buffer);
1052 kfree(scsi->pc); 1052 kfree(scsi->pc);
@@ -1056,7 +1056,7 @@ static int idescsi_eh_reset (struct scsi_cmnd *cmd)
1056 /* now nuke the drive queue */ 1056 /* now nuke the drive queue */
1057 while ((req = elv_next_request(drive->queue))) { 1057 while ((req = elv_next_request(drive->queue))) {
1058 blkdev_dequeue_request(req); 1058 blkdev_dequeue_request(req);
1059 end_that_request_last(req); 1059 end_that_request_last(req, 0);
1060 } 1060 }
1061 1061
1062 HWGROUP(drive)->rq = NULL; 1062 HWGROUP(drive)->rq = NULL;
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index fa2cb3582cfa..27acf78cf8d8 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -2132,7 +2132,7 @@ restart:
2132 } 2132 }
2133 2133
2134 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); 2134 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
2135 kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE, NULL); 2135 kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE);
2136 LEAVE; 2136 LEAVE;
2137} 2137}
2138 2138
@@ -5887,7 +5887,12 @@ static int __devinit ipr_probe_ioa_part2(struct ipr_ioa_cfg *ioa_cfg)
5887 ENTER; 5887 ENTER;
5888 spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); 5888 spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
5889 dev_dbg(&ioa_cfg->pdev->dev, "ioa_cfg adx: 0x%p\n", ioa_cfg); 5889 dev_dbg(&ioa_cfg->pdev->dev, "ioa_cfg adx: 0x%p\n", ioa_cfg);
5890 _ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_enable_ioa, IPR_SHUTDOWN_NONE); 5890 if (ioa_cfg->needs_hard_reset) {
5891 ioa_cfg->needs_hard_reset = 0;
5892 ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
5893 } else
5894 _ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_enable_ioa,
5895 IPR_SHUTDOWN_NONE);
5891 5896
5892 spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); 5897 spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
5893 wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); 5898 wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
@@ -6264,6 +6269,7 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
6264 unsigned long ipr_regs_pci; 6269 unsigned long ipr_regs_pci;
6265 void __iomem *ipr_regs; 6270 void __iomem *ipr_regs;
6266 u32 rc = PCIBIOS_SUCCESSFUL; 6271 u32 rc = PCIBIOS_SUCCESSFUL;
6272 volatile u32 mask, uproc;
6267 6273
6268 ENTER; 6274 ENTER;
6269 6275
@@ -6356,6 +6362,15 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
6356 goto cleanup_nomem; 6362 goto cleanup_nomem;
6357 } 6363 }
6358 6364
6365 /*
6366 * If HRRQ updated interrupt is not masked, or reset alert is set,
6367 * the card is in an unknown state and needs a hard reset
6368 */
6369 mask = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
6370 uproc = readl(ioa_cfg->regs.sense_uproc_interrupt_reg);
6371 if ((mask & IPR_PCII_HRRQ_UPDATED) == 0 || (uproc & IPR_UPROCI_RESET_ALERT))
6372 ioa_cfg->needs_hard_reset = 1;
6373
6359 ipr_mask_and_clear_interrupts(ioa_cfg, ~IPR_PCII_IOA_TRANS_TO_OPER); 6374 ipr_mask_and_clear_interrupts(ioa_cfg, ~IPR_PCII_IOA_TRANS_TO_OPER);
6360 rc = request_irq(pdev->irq, ipr_isr, SA_SHIRQ, IPR_NAME, ioa_cfg); 6375 rc = request_irq(pdev->irq, ipr_isr, SA_SHIRQ, IPR_NAME, ioa_cfg);
6361 6376
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index 6bec673c925c..b639332131f1 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -36,8 +36,8 @@
36/* 36/*
37 * Literals 37 * Literals
38 */ 38 */
39#define IPR_DRIVER_VERSION "2.1.0" 39#define IPR_DRIVER_VERSION "2.1.1"
40#define IPR_DRIVER_DATE "(October 31, 2005)" 40#define IPR_DRIVER_DATE "(November 15, 2005)"
41 41
42/* 42/*
43 * IPR_MAX_CMD_PER_LUN: This defines the maximum number of outstanding 43 * IPR_MAX_CMD_PER_LUN: This defines the maximum number of outstanding
@@ -922,6 +922,7 @@ struct ipr_ioa_cfg {
922 u8 dump_taken:1; 922 u8 dump_taken:1;
923 u8 allow_cmds:1; 923 u8 allow_cmds:1;
924 u8 allow_ml_add_del:1; 924 u8 allow_ml_add_del:1;
925 u8 needs_hard_reset:1;
925 926
926 enum ipr_cache_state cache_state; 927 enum ipr_cache_state cache_state;
927 u16 type; /* CCIN of the card */ 928 u16 type; /* CCIN of the card */
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 3882d48a42bf..e5e1ca44e1ee 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -1319,6 +1319,9 @@ ips_slave_configure(struct scsi_device * SDptr)
1319 min = ha->max_cmds - 1; 1319 min = ha->max_cmds - 1;
1320 scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, min); 1320 scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, min);
1321 } 1321 }
1322
1323 SDptr->skip_ms_page_8 = 1;
1324 SDptr->skip_ms_page_3f = 1;
1322 return 0; 1325 return 0;
1323} 1326}
1324#endif 1327#endif
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index 3d8009f55342..780bfcc67096 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -33,6 +33,7 @@
33#include <linux/delay.h> 33#include <linux/delay.h>
34#include <linux/kfifo.h> 34#include <linux/kfifo.h>
35#include <linux/scatterlist.h> 35#include <linux/scatterlist.h>
36#include <linux/mutex.h>
36#include <net/tcp.h> 37#include <net/tcp.h>
37#include <scsi/scsi_cmnd.h> 38#include <scsi/scsi_cmnd.h>
38#include <scsi/scsi_device.h> 39#include <scsi/scsi_device.h>
@@ -49,7 +50,7 @@ MODULE_AUTHOR("Dmitry Yusupov <dmitry_yus@yahoo.com>, "
49 "Alex Aizman <itn780@yahoo.com>"); 50 "Alex Aizman <itn780@yahoo.com>");
50MODULE_DESCRIPTION("iSCSI/TCP data-path"); 51MODULE_DESCRIPTION("iSCSI/TCP data-path");
51MODULE_LICENSE("GPL"); 52MODULE_LICENSE("GPL");
52MODULE_VERSION("0:4.409"); 53MODULE_VERSION("0:4.445");
53/* #define DEBUG_TCP */ 54/* #define DEBUG_TCP */
54/* #define DEBUG_SCSI */ 55/* #define DEBUG_SCSI */
55#define DEBUG_ASSERT 56#define DEBUG_ASSERT
@@ -86,35 +87,32 @@ iscsi_buf_init_virt(struct iscsi_buf *ibuf, char *vbuf, int size)
86{ 87{
87 sg_init_one(&ibuf->sg, (u8 *)vbuf, size); 88 sg_init_one(&ibuf->sg, (u8 *)vbuf, size);
88 ibuf->sent = 0; 89 ibuf->sent = 0;
90 ibuf->use_sendmsg = 0;
89} 91}
90 92
91static inline void 93static inline void
92iscsi_buf_init_iov(struct iscsi_buf *ibuf, char *vbuf, int size) 94iscsi_buf_init_iov(struct iscsi_buf *ibuf, char *vbuf, int size)
93{ 95{
94 ibuf->sg.page = (void*)vbuf; 96 ibuf->sg.page = virt_to_page(vbuf);
95 ibuf->sg.offset = (unsigned int)-1; 97 ibuf->sg.offset = offset_in_page(vbuf);
96 ibuf->sg.length = size; 98 ibuf->sg.length = size;
97 ibuf->sent = 0; 99 ibuf->sent = 0;
98} 100 ibuf->use_sendmsg = 1;
99
100static inline void*
101iscsi_buf_iov_base(struct iscsi_buf *ibuf)
102{
103 return (char*)ibuf->sg.page + ibuf->sent;
104} 101}
105 102
106static inline void 103static inline void
107iscsi_buf_init_sg(struct iscsi_buf *ibuf, struct scatterlist *sg) 104iscsi_buf_init_sg(struct iscsi_buf *ibuf, struct scatterlist *sg)
108{ 105{
106 ibuf->sg.page = sg->page;
107 ibuf->sg.offset = sg->offset;
108 ibuf->sg.length = sg->length;
109 /* 109 /*
110 * Fastpath: sg element fits into single page 110 * Fastpath: sg element fits into single page
111 */ 111 */
112 if (sg->length + sg->offset <= PAGE_SIZE && page_count(sg->page) >= 2) { 112 if (sg->length + sg->offset <= PAGE_SIZE && !PageSlab(sg->page))
113 ibuf->sg.page = sg->page; 113 ibuf->use_sendmsg = 0;
114 ibuf->sg.offset = sg->offset; 114 else
115 ibuf->sg.length = sg->length; 115 ibuf->use_sendmsg = 1;
116 } else
117 iscsi_buf_init_iov(ibuf, page_address(sg->page), sg->length);
118 ibuf->sent = 0; 116 ibuf->sent = 0;
119} 117}
120 118
@@ -356,7 +354,7 @@ iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
356 struct scsi_cmnd *sc = ctask->sc; 354 struct scsi_cmnd *sc = ctask->sc;
357 355
358 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1; 356 conn->exp_statsn = be32_to_cpu(rhdr->statsn) + 1;
359 if (rhdr->flags & ISCSI_FLAG_CMD_UNDERFLOW) { 357 if (rhdr->flags & ISCSI_FLAG_DATA_UNDERFLOW) {
360 int res_count = be32_to_cpu(rhdr->residual_count); 358 int res_count = be32_to_cpu(rhdr->residual_count);
361 359
362 if (res_count > 0 && 360 if (res_count > 0 &&
@@ -366,9 +364,7 @@ iscsi_data_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
366 } else 364 } else
367 sc->result = (DID_BAD_TARGET << 16) | 365 sc->result = (DID_BAD_TARGET << 16) |
368 rhdr->cmd_status; 366 rhdr->cmd_status;
369 } else if (rhdr->flags & ISCSI_FLAG_CMD_BIDI_UNDERFLOW) 367 } else if (rhdr->flags & ISCSI_FLAG_DATA_OVERFLOW) {
370 sc->result = (DID_BAD_TARGET << 16) | rhdr->cmd_status;
371 else if (rhdr->flags & ISCSI_FLAG_CMD_OVERFLOW) {
372 sc->resid = be32_to_cpu(rhdr->residual_count); 368 sc->resid = be32_to_cpu(rhdr->residual_count);
373 sc->result = (DID_OK << 16) | rhdr->cmd_status; 369 sc->result = (DID_OK << 16) | rhdr->cmd_status;
374 } else 370 } else
@@ -529,7 +525,7 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
529 __kfifo_put(ctask->r2tqueue, (void*)&r2t, sizeof(void*)); 525 __kfifo_put(ctask->r2tqueue, (void*)&r2t, sizeof(void*));
530 __kfifo_put(conn->writequeue, (void*)&ctask, sizeof(void*)); 526 __kfifo_put(conn->writequeue, (void*)&ctask, sizeof(void*));
531 527
532 schedule_work(&conn->xmitwork); 528 scsi_queue_work(session->host, &conn->xmitwork);
533 conn->r2t_pdus_cnt++; 529 conn->r2t_pdus_cnt++;
534 spin_unlock(&session->lock); 530 spin_unlock(&session->lock);
535 531
@@ -581,10 +577,16 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
581 crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst); 577 crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst);
582 rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + 578 rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) +
583 conn->in.ahslen); 579 conn->in.ahslen);
580 if (cdgst != rdgst) {
581 printk(KERN_ERR "iscsi_tcp: itt %x: hdrdgst error "
582 "recv 0x%x calc 0x%x\n", conn->in.itt, rdgst,
583 cdgst);
584 return ISCSI_ERR_HDR_DGST;
585 }
584 } 586 }
585 587
586 /* save opcode for later */ 588 /* save opcode for later */
587 conn->in.opcode = hdr->opcode; 589 conn->in.opcode = hdr->opcode & ISCSI_OPCODE_MASK;
588 590
589 /* verify itt (itt encoding: age+cid+itt) */ 591 /* verify itt (itt encoding: age+cid+itt) */
590 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) { 592 if (hdr->itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
@@ -610,13 +612,6 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
610 conn->in.ahslen, conn->in.datalen); 612 conn->in.ahslen, conn->in.datalen);
611 613
612 if (conn->in.itt < session->cmds_max) { 614 if (conn->in.itt < session->cmds_max) {
613 if (conn->hdrdgst_en && cdgst != rdgst) {
614 printk(KERN_ERR "iscsi_tcp: itt %x: hdrdgst error "
615 "recv 0x%x calc 0x%x\n", conn->in.itt, rdgst,
616 cdgst);
617 return ISCSI_ERR_HDR_DGST;
618 }
619
620 ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt]; 615 ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt];
621 616
622 if (!ctask->sc) { 617 if (!ctask->sc) {
@@ -642,9 +637,7 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
642 switch(conn->in.opcode) { 637 switch(conn->in.opcode) {
643 case ISCSI_OP_SCSI_CMD_RSP: 638 case ISCSI_OP_SCSI_CMD_RSP:
644 BUG_ON((void*)ctask != ctask->sc->SCp.ptr); 639 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
645 if (ctask->hdr.flags & ISCSI_FLAG_CMD_WRITE) 640 if (!conn->in.datalen)
646 rc = iscsi_cmd_rsp(conn, ctask);
647 else if (!conn->in.datalen)
648 rc = iscsi_cmd_rsp(conn, ctask); 641 rc = iscsi_cmd_rsp(conn, ctask);
649 else 642 else
650 /* 643 /*
@@ -666,8 +659,7 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
666 break; 659 break;
667 case ISCSI_OP_R2T: 660 case ISCSI_OP_R2T:
668 BUG_ON((void*)ctask != ctask->sc->SCp.ptr); 661 BUG_ON((void*)ctask != ctask->sc->SCp.ptr);
669 if (ctask->hdr.flags & ISCSI_FLAG_CMD_WRITE && 662 if (ctask->sc->sc_data_direction == DMA_TO_DEVICE)
670 ctask->sc->sc_data_direction == DMA_TO_DEVICE)
671 rc = iscsi_r2t_rsp(conn, ctask); 663 rc = iscsi_r2t_rsp(conn, ctask);
672 else 664 else
673 rc = ISCSI_ERR_PROTO; 665 rc = ISCSI_ERR_PROTO;
@@ -690,7 +682,7 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
690 switch(conn->in.opcode) { 682 switch(conn->in.opcode) {
691 case ISCSI_OP_LOGIN_RSP: 683 case ISCSI_OP_LOGIN_RSP:
692 case ISCSI_OP_TEXT_RSP: 684 case ISCSI_OP_TEXT_RSP:
693 case ISCSI_OP_LOGOUT_RSP: 685 case ISCSI_OP_LOGOUT_RSP:
694 rc = iscsi_check_assign_cmdsn(session, 686 rc = iscsi_check_assign_cmdsn(session,
695 (struct iscsi_nopin*)hdr); 687 (struct iscsi_nopin*)hdr);
696 if (rc) 688 if (rc)
@@ -731,12 +723,12 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
731 } 723 }
732 spin_unlock(&session->lock); 724 spin_unlock(&session->lock);
733 break; 725 break;
734 case ISCSI_OP_NOOP_IN: 726 case ISCSI_OP_NOOP_IN:
735 if (hdr->ttt != ISCSI_RESERVED_TAG) { 727 if (hdr->ttt != ISCSI_RESERVED_TAG) {
736 rc = ISCSI_ERR_PROTO; 728 rc = ISCSI_ERR_PROTO;
737 break; 729 break;
738 } 730 }
739 rc = iscsi_check_assign_cmdsn(session, 731 rc = iscsi_check_assign_cmdsn(session,
740 (struct iscsi_nopin*)hdr); 732 (struct iscsi_nopin*)hdr);
741 if (rc) 733 if (rc)
742 break; 734 break;
@@ -771,7 +763,7 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
771 if (!rc && hdr->ttt != ISCSI_RESERVED_TAG) 763 if (!rc && hdr->ttt != ISCSI_RESERVED_TAG)
772 rc = iscsi_recv_pdu(iscsi_handle(conn), 764 rc = iscsi_recv_pdu(iscsi_handle(conn),
773 hdr, NULL, 0); 765 hdr, NULL, 0);
774 } else 766 } else
775 rc = ISCSI_ERR_PROTO; 767 rc = ISCSI_ERR_PROTO;
776 break; 768 break;
777 case ISCSI_OP_REJECT: 769 case ISCSI_OP_REJECT:
@@ -906,11 +898,20 @@ partial_sg_digest_update(struct iscsi_conn *conn, struct scatterlist *sg,
906 crypto_digest_update(conn->data_rx_tfm, &temp, 1); 898 crypto_digest_update(conn->data_rx_tfm, &temp, 1);
907} 899}
908 900
901static void
902iscsi_recv_digest_update(struct iscsi_conn *conn, char* buf, int len)
903{
904 struct scatterlist tmp;
905
906 sg_init_one(&tmp, buf, len);
907 crypto_digest_update(conn->data_rx_tfm, &tmp, 1);
908}
909
909static int iscsi_scsi_data_in(struct iscsi_conn *conn) 910static int iscsi_scsi_data_in(struct iscsi_conn *conn)
910{ 911{
911 struct iscsi_cmd_task *ctask = conn->in.ctask; 912 struct iscsi_cmd_task *ctask = conn->in.ctask;
912 struct scsi_cmnd *sc = ctask->sc; 913 struct scsi_cmnd *sc = ctask->sc;
913 struct scatterlist tmp, *sg; 914 struct scatterlist *sg;
914 int i, offset, rc = 0; 915 int i, offset, rc = 0;
915 916
916 BUG_ON((void*)ctask != sc->SCp.ptr); 917 BUG_ON((void*)ctask != sc->SCp.ptr);
@@ -924,10 +925,8 @@ static int iscsi_scsi_data_in(struct iscsi_conn *conn)
924 sc->request_bufflen, ctask->data_offset); 925 sc->request_bufflen, ctask->data_offset);
925 if (rc == -EAGAIN) 926 if (rc == -EAGAIN)
926 return rc; 927 return rc;
927 if (conn->datadgst_en) { 928 if (conn->datadgst_en)
928 sg_init_one(&tmp, sc->request_buffer, i); 929 iscsi_recv_digest_update(conn, sc->request_buffer, i);
929 crypto_digest_update(conn->data_rx_tfm, &tmp, 1);
930 }
931 rc = 0; 930 rc = 0;
932 goto done; 931 goto done;
933 } 932 }
@@ -1021,6 +1020,9 @@ iscsi_data_recv(struct iscsi_conn *conn)
1021 conn->in.hdr = &conn->hdr; 1020 conn->in.hdr = &conn->hdr;
1022 conn->senselen = (conn->data[0] << 8) | conn->data[1]; 1021 conn->senselen = (conn->data[0] << 8) | conn->data[1];
1023 rc = iscsi_cmd_rsp(conn, conn->in.ctask); 1022 rc = iscsi_cmd_rsp(conn, conn->in.ctask);
1023 if (!rc && conn->datadgst_en)
1024 iscsi_recv_digest_update(conn, conn->data,
1025 conn->in.datalen);
1024 } 1026 }
1025 break; 1027 break;
1026 case ISCSI_OP_TEXT_RSP: 1028 case ISCSI_OP_TEXT_RSP:
@@ -1045,6 +1047,11 @@ iscsi_data_recv(struct iscsi_conn *conn)
1045 rc = iscsi_recv_pdu(iscsi_handle(conn), conn->in.hdr, 1047 rc = iscsi_recv_pdu(iscsi_handle(conn), conn->in.hdr,
1046 conn->data, conn->in.datalen); 1048 conn->data, conn->in.datalen);
1047 1049
1050 if (!rc && conn->datadgst_en &&
1051 conn->in.opcode != ISCSI_OP_LOGIN_RSP)
1052 iscsi_recv_digest_update(conn, conn->data,
1053 conn->in.datalen);
1054
1048 if (mtask && conn->login_mtask != mtask) { 1055 if (mtask && conn->login_mtask != mtask) {
1049 spin_lock(&session->lock); 1056 spin_lock(&session->lock);
1050 __kfifo_put(session->mgmtpool.queue, (void*)&mtask, 1057 __kfifo_put(session->mgmtpool.queue, (void*)&mtask,
@@ -1053,6 +1060,8 @@ iscsi_data_recv(struct iscsi_conn *conn)
1053 } 1060 }
1054 } 1061 }
1055 break; 1062 break;
1063 case ISCSI_OP_ASYNC_EVENT:
1064 case ISCSI_OP_REJECT:
1056 default: 1065 default:
1057 BUG_ON(1); 1066 BUG_ON(1);
1058 } 1067 }
@@ -1114,8 +1123,7 @@ more:
1114 */ 1123 */
1115 rc = iscsi_hdr_recv(conn); 1124 rc = iscsi_hdr_recv(conn);
1116 if (!rc && conn->in.datalen) { 1125 if (!rc && conn->in.datalen) {
1117 if (conn->datadgst_en && 1126 if (conn->datadgst_en) {
1118 conn->in.opcode == ISCSI_OP_SCSI_DATA_IN) {
1119 BUG_ON(!conn->data_rx_tfm); 1127 BUG_ON(!conn->data_rx_tfm);
1120 crypto_digest_init(conn->data_rx_tfm); 1128 crypto_digest_init(conn->data_rx_tfm);
1121 } 1129 }
@@ -1127,26 +1135,24 @@ more:
1127 } 1135 }
1128 1136
1129 if (conn->in_progress == IN_PROGRESS_DDIGEST_RECV) { 1137 if (conn->in_progress == IN_PROGRESS_DDIGEST_RECV) {
1138 uint32_t recv_digest;
1130 debug_tcp("extra data_recv offset %d copy %d\n", 1139 debug_tcp("extra data_recv offset %d copy %d\n",
1131 conn->in.offset, conn->in.copy); 1140 conn->in.offset, conn->in.copy);
1132 if (conn->in.opcode == ISCSI_OP_SCSI_DATA_IN) { 1141 skb_copy_bits(conn->in.skb, conn->in.offset,
1133 uint32_t recv_digest; 1142 &recv_digest, 4);
1134 skb_copy_bits(conn->in.skb, conn->in.offset, 1143 conn->in.offset += 4;
1135 &recv_digest, 4); 1144 conn->in.copy -= 4;
1136 conn->in.offset += 4; 1145 if (recv_digest != conn->in.datadgst) {
1137 conn->in.copy -= 4; 1146 debug_tcp("iscsi_tcp: data digest error!"
1138 if (recv_digest != conn->in.datadgst) { 1147 "0x%x != 0x%x\n", recv_digest,
1139 debug_tcp("iscsi_tcp: data digest error!" 1148 conn->in.datadgst);
1140 "0x%x != 0x%x\n", recv_digest, 1149 iscsi_conn_failure(conn, ISCSI_ERR_DATA_DGST);
1141 conn->in.datadgst); 1150 return 0;
1142 iscsi_conn_failure(conn, ISCSI_ERR_DATA_DGST); 1151 } else {
1143 return 0; 1152 debug_tcp("iscsi_tcp: data digest match!"
1144 } else { 1153 "0x%x == 0x%x\n", recv_digest,
1145 debug_tcp("iscsi_tcp: data digest match!" 1154 conn->in.datadgst);
1146 "0x%x == 0x%x\n", recv_digest, 1155 conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1147 conn->in.datadgst);
1148 conn->in_progress = IN_PROGRESS_WAIT_HEADER;
1149 }
1150 } 1156 }
1151 } 1157 }
1152 1158
@@ -1167,8 +1173,7 @@ more:
1167 } 1173 }
1168 conn->in.copy -= conn->in.padding; 1174 conn->in.copy -= conn->in.padding;
1169 conn->in.offset += conn->in.padding; 1175 conn->in.offset += conn->in.padding;
1170 if (conn->datadgst_en && 1176 if (conn->datadgst_en) {
1171 conn->in.opcode == ISCSI_OP_SCSI_DATA_IN) {
1172 if (conn->in.padding) { 1177 if (conn->in.padding) {
1173 debug_tcp("padding -> %d\n", conn->in.padding); 1178 debug_tcp("padding -> %d\n", conn->in.padding);
1174 memset(pad, 0, conn->in.padding); 1179 memset(pad, 0, conn->in.padding);
@@ -1237,8 +1242,9 @@ iscsi_tcp_state_change(struct sock *sk)
1237 conn = (struct iscsi_conn*)sk->sk_user_data; 1242 conn = (struct iscsi_conn*)sk->sk_user_data;
1238 session = conn->session; 1243 session = conn->session;
1239 1244
1240 if (sk->sk_state == TCP_CLOSE_WAIT || 1245 if ((sk->sk_state == TCP_CLOSE_WAIT ||
1241 sk->sk_state == TCP_CLOSE) { 1246 sk->sk_state == TCP_CLOSE) &&
1247 !atomic_read(&sk->sk_rmem_alloc)) {
1242 debug_tcp("iscsi_tcp_state_change: TCP_CLOSE|TCP_CLOSE_WAIT\n"); 1248 debug_tcp("iscsi_tcp_state_change: TCP_CLOSE|TCP_CLOSE_WAIT\n");
1243 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); 1249 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
1244 } 1250 }
@@ -1261,7 +1267,7 @@ iscsi_write_space(struct sock *sk)
1261 conn->old_write_space(sk); 1267 conn->old_write_space(sk);
1262 debug_tcp("iscsi_write_space: cid %d\n", conn->id); 1268 debug_tcp("iscsi_write_space: cid %d\n", conn->id);
1263 clear_bit(SUSPEND_BIT, &conn->suspend_tx); 1269 clear_bit(SUSPEND_BIT, &conn->suspend_tx);
1264 schedule_work(&conn->xmitwork); 1270 scsi_queue_work(conn->session->host, &conn->xmitwork);
1265} 1271}
1266 1272
1267static void 1273static void
@@ -1302,35 +1308,25 @@ iscsi_conn_restore_callbacks(struct iscsi_conn *conn)
1302 * @buf: buffer to write from 1308 * @buf: buffer to write from
1303 * @size: actual size to write 1309 * @size: actual size to write
1304 * @flags: socket's flags 1310 * @flags: socket's flags
1305 *
1306 * Notes:
1307 * depending on buffer will use tcp_sendpage() or tcp_sendmsg().
1308 * buf->sg.offset == -1 tells us that buffer is non S/G and forces
1309 * to use tcp_sendmsg().
1310 */ 1311 */
1311static inline int 1312static inline int
1312iscsi_send(struct socket *sk, struct iscsi_buf *buf, int size, int flags) 1313iscsi_send(struct iscsi_conn *conn, struct iscsi_buf *buf, int size, int flags)
1313{ 1314{
1314 int res; 1315 struct socket *sk = conn->sock;
1315 1316 int offset = buf->sg.offset + buf->sent;
1316 if ((int)buf->sg.offset >= 0) {
1317 int offset = buf->sg.offset + buf->sent;
1318
1319 /* tcp_sendpage */
1320 res = sk->ops->sendpage(sk, buf->sg.page, offset, size, flags);
1321 } else {
1322 struct msghdr msg;
1323
1324 buf->iov.iov_base = iscsi_buf_iov_base(buf);
1325 buf->iov.iov_len = size;
1326
1327 memset(&msg, 0, sizeof(struct msghdr));
1328
1329 /* tcp_sendmsg */
1330 res = kernel_sendmsg(sk, &msg, &buf->iov, 1, size);
1331 }
1332 1317
1333 return res; 1318 /*
1319 * if we got use_sg=0 or are sending something we kmallocd
1320 * then we did not have to do kmap (kmap returns page_address)
1321 *
1322 * if we got use_sg > 0, but had to drop down, we do not
1323 * set clustering so this should only happen for that
1324 * slab case.
1325 */
1326 if (buf->use_sendmsg)
1327 return sock_no_sendpage(sk, buf->sg.page, offset, size, flags);
1328 else
1329 return conn->sendpage(sk, buf->sg.page, offset, size, flags);
1334} 1330}
1335 1331
1336/** 1332/**
@@ -1345,7 +1341,6 @@ iscsi_send(struct socket *sk, struct iscsi_buf *buf, int size, int flags)
1345static inline int 1341static inline int
1346iscsi_sendhdr(struct iscsi_conn *conn, struct iscsi_buf *buf, int datalen) 1342iscsi_sendhdr(struct iscsi_conn *conn, struct iscsi_buf *buf, int datalen)
1347{ 1343{
1348 struct socket *sk = conn->sock;
1349 int flags = 0; /* MSG_DONTWAIT; */ 1344 int flags = 0; /* MSG_DONTWAIT; */
1350 int res, size; 1345 int res, size;
1351 1346
@@ -1354,7 +1349,7 @@ iscsi_sendhdr(struct iscsi_conn *conn, struct iscsi_buf *buf, int datalen)
1354 if (buf->sent + size != buf->sg.length || datalen) 1349 if (buf->sent + size != buf->sg.length || datalen)
1355 flags |= MSG_MORE; 1350 flags |= MSG_MORE;
1356 1351
1357 res = iscsi_send(sk, buf, size, flags); 1352 res = iscsi_send(conn, buf, size, flags);
1358 debug_tcp("sendhdr %d bytes, sent %d res %d\n", size, buf->sent, res); 1353 debug_tcp("sendhdr %d bytes, sent %d res %d\n", size, buf->sent, res);
1359 if (res >= 0) { 1354 if (res >= 0) {
1360 conn->txdata_octets += res; 1355 conn->txdata_octets += res;
@@ -1385,7 +1380,6 @@ static inline int
1385iscsi_sendpage(struct iscsi_conn *conn, struct iscsi_buf *buf, 1380iscsi_sendpage(struct iscsi_conn *conn, struct iscsi_buf *buf,
1386 int *count, int *sent) 1381 int *count, int *sent)
1387{ 1382{
1388 struct socket *sk = conn->sock;
1389 int flags = 0; /* MSG_DONTWAIT; */ 1383 int flags = 0; /* MSG_DONTWAIT; */
1390 int res, size; 1384 int res, size;
1391 1385
@@ -1396,7 +1390,7 @@ iscsi_sendpage(struct iscsi_conn *conn, struct iscsi_buf *buf,
1396 if (buf->sent + size != buf->sg.length || *count != size) 1390 if (buf->sent + size != buf->sg.length || *count != size)
1397 flags |= MSG_MORE; 1391 flags |= MSG_MORE;
1398 1392
1399 res = iscsi_send(sk, buf, size, flags); 1393 res = iscsi_send(conn, buf, size, flags);
1400 debug_tcp("sendpage: %d bytes, sent %d left %d sent %d res %d\n", 1394 debug_tcp("sendpage: %d bytes, sent %d left %d sent %d res %d\n",
1401 size, buf->sent, *count, *sent, res); 1395 size, buf->sent, *count, *sent, res);
1402 if (res >= 0) { 1396 if (res >= 0) {
@@ -1424,20 +1418,7 @@ iscsi_data_digest_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1424 ctask->digest_count = 4; 1418 ctask->digest_count = 4;
1425} 1419}
1426 1420
1427static inline void 1421static int
1428iscsi_buf_data_digest_update(struct iscsi_conn *conn, struct iscsi_buf *buf)
1429{
1430 struct scatterlist sg;
1431
1432 if (buf->sg.offset != -1)
1433 crypto_digest_update(conn->data_tx_tfm, &buf->sg, 1);
1434 else {
1435 sg_init_one(&sg, (char *)buf->sg.page, buf->sg.length);
1436 crypto_digest_update(conn->data_tx_tfm, &sg, 1);
1437 }
1438}
1439
1440static inline int
1441iscsi_digest_final_send(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask, 1422iscsi_digest_final_send(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1442 struct iscsi_buf *buf, uint32_t *digest, int final) 1423 struct iscsi_buf *buf, uint32_t *digest, int final)
1443{ 1424{
@@ -1670,7 +1651,7 @@ iscsi_cmd_init(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
1670 zero_data(ctask->hdr.dlength); 1651 zero_data(ctask->hdr.dlength);
1671 } 1652 }
1672 1653
1673 iscsi_buf_init_virt(&ctask->headbuf, (char*)&ctask->hdr, 1654 iscsi_buf_init_virt(&ctask->headbuf, (char*)&ctask->hdr,
1674 sizeof(struct iscsi_hdr)); 1655 sizeof(struct iscsi_hdr));
1675 conn->scsicmd_pdus_cnt++; 1656 conn->scsicmd_pdus_cnt++;
1676} 1657}
@@ -1736,7 +1717,7 @@ static inline int
1736handle_xmstate_r_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1717handle_xmstate_r_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1737{ 1718{
1738 ctask->xmstate &= ~XMSTATE_R_HDR; 1719 ctask->xmstate &= ~XMSTATE_R_HDR;
1739 if (conn->hdrdgst_en) 1720 if (conn->hdrdgst_en)
1740 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext); 1721 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext);
1741 if (!iscsi_sendhdr(conn, &ctask->headbuf, 0)) { 1722 if (!iscsi_sendhdr(conn, &ctask->headbuf, 0)) {
1742 BUG_ON(ctask->xmstate != XMSTATE_IDLE); 1723 BUG_ON(ctask->xmstate != XMSTATE_IDLE);
@@ -1750,7 +1731,7 @@ static inline int
1750handle_xmstate_w_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask) 1731handle_xmstate_w_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1751{ 1732{
1752 ctask->xmstate &= ~XMSTATE_W_HDR; 1733 ctask->xmstate &= ~XMSTATE_W_HDR;
1753 if (conn->hdrdgst_en) 1734 if (conn->hdrdgst_en)
1754 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext); 1735 iscsi_hdr_digest(conn, &ctask->headbuf, (u8*)ctask->hdrext);
1755 if (iscsi_sendhdr(conn, &ctask->headbuf, ctask->imm_count)) { 1736 if (iscsi_sendhdr(conn, &ctask->headbuf, ctask->imm_count)) {
1756 ctask->xmstate |= XMSTATE_W_HDR; 1737 ctask->xmstate |= XMSTATE_W_HDR;
@@ -1799,7 +1780,8 @@ handle_xmstate_imm_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1799 return -EAGAIN; 1780 return -EAGAIN;
1800 } 1781 }
1801 if (conn->datadgst_en) 1782 if (conn->datadgst_en)
1802 iscsi_buf_data_digest_update(conn, &ctask->sendbuf); 1783 crypto_digest_update(conn->data_tx_tfm,
1784 &ctask->sendbuf.sg, 1);
1803 1785
1804 if (!ctask->imm_count) 1786 if (!ctask->imm_count)
1805 break; 1787 break;
@@ -1884,7 +1866,8 @@ handle_xmstate_uns_data(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
1884 * so pass it 1866 * so pass it
1885 */ 1867 */
1886 if (conn->datadgst_en && ctask->sent - start > 0) 1868 if (conn->datadgst_en && ctask->sent - start > 0)
1887 iscsi_buf_data_digest_update(conn, &ctask->sendbuf); 1869 crypto_digest_update(conn->data_tx_tfm,
1870 &ctask->sendbuf.sg, 1);
1888 1871
1889 if (!ctask->data_count) 1872 if (!ctask->data_count)
1890 break; 1873 break;
@@ -1962,7 +1945,7 @@ solicit_again:
1962 1945
1963 BUG_ON(r2t->data_count < 0); 1946 BUG_ON(r2t->data_count < 0);
1964 if (conn->datadgst_en) 1947 if (conn->datadgst_en)
1965 iscsi_buf_data_digest_update(conn, &r2t->sendbuf); 1948 crypto_digest_update(conn->data_tx_tfm, &r2t->sendbuf.sg, 1);
1966 1949
1967 if (r2t->data_count) { 1950 if (r2t->data_count) {
1968 BUG_ON(ctask->sc->use_sg == 0); 1951 BUG_ON(ctask->sc->use_sg == 0);
@@ -2044,7 +2027,7 @@ handle_xmstate_w_pad(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
2044 } 2027 }
2045 2028
2046 if (conn->datadgst_en) { 2029 if (conn->datadgst_en) {
2047 iscsi_buf_data_digest_update(conn, &ctask->sendbuf); 2030 crypto_digest_update(conn->data_tx_tfm, &ctask->sendbuf.sg, 1);
2048 /* imm data? */ 2031 /* imm data? */
2049 if (!dtask) { 2032 if (!dtask) {
2050 if (iscsi_digest_final_send(conn, ctask, &ctask->immbuf, 2033 if (iscsi_digest_final_send(conn, ctask, &ctask->immbuf,
@@ -2138,7 +2121,7 @@ unsolicit_head_again:
2138solicit_head_again: 2121solicit_head_again:
2139 r2t = ctask->r2t; 2122 r2t = ctask->r2t;
2140 if (conn->hdrdgst_en) 2123 if (conn->hdrdgst_en)
2141 iscsi_hdr_digest(conn, &r2t->headbuf, 2124 iscsi_hdr_digest(conn, &r2t->headbuf,
2142 (u8*)r2t->dtask->hdrext); 2125 (u8*)r2t->dtask->hdrext);
2143 if (iscsi_sendhdr(conn, &r2t->headbuf, r2t->data_count)) { 2126 if (iscsi_sendhdr(conn, &r2t->headbuf, r2t->data_count)) {
2144 ctask->xmstate &= ~XMSTATE_SOL_DATA; 2127 ctask->xmstate &= ~XMSTATE_SOL_DATA;
@@ -2290,10 +2273,10 @@ iscsi_xmitworker(void *data)
2290 /* 2273 /*
2291 * serialize Xmit worker on a per-connection basis. 2274 * serialize Xmit worker on a per-connection basis.
2292 */ 2275 */
2293 down(&conn->xmitsema); 2276 mutex_lock(&conn->xmitmutex);
2294 if (iscsi_data_xmit(conn)) 2277 if (iscsi_data_xmit(conn))
2295 schedule_work(&conn->xmitwork); 2278 scsi_queue_work(conn->session->host, &conn->xmitwork);
2296 up(&conn->xmitsema); 2279 mutex_unlock(&conn->xmitmutex);
2297} 2280}
2298 2281
2299#define FAILURE_BAD_HOST 1 2282#define FAILURE_BAD_HOST 1
@@ -2357,15 +2340,7 @@ iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
2357 session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1); 2340 session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1);
2358 spin_unlock(&session->lock); 2341 spin_unlock(&session->lock);
2359 2342
2360 if (!in_interrupt() && !down_trylock(&conn->xmitsema)) { 2343 scsi_queue_work(host, &conn->xmitwork);
2361 spin_unlock_irq(host->host_lock);
2362 if (iscsi_data_xmit(conn))
2363 schedule_work(&conn->xmitwork);
2364 up(&conn->xmitsema);
2365 spin_lock_irq(host->host_lock);
2366 } else
2367 schedule_work(&conn->xmitwork);
2368
2369 return 0; 2344 return 0;
2370 2345
2371reject: 2346reject:
@@ -2389,6 +2364,15 @@ fault:
2389} 2364}
2390 2365
2391static int 2366static int
2367iscsi_change_queue_depth(struct scsi_device *sdev, int depth)
2368{
2369 if (depth > ISCSI_MAX_CMD_PER_LUN)
2370 depth = ISCSI_MAX_CMD_PER_LUN;
2371 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth);
2372 return sdev->queue_depth;
2373}
2374
2375static int
2392iscsi_pool_init(struct iscsi_queue *q, int max, void ***items, int item_size) 2376iscsi_pool_init(struct iscsi_queue *q, int max, void ***items, int item_size)
2393{ 2377{
2394 int i; 2378 int i;
@@ -2443,17 +2427,20 @@ iscsi_pool_free(struct iscsi_queue *q, void **items)
2443 kfree(items); 2427 kfree(items);
2444} 2428}
2445 2429
2446static iscsi_connh_t 2430static struct iscsi_cls_conn *
2447iscsi_conn_create(iscsi_sessionh_t sessionh, uint32_t conn_idx) 2431iscsi_conn_create(struct Scsi_Host *shost, uint32_t conn_idx)
2448{ 2432{
2449 struct iscsi_session *session = iscsi_ptr(sessionh); 2433 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
2450 struct iscsi_conn *conn = NULL; 2434 struct iscsi_conn *conn;
2435 struct iscsi_cls_conn *cls_conn;
2451 2436
2452 conn = kmalloc(sizeof(struct iscsi_conn), GFP_KERNEL); 2437 cls_conn = iscsi_create_conn(hostdata_session(shost->hostdata),
2453 if (conn == NULL) 2438 conn_idx);
2454 goto conn_alloc_fail; 2439 if (!cls_conn)
2455 memset(conn, 0, sizeof(struct iscsi_conn)); 2440 return NULL;
2441 conn = cls_conn->dd_data;
2456 2442
2443 memset(conn, 0, sizeof(struct iscsi_conn));
2457 conn->c_stage = ISCSI_CONN_INITIAL_STAGE; 2444 conn->c_stage = ISCSI_CONN_INITIAL_STAGE;
2458 conn->in_progress = IN_PROGRESS_WAIT_HEADER; 2445 conn->in_progress = IN_PROGRESS_WAIT_HEADER;
2459 conn->id = conn_idx; 2446 conn->id = conn_idx;
@@ -2512,10 +2499,10 @@ iscsi_conn_create(iscsi_sessionh_t sessionh, uint32_t conn_idx)
2512 goto max_recv_dlenght_alloc_fail; 2499 goto max_recv_dlenght_alloc_fail;
2513 2500
2514 init_timer(&conn->tmabort_timer); 2501 init_timer(&conn->tmabort_timer);
2515 init_MUTEX(&conn->xmitsema); 2502 mutex_init(&conn->xmitmutex);
2516 init_waitqueue_head(&conn->ehwait); 2503 init_waitqueue_head(&conn->ehwait);
2517 2504
2518 return iscsi_handle(conn); 2505 return cls_conn;
2519 2506
2520max_recv_dlenght_alloc_fail: 2507max_recv_dlenght_alloc_fail:
2521 spin_lock_bh(&session->lock); 2508 spin_lock_bh(&session->lock);
@@ -2531,18 +2518,18 @@ immqueue_alloc_fail:
2531writequeue_alloc_fail: 2518writequeue_alloc_fail:
2532 kfifo_free(conn->xmitqueue); 2519 kfifo_free(conn->xmitqueue);
2533xmitqueue_alloc_fail: 2520xmitqueue_alloc_fail:
2534 kfree(conn); 2521 iscsi_destroy_conn(cls_conn);
2535conn_alloc_fail: 2522 return NULL;
2536 return iscsi_handle(NULL);
2537} 2523}
2538 2524
2539static void 2525static void
2540iscsi_conn_destroy(iscsi_connh_t connh) 2526iscsi_conn_destroy(struct iscsi_cls_conn *cls_conn)
2541{ 2527{
2542 struct iscsi_conn *conn = iscsi_ptr(connh); 2528 struct iscsi_conn *conn = cls_conn->dd_data;
2543 struct iscsi_session *session = conn->session; 2529 struct iscsi_session *session = conn->session;
2530 unsigned long flags;
2544 2531
2545 down(&conn->xmitsema); 2532 mutex_lock(&conn->xmitmutex);
2546 set_bit(SUSPEND_BIT, &conn->suspend_tx); 2533 set_bit(SUSPEND_BIT, &conn->suspend_tx);
2547 if (conn->c_stage == ISCSI_CONN_INITIAL_STAGE && conn->sock) { 2534 if (conn->c_stage == ISCSI_CONN_INITIAL_STAGE && conn->sock) {
2548 struct sock *sk = conn->sock->sk; 2535 struct sock *sk = conn->sock->sk;
@@ -2573,19 +2560,19 @@ iscsi_conn_destroy(iscsi_connh_t connh)
2573 } 2560 }
2574 spin_unlock_bh(&session->lock); 2561 spin_unlock_bh(&session->lock);
2575 2562
2576 up(&conn->xmitsema); 2563 mutex_unlock(&conn->xmitmutex);
2577 2564
2578 /* 2565 /*
2579 * Block until all in-progress commands for this connection 2566 * Block until all in-progress commands for this connection
2580 * time out or fail. 2567 * time out or fail.
2581 */ 2568 */
2582 for (;;) { 2569 for (;;) {
2583 spin_lock_bh(&conn->lock); 2570 spin_lock_irqsave(session->host->host_lock, flags);
2584 if (!session->host->host_busy) { /* OK for ERL == 0 */ 2571 if (!session->host->host_busy) { /* OK for ERL == 0 */
2585 spin_unlock_bh(&conn->lock); 2572 spin_unlock_irqrestore(session->host->host_lock, flags);
2586 break; 2573 break;
2587 } 2574 }
2588 spin_unlock_bh(&conn->lock); 2575 spin_unlock_irqrestore(session->host->host_lock, flags);
2589 msleep_interruptible(500); 2576 msleep_interruptible(500);
2590 printk("conn_destroy(): host_busy %d host_failed %d\n", 2577 printk("conn_destroy(): host_busy %d host_failed %d\n",
2591 session->host->host_busy, session->host->host_failed); 2578 session->host->host_busy, session->host->host_failed);
@@ -2633,7 +2620,8 @@ iscsi_conn_destroy(iscsi_connh_t connh)
2633 kfifo_free(conn->writequeue); 2620 kfifo_free(conn->writequeue);
2634 kfifo_free(conn->immqueue); 2621 kfifo_free(conn->immqueue);
2635 kfifo_free(conn->mgmtqueue); 2622 kfifo_free(conn->mgmtqueue);
2636 kfree(conn); 2623
2624 iscsi_destroy_conn(cls_conn);
2637} 2625}
2638 2626
2639static int 2627static int
@@ -2694,6 +2682,8 @@ iscsi_conn_bind(iscsi_sessionh_t sessionh, iscsi_connh_t connh,
2694 */ 2682 */
2695 iscsi_conn_set_callbacks(conn); 2683 iscsi_conn_set_callbacks(conn);
2696 2684
2685 conn->sendpage = conn->sock->ops->sendpage;
2686
2697 /* 2687 /*
2698 * set receive state machine into initial state 2688 * set receive state machine into initial state
2699 */ 2689 */
@@ -2777,7 +2767,7 @@ iscsi_conn_stop(iscsi_connh_t connh, int flag)
2777 set_bit(SUSPEND_BIT, &conn->suspend_rx); 2767 set_bit(SUSPEND_BIT, &conn->suspend_rx);
2778 write_unlock_bh(&sk->sk_callback_lock); 2768 write_unlock_bh(&sk->sk_callback_lock);
2779 2769
2780 down(&conn->xmitsema); 2770 mutex_lock(&conn->xmitmutex);
2781 2771
2782 spin_lock_irqsave(session->host->host_lock, flags); 2772 spin_lock_irqsave(session->host->host_lock, flags);
2783 spin_lock(&session->lock); 2773 spin_lock(&session->lock);
@@ -2853,10 +2843,13 @@ iscsi_conn_stop(iscsi_connh_t connh, int flag)
2853 * in hdr_extract() and will be re-negotiated at 2843 * in hdr_extract() and will be re-negotiated at
2854 * set_param() time. 2844 * set_param() time.
2855 */ 2845 */
2856 if (flag == STOP_CONN_RECOVER) 2846 if (flag == STOP_CONN_RECOVER) {
2857 conn->hdr_size = sizeof(struct iscsi_hdr); 2847 conn->hdr_size = sizeof(struct iscsi_hdr);
2848 conn->hdrdgst_en = 0;
2849 conn->datadgst_en = 0;
2850 }
2858 } 2851 }
2859 up(&conn->xmitsema); 2852 mutex_unlock(&conn->xmitmutex);
2860} 2853}
2861 2854
2862static int 2855static int
@@ -2941,8 +2934,7 @@ iscsi_conn_send_generic(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
2941 else 2934 else
2942 __kfifo_put(conn->mgmtqueue, (void*)&mtask, sizeof(void*)); 2935 __kfifo_put(conn->mgmtqueue, (void*)&mtask, sizeof(void*));
2943 2936
2944 schedule_work(&conn->xmitwork); 2937 scsi_queue_work(session->host, &conn->xmitwork);
2945
2946 return 0; 2938 return 0;
2947} 2939}
2948 2940
@@ -3007,12 +2999,12 @@ iscsi_eh_abort(struct scsi_cmnd *sc)
3007 * 1) connection-level failure; 2999 * 1) connection-level failure;
3008 * 2) recovery due protocol error; 3000 * 2) recovery due protocol error;
3009 */ 3001 */
3010 down(&conn->xmitsema); 3002 mutex_lock(&conn->xmitmutex);
3011 spin_lock_bh(&session->lock); 3003 spin_lock_bh(&session->lock);
3012 if (session->state != ISCSI_STATE_LOGGED_IN) { 3004 if (session->state != ISCSI_STATE_LOGGED_IN) {
3013 if (session->state == ISCSI_STATE_TERMINATE) { 3005 if (session->state == ISCSI_STATE_TERMINATE) {
3014 spin_unlock_bh(&session->lock); 3006 spin_unlock_bh(&session->lock);
3015 up(&conn->xmitsema); 3007 mutex_unlock(&conn->xmitmutex);
3016 goto failed; 3008 goto failed;
3017 } 3009 }
3018 spin_unlock_bh(&session->lock); 3010 spin_unlock_bh(&session->lock);
@@ -3030,7 +3022,7 @@ iscsi_eh_abort(struct scsi_cmnd *sc)
3030 * 2) session was re-open during time out of ctask. 3022 * 2) session was re-open during time out of ctask.
3031 */ 3023 */
3032 spin_unlock_bh(&session->lock); 3024 spin_unlock_bh(&session->lock);
3033 up(&conn->xmitsema); 3025 mutex_unlock(&conn->xmitmutex);
3034 goto success; 3026 goto success;
3035 } 3027 }
3036 conn->tmabort_state = TMABORT_INITIAL; 3028 conn->tmabort_state = TMABORT_INITIAL;
@@ -3085,7 +3077,7 @@ iscsi_eh_abort(struct scsi_cmnd *sc)
3085 conn->tmabort_state == TMABORT_SUCCESS) { 3077 conn->tmabort_state == TMABORT_SUCCESS) {
3086 conn->tmabort_state = TMABORT_INITIAL; 3078 conn->tmabort_state = TMABORT_INITIAL;
3087 spin_unlock_bh(&session->lock); 3079 spin_unlock_bh(&session->lock);
3088 up(&conn->xmitsema); 3080 mutex_unlock(&conn->xmitmutex);
3089 goto success; 3081 goto success;
3090 } 3082 }
3091 conn->tmabort_state = TMABORT_INITIAL; 3083 conn->tmabort_state = TMABORT_INITIAL;
@@ -3094,7 +3086,7 @@ iscsi_eh_abort(struct scsi_cmnd *sc)
3094 spin_unlock_bh(&session->lock); 3086 spin_unlock_bh(&session->lock);
3095 } 3087 }
3096 } 3088 }
3097 up(&conn->xmitsema); 3089 mutex_unlock(&conn->xmitmutex);
3098 3090
3099 3091
3100 /* 3092 /*
@@ -3160,7 +3152,7 @@ failed:
3160exit: 3152exit:
3161 del_timer_sync(&conn->tmabort_timer); 3153 del_timer_sync(&conn->tmabort_timer);
3162 3154
3163 down(&conn->xmitsema); 3155 mutex_lock(&conn->xmitmutex);
3164 if (conn->sock) { 3156 if (conn->sock) {
3165 struct sock *sk = conn->sock->sk; 3157 struct sock *sk = conn->sock->sk;
3166 3158
@@ -3168,7 +3160,7 @@ exit:
3168 iscsi_ctask_cleanup(conn, ctask); 3160 iscsi_ctask_cleanup(conn, ctask);
3169 write_unlock_bh(&sk->sk_callback_lock); 3161 write_unlock_bh(&sk->sk_callback_lock);
3170 } 3162 }
3171 up(&conn->xmitsema); 3163 mutex_unlock(&conn->xmitmutex);
3172 return rc; 3164 return rc;
3173} 3165}
3174 3166
@@ -3247,28 +3239,35 @@ iscsi_r2tpool_free(struct iscsi_session *session)
3247static struct scsi_host_template iscsi_sht = { 3239static struct scsi_host_template iscsi_sht = {
3248 .name = "iSCSI Initiator over TCP/IP, v." 3240 .name = "iSCSI Initiator over TCP/IP, v."
3249 ISCSI_VERSION_STR, 3241 ISCSI_VERSION_STR,
3250 .queuecommand = iscsi_queuecommand, 3242 .queuecommand = iscsi_queuecommand,
3243 .change_queue_depth = iscsi_change_queue_depth,
3251 .can_queue = ISCSI_XMIT_CMDS_MAX - 1, 3244 .can_queue = ISCSI_XMIT_CMDS_MAX - 1,
3252 .sg_tablesize = ISCSI_SG_TABLESIZE, 3245 .sg_tablesize = ISCSI_SG_TABLESIZE,
3253 .cmd_per_lun = ISCSI_CMD_PER_LUN, 3246 .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
3254 .eh_abort_handler = iscsi_eh_abort, 3247 .eh_abort_handler = iscsi_eh_abort,
3255 .eh_host_reset_handler = iscsi_eh_host_reset, 3248 .eh_host_reset_handler = iscsi_eh_host_reset,
3256 .use_clustering = DISABLE_CLUSTERING, 3249 .use_clustering = DISABLE_CLUSTERING,
3257 .proc_name = "iscsi_tcp", 3250 .proc_name = "iscsi_tcp",
3258 .this_id = -1, 3251 .this_id = -1,
3259}; 3252};
3260 3253
3261static iscsi_sessionh_t 3254static struct iscsi_transport iscsi_tcp_transport;
3262iscsi_session_create(uint32_t initial_cmdsn, struct Scsi_Host *host) 3255
3256static struct Scsi_Host *
3257iscsi_session_create(struct scsi_transport_template *scsit,
3258 uint32_t initial_cmdsn)
3263{ 3259{
3264 int cmd_i; 3260 struct Scsi_Host *shost;
3265 struct iscsi_session *session; 3261 struct iscsi_session *session;
3262 int cmd_i;
3266 3263
3267 session = iscsi_hostdata(host->hostdata); 3264 shost = iscsi_transport_create_session(scsit, &iscsi_tcp_transport);
3268 memset(session, 0, sizeof(struct iscsi_session)); 3265 if (!shost)
3266 return NULL;
3269 3267
3270 session->host = host; 3268 session = iscsi_hostdata(shost->hostdata);
3271 session->id = host->host_no; 3269 memset(session, 0, sizeof(struct iscsi_session));
3270 session->host = shost;
3272 session->state = ISCSI_STATE_LOGGED_IN; 3271 session->state = ISCSI_STATE_LOGGED_IN;
3273 session->mgmtpool_max = ISCSI_MGMT_CMDS_MAX; 3272 session->mgmtpool_max = ISCSI_MGMT_CMDS_MAX;
3274 session->cmds_max = ISCSI_XMIT_CMDS_MAX; 3273 session->cmds_max = ISCSI_XMIT_CMDS_MAX;
@@ -3312,7 +3311,7 @@ iscsi_session_create(uint32_t initial_cmdsn, struct Scsi_Host *host)
3312 if (iscsi_r2tpool_alloc(session)) 3311 if (iscsi_r2tpool_alloc(session))
3313 goto r2tpool_alloc_fail; 3312 goto r2tpool_alloc_fail;
3314 3313
3315 return iscsi_handle(session); 3314 return shost;
3316 3315
3317r2tpool_alloc_fail: 3316r2tpool_alloc_fail:
3318 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++) 3317 for (cmd_i = 0; cmd_i < session->mgmtpool_max; cmd_i++)
@@ -3322,15 +3321,15 @@ immdata_alloc_fail:
3322mgmtpool_alloc_fail: 3321mgmtpool_alloc_fail:
3323 iscsi_pool_free(&session->cmdpool, (void**)session->cmds); 3322 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
3324cmdpool_alloc_fail: 3323cmdpool_alloc_fail:
3325 return iscsi_handle(NULL); 3324 return NULL;
3326} 3325}
3327 3326
3328static void 3327static void
3329iscsi_session_destroy(iscsi_sessionh_t sessionh) 3328iscsi_session_destroy(struct Scsi_Host *shost)
3330{ 3329{
3330 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
3331 int cmd_i; 3331 int cmd_i;
3332 struct iscsi_data_task *dtask, *n; 3332 struct iscsi_data_task *dtask, *n;
3333 struct iscsi_session *session = iscsi_ptr(sessionh);
3334 3333
3335 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) { 3334 for (cmd_i = 0; cmd_i < session->cmds_max; cmd_i++) {
3336 struct iscsi_cmd_task *ctask = session->cmds[cmd_i]; 3335 struct iscsi_cmd_task *ctask = session->cmds[cmd_i];
@@ -3346,6 +3345,8 @@ iscsi_session_destroy(iscsi_sessionh_t sessionh)
3346 iscsi_r2tpool_free(session); 3345 iscsi_r2tpool_free(session);
3347 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds); 3346 iscsi_pool_free(&session->mgmtpool, (void**)session->mgmt_cmds);
3348 iscsi_pool_free(&session->cmdpool, (void**)session->cmds); 3347 iscsi_pool_free(&session->cmdpool, (void**)session->cmds);
3348
3349 iscsi_transport_destroy_session(shost);
3349} 3350}
3350 3351
3351static int 3352static int
@@ -3444,6 +3445,8 @@ iscsi_conn_set_param(iscsi_connh_t connh, enum iscsi_param param,
3444 if (conn->data_rx_tfm) 3445 if (conn->data_rx_tfm)
3445 crypto_free_tfm(conn->data_rx_tfm); 3446 crypto_free_tfm(conn->data_rx_tfm);
3446 } 3447 }
3448 conn->sendpage = conn->datadgst_en ?
3449 sock_no_sendpage : conn->sock->ops->sendpage;
3447 break; 3450 break;
3448 case ISCSI_PARAM_INITIAL_R2T_EN: 3451 case ISCSI_PARAM_INITIAL_R2T_EN:
3449 session->initial_r2t_en = value; 3452 session->initial_r2t_en = value;
@@ -3492,25 +3495,12 @@ iscsi_conn_set_param(iscsi_connh_t connh, enum iscsi_param param,
3492} 3495}
3493 3496
3494static int 3497static int
3495iscsi_conn_get_param(iscsi_connh_t connh, enum iscsi_param param, 3498iscsi_session_get_param(struct Scsi_Host *shost,
3496 uint32_t *value) 3499 enum iscsi_param param, uint32_t *value)
3497{ 3500{
3498 struct iscsi_conn *conn = iscsi_ptr(connh); 3501 struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
3499 struct iscsi_session *session = conn->session;
3500 3502
3501 switch(param) { 3503 switch(param) {
3502 case ISCSI_PARAM_MAX_RECV_DLENGTH:
3503 *value = conn->max_recv_dlength;
3504 break;
3505 case ISCSI_PARAM_MAX_XMIT_DLENGTH:
3506 *value = conn->max_xmit_dlength;
3507 break;
3508 case ISCSI_PARAM_HDRDGST_EN:
3509 *value = conn->hdrdgst_en;
3510 break;
3511 case ISCSI_PARAM_DATADGST_EN:
3512 *value = conn->datadgst_en;
3513 break;
3514 case ISCSI_PARAM_INITIAL_R2T_EN: 3504 case ISCSI_PARAM_INITIAL_R2T_EN:
3515 *value = session->initial_r2t_en; 3505 *value = session->initial_r2t_en;
3516 break; 3506 break;
@@ -3548,6 +3538,31 @@ iscsi_conn_get_param(iscsi_connh_t connh, enum iscsi_param param,
3548 return 0; 3538 return 0;
3549} 3539}
3550 3540
3541static int
3542iscsi_conn_get_param(void *data, enum iscsi_param param, uint32_t *value)
3543{
3544 struct iscsi_conn *conn = data;
3545
3546 switch(param) {
3547 case ISCSI_PARAM_MAX_RECV_DLENGTH:
3548 *value = conn->max_recv_dlength;
3549 break;
3550 case ISCSI_PARAM_MAX_XMIT_DLENGTH:
3551 *value = conn->max_xmit_dlength;
3552 break;
3553 case ISCSI_PARAM_HDRDGST_EN:
3554 *value = conn->hdrdgst_en;
3555 break;
3556 case ISCSI_PARAM_DATADGST_EN:
3557 *value = conn->datadgst_en;
3558 break;
3559 default:
3560 return ISCSI_ERR_PARAM_NOT_FOUND;
3561 }
3562
3563 return 0;
3564}
3565
3551static void 3566static void
3552iscsi_conn_get_stats(iscsi_connh_t connh, struct iscsi_stats *stats) 3567iscsi_conn_get_stats(iscsi_connh_t connh, struct iscsi_stats *stats)
3553{ 3568{
@@ -3578,9 +3593,9 @@ iscsi_conn_send_pdu(iscsi_connh_t connh, struct iscsi_hdr *hdr, char *data,
3578 struct iscsi_conn *conn = iscsi_ptr(connh); 3593 struct iscsi_conn *conn = iscsi_ptr(connh);
3579 int rc; 3594 int rc;
3580 3595
3581 down(&conn->xmitsema); 3596 mutex_lock(&conn->xmitmutex);
3582 rc = iscsi_conn_send_generic(conn, hdr, data, data_size); 3597 rc = iscsi_conn_send_generic(conn, hdr, data, data_size);
3583 up(&conn->xmitsema); 3598 mutex_unlock(&conn->xmitmutex);
3584 3599
3585 return rc; 3600 return rc;
3586} 3601}
@@ -3592,6 +3607,7 @@ static struct iscsi_transport iscsi_tcp_transport = {
3592 | CAP_DATADGST, 3607 | CAP_DATADGST,
3593 .host_template = &iscsi_sht, 3608 .host_template = &iscsi_sht,
3594 .hostdata_size = sizeof(struct iscsi_session), 3609 .hostdata_size = sizeof(struct iscsi_session),
3610 .conndata_size = sizeof(struct iscsi_conn),
3595 .max_conn = 1, 3611 .max_conn = 1,
3596 .max_cmd_len = ISCSI_TCP_MAX_CMD_LEN, 3612 .max_cmd_len = ISCSI_TCP_MAX_CMD_LEN,
3597 .create_session = iscsi_session_create, 3613 .create_session = iscsi_session_create,
@@ -3600,7 +3616,8 @@ static struct iscsi_transport iscsi_tcp_transport = {
3600 .bind_conn = iscsi_conn_bind, 3616 .bind_conn = iscsi_conn_bind,
3601 .destroy_conn = iscsi_conn_destroy, 3617 .destroy_conn = iscsi_conn_destroy,
3602 .set_param = iscsi_conn_set_param, 3618 .set_param = iscsi_conn_set_param,
3603 .get_param = iscsi_conn_get_param, 3619 .get_conn_param = iscsi_conn_get_param,
3620 .get_session_param = iscsi_session_get_param,
3604 .start_conn = iscsi_conn_start, 3621 .start_conn = iscsi_conn_start,
3605 .stop_conn = iscsi_conn_stop, 3622 .stop_conn = iscsi_conn_stop,
3606 .send_pdu = iscsi_conn_send_pdu, 3623 .send_pdu = iscsi_conn_send_pdu,
@@ -3610,8 +3627,6 @@ static struct iscsi_transport iscsi_tcp_transport = {
3610static int __init 3627static int __init
3611iscsi_tcp_init(void) 3628iscsi_tcp_init(void)
3612{ 3629{
3613 int error;
3614
3615 if (iscsi_max_lun < 1) { 3630 if (iscsi_max_lun < 1) {
3616 printk(KERN_ERR "Invalid max_lun value of %u\n", iscsi_max_lun); 3631 printk(KERN_ERR "Invalid max_lun value of %u\n", iscsi_max_lun);
3617 return -EINVAL; 3632 return -EINVAL;
@@ -3624,11 +3639,10 @@ iscsi_tcp_init(void)
3624 if (!taskcache) 3639 if (!taskcache)
3625 return -ENOMEM; 3640 return -ENOMEM;
3626 3641
3627 error = iscsi_register_transport(&iscsi_tcp_transport); 3642 if (!iscsi_register_transport(&iscsi_tcp_transport))
3628 if (error)
3629 kmem_cache_destroy(taskcache); 3643 kmem_cache_destroy(taskcache);
3630 3644
3631 return error; 3645 return 0;
3632} 3646}
3633 3647
3634static void __exit 3648static void __exit
diff --git a/drivers/scsi/iscsi_tcp.h b/drivers/scsi/iscsi_tcp.h
index d23ae68fae0d..f95e61b76f70 100644
--- a/drivers/scsi/iscsi_tcp.h
+++ b/drivers/scsi/iscsi_tcp.h
@@ -71,7 +71,8 @@
71#define ISCSI_MGMT_CMDS_MAX 32 /* must be power of 2 */ 71#define ISCSI_MGMT_CMDS_MAX 32 /* must be power of 2 */
72#define ISCSI_MGMT_ITT_OFFSET 0xa00 72#define ISCSI_MGMT_ITT_OFFSET 0xa00
73#define ISCSI_SG_TABLESIZE SG_ALL 73#define ISCSI_SG_TABLESIZE SG_ALL
74#define ISCSI_CMD_PER_LUN 128 74#define ISCSI_DEF_CMD_PER_LUN 32
75#define ISCSI_MAX_CMD_PER_LUN 128
75#define ISCSI_TCP_MAX_CMD_LEN 16 76#define ISCSI_TCP_MAX_CMD_LEN 16
76 77
77#define ITT_MASK (0xfff) 78#define ITT_MASK (0xfff)
@@ -157,7 +158,7 @@ struct iscsi_conn {
157 struct kfifo *mgmtqueue; /* mgmt (control) xmit queue */ 158 struct kfifo *mgmtqueue; /* mgmt (control) xmit queue */
158 struct kfifo *xmitqueue; /* data-path cmd queue */ 159 struct kfifo *xmitqueue; /* data-path cmd queue */
159 struct work_struct xmitwork; /* per-conn. xmit workqueue */ 160 struct work_struct xmitwork; /* per-conn. xmit workqueue */
160 struct semaphore xmitsema; /* serializes connection xmit, 161 struct mutex xmitmutex; /* serializes connection xmit,
161 * access to kfifos: * 162 * access to kfifos: *
162 * xmitqueue, writequeue, * 163 * xmitqueue, writequeue, *
163 * immqueue, mgmtqueue */ 164 * immqueue, mgmtqueue */
@@ -190,6 +191,8 @@ struct iscsi_conn {
190 uint32_t sendpage_failures_cnt; 191 uint32_t sendpage_failures_cnt;
191 uint32_t discontiguous_hdr_cnt; 192 uint32_t discontiguous_hdr_cnt;
192 uint32_t eh_abort_cnt; 193 uint32_t eh_abort_cnt;
194
195 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
193}; 196};
194 197
195struct iscsi_session { 198struct iscsi_session {
@@ -239,8 +242,8 @@ struct iscsi_session {
239 242
240struct iscsi_buf { 243struct iscsi_buf {
241 struct scatterlist sg; 244 struct scatterlist sg;
242 struct kvec iov;
243 unsigned int sent; 245 unsigned int sent;
246 char use_sendmsg;
244}; 247};
245 248
246struct iscsi_data_task { 249struct iscsi_data_task {
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 4fd98fceee51..4a61061d0bde 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -563,16 +563,28 @@ static const u8 ata_rw_cmds[] = {
563 ATA_CMD_WRITE_MULTI, 563 ATA_CMD_WRITE_MULTI,
564 ATA_CMD_READ_MULTI_EXT, 564 ATA_CMD_READ_MULTI_EXT,
565 ATA_CMD_WRITE_MULTI_EXT, 565 ATA_CMD_WRITE_MULTI_EXT,
566 0,
567 0,
568 0,
569 ATA_CMD_WRITE_MULTI_FUA_EXT,
566 /* pio */ 570 /* pio */
567 ATA_CMD_PIO_READ, 571 ATA_CMD_PIO_READ,
568 ATA_CMD_PIO_WRITE, 572 ATA_CMD_PIO_WRITE,
569 ATA_CMD_PIO_READ_EXT, 573 ATA_CMD_PIO_READ_EXT,
570 ATA_CMD_PIO_WRITE_EXT, 574 ATA_CMD_PIO_WRITE_EXT,
575 0,
576 0,
577 0,
578 0,
571 /* dma */ 579 /* dma */
572 ATA_CMD_READ, 580 ATA_CMD_READ,
573 ATA_CMD_WRITE, 581 ATA_CMD_WRITE,
574 ATA_CMD_READ_EXT, 582 ATA_CMD_READ_EXT,
575 ATA_CMD_WRITE_EXT 583 ATA_CMD_WRITE_EXT,
584 0,
585 0,
586 0,
587 ATA_CMD_WRITE_FUA_EXT
576}; 588};
577 589
578/** 590/**
@@ -585,25 +597,32 @@ static const u8 ata_rw_cmds[] = {
585 * LOCKING: 597 * LOCKING:
586 * caller. 598 * caller.
587 */ 599 */
588void ata_rwcmd_protocol(struct ata_queued_cmd *qc) 600int ata_rwcmd_protocol(struct ata_queued_cmd *qc)
589{ 601{
590 struct ata_taskfile *tf = &qc->tf; 602 struct ata_taskfile *tf = &qc->tf;
591 struct ata_device *dev = qc->dev; 603 struct ata_device *dev = qc->dev;
604 u8 cmd;
592 605
593 int index, lba48, write; 606 int index, fua, lba48, write;
594 607
608 fua = (tf->flags & ATA_TFLAG_FUA) ? 4 : 0;
595 lba48 = (tf->flags & ATA_TFLAG_LBA48) ? 2 : 0; 609 lba48 = (tf->flags & ATA_TFLAG_LBA48) ? 2 : 0;
596 write = (tf->flags & ATA_TFLAG_WRITE) ? 1 : 0; 610 write = (tf->flags & ATA_TFLAG_WRITE) ? 1 : 0;
597 611
598 if (dev->flags & ATA_DFLAG_PIO) { 612 if (dev->flags & ATA_DFLAG_PIO) {
599 tf->protocol = ATA_PROT_PIO; 613 tf->protocol = ATA_PROT_PIO;
600 index = dev->multi_count ? 0 : 4; 614 index = dev->multi_count ? 0 : 8;
601 } else { 615 } else {
602 tf->protocol = ATA_PROT_DMA; 616 tf->protocol = ATA_PROT_DMA;
603 index = 8; 617 index = 16;
604 } 618 }
605 619
606 tf->command = ata_rw_cmds[index + lba48 + write]; 620 cmd = ata_rw_cmds[index + fua + lba48 + write];
621 if (cmd) {
622 tf->command = cmd;
623 return 0;
624 }
625 return -1;
607} 626}
608 627
609static const char * const xfer_mode_str[] = { 628static const char * const xfer_mode_str[] = {
@@ -1033,18 +1052,22 @@ static unsigned int ata_pio_modes(const struct ata_device *adev)
1033{ 1052{
1034 u16 modes; 1053 u16 modes;
1035 1054
1036 /* Usual case. Word 53 indicates word 88 is valid */ 1055 /* Usual case. Word 53 indicates word 64 is valid */
1037 if (adev->id[ATA_ID_FIELD_VALID] & (1 << 2)) { 1056 if (adev->id[ATA_ID_FIELD_VALID] & (1 << 1)) {
1038 modes = adev->id[ATA_ID_PIO_MODES] & 0x03; 1057 modes = adev->id[ATA_ID_PIO_MODES] & 0x03;
1039 modes <<= 3; 1058 modes <<= 3;
1040 modes |= 0x7; 1059 modes |= 0x7;
1041 return modes; 1060 return modes;
1042 } 1061 }
1043 1062
1044 /* If word 88 isn't valid then Word 51 holds the PIO timing number 1063 /* If word 64 isn't valid then Word 51 high byte holds the PIO timing
1045 for the maximum. Turn it into a mask and return it */ 1064 number for the maximum. Turn it into a mask and return it */
1046 modes = (2 << (adev->id[ATA_ID_OLD_PIO_MODES] & 0xFF)) - 1 ; 1065 modes = (2 << ((adev->id[ATA_ID_OLD_PIO_MODES] >> 8) & 0xFF)) - 1 ;
1047 return modes; 1066 return modes;
1067 /* But wait.. there's more. Design your standards by committee and
1068 you too can get a free iordy field to process. However its the
1069 speeds not the modes that are supported... Note drivers using the
1070 timing API will get this right anyway */
1048} 1071}
1049 1072
1050struct ata_exec_internal_arg { 1073struct ata_exec_internal_arg {
@@ -1147,6 +1170,39 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
1147} 1170}
1148 1171
1149/** 1172/**
1173 * ata_pio_need_iordy - check if iordy needed
1174 * @adev: ATA device
1175 *
1176 * Check if the current speed of the device requires IORDY. Used
1177 * by various controllers for chip configuration.
1178 */
1179
1180unsigned int ata_pio_need_iordy(const struct ata_device *adev)
1181{
1182 int pio;
1183 int speed = adev->pio_mode - XFER_PIO_0;
1184
1185 if (speed < 2)
1186 return 0;
1187 if (speed > 2)
1188 return 1;
1189
1190 /* If we have no drive specific rule, then PIO 2 is non IORDY */
1191
1192 if (adev->id[ATA_ID_FIELD_VALID] & 2) { /* EIDE */
1193 pio = adev->id[ATA_ID_EIDE_PIO];
1194 /* Is the speed faster than the drive allows non IORDY ? */
1195 if (pio) {
1196 /* This is cycle times not frequency - watch the logic! */
1197 if (pio > 240) /* PIO2 is 240nS per cycle */
1198 return 1;
1199 return 0;
1200 }
1201 }
1202 return 0;
1203}
1204
1205/**
1150 * ata_dev_identify - obtain IDENTIFY x DEVICE page 1206 * ata_dev_identify - obtain IDENTIFY x DEVICE page
1151 * @ap: port on which device we wish to probe resides 1207 * @ap: port on which device we wish to probe resides
1152 * @device: device bus address, starting at zero 1208 * @device: device bus address, starting at zero
@@ -1738,7 +1794,7 @@ static const struct {
1738 { ATA_SHIFT_PIO, XFER_PIO_0 }, 1794 { ATA_SHIFT_PIO, XFER_PIO_0 },
1739}; 1795};
1740 1796
1741static inline u8 base_from_shift(unsigned int shift) 1797static u8 base_from_shift(unsigned int shift)
1742{ 1798{
1743 int i; 1799 int i;
1744 1800
@@ -4420,6 +4476,96 @@ irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
4420 * Inherited from caller. 4476 * Inherited from caller.
4421 */ 4477 */
4422 4478
4479/*
4480 * Execute a 'simple' command, that only consists of the opcode 'cmd' itself,
4481 * without filling any other registers
4482 */
4483static int ata_do_simple_cmd(struct ata_port *ap, struct ata_device *dev,
4484 u8 cmd)
4485{
4486 struct ata_taskfile tf;
4487 int err;
4488
4489 ata_tf_init(ap, &tf, dev->devno);
4490
4491 tf.command = cmd;
4492 tf.flags |= ATA_TFLAG_DEVICE;
4493 tf.protocol = ATA_PROT_NODATA;
4494
4495 err = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0);
4496 if (err)
4497 printk(KERN_ERR "%s: ata command failed: %d\n",
4498 __FUNCTION__, err);
4499
4500 return err;
4501}
4502
4503static int ata_flush_cache(struct ata_port *ap, struct ata_device *dev)
4504{
4505 u8 cmd;
4506
4507 if (!ata_try_flush_cache(dev))
4508 return 0;
4509
4510 if (ata_id_has_flush_ext(dev->id))
4511 cmd = ATA_CMD_FLUSH_EXT;
4512 else
4513 cmd = ATA_CMD_FLUSH;
4514
4515 return ata_do_simple_cmd(ap, dev, cmd);
4516}
4517
4518static int ata_standby_drive(struct ata_port *ap, struct ata_device *dev)
4519{
4520 return ata_do_simple_cmd(ap, dev, ATA_CMD_STANDBYNOW1);
4521}
4522
4523static int ata_start_drive(struct ata_port *ap, struct ata_device *dev)
4524{
4525 return ata_do_simple_cmd(ap, dev, ATA_CMD_IDLEIMMEDIATE);
4526}
4527
4528/**
4529 * ata_device_resume - wakeup a previously suspended devices
4530 *
4531 * Kick the drive back into action, by sending it an idle immediate
4532 * command and making sure its transfer mode matches between drive
4533 * and host.
4534 *
4535 */
4536int ata_device_resume(struct ata_port *ap, struct ata_device *dev)
4537{
4538 if (ap->flags & ATA_FLAG_SUSPENDED) {
4539 ap->flags &= ~ATA_FLAG_SUSPENDED;
4540 ata_set_mode(ap);
4541 }
4542 if (!ata_dev_present(dev))
4543 return 0;
4544 if (dev->class == ATA_DEV_ATA)
4545 ata_start_drive(ap, dev);
4546
4547 return 0;
4548}
4549
4550/**
4551 * ata_device_suspend - prepare a device for suspend
4552 *
4553 * Flush the cache on the drive, if appropriate, then issue a
4554 * standbynow command.
4555 *
4556 */
4557int ata_device_suspend(struct ata_port *ap, struct ata_device *dev)
4558{
4559 if (!ata_dev_present(dev))
4560 return 0;
4561 if (dev->class == ATA_DEV_ATA)
4562 ata_flush_cache(ap, dev);
4563
4564 ata_standby_drive(ap, dev);
4565 ap->flags |= ATA_FLAG_SUSPENDED;
4566 return 0;
4567}
4568
4423int ata_port_start (struct ata_port *ap) 4569int ata_port_start (struct ata_port *ap)
4424{ 4570{
4425 struct device *dev = ap->host_set->dev; 4571 struct device *dev = ap->host_set->dev;
@@ -5167,6 +5313,23 @@ int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits)
5167 5313
5168 return (tmp == bits->val) ? 1 : 0; 5314 return (tmp == bits->val) ? 1 : 0;
5169} 5315}
5316
5317int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state)
5318{
5319 pci_save_state(pdev);
5320 pci_disable_device(pdev);
5321 pci_set_power_state(pdev, PCI_D3hot);
5322 return 0;
5323}
5324
5325int ata_pci_device_resume(struct pci_dev *pdev)
5326{
5327 pci_set_power_state(pdev, PCI_D0);
5328 pci_restore_state(pdev);
5329 pci_enable_device(pdev);
5330 pci_set_master(pdev);
5331 return 0;
5332}
5170#endif /* CONFIG_PCI */ 5333#endif /* CONFIG_PCI */
5171 5334
5172 5335
@@ -5261,6 +5424,7 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string);
5261EXPORT_SYMBOL_GPL(ata_dev_config); 5424EXPORT_SYMBOL_GPL(ata_dev_config);
5262EXPORT_SYMBOL_GPL(ata_scsi_simulate); 5425EXPORT_SYMBOL_GPL(ata_scsi_simulate);
5263 5426
5427EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
5264EXPORT_SYMBOL_GPL(ata_timing_compute); 5428EXPORT_SYMBOL_GPL(ata_timing_compute);
5265EXPORT_SYMBOL_GPL(ata_timing_merge); 5429EXPORT_SYMBOL_GPL(ata_timing_merge);
5266 5430
@@ -5270,4 +5434,11 @@ EXPORT_SYMBOL_GPL(ata_pci_host_stop);
5270EXPORT_SYMBOL_GPL(ata_pci_init_native_mode); 5434EXPORT_SYMBOL_GPL(ata_pci_init_native_mode);
5271EXPORT_SYMBOL_GPL(ata_pci_init_one); 5435EXPORT_SYMBOL_GPL(ata_pci_init_one);
5272EXPORT_SYMBOL_GPL(ata_pci_remove_one); 5436EXPORT_SYMBOL_GPL(ata_pci_remove_one);
5437EXPORT_SYMBOL_GPL(ata_pci_device_suspend);
5438EXPORT_SYMBOL_GPL(ata_pci_device_resume);
5273#endif /* CONFIG_PCI */ 5439#endif /* CONFIG_PCI */
5440
5441EXPORT_SYMBOL_GPL(ata_device_suspend);
5442EXPORT_SYMBOL_GPL(ata_device_resume);
5443EXPORT_SYMBOL_GPL(ata_scsi_device_suspend);
5444EXPORT_SYMBOL_GPL(ata_scsi_device_resume);
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index e0439be4b573..cfbceb504718 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -396,6 +396,22 @@ void ata_dump_status(unsigned id, struct ata_taskfile *tf)
396 } 396 }
397} 397}
398 398
399int ata_scsi_device_resume(struct scsi_device *sdev)
400{
401 struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0];
402 struct ata_device *dev = &ap->device[sdev->id];
403
404 return ata_device_resume(ap, dev);
405}
406
407int ata_scsi_device_suspend(struct scsi_device *sdev)
408{
409 struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0];
410 struct ata_device *dev = &ap->device[sdev->id];
411
412 return ata_device_suspend(ap, dev);
413}
414
399/** 415/**
400 * ata_to_sense_error - convert ATA error to SCSI error 416 * ata_to_sense_error - convert ATA error to SCSI error
401 * @id: ATA device number 417 * @id: ATA device number
@@ -1080,11 +1096,13 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1080 scsicmd[0] == WRITE_16) 1096 scsicmd[0] == WRITE_16)
1081 tf->flags |= ATA_TFLAG_WRITE; 1097 tf->flags |= ATA_TFLAG_WRITE;
1082 1098
1083 /* Calculate the SCSI LBA and transfer length. */ 1099 /* Calculate the SCSI LBA, transfer length and FUA. */
1084 switch (scsicmd[0]) { 1100 switch (scsicmd[0]) {
1085 case READ_10: 1101 case READ_10:
1086 case WRITE_10: 1102 case WRITE_10:
1087 scsi_10_lba_len(scsicmd, &block, &n_block); 1103 scsi_10_lba_len(scsicmd, &block, &n_block);
1104 if (unlikely(scsicmd[1] & (1 << 3)))
1105 tf->flags |= ATA_TFLAG_FUA;
1088 break; 1106 break;
1089 case READ_6: 1107 case READ_6:
1090 case WRITE_6: 1108 case WRITE_6:
@@ -1099,6 +1117,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1099 case READ_16: 1117 case READ_16:
1100 case WRITE_16: 1118 case WRITE_16:
1101 scsi_16_lba_len(scsicmd, &block, &n_block); 1119 scsi_16_lba_len(scsicmd, &block, &n_block);
1120 if (unlikely(scsicmd[1] & (1 << 3)))
1121 tf->flags |= ATA_TFLAG_FUA;
1102 break; 1122 break;
1103 default: 1123 default:
1104 DPRINTK("no-byte command\n"); 1124 DPRINTK("no-byte command\n");
@@ -1142,7 +1162,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1142 tf->device |= (block >> 24) & 0xf; 1162 tf->device |= (block >> 24) & 0xf;
1143 } 1163 }
1144 1164
1145 ata_rwcmd_protocol(qc); 1165 if (unlikely(ata_rwcmd_protocol(qc) < 0))
1166 goto invalid_fld;
1146 1167
1147 qc->nsect = n_block; 1168 qc->nsect = n_block;
1148 tf->nsect = n_block & 0xff; 1169 tf->nsect = n_block & 0xff;
@@ -1160,7 +1181,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
1160 if ((block >> 28) || (n_block > 256)) 1181 if ((block >> 28) || (n_block > 256))
1161 goto out_of_range; 1182 goto out_of_range;
1162 1183
1163 ata_rwcmd_protocol(qc); 1184 if (unlikely(ata_rwcmd_protocol(qc) < 0))
1185 goto invalid_fld;
1164 1186
1165 /* Convert LBA to CHS */ 1187 /* Convert LBA to CHS */
1166 track = (u32)block / dev->sectors; 1188 track = (u32)block / dev->sectors;
@@ -1695,6 +1717,7 @@ static unsigned int ata_msense_rw_recovery(u8 **ptr_io, const u8 *last)
1695unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf, 1717unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1696 unsigned int buflen) 1718 unsigned int buflen)
1697{ 1719{
1720 struct ata_device *dev = args->dev;
1698 u8 *scsicmd = args->cmd->cmnd, *p, *last; 1721 u8 *scsicmd = args->cmd->cmnd, *p, *last;
1699 const u8 sat_blk_desc[] = { 1722 const u8 sat_blk_desc[] = {
1700 0, 0, 0, 0, /* number of blocks: sat unspecified */ 1723 0, 0, 0, 0, /* number of blocks: sat unspecified */
@@ -1703,6 +1726,7 @@ unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1703 }; 1726 };
1704 u8 pg, spg; 1727 u8 pg, spg;
1705 unsigned int ebd, page_control, six_byte, output_len, alloc_len, minlen; 1728 unsigned int ebd, page_control, six_byte, output_len, alloc_len, minlen;
1729 u8 dpofua;
1706 1730
1707 VPRINTK("ENTER\n"); 1731 VPRINTK("ENTER\n");
1708 1732
@@ -1771,9 +1795,17 @@ unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1771 1795
1772 if (minlen < 1) 1796 if (minlen < 1)
1773 return 0; 1797 return 0;
1798
1799 dpofua = 0;
1800 if (ata_id_has_fua(args->id) && dev->flags & ATA_DFLAG_LBA48 &&
1801 (!(dev->flags & ATA_DFLAG_PIO) || dev->multi_count))
1802 dpofua = 1 << 4;
1803
1774 if (six_byte) { 1804 if (six_byte) {
1775 output_len--; 1805 output_len--;
1776 rbuf[0] = output_len; 1806 rbuf[0] = output_len;
1807 if (minlen > 2)
1808 rbuf[2] |= dpofua;
1777 if (ebd) { 1809 if (ebd) {
1778 if (minlen > 3) 1810 if (minlen > 3)
1779 rbuf[3] = sizeof(sat_blk_desc); 1811 rbuf[3] = sizeof(sat_blk_desc);
@@ -1786,6 +1818,8 @@ unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
1786 rbuf[0] = output_len >> 8; 1818 rbuf[0] = output_len >> 8;
1787 if (minlen > 1) 1819 if (minlen > 1)
1788 rbuf[1] = output_len; 1820 rbuf[1] = output_len;
1821 if (minlen > 3)
1822 rbuf[3] |= dpofua;
1789 if (ebd) { 1823 if (ebd) {
1790 if (minlen > 7) 1824 if (minlen > 7)
1791 rbuf[7] = sizeof(sat_blk_desc); 1825 rbuf[7] = sizeof(sat_blk_desc);
@@ -2446,7 +2480,7 @@ int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
2446 if (xlat_func) 2480 if (xlat_func)
2447 ata_scsi_translate(ap, dev, cmd, done, xlat_func); 2481 ata_scsi_translate(ap, dev, cmd, done, xlat_func);
2448 else 2482 else
2449 ata_scsi_simulate(dev->id, cmd, done); 2483 ata_scsi_simulate(ap, dev, cmd, done);
2450 } else 2484 } else
2451 ata_scsi_translate(ap, dev, cmd, done, atapi_xlat); 2485 ata_scsi_translate(ap, dev, cmd, done, atapi_xlat);
2452 2486
@@ -2469,14 +2503,16 @@ out_unlock:
2469 * spin_lock_irqsave(host_set lock) 2503 * spin_lock_irqsave(host_set lock)
2470 */ 2504 */
2471 2505
2472void ata_scsi_simulate(u16 *id, 2506void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev,
2473 struct scsi_cmnd *cmd, 2507 struct scsi_cmnd *cmd,
2474 void (*done)(struct scsi_cmnd *)) 2508 void (*done)(struct scsi_cmnd *))
2475{ 2509{
2476 struct ata_scsi_args args; 2510 struct ata_scsi_args args;
2477 const u8 *scsicmd = cmd->cmnd; 2511 const u8 *scsicmd = cmd->cmnd;
2478 2512
2479 args.id = id; 2513 args.ap = ap;
2514 args.dev = dev;
2515 args.id = dev->id;
2480 args.cmd = cmd; 2516 args.cmd = cmd;
2481 args.done = done; 2517 args.done = done;
2482 2518
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h
index 251e53bdc6e0..e03ce48b7b4b 100644
--- a/drivers/scsi/libata.h
+++ b/drivers/scsi/libata.h
@@ -32,6 +32,8 @@
32#define DRV_VERSION "1.20" /* must be exactly four chars */ 32#define DRV_VERSION "1.20" /* must be exactly four chars */
33 33
34struct ata_scsi_args { 34struct ata_scsi_args {
35 struct ata_port *ap;
36 struct ata_device *dev;
35 u16 *id; 37 u16 *id;
36 struct scsi_cmnd *cmd; 38 struct scsi_cmnd *cmd;
37 void (*done)(struct scsi_cmnd *); 39 void (*done)(struct scsi_cmnd *);
@@ -41,7 +43,7 @@ struct ata_scsi_args {
41extern int atapi_enabled; 43extern int atapi_enabled;
42extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, 44extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
43 struct ata_device *dev); 45 struct ata_device *dev);
44extern void ata_rwcmd_protocol(struct ata_queued_cmd *qc); 46extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc);
45extern void ata_qc_free(struct ata_queued_cmd *qc); 47extern void ata_qc_free(struct ata_queued_cmd *qc);
46extern int ata_qc_issue(struct ata_queued_cmd *qc); 48extern int ata_qc_issue(struct ata_queued_cmd *qc);
47extern int ata_check_atapi_dma(struct ata_queued_cmd *qc); 49extern int ata_check_atapi_dma(struct ata_queued_cmd *qc);
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 3062b39fbdb9..38ffa8d6e629 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -29,9 +29,10 @@ struct lpfc_sli2_slim;
29#define LPFC_LC_HBA_Q_DEPTH 1024 /* max cmds per low cost hba */ 29#define LPFC_LC_HBA_Q_DEPTH 1024 /* max cmds per low cost hba */
30#define LPFC_LP101_HBA_Q_DEPTH 128 /* max cmds per low cost hba */ 30#define LPFC_LP101_HBA_Q_DEPTH 128 /* max cmds per low cost hba */
31 31
32#define LPFC_CMD_PER_LUN 30 /* max outstanding cmds per lun */ 32#define LPFC_CMD_PER_LUN 3 /* max outstanding cmds per lun */
33#define LPFC_SG_SEG_CNT 64 /* sg element count per scsi cmnd */ 33#define LPFC_SG_SEG_CNT 64 /* sg element count per scsi cmnd */
34#define LPFC_IOCB_LIST_CNT 2250 /* list of IOCBs for fast-path usage. */ 34#define LPFC_IOCB_LIST_CNT 2250 /* list of IOCBs for fast-path usage. */
35#define LPFC_Q_RAMP_UP_INTERVAL 120 /* lun q_depth ramp up interval */
35 36
36/* Define macros for 64 bit support */ 37/* Define macros for 64 bit support */
37#define putPaddrLow(addr) ((uint32_t) (0xffffffff & (u64)(addr))) 38#define putPaddrLow(addr) ((uint32_t) (0xffffffff & (u64)(addr)))
@@ -45,6 +46,11 @@ struct lpfc_sli2_slim;
45 46
46#define MAX_HBAEVT 32 47#define MAX_HBAEVT 32
47 48
49enum lpfc_polling_flags {
50 ENABLE_FCP_RING_POLLING = 0x1,
51 DISABLE_FCP_RING_INT = 0x2
52};
53
48/* Provide DMA memory definitions the driver uses per port instance. */ 54/* Provide DMA memory definitions the driver uses per port instance. */
49struct lpfc_dmabuf { 55struct lpfc_dmabuf {
50 struct list_head list; 56 struct list_head list;
@@ -167,6 +173,7 @@ struct lpfc_hba {
167 dma_addr_t slim2p_mapping; 173 dma_addr_t slim2p_mapping;
168 uint16_t pci_cfg_value; 174 uint16_t pci_cfg_value;
169 175
176 struct semaphore hba_can_block;
170 uint32_t hba_state; 177 uint32_t hba_state;
171 178
172#define LPFC_INIT_START 1 /* Initial state after board reset */ 179#define LPFC_INIT_START 1 /* Initial state after board reset */
@@ -286,6 +293,8 @@ struct lpfc_hba {
286 uint32_t cfg_fcp_bind_method; 293 uint32_t cfg_fcp_bind_method;
287 uint32_t cfg_discovery_threads; 294 uint32_t cfg_discovery_threads;
288 uint32_t cfg_max_luns; 295 uint32_t cfg_max_luns;
296 uint32_t cfg_poll;
297 uint32_t cfg_poll_tmo;
289 uint32_t cfg_sg_seg_cnt; 298 uint32_t cfg_sg_seg_cnt;
290 uint32_t cfg_sg_dma_buf_size; 299 uint32_t cfg_sg_dma_buf_size;
291 300
@@ -337,7 +346,9 @@ struct lpfc_hba {
337#define VPD_PORT 0x8 /* valid vpd port data */ 346#define VPD_PORT 0x8 /* valid vpd port data */
338#define VPD_MASK 0xf /* mask for any vpd data */ 347#define VPD_MASK 0xf /* mask for any vpd data */
339 348
349 struct timer_list fcp_poll_timer;
340 struct timer_list els_tmofunc; 350 struct timer_list els_tmofunc;
351
341 /* 352 /*
342 * stat counters 353 * stat counters
343 */ 354 */
@@ -348,6 +359,7 @@ struct lpfc_hba {
348 struct lpfc_sysfs_mbox sysfs_mbox; 359 struct lpfc_sysfs_mbox sysfs_mbox;
349 360
350 /* fastpath list. */ 361 /* fastpath list. */
362 spinlock_t scsi_buf_list_lock;
351 struct list_head lpfc_scsi_buf_list; 363 struct list_head lpfc_scsi_buf_list;
352 uint32_t total_scsi_bufs; 364 uint32_t total_scsi_bufs;
353 struct list_head lpfc_iocb_list; 365 struct list_head lpfc_iocb_list;
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 89e8222bc7cc..5625a8c2a8fd 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -278,6 +278,71 @@ lpfc_board_online_store(struct class_device *cdev, const char *buf,
278 return -EIO; 278 return -EIO;
279} 279}
280 280
281static ssize_t
282lpfc_poll_show(struct class_device *cdev, char *buf)
283{
284 struct Scsi_Host *host = class_to_shost(cdev);
285 struct lpfc_hba *phba = (struct lpfc_hba*)host->hostdata[0];
286
287 return snprintf(buf, PAGE_SIZE, "%#x\n", phba->cfg_poll);
288}
289
290static ssize_t
291lpfc_poll_store(struct class_device *cdev, const char *buf,
292 size_t count)
293{
294 struct Scsi_Host *host = class_to_shost(cdev);
295 struct lpfc_hba *phba = (struct lpfc_hba*)host->hostdata[0];
296 uint32_t creg_val;
297 uint32_t old_val;
298 int val=0;
299
300 if (!isdigit(buf[0]))
301 return -EINVAL;
302
303 if (sscanf(buf, "%i", &val) != 1)
304 return -EINVAL;
305
306 if ((val & 0x3) != val)
307 return -EINVAL;
308
309 spin_lock_irq(phba->host->host_lock);
310
311 old_val = phba->cfg_poll;
312
313 if (val & ENABLE_FCP_RING_POLLING) {
314 if ((val & DISABLE_FCP_RING_INT) &&
315 !(old_val & DISABLE_FCP_RING_INT)) {
316 creg_val = readl(phba->HCregaddr);
317 creg_val &= ~(HC_R0INT_ENA << LPFC_FCP_RING);
318 writel(creg_val, phba->HCregaddr);
319 readl(phba->HCregaddr); /* flush */
320
321 lpfc_poll_start_timer(phba);
322 }
323 } else if (val != 0x0) {
324 spin_unlock_irq(phba->host->host_lock);
325 return -EINVAL;
326 }
327
328 if (!(val & DISABLE_FCP_RING_INT) &&
329 (old_val & DISABLE_FCP_RING_INT))
330 {
331 spin_unlock_irq(phba->host->host_lock);
332 del_timer(&phba->fcp_poll_timer);
333 spin_lock_irq(phba->host->host_lock);
334 creg_val = readl(phba->HCregaddr);
335 creg_val |= (HC_R0INT_ENA << LPFC_FCP_RING);
336 writel(creg_val, phba->HCregaddr);
337 readl(phba->HCregaddr); /* flush */
338 }
339
340 phba->cfg_poll = val;
341
342 spin_unlock_irq(phba->host->host_lock);
343
344 return strlen(buf);
345}
281 346
282#define lpfc_param_show(attr) \ 347#define lpfc_param_show(attr) \
283static ssize_t \ 348static ssize_t \
@@ -416,6 +481,15 @@ static CLASS_DEVICE_ATTR(management_version, S_IRUGO, management_version_show,
416static CLASS_DEVICE_ATTR(board_online, S_IRUGO | S_IWUSR, 481static CLASS_DEVICE_ATTR(board_online, S_IRUGO | S_IWUSR,
417 lpfc_board_online_show, lpfc_board_online_store); 482 lpfc_board_online_show, lpfc_board_online_store);
418 483
484static int lpfc_poll = 0;
485module_param(lpfc_poll, int, 0);
486MODULE_PARM_DESC(lpfc_poll, "FCP ring polling mode control:"
487 " 0 - none,"
488 " 1 - poll with interrupts enabled"
489 " 3 - poll and disable FCP ring interrupts");
490
491static CLASS_DEVICE_ATTR(lpfc_poll, S_IRUGO | S_IWUSR,
492 lpfc_poll_show, lpfc_poll_store);
419 493
420/* 494/*
421# lpfc_log_verbose: Only turn this flag on if you are willing to risk being 495# lpfc_log_verbose: Only turn this flag on if you are willing to risk being
@@ -523,10 +597,10 @@ LPFC_ATTR_R(ack0, 0, 0, 1, "Enable ACK0 support");
523# is 0. Default value of cr_count is 1. The cr_count feature is disabled if 597# is 0. Default value of cr_count is 1. The cr_count feature is disabled if
524# cr_delay is set to 0. 598# cr_delay is set to 0.
525*/ 599*/
526LPFC_ATTR(cr_delay, 0, 0, 63, "A count of milliseconds after which an" 600LPFC_ATTR_RW(cr_delay, 0, 0, 63, "A count of milliseconds after which an"
527 "interrupt response is generated"); 601 "interrupt response is generated");
528 602
529LPFC_ATTR(cr_count, 1, 1, 255, "A count of I/O completions after which an" 603LPFC_ATTR_RW(cr_count, 1, 1, 255, "A count of I/O completions after which an"
530 "interrupt response is generated"); 604 "interrupt response is generated");
531 605
532/* 606/*
@@ -553,6 +627,13 @@ LPFC_ATTR(discovery_threads, 32, 1, 64, "Maximum number of ELS commands"
553LPFC_ATTR_R(max_luns, 256, 1, 32768, 627LPFC_ATTR_R(max_luns, 256, 1, 32768,
554 "Maximum number of LUNs per target driver will support"); 628 "Maximum number of LUNs per target driver will support");
555 629
630/*
631# lpfc_poll_tmo: .Milliseconds driver will wait between polling FCP ring.
632# Value range is [1,255], default value is 10.
633*/
634LPFC_ATTR_RW(poll_tmo, 10, 1, 255,
635 "Milliseconds driver will wait between polling FCP ring");
636
556struct class_device_attribute *lpfc_host_attrs[] = { 637struct class_device_attribute *lpfc_host_attrs[] = {
557 &class_device_attr_info, 638 &class_device_attr_info,
558 &class_device_attr_serialnum, 639 &class_device_attr_serialnum,
@@ -575,11 +656,15 @@ struct class_device_attribute *lpfc_host_attrs[] = {
575 &class_device_attr_lpfc_topology, 656 &class_device_attr_lpfc_topology,
576 &class_device_attr_lpfc_scan_down, 657 &class_device_attr_lpfc_scan_down,
577 &class_device_attr_lpfc_link_speed, 658 &class_device_attr_lpfc_link_speed,
659 &class_device_attr_lpfc_cr_delay,
660 &class_device_attr_lpfc_cr_count,
578 &class_device_attr_lpfc_fdmi_on, 661 &class_device_attr_lpfc_fdmi_on,
579 &class_device_attr_lpfc_max_luns, 662 &class_device_attr_lpfc_max_luns,
580 &class_device_attr_nport_evt_cnt, 663 &class_device_attr_nport_evt_cnt,
581 &class_device_attr_management_version, 664 &class_device_attr_management_version,
582 &class_device_attr_board_online, 665 &class_device_attr_board_online,
666 &class_device_attr_lpfc_poll,
667 &class_device_attr_lpfc_poll_tmo,
583 NULL, 668 NULL,
584}; 669};
585 670
@@ -1292,6 +1377,9 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
1292 lpfc_fdmi_on_init(phba, lpfc_fdmi_on); 1377 lpfc_fdmi_on_init(phba, lpfc_fdmi_on);
1293 lpfc_discovery_threads_init(phba, lpfc_discovery_threads); 1378 lpfc_discovery_threads_init(phba, lpfc_discovery_threads);
1294 lpfc_max_luns_init(phba, lpfc_max_luns); 1379 lpfc_max_luns_init(phba, lpfc_max_luns);
1380 lpfc_poll_tmo_init(phba, lpfc_poll_tmo);
1381
1382 phba->cfg_poll = lpfc_poll;
1295 1383
1296 /* 1384 /*
1297 * The total number of segments is the configuration value plus 2 1385 * The total number of segments is the configuration value plus 2
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index d527d05a607f..f1e708946e66 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -143,6 +143,9 @@ LPFC_MBOXQ_t *lpfc_mbox_get(struct lpfc_hba *);
143int lpfc_mem_alloc(struct lpfc_hba *); 143int lpfc_mem_alloc(struct lpfc_hba *);
144void lpfc_mem_free(struct lpfc_hba *); 144void lpfc_mem_free(struct lpfc_hba *);
145 145
146void lpfc_poll_timeout(unsigned long ptr);
147void lpfc_poll_start_timer(struct lpfc_hba * phba);
148void lpfc_sli_poll_fcp_ring(struct lpfc_hba * hba);
146struct lpfc_iocbq * lpfc_sli_get_iocbq(struct lpfc_hba *); 149struct lpfc_iocbq * lpfc_sli_get_iocbq(struct lpfc_hba *);
147void lpfc_sli_release_iocbq(struct lpfc_hba * phba, struct lpfc_iocbq * iocb); 150void lpfc_sli_release_iocbq(struct lpfc_hba * phba, struct lpfc_iocbq * iocb);
148uint16_t lpfc_sli_next_iotag(struct lpfc_hba * phba, struct lpfc_iocbq * iocb); 151uint16_t lpfc_sli_next_iotag(struct lpfc_hba * phba, struct lpfc_iocbq * iocb);
diff --git a/drivers/scsi/lpfc/lpfc_disc.h b/drivers/scsi/lpfc/lpfc_disc.h
index 084e7628ce17..ed6c81660e03 100644
--- a/drivers/scsi/lpfc/lpfc_disc.h
+++ b/drivers/scsi/lpfc/lpfc_disc.h
@@ -73,6 +73,8 @@ struct lpfc_nodelist {
73 struct lpfc_hba *nlp_phba; 73 struct lpfc_hba *nlp_phba;
74 struct lpfc_work_evt nodev_timeout_evt; 74 struct lpfc_work_evt nodev_timeout_evt;
75 struct lpfc_work_evt els_retry_evt; 75 struct lpfc_work_evt els_retry_evt;
76 unsigned long last_ramp_up_time; /* jiffy of last ramp up */
77 unsigned long last_q_full_time; /* jiffy of last queue full */
76}; 78};
77 79
78/* Defines for nlp_flag (uint32) */ 80/* Defines for nlp_flag (uint32) */
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index bcc29ec126dc..20f1a0713db2 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -720,6 +720,7 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
720 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 720 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
721 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 721 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
722 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 722 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
723 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
723 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 724 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
724 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC); 725 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC);
725 } 726 }
@@ -869,6 +870,7 @@ lpfc_cmpl_els_prli(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
869 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 870 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
870 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 871 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
871 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 872 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
873 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
872 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 874 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
873 goto out; 875 goto out;
874 } 876 }
@@ -1054,6 +1056,7 @@ lpfc_cmpl_els_adisc(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
1054 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 1056 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
1055 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 1057 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
1056 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 1058 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
1059 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
1057 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 1060 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
1058 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC); 1061 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC);
1059 } 1062 }
@@ -1205,6 +1208,7 @@ lpfc_cmpl_els_logo(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
1205 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 1208 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
1206 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 1209 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
1207 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 1210 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
1211 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
1208 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 1212 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
1209 goto out; 1213 goto out;
1210 } 1214 }
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 259eeb161b82..a1f751e79405 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -1017,12 +1017,7 @@ lpfc_register_remote_port(struct lpfc_hba * phba,
1017 rport_ids.port_name = wwn_to_u64(ndlp->nlp_portname.u.wwn); 1017 rport_ids.port_name = wwn_to_u64(ndlp->nlp_portname.u.wwn);
1018 rport_ids.port_id = ndlp->nlp_DID; 1018 rport_ids.port_id = ndlp->nlp_DID;
1019 rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; 1019 rport_ids.roles = FC_RPORT_ROLE_UNKNOWN;
1020 if (ndlp->nlp_type & NLP_FCP_TARGET)
1021 rport_ids.roles |= FC_RPORT_ROLE_FCP_TARGET;
1022 if (ndlp->nlp_type & NLP_FCP_INITIATOR)
1023 rport_ids.roles |= FC_RPORT_ROLE_FCP_INITIATOR;
1024 1020
1025 scsi_block_requests(phba->host);
1026 ndlp->rport = rport = fc_remote_port_add(phba->host, 0, &rport_ids); 1021 ndlp->rport = rport = fc_remote_port_add(phba->host, 0, &rport_ids);
1027 if (!rport) { 1022 if (!rport) {
1028 dev_printk(KERN_WARNING, &phba->pcidev->dev, 1023 dev_printk(KERN_WARNING, &phba->pcidev->dev,
@@ -1039,7 +1034,16 @@ lpfc_register_remote_port(struct lpfc_hba * phba,
1039 } 1034 }
1040 rdata = rport->dd_data; 1035 rdata = rport->dd_data;
1041 rdata->pnode = ndlp; 1036 rdata->pnode = ndlp;
1042 scsi_unblock_requests(phba->host); 1037
1038 if (ndlp->nlp_type & NLP_FCP_TARGET)
1039 rport_ids.roles |= FC_RPORT_ROLE_FCP_TARGET;
1040 if (ndlp->nlp_type & NLP_FCP_INITIATOR)
1041 rport_ids.roles |= FC_RPORT_ROLE_FCP_INITIATOR;
1042
1043
1044 if (rport_ids.roles != FC_RPORT_ROLE_UNKNOWN)
1045 fc_remote_port_rolechg(rport, rport_ids.roles);
1046
1043 1047
1044 return; 1048 return;
1045} 1049}
@@ -1053,9 +1057,7 @@ lpfc_unregister_remote_port(struct lpfc_hba * phba,
1053 1057
1054 ndlp->rport = NULL; 1058 ndlp->rport = NULL;
1055 rdata->pnode = NULL; 1059 rdata->pnode = NULL;
1056 scsi_block_requests(phba->host);
1057 fc_remote_port_delete(rport); 1060 fc_remote_port_delete(rport);
1058 scsi_unblock_requests(phba->host);
1059 1061
1060 return; 1062 return;
1061} 1063}
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h
index 86c41981188b..1ea565e0561f 100644
--- a/drivers/scsi/lpfc/lpfc_hw.h
+++ b/drivers/scsi/lpfc/lpfc_hw.h
@@ -266,9 +266,11 @@ struct lpfc_name {
266 struct { 266 struct {
267#ifdef __BIG_ENDIAN_BITFIELD 267#ifdef __BIG_ENDIAN_BITFIELD
268 uint8_t nameType:4; /* FC Word 0, bit 28:31 */ 268 uint8_t nameType:4; /* FC Word 0, bit 28:31 */
269 uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit 8:11 of IEEE ext */ 269 uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit
270 8:11 of IEEE ext */
270#else /* __LITTLE_ENDIAN_BITFIELD */ 271#else /* __LITTLE_ENDIAN_BITFIELD */
271 uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit 8:11 of IEEE ext */ 272 uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit
273 8:11 of IEEE ext */
272 uint8_t nameType:4; /* FC Word 0, bit 28:31 */ 274 uint8_t nameType:4; /* FC Word 0, bit 28:31 */
273#endif 275#endif
274 276
@@ -278,7 +280,8 @@ struct lpfc_name {
278#define NAME_IP_TYPE 0x4 /* IP address */ 280#define NAME_IP_TYPE 0x4 /* IP address */
279#define NAME_CCITT_TYPE 0xC 281#define NAME_CCITT_TYPE 0xC
280#define NAME_CCITT_GR_TYPE 0xE 282#define NAME_CCITT_GR_TYPE 0xE
281 uint8_t IEEEextLsb; /* FC Word 0, bit 16:23, IEEE extended Lsb */ 283 uint8_t IEEEextLsb; /* FC Word 0, bit 16:23, IEEE
284 extended Lsb */
282 uint8_t IEEE[6]; /* FC IEEE address */ 285 uint8_t IEEE[6]; /* FC IEEE address */
283 } s; 286 } s;
284 uint8_t wwn[8]; 287 uint8_t wwn[8];
@@ -1024,23 +1027,38 @@ typedef struct {
1024/* Start FireFly Register definitions */ 1027/* Start FireFly Register definitions */
1025#define PCI_VENDOR_ID_EMULEX 0x10df 1028#define PCI_VENDOR_ID_EMULEX 0x10df
1026#define PCI_DEVICE_ID_FIREFLY 0x1ae5 1029#define PCI_DEVICE_ID_FIREFLY 0x1ae5
1027#define PCI_DEVICE_ID_SUPERFLY 0xf700
1028#define PCI_DEVICE_ID_DRAGONFLY 0xf800
1029#define PCI_DEVICE_ID_RFLY 0xf095 1030#define PCI_DEVICE_ID_RFLY 0xf095
1030#define PCI_DEVICE_ID_PFLY 0xf098 1031#define PCI_DEVICE_ID_PFLY 0xf098
1032#define PCI_DEVICE_ID_LP101 0xf0a1
1031#define PCI_DEVICE_ID_TFLY 0xf0a5 1033#define PCI_DEVICE_ID_TFLY 0xf0a5
1034#define PCI_DEVICE_ID_BSMB 0xf0d1
1035#define PCI_DEVICE_ID_BMID 0xf0d5
1036#define PCI_DEVICE_ID_ZSMB 0xf0e1
1037#define PCI_DEVICE_ID_ZMID 0xf0e5
1038#define PCI_DEVICE_ID_NEPTUNE 0xf0f5
1039#define PCI_DEVICE_ID_NEPTUNE_SCSP 0xf0f6
1040#define PCI_DEVICE_ID_NEPTUNE_DCSP 0xf0f7
1041#define PCI_DEVICE_ID_SUPERFLY 0xf700
1042#define PCI_DEVICE_ID_DRAGONFLY 0xf800
1032#define PCI_DEVICE_ID_CENTAUR 0xf900 1043#define PCI_DEVICE_ID_CENTAUR 0xf900
1033#define PCI_DEVICE_ID_PEGASUS 0xf980 1044#define PCI_DEVICE_ID_PEGASUS 0xf980
1034#define PCI_DEVICE_ID_THOR 0xfa00 1045#define PCI_DEVICE_ID_THOR 0xfa00
1035#define PCI_DEVICE_ID_VIPER 0xfb00 1046#define PCI_DEVICE_ID_VIPER 0xfb00
1047#define PCI_DEVICE_ID_LP10000S 0xfc00
1048#define PCI_DEVICE_ID_LP11000S 0xfc10
1049#define PCI_DEVICE_ID_LPE11000S 0xfc20
1036#define PCI_DEVICE_ID_HELIOS 0xfd00 1050#define PCI_DEVICE_ID_HELIOS 0xfd00
1037#define PCI_DEVICE_ID_BMID 0xf0d5 1051#define PCI_DEVICE_ID_HELIOS_SCSP 0xfd11
1038#define PCI_DEVICE_ID_BSMB 0xf0d1 1052#define PCI_DEVICE_ID_HELIOS_DCSP 0xfd12
1039#define PCI_DEVICE_ID_ZEPHYR 0xfe00 1053#define PCI_DEVICE_ID_ZEPHYR 0xfe00
1040#define PCI_DEVICE_ID_ZMID 0xf0e5 1054#define PCI_DEVICE_ID_ZEPHYR_SCSP 0xfe11
1041#define PCI_DEVICE_ID_ZSMB 0xf0e1 1055#define PCI_DEVICE_ID_ZEPHYR_DCSP 0xfe12
1042#define PCI_DEVICE_ID_LP101 0xf0a1 1056
1043#define PCI_DEVICE_ID_LP10000S 0xfc00 1057#define PCI_SUBSYSTEM_ID_LP11000S 0xfc11
1058#define PCI_SUBSYSTEM_ID_LP11002S 0xfc12
1059#define PCI_SUBSYSTEM_ID_LPE11000S 0xfc21
1060#define PCI_SUBSYSTEM_ID_LPE11002S 0xfc22
1061#define PCI_SUBSYSTEM_ID_LPE11010S 0xfc2A
1044 1062
1045#define JEDEC_ID_ADDRESS 0x0080001c 1063#define JEDEC_ID_ADDRESS 0x0080001c
1046#define FIREFLY_JEDEC_ID 0x1ACC 1064#define FIREFLY_JEDEC_ID 0x1ACC
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 07498118359d..b7a603a45328 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -126,34 +126,26 @@ lpfc_config_port_prep(struct lpfc_hba * phba)
126 return -ERESTART; 126 return -ERESTART;
127 } 127 }
128 128
129 /* The HBA's current state is provided by the ProgType and rr fields. 129 /*
130 * Read and check the value of these fields before continuing to config 130 * The value of rr must be 1 since the driver set the cv field to 1.
131 * this port. 131 * This setting requires the FW to set all revision fields.
132 */ 132 */
133 if (mb->un.varRdRev.rr == 0 || mb->un.varRdRev.un.b.ProgType != 2) { 133 if (mb->un.varRdRev.rr == 0) {
134 /* Old firmware */
135 vp->rev.rBit = 0; 134 vp->rev.rBit = 0;
136 lpfc_printf_log(phba, 135 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
137 KERN_ERR, 136 "%d:0440 Adapter failed to init, READ_REV has "
138 LOG_INIT, 137 "missing revision information.\n",
139 "%d:0440 Adapter failed to init, mbxCmd x%x " 138 phba->brd_no);
140 "READ_REV detected outdated firmware"
141 "Data: x%x\n",
142 phba->brd_no,
143 mb->mbxCommand, 0);
144 mempool_free(pmb, phba->mbox_mem_pool); 139 mempool_free(pmb, phba->mbox_mem_pool);
145 return -ERESTART; 140 return -ERESTART;
146 } else {
147 vp->rev.rBit = 1;
148 vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev;
149 memcpy(vp->rev.sli1FwName,
150 (char*)mb->un.varRdRev.sli1FwName, 16);
151 vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev;
152 memcpy(vp->rev.sli2FwName,
153 (char *)mb->un.varRdRev.sli2FwName, 16);
154 } 141 }
155 142
156 /* Save information as VPD data */ 143 /* Save information as VPD data */
144 vp->rev.rBit = 1;
145 vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev;
146 memcpy(vp->rev.sli1FwName, (char*) mb->un.varRdRev.sli1FwName, 16);
147 vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev;
148 memcpy(vp->rev.sli2FwName, (char *) mb->un.varRdRev.sli2FwName, 16);
157 vp->rev.biuRev = mb->un.varRdRev.biuRev; 149 vp->rev.biuRev = mb->un.varRdRev.biuRev;
158 vp->rev.smRev = mb->un.varRdRev.smRev; 150 vp->rev.smRev = mb->un.varRdRev.smRev;
159 vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev; 151 vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev;
@@ -378,6 +370,10 @@ lpfc_config_port_post(struct lpfc_hba * phba)
378 if (psli->num_rings > 3) 370 if (psli->num_rings > 3)
379 status |= HC_R3INT_ENA; 371 status |= HC_R3INT_ENA;
380 372
373 if ((phba->cfg_poll & ENABLE_FCP_RING_POLLING) &&
374 (phba->cfg_poll & DISABLE_FCP_RING_INT))
375 status &= ~(HC_R0INT_ENA << LPFC_FCP_RING);
376
381 writel(status, phba->HCregaddr); 377 writel(status, phba->HCregaddr);
382 readl(phba->HCregaddr); /* flush */ 378 readl(phba->HCregaddr); /* flush */
383 spin_unlock_irq(phba->host->host_lock); 379 spin_unlock_irq(phba->host->host_lock);
@@ -571,6 +567,8 @@ lpfc_handle_latt(struct lpfc_hba * phba)
571 567
572 rc = -EIO; 568 rc = -EIO;
573 569
570 /* Cleanup any outstanding ELS commands */
571 lpfc_els_flush_cmd(phba);
574 572
575 psli->slistat.link_event++; 573 psli->slistat.link_event++;
576 lpfc_read_la(phba, pmb, mp); 574 lpfc_read_la(phba, pmb, mp);
@@ -765,96 +763,139 @@ static void
765lpfc_get_hba_model_desc(struct lpfc_hba * phba, uint8_t * mdp, uint8_t * descp) 763lpfc_get_hba_model_desc(struct lpfc_hba * phba, uint8_t * mdp, uint8_t * descp)
766{ 764{
767 lpfc_vpd_t *vp; 765 lpfc_vpd_t *vp;
768 uint32_t id; 766 uint16_t dev_id = phba->pcidev->device;
769 uint8_t hdrtype; 767 uint16_t dev_subid = phba->pcidev->subsystem_device;
770 char str[16]; 768 uint8_t hdrtype = phba->pcidev->hdr_type;
769 char *model_str = "";
771 770
772 vp = &phba->vpd; 771 vp = &phba->vpd;
773 pci_read_config_dword(phba->pcidev, PCI_VENDOR_ID, &id);
774 pci_read_config_byte(phba->pcidev, PCI_HEADER_TYPE, &hdrtype);
775 772
776 switch ((id >> 16) & 0xffff) { 773 switch (dev_id) {
777 case PCI_DEVICE_ID_FIREFLY: 774 case PCI_DEVICE_ID_FIREFLY:
778 strcpy(str, "LP6000 1"); 775 model_str = "LP6000 1Gb PCI";
779 break; 776 break;
780 case PCI_DEVICE_ID_SUPERFLY: 777 case PCI_DEVICE_ID_SUPERFLY:
781 if (vp->rev.biuRev >= 1 && vp->rev.biuRev <= 3) 778 if (vp->rev.biuRev >= 1 && vp->rev.biuRev <= 3)
782 strcpy(str, "LP7000 1"); 779 model_str = "LP7000 1Gb PCI";
783 else 780 else
784 strcpy(str, "LP7000E 1"); 781 model_str = "LP7000E 1Gb PCI";
785 break; 782 break;
786 case PCI_DEVICE_ID_DRAGONFLY: 783 case PCI_DEVICE_ID_DRAGONFLY:
787 strcpy(str, "LP8000 1"); 784 model_str = "LP8000 1Gb PCI";
788 break; 785 break;
789 case PCI_DEVICE_ID_CENTAUR: 786 case PCI_DEVICE_ID_CENTAUR:
790 if (FC_JEDEC_ID(vp->rev.biuRev) == CENTAUR_2G_JEDEC_ID) 787 if (FC_JEDEC_ID(vp->rev.biuRev) == CENTAUR_2G_JEDEC_ID)
791 strcpy(str, "LP9002 2"); 788 model_str = "LP9002 2Gb PCI";
792 else 789 else
793 strcpy(str, "LP9000 1"); 790 model_str = "LP9000 1Gb PCI";
794 break; 791 break;
795 case PCI_DEVICE_ID_RFLY: 792 case PCI_DEVICE_ID_RFLY:
796 strcpy(str, "LP952 2"); 793 model_str = "LP952 2Gb PCI";
797 break; 794 break;
798 case PCI_DEVICE_ID_PEGASUS: 795 case PCI_DEVICE_ID_PEGASUS:
799 strcpy(str, "LP9802 2"); 796 model_str = "LP9802 2Gb PCI-X";
800 break; 797 break;
801 case PCI_DEVICE_ID_THOR: 798 case PCI_DEVICE_ID_THOR:
802 if (hdrtype == 0x80) 799 if (hdrtype == 0x80)
803 strcpy(str, "LP10000DC 2"); 800 model_str = "LP10000DC 2Gb 2-port PCI-X";
804 else 801 else
805 strcpy(str, "LP10000 2"); 802 model_str = "LP10000 2Gb PCI-X";
806 break; 803 break;
807 case PCI_DEVICE_ID_VIPER: 804 case PCI_DEVICE_ID_VIPER:
808 strcpy(str, "LPX1000 10"); 805 model_str = "LPX1000 10Gb PCI-X";
809 break; 806 break;
810 case PCI_DEVICE_ID_PFLY: 807 case PCI_DEVICE_ID_PFLY:
811 strcpy(str, "LP982 2"); 808 model_str = "LP982 2Gb PCI-X";
812 break; 809 break;
813 case PCI_DEVICE_ID_TFLY: 810 case PCI_DEVICE_ID_TFLY:
814 if (hdrtype == 0x80) 811 if (hdrtype == 0x80)
815 strcpy(str, "LP1050DC 2"); 812 model_str = "LP1050DC 2Gb 2-port PCI-X";
816 else 813 else
817 strcpy(str, "LP1050 2"); 814 model_str = "LP1050 2Gb PCI-X";
818 break; 815 break;
819 case PCI_DEVICE_ID_HELIOS: 816 case PCI_DEVICE_ID_HELIOS:
820 if (hdrtype == 0x80) 817 if (hdrtype == 0x80)
821 strcpy(str, "LP11002 4"); 818 model_str = "LP11002 4Gb 2-port PCI-X2";
819 else
820 model_str = "LP11000 4Gb PCI-X2";
821 break;
822 case PCI_DEVICE_ID_HELIOS_SCSP:
823 model_str = "LP11000-SP 4Gb PCI-X2";
824 break;
825 case PCI_DEVICE_ID_HELIOS_DCSP:
826 model_str = "LP11002-SP 4Gb 2-port PCI-X2";
827 break;
828 case PCI_DEVICE_ID_NEPTUNE:
829 if (hdrtype == 0x80)
830 model_str = "LPe1002 4Gb 2-port";
822 else 831 else
823 strcpy(str, "LP11000 4"); 832 model_str = "LPe1000 4Gb PCIe";
833 break;
834 case PCI_DEVICE_ID_NEPTUNE_SCSP:
835 model_str = "LPe1000-SP 4Gb PCIe";
836 break;
837 case PCI_DEVICE_ID_NEPTUNE_DCSP:
838 model_str = "LPe1002-SP 4Gb 2-port PCIe";
824 break; 839 break;
825 case PCI_DEVICE_ID_BMID: 840 case PCI_DEVICE_ID_BMID:
826 strcpy(str, "LP1150 4"); 841 model_str = "LP1150 4Gb PCI-X2";
827 break; 842 break;
828 case PCI_DEVICE_ID_BSMB: 843 case PCI_DEVICE_ID_BSMB:
829 strcpy(str, "LP111 4"); 844 model_str = "LP111 4Gb PCI-X2";
830 break; 845 break;
831 case PCI_DEVICE_ID_ZEPHYR: 846 case PCI_DEVICE_ID_ZEPHYR:
832 if (hdrtype == 0x80) 847 if (hdrtype == 0x80)
833 strcpy(str, "LPe11002 4"); 848 model_str = "LPe11002 4Gb 2-port PCIe";
834 else 849 else
835 strcpy(str, "LPe11000 4"); 850 model_str = "LPe11000 4Gb PCIe";
851 break;
852 case PCI_DEVICE_ID_ZEPHYR_SCSP:
853 model_str = "LPe11000-SP 4Gb PCIe";
854 break;
855 case PCI_DEVICE_ID_ZEPHYR_DCSP:
856 model_str = "LPe11002-SP 4Gb 2-port PCIe";
836 break; 857 break;
837 case PCI_DEVICE_ID_ZMID: 858 case PCI_DEVICE_ID_ZMID:
838 strcpy(str, "LPe1150 4"); 859 model_str = "LPe1150 4Gb PCIe";
839 break; 860 break;
840 case PCI_DEVICE_ID_ZSMB: 861 case PCI_DEVICE_ID_ZSMB:
841 strcpy(str, "LPe111 4"); 862 model_str = "LPe111 4Gb PCIe";
842 break; 863 break;
843 case PCI_DEVICE_ID_LP101: 864 case PCI_DEVICE_ID_LP101:
844 strcpy(str, "LP101 2"); 865 model_str = "LP101 2Gb PCI-X";
845 break; 866 break;
846 case PCI_DEVICE_ID_LP10000S: 867 case PCI_DEVICE_ID_LP10000S:
847 strcpy(str, "LP10000-S 2"); 868 model_str = "LP10000-S 2Gb PCI";
869 break;
870 case PCI_DEVICE_ID_LP11000S:
871 case PCI_DEVICE_ID_LPE11000S:
872 switch (dev_subid) {
873 case PCI_SUBSYSTEM_ID_LP11000S:
874 model_str = "LP11002-S 4Gb PCI-X2";
875 break;
876 case PCI_SUBSYSTEM_ID_LP11002S:
877 model_str = "LP11000-S 4Gb 2-port PCI-X2";
878 break;
879 case PCI_SUBSYSTEM_ID_LPE11000S:
880 model_str = "LPe11002-S 4Gb PCIe";
881 break;
882 case PCI_SUBSYSTEM_ID_LPE11002S:
883 model_str = "LPe11002-S 4Gb 2-port PCIe";
884 break;
885 case PCI_SUBSYSTEM_ID_LPE11010S:
886 model_str = "LPe11010-S 4Gb 10-port PCIe";
887 break;
888 default:
889 break;
890 }
848 break; 891 break;
849 default: 892 default:
850 memset(str, 0, 16);
851 break; 893 break;
852 } 894 }
853 if (mdp) 895 if (mdp)
854 sscanf(str, "%s", mdp); 896 sscanf(model_str, "%s", mdp);
855 if (descp) 897 if (descp)
856 sprintf(descp, "Emulex LightPulse %s Gigabit PCI Fibre " 898 sprintf(descp, "Emulex %s Fibre Channel Adapter", model_str);
857 "Channel Adapter", str);
858} 899}
859 900
860/**************************************************/ 901/**************************************************/
@@ -1196,6 +1237,7 @@ lpfc_stop_timer(struct lpfc_hba * phba)
1196 } 1237 }
1197 } 1238 }
1198 1239
1240 del_timer_sync(&phba->fcp_poll_timer);
1199 del_timer_sync(&phba->fc_estabtmo); 1241 del_timer_sync(&phba->fc_estabtmo);
1200 del_timer_sync(&phba->fc_disctmo); 1242 del_timer_sync(&phba->fc_disctmo);
1201 del_timer_sync(&phba->fc_fdmitmo); 1243 del_timer_sync(&phba->fc_fdmitmo);
@@ -1351,7 +1393,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
1351 goto out_put_host; 1393 goto out_put_host;
1352 1394
1353 host->unique_id = phba->brd_no; 1395 host->unique_id = phba->brd_no;
1354 1396 init_MUTEX(&phba->hba_can_block);
1355 INIT_LIST_HEAD(&phba->ctrspbuflist); 1397 INIT_LIST_HEAD(&phba->ctrspbuflist);
1356 INIT_LIST_HEAD(&phba->rnidrspbuflist); 1398 INIT_LIST_HEAD(&phba->rnidrspbuflist);
1357 INIT_LIST_HEAD(&phba->freebufList); 1399 INIT_LIST_HEAD(&phba->freebufList);
@@ -1375,6 +1417,10 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
1375 psli->mbox_tmo.function = lpfc_mbox_timeout; 1417 psli->mbox_tmo.function = lpfc_mbox_timeout;
1376 psli->mbox_tmo.data = (unsigned long)phba; 1418 psli->mbox_tmo.data = (unsigned long)phba;
1377 1419
1420 init_timer(&phba->fcp_poll_timer);
1421 phba->fcp_poll_timer.function = lpfc_poll_timeout;
1422 phba->fcp_poll_timer.data = (unsigned long)phba;
1423
1378 /* 1424 /*
1379 * Get all the module params for configuring this host and then 1425 * Get all the module params for configuring this host and then
1380 * establish the host parameters. 1426 * establish the host parameters.
@@ -1489,6 +1535,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
1489 host->max_cmd_len = 16; 1535 host->max_cmd_len = 16;
1490 1536
1491 /* Initialize the list of scsi buffers used by driver for scsi IO. */ 1537 /* Initialize the list of scsi buffers used by driver for scsi IO. */
1538 spin_lock_init(&phba->scsi_buf_list_lock);
1492 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list); 1539 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list);
1493 1540
1494 host->transportt = lpfc_transport_template; 1541 host->transportt = lpfc_transport_template;
@@ -1520,6 +1567,12 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
1520 if (error) 1567 if (error)
1521 goto out_free_irq; 1568 goto out_free_irq;
1522 1569
1570 if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
1571 spin_lock_irq(phba->host->host_lock);
1572 lpfc_poll_start_timer(phba);
1573 spin_unlock_irq(phba->host->host_lock);
1574 }
1575
1523 /* 1576 /*
1524 * set fixed host attributes 1577 * set fixed host attributes
1525 * Must done after lpfc_sli_hba_setup() 1578 * Must done after lpfc_sli_hba_setup()
@@ -1679,14 +1732,28 @@ static struct pci_device_id lpfc_id_table[] = {
1679 PCI_ANY_ID, PCI_ANY_ID, }, 1732 PCI_ANY_ID, PCI_ANY_ID, },
1680 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PFLY, 1733 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PFLY,
1681 PCI_ANY_ID, PCI_ANY_ID, }, 1734 PCI_ANY_ID, PCI_ANY_ID, },
1735 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE,
1736 PCI_ANY_ID, PCI_ANY_ID, },
1737 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_SCSP,
1738 PCI_ANY_ID, PCI_ANY_ID, },
1739 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_DCSP,
1740 PCI_ANY_ID, PCI_ANY_ID, },
1682 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS, 1741 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS,
1683 PCI_ANY_ID, PCI_ANY_ID, }, 1742 PCI_ANY_ID, PCI_ANY_ID, },
1743 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_SCSP,
1744 PCI_ANY_ID, PCI_ANY_ID, },
1745 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP,
1746 PCI_ANY_ID, PCI_ANY_ID, },
1684 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID, 1747 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID,
1685 PCI_ANY_ID, PCI_ANY_ID, }, 1748 PCI_ANY_ID, PCI_ANY_ID, },
1686 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB, 1749 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB,
1687 PCI_ANY_ID, PCI_ANY_ID, }, 1750 PCI_ANY_ID, PCI_ANY_ID, },
1688 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR, 1751 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR,
1689 PCI_ANY_ID, PCI_ANY_ID, }, 1752 PCI_ANY_ID, PCI_ANY_ID, },
1753 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP,
1754 PCI_ANY_ID, PCI_ANY_ID, },
1755 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_DCSP,
1756 PCI_ANY_ID, PCI_ANY_ID, },
1690 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZMID, 1757 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZMID,
1691 PCI_ANY_ID, PCI_ANY_ID, }, 1758 PCI_ANY_ID, PCI_ANY_ID, },
1692 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB, 1759 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB,
@@ -1697,6 +1764,10 @@ static struct pci_device_id lpfc_id_table[] = {
1697 PCI_ANY_ID, PCI_ANY_ID, }, 1764 PCI_ANY_ID, PCI_ANY_ID, },
1698 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP10000S, 1765 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP10000S,
1699 PCI_ANY_ID, PCI_ANY_ID, }, 1766 PCI_ANY_ID, PCI_ANY_ID, },
1767 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP11000S,
1768 PCI_ANY_ID, PCI_ANY_ID, },
1769 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S,
1770 PCI_ANY_ID, PCI_ANY_ID, },
1700 { 0 } 1771 { 0 }
1701}; 1772};
1702 1773
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index 507a6af56f42..fbead786031f 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -55,55 +55,76 @@ lpfc_check_adisc(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp,
55 return (1); 55 return (1);
56} 56}
57 57
58
59int 58int
60lpfc_check_sparm(struct lpfc_hba * phba, 59lpfc_check_sparm(struct lpfc_hba * phba,
61 struct lpfc_nodelist * ndlp, struct serv_parm * sp, 60 struct lpfc_nodelist * ndlp, struct serv_parm * sp,
62 uint32_t class) 61 uint32_t class)
63{ 62{
64 volatile struct serv_parm *hsp = &phba->fc_sparam; 63 volatile struct serv_parm *hsp = &phba->fc_sparam;
65 /* First check for supported version */ 64 uint16_t hsp_value, ssp_value = 0;
66 65
67 /* Next check for class validity */ 66 /*
67 * The receive data field size and buffer-to-buffer receive data field
68 * size entries are 16 bits but are represented as two 8-bit fields in
69 * the driver data structure to account for rsvd bits and other control
70 * bits. Reconstruct and compare the fields as a 16-bit values before
71 * correcting the byte values.
72 */
68 if (sp->cls1.classValid) { 73 if (sp->cls1.classValid) {
69 74 hsp_value = (hsp->cls1.rcvDataSizeMsb << 8) |
70 if (sp->cls1.rcvDataSizeMsb > hsp->cls1.rcvDataSizeMsb) 75 hsp->cls1.rcvDataSizeLsb;
71 sp->cls1.rcvDataSizeMsb = hsp->cls1.rcvDataSizeMsb; 76 ssp_value = (sp->cls1.rcvDataSizeMsb << 8) |
72 if (sp->cls1.rcvDataSizeLsb > hsp->cls1.rcvDataSizeLsb) 77 sp->cls1.rcvDataSizeLsb;
78 if (ssp_value > hsp_value) {
73 sp->cls1.rcvDataSizeLsb = hsp->cls1.rcvDataSizeLsb; 79 sp->cls1.rcvDataSizeLsb = hsp->cls1.rcvDataSizeLsb;
80 sp->cls1.rcvDataSizeMsb = hsp->cls1.rcvDataSizeMsb;
81 }
74 } else if (class == CLASS1) { 82 } else if (class == CLASS1) {
75 return (0); 83 return 0;
76 } 84 }
77 85
78 if (sp->cls2.classValid) { 86 if (sp->cls2.classValid) {
79 87 hsp_value = (hsp->cls2.rcvDataSizeMsb << 8) |
80 if (sp->cls2.rcvDataSizeMsb > hsp->cls2.rcvDataSizeMsb) 88 hsp->cls2.rcvDataSizeLsb;
81 sp->cls2.rcvDataSizeMsb = hsp->cls2.rcvDataSizeMsb; 89 ssp_value = (sp->cls2.rcvDataSizeMsb << 8) |
82 if (sp->cls2.rcvDataSizeLsb > hsp->cls2.rcvDataSizeLsb) 90 sp->cls2.rcvDataSizeLsb;
91 if (ssp_value > hsp_value) {
83 sp->cls2.rcvDataSizeLsb = hsp->cls2.rcvDataSizeLsb; 92 sp->cls2.rcvDataSizeLsb = hsp->cls2.rcvDataSizeLsb;
93 sp->cls2.rcvDataSizeMsb = hsp->cls2.rcvDataSizeMsb;
94 }
84 } else if (class == CLASS2) { 95 } else if (class == CLASS2) {
85 return (0); 96 return 0;
86 } 97 }
87 98
88 if (sp->cls3.classValid) { 99 if (sp->cls3.classValid) {
89 100 hsp_value = (hsp->cls3.rcvDataSizeMsb << 8) |
90 if (sp->cls3.rcvDataSizeMsb > hsp->cls3.rcvDataSizeMsb) 101 hsp->cls3.rcvDataSizeLsb;
91 sp->cls3.rcvDataSizeMsb = hsp->cls3.rcvDataSizeMsb; 102 ssp_value = (sp->cls3.rcvDataSizeMsb << 8) |
92 if (sp->cls3.rcvDataSizeLsb > hsp->cls3.rcvDataSizeLsb) 103 sp->cls3.rcvDataSizeLsb;
104 if (ssp_value > hsp_value) {
93 sp->cls3.rcvDataSizeLsb = hsp->cls3.rcvDataSizeLsb; 105 sp->cls3.rcvDataSizeLsb = hsp->cls3.rcvDataSizeLsb;
106 sp->cls3.rcvDataSizeMsb = hsp->cls3.rcvDataSizeMsb;
107 }
94 } else if (class == CLASS3) { 108 } else if (class == CLASS3) {
95 return (0); 109 return 0;
96 } 110 }
97 111
98 if (sp->cmn.bbRcvSizeMsb > hsp->cmn.bbRcvSizeMsb) 112 /*
99 sp->cmn.bbRcvSizeMsb = hsp->cmn.bbRcvSizeMsb; 113 * Preserve the upper four bits of the MSB from the PLOGI response.
100 if (sp->cmn.bbRcvSizeLsb > hsp->cmn.bbRcvSizeLsb) 114 * These bits contain the Buffer-to-Buffer State Change Number
115 * from the target and need to be passed to the FW.
116 */
117 hsp_value = (hsp->cmn.bbRcvSizeMsb << 8) | hsp->cmn.bbRcvSizeLsb;
118 ssp_value = (sp->cmn.bbRcvSizeMsb << 8) | sp->cmn.bbRcvSizeLsb;
119 if (ssp_value > hsp_value) {
101 sp->cmn.bbRcvSizeLsb = hsp->cmn.bbRcvSizeLsb; 120 sp->cmn.bbRcvSizeLsb = hsp->cmn.bbRcvSizeLsb;
121 sp->cmn.bbRcvSizeMsb = (sp->cmn.bbRcvSizeMsb & 0xF0) |
122 (hsp->cmn.bbRcvSizeMsb & 0x0F);
123 }
102 124
103 /* If check is good, copy wwpn wwnn into ndlp */
104 memcpy(&ndlp->nlp_nodename, &sp->nodeName, sizeof (struct lpfc_name)); 125 memcpy(&ndlp->nlp_nodename, &sp->nodeName, sizeof (struct lpfc_name));
105 memcpy(&ndlp->nlp_portname, &sp->portName, sizeof (struct lpfc_name)); 126 memcpy(&ndlp->nlp_portname, &sp->portName, sizeof (struct lpfc_name));
106 return (1); 127 return 1;
107} 128}
108 129
109static void * 130static void *
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index c63275e66e2e..dafabeefc5b3 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -41,6 +41,20 @@
41#define LPFC_ABORT_WAIT 2 41#define LPFC_ABORT_WAIT 2
42 42
43 43
44static inline void
45lpfc_block_requests(struct lpfc_hba * phba)
46{
47 down(&phba->hba_can_block);
48 scsi_block_requests(phba->host);
49}
50
51static inline void
52lpfc_unblock_requests(struct lpfc_hba * phba)
53{
54 scsi_unblock_requests(phba->host);
55 up(&phba->hba_can_block);
56}
57
44/* 58/*
45 * This routine allocates a scsi buffer, which contains all the necessary 59 * This routine allocates a scsi buffer, which contains all the necessary
46 * information needed to initiate a SCSI I/O. The non-DMAable buffer region 60 * information needed to initiate a SCSI I/O. The non-DMAable buffer region
@@ -136,19 +150,23 @@ lpfc_new_scsi_buf(struct lpfc_hba * phba)
136 return psb; 150 return psb;
137} 151}
138 152
139struct lpfc_scsi_buf* 153static struct lpfc_scsi_buf*
140lpfc_sli_get_scsi_buf(struct lpfc_hba * phba) 154lpfc_get_scsi_buf(struct lpfc_hba * phba)
141{ 155{
142 struct lpfc_scsi_buf * lpfc_cmd = NULL; 156 struct lpfc_scsi_buf * lpfc_cmd = NULL;
143 struct list_head *scsi_buf_list = &phba->lpfc_scsi_buf_list; 157 struct list_head *scsi_buf_list = &phba->lpfc_scsi_buf_list;
158 unsigned long iflag = 0;
144 159
160 spin_lock_irqsave(&phba->scsi_buf_list_lock, iflag);
145 list_remove_head(scsi_buf_list, lpfc_cmd, struct lpfc_scsi_buf, list); 161 list_remove_head(scsi_buf_list, lpfc_cmd, struct lpfc_scsi_buf, list);
162 spin_unlock_irqrestore(&phba->scsi_buf_list_lock, iflag);
146 return lpfc_cmd; 163 return lpfc_cmd;
147} 164}
148 165
149static void 166static void
150lpfc_release_scsi_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * psb) 167lpfc_release_scsi_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * psb)
151{ 168{
169 unsigned long iflag = 0;
152 /* 170 /*
153 * There are only two special cases to consider. (1) the scsi command 171 * There are only two special cases to consider. (1) the scsi command
154 * requested scatter-gather usage or (2) the scsi command allocated 172 * requested scatter-gather usage or (2) the scsi command allocated
@@ -166,8 +184,10 @@ lpfc_release_scsi_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * psb)
166 } 184 }
167 } 185 }
168 186
187 spin_lock_irqsave(&phba->scsi_buf_list_lock, iflag);
169 psb->pCmd = NULL; 188 psb->pCmd = NULL;
170 list_add_tail(&psb->list, &phba->lpfc_scsi_buf_list); 189 list_add_tail(&psb->list, &phba->lpfc_scsi_buf_list);
190 spin_unlock_irqrestore(&phba->scsi_buf_list_lock, iflag);
171} 191}
172 192
173static int 193static int
@@ -389,7 +409,9 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
389 struct lpfc_rport_data *rdata = lpfc_cmd->rdata; 409 struct lpfc_rport_data *rdata = lpfc_cmd->rdata;
390 struct lpfc_nodelist *pnode = rdata->pnode; 410 struct lpfc_nodelist *pnode = rdata->pnode;
391 struct scsi_cmnd *cmd = lpfc_cmd->pCmd; 411 struct scsi_cmnd *cmd = lpfc_cmd->pCmd;
392 unsigned long iflag; 412 int result;
413 struct scsi_device *sdev, *tmp_sdev;
414 int depth = 0;
393 415
394 lpfc_cmd->result = pIocbOut->iocb.un.ulpWord[4]; 416 lpfc_cmd->result = pIocbOut->iocb.un.ulpWord[4];
395 lpfc_cmd->status = pIocbOut->iocb.ulpStatus; 417 lpfc_cmd->status = pIocbOut->iocb.ulpStatus;
@@ -441,11 +463,64 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
441 *lp, *(lp + 3), cmd->retries, cmd->resid); 463 *lp, *(lp + 3), cmd->retries, cmd->resid);
442 } 464 }
443 465
466 result = cmd->result;
467 sdev = cmd->device;
444 cmd->scsi_done(cmd); 468 cmd->scsi_done(cmd);
445 469
446 spin_lock_irqsave(phba->host->host_lock, iflag); 470 if (!result &&
471 ((jiffies - pnode->last_ramp_up_time) >
472 LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
473 ((jiffies - pnode->last_q_full_time) >
474 LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
475 (phba->cfg_lun_queue_depth > sdev->queue_depth)) {
476 shost_for_each_device(tmp_sdev, sdev->host) {
477 if (phba->cfg_lun_queue_depth > tmp_sdev->queue_depth) {
478 if (tmp_sdev->id != sdev->id)
479 continue;
480 if (tmp_sdev->ordered_tags)
481 scsi_adjust_queue_depth(tmp_sdev,
482 MSG_ORDERED_TAG,
483 tmp_sdev->queue_depth+1);
484 else
485 scsi_adjust_queue_depth(tmp_sdev,
486 MSG_SIMPLE_TAG,
487 tmp_sdev->queue_depth+1);
488
489 pnode->last_ramp_up_time = jiffies;
490 }
491 }
492 }
493
494 /*
495 * Check for queue full. If the lun is reporting queue full, then
496 * back off the lun queue depth to prevent target overloads.
497 */
498 if (result == SAM_STAT_TASK_SET_FULL) {
499 pnode->last_q_full_time = jiffies;
500
501 shost_for_each_device(tmp_sdev, sdev->host) {
502 if (tmp_sdev->id != sdev->id)
503 continue;
504 depth = scsi_track_queue_full(tmp_sdev,
505 tmp_sdev->queue_depth - 1);
506 }
507 /*
508 * The queue depth cannot be lowered any more.
509 * Modify the returned error code to store
510 * the final depth value set by
511 * scsi_track_queue_full.
512 */
513 if (depth == -1)
514 depth = sdev->host->cmd_per_lun;
515
516 if (depth) {
517 lpfc_printf_log(phba, KERN_WARNING, LOG_FCP,
518 "%d:0711 detected queue full - lun queue depth "
519 " adjusted to %d.\n", phba->brd_no, depth);
520 }
521 }
522
447 lpfc_release_scsi_buf(phba, lpfc_cmd); 523 lpfc_release_scsi_buf(phba, lpfc_cmd);
448 spin_unlock_irqrestore(phba->host->host_lock, iflag);
449} 524}
450 525
451static void 526static void
@@ -693,6 +768,37 @@ lpfc_info(struct Scsi_Host *host)
693 return lpfcinfobuf; 768 return lpfcinfobuf;
694} 769}
695 770
771static __inline__ void lpfc_poll_rearm_timer(struct lpfc_hba * phba)
772{
773 unsigned long poll_tmo_expires =
774 (jiffies + msecs_to_jiffies(phba->cfg_poll_tmo));
775
776 if (phba->sli.ring[LPFC_FCP_RING].txcmplq_cnt)
777 mod_timer(&phba->fcp_poll_timer,
778 poll_tmo_expires);
779}
780
781void lpfc_poll_start_timer(struct lpfc_hba * phba)
782{
783 lpfc_poll_rearm_timer(phba);
784}
785
786void lpfc_poll_timeout(unsigned long ptr)
787{
788 struct lpfc_hba *phba = (struct lpfc_hba *)ptr;
789 unsigned long iflag;
790
791 spin_lock_irqsave(phba->host->host_lock, iflag);
792
793 if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
794 lpfc_sli_poll_fcp_ring (phba);
795 if (phba->cfg_poll & DISABLE_FCP_RING_INT)
796 lpfc_poll_rearm_timer(phba);
797 }
798
799 spin_unlock_irqrestore(phba->host->host_lock, iflag);
800}
801
696static int 802static int
697lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *)) 803lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
698{ 804{
@@ -719,10 +825,11 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
719 cmnd->result = ScsiResult(DID_BUS_BUSY, 0); 825 cmnd->result = ScsiResult(DID_BUS_BUSY, 0);
720 goto out_fail_command; 826 goto out_fail_command;
721 } 827 }
722 lpfc_cmd = lpfc_sli_get_scsi_buf (phba); 828 lpfc_cmd = lpfc_get_scsi_buf (phba);
723 if (lpfc_cmd == NULL) { 829 if (lpfc_cmd == NULL) {
724 printk(KERN_WARNING "%s: No buffer available - list empty, " 830 lpfc_printf_log(phba, KERN_INFO, LOG_FCP,
725 "total count %d\n", __FUNCTION__, phba->total_scsi_bufs); 831 "%d:0707 driver's buffer pool is empty, "
832 "IO busied\n", phba->brd_no);
726 goto out_host_busy; 833 goto out_host_busy;
727 } 834 }
728 835
@@ -746,11 +853,17 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
746 &lpfc_cmd->cur_iocbq, SLI_IOCB_RET_IOCB); 853 &lpfc_cmd->cur_iocbq, SLI_IOCB_RET_IOCB);
747 if (err) 854 if (err)
748 goto out_host_busy_free_buf; 855 goto out_host_busy_free_buf;
856
857 if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
858 lpfc_sli_poll_fcp_ring(phba);
859 if (phba->cfg_poll & DISABLE_FCP_RING_INT)
860 lpfc_poll_rearm_timer(phba);
861 }
862
749 return 0; 863 return 0;
750 864
751 out_host_busy_free_buf: 865 out_host_busy_free_buf:
752 lpfc_release_scsi_buf(phba, lpfc_cmd); 866 lpfc_release_scsi_buf(phba, lpfc_cmd);
753 cmnd->host_scribble = NULL;
754 out_host_busy: 867 out_host_busy:
755 return SCSI_MLQUEUE_HOST_BUSY; 868 return SCSI_MLQUEUE_HOST_BUSY;
756 869
@@ -759,11 +872,12 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
759 return 0; 872 return 0;
760} 873}
761 874
875
762static int 876static int
763__lpfc_abort_handler(struct scsi_cmnd *cmnd) 877lpfc_abort_handler(struct scsi_cmnd *cmnd)
764{ 878{
765 struct lpfc_hba *phba = 879 struct Scsi_Host *shost = cmnd->device->host;
766 (struct lpfc_hba *)cmnd->device->host->hostdata[0]; 880 struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
767 struct lpfc_sli_ring *pring = &phba->sli.ring[phba->sli.fcp_ring]; 881 struct lpfc_sli_ring *pring = &phba->sli.ring[phba->sli.fcp_ring];
768 struct lpfc_iocbq *iocb; 882 struct lpfc_iocbq *iocb;
769 struct lpfc_iocbq *abtsiocb; 883 struct lpfc_iocbq *abtsiocb;
@@ -772,6 +886,8 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd)
772 unsigned int loop_count = 0; 886 unsigned int loop_count = 0;
773 int ret = SUCCESS; 887 int ret = SUCCESS;
774 888
889 lpfc_block_requests(phba);
890 spin_lock_irq(shost->host_lock);
775 891
776 lpfc_cmd = (struct lpfc_scsi_buf *)cmnd->host_scribble; 892 lpfc_cmd = (struct lpfc_scsi_buf *)cmnd->host_scribble;
777 BUG_ON(!lpfc_cmd); 893 BUG_ON(!lpfc_cmd);
@@ -821,9 +937,15 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd)
821 goto out; 937 goto out;
822 } 938 }
823 939
940 if (phba->cfg_poll & DISABLE_FCP_RING_INT)
941 lpfc_sli_poll_fcp_ring (phba);
942
824 /* Wait for abort to complete */ 943 /* Wait for abort to complete */
825 while (lpfc_cmd->pCmd == cmnd) 944 while (lpfc_cmd->pCmd == cmnd)
826 { 945 {
946 if (phba->cfg_poll & DISABLE_FCP_RING_INT)
947 lpfc_sli_poll_fcp_ring (phba);
948
827 spin_unlock_irq(phba->host->host_lock); 949 spin_unlock_irq(phba->host->host_lock);
828 schedule_timeout_uninterruptible(LPFC_ABORT_WAIT*HZ); 950 schedule_timeout_uninterruptible(LPFC_ABORT_WAIT*HZ);
829 spin_lock_irq(phba->host->host_lock); 951 spin_lock_irq(phba->host->host_lock);
@@ -844,26 +966,19 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd)
844 966
845 out: 967 out:
846 lpfc_printf_log(phba, KERN_WARNING, LOG_FCP, 968 lpfc_printf_log(phba, KERN_WARNING, LOG_FCP,
847 "%d:0749 SCSI layer issued abort device: ret %#x, " 969 "%d:0749 SCSI Layer I/O Abort Request "
848 "ID %d, LUN %d, snum %#lx\n", 970 "Status x%x ID %d LUN %d snum %#lx\n",
849 phba->brd_no, ret, cmnd->device->id, 971 phba->brd_no, ret, cmnd->device->id,
850 cmnd->device->lun, cmnd->serial_number); 972 cmnd->device->lun, cmnd->serial_number);
851 973
852 return ret; 974 spin_unlock_irq(shost->host_lock);
853} 975 lpfc_unblock_requests(phba);
854 976
855static int 977 return ret;
856lpfc_abort_handler(struct scsi_cmnd *cmnd)
857{
858 int rc;
859 spin_lock_irq(cmnd->device->host->host_lock);
860 rc = __lpfc_abort_handler(cmnd);
861 spin_unlock_irq(cmnd->device->host->host_lock);
862 return rc;
863} 978}
864 979
865static int 980static int
866__lpfc_reset_lun_handler(struct scsi_cmnd *cmnd) 981lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
867{ 982{
868 struct Scsi_Host *shost = cmnd->device->host; 983 struct Scsi_Host *shost = cmnd->device->host;
869 struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0]; 984 struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
@@ -871,9 +986,12 @@ __lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
871 struct lpfc_iocbq *iocbq, *iocbqrsp; 986 struct lpfc_iocbq *iocbq, *iocbqrsp;
872 struct lpfc_rport_data *rdata = cmnd->device->hostdata; 987 struct lpfc_rport_data *rdata = cmnd->device->hostdata;
873 struct lpfc_nodelist *pnode = rdata->pnode; 988 struct lpfc_nodelist *pnode = rdata->pnode;
989 uint32_t cmd_result = 0, cmd_status = 0;
874 int ret = FAILED; 990 int ret = FAILED;
875 int cnt, loopcnt; 991 int cnt, loopcnt;
876 992
993 lpfc_block_requests(phba);
994 spin_lock_irq(shost->host_lock);
877 /* 995 /*
878 * If target is not in a MAPPED state, delay the reset until 996 * If target is not in a MAPPED state, delay the reset until
879 * target is rediscovered or nodev timeout expires. 997 * target is rediscovered or nodev timeout expires.
@@ -891,7 +1009,7 @@ __lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
891 break; 1009 break;
892 } 1010 }
893 1011
894 lpfc_cmd = lpfc_sli_get_scsi_buf (phba); 1012 lpfc_cmd = lpfc_get_scsi_buf (phba);
895 if (lpfc_cmd == NULL) 1013 if (lpfc_cmd == NULL)
896 goto out; 1014 goto out;
897 1015
@@ -916,26 +1034,28 @@ __lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
916 if (ret == IOCB_SUCCESS) 1034 if (ret == IOCB_SUCCESS)
917 ret = SUCCESS; 1035 ret = SUCCESS;
918 1036
919 lpfc_cmd->result = iocbqrsp->iocb.un.ulpWord[4]; 1037
920 lpfc_cmd->status = iocbqrsp->iocb.ulpStatus; 1038 cmd_result = iocbqrsp->iocb.un.ulpWord[4];
921 if (lpfc_cmd->status == IOSTAT_LOCAL_REJECT) 1039 cmd_status = iocbqrsp->iocb.ulpStatus;
922 if (lpfc_cmd->result & IOERR_DRVR_MASK) 1040
923 lpfc_cmd->status = IOSTAT_DRIVER_REJECT; 1041 lpfc_sli_release_iocbq(phba, iocbqrsp);
1042 lpfc_release_scsi_buf(phba, lpfc_cmd);
924 1043
925 /* 1044 /*
926 * All outstanding txcmplq I/Os should have been aborted by the target. 1045 * All outstanding txcmplq I/Os should have been aborted by the device.
927 * Unfortunately, some targets do not abide by this forcing the driver 1046 * Unfortunately, some targets do not abide by this forcing the driver
928 * to double check. 1047 * to double check.
929 */ 1048 */
930 lpfc_sli_abort_iocb(phba, &phba->sli.ring[phba->sli.fcp_ring], 1049 cnt = lpfc_sli_sum_iocb(phba, &phba->sli.ring[phba->sli.fcp_ring],
931 cmnd->device->id, cmnd->device->lun, 0, 1050 cmnd->device->id, cmnd->device->lun,
932 LPFC_CTX_LUN); 1051 LPFC_CTX_LUN);
933 1052 if (cnt)
1053 lpfc_sli_abort_iocb(phba,
1054 &phba->sli.ring[phba->sli.fcp_ring],
1055 cmnd->device->id, cmnd->device->lun,
1056 0, LPFC_CTX_LUN);
934 loopcnt = 0; 1057 loopcnt = 0;
935 while((cnt = lpfc_sli_sum_iocb(phba, 1058 while(cnt) {
936 &phba->sli.ring[phba->sli.fcp_ring],
937 cmnd->device->id, cmnd->device->lun,
938 LPFC_CTX_LUN))) {
939 spin_unlock_irq(phba->host->host_lock); 1059 spin_unlock_irq(phba->host->host_lock);
940 schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ); 1060 schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ);
941 spin_lock_irq(phba->host->host_lock); 1061 spin_lock_irq(phba->host->host_lock);
@@ -943,6 +1063,11 @@ __lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
943 if (++loopcnt 1063 if (++loopcnt
944 > (2 * phba->cfg_nodev_tmo)/LPFC_RESET_WAIT) 1064 > (2 * phba->cfg_nodev_tmo)/LPFC_RESET_WAIT)
945 break; 1065 break;
1066
1067 cnt = lpfc_sli_sum_iocb(phba,
1068 &phba->sli.ring[phba->sli.fcp_ring],
1069 cmnd->device->id, cmnd->device->lun,
1070 LPFC_CTX_LUN);
946 } 1071 }
947 1072
948 if (cnt) { 1073 if (cnt) {
@@ -952,35 +1077,21 @@ __lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
952 ret = FAILED; 1077 ret = FAILED;
953 } 1078 }
954 1079
955 lpfc_sli_release_iocbq(phba, iocbqrsp);
956
957out_free_scsi_buf: 1080out_free_scsi_buf:
958 lpfc_printf_log(phba, KERN_ERR, LOG_FCP, 1081 lpfc_printf_log(phba, KERN_ERR, LOG_FCP,
959 "%d:0713 SCSI layer issued LUN reset (%d, %d) " 1082 "%d:0713 SCSI layer issued LUN reset (%d, %d) "
960 "Data: x%x x%x x%x\n", 1083 "Data: x%x x%x x%x\n",
961 phba->brd_no, lpfc_cmd->pCmd->device->id, 1084 phba->brd_no, cmnd->device->id,cmnd->device->lun,
962 lpfc_cmd->pCmd->device->lun, ret, lpfc_cmd->status, 1085 ret, cmd_status, cmd_result);
963 lpfc_cmd->result); 1086
964 lpfc_release_scsi_buf(phba, lpfc_cmd);
965out: 1087out:
1088 spin_unlock_irq(shost->host_lock);
1089 lpfc_unblock_requests(phba);
966 return ret; 1090 return ret;
967} 1091}
968 1092
969static int 1093static int
970lpfc_reset_lun_handler(struct scsi_cmnd *cmnd) 1094lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
971{
972 int rc;
973 spin_lock_irq(cmnd->device->host->host_lock);
974 rc = __lpfc_reset_lun_handler(cmnd);
975 spin_unlock_irq(cmnd->device->host->host_lock);
976 return rc;
977}
978
979/*
980 * Note: midlayer calls this function with the host_lock held
981 */
982static int
983__lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
984{ 1095{
985 struct Scsi_Host *shost = cmnd->device->host; 1096 struct Scsi_Host *shost = cmnd->device->host;
986 struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0]; 1097 struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
@@ -991,7 +1102,10 @@ __lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
991 unsigned int midlayer_id = 0; 1102 unsigned int midlayer_id = 0;
992 struct lpfc_scsi_buf * lpfc_cmd; 1103 struct lpfc_scsi_buf * lpfc_cmd;
993 1104
994 lpfc_cmd = lpfc_sli_get_scsi_buf (phba); 1105 lpfc_block_requests(phba);
1106 spin_lock_irq(shost->host_lock);
1107
1108 lpfc_cmd = lpfc_get_scsi_buf(phba);
995 if (lpfc_cmd == NULL) 1109 if (lpfc_cmd == NULL)
996 goto out; 1110 goto out;
997 1111
@@ -1022,18 +1136,31 @@ __lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
1022 lpfc_cmd->pCmd->device->hostdata = ndlp->rport->dd_data; 1136 lpfc_cmd->pCmd->device->hostdata = ndlp->rport->dd_data;
1023 ret = lpfc_scsi_tgt_reset(lpfc_cmd, phba); 1137 ret = lpfc_scsi_tgt_reset(lpfc_cmd, phba);
1024 if (ret != SUCCESS) { 1138 if (ret != SUCCESS) {
1025 lpfc_printf_log(phba, KERN_INFO, LOG_FCP, 1139 lpfc_printf_log(phba, KERN_ERR, LOG_FCP,
1026 "%d:0713 Bus Reset on target %d failed\n", 1140 "%d:0713 Bus Reset on target %d failed\n",
1027 phba->brd_no, i); 1141 phba->brd_no, i);
1028 err_count++; 1142 err_count++;
1029 } 1143 }
1030 } 1144 }
1031 1145
1146 if (err_count == 0)
1147 ret = SUCCESS;
1148
1149 lpfc_release_scsi_buf(phba, lpfc_cmd);
1150
1151 /*
1152 * All outstanding txcmplq I/Os should have been aborted by
1153 * the targets. Unfortunately, some targets do not abide by
1154 * this forcing the driver to double check.
1155 */
1032 cmnd->device->id = midlayer_id; 1156 cmnd->device->id = midlayer_id;
1157 cnt = lpfc_sli_sum_iocb(phba, &phba->sli.ring[phba->sli.fcp_ring],
1158 0, 0, LPFC_CTX_HOST);
1159 if (cnt)
1160 lpfc_sli_abort_iocb(phba, &phba->sli.ring[phba->sli.fcp_ring],
1161 0, 0, 0, LPFC_CTX_HOST);
1033 loopcnt = 0; 1162 loopcnt = 0;
1034 while((cnt = lpfc_sli_sum_iocb(phba, 1163 while(cnt) {
1035 &phba->sli.ring[phba->sli.fcp_ring],
1036 0, 0, LPFC_CTX_HOST))) {
1037 spin_unlock_irq(phba->host->host_lock); 1164 spin_unlock_irq(phba->host->host_lock);
1038 schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ); 1165 schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ);
1039 spin_lock_irq(phba->host->host_lock); 1166 spin_lock_irq(phba->host->host_lock);
@@ -1041,45 +1168,31 @@ __lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
1041 if (++loopcnt 1168 if (++loopcnt
1042 > (2 * phba->cfg_nodev_tmo)/LPFC_RESET_WAIT) 1169 > (2 * phba->cfg_nodev_tmo)/LPFC_RESET_WAIT)
1043 break; 1170 break;
1171
1172 cnt = lpfc_sli_sum_iocb(phba,
1173 &phba->sli.ring[phba->sli.fcp_ring],
1174 0, 0, LPFC_CTX_HOST);
1044 } 1175 }
1045 1176
1046 if (cnt) { 1177 if (cnt) {
1047 /* flush all outstanding commands on the host */ 1178 lpfc_printf_log(phba, KERN_ERR, LOG_FCP,
1048 i = lpfc_sli_abort_iocb(phba,
1049 &phba->sli.ring[phba->sli.fcp_ring], 0, 0, 0,
1050 LPFC_CTX_HOST);
1051
1052 lpfc_printf_log(phba, KERN_INFO, LOG_FCP,
1053 "%d:0715 Bus Reset I/O flush failure: cnt x%x left x%x\n", 1179 "%d:0715 Bus Reset I/O flush failure: cnt x%x left x%x\n",
1054 phba->brd_no, cnt, i); 1180 phba->brd_no, cnt, i);
1055 }
1056
1057 if (cnt == 0)
1058 ret = SUCCESS;
1059 else
1060 ret = FAILED; 1181 ret = FAILED;
1182 }
1061 1183
1062 lpfc_release_scsi_buf(phba, lpfc_cmd);
1063 lpfc_printf_log(phba, 1184 lpfc_printf_log(phba,
1064 KERN_ERR, 1185 KERN_ERR,
1065 LOG_FCP, 1186 LOG_FCP,
1066 "%d:0714 SCSI layer issued Bus Reset Data: x%x\n", 1187 "%d:0714 SCSI layer issued Bus Reset Data: x%x\n",
1067 phba->brd_no, ret); 1188 phba->brd_no, ret);
1068out: 1189out:
1190 spin_unlock_irq(shost->host_lock);
1191 lpfc_unblock_requests(phba);
1069 return ret; 1192 return ret;
1070} 1193}
1071 1194
1072static int 1195static int
1073lpfc_reset_bus_handler(struct scsi_cmnd *cmnd)
1074{
1075 int rc;
1076 spin_lock_irq(cmnd->device->host->host_lock);
1077 rc = __lpfc_reset_bus_handler(cmnd);
1078 spin_unlock_irq(cmnd->device->host->host_lock);
1079 return rc;
1080}
1081
1082static int
1083lpfc_slave_alloc(struct scsi_device *sdev) 1196lpfc_slave_alloc(struct scsi_device *sdev)
1084{ 1197{
1085 struct lpfc_hba *phba = (struct lpfc_hba *)sdev->host->hostdata[0]; 1198 struct lpfc_hba *phba = (struct lpfc_hba *)sdev->host->hostdata[0];
@@ -1127,10 +1240,10 @@ lpfc_slave_alloc(struct scsi_device *sdev)
1127 break; 1240 break;
1128 } 1241 }
1129 1242
1130 spin_lock_irqsave(phba->host->host_lock, flags); 1243 spin_lock_irqsave(&phba->scsi_buf_list_lock, flags);
1131 phba->total_scsi_bufs++; 1244 phba->total_scsi_bufs++;
1132 list_add_tail(&scsi_buf->list, &phba->lpfc_scsi_buf_list); 1245 list_add_tail(&scsi_buf->list, &phba->lpfc_scsi_buf_list);
1133 spin_unlock_irqrestore(phba->host->host_lock, flags); 1246 spin_unlock_irqrestore(&phba->scsi_buf_list_lock, flags);
1134 } 1247 }
1135 return 0; 1248 return 0;
1136} 1249}
@@ -1154,6 +1267,12 @@ lpfc_slave_configure(struct scsi_device *sdev)
1154 */ 1267 */
1155 rport->dev_loss_tmo = phba->cfg_nodev_tmo + 5; 1268 rport->dev_loss_tmo = phba->cfg_nodev_tmo + 5;
1156 1269
1270 if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
1271 lpfc_sli_poll_fcp_ring(phba);
1272 if (phba->cfg_poll & DISABLE_FCP_RING_INT)
1273 lpfc_poll_rearm_timer(phba);
1274 }
1275
1157 return 0; 1276 return 0;
1158} 1277}
1159 1278
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index e2c08c5d83fb..7b785ade8b07 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -886,6 +886,182 @@ lpfc_sli_process_sol_iocb(struct lpfc_hba * phba, struct lpfc_sli_ring * pring,
886 return rc; 886 return rc;
887} 887}
888 888
889static void lpfc_sli_rsp_pointers_error(struct lpfc_hba * phba,
890 struct lpfc_sli_ring * pring)
891{
892 struct lpfc_pgp *pgp = &phba->slim2p->mbx.us.s2.port[pring->ringno];
893 /*
894 * Ring <ringno> handler: portRspPut <portRspPut> is bigger then
895 * rsp ring <portRspMax>
896 */
897 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
898 "%d:0312 Ring %d handler: portRspPut %d "
899 "is bigger then rsp ring %d\n",
900 phba->brd_no, pring->ringno,
901 le32_to_cpu(pgp->rspPutInx),
902 pring->numRiocb);
903
904 phba->hba_state = LPFC_HBA_ERROR;
905
906 /*
907 * All error attention handlers are posted to
908 * worker thread
909 */
910 phba->work_ha |= HA_ERATT;
911 phba->work_hs = HS_FFER3;
912 if (phba->work_wait)
913 wake_up(phba->work_wait);
914
915 return;
916}
917
918void lpfc_sli_poll_fcp_ring(struct lpfc_hba * phba)
919{
920 struct lpfc_sli * psli = &phba->sli;
921 struct lpfc_sli_ring * pring = &psli->ring[LPFC_FCP_RING];
922 IOCB_t *irsp = NULL;
923 IOCB_t *entry = NULL;
924 struct lpfc_iocbq *cmdiocbq = NULL;
925 struct lpfc_iocbq rspiocbq;
926 struct lpfc_pgp *pgp;
927 uint32_t status;
928 uint32_t portRspPut, portRspMax;
929 int type;
930 uint32_t rsp_cmpl = 0;
931 void __iomem *to_slim;
932 uint32_t ha_copy;
933
934 pring->stats.iocb_event++;
935
936 /* The driver assumes SLI-2 mode */
937 pgp = &phba->slim2p->mbx.us.s2.port[pring->ringno];
938
939 /*
940 * The next available response entry should never exceed the maximum
941 * entries. If it does, treat it as an adapter hardware error.
942 */
943 portRspMax = pring->numRiocb;
944 portRspPut = le32_to_cpu(pgp->rspPutInx);
945 if (unlikely(portRspPut >= portRspMax)) {
946 lpfc_sli_rsp_pointers_error(phba, pring);
947 return;
948 }
949
950 rmb();
951 while (pring->rspidx != portRspPut) {
952
953 entry = IOCB_ENTRY(pring->rspringaddr, pring->rspidx);
954
955 if (++pring->rspidx >= portRspMax)
956 pring->rspidx = 0;
957
958 lpfc_sli_pcimem_bcopy((uint32_t *) entry,
959 (uint32_t *) &rspiocbq.iocb,
960 sizeof (IOCB_t));
961 irsp = &rspiocbq.iocb;
962 type = lpfc_sli_iocb_cmd_type(irsp->ulpCommand & CMD_IOCB_MASK);
963 pring->stats.iocb_rsp++;
964 rsp_cmpl++;
965
966 if (unlikely(irsp->ulpStatus)) {
967 /* Rsp ring <ringno> error: IOCB */
968 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
969 "%d:0326 Rsp Ring %d error: IOCB Data: "
970 "x%x x%x x%x x%x x%x x%x x%x x%x\n",
971 phba->brd_no, pring->ringno,
972 irsp->un.ulpWord[0],
973 irsp->un.ulpWord[1],
974 irsp->un.ulpWord[2],
975 irsp->un.ulpWord[3],
976 irsp->un.ulpWord[4],
977 irsp->un.ulpWord[5],
978 *(((uint32_t *) irsp) + 6),
979 *(((uint32_t *) irsp) + 7));
980 }
981
982 switch (type) {
983 case LPFC_ABORT_IOCB:
984 case LPFC_SOL_IOCB:
985 /*
986 * Idle exchange closed via ABTS from port. No iocb
987 * resources need to be recovered.
988 */
989 if (unlikely(irsp->ulpCommand == CMD_XRI_ABORTED_CX)) {
990 printk(KERN_INFO "%s: IOCB cmd 0x%x processed."
991 " Skipping completion\n", __FUNCTION__,
992 irsp->ulpCommand);
993 break;
994 }
995
996 cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
997 &rspiocbq);
998 if ((cmdiocbq) && (cmdiocbq->iocb_cmpl)) {
999 (cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
1000 &rspiocbq);
1001 }
1002 break;
1003 default:
1004 if (irsp->ulpCommand == CMD_ADAPTER_MSG) {
1005 char adaptermsg[LPFC_MAX_ADPTMSG];
1006 memset(adaptermsg, 0, LPFC_MAX_ADPTMSG);
1007 memcpy(&adaptermsg[0], (uint8_t *) irsp,
1008 MAX_MSG_DATA);
1009 dev_warn(&((phba->pcidev)->dev), "lpfc%d: %s",
1010 phba->brd_no, adaptermsg);
1011 } else {
1012 /* Unknown IOCB command */
1013 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
1014 "%d:0321 Unknown IOCB command "
1015 "Data: x%x, x%x x%x x%x x%x\n",
1016 phba->brd_no, type,
1017 irsp->ulpCommand,
1018 irsp->ulpStatus,
1019 irsp->ulpIoTag,
1020 irsp->ulpContext);
1021 }
1022 break;
1023 }
1024
1025 /*
1026 * The response IOCB has been processed. Update the ring
1027 * pointer in SLIM. If the port response put pointer has not
1028 * been updated, sync the pgp->rspPutInx and fetch the new port
1029 * response put pointer.
1030 */
1031 to_slim = phba->MBslimaddr +
1032 (SLIMOFF + (pring->ringno * 2) + 1) * 4;
1033 writeb(pring->rspidx, to_slim);
1034
1035 if (pring->rspidx == portRspPut)
1036 portRspPut = le32_to_cpu(pgp->rspPutInx);
1037 }
1038
1039 ha_copy = readl(phba->HAregaddr);
1040 ha_copy >>= (LPFC_FCP_RING * 4);
1041
1042 if ((rsp_cmpl > 0) && (ha_copy & HA_R0RE_REQ)) {
1043 pring->stats.iocb_rsp_full++;
1044 status = ((CA_R0ATT | CA_R0RE_RSP) << (LPFC_FCP_RING * 4));
1045 writel(status, phba->CAregaddr);
1046 readl(phba->CAregaddr);
1047 }
1048 if ((ha_copy & HA_R0CE_RSP) &&
1049 (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
1050 pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
1051 pring->stats.iocb_cmd_empty++;
1052
1053 /* Force update of the local copy of cmdGetInx */
1054 pring->local_getidx = le32_to_cpu(pgp->cmdGetInx);
1055 lpfc_sli_resume_iocb(phba, pring);
1056
1057 if ((pring->lpfc_sli_cmd_available))
1058 (pring->lpfc_sli_cmd_available) (phba, pring);
1059
1060 }
1061
1062 return;
1063}
1064
889/* 1065/*
890 * This routine presumes LPFC_FCP_RING handling and doesn't bother 1066 * This routine presumes LPFC_FCP_RING handling and doesn't bother
891 * to check it explicitly. 1067 * to check it explicitly.
@@ -917,24 +1093,7 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
917 portRspMax = pring->numRiocb; 1093 portRspMax = pring->numRiocb;
918 portRspPut = le32_to_cpu(pgp->rspPutInx); 1094 portRspPut = le32_to_cpu(pgp->rspPutInx);
919 if (unlikely(portRspPut >= portRspMax)) { 1095 if (unlikely(portRspPut >= portRspMax)) {
920 /* 1096 lpfc_sli_rsp_pointers_error(phba, pring);
921 * Ring <ringno> handler: portRspPut <portRspPut> is bigger then
922 * rsp ring <portRspMax>
923 */
924 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
925 "%d:0312 Ring %d handler: portRspPut %d "
926 "is bigger then rsp ring %d\n",
927 phba->brd_no, pring->ringno, portRspPut,
928 portRspMax);
929
930 phba->hba_state = LPFC_HBA_ERROR;
931
932 /* All error attention handlers are posted to worker thread */
933 phba->work_ha |= HA_ERATT;
934 phba->work_hs = HS_FFER3;
935 if (phba->work_wait)
936 wake_up(phba->work_wait);
937
938 spin_unlock_irqrestore(phba->host->host_lock, iflag); 1097 spin_unlock_irqrestore(phba->host->host_lock, iflag);
939 return 1; 1098 return 1;
940 } 1099 }
@@ -947,6 +1106,10 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
947 * network byte order and pci byte orders are different. 1106 * network byte order and pci byte orders are different.
948 */ 1107 */
949 entry = IOCB_ENTRY(pring->rspringaddr, pring->rspidx); 1108 entry = IOCB_ENTRY(pring->rspringaddr, pring->rspidx);
1109
1110 if (++pring->rspidx >= portRspMax)
1111 pring->rspidx = 0;
1112
950 lpfc_sli_pcimem_bcopy((uint32_t *) entry, 1113 lpfc_sli_pcimem_bcopy((uint32_t *) entry,
951 (uint32_t *) &rspiocbq.iocb, 1114 (uint32_t *) &rspiocbq.iocb,
952 sizeof (IOCB_t)); 1115 sizeof (IOCB_t));
@@ -1020,9 +1183,6 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba * phba,
1020 * been updated, sync the pgp->rspPutInx and fetch the new port 1183 * been updated, sync the pgp->rspPutInx and fetch the new port
1021 * response put pointer. 1184 * response put pointer.
1022 */ 1185 */
1023 if (++pring->rspidx >= portRspMax)
1024 pring->rspidx = 0;
1025
1026 to_slim = phba->MBslimaddr + 1186 to_slim = phba->MBslimaddr +
1027 (SLIMOFF + (pring->ringno * 2) + 1) * 4; 1187 (SLIMOFF + (pring->ringno * 2) + 1) * 4;
1028 writel(pring->rspidx, to_slim); 1188 writel(pring->rspidx, to_slim);
@@ -2615,6 +2775,7 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba,
2615 DECLARE_WAIT_QUEUE_HEAD(done_q); 2775 DECLARE_WAIT_QUEUE_HEAD(done_q);
2616 long timeleft, timeout_req = 0; 2776 long timeleft, timeout_req = 0;
2617 int retval = IOCB_SUCCESS; 2777 int retval = IOCB_SUCCESS;
2778 uint32_t creg_val;
2618 2779
2619 /* 2780 /*
2620 * If the caller has provided a response iocbq buffer, then context2 2781 * If the caller has provided a response iocbq buffer, then context2
@@ -2630,6 +2791,13 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba,
2630 piocb->context_un.wait_queue = &done_q; 2791 piocb->context_un.wait_queue = &done_q;
2631 piocb->iocb_flag &= ~LPFC_IO_WAKE; 2792 piocb->iocb_flag &= ~LPFC_IO_WAKE;
2632 2793
2794 if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
2795 creg_val = readl(phba->HCregaddr);
2796 creg_val |= (HC_R0INT_ENA << LPFC_FCP_RING);
2797 writel(creg_val, phba->HCregaddr);
2798 readl(phba->HCregaddr); /* flush */
2799 }
2800
2633 retval = lpfc_sli_issue_iocb(phba, pring, piocb, 0); 2801 retval = lpfc_sli_issue_iocb(phba, pring, piocb, 0);
2634 if (retval == IOCB_SUCCESS) { 2802 if (retval == IOCB_SUCCESS) {
2635 timeout_req = timeout * HZ; 2803 timeout_req = timeout * HZ;
@@ -2663,6 +2831,13 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba,
2663 retval = IOCB_ERROR; 2831 retval = IOCB_ERROR;
2664 } 2832 }
2665 2833
2834 if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
2835 creg_val = readl(phba->HCregaddr);
2836 creg_val &= ~(HC_R0INT_ENA << LPFC_FCP_RING);
2837 writel(creg_val, phba->HCregaddr);
2838 readl(phba->HCregaddr); /* flush */
2839 }
2840
2666 if (prspiocbq) 2841 if (prspiocbq)
2667 piocb->context2 = NULL; 2842 piocb->context2 = NULL;
2668 2843
diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index 4f0466fbd5f2..fa681a934ffe 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -18,7 +18,7 @@
18 * included with this package. * 18 * included with this package. *
19 *******************************************************************/ 19 *******************************************************************/
20 20
21#define LPFC_DRIVER_VERSION "8.1.0" 21#define LPFC_DRIVER_VERSION "8.1.1"
22 22
23#define LPFC_DRIVER_NAME "lpfc" 23#define LPFC_DRIVER_NAME "lpfc"
24 24
diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c
index 932dcf0366eb..311a4122bd70 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -432,11 +432,12 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
432 struct Scsi_Host *host; 432 struct Scsi_Host *host;
433 void *dma_cmd_space; 433 void *dma_cmd_space;
434 unsigned char *clkprop; 434 unsigned char *clkprop;
435 int proplen; 435 int proplen, rc = -ENODEV;
436 436
437 if (macio_resource_count(mdev) != 2 || macio_irq_count(mdev) != 2) { 437 if (macio_resource_count(mdev) != 2 || macio_irq_count(mdev) != 2) {
438 printk(KERN_ERR "mac53c94: expected 2 addrs and intrs (got %d/%d)\n", 438 printk(KERN_ERR "mac53c94: expected 2 addrs and intrs"
439 node->n_addrs, node->n_intrs); 439 " (got %d/%d)\n",
440 macio_resource_count(mdev), macio_irq_count(mdev));
440 return -ENODEV; 441 return -ENODEV;
441 } 442 }
442 443
@@ -448,6 +449,7 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
448 host = scsi_host_alloc(&mac53c94_template, sizeof(struct fsc_state)); 449 host = scsi_host_alloc(&mac53c94_template, sizeof(struct fsc_state));
449 if (host == NULL) { 450 if (host == NULL) {
450 printk(KERN_ERR "mac53c94: couldn't register host"); 451 printk(KERN_ERR "mac53c94: couldn't register host");
452 rc = -ENOMEM;
451 goto out_release; 453 goto out_release;
452 } 454 }
453 455
@@ -486,6 +488,7 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
486 if (dma_cmd_space == 0) { 488 if (dma_cmd_space == 0) {
487 printk(KERN_ERR "mac53c94: couldn't allocate dma " 489 printk(KERN_ERR "mac53c94: couldn't allocate dma "
488 "command space for %s\n", node->full_name); 490 "command space for %s\n", node->full_name);
491 rc = -ENOMEM;
489 goto out_free; 492 goto out_free;
490 } 493 }
491 state->dma_cmds = (struct dbdma_cmd *)DBDMA_ALIGN(dma_cmd_space); 494 state->dma_cmds = (struct dbdma_cmd *)DBDMA_ALIGN(dma_cmd_space);
@@ -495,18 +498,21 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
495 498
496 mac53c94_init(state); 499 mac53c94_init(state);
497 500
498 if (request_irq(state->intr, do_mac53c94_interrupt, 0, "53C94", state)) { 501 if (request_irq(state->intr, do_mac53c94_interrupt, 0, "53C94",state)) {
499 printk(KERN_ERR "mac53C94: can't get irq %d for %s\n", 502 printk(KERN_ERR "mac53C94: can't get irq %d for %s\n",
500 state->intr, node->full_name); 503 state->intr, node->full_name);
501 goto out_free_dma; 504 goto out_free_dma;
502 } 505 }
503 506
504 /* XXX FIXME: handle failure */ 507 rc = scsi_add_host(host, &mdev->ofdev.dev);
505 scsi_add_host(host, &mdev->ofdev.dev); 508 if (rc != 0)
506 scsi_scan_host(host); 509 goto out_release_irq;
507 510
511 scsi_scan_host(host);
508 return 0; 512 return 0;
509 513
514 out_release_irq:
515 free_irq(state->intr, state);
510 out_free_dma: 516 out_free_dma:
511 kfree(state->dma_cmd_space); 517 kfree(state->dma_cmd_space);
512 out_free: 518 out_free:
@@ -518,7 +524,7 @@ static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *mat
518 out_release: 524 out_release:
519 macio_release_resources(mdev); 525 macio_release_resources(mdev);
520 526
521 return -ENODEV; 527 return rc;
522} 528}
523 529
524static int mac53c94_remove(struct macio_dev *mdev) 530static int mac53c94_remove(struct macio_dev *mdev)
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 578143e93a6f..d101a8a6f4e8 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -2,7 +2,7 @@
2 * 2 *
3 * Linux MegaRAID device driver 3 * Linux MegaRAID device driver
4 * 4 *
5 * Copyright © 2002 LSI Logic Corporation. 5 * Copyright (c) 2002 LSI Logic Corporation.
6 * 6 *
7 * This program is free software; you can redistribute it and/or 7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License 8 * modify it under the terms of the GNU General Public License
@@ -17,7 +17,8 @@
17 * Copyright (c) 2003 Christoph Hellwig <hch@lst.de> 17 * Copyright (c) 2003 Christoph Hellwig <hch@lst.de>
18 * - new-style, hotplug-aware pci probing and scsi registration 18 * - new-style, hotplug-aware pci probing and scsi registration
19 * 19 *
20 * Version : v2.00.3 (Feb 19, 2003) - Atul Mukker <Atul.Mukker@lsil.com> 20 * Version : v2.00.4 Mon Nov 14 14:02:43 EST 2005 - Seokmann Ju
21 * <Seokmann.Ju@lsil.com>
21 * 22 *
22 * Description: Linux device driver for LSI Logic MegaRAID controller 23 * Description: Linux device driver for LSI Logic MegaRAID controller
23 * 24 *
@@ -51,10 +52,10 @@
51 52
52#include "megaraid.h" 53#include "megaraid.h"
53 54
54#define MEGARAID_MODULE_VERSION "2.00.3" 55#define MEGARAID_MODULE_VERSION "2.00.4"
55 56
56MODULE_AUTHOR ("LSI Logic Corporation"); 57MODULE_AUTHOR ("sju@lsil.com");
57MODULE_DESCRIPTION ("LSI Logic MegaRAID driver"); 58MODULE_DESCRIPTION ("LSI Logic MegaRAID legacy driver");
58MODULE_LICENSE ("GPL"); 59MODULE_LICENSE ("GPL");
59MODULE_VERSION(MEGARAID_MODULE_VERSION); 60MODULE_VERSION(MEGARAID_MODULE_VERSION);
60 61
@@ -4478,7 +4479,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
4478 * serialized. This is so because we want to reserve maximum number of 4479 * serialized. This is so because we want to reserve maximum number of
4479 * available command ids for the I/O commands. 4480 * available command ids for the I/O commands.
4480 */ 4481 */
4481 down(&adapter->int_mtx); 4482 mutex_lock(&adapter->int_mtx);
4482 4483
4483 scb = &adapter->int_scb; 4484 scb = &adapter->int_scb;
4484 memset(scb, 0, sizeof(scb_t)); 4485 memset(scb, 0, sizeof(scb_t));
@@ -4526,7 +4527,7 @@ mega_internal_command(adapter_t *adapter, megacmd_t *mc, mega_passthru *pthru)
4526 mc->cmd, mc->opcode, mc->subopcode, scmd->result); 4527 mc->cmd, mc->opcode, mc->subopcode, scmd->result);
4527 } 4528 }
4528 4529
4529 up(&adapter->int_mtx); 4530 mutex_unlock(&adapter->int_mtx);
4530 4531
4531 return rval; 4532 return rval;
4532} 4533}
@@ -4553,7 +4554,7 @@ mega_internal_done(Scsi_Cmnd *scmd)
4553static struct scsi_host_template megaraid_template = { 4554static struct scsi_host_template megaraid_template = {
4554 .module = THIS_MODULE, 4555 .module = THIS_MODULE,
4555 .name = "MegaRAID", 4556 .name = "MegaRAID",
4556 .proc_name = "megaraid", 4557 .proc_name = "megaraid_legacy",
4557 .info = megaraid_info, 4558 .info = megaraid_info,
4558 .queuecommand = megaraid_queue, 4559 .queuecommand = megaraid_queue,
4559 .bios_param = megaraid_biosparam, 4560 .bios_param = megaraid_biosparam,
@@ -4865,7 +4866,7 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
4865 adapter->has_64bit_addr = 0; 4866 adapter->has_64bit_addr = 0;
4866 } 4867 }
4867 4868
4868 init_MUTEX(&adapter->int_mtx); 4869 mutex_init(&adapter->int_mtx);
4869 init_completion(&adapter->int_waitq); 4870 init_completion(&adapter->int_waitq);
4870 4871
4871 adapter->this_id = DEFAULT_INITIATOR_ID; 4872 adapter->this_id = DEFAULT_INITIATOR_ID;
@@ -5037,22 +5038,12 @@ megaraid_shutdown(struct pci_dev *pdev)
5037} 5038}
5038 5039
5039static struct pci_device_id megaraid_pci_tbl[] = { 5040static struct pci_device_id megaraid_pci_tbl[] = {
5040 {PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_DISCOVERY,
5041 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5042 {PCI_VENDOR_ID_DELL, PCI_DEVICE_ID_PERC4_DI,
5043 PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
5044 {PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_PERC4_QC_VERDE,
5045 PCI_ANY_ID, PCI_ANY_ID, 0, 0, BOARD_64BIT},
5046 {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID, 5041 {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID,
5047 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 5042 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5048 {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2, 5043 {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID2,
5049 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 5044 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5050 {PCI_VENDOR_ID_AMI, PCI_DEVICE_ID_AMI_MEGARAID3,
5051 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5052 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3, 5045 {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_AMI_MEGARAID3,
5053 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 5046 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5054 {PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_AMI_MEGARAID3,
5055 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
5056 {0,} 5047 {0,}
5057}; 5048};
5058MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl); 5049MODULE_DEVICE_TABLE(pci, megaraid_pci_tbl);
@@ -5095,7 +5086,7 @@ static int __init megaraid_init(void)
5095 * First argument (major) to register_chrdev implies a dynamic 5086 * First argument (major) to register_chrdev implies a dynamic
5096 * major number allocation. 5087 * major number allocation.
5097 */ 5088 */
5098 major = register_chrdev(0, "megadev", &megadev_fops); 5089 major = register_chrdev(0, "megadev_legacy", &megadev_fops);
5099 if (!major) { 5090 if (!major) {
5100 printk(KERN_WARNING 5091 printk(KERN_WARNING
5101 "megaraid: failed to register char device\n"); 5092 "megaraid: failed to register char device\n");
@@ -5109,7 +5100,7 @@ static void __exit megaraid_exit(void)
5109 /* 5100 /*
5110 * Unregister the character device interface to the driver. 5101 * Unregister the character device interface to the driver.
5111 */ 5102 */
5112 unregister_chrdev(major, "megadev"); 5103 unregister_chrdev(major, "megadev_legacy");
5113 5104
5114 pci_unregister_driver(&megaraid_pci_driver); 5105 pci_unregister_driver(&megaraid_pci_driver);
5115 5106
diff --git a/drivers/scsi/megaraid.h b/drivers/scsi/megaraid.h
index 6f9078025748..4b3e0d6e5afa 100644
--- a/drivers/scsi/megaraid.h
+++ b/drivers/scsi/megaraid.h
@@ -2,7 +2,7 @@
2#define __MEGARAID_H__ 2#define __MEGARAID_H__
3 3
4#include <linux/spinlock.h> 4#include <linux/spinlock.h>
5 5#include <linux/mutex.h>
6 6
7#define MEGARAID_VERSION \ 7#define MEGARAID_VERSION \
8 "v2.00.3 (Release Date: Wed Feb 19 08:51:30 EST 2003)\n" 8 "v2.00.3 (Release Date: Wed Feb 19 08:51:30 EST 2003)\n"
@@ -889,7 +889,7 @@ typedef struct {
889 889
890 scb_t int_scb; 890 scb_t int_scb;
891 Scsi_Cmnd int_scmd; 891 Scsi_Cmnd int_scmd;
892 struct semaphore int_mtx; /* To synchronize the internal 892 struct mutex int_mtx; /* To synchronize the internal
893 commands */ 893 commands */
894 struct completion int_waitq; /* wait queue for internal 894 struct completion int_waitq; /* wait queue for internal
895 cmds */ 895 cmds */
diff --git a/drivers/scsi/megaraid/Kconfig.megaraid b/drivers/scsi/megaraid/Kconfig.megaraid
index 7363e12663ac..17419e30ffc8 100644
--- a/drivers/scsi/megaraid/Kconfig.megaraid
+++ b/drivers/scsi/megaraid/Kconfig.megaraid
@@ -64,7 +64,6 @@ config MEGARAID_MAILBOX
64 To compile this driver as a module, choose M here: the 64 To compile this driver as a module, choose M here: the
65 module will be called megaraid_mbox 65 module will be called megaraid_mbox
66 66
67if MEGARAID_NEWGEN=n
68config MEGARAID_LEGACY 67config MEGARAID_LEGACY
69 tristate "LSI Logic Legacy MegaRAID Driver" 68 tristate "LSI Logic Legacy MegaRAID Driver"
70 depends on PCI && SCSI 69 depends on PCI && SCSI
@@ -75,7 +74,6 @@ config MEGARAID_LEGACY
75 74
76 To compile this driver as a module, choose M here: the 75 To compile this driver as a module, choose M here: the
77 module will be called megaraid 76 module will be called megaraid
78endif
79 77
80config MEGARAID_SAS 78config MEGARAID_SAS
81 tristate "LSI Logic MegaRAID SAS RAID Module" 79 tristate "LSI Logic MegaRAID SAS RAID Module"
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c
index 4b5d420d2f4d..bf9f7f7ba354 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -10,12 +10,13 @@
10 * 2 of the License, or (at your option) any later version. 10 * 2 of the License, or (at your option) any later version.
11 * 11 *
12 * FILE : megaraid_mbox.c 12 * FILE : megaraid_mbox.c
13 * Version : v2.20.4.6 (Mar 07 2005) 13 * Version : v2.20.4.7 (Nov 14 2005)
14 * 14 *
15 * Authors: 15 * Authors:
16 * Atul Mukker <Atul.Mukker@lsil.com> 16 * Atul Mukker <Atul.Mukker@lsil.com>
17 * Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com> 17 * Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com>
18 * Manoj Jose <Manoj.Jose@lsil.com> 18 * Manoj Jose <Manoj.Jose@lsil.com>
19 * Seokmann Ju <Seokmann.Ju@lsil.com>
19 * 20 *
20 * List of supported controllers 21 * List of supported controllers
21 * 22 *
@@ -136,7 +137,7 @@ static int wait_till_fw_empty(adapter_t *);
136 137
137 138
138 139
139MODULE_AUTHOR("LSI Logic Corporation"); 140MODULE_AUTHOR("sju@lsil.com");
140MODULE_DESCRIPTION("LSI Logic MegaRAID Mailbox Driver"); 141MODULE_DESCRIPTION("LSI Logic MegaRAID Mailbox Driver");
141MODULE_LICENSE("GPL"); 142MODULE_LICENSE("GPL");
142MODULE_VERSION(MEGARAID_VERSION); 143MODULE_VERSION(MEGARAID_VERSION);
@@ -278,68 +279,14 @@ static struct pci_device_id pci_id_table_g[] = {
278 { 279 {
279 PCI_VENDOR_ID_AMI, 280 PCI_VENDOR_ID_AMI,
280 PCI_DEVICE_ID_AMI_MEGARAID3, 281 PCI_DEVICE_ID_AMI_MEGARAID3,
281 PCI_VENDOR_ID_DELL, 282 PCI_ANY_ID,
282 PCI_SUBSYS_ID_PERC3_QC, 283 PCI_ANY_ID,
283 },
284 {
285 PCI_VENDOR_ID_AMI,
286 PCI_DEVICE_ID_AMI_MEGARAID3,
287 PCI_VENDOR_ID_DELL,
288 PCI_SUBSYS_ID_PERC3_DC,
289 },
290 {
291 PCI_VENDOR_ID_AMI,
292 PCI_DEVICE_ID_AMI_MEGARAID3,
293 PCI_VENDOR_ID_DELL,
294 PCI_SUBSYS_ID_PERC3_SC,
295 },
296 {
297 PCI_VENDOR_ID_AMI,
298 PCI_DEVICE_ID_AMI_MEGARAID3,
299 PCI_VENDOR_ID_AMI,
300 PCI_SUBSYS_ID_PERC3_SC,
301 },
302 {
303 PCI_VENDOR_ID_AMI,
304 PCI_DEVICE_ID_AMI_MEGARAID3,
305 PCI_VENDOR_ID_AMI,
306 PCI_SUBSYS_ID_PERC3_DC,
307 },
308 {
309 PCI_VENDOR_ID_LSI_LOGIC,
310 PCI_DEVICE_ID_MEGARAID_SCSI_320_0,
311 PCI_VENDOR_ID_LSI_LOGIC,
312 PCI_SUBSYS_ID_MEGARAID_SCSI_320_0,
313 },
314 {
315 PCI_VENDOR_ID_LSI_LOGIC,
316 PCI_DEVICE_ID_MEGARAID_SCSI_320_1,
317 PCI_VENDOR_ID_LSI_LOGIC,
318 PCI_SUBSYS_ID_MEGARAID_SCSI_320_1,
319 },
320 {
321 PCI_VENDOR_ID_LSI_LOGIC,
322 PCI_DEVICE_ID_MEGARAID_SCSI_320_2,
323 PCI_VENDOR_ID_LSI_LOGIC,
324 PCI_SUBSYS_ID_MEGARAID_SCSI_320_2,
325 },
326 {
327 PCI_VENDOR_ID_LSI_LOGIC,
328 PCI_DEVICE_ID_MEGARAID_I4_133_RAID,
329 PCI_VENDOR_ID_LSI_LOGIC,
330 PCI_SUBSYS_ID_MEGARAID_I4_133_RAID,
331 },
332 {
333 PCI_VENDOR_ID_LSI_LOGIC,
334 PCI_DEVICE_ID_MEGARAID_SATA_150_4,
335 PCI_VENDOR_ID_LSI_LOGIC,
336 PCI_SUBSYS_ID_MEGARAID_SATA_150_4,
337 }, 284 },
338 { 285 {
339 PCI_VENDOR_ID_LSI_LOGIC, 286 PCI_VENDOR_ID_LSI_LOGIC,
340 PCI_DEVICE_ID_MEGARAID_SATA_150_6, 287 PCI_DEVICE_ID_AMI_MEGARAID3,
341 PCI_VENDOR_ID_LSI_LOGIC, 288 PCI_ANY_ID,
342 PCI_SUBSYS_ID_MEGARAID_SATA_150_6, 289 PCI_ANY_ID,
343 }, 290 },
344 { 291 {
345 PCI_VENDOR_ID_LSI_LOGIC, 292 PCI_VENDOR_ID_LSI_LOGIC,
@@ -347,18 +294,6 @@ static struct pci_device_id pci_id_table_g[] = {
347 PCI_ANY_ID, 294 PCI_ANY_ID,
348 PCI_ANY_ID, 295 PCI_ANY_ID,
349 }, 296 },
350 {
351 PCI_VENDOR_ID_LSI_LOGIC,
352 PCI_DEVICE_ID_INTEL_RAID_SRCS16,
353 PCI_VENDOR_ID_INTEL,
354 PCI_SUBSYS_ID_INTEL_RAID_SRCS16,
355 },
356 {
357 PCI_VENDOR_ID_LSI_LOGIC,
358 PCI_DEVICE_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK,
359 PCI_VENDOR_ID_INTEL,
360 PCI_SUBSYS_ID_INTEL_RAID_SRCU41L_LAKE_SHETEK,
361 },
362 {0} /* Terminating entry */ 297 {0} /* Terminating entry */
363}; 298};
364MODULE_DEVICE_TABLE(pci, pci_id_table_g); 299MODULE_DEVICE_TABLE(pci, pci_id_table_g);
@@ -1331,7 +1266,7 @@ megaraid_mbox_teardown_dma_pools(adapter_t *adapter)
1331 * return the scb from the head of the free list. NULL if there are none 1266 * return the scb from the head of the free list. NULL if there are none
1332 * available 1267 * available
1333 **/ 1268 **/
1334static inline scb_t * 1269static scb_t *
1335megaraid_alloc_scb(adapter_t *adapter, struct scsi_cmnd *scp) 1270megaraid_alloc_scb(adapter_t *adapter, struct scsi_cmnd *scp)
1336{ 1271{
1337 struct list_head *head = &adapter->kscb_pool; 1272 struct list_head *head = &adapter->kscb_pool;
@@ -1394,7 +1329,7 @@ megaraid_dealloc_scb(adapter_t *adapter, scb_t *scb)
1394 * 1329 *
1395 * prepare the scatter-gather list 1330 * prepare the scatter-gather list
1396 */ 1331 */
1397static inline int 1332static int
1398megaraid_mbox_mksgl(adapter_t *adapter, scb_t *scb) 1333megaraid_mbox_mksgl(adapter_t *adapter, scb_t *scb)
1399{ 1334{
1400 struct scatterlist *sgl; 1335 struct scatterlist *sgl;
@@ -1467,7 +1402,7 @@ megaraid_mbox_mksgl(adapter_t *adapter, scb_t *scb)
1467 * 1402 *
1468 * post the command to the controller if mailbox is availble. 1403 * post the command to the controller if mailbox is availble.
1469 */ 1404 */
1470static inline int 1405static int
1471mbox_post_cmd(adapter_t *adapter, scb_t *scb) 1406mbox_post_cmd(adapter_t *adapter, scb_t *scb)
1472{ 1407{
1473 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter); 1408 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter);
@@ -2135,7 +2070,7 @@ megaraid_mbox_prepare_epthru(adapter_t *adapter, scb_t *scb,
2135 * 2070 *
2136 * Returns: 1 if the interrupt is valid, 0 otherwise 2071 * Returns: 1 if the interrupt is valid, 0 otherwise
2137 */ 2072 */
2138static inline int 2073static int
2139megaraid_ack_sequence(adapter_t *adapter) 2074megaraid_ack_sequence(adapter_t *adapter)
2140{ 2075{
2141 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter); 2076 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter);
@@ -2273,7 +2208,7 @@ megaraid_isr(int irq, void *devp, struct pt_regs *regs)
2273 * 2208 *
2274 * DMA sync if required. 2209 * DMA sync if required.
2275 */ 2210 */
2276static inline void 2211static void
2277megaraid_mbox_sync_scb(adapter_t *adapter, scb_t *scb) 2212megaraid_mbox_sync_scb(adapter_t *adapter, scb_t *scb)
2278{ 2213{
2279 mbox_ccb_t *ccb; 2214 mbox_ccb_t *ccb;
@@ -2985,6 +2920,7 @@ mbox_post_sync_cmd_fast(adapter_t *adapter, uint8_t raw_mbox[])
2985 2920
2986 for (i = 0; i < 0xFFFFF; i++) { 2921 for (i = 0; i < 0xFFFFF; i++) {
2987 if (mbox->numstatus != 0xFF) break; 2922 if (mbox->numstatus != 0xFF) break;
2923 rmb();
2988 } 2924 }
2989 2925
2990 if (i == 0xFFFFF) { 2926 if (i == 0xFFFFF) {
diff --git a/drivers/scsi/megaraid/megaraid_mbox.h b/drivers/scsi/megaraid/megaraid_mbox.h
index 644b91bdb028..882fb1a0b575 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.h
+++ b/drivers/scsi/megaraid/megaraid_mbox.h
@@ -21,8 +21,8 @@
21#include "megaraid_ioctl.h" 21#include "megaraid_ioctl.h"
22 22
23 23
24#define MEGARAID_VERSION "2.20.4.6" 24#define MEGARAID_VERSION "2.20.4.7"
25#define MEGARAID_EXT_VERSION "(Release Date: Mon Mar 07 12:27:22 EST 2005)" 25#define MEGARAID_EXT_VERSION "(Release Date: Mon Nov 14 12:27:22 EST 2005)"
26 26
27 27
28/* 28/*
diff --git a/drivers/scsi/megaraid/megaraid_mm.h b/drivers/scsi/megaraid/megaraid_mm.h
index eb8c390a0fa3..3d9e67d6849d 100644
--- a/drivers/scsi/megaraid/megaraid_mm.h
+++ b/drivers/scsi/megaraid/megaraid_mm.h
@@ -22,7 +22,6 @@
22#include <linux/moduleparam.h> 22#include <linux/moduleparam.h>
23#include <linux/pci.h> 23#include <linux/pci.h>
24#include <linux/list.h> 24#include <linux/list.h>
25#include <linux/ioctl32.h>
26 25
27#include "mbox_defs.h" 26#include "mbox_defs.h"
28#include "megaraid_ioctl.h" 27#include "megaraid_ioctl.h"
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c
index 3c32e69afcd9..511ed52a5807 100644
--- a/drivers/scsi/megaraid/megaraid_sas.c
+++ b/drivers/scsi/megaraid/megaraid_sas.c
@@ -35,6 +35,7 @@
35#include <asm/uaccess.h> 35#include <asm/uaccess.h>
36#include <linux/fs.h> 36#include <linux/fs.h>
37#include <linux/compat.h> 37#include <linux/compat.h>
38#include <linux/mutex.h>
38 39
39#include <scsi/scsi.h> 40#include <scsi/scsi.h>
40#include <scsi/scsi_cmnd.h> 41#include <scsi/scsi_cmnd.h>
@@ -72,7 +73,7 @@ MODULE_DEVICE_TABLE(pci, megasas_pci_table);
72static int megasas_mgmt_majorno; 73static int megasas_mgmt_majorno;
73static struct megasas_mgmt_info megasas_mgmt_info; 74static struct megasas_mgmt_info megasas_mgmt_info;
74static struct fasync_struct *megasas_async_queue; 75static struct fasync_struct *megasas_async_queue;
75static DECLARE_MUTEX(megasas_async_queue_mutex); 76static DEFINE_MUTEX(megasas_async_queue_mutex);
76 77
77/** 78/**
78 * megasas_get_cmd - Get a command from the free pool 79 * megasas_get_cmd - Get a command from the free pool
@@ -80,7 +81,7 @@ static DECLARE_MUTEX(megasas_async_queue_mutex);
80 * 81 *
81 * Returns a free command from the pool 82 * Returns a free command from the pool
82 */ 83 */
83static inline struct megasas_cmd *megasas_get_cmd(struct megasas_instance 84static struct megasas_cmd *megasas_get_cmd(struct megasas_instance
84 *instance) 85 *instance)
85{ 86{
86 unsigned long flags; 87 unsigned long flags;
@@ -262,7 +263,7 @@ megasas_issue_blocked_abort_cmd(struct megasas_instance *instance,
262 * If successful, this function returns the number of SG elements. Otherwise, 263 * If successful, this function returns the number of SG elements. Otherwise,
263 * it returnes -1. 264 * it returnes -1.
264 */ 265 */
265static inline int 266static int
266megasas_make_sgl32(struct megasas_instance *instance, struct scsi_cmnd *scp, 267megasas_make_sgl32(struct megasas_instance *instance, struct scsi_cmnd *scp,
267 union megasas_sgl *mfi_sgl) 268 union megasas_sgl *mfi_sgl)
268{ 269{
@@ -310,7 +311,7 @@ megasas_make_sgl32(struct megasas_instance *instance, struct scsi_cmnd *scp,
310 * If successful, this function returns the number of SG elements. Otherwise, 311 * If successful, this function returns the number of SG elements. Otherwise,
311 * it returnes -1. 312 * it returnes -1.
312 */ 313 */
313static inline int 314static int
314megasas_make_sgl64(struct megasas_instance *instance, struct scsi_cmnd *scp, 315megasas_make_sgl64(struct megasas_instance *instance, struct scsi_cmnd *scp,
315 union megasas_sgl *mfi_sgl) 316 union megasas_sgl *mfi_sgl)
316{ 317{
@@ -359,7 +360,7 @@ megasas_make_sgl64(struct megasas_instance *instance, struct scsi_cmnd *scp,
359 * This function prepares CDB commands. These are typcially pass-through 360 * This function prepares CDB commands. These are typcially pass-through
360 * commands to the devices. 361 * commands to the devices.
361 */ 362 */
362static inline int 363static int
363megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp, 364megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp,
364 struct megasas_cmd *cmd) 365 struct megasas_cmd *cmd)
365{ 366{
@@ -440,7 +441,7 @@ megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp,
440 * 441 *
441 * Frames (and accompanying SGLs) for regular SCSI IOs use this function. 442 * Frames (and accompanying SGLs) for regular SCSI IOs use this function.
442 */ 443 */
443static inline int 444static int
444megasas_build_ldio(struct megasas_instance *instance, struct scsi_cmnd *scp, 445megasas_build_ldio(struct megasas_instance *instance, struct scsi_cmnd *scp,
445 struct megasas_cmd *cmd) 446 struct megasas_cmd *cmd)
446{ 447{
@@ -562,7 +563,7 @@ megasas_build_ldio(struct megasas_instance *instance, struct scsi_cmnd *scp,
562 * @scp: SCSI command 563 * @scp: SCSI command
563 * @frame_count: [OUT] Number of frames used to prepare this command 564 * @frame_count: [OUT] Number of frames used to prepare this command
564 */ 565 */
565static inline struct megasas_cmd *megasas_build_cmd(struct megasas_instance 566static struct megasas_cmd *megasas_build_cmd(struct megasas_instance
566 *instance, 567 *instance,
567 struct scsi_cmnd *scp, 568 struct scsi_cmnd *scp,
568 int *frame_count) 569 int *frame_count)
@@ -913,7 +914,7 @@ megasas_complete_abort(struct megasas_instance *instance,
913 * @instance: Adapter soft state 914 * @instance: Adapter soft state
914 * @cmd: Completed command 915 * @cmd: Completed command
915 */ 916 */
916static inline void 917static void
917megasas_unmap_sgbuf(struct megasas_instance *instance, struct megasas_cmd *cmd) 918megasas_unmap_sgbuf(struct megasas_instance *instance, struct megasas_cmd *cmd)
918{ 919{
919 dma_addr_t buf_h; 920 dma_addr_t buf_h;
@@ -957,7 +958,7 @@ megasas_unmap_sgbuf(struct megasas_instance *instance, struct megasas_cmd *cmd)
957 * an alternate status (as in the case of aborted 958 * an alternate status (as in the case of aborted
958 * commands) 959 * commands)
959 */ 960 */
960static inline void 961static void
961megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd, 962megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
962 u8 alt_status) 963 u8 alt_status)
963{ 964{
@@ -1104,7 +1105,7 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
1104 * SCSI mid-layer instead of the status 1105 * SCSI mid-layer instead of the status
1105 * returned by the FW 1106 * returned by the FW
1106 */ 1107 */
1107static inline int 1108static int
1108megasas_deplete_reply_queue(struct megasas_instance *instance, u8 alt_status) 1109megasas_deplete_reply_queue(struct megasas_instance *instance, u8 alt_status)
1109{ 1110{
1110 u32 status; 1111 u32 status;
@@ -2362,11 +2363,11 @@ static int megasas_mgmt_fasync(int fd, struct file *filep, int mode)
2362{ 2363{
2363 int rc; 2364 int rc;
2364 2365
2365 down(&megasas_async_queue_mutex); 2366 mutex_lock(&megasas_async_queue_mutex);
2366 2367
2367 rc = fasync_helper(fd, filep, mode, &megasas_async_queue); 2368 rc = fasync_helper(fd, filep, mode, &megasas_async_queue);
2368 2369
2369 up(&megasas_async_queue_mutex); 2370 mutex_unlock(&megasas_async_queue_mutex);
2370 2371
2371 if (rc >= 0) { 2372 if (rc >= 0) {
2372 /* For sanity check when we get ioctl */ 2373 /* For sanity check when we get ioctl */
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index bdccf73cf9fe..d6d2125f9044 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1869,7 +1869,8 @@ static int mesh_probe(struct macio_dev *mdev, const struct of_device_id *match)
1869 1869
1870 if (macio_resource_count(mdev) != 2 || macio_irq_count(mdev) != 2) { 1870 if (macio_resource_count(mdev) != 2 || macio_irq_count(mdev) != 2) {
1871 printk(KERN_ERR "mesh: expected 2 addrs and 2 intrs" 1871 printk(KERN_ERR "mesh: expected 2 addrs and 2 intrs"
1872 " (got %d,%d)\n", mesh->n_addrs, mesh->n_intrs); 1872 " (got %d,%d)\n", macio_resource_count(mdev),
1873 macio_irq_count(mdev));
1873 return -ENODEV; 1874 return -ENODEV;
1874 } 1875 }
1875 1876
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index 243470936fab..32350707b940 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -131,7 +131,739 @@
131#define NAME53C "ncr53c" 131#define NAME53C "ncr53c"
132#define NAME53C8XX "ncr53c8xx" 132#define NAME53C8XX "ncr53c8xx"
133 133
134#include "sym53c8xx_comm.h" 134
135/*==========================================================
136**
137** Debugging tags
138**
139**==========================================================
140*/
141
142#define DEBUG_ALLOC (0x0001)
143#define DEBUG_PHASE (0x0002)
144#define DEBUG_QUEUE (0x0008)
145#define DEBUG_RESULT (0x0010)
146#define DEBUG_POINTER (0x0020)
147#define DEBUG_SCRIPT (0x0040)
148#define DEBUG_TINY (0x0080)
149#define DEBUG_TIMING (0x0100)
150#define DEBUG_NEGO (0x0200)
151#define DEBUG_TAGS (0x0400)
152#define DEBUG_SCATTER (0x0800)
153#define DEBUG_IC (0x1000)
154
155/*
156** Enable/Disable debug messages.
157** Can be changed at runtime too.
158*/
159
160#ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
161static int ncr_debug = SCSI_NCR_DEBUG_FLAGS;
162 #define DEBUG_FLAGS ncr_debug
163#else
164 #define DEBUG_FLAGS SCSI_NCR_DEBUG_FLAGS
165#endif
166
167static inline struct list_head *ncr_list_pop(struct list_head *head)
168{
169 if (!list_empty(head)) {
170 struct list_head *elem = head->next;
171
172 list_del(elem);
173 return elem;
174 }
175
176 return NULL;
177}
178
179/*==========================================================
180**
181** Simple power of two buddy-like allocator.
182**
183** This simple code is not intended to be fast, but to
184** provide power of 2 aligned memory allocations.
185** Since the SCRIPTS processor only supplies 8 bit
186** arithmetic, this allocator allows simple and fast
187** address calculations from the SCRIPTS code.
188** In addition, cache line alignment is guaranteed for
189** power of 2 cache line size.
190** Enhanced in linux-2.3.44 to provide a memory pool
191** per pcidev to support dynamic dma mapping. (I would
192** have preferred a real bus astraction, btw).
193**
194**==========================================================
195*/
196
197#define MEMO_SHIFT 4 /* 16 bytes minimum memory chunk */
198#if PAGE_SIZE >= 8192
199#define MEMO_PAGE_ORDER 0 /* 1 PAGE maximum */
200#else
201#define MEMO_PAGE_ORDER 1 /* 2 PAGES maximum */
202#endif
203#define MEMO_FREE_UNUSED /* Free unused pages immediately */
204#define MEMO_WARN 1
205#define MEMO_GFP_FLAGS GFP_ATOMIC
206#define MEMO_CLUSTER_SHIFT (PAGE_SHIFT+MEMO_PAGE_ORDER)
207#define MEMO_CLUSTER_SIZE (1UL << MEMO_CLUSTER_SHIFT)
208#define MEMO_CLUSTER_MASK (MEMO_CLUSTER_SIZE-1)
209
210typedef u_long m_addr_t; /* Enough bits to bit-hack addresses */
211typedef struct device *m_bush_t; /* Something that addresses DMAable */
212
213typedef struct m_link { /* Link between free memory chunks */
214 struct m_link *next;
215} m_link_s;
216
217typedef struct m_vtob { /* Virtual to Bus address translation */
218 struct m_vtob *next;
219 m_addr_t vaddr;
220 m_addr_t baddr;
221} m_vtob_s;
222#define VTOB_HASH_SHIFT 5
223#define VTOB_HASH_SIZE (1UL << VTOB_HASH_SHIFT)
224#define VTOB_HASH_MASK (VTOB_HASH_SIZE-1)
225#define VTOB_HASH_CODE(m) \
226 ((((m_addr_t) (m)) >> MEMO_CLUSTER_SHIFT) & VTOB_HASH_MASK)
227
228typedef struct m_pool { /* Memory pool of a given kind */
229 m_bush_t bush;
230 m_addr_t (*getp)(struct m_pool *);
231 void (*freep)(struct m_pool *, m_addr_t);
232 int nump;
233 m_vtob_s *(vtob[VTOB_HASH_SIZE]);
234 struct m_pool *next;
235 struct m_link h[PAGE_SHIFT-MEMO_SHIFT+MEMO_PAGE_ORDER+1];
236} m_pool_s;
237
238static void *___m_alloc(m_pool_s *mp, int size)
239{
240 int i = 0;
241 int s = (1 << MEMO_SHIFT);
242 int j;
243 m_addr_t a;
244 m_link_s *h = mp->h;
245
246 if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
247 return NULL;
248
249 while (size > s) {
250 s <<= 1;
251 ++i;
252 }
253
254 j = i;
255 while (!h[j].next) {
256 if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
257 h[j].next = (m_link_s *)mp->getp(mp);
258 if (h[j].next)
259 h[j].next->next = NULL;
260 break;
261 }
262 ++j;
263 s <<= 1;
264 }
265 a = (m_addr_t) h[j].next;
266 if (a) {
267 h[j].next = h[j].next->next;
268 while (j > i) {
269 j -= 1;
270 s >>= 1;
271 h[j].next = (m_link_s *) (a+s);
272 h[j].next->next = NULL;
273 }
274 }
275#ifdef DEBUG
276 printk("___m_alloc(%d) = %p\n", size, (void *) a);
277#endif
278 return (void *) a;
279}
280
281static void ___m_free(m_pool_s *mp, void *ptr, int size)
282{
283 int i = 0;
284 int s = (1 << MEMO_SHIFT);
285 m_link_s *q;
286 m_addr_t a, b;
287 m_link_s *h = mp->h;
288
289#ifdef DEBUG
290 printk("___m_free(%p, %d)\n", ptr, size);
291#endif
292
293 if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
294 return;
295
296 while (size > s) {
297 s <<= 1;
298 ++i;
299 }
300
301 a = (m_addr_t) ptr;
302
303 while (1) {
304#ifdef MEMO_FREE_UNUSED
305 if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
306 mp->freep(mp, a);
307 break;
308 }
309#endif
310 b = a ^ s;
311 q = &h[i];
312 while (q->next && q->next != (m_link_s *) b) {
313 q = q->next;
314 }
315 if (!q->next) {
316 ((m_link_s *) a)->next = h[i].next;
317 h[i].next = (m_link_s *) a;
318 break;
319 }
320 q->next = q->next->next;
321 a = a & b;
322 s <<= 1;
323 ++i;
324 }
325}
326
327static DEFINE_SPINLOCK(ncr53c8xx_lock);
328
329static void *__m_calloc2(m_pool_s *mp, int size, char *name, int uflags)
330{
331 void *p;
332
333 p = ___m_alloc(mp, size);
334
335 if (DEBUG_FLAGS & DEBUG_ALLOC)
336 printk ("new %-10s[%4d] @%p.\n", name, size, p);
337
338 if (p)
339 memset(p, 0, size);
340 else if (uflags & MEMO_WARN)
341 printk (NAME53C8XX ": failed to allocate %s[%d]\n", name, size);
342
343 return p;
344}
345
346#define __m_calloc(mp, s, n) __m_calloc2(mp, s, n, MEMO_WARN)
347
348static void __m_free(m_pool_s *mp, void *ptr, int size, char *name)
349{
350 if (DEBUG_FLAGS & DEBUG_ALLOC)
351 printk ("freeing %-10s[%4d] @%p.\n", name, size, ptr);
352
353 ___m_free(mp, ptr, size);
354
355}
356
357/*
358 * With pci bus iommu support, we use a default pool of unmapped memory
359 * for memory we donnot need to DMA from/to and one pool per pcidev for
360 * memory accessed by the PCI chip. `mp0' is the default not DMAable pool.
361 */
362
363static m_addr_t ___mp0_getp(m_pool_s *mp)
364{
365 m_addr_t m = __get_free_pages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER);
366 if (m)
367 ++mp->nump;
368 return m;
369}
370
371static void ___mp0_freep(m_pool_s *mp, m_addr_t m)
372{
373 free_pages(m, MEMO_PAGE_ORDER);
374 --mp->nump;
375}
376
377static m_pool_s mp0 = {NULL, ___mp0_getp, ___mp0_freep};
378
379/*
380 * DMAable pools.
381 */
382
383/*
384 * With pci bus iommu support, we maintain one pool per pcidev and a
385 * hashed reverse table for virtual to bus physical address translations.
386 */
387static m_addr_t ___dma_getp(m_pool_s *mp)
388{
389 m_addr_t vp;
390 m_vtob_s *vbp;
391
392 vbp = __m_calloc(&mp0, sizeof(*vbp), "VTOB");
393 if (vbp) {
394 dma_addr_t daddr;
395 vp = (m_addr_t) dma_alloc_coherent(mp->bush,
396 PAGE_SIZE<<MEMO_PAGE_ORDER,
397 &daddr, GFP_ATOMIC);
398 if (vp) {
399 int hc = VTOB_HASH_CODE(vp);
400 vbp->vaddr = vp;
401 vbp->baddr = daddr;
402 vbp->next = mp->vtob[hc];
403 mp->vtob[hc] = vbp;
404 ++mp->nump;
405 return vp;
406 }
407 }
408 if (vbp)
409 __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
410 return 0;
411}
412
413static void ___dma_freep(m_pool_s *mp, m_addr_t m)
414{
415 m_vtob_s **vbpp, *vbp;
416 int hc = VTOB_HASH_CODE(m);
417
418 vbpp = &mp->vtob[hc];
419 while (*vbpp && (*vbpp)->vaddr != m)
420 vbpp = &(*vbpp)->next;
421 if (*vbpp) {
422 vbp = *vbpp;
423 *vbpp = (*vbpp)->next;
424 dma_free_coherent(mp->bush, PAGE_SIZE<<MEMO_PAGE_ORDER,
425 (void *)vbp->vaddr, (dma_addr_t)vbp->baddr);
426 __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
427 --mp->nump;
428 }
429}
430
431static inline m_pool_s *___get_dma_pool(m_bush_t bush)
432{
433 m_pool_s *mp;
434 for (mp = mp0.next; mp && mp->bush != bush; mp = mp->next);
435 return mp;
436}
437
438static m_pool_s *___cre_dma_pool(m_bush_t bush)
439{
440 m_pool_s *mp;
441 mp = __m_calloc(&mp0, sizeof(*mp), "MPOOL");
442 if (mp) {
443 memset(mp, 0, sizeof(*mp));
444 mp->bush = bush;
445 mp->getp = ___dma_getp;
446 mp->freep = ___dma_freep;
447 mp->next = mp0.next;
448 mp0.next = mp;
449 }
450 return mp;
451}
452
453static void ___del_dma_pool(m_pool_s *p)
454{
455 struct m_pool **pp = &mp0.next;
456
457 while (*pp && *pp != p)
458 pp = &(*pp)->next;
459 if (*pp) {
460 *pp = (*pp)->next;
461 __m_free(&mp0, p, sizeof(*p), "MPOOL");
462 }
463}
464
465static void *__m_calloc_dma(m_bush_t bush, int size, char *name)
466{
467 u_long flags;
468 struct m_pool *mp;
469 void *m = NULL;
470
471 spin_lock_irqsave(&ncr53c8xx_lock, flags);
472 mp = ___get_dma_pool(bush);
473 if (!mp)
474 mp = ___cre_dma_pool(bush);
475 if (mp)
476 m = __m_calloc(mp, size, name);
477 if (mp && !mp->nump)
478 ___del_dma_pool(mp);
479 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
480
481 return m;
482}
483
484static void __m_free_dma(m_bush_t bush, void *m, int size, char *name)
485{
486 u_long flags;
487 struct m_pool *mp;
488
489 spin_lock_irqsave(&ncr53c8xx_lock, flags);
490 mp = ___get_dma_pool(bush);
491 if (mp)
492 __m_free(mp, m, size, name);
493 if (mp && !mp->nump)
494 ___del_dma_pool(mp);
495 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
496}
497
498static m_addr_t __vtobus(m_bush_t bush, void *m)
499{
500 u_long flags;
501 m_pool_s *mp;
502 int hc = VTOB_HASH_CODE(m);
503 m_vtob_s *vp = NULL;
504 m_addr_t a = ((m_addr_t) m) & ~MEMO_CLUSTER_MASK;
505
506 spin_lock_irqsave(&ncr53c8xx_lock, flags);
507 mp = ___get_dma_pool(bush);
508 if (mp) {
509 vp = mp->vtob[hc];
510 while (vp && (m_addr_t) vp->vaddr != a)
511 vp = vp->next;
512 }
513 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
514 return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
515}
516
517#define _m_calloc_dma(np, s, n) __m_calloc_dma(np->dev, s, n)
518#define _m_free_dma(np, p, s, n) __m_free_dma(np->dev, p, s, n)
519#define m_calloc_dma(s, n) _m_calloc_dma(np, s, n)
520#define m_free_dma(p, s, n) _m_free_dma(np, p, s, n)
521#define _vtobus(np, p) __vtobus(np->dev, p)
522#define vtobus(p) _vtobus(np, p)
523
524/*
525 * Deal with DMA mapping/unmapping.
526 */
527
528/* To keep track of the dma mapping (sg/single) that has been set */
529#define __data_mapped SCp.phase
530#define __data_mapping SCp.have_data_in
531
532static void __unmap_scsi_data(struct device *dev, struct scsi_cmnd *cmd)
533{
534 switch(cmd->__data_mapped) {
535 case 2:
536 dma_unmap_sg(dev, cmd->buffer, cmd->use_sg,
537 cmd->sc_data_direction);
538 break;
539 case 1:
540 dma_unmap_single(dev, cmd->__data_mapping,
541 cmd->request_bufflen,
542 cmd->sc_data_direction);
543 break;
544 }
545 cmd->__data_mapped = 0;
546}
547
548static u_long __map_scsi_single_data(struct device *dev, struct scsi_cmnd *cmd)
549{
550 dma_addr_t mapping;
551
552 if (cmd->request_bufflen == 0)
553 return 0;
554
555 mapping = dma_map_single(dev, cmd->request_buffer,
556 cmd->request_bufflen,
557 cmd->sc_data_direction);
558 cmd->__data_mapped = 1;
559 cmd->__data_mapping = mapping;
560
561 return mapping;
562}
563
564static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd)
565{
566 int use_sg;
567
568 if (cmd->use_sg == 0)
569 return 0;
570
571 use_sg = dma_map_sg(dev, cmd->buffer, cmd->use_sg,
572 cmd->sc_data_direction);
573 cmd->__data_mapped = 2;
574 cmd->__data_mapping = use_sg;
575
576 return use_sg;
577}
578
579#define unmap_scsi_data(np, cmd) __unmap_scsi_data(np->dev, cmd)
580#define map_scsi_single_data(np, cmd) __map_scsi_single_data(np->dev, cmd)
581#define map_scsi_sg_data(np, cmd) __map_scsi_sg_data(np->dev, cmd)
582
583/*==========================================================
584**
585** Driver setup.
586**
587** This structure is initialized from linux config
588** options. It can be overridden at boot-up by the boot
589** command line.
590**
591**==========================================================
592*/
593static struct ncr_driver_setup
594 driver_setup = SCSI_NCR_DRIVER_SETUP;
595
596#ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
597static struct ncr_driver_setup
598 driver_safe_setup __initdata = SCSI_NCR_DRIVER_SAFE_SETUP;
599#endif
600
601#define initverbose (driver_setup.verbose)
602#define bootverbose (np->verbose)
603
604
605/*===================================================================
606**
607** Driver setup from the boot command line
608**
609**===================================================================
610*/
611
612#ifdef MODULE
613#define ARG_SEP ' '
614#else
615#define ARG_SEP ','
616#endif
617
618#define OPT_TAGS 1
619#define OPT_MASTER_PARITY 2
620#define OPT_SCSI_PARITY 3
621#define OPT_DISCONNECTION 4
622#define OPT_SPECIAL_FEATURES 5
623#define OPT_UNUSED_1 6
624#define OPT_FORCE_SYNC_NEGO 7
625#define OPT_REVERSE_PROBE 8
626#define OPT_DEFAULT_SYNC 9
627#define OPT_VERBOSE 10
628#define OPT_DEBUG 11
629#define OPT_BURST_MAX 12
630#define OPT_LED_PIN 13
631#define OPT_MAX_WIDE 14
632#define OPT_SETTLE_DELAY 15
633#define OPT_DIFF_SUPPORT 16
634#define OPT_IRQM 17
635#define OPT_PCI_FIX_UP 18
636#define OPT_BUS_CHECK 19
637#define OPT_OPTIMIZE 20
638#define OPT_RECOVERY 21
639#define OPT_SAFE_SETUP 22
640#define OPT_USE_NVRAM 23
641#define OPT_EXCLUDE 24
642#define OPT_HOST_ID 25
643
644#ifdef SCSI_NCR_IARB_SUPPORT
645#define OPT_IARB 26
646#endif
647
648static char setup_token[] __initdata =
649 "tags:" "mpar:"
650 "spar:" "disc:"
651 "specf:" "ultra:"
652 "fsn:" "revprob:"
653 "sync:" "verb:"
654 "debug:" "burst:"
655 "led:" "wide:"
656 "settle:" "diff:"
657 "irqm:" "pcifix:"
658 "buschk:" "optim:"
659 "recovery:"
660 "safe:" "nvram:"
661 "excl:" "hostid:"
662#ifdef SCSI_NCR_IARB_SUPPORT
663 "iarb:"
664#endif
665 ; /* DONNOT REMOVE THIS ';' */
666
667#ifdef MODULE
668#define ARG_SEP ' '
669#else
670#define ARG_SEP ','
671#endif
672
673static int __init get_setup_token(char *p)
674{
675 char *cur = setup_token;
676 char *pc;
677 int i = 0;
678
679 while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
680 ++pc;
681 ++i;
682 if (!strncmp(p, cur, pc - cur))
683 return i;
684 cur = pc;
685 }
686 return 0;
687}
688
689
690static int __init sym53c8xx__setup(char *str)
691{
692#ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
693 char *cur = str;
694 char *pc, *pv;
695 int i, val, c;
696 int xi = 0;
697
698 while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
699 char *pe;
700
701 val = 0;
702 pv = pc;
703 c = *++pv;
704
705 if (c == 'n')
706 val = 0;
707 else if (c == 'y')
708 val = 1;
709 else
710 val = (int) simple_strtoul(pv, &pe, 0);
711
712 switch (get_setup_token(cur)) {
713 case OPT_TAGS:
714 driver_setup.default_tags = val;
715 if (pe && *pe == '/') {
716 i = 0;
717 while (*pe && *pe != ARG_SEP &&
718 i < sizeof(driver_setup.tag_ctrl)-1) {
719 driver_setup.tag_ctrl[i++] = *pe++;
720 }
721 driver_setup.tag_ctrl[i] = '\0';
722 }
723 break;
724 case OPT_MASTER_PARITY:
725 driver_setup.master_parity = val;
726 break;
727 case OPT_SCSI_PARITY:
728 driver_setup.scsi_parity = val;
729 break;
730 case OPT_DISCONNECTION:
731 driver_setup.disconnection = val;
732 break;
733 case OPT_SPECIAL_FEATURES:
734 driver_setup.special_features = val;
735 break;
736 case OPT_FORCE_SYNC_NEGO:
737 driver_setup.force_sync_nego = val;
738 break;
739 case OPT_REVERSE_PROBE:
740 driver_setup.reverse_probe = val;
741 break;
742 case OPT_DEFAULT_SYNC:
743 driver_setup.default_sync = val;
744 break;
745 case OPT_VERBOSE:
746 driver_setup.verbose = val;
747 break;
748 case OPT_DEBUG:
749 driver_setup.debug = val;
750 break;
751 case OPT_BURST_MAX:
752 driver_setup.burst_max = val;
753 break;
754 case OPT_LED_PIN:
755 driver_setup.led_pin = val;
756 break;
757 case OPT_MAX_WIDE:
758 driver_setup.max_wide = val? 1:0;
759 break;
760 case OPT_SETTLE_DELAY:
761 driver_setup.settle_delay = val;
762 break;
763 case OPT_DIFF_SUPPORT:
764 driver_setup.diff_support = val;
765 break;
766 case OPT_IRQM:
767 driver_setup.irqm = val;
768 break;
769 case OPT_PCI_FIX_UP:
770 driver_setup.pci_fix_up = val;
771 break;
772 case OPT_BUS_CHECK:
773 driver_setup.bus_check = val;
774 break;
775 case OPT_OPTIMIZE:
776 driver_setup.optimize = val;
777 break;
778 case OPT_RECOVERY:
779 driver_setup.recovery = val;
780 break;
781 case OPT_USE_NVRAM:
782 driver_setup.use_nvram = val;
783 break;
784 case OPT_SAFE_SETUP:
785 memcpy(&driver_setup, &driver_safe_setup,
786 sizeof(driver_setup));
787 break;
788 case OPT_EXCLUDE:
789 if (xi < SCSI_NCR_MAX_EXCLUDES)
790 driver_setup.excludes[xi++] = val;
791 break;
792 case OPT_HOST_ID:
793 driver_setup.host_id = val;
794 break;
795#ifdef SCSI_NCR_IARB_SUPPORT
796 case OPT_IARB:
797 driver_setup.iarb = val;
798 break;
799#endif
800 default:
801 printk("sym53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
802 break;
803 }
804
805 if ((cur = strchr(cur, ARG_SEP)) != NULL)
806 ++cur;
807 }
808#endif /* SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT */
809 return 1;
810}
811
812/*===================================================================
813**
814** Get device queue depth from boot command line.
815**
816**===================================================================
817*/
818#define DEF_DEPTH (driver_setup.default_tags)
819#define ALL_TARGETS -2
820#define NO_TARGET -1
821#define ALL_LUNS -2
822#define NO_LUN -1
823
824static int device_queue_depth(int unit, int target, int lun)
825{
826 int c, h, t, u, v;
827 char *p = driver_setup.tag_ctrl;
828 char *ep;
829
830 h = -1;
831 t = NO_TARGET;
832 u = NO_LUN;
833 while ((c = *p++) != 0) {
834 v = simple_strtoul(p, &ep, 0);
835 switch(c) {
836 case '/':
837 ++h;
838 t = ALL_TARGETS;
839 u = ALL_LUNS;
840 break;
841 case 't':
842 if (t != target)
843 t = (target == v) ? v : NO_TARGET;
844 u = ALL_LUNS;
845 break;
846 case 'u':
847 if (u != lun)
848 u = (lun == v) ? v : NO_LUN;
849 break;
850 case 'q':
851 if (h == unit &&
852 (t == ALL_TARGETS || t == target) &&
853 (u == ALL_LUNS || u == lun))
854 return v;
855 break;
856 case '-':
857 t = ALL_TARGETS;
858 u = ALL_LUNS;
859 break;
860 default:
861 break;
862 }
863 p = ep;
864 }
865 return DEF_DEPTH;
866}
135 867
136 868
137/*========================================================== 869/*==========================================================
@@ -2971,21 +3703,10 @@ struct host_data {
2971 3703
2972static void ncr_print_msg(struct ccb *cp, char *label, u_char *msg) 3704static void ncr_print_msg(struct ccb *cp, char *label, u_char *msg)
2973{ 3705{
2974 int i;
2975 PRINT_ADDR(cp->cmd, "%s: ", label); 3706 PRINT_ADDR(cp->cmd, "%s: ", label);
2976 3707
2977 printk ("%x",*msg); 3708 spi_print_msg(msg);
2978 if (*msg == M_EXTENDED) { 3709 printk("\n");
2979 for (i = 1; i < 8; i++) {
2980 if (i - 1 > msg[1])
2981 break;
2982 printk ("-%x",msg[i]);
2983 }
2984 } else if ((*msg & 0xf0) == 0x20) {
2985 printk ("-%x",msg[1]);
2986 }
2987
2988 printk(".\n");
2989} 3710}
2990 3711
2991/*========================================================== 3712/*==========================================================
diff --git a/drivers/scsi/ncr53c8xx.h b/drivers/scsi/ncr53c8xx.h
index 05c7b83cef09..6a7bef2e6118 100644
--- a/drivers/scsi/ncr53c8xx.h
+++ b/drivers/scsi/ncr53c8xx.h
@@ -2,6 +2,7 @@
2** Device driver for the PCI-SCSI NCR538XX controller family. 2** Device driver for the PCI-SCSI NCR538XX controller family.
3** 3**
4** Copyright (C) 1994 Wolfgang Stanglmeier 4** Copyright (C) 1994 Wolfgang Stanglmeier
5** Copyright (C) 1998-2001 Gerard Roudier <groudier@free.fr>
5** 6**
6** This program is free software; you can redistribute it and/or modify 7** This program is free software; you can redistribute it and/or modify
7** it under the terms of the GNU General Public License as published by 8** it under the terms of the GNU General Public License as published by
@@ -36,15 +37,1275 @@
36** And has been ported to NetBSD by 37** And has been ported to NetBSD by
37** Charles M. Hannum <mycroft@gnu.ai.mit.edu> 38** Charles M. Hannum <mycroft@gnu.ai.mit.edu>
38** 39**
40** NVRAM detection and reading.
41** Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
42**
43** Added support for MIPS big endian systems.
44** Carsten Langgaard, carstenl@mips.com
45** Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
46**
47** Added support for HP PARISC big endian systems.
48** Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
49**
39******************************************************************************* 50*******************************************************************************
40*/ 51*/
41 52
42#ifndef NCR53C8XX_H 53#ifndef NCR53C8XX_H
43#define NCR53C8XX_H 54#define NCR53C8XX_H
44 55
56#include <linux/config.h>
45#include <scsi/scsi_host.h> 57#include <scsi/scsi_host.h>
46 58
47#include "sym53c8xx_defs.h" 59/*
60** If you want a driver as small as possible, do not define the
61** following options.
62*/
63#define SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
64#define SCSI_NCR_DEBUG_INFO_SUPPORT
65
66/*
67** To disable integrity checking, do not define the
68** following option.
69*/
70#ifdef CONFIG_SCSI_NCR53C8XX_INTEGRITY_CHECK
71# define SCSI_NCR_ENABLE_INTEGRITY_CHECK
72#endif
73
74/* ---------------------------------------------------------------------
75** Take into account kernel configured parameters.
76** Most of these options can be overridden at startup by a command line.
77** ---------------------------------------------------------------------
78*/
79
80/*
81 * For Ultra2 and Ultra3 SCSI support option, use special features.
82 *
83 * Value (default) means:
84 * bit 0 : all features enabled, except:
85 * bit 1 : PCI Write And Invalidate.
86 * bit 2 : Data Phase Mismatch handling from SCRIPTS.
87 *
88 * Use boot options ncr53c8xx=specf:1 if you want all chip features to be
89 * enabled by the driver.
90 */
91#define SCSI_NCR_SETUP_SPECIAL_FEATURES (3)
92
93#define SCSI_NCR_MAX_SYNC (80)
94
95/*
96 * Allow tags from 2 to 256, default 8
97 */
98#ifdef CONFIG_SCSI_NCR53C8XX_MAX_TAGS
99#if CONFIG_SCSI_NCR53C8XX_MAX_TAGS < 2
100#define SCSI_NCR_MAX_TAGS (2)
101#elif CONFIG_SCSI_NCR53C8XX_MAX_TAGS > 256
102#define SCSI_NCR_MAX_TAGS (256)
103#else
104#define SCSI_NCR_MAX_TAGS CONFIG_SCSI_NCR53C8XX_MAX_TAGS
105#endif
106#else
107#define SCSI_NCR_MAX_TAGS (8)
108#endif
109
110/*
111 * Allow tagged command queuing support if configured with default number
112 * of tags set to max (see above).
113 */
114#ifdef CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
115#define SCSI_NCR_SETUP_DEFAULT_TAGS CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
116#elif defined CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE
117#define SCSI_NCR_SETUP_DEFAULT_TAGS SCSI_NCR_MAX_TAGS
118#else
119#define SCSI_NCR_SETUP_DEFAULT_TAGS (0)
120#endif
121
122/*
123 * Immediate arbitration
124 */
125#if defined(CONFIG_SCSI_NCR53C8XX_IARB)
126#define SCSI_NCR_IARB_SUPPORT
127#endif
128
129/*
130 * Sync transfer frequency at startup.
131 * Allow from 5Mhz to 80Mhz default 20 Mhz.
132 */
133#ifndef CONFIG_SCSI_NCR53C8XX_SYNC
134#define CONFIG_SCSI_NCR53C8XX_SYNC (20)
135#elif CONFIG_SCSI_NCR53C8XX_SYNC > SCSI_NCR_MAX_SYNC
136#undef CONFIG_SCSI_NCR53C8XX_SYNC
137#define CONFIG_SCSI_NCR53C8XX_SYNC SCSI_NCR_MAX_SYNC
138#endif
139
140#if CONFIG_SCSI_NCR53C8XX_SYNC == 0
141#define SCSI_NCR_SETUP_DEFAULT_SYNC (255)
142#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 5
143#define SCSI_NCR_SETUP_DEFAULT_SYNC (50)
144#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 20
145#define SCSI_NCR_SETUP_DEFAULT_SYNC (250/(CONFIG_SCSI_NCR53C8XX_SYNC))
146#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 33
147#define SCSI_NCR_SETUP_DEFAULT_SYNC (11)
148#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 40
149#define SCSI_NCR_SETUP_DEFAULT_SYNC (10)
150#else
151#define SCSI_NCR_SETUP_DEFAULT_SYNC (9)
152#endif
153
154/*
155 * Disallow disconnections at boot-up
156 */
157#ifdef CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
158#define SCSI_NCR_SETUP_DISCONNECTION (0)
159#else
160#define SCSI_NCR_SETUP_DISCONNECTION (1)
161#endif
162
163/*
164 * Force synchronous negotiation for all targets
165 */
166#ifdef CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO
167#define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (1)
168#else
169#define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (0)
170#endif
171
172/*
173 * Disable master parity checking (flawed hardwares need that)
174 */
175#ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_MPARITY_CHECK
176#define SCSI_NCR_SETUP_MASTER_PARITY (0)
177#else
178#define SCSI_NCR_SETUP_MASTER_PARITY (1)
179#endif
180
181/*
182 * Disable scsi parity checking (flawed devices may need that)
183 */
184#ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_PARITY_CHECK
185#define SCSI_NCR_SETUP_SCSI_PARITY (0)
186#else
187#define SCSI_NCR_SETUP_SCSI_PARITY (1)
188#endif
189
190/*
191 * Settle time after reset at boot-up
192 */
193#define SCSI_NCR_SETUP_SETTLE_TIME (2)
194
195/*
196** Bridge quirks work-around option defaulted to 1.
197*/
198#ifndef SCSI_NCR_PCIQ_WORK_AROUND_OPT
199#define SCSI_NCR_PCIQ_WORK_AROUND_OPT 1
200#endif
201
202/*
203** Work-around common bridge misbehaviour.
204**
205** - Do not flush posted writes in the opposite
206** direction on read.
207** - May reorder DMA writes to memory.
208**
209** This option should not affect performances
210** significantly, so it is the default.
211*/
212#if SCSI_NCR_PCIQ_WORK_AROUND_OPT == 1
213#define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
214#define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
215#define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
216
217/*
218** Same as option 1, but also deal with
219** misconfigured interrupts.
220**
221** - Edge triggerred instead of level sensitive.
222** - No interrupt line connected.
223** - IRQ number misconfigured.
224**
225** If no interrupt is delivered, the driver will
226** catch the interrupt conditions 10 times per
227** second. No need to say that this option is
228** not recommended.
229*/
230#elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 2
231#define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
232#define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
233#define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
234#define SCSI_NCR_PCIQ_BROKEN_INTR
235
236/*
237** Some bridge designers decided to flush
238** everything prior to deliver the interrupt.
239** This option tries to deal with such a
240** behaviour.
241*/
242#elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 3
243#define SCSI_NCR_PCIQ_SYNC_ON_INTR
244#endif
245
246/*
247** Other parameters not configurable with "make config"
248** Avoid to change these constants, unless you know what you are doing.
249*/
250
251#define SCSI_NCR_ALWAYS_SIMPLE_TAG
252#define SCSI_NCR_MAX_SCATTER (127)
253#define SCSI_NCR_MAX_TARGET (16)
254
255/*
256** Compute some desirable value for CAN_QUEUE
257** and CMD_PER_LUN.
258** The driver will use lower values if these
259** ones appear to be too large.
260*/
261#define SCSI_NCR_CAN_QUEUE (8*SCSI_NCR_MAX_TAGS + 2*SCSI_NCR_MAX_TARGET)
262#define SCSI_NCR_CMD_PER_LUN (SCSI_NCR_MAX_TAGS)
263
264#define SCSI_NCR_SG_TABLESIZE (SCSI_NCR_MAX_SCATTER)
265#define SCSI_NCR_TIMER_INTERVAL (HZ)
266
267#if 1 /* defined CONFIG_SCSI_MULTI_LUN */
268#define SCSI_NCR_MAX_LUN (16)
269#else
270#define SCSI_NCR_MAX_LUN (1)
271#endif
272
273/*
274 * IO functions definition for big/little endian CPU support.
275 * For now, the NCR is only supported in little endian addressing mode,
276 */
277
278#ifdef __BIG_ENDIAN
279
280#define inw_l2b inw
281#define inl_l2b inl
282#define outw_b2l outw
283#define outl_b2l outl
284
285#define readb_raw readb
286#define writeb_raw writeb
287
288#if defined(SCSI_NCR_BIG_ENDIAN)
289#define readw_l2b __raw_readw
290#define readl_l2b __raw_readl
291#define writew_b2l __raw_writew
292#define writel_b2l __raw_writel
293#define readw_raw __raw_readw
294#define readl_raw __raw_readl
295#define writew_raw __raw_writew
296#define writel_raw __raw_writel
297#else /* Other big-endian */
298#define readw_l2b readw
299#define readl_l2b readl
300#define writew_b2l writew
301#define writel_b2l writel
302#define readw_raw readw
303#define readl_raw readl
304#define writew_raw writew
305#define writel_raw writel
306#endif
307
308#else /* little endian */
309
310#define inw_raw inw
311#define inl_raw inl
312#define outw_raw outw
313#define outl_raw outl
314
315#define readb_raw readb
316#define readw_raw readw
317#define readl_raw readl
318#define writeb_raw writeb
319#define writew_raw writew
320#define writel_raw writel
321
322#endif
323
324#if !defined(__hppa__) && !defined(__mips__)
325#ifdef SCSI_NCR_BIG_ENDIAN
326#error "The NCR in BIG ENDIAN addressing mode is not (yet) supported"
327#endif
328#endif
329
330#define MEMORY_BARRIER() mb()
331
332
333/*
334 * If the NCR uses big endian addressing mode over the
335 * PCI, actual io register addresses for byte and word
336 * accesses must be changed according to lane routing.
337 * Btw, ncr_offb() and ncr_offw() macros only apply to
338 * constants and so donnot generate bloated code.
339 */
340
341#if defined(SCSI_NCR_BIG_ENDIAN)
342
343#define ncr_offb(o) (((o)&~3)+((~((o)&3))&3))
344#define ncr_offw(o) (((o)&~3)+((~((o)&3))&2))
345
346#else
347
348#define ncr_offb(o) (o)
349#define ncr_offw(o) (o)
350
351#endif
352
353/*
354 * If the CPU and the NCR use same endian-ness addressing,
355 * no byte reordering is needed for script patching.
356 * Macro cpu_to_scr() is to be used for script patching.
357 * Macro scr_to_cpu() is to be used for getting a DWORD
358 * from the script.
359 */
360
361#if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
362
363#define cpu_to_scr(dw) cpu_to_le32(dw)
364#define scr_to_cpu(dw) le32_to_cpu(dw)
365
366#elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
367
368#define cpu_to_scr(dw) cpu_to_be32(dw)
369#define scr_to_cpu(dw) be32_to_cpu(dw)
370
371#else
372
373#define cpu_to_scr(dw) (dw)
374#define scr_to_cpu(dw) (dw)
375
376#endif
377
378/*
379 * Access to the controller chip.
380 *
381 * If the CPU and the NCR use same endian-ness addressing,
382 * no byte reordering is needed for accessing chip io
383 * registers. Functions suffixed by '_raw' are assumed
384 * to access the chip over the PCI without doing byte
385 * reordering. Functions suffixed by '_l2b' are
386 * assumed to perform little-endian to big-endian byte
387 * reordering, those suffixed by '_b2l' blah, blah,
388 * blah, ...
389 */
390
391/*
392 * MEMORY mapped IO input / output
393 */
394
395#define INB_OFF(o) readb_raw((char __iomem *)np->reg + ncr_offb(o))
396#define OUTB_OFF(o, val) writeb_raw((val), (char __iomem *)np->reg + ncr_offb(o))
397
398#if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
399
400#define INW_OFF(o) readw_l2b((char __iomem *)np->reg + ncr_offw(o))
401#define INL_OFF(o) readl_l2b((char __iomem *)np->reg + (o))
402
403#define OUTW_OFF(o, val) writew_b2l((val), (char __iomem *)np->reg + ncr_offw(o))
404#define OUTL_OFF(o, val) writel_b2l((val), (char __iomem *)np->reg + (o))
405
406#elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
407
408#define INW_OFF(o) readw_b2l((char __iomem *)np->reg + ncr_offw(o))
409#define INL_OFF(o) readl_b2l((char __iomem *)np->reg + (o))
410
411#define OUTW_OFF(o, val) writew_l2b((val), (char __iomem *)np->reg + ncr_offw(o))
412#define OUTL_OFF(o, val) writel_l2b((val), (char __iomem *)np->reg + (o))
413
414#else
415
416#ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
417/* Only 8 or 32 bit transfers allowed */
418#define INW_OFF(o) (readb((char __iomem *)np->reg + ncr_offw(o)) << 8 | readb((char __iomem *)np->reg + ncr_offw(o) + 1))
419#else
420#define INW_OFF(o) readw_raw((char __iomem *)np->reg + ncr_offw(o))
421#endif
422#define INL_OFF(o) readl_raw((char __iomem *)np->reg + (o))
423
424#ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
425/* Only 8 or 32 bit transfers allowed */
426#define OUTW_OFF(o, val) do { writeb((char)((val) >> 8), (char __iomem *)np->reg + ncr_offw(o)); writeb((char)(val), (char __iomem *)np->reg + ncr_offw(o) + 1); } while (0)
427#else
428#define OUTW_OFF(o, val) writew_raw((val), (char __iomem *)np->reg + ncr_offw(o))
429#endif
430#define OUTL_OFF(o, val) writel_raw((val), (char __iomem *)np->reg + (o))
431
432#endif
433
434#define INB(r) INB_OFF (offsetof(struct ncr_reg,r))
435#define INW(r) INW_OFF (offsetof(struct ncr_reg,r))
436#define INL(r) INL_OFF (offsetof(struct ncr_reg,r))
437
438#define OUTB(r, val) OUTB_OFF (offsetof(struct ncr_reg,r), (val))
439#define OUTW(r, val) OUTW_OFF (offsetof(struct ncr_reg,r), (val))
440#define OUTL(r, val) OUTL_OFF (offsetof(struct ncr_reg,r), (val))
441
442/*
443 * Set bit field ON, OFF
444 */
445
446#define OUTONB(r, m) OUTB(r, INB(r) | (m))
447#define OUTOFFB(r, m) OUTB(r, INB(r) & ~(m))
448#define OUTONW(r, m) OUTW(r, INW(r) | (m))
449#define OUTOFFW(r, m) OUTW(r, INW(r) & ~(m))
450#define OUTONL(r, m) OUTL(r, INL(r) | (m))
451#define OUTOFFL(r, m) OUTL(r, INL(r) & ~(m))
452
453/*
454 * We normally want the chip to have a consistent view
455 * of driver internal data structures when we restart it.
456 * Thus these macros.
457 */
458#define OUTL_DSP(v) \
459 do { \
460 MEMORY_BARRIER(); \
461 OUTL (nc_dsp, (v)); \
462 } while (0)
463
464#define OUTONB_STD() \
465 do { \
466 MEMORY_BARRIER(); \
467 OUTONB (nc_dcntl, (STD|NOCOM)); \
468 } while (0)
469
470
471/*
472** NCR53C8XX devices features table.
473*/
474struct ncr_chip {
475 unsigned short revision_id;
476 unsigned char burst_max; /* log-base-2 of max burst */
477 unsigned char offset_max;
478 unsigned char nr_divisor;
479 unsigned int features;
480#define FE_LED0 (1<<0)
481#define FE_WIDE (1<<1) /* Wide data transfers */
482#define FE_ULTRA (1<<2) /* Ultra speed 20Mtrans/sec */
483#define FE_DBLR (1<<4) /* Clock doubler present */
484#define FE_QUAD (1<<5) /* Clock quadrupler present */
485#define FE_ERL (1<<6) /* Enable read line */
486#define FE_CLSE (1<<7) /* Cache line size enable */
487#define FE_WRIE (1<<8) /* Write & Invalidate enable */
488#define FE_ERMP (1<<9) /* Enable read multiple */
489#define FE_BOF (1<<10) /* Burst opcode fetch */
490#define FE_DFS (1<<11) /* DMA fifo size */
491#define FE_PFEN (1<<12) /* Prefetch enable */
492#define FE_LDSTR (1<<13) /* Load/Store supported */
493#define FE_RAM (1<<14) /* On chip RAM present */
494#define FE_VARCLK (1<<15) /* SCSI clock may vary */
495#define FE_RAM8K (1<<16) /* On chip RAM sized 8Kb */
496#define FE_64BIT (1<<17) /* Have a 64-bit PCI interface */
497#define FE_IO256 (1<<18) /* Requires full 256 bytes in PCI space */
498#define FE_NOPM (1<<19) /* Scripts handles phase mismatch */
499#define FE_LEDC (1<<20) /* Hardware control of LED */
500#define FE_DIFF (1<<21) /* Support Differential SCSI */
501#define FE_66MHZ (1<<23) /* 66MHz PCI Support */
502#define FE_DAC (1<<24) /* Support DAC cycles (64 bit addressing) */
503#define FE_ISTAT1 (1<<25) /* Have ISTAT1, MBOX0, MBOX1 registers */
504#define FE_DAC_IN_USE (1<<26) /* Platform does DAC cycles */
505#define FE_EHP (1<<27) /* 720: Even host parity */
506#define FE_MUX (1<<28) /* 720: Multiplexed bus */
507#define FE_EA (1<<29) /* 720: Enable Ack */
508
509#define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP)
510#define FE_SCSI_SET (FE_WIDE|FE_ULTRA|FE_DBLR|FE_QUAD|F_CLK80)
511#define FE_SPECIAL_SET (FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM)
512};
513
514
515/*
516** Driver setup structure.
517**
518** This structure is initialized from linux config options.
519** It can be overridden at boot-up by the boot command line.
520*/
521#define SCSI_NCR_MAX_EXCLUDES 8
522struct ncr_driver_setup {
523 u8 master_parity;
524 u8 scsi_parity;
525 u8 disconnection;
526 u8 special_features;
527 u8 force_sync_nego;
528 u8 reverse_probe;
529 u8 pci_fix_up;
530 u8 use_nvram;
531 u8 verbose;
532 u8 default_tags;
533 u16 default_sync;
534 u16 debug;
535 u8 burst_max;
536 u8 led_pin;
537 u8 max_wide;
538 u8 settle_delay;
539 u8 diff_support;
540 u8 irqm;
541 u8 bus_check;
542 u8 optimize;
543 u8 recovery;
544 u8 host_id;
545 u16 iarb;
546 u32 excludes[SCSI_NCR_MAX_EXCLUDES];
547 char tag_ctrl[100];
548};
549
550/*
551** Initial setup.
552** Can be overriden at startup by a command line.
553*/
554#define SCSI_NCR_DRIVER_SETUP \
555{ \
556 SCSI_NCR_SETUP_MASTER_PARITY, \
557 SCSI_NCR_SETUP_SCSI_PARITY, \
558 SCSI_NCR_SETUP_DISCONNECTION, \
559 SCSI_NCR_SETUP_SPECIAL_FEATURES, \
560 SCSI_NCR_SETUP_FORCE_SYNC_NEGO, \
561 0, \
562 0, \
563 1, \
564 0, \
565 SCSI_NCR_SETUP_DEFAULT_TAGS, \
566 SCSI_NCR_SETUP_DEFAULT_SYNC, \
567 0x00, \
568 7, \
569 0, \
570 1, \
571 SCSI_NCR_SETUP_SETTLE_TIME, \
572 0, \
573 0, \
574 1, \
575 0, \
576 0, \
577 255, \
578 0x00 \
579}
580
581/*
582** Boot fail safe setup.
583** Override initial setup from boot command line:
584** ncr53c8xx=safe:y
585*/
586#define SCSI_NCR_DRIVER_SAFE_SETUP \
587{ \
588 0, \
589 1, \
590 0, \
591 0, \
592 0, \
593 0, \
594 0, \
595 1, \
596 2, \
597 0, \
598 255, \
599 0x00, \
600 255, \
601 0, \
602 0, \
603 10, \
604 1, \
605 1, \
606 1, \
607 0, \
608 0, \
609 255 \
610}
611
612/**************** ORIGINAL CONTENT of ncrreg.h from FreeBSD ******************/
613
614/*-----------------------------------------------------------------
615**
616** The ncr 53c810 register structure.
617**
618**-----------------------------------------------------------------
619*/
620
621struct ncr_reg {
622/*00*/ u8 nc_scntl0; /* full arb., ena parity, par->ATN */
623
624/*01*/ u8 nc_scntl1; /* no reset */
625 #define ISCON 0x10 /* connected to scsi */
626 #define CRST 0x08 /* force reset */
627 #define IARB 0x02 /* immediate arbitration */
628
629/*02*/ u8 nc_scntl2; /* no disconnect expected */
630 #define SDU 0x80 /* cmd: disconnect will raise error */
631 #define CHM 0x40 /* sta: chained mode */
632 #define WSS 0x08 /* sta: wide scsi send [W]*/
633 #define WSR 0x01 /* sta: wide scsi received [W]*/
634
635/*03*/ u8 nc_scntl3; /* cnf system clock dependent */
636 #define EWS 0x08 /* cmd: enable wide scsi [W]*/
637 #define ULTRA 0x80 /* cmd: ULTRA enable */
638 /* bits 0-2, 7 rsvd for C1010 */
639
640/*04*/ u8 nc_scid; /* cnf host adapter scsi address */
641 #define RRE 0x40 /* r/w:e enable response to resel. */
642 #define SRE 0x20 /* r/w:e enable response to select */
643
644/*05*/ u8 nc_sxfer; /* ### Sync speed and count */
645 /* bits 6-7 rsvd for C1010 */
646
647/*06*/ u8 nc_sdid; /* ### Destination-ID */
648
649/*07*/ u8 nc_gpreg; /* ??? IO-Pins */
650
651/*08*/ u8 nc_sfbr; /* ### First byte in phase */
652
653/*09*/ u8 nc_socl;
654 #define CREQ 0x80 /* r/w: SCSI-REQ */
655 #define CACK 0x40 /* r/w: SCSI-ACK */
656 #define CBSY 0x20 /* r/w: SCSI-BSY */
657 #define CSEL 0x10 /* r/w: SCSI-SEL */
658 #define CATN 0x08 /* r/w: SCSI-ATN */
659 #define CMSG 0x04 /* r/w: SCSI-MSG */
660 #define CC_D 0x02 /* r/w: SCSI-C_D */
661 #define CI_O 0x01 /* r/w: SCSI-I_O */
662
663/*0a*/ u8 nc_ssid;
664
665/*0b*/ u8 nc_sbcl;
666
667/*0c*/ u8 nc_dstat;
668 #define DFE 0x80 /* sta: dma fifo empty */
669 #define MDPE 0x40 /* int: master data parity error */
670 #define BF 0x20 /* int: script: bus fault */
671 #define ABRT 0x10 /* int: script: command aborted */
672 #define SSI 0x08 /* int: script: single step */
673 #define SIR 0x04 /* int: script: interrupt instruct. */
674 #define IID 0x01 /* int: script: illegal instruct. */
675
676/*0d*/ u8 nc_sstat0;
677 #define ILF 0x80 /* sta: data in SIDL register lsb */
678 #define ORF 0x40 /* sta: data in SODR register lsb */
679 #define OLF 0x20 /* sta: data in SODL register lsb */
680 #define AIP 0x10 /* sta: arbitration in progress */
681 #define LOA 0x08 /* sta: arbitration lost */
682 #define WOA 0x04 /* sta: arbitration won */
683 #define IRST 0x02 /* sta: scsi reset signal */
684 #define SDP 0x01 /* sta: scsi parity signal */
685
686/*0e*/ u8 nc_sstat1;
687 #define FF3210 0xf0 /* sta: bytes in the scsi fifo */
688
689/*0f*/ u8 nc_sstat2;
690 #define ILF1 0x80 /* sta: data in SIDL register msb[W]*/
691 #define ORF1 0x40 /* sta: data in SODR register msb[W]*/
692 #define OLF1 0x20 /* sta: data in SODL register msb[W]*/
693 #define DM 0x04 /* sta: DIFFSENS mismatch (895/6 only) */
694 #define LDSC 0x02 /* sta: disconnect & reconnect */
695
696/*10*/ u8 nc_dsa; /* --> Base page */
697/*11*/ u8 nc_dsa1;
698/*12*/ u8 nc_dsa2;
699/*13*/ u8 nc_dsa3;
700
701/*14*/ u8 nc_istat; /* --> Main Command and status */
702 #define CABRT 0x80 /* cmd: abort current operation */
703 #define SRST 0x40 /* mod: reset chip */
704 #define SIGP 0x20 /* r/w: message from host to ncr */
705 #define SEM 0x10 /* r/w: message between host + ncr */
706 #define CON 0x08 /* sta: connected to scsi */
707 #define INTF 0x04 /* sta: int on the fly (reset by wr)*/
708 #define SIP 0x02 /* sta: scsi-interrupt */
709 #define DIP 0x01 /* sta: host/script interrupt */
710
711/*15*/ u8 nc_istat1; /* 896 and later cores only */
712 #define FLSH 0x04 /* sta: chip is flushing */
713 #define SRUN 0x02 /* sta: scripts are running */
714 #define SIRQD 0x01 /* r/w: disable INT pin */
715
716/*16*/ u8 nc_mbox0; /* 896 and later cores only */
717/*17*/ u8 nc_mbox1; /* 896 and later cores only */
718
719/*18*/ u8 nc_ctest0;
720 #define EHP 0x04 /* 720 even host parity */
721/*19*/ u8 nc_ctest1;
722
723/*1a*/ u8 nc_ctest2;
724 #define CSIGP 0x40
725 /* bits 0-2,7 rsvd for C1010 */
726
727/*1b*/ u8 nc_ctest3;
728 #define FLF 0x08 /* cmd: flush dma fifo */
729 #define CLF 0x04 /* cmd: clear dma fifo */
730 #define FM 0x02 /* mod: fetch pin mode */
731 #define WRIE 0x01 /* mod: write and invalidate enable */
732 /* bits 4-7 rsvd for C1010 */
733
734/*1c*/ u32 nc_temp; /* ### Temporary stack */
735
736/*20*/ u8 nc_dfifo;
737/*21*/ u8 nc_ctest4;
738 #define MUX 0x80 /* 720 host bus multiplex mode */
739 #define BDIS 0x80 /* mod: burst disable */
740 #define MPEE 0x08 /* mod: master parity error enable */
741
742/*22*/ u8 nc_ctest5;
743 #define DFS 0x20 /* mod: dma fifo size */
744 /* bits 0-1, 3-7 rsvd for C1010 */
745/*23*/ u8 nc_ctest6;
746
747/*24*/ u32 nc_dbc; /* ### Byte count and command */
748/*28*/ u32 nc_dnad; /* ### Next command register */
749/*2c*/ u32 nc_dsp; /* --> Script Pointer */
750/*30*/ u32 nc_dsps; /* --> Script pointer save/opcode#2 */
751
752/*34*/ u8 nc_scratcha; /* Temporary register a */
753/*35*/ u8 nc_scratcha1;
754/*36*/ u8 nc_scratcha2;
755/*37*/ u8 nc_scratcha3;
756
757/*38*/ u8 nc_dmode;
758 #define BL_2 0x80 /* mod: burst length shift value +2 */
759 #define BL_1 0x40 /* mod: burst length shift value +1 */
760 #define ERL 0x08 /* mod: enable read line */
761 #define ERMP 0x04 /* mod: enable read multiple */
762 #define BOF 0x02 /* mod: burst op code fetch */
763
764/*39*/ u8 nc_dien;
765/*3a*/ u8 nc_sbr;
766
767/*3b*/ u8 nc_dcntl; /* --> Script execution control */
768 #define CLSE 0x80 /* mod: cache line size enable */
769 #define PFF 0x40 /* cmd: pre-fetch flush */
770 #define PFEN 0x20 /* mod: pre-fetch enable */
771 #define EA 0x20 /* mod: 720 enable-ack */
772 #define SSM 0x10 /* mod: single step mode */
773 #define IRQM 0x08 /* mod: irq mode (1 = totem pole !) */
774 #define STD 0x04 /* cmd: start dma mode */
775 #define IRQD 0x02 /* mod: irq disable */
776 #define NOCOM 0x01 /* cmd: protect sfbr while reselect */
777 /* bits 0-1 rsvd for C1010 */
778
779/*3c*/ u32 nc_adder;
780
781/*40*/ u16 nc_sien; /* -->: interrupt enable */
782/*42*/ u16 nc_sist; /* <--: interrupt status */
783 #define SBMC 0x1000/* sta: SCSI Bus Mode Change (895/6 only) */
784 #define STO 0x0400/* sta: timeout (select) */
785 #define GEN 0x0200/* sta: timeout (general) */
786 #define HTH 0x0100/* sta: timeout (handshake) */
787 #define MA 0x80 /* sta: phase mismatch */
788 #define CMP 0x40 /* sta: arbitration complete */
789 #define SEL 0x20 /* sta: selected by another device */
790 #define RSL 0x10 /* sta: reselected by another device*/
791 #define SGE 0x08 /* sta: gross error (over/underflow)*/
792 #define UDC 0x04 /* sta: unexpected disconnect */
793 #define RST 0x02 /* sta: scsi bus reset detected */
794 #define PAR 0x01 /* sta: scsi parity error */
795
796/*44*/ u8 nc_slpar;
797/*45*/ u8 nc_swide;
798/*46*/ u8 nc_macntl;
799/*47*/ u8 nc_gpcntl;
800/*48*/ u8 nc_stime0; /* cmd: timeout for select&handshake*/
801/*49*/ u8 nc_stime1; /* cmd: timeout user defined */
802/*4a*/ u16 nc_respid; /* sta: Reselect-IDs */
803
804/*4c*/ u8 nc_stest0;
805
806/*4d*/ u8 nc_stest1;
807 #define SCLK 0x80 /* Use the PCI clock as SCSI clock */
808 #define DBLEN 0x08 /* clock doubler running */
809 #define DBLSEL 0x04 /* clock doubler selected */
810
811
812/*4e*/ u8 nc_stest2;
813 #define ROF 0x40 /* reset scsi offset (after gross error!) */
814 #define DIF 0x20 /* 720 SCSI differential mode */
815 #define EXT 0x02 /* extended filtering */
816
817/*4f*/ u8 nc_stest3;
818 #define TE 0x80 /* c: tolerAnt enable */
819 #define HSC 0x20 /* c: Halt SCSI Clock */
820 #define CSF 0x02 /* c: clear scsi fifo */
821
822/*50*/ u16 nc_sidl; /* Lowlevel: latched from scsi data */
823/*52*/ u8 nc_stest4;
824 #define SMODE 0xc0 /* SCSI bus mode (895/6 only) */
825 #define SMODE_HVD 0x40 /* High Voltage Differential */
826 #define SMODE_SE 0x80 /* Single Ended */
827 #define SMODE_LVD 0xc0 /* Low Voltage Differential */
828 #define LCKFRQ 0x20 /* Frequency Lock (895/6 only) */
829 /* bits 0-5 rsvd for C1010 */
830
831/*53*/ u8 nc_53_;
832/*54*/ u16 nc_sodl; /* Lowlevel: data out to scsi data */
833/*56*/ u8 nc_ccntl0; /* Chip Control 0 (896) */
834 #define ENPMJ 0x80 /* Enable Phase Mismatch Jump */
835 #define PMJCTL 0x40 /* Phase Mismatch Jump Control */
836 #define ENNDJ 0x20 /* Enable Non Data PM Jump */
837 #define DISFC 0x10 /* Disable Auto FIFO Clear */
838 #define DILS 0x02 /* Disable Internal Load/Store */
839 #define DPR 0x01 /* Disable Pipe Req */
840
841/*57*/ u8 nc_ccntl1; /* Chip Control 1 (896) */
842 #define ZMOD 0x80 /* High Impedance Mode */
843 #define DIC 0x10 /* Disable Internal Cycles */
844 #define DDAC 0x08 /* Disable Dual Address Cycle */
845 #define XTIMOD 0x04 /* 64-bit Table Ind. Indexing Mode */
846 #define EXTIBMV 0x02 /* Enable 64-bit Table Ind. BMOV */
847 #define EXDBMV 0x01 /* Enable 64-bit Direct BMOV */
848
849/*58*/ u16 nc_sbdl; /* Lowlevel: data from scsi data */
850/*5a*/ u16 nc_5a_;
851
852/*5c*/ u8 nc_scr0; /* Working register B */
853/*5d*/ u8 nc_scr1; /* */
854/*5e*/ u8 nc_scr2; /* */
855/*5f*/ u8 nc_scr3; /* */
856
857/*60*/ u8 nc_scrx[64]; /* Working register C-R */
858/*a0*/ u32 nc_mmrs; /* Memory Move Read Selector */
859/*a4*/ u32 nc_mmws; /* Memory Move Write Selector */
860/*a8*/ u32 nc_sfs; /* Script Fetch Selector */
861/*ac*/ u32 nc_drs; /* DSA Relative Selector */
862/*b0*/ u32 nc_sbms; /* Static Block Move Selector */
863/*b4*/ u32 nc_dbms; /* Dynamic Block Move Selector */
864/*b8*/ u32 nc_dnad64; /* DMA Next Address 64 */
865/*bc*/ u16 nc_scntl4; /* C1010 only */
866 #define U3EN 0x80 /* Enable Ultra 3 */
867 #define AIPEN 0x40 /* Allow check upper byte lanes */
868 #define XCLKH_DT 0x08 /* Extra clock of data hold on DT
869 transfer edge */
870 #define XCLKH_ST 0x04 /* Extra clock of data hold on ST
871 transfer edge */
872
873/*be*/ u8 nc_aipcntl0; /* Epat Control 1 C1010 only */
874/*bf*/ u8 nc_aipcntl1; /* AIP Control C1010_66 Only */
875
876/*c0*/ u32 nc_pmjad1; /* Phase Mismatch Jump Address 1 */
877/*c4*/ u32 nc_pmjad2; /* Phase Mismatch Jump Address 2 */
878/*c8*/ u8 nc_rbc; /* Remaining Byte Count */
879/*c9*/ u8 nc_rbc1; /* */
880/*ca*/ u8 nc_rbc2; /* */
881/*cb*/ u8 nc_rbc3; /* */
882
883/*cc*/ u8 nc_ua; /* Updated Address */
884/*cd*/ u8 nc_ua1; /* */
885/*ce*/ u8 nc_ua2; /* */
886/*cf*/ u8 nc_ua3; /* */
887/*d0*/ u32 nc_esa; /* Entry Storage Address */
888/*d4*/ u8 nc_ia; /* Instruction Address */
889/*d5*/ u8 nc_ia1;
890/*d6*/ u8 nc_ia2;
891/*d7*/ u8 nc_ia3;
892/*d8*/ u32 nc_sbc; /* SCSI Byte Count (3 bytes only) */
893/*dc*/ u32 nc_csbc; /* Cumulative SCSI Byte Count */
894
895 /* Following for C1010 only */
896/*e0*/ u16 nc_crcpad; /* CRC Value */
897/*e2*/ u8 nc_crccntl0; /* CRC control register */
898 #define SNDCRC 0x10 /* Send CRC Request */
899/*e3*/ u8 nc_crccntl1; /* CRC control register */
900/*e4*/ u32 nc_crcdata; /* CRC data register */
901/*e8*/ u32 nc_e8_; /* rsvd */
902/*ec*/ u32 nc_ec_; /* rsvd */
903/*f0*/ u16 nc_dfbc; /* DMA FIFO byte count */
904
905};
906
907/*-----------------------------------------------------------
908**
909** Utility macros for the script.
910**
911**-----------------------------------------------------------
912*/
913
914#define REGJ(p,r) (offsetof(struct ncr_reg, p ## r))
915#define REG(r) REGJ (nc_, r)
916
917typedef u32 ncrcmd;
918
919/*-----------------------------------------------------------
920**
921** SCSI phases
922**
923** DT phases illegal for ncr driver.
924**
925**-----------------------------------------------------------
926*/
927
928#define SCR_DATA_OUT 0x00000000
929#define SCR_DATA_IN 0x01000000
930#define SCR_COMMAND 0x02000000
931#define SCR_STATUS 0x03000000
932#define SCR_DT_DATA_OUT 0x04000000
933#define SCR_DT_DATA_IN 0x05000000
934#define SCR_MSG_OUT 0x06000000
935#define SCR_MSG_IN 0x07000000
936
937#define SCR_ILG_OUT 0x04000000
938#define SCR_ILG_IN 0x05000000
939
940/*-----------------------------------------------------------
941**
942** Data transfer via SCSI.
943**
944**-----------------------------------------------------------
945**
946** MOVE_ABS (LEN)
947** <<start address>>
948**
949** MOVE_IND (LEN)
950** <<dnad_offset>>
951**
952** MOVE_TBL
953** <<dnad_offset>>
954**
955**-----------------------------------------------------------
956*/
957
958#define OPC_MOVE 0x08000000
959
960#define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l))
961#define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l))
962#define SCR_MOVE_TBL (0x10000000 | OPC_MOVE)
963
964#define SCR_CHMOV_ABS(l) ((0x00000000) | (l))
965#define SCR_CHMOV_IND(l) ((0x20000000) | (l))
966#define SCR_CHMOV_TBL (0x10000000)
967
968struct scr_tblmove {
969 u32 size;
970 u32 addr;
971};
972
973/*-----------------------------------------------------------
974**
975** Selection
976**
977**-----------------------------------------------------------
978**
979** SEL_ABS | SCR_ID (0..15) [ | REL_JMP]
980** <<alternate_address>>
981**
982** SEL_TBL | << dnad_offset>> [ | REL_JMP]
983** <<alternate_address>>
984**
985**-----------------------------------------------------------
986*/
987
988#define SCR_SEL_ABS 0x40000000
989#define SCR_SEL_ABS_ATN 0x41000000
990#define SCR_SEL_TBL 0x42000000
991#define SCR_SEL_TBL_ATN 0x43000000
992
993
994#ifdef SCSI_NCR_BIG_ENDIAN
995struct scr_tblsel {
996 u8 sel_scntl3;
997 u8 sel_id;
998 u8 sel_sxfer;
999 u8 sel_scntl4;
1000};
1001#else
1002struct scr_tblsel {
1003 u8 sel_scntl4;
1004 u8 sel_sxfer;
1005 u8 sel_id;
1006 u8 sel_scntl3;
1007};
1008#endif
1009
1010#define SCR_JMP_REL 0x04000000
1011#define SCR_ID(id) (((u32)(id)) << 16)
1012
1013/*-----------------------------------------------------------
1014**
1015** Waiting for Disconnect or Reselect
1016**
1017**-----------------------------------------------------------
1018**
1019** WAIT_DISC
1020** dummy: <<alternate_address>>
1021**
1022** WAIT_RESEL
1023** <<alternate_address>>
1024**
1025**-----------------------------------------------------------
1026*/
1027
1028#define SCR_WAIT_DISC 0x48000000
1029#define SCR_WAIT_RESEL 0x50000000
1030
1031/*-----------------------------------------------------------
1032**
1033** Bit Set / Reset
1034**
1035**-----------------------------------------------------------
1036**
1037** SET (flags {|.. })
1038**
1039** CLR (flags {|.. })
1040**
1041**-----------------------------------------------------------
1042*/
1043
1044#define SCR_SET(f) (0x58000000 | (f))
1045#define SCR_CLR(f) (0x60000000 | (f))
1046
1047#define SCR_CARRY 0x00000400
1048#define SCR_TRG 0x00000200
1049#define SCR_ACK 0x00000040
1050#define SCR_ATN 0x00000008
1051
1052
1053
1054
1055/*-----------------------------------------------------------
1056**
1057** Memory to memory move
1058**
1059**-----------------------------------------------------------
1060**
1061** COPY (bytecount)
1062** << source_address >>
1063** << destination_address >>
1064**
1065** SCR_COPY sets the NO FLUSH option by default.
1066** SCR_COPY_F does not set this option.
1067**
1068** For chips which do not support this option,
1069** ncr_copy_and_bind() will remove this bit.
1070**-----------------------------------------------------------
1071*/
1072
1073#define SCR_NO_FLUSH 0x01000000
1074
1075#define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n))
1076#define SCR_COPY_F(n) (0xc0000000 | (n))
1077
1078/*-----------------------------------------------------------
1079**
1080** Register move and binary operations
1081**
1082**-----------------------------------------------------------
1083**
1084** SFBR_REG (reg, op, data) reg = SFBR op data
1085** << 0 >>
1086**
1087** REG_SFBR (reg, op, data) SFBR = reg op data
1088** << 0 >>
1089**
1090** REG_REG (reg, op, data) reg = reg op data
1091** << 0 >>
1092**
1093**-----------------------------------------------------------
1094** On 810A, 860, 825A, 875, 895 and 896 chips the content
1095** of SFBR register can be used as data (SCR_SFBR_DATA).
1096** The 896 has additionnal IO registers starting at
1097** offset 0x80. Bit 7 of register offset is stored in
1098** bit 7 of the SCRIPTS instruction first DWORD.
1099**-----------------------------------------------------------
1100*/
1101
1102#define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80))
1103
1104#define SCR_SFBR_REG(reg,op,data) \
1105 (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1106
1107#define SCR_REG_SFBR(reg,op,data) \
1108 (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1109
1110#define SCR_REG_REG(reg,op,data) \
1111 (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1112
1113
1114#define SCR_LOAD 0x00000000
1115#define SCR_SHL 0x01000000
1116#define SCR_OR 0x02000000
1117#define SCR_XOR 0x03000000
1118#define SCR_AND 0x04000000
1119#define SCR_SHR 0x05000000
1120#define SCR_ADD 0x06000000
1121#define SCR_ADDC 0x07000000
1122
1123#define SCR_SFBR_DATA (0x00800000>>8ul) /* Use SFBR as data */
1124
1125/*-----------------------------------------------------------
1126**
1127** FROM_REG (reg) SFBR = reg
1128** << 0 >>
1129**
1130** TO_REG (reg) reg = SFBR
1131** << 0 >>
1132**
1133** LOAD_REG (reg, data) reg = <data>
1134** << 0 >>
1135**
1136** LOAD_SFBR(data) SFBR = <data>
1137** << 0 >>
1138**
1139**-----------------------------------------------------------
1140*/
1141
1142#define SCR_FROM_REG(reg) \
1143 SCR_REG_SFBR(reg,SCR_OR,0)
1144
1145#define SCR_TO_REG(reg) \
1146 SCR_SFBR_REG(reg,SCR_OR,0)
1147
1148#define SCR_LOAD_REG(reg,data) \
1149 SCR_REG_REG(reg,SCR_LOAD,data)
1150
1151#define SCR_LOAD_SFBR(data) \
1152 (SCR_REG_SFBR (gpreg, SCR_LOAD, data))
1153
1154/*-----------------------------------------------------------
1155**
1156** LOAD from memory to register.
1157** STORE from register to memory.
1158**
1159** Only supported by 810A, 860, 825A, 875, 895 and 896.
1160**
1161**-----------------------------------------------------------
1162**
1163** LOAD_ABS (LEN)
1164** <<start address>>
1165**
1166** LOAD_REL (LEN) (DSA relative)
1167** <<dsa_offset>>
1168**
1169**-----------------------------------------------------------
1170*/
1171
1172#define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul)
1173#define SCR_NO_FLUSH2 0x02000000
1174#define SCR_DSA_REL2 0x10000000
1175
1176#define SCR_LOAD_R(reg, how, n) \
1177 (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1178
1179#define SCR_STORE_R(reg, how, n) \
1180 (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1181
1182#define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n)
1183#define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n)
1184#define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n)
1185#define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n)
1186
1187#define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n)
1188#define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n)
1189#define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n)
1190#define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n)
1191
1192
1193/*-----------------------------------------------------------
1194**
1195** Waiting for Disconnect or Reselect
1196**
1197**-----------------------------------------------------------
1198**
1199** JUMP [ | IFTRUE/IFFALSE ( ... ) ]
1200** <<address>>
1201**
1202** JUMPR [ | IFTRUE/IFFALSE ( ... ) ]
1203** <<distance>>
1204**
1205** CALL [ | IFTRUE/IFFALSE ( ... ) ]
1206** <<address>>
1207**
1208** CALLR [ | IFTRUE/IFFALSE ( ... ) ]
1209** <<distance>>
1210**
1211** RETURN [ | IFTRUE/IFFALSE ( ... ) ]
1212** <<dummy>>
1213**
1214** INT [ | IFTRUE/IFFALSE ( ... ) ]
1215** <<ident>>
1216**
1217** INT_FLY [ | IFTRUE/IFFALSE ( ... ) ]
1218** <<ident>>
1219**
1220** Conditions:
1221** WHEN (phase)
1222** IF (phase)
1223** CARRYSET
1224** DATA (data, mask)
1225**
1226**-----------------------------------------------------------
1227*/
1228
1229#define SCR_NO_OP 0x80000000
1230#define SCR_JUMP 0x80080000
1231#define SCR_JUMP64 0x80480000
1232#define SCR_JUMPR 0x80880000
1233#define SCR_CALL 0x88080000
1234#define SCR_CALLR 0x88880000
1235#define SCR_RETURN 0x90080000
1236#define SCR_INT 0x98080000
1237#define SCR_INT_FLY 0x98180000
1238
1239#define IFFALSE(arg) (0x00080000 | (arg))
1240#define IFTRUE(arg) (0x00000000 | (arg))
1241
1242#define WHEN(phase) (0x00030000 | (phase))
1243#define IF(phase) (0x00020000 | (phase))
1244
1245#define DATA(D) (0x00040000 | ((D) & 0xff))
1246#define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff))
1247
1248#define CARRYSET (0x00200000)
1249
1250/*-----------------------------------------------------------
1251**
1252** SCSI constants.
1253**
1254**-----------------------------------------------------------
1255*/
1256
1257/*
1258** Messages
1259*/
1260
1261#define M_COMPLETE COMMAND_COMPLETE
1262#define M_EXTENDED EXTENDED_MESSAGE
1263#define M_SAVE_DP SAVE_POINTERS
1264#define M_RESTORE_DP RESTORE_POINTERS
1265#define M_DISCONNECT DISCONNECT
1266#define M_ID_ERROR INITIATOR_ERROR
1267#define M_ABORT ABORT_TASK_SET
1268#define M_REJECT MESSAGE_REJECT
1269#define M_NOOP NOP
1270#define M_PARITY MSG_PARITY_ERROR
1271#define M_LCOMPLETE LINKED_CMD_COMPLETE
1272#define M_FCOMPLETE LINKED_FLG_CMD_COMPLETE
1273#define M_RESET TARGET_RESET
1274#define M_ABORT_TAG ABORT_TASK
1275#define M_CLEAR_QUEUE CLEAR_TASK_SET
1276#define M_INIT_REC INITIATE_RECOVERY
1277#define M_REL_REC RELEASE_RECOVERY
1278#define M_TERMINATE (0x11)
1279#define M_SIMPLE_TAG SIMPLE_QUEUE_TAG
1280#define M_HEAD_TAG HEAD_OF_QUEUE_TAG
1281#define M_ORDERED_TAG ORDERED_QUEUE_TAG
1282#define M_IGN_RESIDUE IGNORE_WIDE_RESIDUE
1283#define M_IDENTIFY (0x80)
1284
1285#define M_X_MODIFY_DP EXTENDED_MODIFY_DATA_POINTER
1286#define M_X_SYNC_REQ EXTENDED_SDTR
1287#define M_X_WIDE_REQ EXTENDED_WDTR
1288#define M_X_PPR_REQ EXTENDED_PPR
1289
1290/*
1291** Status
1292*/
1293
1294#define S_GOOD (0x00)
1295#define S_CHECK_COND (0x02)
1296#define S_COND_MET (0x04)
1297#define S_BUSY (0x08)
1298#define S_INT (0x10)
1299#define S_INT_COND_MET (0x14)
1300#define S_CONFLICT (0x18)
1301#define S_TERMINATED (0x20)
1302#define S_QUEUE_FULL (0x28)
1303#define S_ILLEGAL (0xff)
1304#define S_SENSE (0x80)
1305
1306/*
1307 * End of ncrreg from FreeBSD
1308 */
48 1309
49/* 1310/*
50 Build a scatter/gather entry. 1311 Build a scatter/gather entry.
diff --git a/drivers/scsi/oktagon_esp.c b/drivers/scsi/oktagon_esp.c
index 5d9c9ada814f..dee426f8c07b 100644
--- a/drivers/scsi/oktagon_esp.c
+++ b/drivers/scsi/oktagon_esp.c
@@ -490,7 +490,7 @@ static void dma_led_on(struct NCR_ESP *esp)
490 490
491static int dma_ports_p(struct NCR_ESP *esp) 491static int dma_ports_p(struct NCR_ESP *esp)
492{ 492{
493 return ((custom.intenar) & IF_PORTS); 493 return ((amiga_custom.intenar) & IF_PORTS);
494} 494}
495 495
496static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write) 496static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write)
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 7c5306499832..0c9edb7051f4 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -95,27 +95,21 @@ typedef struct scsi_info_t {
95} scsi_info_t; 95} scsi_info_t;
96 96
97static void aha152x_release_cs(dev_link_t *link); 97static void aha152x_release_cs(dev_link_t *link);
98static int aha152x_event(event_t event, int priority, 98static void aha152x_detach(struct pcmcia_device *p_dev);
99 event_callback_args_t *args); 99static void aha152x_config_cs(dev_link_t *link);
100
101static dev_link_t *aha152x_attach(void);
102static void aha152x_detach(dev_link_t *);
103 100
104static dev_link_t *dev_list; 101static dev_link_t *dev_list;
105static dev_info_t dev_info = "aha152x_cs";
106 102
107static dev_link_t *aha152x_attach(void) 103static int aha152x_attach(struct pcmcia_device *p_dev)
108{ 104{
109 scsi_info_t *info; 105 scsi_info_t *info;
110 client_reg_t client_reg;
111 dev_link_t *link; 106 dev_link_t *link;
112 int ret;
113 107
114 DEBUG(0, "aha152x_attach()\n"); 108 DEBUG(0, "aha152x_attach()\n");
115 109
116 /* Create new SCSI device */ 110 /* Create new SCSI device */
117 info = kmalloc(sizeof(*info), GFP_KERNEL); 111 info = kmalloc(sizeof(*info), GFP_KERNEL);
118 if (!info) return NULL; 112 if (!info) return -ENOMEM;
119 memset(info, 0, sizeof(*info)); 113 memset(info, 0, sizeof(*info));
120 link = &info->link; link->priv = info; 114 link = &info->link; link->priv = info;
121 115
@@ -129,26 +123,20 @@ static dev_link_t *aha152x_attach(void)
129 link->conf.IntType = INT_MEMORY_AND_IO; 123 link->conf.IntType = INT_MEMORY_AND_IO;
130 link->conf.Present = PRESENT_OPTION; 124 link->conf.Present = PRESENT_OPTION;
131 125
132 /* Register with Card Services */ 126 link->handle = p_dev;
133 link->next = dev_list; 127 p_dev->instance = link;
134 dev_list = link; 128
135 client_reg.dev_info = &dev_info; 129 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
136 client_reg.Version = 0x0210; 130 aha152x_config_cs(link);
137 client_reg.event_callback_args.client_data = link; 131
138 ret = pcmcia_register_client(&link->handle, &client_reg); 132 return 0;
139 if (ret != 0) {
140 cs_error(link->handle, RegisterClient, ret);
141 aha152x_detach(link);
142 return NULL;
143 }
144
145 return link;
146} /* aha152x_attach */ 133} /* aha152x_attach */
147 134
148/*====================================================================*/ 135/*====================================================================*/
149 136
150static void aha152x_detach(dev_link_t *link) 137static void aha152x_detach(struct pcmcia_device *p_dev)
151{ 138{
139 dev_link_t *link = dev_to_instance(p_dev);
152 dev_link_t **linkp; 140 dev_link_t **linkp;
153 141
154 DEBUG(0, "aha152x_detach(0x%p)\n", link); 142 DEBUG(0, "aha152x_detach(0x%p)\n", link);
@@ -162,9 +150,6 @@ static void aha152x_detach(dev_link_t *link)
162 if (link->state & DEV_CONFIG) 150 if (link->state & DEV_CONFIG)
163 aha152x_release_cs(link); 151 aha152x_release_cs(link);
164 152
165 if (link->handle)
166 pcmcia_deregister_client(link->handle);
167
168 /* Unlink device structure, free bits */ 153 /* Unlink device structure, free bits */
169 *linkp = link->next; 154 *linkp = link->next;
170 kfree(link->priv); 155 kfree(link->priv);
@@ -272,44 +257,31 @@ static void aha152x_release_cs(dev_link_t *link)
272 link->state &= ~DEV_CONFIG; 257 link->state &= ~DEV_CONFIG;
273} 258}
274 259
275static int aha152x_event(event_t event, int priority, 260static int aha152x_suspend(struct pcmcia_device *dev)
276 event_callback_args_t *args)
277{ 261{
278 dev_link_t *link = args->client_data; 262 dev_link_t *link = dev_to_instance(dev);
279 scsi_info_t *info = link->priv; 263
280
281 DEBUG(0, "aha152x_event(0x%06x)\n", event);
282
283 switch (event) {
284 case CS_EVENT_CARD_REMOVAL:
285 link->state &= ~DEV_PRESENT;
286 if (link->state & DEV_CONFIG)
287 aha152x_release_cs(link);
288 break;
289 case CS_EVENT_CARD_INSERTION:
290 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
291 aha152x_config_cs(link);
292 break;
293 case CS_EVENT_PM_SUSPEND:
294 link->state |= DEV_SUSPEND; 264 link->state |= DEV_SUSPEND;
295 /* Fall through... */
296 case CS_EVENT_RESET_PHYSICAL:
297 if (link->state & DEV_CONFIG) 265 if (link->state & DEV_CONFIG)
298 pcmcia_release_configuration(link->handle); 266 pcmcia_release_configuration(link->handle);
299 break; 267
300 case CS_EVENT_PM_RESUME: 268 return 0;
269}
270
271static int aha152x_resume(struct pcmcia_device *dev)
272{
273 dev_link_t *link = dev_to_instance(dev);
274 scsi_info_t *info = link->priv;
275
301 link->state &= ~DEV_SUSPEND; 276 link->state &= ~DEV_SUSPEND;
302 /* Fall through... */
303 case CS_EVENT_CARD_RESET:
304 if (link->state & DEV_CONFIG) { 277 if (link->state & DEV_CONFIG) {
305 Scsi_Cmnd tmp; 278 Scsi_Cmnd tmp;
306 pcmcia_request_configuration(link->handle, &link->conf); 279 pcmcia_request_configuration(link->handle, &link->conf);
307 tmp.device->host = info->host; 280 tmp.device->host = info->host;
308 aha152x_host_reset(&tmp); 281 aha152x_host_reset(&tmp);
309 } 282 }
310 break; 283
311 } 284 return 0;
312 return 0;
313} 285}
314 286
315static struct pcmcia_device_id aha152x_ids[] = { 287static struct pcmcia_device_id aha152x_ids[] = {
@@ -327,10 +299,11 @@ static struct pcmcia_driver aha152x_cs_driver = {
327 .drv = { 299 .drv = {
328 .name = "aha152x_cs", 300 .name = "aha152x_cs",
329 }, 301 },
330 .attach = aha152x_attach, 302 .probe = aha152x_attach,
331 .event = aha152x_event, 303 .remove = aha152x_detach,
332 .detach = aha152x_detach,
333 .id_table = aha152x_ids, 304 .id_table = aha152x_ids,
305 .suspend = aha152x_suspend,
306 .resume = aha152x_resume,
334}; 307};
335 308
336static int __init init_aha152x_cs(void) 309static int __init init_aha152x_cs(void)
diff --git a/drivers/scsi/pcmcia/fdomain_stub.c b/drivers/scsi/pcmcia/fdomain_stub.c
index db8f5cd85ffe..788c58d805f3 100644
--- a/drivers/scsi/pcmcia/fdomain_stub.c
+++ b/drivers/scsi/pcmcia/fdomain_stub.c
@@ -80,29 +80,19 @@ typedef struct scsi_info_t {
80 80
81 81
82static void fdomain_release(dev_link_t *link); 82static void fdomain_release(dev_link_t *link);
83static int fdomain_event(event_t event, int priority, 83static void fdomain_detach(struct pcmcia_device *p_dev);
84 event_callback_args_t *args); 84static void fdomain_config(dev_link_t *link);
85 85
86static dev_link_t *fdomain_attach(void); 86static int fdomain_attach(struct pcmcia_device *p_dev)
87static void fdomain_detach(dev_link_t *);
88
89
90static dev_link_t *dev_list = NULL;
91
92static dev_info_t dev_info = "fdomain_cs";
93
94static dev_link_t *fdomain_attach(void)
95{ 87{
96 scsi_info_t *info; 88 scsi_info_t *info;
97 client_reg_t client_reg;
98 dev_link_t *link; 89 dev_link_t *link;
99 int ret; 90
100
101 DEBUG(0, "fdomain_attach()\n"); 91 DEBUG(0, "fdomain_attach()\n");
102 92
103 /* Create new SCSI device */ 93 /* Create new SCSI device */
104 info = kmalloc(sizeof(*info), GFP_KERNEL); 94 info = kmalloc(sizeof(*info), GFP_KERNEL);
105 if (!info) return NULL; 95 if (!info) return -ENOMEM;
106 memset(info, 0, sizeof(*info)); 96 memset(info, 0, sizeof(*info));
107 link = &info->link; link->priv = info; 97 link = &info->link; link->priv = info;
108 link->io.NumPorts1 = 0x10; 98 link->io.NumPorts1 = 0x10;
@@ -115,46 +105,27 @@ static dev_link_t *fdomain_attach(void)
115 link->conf.IntType = INT_MEMORY_AND_IO; 105 link->conf.IntType = INT_MEMORY_AND_IO;
116 link->conf.Present = PRESENT_OPTION; 106 link->conf.Present = PRESENT_OPTION;
117 107
118 /* Register with Card Services */ 108 link->handle = p_dev;
119 link->next = dev_list; 109 p_dev->instance = link;
120 dev_list = link; 110
121 client_reg.dev_info = &dev_info; 111 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
122 client_reg.Version = 0x0210; 112 fdomain_config(link);
123 client_reg.event_callback_args.client_data = link; 113
124 ret = pcmcia_register_client(&link->handle, &client_reg); 114 return 0;
125 if (ret != 0) {
126 cs_error(link->handle, RegisterClient, ret);
127 fdomain_detach(link);
128 return NULL;
129 }
130
131 return link;
132} /* fdomain_attach */ 115} /* fdomain_attach */
133 116
134/*====================================================================*/ 117/*====================================================================*/
135 118
136static void fdomain_detach(dev_link_t *link) 119static void fdomain_detach(struct pcmcia_device *p_dev)
137{ 120{
138 dev_link_t **linkp; 121 dev_link_t *link = dev_to_instance(p_dev);
139 122
140 DEBUG(0, "fdomain_detach(0x%p)\n", link); 123 DEBUG(0, "fdomain_detach(0x%p)\n", link);
141
142 /* Locate device structure */
143 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
144 if (*linkp == link) break;
145 if (*linkp == NULL)
146 return;
147 124
148 if (link->state & DEV_CONFIG) 125 if (link->state & DEV_CONFIG)
149 fdomain_release(link); 126 fdomain_release(link);
150 127
151 if (link->handle) 128 kfree(link->priv);
152 pcmcia_deregister_client(link->handle);
153
154 /* Unlink device structure, free bits */
155 *linkp = link->next;
156 kfree(link->priv);
157
158} /* fdomain_detach */ 129} /* fdomain_detach */
159 130
160/*====================================================================*/ 131/*====================================================================*/
@@ -256,43 +227,29 @@ static void fdomain_release(dev_link_t *link)
256 227
257/*====================================================================*/ 228/*====================================================================*/
258 229
259static int fdomain_event(event_t event, int priority, 230static int fdomain_suspend(struct pcmcia_device *dev)
260 event_callback_args_t *args)
261{ 231{
262 dev_link_t *link = args->client_data; 232 dev_link_t *link = dev_to_instance(dev);
263 233
264 DEBUG(1, "fdomain_event(0x%06x)\n", event);
265
266 switch (event) {
267 case CS_EVENT_CARD_REMOVAL:
268 link->state &= ~DEV_PRESENT;
269 if (link->state & DEV_CONFIG)
270 fdomain_release(link);
271 break;
272 case CS_EVENT_CARD_INSERTION:
273 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
274 fdomain_config(link);
275 break;
276 case CS_EVENT_PM_SUSPEND:
277 link->state |= DEV_SUSPEND; 234 link->state |= DEV_SUSPEND;
278 /* Fall through... */
279 case CS_EVENT_RESET_PHYSICAL:
280 if (link->state & DEV_CONFIG) 235 if (link->state & DEV_CONFIG)
281 pcmcia_release_configuration(link->handle); 236 pcmcia_release_configuration(link->handle);
282 break; 237
283 case CS_EVENT_PM_RESUME: 238 return 0;
239}
240
241static int fdomain_resume(struct pcmcia_device *dev)
242{
243 dev_link_t *link = dev_to_instance(dev);
244
284 link->state &= ~DEV_SUSPEND; 245 link->state &= ~DEV_SUSPEND;
285 /* Fall through... */
286 case CS_EVENT_CARD_RESET:
287 if (link->state & DEV_CONFIG) { 246 if (link->state & DEV_CONFIG) {
288 pcmcia_request_configuration(link->handle, &link->conf); 247 pcmcia_request_configuration(link->handle, &link->conf);
289 fdomain_16x0_bus_reset(NULL); 248 fdomain_16x0_bus_reset(NULL);
290 } 249 }
291 break;
292 }
293 return 0;
294} /* fdomain_event */
295 250
251 return 0;
252}
296 253
297static struct pcmcia_device_id fdomain_ids[] = { 254static struct pcmcia_device_id fdomain_ids[] = {
298 PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "SCSI PCMCIA Card", 0xe3736c88, 0x859cad20), 255 PCMCIA_DEVICE_PROD_ID12("IBM Corp.", "SCSI PCMCIA Card", 0xe3736c88, 0x859cad20),
@@ -307,10 +264,11 @@ static struct pcmcia_driver fdomain_cs_driver = {
307 .drv = { 264 .drv = {
308 .name = "fdomain_cs", 265 .name = "fdomain_cs",
309 }, 266 },
310 .attach = fdomain_attach, 267 .probe = fdomain_attach,
311 .event = fdomain_event, 268 .remove = fdomain_detach,
312 .detach = fdomain_detach,
313 .id_table = fdomain_ids, 269 .id_table = fdomain_ids,
270 .suspend = fdomain_suspend,
271 .resume = fdomain_resume,
314}; 272};
315 273
316static int __init init_fdomain_cs(void) 274static int __init init_fdomain_cs(void)
@@ -321,7 +279,6 @@ static int __init init_fdomain_cs(void)
321static void __exit exit_fdomain_cs(void) 279static void __exit exit_fdomain_cs(void)
322{ 280{
323 pcmcia_unregister_driver(&fdomain_cs_driver); 281 pcmcia_unregister_driver(&fdomain_cs_driver);
324 BUG_ON(dev_list != NULL);
325} 282}
326 283
327module_init(init_fdomain_cs); 284module_init(init_fdomain_cs);
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index 050ea13ff80b..9e3ab3fd5355 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -104,9 +104,6 @@ static struct scsi_host_template nsp_driver_template = {
104#endif 104#endif
105}; 105};
106 106
107static dev_link_t *dev_list = NULL;
108static dev_info_t dev_info = {"nsp_cs"};
109
110static nsp_hw_data nsp_data_base; /* attach <-> detect glue */ 107static nsp_hw_data nsp_data_base; /* attach <-> detect glue */
111 108
112 109
@@ -1596,19 +1593,17 @@ static int nsp_eh_host_reset(Scsi_Cmnd *SCpnt)
1596 configure the card at this point -- we wait until we receive a 1593 configure the card at this point -- we wait until we receive a
1597 card insertion event. 1594 card insertion event.
1598======================================================================*/ 1595======================================================================*/
1599static dev_link_t *nsp_cs_attach(void) 1596static int nsp_cs_attach(struct pcmcia_device *p_dev)
1600{ 1597{
1601 scsi_info_t *info; 1598 scsi_info_t *info;
1602 client_reg_t client_reg;
1603 dev_link_t *link; 1599 dev_link_t *link;
1604 int ret;
1605 nsp_hw_data *data = &nsp_data_base; 1600 nsp_hw_data *data = &nsp_data_base;
1606 1601
1607 nsp_dbg(NSP_DEBUG_INIT, "in"); 1602 nsp_dbg(NSP_DEBUG_INIT, "in");
1608 1603
1609 /* Create new SCSI device */ 1604 /* Create new SCSI device */
1610 info = kmalloc(sizeof(*info), GFP_KERNEL); 1605 info = kmalloc(sizeof(*info), GFP_KERNEL);
1611 if (info == NULL) { return NULL; } 1606 if (info == NULL) { return -ENOMEM; }
1612 memset(info, 0, sizeof(*info)); 1607 memset(info, 0, sizeof(*info));
1613 link = &info->link; 1608 link = &info->link;
1614 link->priv = info; 1609 link->priv = info;
@@ -1636,23 +1631,14 @@ static dev_link_t *nsp_cs_attach(void)
1636 link->conf.IntType = INT_MEMORY_AND_IO; 1631 link->conf.IntType = INT_MEMORY_AND_IO;
1637 link->conf.Present = PRESENT_OPTION; 1632 link->conf.Present = PRESENT_OPTION;
1638 1633
1634 link->handle = p_dev;
1635 p_dev->instance = link;
1639 1636
1640 /* Register with Card Services */ 1637 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
1641 link->next = dev_list; 1638 nsp_cs_config(link);
1642 dev_list = link;
1643 client_reg.dev_info = &dev_info;
1644 client_reg.Version = 0x0210;
1645 client_reg.event_callback_args.client_data = link;
1646 ret = pcmcia_register_client(&link->handle, &client_reg);
1647 if (ret != CS_SUCCESS) {
1648 cs_error(link->handle, RegisterClient, ret);
1649 nsp_cs_detach(link);
1650 return NULL;
1651 }
1652
1653 1639
1654 nsp_dbg(NSP_DEBUG_INIT, "link=0x%p", link); 1640 nsp_dbg(NSP_DEBUG_INIT, "link=0x%p", link);
1655 return link; 1641 return 0;
1656} /* nsp_cs_attach */ 1642} /* nsp_cs_attach */
1657 1643
1658 1644
@@ -1662,35 +1648,19 @@ static dev_link_t *nsp_cs_attach(void)
1662 structures are freed. Otherwise, the structures will be freed 1648 structures are freed. Otherwise, the structures will be freed
1663 when the device is released. 1649 when the device is released.
1664======================================================================*/ 1650======================================================================*/
1665static void nsp_cs_detach(dev_link_t *link) 1651static void nsp_cs_detach(struct pcmcia_device *p_dev)
1666{ 1652{
1667 dev_link_t **linkp; 1653 dev_link_t *link = dev_to_instance(p_dev);
1668 1654
1669 nsp_dbg(NSP_DEBUG_INIT, "in, link=0x%p", link); 1655 nsp_dbg(NSP_DEBUG_INIT, "in, link=0x%p", link);
1670 1656
1671 /* Locate device structure */ 1657 if (link->state & DEV_CONFIG) {
1672 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next) { 1658 ((scsi_info_t *)link->priv)->stop = 1;
1673 if (*linkp == link) {
1674 break;
1675 }
1676 }
1677 if (*linkp == NULL) {
1678 return;
1679 }
1680
1681 if (link->state & DEV_CONFIG)
1682 nsp_cs_release(link); 1659 nsp_cs_release(link);
1683
1684 /* Break the link with Card Services */
1685 if (link->handle) {
1686 pcmcia_deregister_client(link->handle);
1687 } 1660 }
1688 1661
1689 /* Unlink device structure, free bits */
1690 *linkp = link->next;
1691 kfree(link->priv); 1662 kfree(link->priv);
1692 link->priv = NULL; 1663 link->priv = NULL;
1693
1694} /* nsp_cs_detach */ 1664} /* nsp_cs_detach */
1695 1665
1696 1666
@@ -2021,99 +1991,58 @@ static void nsp_cs_release(dev_link_t *link)
2021#endif 1991#endif
2022} /* nsp_cs_release */ 1992} /* nsp_cs_release */
2023 1993
2024/*====================================================================== 1994static int nsp_cs_suspend(struct pcmcia_device *dev)
2025
2026 The card status event handler. Mostly, this schedules other
2027 stuff to run after an event is received. A CARD_REMOVAL event
2028 also sets some flags to discourage the net drivers from trying
2029 to talk to the card any more.
2030
2031 When a CARD_REMOVAL event is received, we immediately set a flag
2032 to block future accesses to this device. All the functions that
2033 actually access the device should check this flag to make sure
2034 the card is still present.
2035
2036======================================================================*/
2037static int nsp_cs_event(event_t event,
2038 int priority,
2039 event_callback_args_t *args)
2040{ 1995{
2041 dev_link_t *link = args->client_data; 1996 dev_link_t *link = dev_to_instance(dev);
2042 scsi_info_t *info = link->priv; 1997 scsi_info_t *info = link->priv;
2043 nsp_hw_data *data; 1998 nsp_hw_data *data;
2044 1999
2045 nsp_dbg(NSP_DEBUG_INIT, "in, event=0x%08x", event); 2000 link->state |= DEV_SUSPEND;
2046 2001
2047 switch (event) { 2002 nsp_dbg(NSP_DEBUG_INIT, "event: suspend");
2048 case CS_EVENT_CARD_REMOVAL:
2049 nsp_dbg(NSP_DEBUG_INIT, "event: remove");
2050 link->state &= ~DEV_PRESENT;
2051 if (link->state & DEV_CONFIG) {
2052 ((scsi_info_t *)link->priv)->stop = 1;
2053 nsp_cs_release(link);
2054 }
2055 break;
2056 2003
2057 case CS_EVENT_CARD_INSERTION: 2004 if (info->host != NULL) {
2058 nsp_dbg(NSP_DEBUG_INIT, "event: insert"); 2005 nsp_msg(KERN_INFO, "clear SDTR status");
2059 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
2060#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68))
2061 info->bus = args->bus;
2062#endif
2063 nsp_cs_config(link);
2064 break;
2065 2006
2066 case CS_EVENT_PM_SUSPEND: 2007 data = (nsp_hw_data *)info->host->hostdata;
2067 nsp_dbg(NSP_DEBUG_INIT, "event: suspend");
2068 link->state |= DEV_SUSPEND;
2069 /* Fall through... */
2070 case CS_EVENT_RESET_PHYSICAL:
2071 /* Mark the device as stopped, to block IO until later */
2072 nsp_dbg(NSP_DEBUG_INIT, "event: reset physical");
2073 2008
2074 if (info->host != NULL) { 2009 nsphw_init_sync(data);
2075 nsp_msg(KERN_INFO, "clear SDTR status"); 2010 }
2076 2011
2077 data = (nsp_hw_data *)info->host->hostdata; 2012 info->stop = 1;
2078 2013
2079 nsphw_init_sync(data); 2014 if (link->state & DEV_CONFIG)
2080 } 2015 pcmcia_release_configuration(link->handle);
2081 2016
2082 info->stop = 1; 2017 return 0;
2083 if (link->state & DEV_CONFIG) { 2018}
2084 pcmcia_release_configuration(link->handle);
2085 }
2086 break;
2087 2019
2088 case CS_EVENT_PM_RESUME: 2020static int nsp_cs_resume(struct pcmcia_device *dev)
2089 nsp_dbg(NSP_DEBUG_INIT, "event: resume"); 2021{
2090 link->state &= ~DEV_SUSPEND; 2022 dev_link_t *link = dev_to_instance(dev);
2091 /* Fall through... */ 2023 scsi_info_t *info = link->priv;
2092 case CS_EVENT_CARD_RESET: 2024 nsp_hw_data *data;
2093 nsp_dbg(NSP_DEBUG_INIT, "event: reset");
2094 if (link->state & DEV_CONFIG) {
2095 pcmcia_request_configuration(link->handle, &link->conf);
2096 }
2097 info->stop = 0;
2098 2025
2099 if (info->host != NULL) { 2026 nsp_dbg(NSP_DEBUG_INIT, "event: resume");
2100 nsp_msg(KERN_INFO, "reset host and bus");
2101 2027
2102 data = (nsp_hw_data *)info->host->hostdata; 2028 link->state &= ~DEV_SUSPEND;
2103 2029
2104 nsphw_init (data); 2030 if (link->state & DEV_CONFIG)
2105 nsp_bus_reset(data); 2031 pcmcia_request_configuration(link->handle, &link->conf);
2106 }
2107 2032
2108 break; 2033 info->stop = 0;
2109 2034
2110 default: 2035 if (info->host != NULL) {
2111 nsp_dbg(NSP_DEBUG_INIT, "event: unknown"); 2036 nsp_msg(KERN_INFO, "reset host and bus");
2112 break; 2037
2038 data = (nsp_hw_data *)info->host->hostdata;
2039
2040 nsphw_init (data);
2041 nsp_bus_reset(data);
2113 } 2042 }
2114 nsp_dbg(NSP_DEBUG_INIT, "end"); 2043
2115 return 0; 2044 return 0;
2116} /* nsp_cs_event */ 2045}
2117 2046
2118/*======================================================================* 2047/*======================================================================*
2119 * module entry point 2048 * module entry point
@@ -2136,10 +2065,11 @@ static struct pcmcia_driver nsp_driver = {
2136 .drv = { 2065 .drv = {
2137 .name = "nsp_cs", 2066 .name = "nsp_cs",
2138 }, 2067 },
2139 .attach = nsp_cs_attach, 2068 .probe = nsp_cs_attach,
2140 .event = nsp_cs_event, 2069 .remove = nsp_cs_detach,
2141 .detach = nsp_cs_detach,
2142 .id_table = nsp_cs_ids, 2070 .id_table = nsp_cs_ids,
2071 .suspend = nsp_cs_suspend,
2072 .resume = nsp_cs_resume,
2143}; 2073};
2144#endif 2074#endif
2145 2075
@@ -2171,7 +2101,6 @@ static void __exit nsp_cs_exit(void)
2171 2101
2172#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,68)) 2102#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,68))
2173 pcmcia_unregister_driver(&nsp_driver); 2103 pcmcia_unregister_driver(&nsp_driver);
2174 BUG_ON(dev_list != NULL);
2175#else 2104#else
2176 unregister_pcmcia_driver(&dev_info); 2105 unregister_pcmcia_driver(&dev_info);
2177 /* XXX: this really needs to move into generic code.. */ 2106 /* XXX: this really needs to move into generic code.. */
diff --git a/drivers/scsi/pcmcia/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h
index f8b943082717..b66b140a745e 100644
--- a/drivers/scsi/pcmcia/nsp_cs.h
+++ b/drivers/scsi/pcmcia/nsp_cs.h
@@ -296,11 +296,9 @@ typedef struct _nsp_hw_data {
296 */ 296 */
297 297
298/* Card service functions */ 298/* Card service functions */
299static dev_link_t *nsp_cs_attach (void); 299static void nsp_cs_detach (struct pcmcia_device *p_dev);
300static void nsp_cs_detach (dev_link_t *link);
301static void nsp_cs_release(dev_link_t *link); 300static void nsp_cs_release(dev_link_t *link);
302static void nsp_cs_config (dev_link_t *link); 301static void nsp_cs_config (dev_link_t *link);
303static int nsp_cs_event (event_t event, int priority, event_callback_args_t *args);
304 302
305/* Linux SCSI subsystem specific functions */ 303/* Linux SCSI subsystem specific functions */
306static struct Scsi_Host *nsp_detect (struct scsi_host_template *sht); 304static struct Scsi_Host *nsp_detect (struct scsi_host_template *sht);
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
index bb091a45a880..dce7e687fd4a 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -98,15 +98,8 @@ typedef struct scsi_info_t {
98} scsi_info_t; 98} scsi_info_t;
99 99
100static void qlogic_release(dev_link_t *link); 100static void qlogic_release(dev_link_t *link);
101static int qlogic_event(event_t event, int priority, event_callback_args_t * args); 101static void qlogic_detach(struct pcmcia_device *p_dev);
102 102static void qlogic_config(dev_link_t * link);
103static dev_link_t *qlogic_attach(void);
104static void qlogic_detach(dev_link_t *);
105
106
107static dev_link_t *dev_list = NULL;
108
109static dev_info_t dev_info = "qlogic_cs";
110 103
111static struct Scsi_Host *qlogic_detect(struct scsi_host_template *host, 104static struct Scsi_Host *qlogic_detect(struct scsi_host_template *host,
112 dev_link_t *link, int qbase, int qlirq) 105 dev_link_t *link, int qbase, int qlirq)
@@ -163,19 +156,17 @@ free_scsi_host:
163err: 156err:
164 return NULL; 157 return NULL;
165} 158}
166static dev_link_t *qlogic_attach(void) 159static int qlogic_attach(struct pcmcia_device *p_dev)
167{ 160{
168 scsi_info_t *info; 161 scsi_info_t *info;
169 client_reg_t client_reg;
170 dev_link_t *link; 162 dev_link_t *link;
171 int ret;
172 163
173 DEBUG(0, "qlogic_attach()\n"); 164 DEBUG(0, "qlogic_attach()\n");
174 165
175 /* Create new SCSI device */ 166 /* Create new SCSI device */
176 info = kmalloc(sizeof(*info), GFP_KERNEL); 167 info = kmalloc(sizeof(*info), GFP_KERNEL);
177 if (!info) 168 if (!info)
178 return NULL; 169 return -ENOMEM;
179 memset(info, 0, sizeof(*info)); 170 memset(info, 0, sizeof(*info));
180 link = &info->link; 171 link = &info->link;
181 link->priv = info; 172 link->priv = info;
@@ -189,45 +180,26 @@ static dev_link_t *qlogic_attach(void)
189 link->conf.IntType = INT_MEMORY_AND_IO; 180 link->conf.IntType = INT_MEMORY_AND_IO;
190 link->conf.Present = PRESENT_OPTION; 181 link->conf.Present = PRESENT_OPTION;
191 182
192 /* Register with Card Services */ 183 link->handle = p_dev;
193 link->next = dev_list; 184 p_dev->instance = link;
194 dev_list = link;
195 client_reg.dev_info = &dev_info;
196 client_reg.Version = 0x0210;
197 client_reg.event_callback_args.client_data = link;
198 ret = pcmcia_register_client(&link->handle, &client_reg);
199 if (ret != 0) {
200 cs_error(link->handle, RegisterClient, ret);
201 qlogic_detach(link);
202 return NULL;
203 }
204 185
205 return link; 186 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
187 qlogic_config(link);
188
189 return 0;
206} /* qlogic_attach */ 190} /* qlogic_attach */
207 191
208/*====================================================================*/ 192/*====================================================================*/
209 193
210static void qlogic_detach(dev_link_t * link) 194static void qlogic_detach(struct pcmcia_device *p_dev)
211{ 195{
212 dev_link_t **linkp; 196 dev_link_t *link = dev_to_instance(p_dev);
213 197
214 DEBUG(0, "qlogic_detach(0x%p)\n", link); 198 DEBUG(0, "qlogic_detach(0x%p)\n", link);
215 199
216 /* Locate device structure */
217 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
218 if (*linkp == link)
219 break;
220 if (*linkp == NULL)
221 return;
222
223 if (link->state & DEV_CONFIG) 200 if (link->state & DEV_CONFIG)
224 qlogic_release(link); 201 qlogic_release(link);
225 202
226 if (link->handle)
227 pcmcia_deregister_client(link->handle);
228
229 /* Unlink device structure, free bits */
230 *linkp = link->next;
231 kfree(link->priv); 203 kfree(link->priv);
232 204
233} /* qlogic_detach */ 205} /* qlogic_detach */
@@ -349,48 +321,39 @@ static void qlogic_release(dev_link_t *link)
349 321
350/*====================================================================*/ 322/*====================================================================*/
351 323
352static int qlogic_event(event_t event, int priority, event_callback_args_t * args) 324static int qlogic_suspend(struct pcmcia_device *dev)
353{ 325{
354 dev_link_t *link = args->client_data; 326 dev_link_t *link = dev_to_instance(dev);
355 327
356 DEBUG(1, "qlogic_event(0x%06x)\n", event); 328 link->state |= DEV_SUSPEND;
357 329 if (link->state & DEV_CONFIG)
358 switch (event) { 330 pcmcia_release_configuration(link->handle);
359 case CS_EVENT_CARD_REMOVAL: 331
360 link->state &= ~DEV_PRESENT; 332 return 0;
361 if (link->state & DEV_CONFIG) 333}
362 qlogic_release(link); 334
363 break; 335static int qlogic_resume(struct pcmcia_device *dev)
364 case CS_EVENT_CARD_INSERTION: 336{
365 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; 337 dev_link_t *link = dev_to_instance(dev);
366 qlogic_config(link); 338
367 break; 339 link->state &= ~DEV_SUSPEND;
368 case CS_EVENT_PM_SUSPEND: 340 if (link->state & DEV_CONFIG) {
369 link->state |= DEV_SUSPEND; 341 scsi_info_t *info = link->priv;
370 /* Fall through... */ 342
371 case CS_EVENT_RESET_PHYSICAL: 343 pcmcia_request_configuration(link->handle, &link->conf);
372 if (link->state & DEV_CONFIG) 344 if ((info->manf_id == MANFID_MACNICA) ||
373 pcmcia_release_configuration(link->handle); 345 (info->manf_id == MANFID_PIONEER) ||
374 break; 346 (info->manf_id == 0x0098)) {
375 case CS_EVENT_PM_RESUME: 347 outb(0x80, link->io.BasePort1 + 0xd);
376 link->state &= ~DEV_SUSPEND; 348 outb(0x24, link->io.BasePort1 + 0x9);
377 /* Fall through... */ 349 outb(0x04, link->io.BasePort1 + 0xd);
378 case CS_EVENT_CARD_RESET:
379 if (link->state & DEV_CONFIG) {
380 scsi_info_t *info = link->priv;
381 pcmcia_request_configuration(link->handle, &link->conf);
382 if ((info->manf_id == MANFID_MACNICA) || (info->manf_id == MANFID_PIONEER) || (info->manf_id == 0x0098)) {
383 outb(0x80, link->io.BasePort1 + 0xd);
384 outb(0x24, link->io.BasePort1 + 0x9);
385 outb(0x04, link->io.BasePort1 + 0xd);
386 }
387 /* Ugggglllyyyy!!! */
388 qlogicfas408_bus_reset(NULL);
389 } 350 }
390 break; 351 /* Ugggglllyyyy!!! */
352 qlogicfas408_bus_reset(NULL);
391 } 353 }
354
392 return 0; 355 return 0;
393} /* qlogic_event */ 356}
394 357
395static struct pcmcia_device_id qlogic_ids[] = { 358static struct pcmcia_device_id qlogic_ids[] = {
396 PCMCIA_DEVICE_PROD_ID12("EIger Labs", "PCMCIA-to-SCSI Adapter", 0x88395fa7, 0x33b7a5e6), 359 PCMCIA_DEVICE_PROD_ID12("EIger Labs", "PCMCIA-to-SCSI Adapter", 0x88395fa7, 0x33b7a5e6),
@@ -419,10 +382,11 @@ static struct pcmcia_driver qlogic_cs_driver = {
419 .drv = { 382 .drv = {
420 .name = "qlogic_cs", 383 .name = "qlogic_cs",
421 }, 384 },
422 .attach = qlogic_attach, 385 .probe = qlogic_attach,
423 .event = qlogic_event, 386 .remove = qlogic_detach,
424 .detach = qlogic_detach,
425 .id_table = qlogic_ids, 387 .id_table = qlogic_ids,
388 .suspend = qlogic_suspend,
389 .resume = qlogic_resume,
426}; 390};
427 391
428static int __init init_qlogic_cs(void) 392static int __init init_qlogic_cs(void)
@@ -433,7 +397,6 @@ static int __init init_qlogic_cs(void)
433static void __exit exit_qlogic_cs(void) 397static void __exit exit_qlogic_cs(void)
434{ 398{
435 pcmcia_unregister_driver(&qlogic_cs_driver); 399 pcmcia_unregister_driver(&qlogic_cs_driver);
436 BUG_ON(dev_list != NULL);
437} 400}
438 401
439MODULE_AUTHOR("Tom Zerucha, Michael Griffith"); 402MODULE_AUTHOR("Tom Zerucha, Michael Griffith");
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index 98b64b2aa8ee..3a4dd6f5b81f 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -228,15 +228,6 @@ enum Phase {
228 228
229/* ================================================================== */ 229/* ================================================================== */
230 230
231/*
232* Global (within this module) variables other than
233* sym53c500_driver_template (the scsi_host_template).
234*/
235static dev_link_t *dev_list;
236static dev_info_t dev_info = "sym53c500_cs";
237
238/* ================================================================== */
239
240static void 231static void
241chip_init(int io_port) 232chip_init(int io_port)
242{ 233{
@@ -872,96 +863,70 @@ cs_failed:
872 return; 863 return;
873} /* SYM53C500_config */ 864} /* SYM53C500_config */
874 865
875static int 866static int sym53c500_suspend(struct pcmcia_device *dev)
876SYM53C500_event(event_t event, int priority, event_callback_args_t *args)
877{ 867{
878 dev_link_t *link = args->client_data; 868 dev_link_t *link = dev_to_instance(dev);
879 struct scsi_info_t *info = link->priv;
880 869
881 DEBUG(1, "SYM53C500_event(0x%06x)\n", event); 870 link->state |= DEV_SUSPEND;
871 if (link->state & DEV_CONFIG)
872 pcmcia_release_configuration(link->handle);
882 873
883 switch (event) { 874 return 0;
884 case CS_EVENT_CARD_REMOVAL: 875}
885 link->state &= ~DEV_PRESENT; 876
886 if (link->state & DEV_CONFIG) 877static int sym53c500_resume(struct pcmcia_device *dev)
887 SYM53C500_release(link); 878{
888 break; 879 dev_link_t *link = dev_to_instance(dev);
889 case CS_EVENT_CARD_INSERTION: 880 struct scsi_info_t *info = link->priv;
890 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; 881
891 SYM53C500_config(link); 882 link->state &= ~DEV_SUSPEND;
892 break; 883 if (link->state & DEV_CONFIG) {
893 case CS_EVENT_PM_SUSPEND: 884 pcmcia_request_configuration(link->handle, &link->conf);
894 link->state |= DEV_SUSPEND; 885
895 /* Fall through... */ 886 /* See earlier comment about manufacturer IDs. */
896 case CS_EVENT_RESET_PHYSICAL: 887 if ((info->manf_id == MANFID_MACNICA) ||
897 if (link->state & DEV_CONFIG) 888 (info->manf_id == MANFID_PIONEER) ||
898 pcmcia_release_configuration(link->handle); 889 (info->manf_id == 0x0098)) {
899 break; 890 outb(0x80, link->io.BasePort1 + 0xd);
900 case CS_EVENT_PM_RESUME: 891 outb(0x24, link->io.BasePort1 + 0x9);
901 link->state &= ~DEV_SUSPEND; 892 outb(0x04, link->io.BasePort1 + 0xd);
902 /* Fall through... */
903 case CS_EVENT_CARD_RESET:
904 if (link->state & DEV_CONFIG) {
905 pcmcia_request_configuration(link->handle, &link->conf);
906 /* See earlier comment about manufacturer IDs. */
907 if ((info->manf_id == MANFID_MACNICA) ||
908 (info->manf_id == MANFID_PIONEER) ||
909 (info->manf_id == 0x0098)) {
910 outb(0x80, link->io.BasePort1 + 0xd);
911 outb(0x24, link->io.BasePort1 + 0x9);
912 outb(0x04, link->io.BasePort1 + 0xd);
913 }
914 /*
915 * If things don't work after a "resume",
916 * this is a good place to start looking.
917 */
918 SYM53C500_int_host_reset(link->io.BasePort1);
919 } 893 }
920 break; 894 /*
895 * If things don't work after a "resume",
896 * this is a good place to start looking.
897 */
898 SYM53C500_int_host_reset(link->io.BasePort1);
921 } 899 }
900
922 return 0; 901 return 0;
923} /* SYM53C500_event */ 902}
924 903
925static void 904static void
926SYM53C500_detach(dev_link_t *link) 905SYM53C500_detach(struct pcmcia_device *p_dev)
927{ 906{
928 dev_link_t **linkp; 907 dev_link_t *link = dev_to_instance(p_dev);
929 908
930 DEBUG(0, "SYM53C500_detach(0x%p)\n", link); 909 DEBUG(0, "SYM53C500_detach(0x%p)\n", link);
931 910
932 /* Locate device structure */
933 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
934 if (*linkp == link)
935 break;
936 if (*linkp == NULL)
937 return;
938
939 if (link->state & DEV_CONFIG) 911 if (link->state & DEV_CONFIG)
940 SYM53C500_release(link); 912 SYM53C500_release(link);
941 913
942 if (link->handle)
943 pcmcia_deregister_client(link->handle);
944
945 /* Unlink device structure, free bits. */
946 *linkp = link->next;
947 kfree(link->priv); 914 kfree(link->priv);
948 link->priv = NULL; 915 link->priv = NULL;
949} /* SYM53C500_detach */ 916} /* SYM53C500_detach */
950 917
951static dev_link_t * 918static int
952SYM53C500_attach(void) 919SYM53C500_attach(struct pcmcia_device *p_dev)
953{ 920{
954 struct scsi_info_t *info; 921 struct scsi_info_t *info;
955 client_reg_t client_reg;
956 dev_link_t *link; 922 dev_link_t *link;
957 int ret;
958 923
959 DEBUG(0, "SYM53C500_attach()\n"); 924 DEBUG(0, "SYM53C500_attach()\n");
960 925
961 /* Create new SCSI device */ 926 /* Create new SCSI device */
962 info = kmalloc(sizeof(*info), GFP_KERNEL); 927 info = kmalloc(sizeof(*info), GFP_KERNEL);
963 if (!info) 928 if (!info)
964 return NULL; 929 return -ENOMEM;
965 memset(info, 0, sizeof(*info)); 930 memset(info, 0, sizeof(*info));
966 link = &info->link; 931 link = &info->link;
967 link->priv = info; 932 link->priv = info;
@@ -975,20 +940,13 @@ SYM53C500_attach(void)
975 link->conf.IntType = INT_MEMORY_AND_IO; 940 link->conf.IntType = INT_MEMORY_AND_IO;
976 link->conf.Present = PRESENT_OPTION; 941 link->conf.Present = PRESENT_OPTION;
977 942
978 /* Register with Card Services */ 943 link->handle = p_dev;
979 link->next = dev_list; 944 p_dev->instance = link;
980 dev_list = link; 945
981 client_reg.dev_info = &dev_info; 946 link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
982 client_reg.Version = 0x0210; 947 SYM53C500_config(link);
983 client_reg.event_callback_args.client_data = link;
984 ret = pcmcia_register_client(&link->handle, &client_reg);
985 if (ret != 0) {
986 cs_error(link->handle, RegisterClient, ret);
987 SYM53C500_detach(link);
988 return NULL;
989 }
990 948
991 return link; 949 return 0;
992} /* SYM53C500_attach */ 950} /* SYM53C500_attach */
993 951
994MODULE_AUTHOR("Bob Tracy <rct@frus.com>"); 952MODULE_AUTHOR("Bob Tracy <rct@frus.com>");
@@ -1008,10 +966,11 @@ static struct pcmcia_driver sym53c500_cs_driver = {
1008 .drv = { 966 .drv = {
1009 .name = "sym53c500_cs", 967 .name = "sym53c500_cs",
1010 }, 968 },
1011 .attach = SYM53C500_attach, 969 .probe = SYM53C500_attach,
1012 .event = SYM53C500_event, 970 .remove = SYM53C500_detach,
1013 .detach = SYM53C500_detach,
1014 .id_table = sym53c500_ids, 971 .id_table = sym53c500_ids,
972 .suspend = sym53c500_suspend,
973 .resume = sym53c500_resume,
1015}; 974};
1016 975
1017static int __init 976static int __init
diff --git a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig
index c1c1c687bcbd..5758b2566d7f 100644
--- a/drivers/scsi/qla2xxx/Kconfig
+++ b/drivers/scsi/qla2xxx/Kconfig
@@ -1,55 +1,78 @@
1config SCSI_QLA2XXX 1config SCSI_QLA_FC
2 tristate 2 tristate "QLogic QLA2XXX Fibre Channel Support"
3 default (SCSI && PCI) 3 depends on PCI && SCSI
4 depends on SCSI && PCI 4 select SCSI_FC_ATTRS
5 select FW_LOADER
6 ---help---
7 This qla2xxx driver supports all QLogic Fibre Channel
8 PCI and PCIe host adapters.
9
10 By default, firmware for the ISP parts will be loaded
11 via the Firmware Loader interface.
12
13 ISP Firmware Filename
14 ---------- -----------------
15 21xx ql2100_fw.bin
16 22xx ql2200_fw.bin
17 2300, 2312 ql2300_fw.bin
18 2322 ql2322_fw.bin
19 6312, 6322 ql6312_fw.bin
20 24xx ql2400_fw.bin
21
22 Upon request, the driver caches the firmware image until
23 the driver is unloaded.
24
25 Firmware images can be retrieved from:
26
27 ftp://ftp.qlogic.com/outgoing/linux/firmware/
28
29 NOTE: The original method of building firmware-loader
30 modules has been deprecated as the firmware-images will
31 be removed from the kernel sources.
32
33config SCSI_QLA2XXX_EMBEDDED_FIRMWARE
34 bool " Use firmware-loader modules (DEPRECATED)"
35 depends on SCSI_QLA_FC
36 help
37 This option offers you the deprecated firmware-loader
38 modules that have been obsoleted by the usage of the
39 Firmware Loader interface in the qla2xxx driver.
5 40
6config SCSI_QLA21XX 41config SCSI_QLA21XX
7 tristate "QLogic ISP2100 host adapter family support" 42 tristate " Build QLogic ISP2100 firmware-module"
8 depends on SCSI_QLA2XXX 43 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
9 select SCSI_FC_ATTRS
10 select FW_LOADER
11 ---help--- 44 ---help---
12 This driver supports the QLogic 21xx (ISP2100) host adapter family. 45 This driver supports the QLogic 21xx (ISP2100) host adapter family.
13 46
14config SCSI_QLA22XX 47config SCSI_QLA22XX
15 tristate "QLogic ISP2200 host adapter family support" 48 tristate " Build QLogic ISP2200 firmware-module"
16 depends on SCSI_QLA2XXX 49 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
17 select SCSI_FC_ATTRS
18 select FW_LOADER
19 ---help--- 50 ---help---
20 This driver supports the QLogic 22xx (ISP2200) host adapter family. 51 This driver supports the QLogic 22xx (ISP2200) host adapter family.
21 52
22config SCSI_QLA2300 53config SCSI_QLA2300
23 tristate "QLogic ISP2300 host adapter family support" 54 tristate " Build QLogic ISP2300 firmware-module"
24 depends on SCSI_QLA2XXX 55 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
25 select SCSI_FC_ATTRS
26 select FW_LOADER
27 ---help--- 56 ---help---
28 This driver supports the QLogic 2300 (ISP2300 and ISP2312) host 57 This driver supports the QLogic 2300 (ISP2300 and ISP2312) host
29 adapter family. 58 adapter family.
30 59
31config SCSI_QLA2322 60config SCSI_QLA2322
32 tristate "QLogic ISP2322 host adapter family support" 61 tristate " Build QLogic ISP2322 firmware-module"
33 depends on SCSI_QLA2XXX 62 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
34 select SCSI_FC_ATTRS
35 select FW_LOADER
36 ---help--- 63 ---help---
37 This driver supports the QLogic 2322 (ISP2322) host adapter family. 64 This driver supports the QLogic 2322 (ISP2322) host adapter family.
38 65
39config SCSI_QLA6312 66config SCSI_QLA6312
40 tristate "QLogic ISP63xx host adapter family support" 67 tristate " Build QLogic ISP63xx firmware-module"
41 depends on SCSI_QLA2XXX 68 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
42 select SCSI_FC_ATTRS
43 select FW_LOADER
44 ---help--- 69 ---help---
45 This driver supports the QLogic 63xx (ISP6312 and ISP6322) host 70 This driver supports the QLogic 63xx (ISP6312 and ISP6322) host
46 adapter family. 71 adapter family.
47 72
48config SCSI_QLA24XX 73config SCSI_QLA24XX
49 tristate "QLogic ISP24xx host adapter family support" 74 tristate " Build QLogic ISP24xx firmware-module"
50 depends on SCSI_QLA2XXX 75 depends on SCSI_QLA_FC && SCSI_QLA2XXX_EMBEDDED_FIRMWARE
51 select SCSI_FC_ATTRS
52 select FW_LOADER
53 ---help--- 76 ---help---
54 This driver supports the QLogic 24xx (ISP2422 and ISP2432) host 77 This driver supports the QLogic 24xx (ISP2422 and ISP2432) host
55 adapter family. 78 adapter family.
diff --git a/drivers/scsi/qla2xxx/Makefile b/drivers/scsi/qla2xxx/Makefile
index b169687d08ff..d028bc50ccf7 100644
--- a/drivers/scsi/qla2xxx/Makefile
+++ b/drivers/scsi/qla2xxx/Makefile
@@ -3,15 +3,18 @@ EXTRA_CFLAGS += -DUNIQUE_FW_NAME
3qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ 3qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \
4 qla_dbg.o qla_sup.o qla_rscn.o qla_attr.o 4 qla_dbg.o qla_sup.o qla_rscn.o qla_attr.o
5 5
6obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o
7
6qla2100-y := ql2100.o ql2100_fw.o 8qla2100-y := ql2100.o ql2100_fw.o
7qla2200-y := ql2200.o ql2200_fw.o 9qla2200-y := ql2200.o ql2200_fw.o
8qla2300-y := ql2300.o ql2300_fw.o 10qla2300-y := ql2300.o ql2300_fw.o
9qla2322-y := ql2322.o ql2322_fw.o 11qla2322-y := ql2322.o ql2322_fw.o
10qla6312-y := ql6312.o ql6312_fw.o 12qla6312-y := ql6312.o ql6312_fw.o
13qla2400-y := ql2400.o ql2400_fw.o
11 14
12obj-$(CONFIG_SCSI_QLA21XX) += qla2xxx.o qla2100.o 15obj-$(CONFIG_SCSI_QLA21XX) += qla2xxx.o qla2100.o
13obj-$(CONFIG_SCSI_QLA22XX) += qla2xxx.o qla2200.o 16obj-$(CONFIG_SCSI_QLA22XX) += qla2xxx.o qla2200.o
14obj-$(CONFIG_SCSI_QLA2300) += qla2xxx.o qla2300.o 17obj-$(CONFIG_SCSI_QLA2300) += qla2xxx.o qla2300.o
15obj-$(CONFIG_SCSI_QLA2322) += qla2xxx.o qla2322.o 18obj-$(CONFIG_SCSI_QLA2322) += qla2xxx.o qla2322.o
16obj-$(CONFIG_SCSI_QLA6312) += qla2xxx.o qla6312.o 19obj-$(CONFIG_SCSI_QLA6312) += qla2xxx.o qla6312.o
17obj-$(CONFIG_SCSI_QLA24XX) += qla2xxx.o 20obj-$(CONFIG_SCSI_QLA24XX) += qla2xxx.o qla2400.o
diff --git a/drivers/scsi/qla2xxx/ql2400.c b/drivers/scsi/qla2xxx/ql2400.c
new file mode 100644
index 000000000000..6c7165f47e29
--- /dev/null
+++ b/drivers/scsi/qla2xxx/ql2400.c
@@ -0,0 +1,111 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include <linux/init.h>
8#include <linux/module.h>
9#include <linux/pci.h>
10
11#include "qla_def.h"
12
13static char qla_driver_name[] = "qla2400";
14
15extern uint32_t fw2400_version_str[];
16extern uint32_t fw2400_addr01;
17extern uint32_t fw2400_code01[];
18extern uint32_t fw2400_length01;
19extern uint32_t fw2400_addr02;
20extern uint32_t fw2400_code02[];
21extern uint32_t fw2400_length02;
22
23static struct qla_fw_info qla_fw_tbl[] = {
24 {
25 .addressing = FW_INFO_ADDR_EXTENDED,
26 .fwcode = (unsigned short *)&fw2400_code01[0],
27 .fwlen = (unsigned short *)&fw2400_length01,
28 .lfwstart = (unsigned long *)&fw2400_addr01,
29 },
30 {
31 .addressing = FW_INFO_ADDR_EXTENDED,
32 .fwcode = (unsigned short *)&fw2400_code02[0],
33 .fwlen = (unsigned short *)&fw2400_length02,
34 .lfwstart = (unsigned long *)&fw2400_addr02,
35 },
36 { FW_INFO_ADDR_NOMORE, },
37};
38
39static struct qla_board_info qla_board_tbl[] = {
40 {
41 .drv_name = qla_driver_name,
42 .isp_name = "ISP2422",
43 .fw_info = qla_fw_tbl,
44 .fw_fname = "ql2400_fw.bin",
45 },
46 {
47 .drv_name = qla_driver_name,
48 .isp_name = "ISP2432",
49 .fw_info = qla_fw_tbl,
50 .fw_fname = "ql2400_fw.bin",
51 },
52};
53
54static struct pci_device_id qla24xx_pci_tbl[] = {
55 {
56 .vendor = PCI_VENDOR_ID_QLOGIC,
57 .device = PCI_DEVICE_ID_QLOGIC_ISP2422,
58 .subvendor = PCI_ANY_ID,
59 .subdevice = PCI_ANY_ID,
60 .driver_data = (unsigned long)&qla_board_tbl[0],
61 },
62 {
63 .vendor = PCI_VENDOR_ID_QLOGIC,
64 .device = PCI_DEVICE_ID_QLOGIC_ISP2432,
65 .subvendor = PCI_ANY_ID,
66 .subdevice = PCI_ANY_ID,
67 .driver_data = (unsigned long)&qla_board_tbl[1],
68 },
69 {0, 0},
70};
71MODULE_DEVICE_TABLE(pci, qla24xx_pci_tbl);
72
73static int __devinit
74qla24xx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
75{
76 return qla2x00_probe_one(pdev,
77 (struct qla_board_info *)id->driver_data);
78}
79
80static void __devexit
81qla24xx_remove_one(struct pci_dev *pdev)
82{
83 qla2x00_remove_one(pdev);
84}
85
86static struct pci_driver qla24xx_pci_driver = {
87 .name = "qla2400",
88 .id_table = qla24xx_pci_tbl,
89 .probe = qla24xx_probe_one,
90 .remove = __devexit_p(qla24xx_remove_one),
91};
92
93static int __init
94qla24xx_init(void)
95{
96 return pci_module_init(&qla24xx_pci_driver);
97}
98
99static void __exit
100qla24xx_exit(void)
101{
102 pci_unregister_driver(&qla24xx_pci_driver);
103}
104
105module_init(qla24xx_init);
106module_exit(qla24xx_exit);
107
108MODULE_AUTHOR("QLogic Corporation");
109MODULE_DESCRIPTION("QLogic ISP24xx FC-SCSI Host Bus Adapter driver");
110MODULE_LICENSE("GPL");
111MODULE_VERSION(QLA2XXX_VERSION);
diff --git a/drivers/scsi/qla2xxx/ql2400_fw.c b/drivers/scsi/qla2xxx/ql2400_fw.c
new file mode 100644
index 000000000000..5977795854f8
--- /dev/null
+++ b/drivers/scsi/qla2xxx/ql2400_fw.c
@@ -0,0 +1,12376 @@
1/*
2 * QLogic Fibre Channel HBA Driver
3 * Copyright (c) 2003-2005 QLogic Corporation
4 *
5 * See LICENSE.qla2xxx for copyright and licensing details.
6 */
7#include <linux/types.h>
8
9/*
10 * Firmware Version 4.00.16 (08:09 Oct 26, 2005)
11 */
12
13#ifdef UNIQUE_FW_NAME
14uint32_t fw2400_version = 4*1024+0;
15#else
16uint32_t risc_code_version = 4*1024+0;
17#endif
18
19#ifdef UNIQUE_FW_NAME
20uint32_t fw2400_version_str[] = {4, 0,16};
21#else
22uint32_t firmware_version[] = {4, 0,16};
23#endif
24
25#ifdef UNIQUE_FW_NAME
26#define fw2400_VERSION_STRING "4.00.16"
27#else
28#define FW_VERSION_STRING "4.00.16"
29#endif
30
31#ifdef UNIQUE_FW_NAME
32uint32_t fw2400_addr01 = 0x00100000 ;
33#else
34uint32_t risc_code_addr01 = 0x00100000 ;
35#endif
36
37#ifdef UNIQUE_FW_NAME
38uint32_t fw2400_code01[] = {
39#else
40uint32_t risc_code01[] = {
41#endif
42 0x0401f17c, 0x0010e000, 0x00100000, 0x0000ab4a,
43 0x00000004, 0x00000000, 0x00000010, 0x00000002,
44 0x00000003, 0x00000000, 0x20434f50, 0x59524947,
45 0x48542032, 0x30303520, 0x514c4f47, 0x49432043,
46 0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
47 0x32347878, 0x20466972, 0x6d776172, 0x65202020,
48 0x56657273, 0x696f6e20, 0x342e302e, 0x31362020,
49 0x20202024, 0x00000000, 0x00000000, 0x00000000,
50 0x00000000, 0x00000000, 0x00000000, 0x00000000,
51 0x00000000, 0x00000000, 0x00000000, 0x00000000,
52 0x00000000, 0x00000000, 0x00000000, 0x00000000,
53 0x00000000, 0x00000000, 0x00000000, 0x00000000,
54 0x42001800, 0x0010014f, 0x42002000, 0x0010b8fe,
55 0x500c0800, 0x800c1800, 0x500c1000, 0x800c1800,
56 0x54042000, 0x80102000, 0x80040800, 0x80081040,
57 0x040207fc, 0x500c0800, 0x800409c0, 0x040207f6,
58 0x44002000, 0x80102000, 0x40100000, 0x44040000,
59 0x80000000, 0x44080000, 0x80000000, 0x440c0000,
60 0x80000000, 0x44100000, 0x80000000, 0x44140000,
61 0x80000000, 0x44180000, 0x80000000, 0x441c0000,
62 0x80000000, 0x44200000, 0x80000000, 0x44240000,
63 0x80000000, 0x44280000, 0x80000000, 0x442c0000,
64 0x80000000, 0x44300000, 0x80000000, 0x44340000,
65 0x80000000, 0x44380000, 0x80000000, 0x443c0000,
66 0x80000000, 0x44400000, 0x80000000, 0x44440000,
67 0x80000000, 0x44480000, 0x80000000, 0x444c0000,
68 0x80000000, 0x44500000, 0x80000000, 0x44540000,
69 0x80000000, 0x44580000, 0x80000000, 0x445c0000,
70 0x80000000, 0x44600000, 0x80000000, 0x44640000,
71 0x80000000, 0x44680000, 0x80000000, 0x446c0000,
72 0x80000000, 0x44700000, 0x80000000, 0x44740000,
73 0x80000000, 0x44780000, 0x80000000, 0x447c0000,
74 0x80000000, 0x44800000, 0x80000000, 0x44840000,
75 0x80000000, 0x44880000, 0x80000000, 0x448c0000,
76 0x80000000, 0x44900000, 0x80000000, 0x44940000,
77 0x80000000, 0x44980000, 0x80000000, 0x449c0000,
78 0x80000000, 0x44a00000, 0x80000000, 0x44a40000,
79 0x80000000, 0x44a80000, 0x80000000, 0x44ac0000,
80 0x80000000, 0x44b00000, 0x80000000, 0x44b40000,
81 0x80000000, 0x44b80000, 0x80000000, 0x44bc0000,
82 0x80000000, 0x44c00000, 0x80000000, 0x44c40000,
83 0x80000000, 0x44c80000, 0x80000000, 0x44cc0000,
84 0x80000000, 0x44d00000, 0x80000000, 0x44d80000,
85 0x80000000, 0x44d40000, 0x80000000, 0x44dc0000,
86 0x80000000, 0x44e00000, 0x80000000, 0x44e40000,
87 0x80000000, 0x44e80000, 0x80000000, 0x44ec0000,
88 0x80000000, 0x44f00000, 0x80000000, 0x44f40000,
89 0x80000000, 0x44f80000, 0x80000000, 0x44fc0000,
90 0x80000000, 0x45000000, 0x80000000, 0x45040000,
91 0x80000000, 0x45080000, 0x80000000, 0x450c0000,
92 0x80000000, 0x45100000, 0x80000000, 0x45140000,
93 0x80000000, 0x45180000, 0x80000000, 0x451c0000,
94 0x80000000, 0x45200000, 0x80000000, 0x45240000,
95 0x80000000, 0x45280000, 0x80000000, 0x452c0000,
96 0x80000000, 0x45300000, 0x80000000, 0x45340000,
97 0x80000000, 0x45380000, 0x80000000, 0x453c0000,
98 0x80000000, 0x45400000, 0x80000000, 0x45440000,
99 0x80000000, 0x45480000, 0x80000000, 0x454c0000,
100 0x80000000, 0x45500000, 0x80000000, 0x45540000,
101 0x80000000, 0x45580000, 0x80000000, 0x455c0000,
102 0x80000000, 0x45600000, 0x80000000, 0x45640000,
103 0x80000000, 0x45680000, 0x80000000, 0x456c0000,
104 0x80000000, 0x45700000, 0x80000000, 0x45740000,
105 0x80000000, 0x45780000, 0x80000000, 0x457c0000,
106 0x80000000, 0x45800000, 0x80000000, 0x45840000,
107 0x80000000, 0x45880000, 0x80000000, 0x458c0000,
108 0x80000000, 0x45900000, 0x80000000, 0x45940000,
109 0x80000000, 0x45980000, 0x80000000, 0x459c0000,
110 0x80000000, 0x45a00000, 0x80000000, 0x45a40000,
111 0x80000000, 0x45a80000, 0x80000000, 0x45ac0000,
112 0x80000000, 0x45b00000, 0x80000000, 0x45b40000,
113 0x80000000, 0x45b80000, 0x80000000, 0x45bc0000,
114 0x80000000, 0x45c00000, 0x80000000, 0x45c40000,
115 0x80000000, 0x45c80000, 0x80000000, 0x45cc0000,
116 0x80000000, 0x45d00000, 0x80000000, 0x45d40000,
117 0x80000000, 0x45d80000, 0x80000000, 0x45dc0000,
118 0x80000000, 0x45e00000, 0x80000000, 0x45e40000,
119 0x80000000, 0x45e80000, 0x80000000, 0x45ec0000,
120 0x80000000, 0x45f00000, 0x80000000, 0x45f40000,
121 0x80000000, 0x45f80000, 0x80000000, 0x45fc0000,
122 0x4a03c020, 0x00004000, 0x4a03c011, 0x40000010,
123 0x04006000, 0x4203e000, 0x40000000, 0x59e00017,
124 0x8c000508, 0x04000003, 0x4a03c017, 0x00000000,
125 0x4203e000, 0x30000001, 0x0401f000, 0x0000bf00,
126 0x00000080, 0x0000bfe0, 0x00000020, 0x0000ff00,
127 0x00000080, 0x0000ffd0, 0x00000030, 0x00007100,
128 0x00000010, 0x00007200, 0x00000008, 0x00007209,
129 0x00000007, 0x00007300, 0x00000008, 0x00007309,
130 0x00000007, 0x00007400, 0x00000008, 0x00007409,
131 0x00000007, 0x00007600, 0x000000b0, 0x00007700,
132 0x00000040, 0x00003000, 0x00000070, 0x00004000,
133 0x000000c0, 0x00006000, 0x00000050, 0x00006100,
134 0x00000010, 0x00006130, 0x00000010, 0x00006150,
135 0x00000010, 0x00006170, 0x00000010, 0x00006190,
136 0x00000010, 0x000061b0, 0x00000010, 0x00000000,
137 0x42000000, 0x00000100, 0x4202f000, 0x00000000,
138 0x42000800, 0x00021f00, 0x45780800, 0x80040800,
139 0x80000040, 0x040207fd, 0x4203f000, 0x00021fff,
140 0x40000000, 0x4203e000, 0x90000100, 0x40000000,
141 0x0201f800, 0x001006fd, 0x42000000, 0x00001000,
142 0x50000000, 0x82000480, 0x24320002, 0x04020015,
143 0x42000800, 0x00000064, 0x80040840, 0x04000007,
144 0x4a030000, 0x00000001, 0x40000000, 0x59800000,
145 0x8c000500, 0x040007f9, 0x04000008, 0x42000800,
146 0x00007a17, 0x50040000, 0x8c00050e, 0x04020003,
147 0x8400054e, 0x44000800, 0x4a030000, 0x00000000,
148 0x4a03c020, 0x00000004, 0x4203e000, 0x6000000f,
149 0x59e00023, 0x8c000500, 0x04020039, 0x42000000,
150 0x00100001, 0x50000800, 0x82040c00, 0x00000004,
151 0x58042003, 0x42001000, 0xffffffff, 0x0201f800,
152 0x001006f4, 0x0402004e, 0x58042003, 0x42001000,
153 0xffffffff, 0x0201f800, 0x001006f4, 0x04020048,
154 0x58042003, 0x42001000, 0x00ffffff, 0x0201f800,
155 0x001006f4, 0x04020042, 0x58042003, 0x42001000,
156 0x00ffffff, 0x0201f800, 0x001006f4, 0x0402003c,
157 0x42000000, 0x00100001, 0x5000a000, 0x8250a400,
158 0x00000004, 0x4200a800, 0x00020000, 0x5850b003,
159 0x0201f800, 0x0010ab17, 0x8250a400, 0x00000005,
160 0x4a0370e8, 0x00000003, 0x4200a800, 0x0000c000,
161 0x5850b003, 0x0201f800, 0x0010ab17, 0x4a0378e8,
162 0x00000003, 0x4200a800, 0x00008000, 0x5850b003,
163 0x0201f800, 0x0010ab17, 0x0401f02b, 0x42000800,
164 0x00020000, 0x58042003, 0x42001000, 0xffffffff,
165 0x0201f800, 0x001006f4, 0x04020019, 0x4a0370e8,
166 0x00000003, 0x42000800, 0x0000c000, 0x58042003,
167 0x82102500, 0x00ffffff, 0x42001000, 0x00ffffff,
168 0x0201f800, 0x001006f4, 0x0402000d, 0x4a0378e8,
169 0x00000003, 0x42000800, 0x00008000, 0x58042003,
170 0x82102500, 0x00ffffff, 0x42001000, 0x00ffffff,
171 0x0201f800, 0x001006f4, 0x0400000b, 0x4a03c020,
172 0x00004010, 0x4a03c011, 0x40100011, 0x04006000,
173 0x4203e000, 0x40000000, 0x4203e000, 0x30000001,
174 0x0401f000, 0x0201f800, 0x00100791, 0x42001000,
175 0x0010ab4a, 0x40080000, 0x80140480, 0x82001d00,
176 0xffffff00, 0x04020003, 0x40001800, 0x0401f003,
177 0x42001800, 0x000000ff, 0x480bc840, 0x480fc842,
178 0x04011000, 0x400c0000, 0x80081400, 0x40140000,
179 0x80080580, 0x040207f0, 0x4817500d, 0x45782800,
180 0x59c40000, 0x82000500, 0xffff0000, 0x80000120,
181 0x82000580, 0x00002422, 0x04020005, 0x59a80005,
182 0x8400054e, 0x48035005, 0x0401f008, 0x59e00003,
183 0x82000500, 0x00030000, 0x04000004, 0x59a80005,
184 0x84000554, 0x48035005, 0x42000800, 0x00000040,
185 0x59a80005, 0x8c000514, 0x0402000e, 0x42000800,
186 0x00001000, 0x82141480, 0x0017ffff, 0x04021009,
187 0x80040902, 0x82141480, 0x0013ffff, 0x04021005,
188 0x80040902, 0x82141480, 0x0011ffff, 0x04001b8d,
189 0x4807500e, 0x42001000, 0x00000024, 0x0201f800,
190 0x00106681, 0x82040c00, 0x0010d1c0, 0x4807500b,
191 0x4a03c810, 0x00100000, 0x4a03c811, 0x0010ab4a,
192 0x4a03c829, 0x00000004, 0x59e40001, 0x82000540,
193 0x0003001d, 0x4803c801, 0x4a03c014, 0x001c001c,
194 0x42001000, 0x0000001c, 0x0201f800, 0x001006e2,
195 0x4202c000, 0x0010d1c0, 0x59aab00b, 0x59aaa00b,
196 0x59aaa80b, 0x59aac80e, 0x49675069, 0x59a8000b,
197 0x4803500c, 0x0401fbf5, 0x0201f800, 0x00107903,
198 0x0201f800, 0x001007be, 0x0201f800, 0x00100807,
199 0x0201f800, 0x00101a05, 0x0201f800, 0x00101354,
200 0x0201f800, 0x00100969, 0x0201f800, 0x00101354,
201 0x0201f800, 0x00100f4c, 0x0201f800, 0x001066c1,
202 0x0401fb1a, 0x0201f800, 0x0010220e, 0x0201f800,
203 0x001053bb, 0x0201f800, 0x00104c90, 0x0201f800,
204 0x00106194, 0x0201f800, 0x00105f28, 0x0201f800,
205 0x001013ed, 0x0201f800, 0x0010126f, 0x4203e000,
206 0xf0000001, 0x42000000, 0x00001000, 0x50000000,
207 0x82000480, 0x24220001, 0x04000016, 0x59e00002,
208 0x8c00051e, 0x42000000, 0x7ffe00fe, 0x04020003,
209 0x42000000, 0x7ffe01fe, 0x50000800, 0x48075058,
210 0x80040920, 0x82040580, 0x0000013a, 0x04000004,
211 0x82040580, 0x0000013b, 0x04020006, 0x59a80005,
212 0x84000552, 0x48035005, 0x4a0378e4, 0x000c0000,
213 0x4a03c018, 0x0000000f, 0x4203e000, 0x20000511,
214 0x4203e000, 0x50010000, 0x4a03c020, 0x00000000,
215 0x04027013, 0x59e00020, 0x82000580, 0x00000002,
216 0x0402000f, 0x4a03c020, 0x00004000, 0x4a03c011,
217 0x40000010, 0x04006000, 0x4203e000, 0x40000000,
218 0x59e00017, 0x8c000508, 0x04000003, 0x4a03c017,
219 0x00000000, 0x4203e000, 0x30000001, 0x4202d800,
220 0x00000000, 0x4203e000, 0xb0600000, 0x59a80005,
221 0x42000800, 0x00000002, 0x8c000512, 0x04020007,
222 0x42000800, 0x0000000f, 0x8c000514, 0x04020003,
223 0x42000800, 0x00000001, 0x4007f800, 0x59a80005,
224 0x8c000514, 0x02020000, 0x00020004, 0x59e00003,
225 0x82000500, 0x00030000, 0x82000580, 0x00000000,
226 0x04020af8, 0x0201f000, 0x00020004, 0x4df00000,
227 0x4203e000, 0x50000000, 0x416c0000, 0x82000c80,
228 0x00000008, 0x04021aef, 0x0c01f804, 0x5c03e000,
229 0x0201f000, 0x00020008, 0x001002f7, 0x0010030a,
230 0x001003d7, 0x001002f6, 0x00100452, 0x001002f6,
231 0x001002f6, 0x00100593, 0x0401fae2, 0x42000800,
232 0x0010b4a4, 0x5804001d, 0x4803c857, 0x8c000500,
233 0x0400000d, 0x84000500, 0x4800081d, 0x4202d800,
234 0x00000004, 0x0401fbd3, 0x49f3c857, 0x5c000800,
235 0x5c000000, 0x82000540, 0x00003e00, 0x4c000000,
236 0x4c040000, 0x1c01f000, 0x0401fbbd, 0x0201f800,
237 0x0010513b, 0x04000009, 0x0201f800, 0x00105151,
238 0x0402002e, 0x59c40006, 0x82000540, 0x000000c0,
239 0x48038806, 0x0401f029, 0x0201f800, 0x001050a2,
240 0x836c0580, 0x00000001, 0x040200bc, 0x59a80017,
241 0x82000580, 0x00000009, 0x040200b8, 0x497b5010,
242 0x4a038893, 0x00000001, 0x42001000, 0x000000f0,
243 0x0201f800, 0x0010193d, 0x0201f800, 0x00105149,
244 0x59c41006, 0x04020006, 0x82081540, 0x000000f1,
245 0x82081500, 0xbbffffff, 0x0401f003, 0x82081540,
246 0x440000f1, 0x480b8806, 0x0201f800, 0x0010609e,
247 0x4a0378e4, 0x00002000, 0x42000000, 0x0010b83a,
248 0x0201f800, 0x0010aa47, 0x42001000, 0x00008030,
249 0x497b5013, 0x0401f035, 0x0201f800, 0x00103b38,
250 0x59c400a4, 0x82000500, 0x0000000f, 0x82000480,
251 0x00000007, 0x04021091, 0x0201f800, 0x0010609e,
252 0x59c400a3, 0x82000500, 0xffefffff, 0x480388a3,
253 0x59a8004b, 0x800001c0, 0x04020004, 0x0201f800,
254 0x00104139, 0x0401f085, 0x59a80015, 0x84000546,
255 0x48035015, 0x0201f800, 0x00105141, 0x59c41006,
256 0x04020006, 0x82081540, 0x44000001, 0x82081500,
257 0xffffff0f, 0x0401f003, 0x82081540, 0x440000f1,
258 0x480b8806, 0x497b9005, 0x4a038802, 0x0000ffff,
259 0x4a0378e4, 0x00003000, 0x42000000, 0x0010b80c,
260 0x0201f800, 0x0010aa47, 0x59a81010, 0x42000800,
261 0x00000003, 0x0201f800, 0x00106c78, 0x42001000,
262 0x00008010, 0x59a8180a, 0x0201f800, 0x00103a3e,
263 0x0201f800, 0x00101815, 0x59a80805, 0x82040d00,
264 0xffffffdf, 0x48075005, 0x0201f800, 0x0010483d,
265 0x0201f800, 0x0010513b, 0x0400000a, 0x0201f800,
266 0x0010413e, 0x04000007, 0x4a035013, 0x00000001,
267 0x497b5021, 0x0201f800, 0x00103c80, 0x0401f04f,
268 0x0201f800, 0x001048ec, 0x04000005, 0x59c41002,
269 0x8408150c, 0x480b8802, 0x0401f012, 0x0201f800,
270 0x0010513b, 0x04020006, 0x59a8001d, 0x80000540,
271 0x02000800, 0x0010930f, 0x0401f00a, 0x0201f800,
272 0x0010930f, 0x59a80026, 0x8c000506, 0x04020005,
273 0x59a8001d, 0x80000540, 0x02020800, 0x00104245,
274 0x497b5028, 0x497b5027, 0x497b5018, 0x0201f800,
275 0x0010513b, 0x59a81026, 0x0402000a, 0x0201f800,
276 0x0010162a, 0x80001580, 0x59a8002a, 0x82000500,
277 0xffff0000, 0x80040d40, 0x4807502a, 0x0401f005,
278 0x59a8002a, 0x82000500, 0xffff0000, 0x4803502a,
279 0x599c0017, 0x8c00050a, 0x04000002, 0x84081544,
280 0x480b5026, 0x0201f800, 0x0010513b, 0x04000004,
281 0x0201f800, 0x0010162a, 0x48078880, 0x42001000,
282 0x00000005, 0x0201f800, 0x001070b0, 0x497b5028,
283 0x497b501b, 0x4a03501c, 0x0000ffff, 0x4a0378e4,
284 0x000000c0, 0x4202d800, 0x00000002, 0x0201f800,
285 0x0010513b, 0x04000007, 0x59a80026, 0x82000500,
286 0x0000000c, 0x82000580, 0x00000004, 0x04000003,
287 0x0201f800, 0x00101e45, 0x1c01f000, 0x59a8001c,
288 0x82000580, 0x0000ffff, 0x04000004, 0x0201f800,
289 0x00101e45, 0x0401f074, 0x59a80026, 0x8c00050a,
290 0x04020003, 0x8c000506, 0x0400001c, 0x8c000500,
291 0x0400001a, 0x4a038802, 0x0000ffbf, 0x8c000502,
292 0x04000016, 0x599c0018, 0x8c000516, 0x04020010,
293 0x59a80027, 0x82000580, 0x0000ffff, 0x0400000c,
294 0x0201f800, 0x00101f9a, 0x59a80026, 0x8c000504,
295 0x0402005d, 0x42001000, 0x00000003, 0x417a5800,
296 0x0201f800, 0x00101fbf, 0x0401f057, 0x59a80028,
297 0x80000540, 0x04020054, 0x59a80026, 0x8c000508,
298 0x04020005, 0x59a8001b, 0x80000540, 0x0402004e,
299 0x0401f003, 0x8c000516, 0x0400004b, 0x0201f800,
300 0x001048ec, 0x04020048, 0x599c0018, 0x8c000516,
301 0x04020004, 0x0201f800, 0x00104c51, 0x04020042,
302 0x599c0017, 0x8c00050a, 0x0400000d, 0x4200b000,
303 0x000007f0, 0x417a8800, 0x0201f800, 0x00020245,
304 0x04020004, 0x59340200, 0x8c00051a, 0x04020036,
305 0x81468800, 0x8058b040, 0x040207f8, 0x4a038802,
306 0x0000ffff, 0x42001800, 0x0010b4eb, 0x0401fb8c,
307 0x42001800, 0x0010b4f8, 0x0401fb89, 0x59a80005,
308 0x84000502, 0x48035005, 0x4a0378e4, 0x00000080,
309 0x4202d800, 0x00000003, 0x4a03501c, 0x0000ffff,
310 0x0401fa7f, 0x80000580, 0x0201f800, 0x00101590,
311 0x599c0018, 0x8c000516, 0x04000004, 0x0201f800,
312 0x00103b10, 0x0401f009, 0x42001800, 0x0000ffff,
313 0x42002000, 0x00000006, 0x42003000, 0x00000000,
314 0x0201f800, 0x00103aae, 0x0201f800, 0x00105151,
315 0x0400000b, 0x59c40006, 0x0201f800, 0x0010513b,
316 0x04000004, 0x82000500, 0xffffff0f, 0x0401f003,
317 0x82000500, 0xfbffffff, 0x48038806, 0x0201f800,
318 0x00106f36, 0x1c01f000, 0x4c040000, 0x4c080000,
319 0x4c100000, 0x59a8003e, 0x82000c80, 0x00000004,
320 0x04021980, 0x0c01f805, 0x5c002000, 0x5c001000,
321 0x5c000800, 0x1c01f000, 0x00100462, 0x001004ea,
322 0x00100516, 0x00100577, 0x42000000, 0x00000001,
323 0x0201f800, 0x00101590, 0x0201f800, 0x0010609e,
324 0x59c408a3, 0x82040d00, 0xfffffff7, 0x480788a3,
325 0x0201f800, 0x00105141, 0x0400000e, 0x0201f800,
326 0x00105151, 0x0400000b, 0x0201f800, 0x00105149,
327 0x04020964, 0x59c400a3, 0x84000532, 0x84000570,
328 0x480388a3, 0x4a038808, 0x00000008, 0x0401f010,
329 0x59c400a3, 0x84000530, 0x82000500, 0xbf7fffff,
330 0x480388a3, 0x42000800, 0x000000f8, 0x0201f800,
331 0x00104200, 0x59c400a3, 0x82000540, 0x00018000,
332 0x8400051c, 0x480388a3, 0x497b8808, 0x59c40006,
333 0x82000500, 0xfbffff0e, 0x48038806, 0x497b2822,
334 0x497b2823, 0x42000800, 0x000001f4, 0x42001000,
335 0x00100591, 0x0201f800, 0x00105f83, 0x59c40805,
336 0x42001000, 0x00000001, 0x0201f800, 0x0010193d,
337 0x0201f800, 0x0010163b, 0x0402000a, 0x42000000,
338 0x00000001, 0x0201f800, 0x0010188c, 0x42000000,
339 0x00000001, 0x0201f800, 0x00101821, 0x0401f022,
340 0x0201f800, 0x00101642, 0x04020008, 0x41780000,
341 0x0201f800, 0x0010188c, 0x41780000, 0x0201f800,
342 0x00101821, 0x0401f018, 0x0201f800, 0x00101649,
343 0x0402000a, 0x42000000, 0x00000002, 0x0201f800,
344 0x0010188c, 0x42000000, 0x00000002, 0x0201f800,
345 0x00101821, 0x0401f00c, 0x0201f800, 0x00101650,
346 0x04020918, 0x59a80049, 0x800001c0, 0x04000006,
347 0x0201f800, 0x00101656, 0x4a03503e, 0x00000001,
348 0x0401f021, 0x0201f800, 0x00101927, 0x4a03503e,
349 0x00000001, 0x0201f800, 0x00105141, 0x0400000c,
350 0x0201f800, 0x00105151, 0x04000009, 0x0201f800,
351 0x00105149, 0x04020903, 0x4a035033, 0x00000001,
352 0x0201f800, 0x001050a2, 0x0401f00f, 0x59c400a4,
353 0x82000500, 0x0000000f, 0x82000580, 0x00000008,
354 0x04000003, 0x4a038805, 0x04000000, 0x59c400a3,
355 0x82000540, 0x0001c000, 0x480388a3, 0x84000520,
356 0x480388a3, 0x1c01f000, 0x0401f8a3, 0x04020004,
357 0x4a03503e, 0x00000003, 0x0401f027, 0x0201f800,
358 0x00101650, 0x04020011, 0x59a80049, 0x800001c0,
359 0x0400000e, 0x0201f800, 0x00101656, 0x59a80048,
360 0x8c00051e, 0x0400001c, 0x0201f800, 0x00105149,
361 0x04020009, 0x4a035033, 0x00000001, 0x0201f800,
362 0x001050a2, 0x0401f004, 0x0201f800, 0x001018d3,
363 0x04020011, 0x0201f800, 0x00101815, 0x4a03503e,
364 0x00000002, 0x497b5049, 0x59c400a3, 0x84000520,
365 0x480388a3, 0x497b2822, 0x497b2823, 0x42000800,
366 0x0000002d, 0x42001000, 0x00100591, 0x0201f800,
367 0x00105f83, 0x1c01f000, 0x0401f877, 0x04020004,
368 0x4a03503e, 0x00000003, 0x0401f05b, 0x4a038805,
369 0x000000f0, 0x0201f800, 0x001018d3, 0x04020050,
370 0x0201f800, 0x00105149, 0x04000044, 0x59c400a4,
371 0x82000500, 0x0000000f, 0x82000580, 0x00000008,
372 0x04000020, 0x59c40005, 0x8c000534, 0x0402001d,
373 0x59940022, 0x82000580, 0x00000001, 0x04020046,
374 0x0201f800, 0x00105151, 0x04020043, 0x4a038805,
375 0x000000f0, 0x0201f800, 0x00105196, 0x4a035032,
376 0x0000aaaa, 0x4a035033, 0x00000000, 0x59c408a3,
377 0x82040d40, 0x00000008, 0x480788a3, 0x4202d800,
378 0x00000001, 0x4a03503e, 0x00000000, 0x4a038805,
379 0x00000001, 0x497b2822, 0x497b2823, 0x0401f01f,
380 0x0201f800, 0x00105151, 0x04020007, 0x59a80032,
381 0x82000580, 0x0000aaaa, 0x04020003, 0x4a035010,
382 0x00ffffff, 0x497b5032, 0x59c40006, 0x82000540,
383 0x04000001, 0x48038806, 0x59a80805, 0x8c040d06,
384 0x04020005, 0x59c408a3, 0x82040d40, 0x00000008,
385 0x480788a3, 0x4202d800, 0x00000001, 0x4a03503e,
386 0x00000000, 0x4a038805, 0x00000001, 0x497b2822,
387 0x497b2823, 0x0401f010, 0x59c40005, 0x82000500,
388 0x000000c0, 0x0400000c, 0x59c40006, 0x82000540,
389 0x000000f1, 0x48038806, 0x0401f7ef, 0x0201f800,
390 0x00101650, 0x04020004, 0x59a80049, 0x800001c0,
391 0x040207a4, 0x497b8885, 0x1c01f000, 0x4803c856,
392 0x42000000, 0x00000001, 0x0201f800, 0x00101590,
393 0x4a03503e, 0x00000000, 0x0201f800, 0x00101650,
394 0x0402000b, 0x59a80052, 0x800001c0, 0x04000004,
395 0x80000040, 0x48035052, 0x04020005, 0x4a035052,
396 0x0000000a, 0x4a035049, 0x00000001, 0x497b8885,
397 0x0401f0ed, 0x59940022, 0x59940823, 0x80040540,
398 0x1c01f000, 0x497b2823, 0x1c01f000, 0x4c080000,
399 0x42001000, 0x000000f0, 0x0201f800, 0x0010193d,
400 0x5c001000, 0x1c01f000, 0x4a03505c, 0x00000004,
401 0x4a03505d, 0x00000000, 0x4a03505e, 0x00000010,
402 0x4a03505f, 0x00000002, 0x4a035010, 0x00ffffff,
403 0x0201f800, 0x0010930f, 0x4a03502a, 0x20200000,
404 0x4a03502b, 0x88000200, 0x4a03502c, 0x00ff001f,
405 0x4a03502d, 0x000007d0, 0x4a03502e, 0x80000000,
406 0x4a03502f, 0x00000200, 0x4a035030, 0x00ff0000,
407 0x4a035031, 0x00010000, 0x4a03503a, 0x514c4f47,
408 0x4a03503b, 0x49432020, 0x1c01f000, 0x4d440000,
409 0x417a8800, 0x41780800, 0x0201f800, 0x00020245,
410 0x04020005, 0x0201f800, 0x001049e7, 0x04020002,
411 0x80040800, 0x81468800, 0x83440580, 0x000007f0,
412 0x040207f6, 0x5c028800, 0x1c01f000, 0x4803c857,
413 0x5c000000, 0x4c000000, 0x4803c857, 0x0401f809,
414 0x485fc857, 0x4203e000, 0x50000000, 0x5c000000,
415 0x4d780000, 0x4200b800, 0x00008002, 0x0401f006,
416 0x485fc857, 0x4203e000, 0x50000000, 0x4200b800,
417 0x00008002, 0x04006000, 0x4c000000, 0x4c040000,
418 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
419 0x00000001, 0x04020005, 0x42000800, 0x00000000,
420 0x0201f800, 0x00106c6c, 0x5c000800, 0x4807c025,
421 0x80040920, 0x4807c026, 0x5c000000, 0x4803c023,
422 0x80000120, 0x4803c024, 0x5c000000, 0x4803c857,
423 0x4803c021, 0x80000120, 0x4803c022, 0x41f80000,
424 0x4803c027, 0x80000120, 0x4803c028, 0x42000000,
425 0x00001000, 0x50000000, 0x82000480, 0x24320001,
426 0x4803c857, 0x0400104f, 0x42000800, 0x00000064,
427 0x80040840, 0x04000007, 0x4a030000, 0x00000001,
428 0x40000000, 0x59800000, 0x8c000500, 0x040007f9,
429 0x04000042, 0x42000800, 0x0010c1a3, 0x46000800,
430 0xfaceface, 0x80040800, 0x42001000, 0x00007a00,
431 0x58080013, 0x44000800, 0x80040800, 0x58080019,
432 0x44000800, 0x80040800, 0x5808001a, 0x44000800,
433 0x80040800, 0x5808001b, 0x44000800, 0x80040800,
434 0x5808001c, 0x44000800, 0x80040800, 0x5808001f,
435 0x44000800, 0x80040800, 0x42001000, 0x00007a40,
436 0x42001800, 0x0000000b, 0x50080000, 0x44000800,
437 0x80081000, 0x80040800, 0x800c1840, 0x040207fb,
438 0x42001800, 0x00000003, 0x42001000, 0x00007b00,
439 0x480c1003, 0x58080005, 0x44000800, 0x80040800,
440 0x800c1840, 0x040217fb, 0x42001000, 0x00007c00,
441 0x58080002, 0x44000800, 0x80040800, 0x58080003,
442 0x44000800, 0x80040800, 0x58080020, 0x44000800,
443 0x80040800, 0x58080021, 0x44000800, 0x80040800,
444 0x58080022, 0x44000800, 0x80040800, 0x58080023,
445 0x44000800, 0x80040800, 0x4a030000, 0x00000000,
446 0x485fc020, 0x905cb9c0, 0x825cbd40, 0x00000012,
447 0x485fc011, 0x4203e000, 0x40000000, 0x4202d800,
448 0x00000005, 0x59e00017, 0x8c000508, 0x04000003,
449 0x4a03c017, 0x00000002, 0x4203e000, 0x30000001,
450 0x0401f81a, 0x0401f7ff, 0x4a03c850, 0x0010c1bf,
451 0x4a03c851, 0x0010d1be, 0x4a03c853, 0x00000800,
452 0x4a03c855, 0x0001eb5a, 0x59e40001, 0x82000540,
453 0x00003f00, 0x4803c801, 0x4a03b104, 0x70000002,
454 0x4a03a804, 0x70000002, 0x4a03b004, 0x70000002,
455 0x42000000, 0x0010b8ec, 0x49780001, 0x49780002,
456 0x1c01f000, 0x1c01f000, 0x59a8006b, 0x8c000530,
457 0x040207fe, 0x4c080000, 0x42001000, 0x00000004,
458 0x0401f862, 0x5c001000, 0x4201d000, 0x00028b0a,
459 0x0201f800, 0x0010608e, 0x4c080000, 0x42001000,
460 0x00000008, 0x0401f859, 0x5c001000, 0x4201d000,
461 0x00028b0a, 0x0201f800, 0x0010608e, 0x4c080000,
462 0x42001000, 0x00000010, 0x0401f850, 0x5c001000,
463 0x4201d000, 0x00028b0a, 0x0201f800, 0x0010608e,
464 0x0401f7e2, 0x8c00050c, 0x59a8086b, 0x04020003,
465 0x84040d30, 0x0401f006, 0x84040d70, 0x4807506b,
466 0x42001000, 0x00000000, 0x0401f040, 0x4807506b,
467 0x836c0500, 0x00000007, 0x0c01f001, 0x001006e1,
468 0x001006c7, 0x001006c7, 0x001006af, 0x001006d4,
469 0x001006c7, 0x001006c7, 0x001006d4, 0x59a80005,
470 0x8c000514, 0x04020013, 0x59c40801, 0x82040d00,
471 0x00018000, 0x82040580, 0x00010000, 0x0400000a,
472 0x82040580, 0x00008000, 0x04000004, 0x42001000,
473 0x42004000, 0x0401f006, 0x42001000, 0x22002000,
474 0x0401f003, 0x42001000, 0x12001000, 0x0401f025,
475 0x42001000, 0x00001004, 0x0401f022, 0x59a80005,
476 0x8c000514, 0x04020008, 0x59a8006b, 0x8c000534,
477 0x04020004, 0x42001000, 0x74057005, 0x0401f819,
478 0x1c01f000, 0x42001000, 0x00002008, 0x0401f7fc,
479 0x59a8006b, 0x8c000534, 0x0402000a, 0x59a80005,
480 0x8c000514, 0x04000004, 0x42001000, 0x24052005,
481 0x0401f00c, 0x42001000, 0x74057005, 0x0401f009,
482 0x1c01f000, 0x1c01f000, 0x82081500, 0x0000001c,
483 0x82081540, 0x001c0000, 0x480bc013, 0x1c01f000,
484 0x59a8006b, 0x8c000530, 0x04000002, 0x84081570,
485 0x480b506b, 0x8c000530, 0x04020005, 0x82081500,
486 0x00007000, 0x80081114, 0x0401fff0, 0x1c01f000,
487 0x41780000, 0x50041800, 0x800c0400, 0x80040800,
488 0x80102040, 0x040207fc, 0x80080500, 0x80000540,
489 0x1c01f000, 0x4202f000, 0x00000000, 0x41780000,
490 0x41780800, 0x41781000, 0x41781800, 0x41782000,
491 0x41782800, 0x41783000, 0x41783800, 0x41784000,
492 0x41784800, 0x41785000, 0x41785800, 0x41786000,
493 0x41786800, 0x41787000, 0x41787800, 0x41788000,
494 0x41788800, 0x41789000, 0x41789800, 0x4178a000,
495 0x4178a800, 0x4178b000, 0x4178b800, 0x4178c000,
496 0x4178c800, 0x4178d000, 0x4178d800, 0x4178e000,
497 0x4178e800, 0x4178f000, 0x4178f800, 0x41790000,
498 0x41790800, 0x41791000, 0x41791800, 0x41792000,
499 0x41792800, 0x41793000, 0x41793800, 0x41794000,
500 0x41794800, 0x41795000, 0x41795800, 0x41796000,
501 0x41796800, 0x41797000, 0x41797800, 0x41798000,
502 0x41798800, 0x42019000, 0x0010b537, 0x42019800,
503 0x0010b50e, 0x4179a000, 0x4179b000, 0x4179a800,
504 0x4179b800, 0x4179c800, 0x4179c000, 0x4179d000,
505 0x4179d800, 0x4179e000, 0x4179e800, 0x4179f000,
506 0x4179f800, 0x417a0000, 0x417a0800, 0x417a1000,
507 0x417a1800, 0x417a2000, 0x42022800, 0x00006100,
508 0x417a3000, 0x417a3800, 0x417a4000, 0x417a4800,
509 0x417a5000, 0x417a5800, 0x417a6000, 0x417a6800,
510 0x417a7000, 0x417a7800, 0x417a8000, 0x417a8800,
511 0x417a9000, 0x417a9800, 0x417ae800, 0x417af800,
512 0x42030000, 0x00007c00, 0x42031000, 0x0010b806,
513 0x42031800, 0x0000bf1d, 0x42032000, 0x0000bf32,
514 0x42032800, 0x0010b7ce, 0x42033000, 0x0010b46e,
515 0x42034000, 0x0010b4a4, 0x42033800, 0x0010b4c3,
516 0x42034800, 0x0010b544, 0x42035000, 0x0010b400,
517 0x42035800, 0x0010ac00, 0x42030800, 0x0010b505,
518 0x417b6000, 0x42036800, 0x00006f00, 0x4203c800,
519 0x00003000, 0x42037000, 0x0000ff00, 0x42037800,
520 0x0000bf00, 0x42038000, 0x00007700, 0x42038800,
521 0x00004000, 0x42039000, 0x00006000, 0x42039800,
522 0x0010bedb, 0x4203a000, 0x00007600, 0x4203a800,
523 0x00007400, 0x4203b000, 0x00007200, 0x4203b800,
524 0x00007100, 0x4203c000, 0x00007000, 0x4203d000,
525 0x00000000, 0x4203e800, 0x00101b95, 0x417bd800,
526 0x1c01f000, 0x42000800, 0x00100000, 0x50040000,
527 0x4c000000, 0x42000000, 0x0000aaaa, 0x44000800,
528 0x42001800, 0x00005555, 0x41782000, 0x82102400,
529 0x00010000, 0x40100000, 0x80042c00, 0x440c2800,
530 0x42003000, 0x0000000a, 0x80183040, 0x040207ff,
531 0x50140000, 0x800c0580, 0x04020004, 0x50040000,
532 0x800c0580, 0x040207f2, 0x5c000000, 0x44000800,
533 0x80142840, 0x4817c861, 0x1c01f000, 0x59a8081f,
534 0x800409c0, 0x04020009, 0x49781c0c, 0x4a001a0c,
535 0x00000200, 0x4a001804, 0x07000000, 0x59a80010,
536 0x9c0001c0, 0x48001805, 0x0401fe01, 0x9c0409c0,
537 0x48041806, 0x1c01f000, 0x59a8080c, 0x4006d000,
538 0x4202b800, 0x00000001, 0x59a8180d, 0x480fc857,
539 0x82041400, 0x00000014, 0x82082400, 0x00000014,
540 0x40100000, 0x800c0480, 0x04001006, 0x44080800,
541 0x40080800, 0x40101000, 0x815eb800, 0x0401f7f7,
542 0x45780800, 0x495f5020, 0x1c01f000, 0x835c0480,
543 0x00000020, 0x04001009, 0x496bc857, 0x815eb840,
544 0x416a5800, 0x592ed000, 0x497a5800, 0x497a5801,
545 0x812e59c0, 0x1c01f000, 0x42000000, 0x0010b853,
546 0x0201f800, 0x0010aa47, 0x417a5800, 0x0401f7f9,
547 0x815eb840, 0x04001008, 0x416a5800, 0x492fc857,
548 0x592ed000, 0x497a5800, 0x497a5801, 0x812e59c0,
549 0x1c01f000, 0x42000000, 0x0010b853, 0x0201f800,
550 0x0010aa47, 0x417ab800, 0x417a5800, 0x0401f7f8,
551 0x492fc857, 0x496a5800, 0x412ed000, 0x815eb800,
552 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
553 0x1c01f000, 0x492fc857, 0x812e59c0, 0x04000007,
554 0x592c0001, 0x497a5801, 0x4c000000, 0x0401fff1,
555 0x5c025800, 0x0401f7f9, 0x1c01f000, 0x4807c856,
556 0x42007000, 0x0010b7f8, 0x4a007001, 0x00000000,
557 0x59e00003, 0x82000540, 0x00008080, 0x4803c003,
558 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805,
559 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000,
560 0x4200b000, 0x00000020, 0x497bb807, 0x8058b040,
561 0x040207fe, 0x4a03b805, 0x30000000, 0x59dc0006,
562 0x4a03b805, 0x60000001, 0x59dc0006, 0x4a03b805,
563 0x70000001, 0x59dc0006, 0x4a03b805, 0x30000002,
564 0x4200b000, 0x00000020, 0x497bb807, 0x8058b040,
565 0x040207fe, 0x4a03b805, 0x30000000, 0x59dc0006,
566 0x4a03b805, 0x60000001, 0x0401ffa1, 0x04000da5,
567 0x42001000, 0x0010b7f6, 0x452c1000, 0x4a025801,
568 0x00000001, 0x4a025802, 0x00000100, 0x4a025809,
569 0x00107149, 0x497a580a, 0x497a580b, 0x497a580c,
570 0x0401ff93, 0x04000d97, 0x42001000, 0x0010b7f7,
571 0x452c1000, 0x4a025801, 0x00000000, 0x4a025802,
572 0x00000100, 0x4a025809, 0x001011bc, 0x497a5803,
573 0x497a5807, 0x497a5808, 0x497a580a, 0x59a80005,
574 0x8c00050e, 0x04000006, 0x4a03b805, 0xe0000001,
575 0x59dc0006, 0x8c000522, 0x040007fc, 0x1c01f000,
576 0x4df00000, 0x4203e000, 0x50000000, 0x4c380000,
577 0x40087000, 0x480bc857, 0x4a007002, 0x00000000,
578 0x42007000, 0x0010b7f8, 0x82080400, 0x00000000,
579 0x45780000, 0x58380005, 0x48087005, 0x80000540,
580 0x04000005, 0x82000400, 0x00000000, 0x44080000,
581 0x0401f003, 0x480bc857, 0x48087006, 0x58380001,
582 0x80000540, 0x0400080c, 0x5c007000, 0x5c03e000,
583 0x1c01f000, 0x4c380000, 0x42007000, 0x0010b7f8,
584 0x58380001, 0x80000540, 0x04000803, 0x5c007000,
585 0x1c01f000, 0x42007000, 0x0010b7f8, 0x58380001,
586 0x82000580, 0x00000000, 0x04020012, 0x58380000,
587 0x0c01f001, 0x0010088e, 0x0010088d, 0x0010088d,
588 0x0010088d, 0x0010088d, 0x0010088d, 0x0010088d,
589 0x0010088d, 0x0401fd4b, 0x58380808, 0x800409c0,
590 0x04020024, 0x58380006, 0x80000540, 0x04020002,
591 0x1c01f000, 0x4803c857, 0x48007002, 0x40006800,
592 0x58340000, 0x80000540, 0x04020002, 0x48007005,
593 0x48007006, 0x4a03b805, 0x20000000, 0x59dc0006,
594 0x4a03b805, 0x30000000, 0x58340007, 0x4803b800,
595 0x58340008, 0x4803b801, 0x58340004, 0x48007003,
596 0x58340003, 0x48007004, 0x4803b803, 0x58340001,
597 0x8c000500, 0x04000004, 0x4a007001, 0x00000001,
598 0x0401f028, 0x4a007001, 0x00000002, 0x0401f03d,
599 0x0201f800, 0x001093ea, 0x0201f800, 0x0010a69d,
600 0x04000017, 0x4a03b805, 0x20000000, 0x59dc0006,
601 0x4a03b805, 0x30000000, 0x4807b800, 0x480bb801,
602 0x4a007003, 0x00000010, 0x480c7009, 0x42001000,
603 0x00100875, 0x0201f800, 0x00105f9a, 0x58380008,
604 0x82000400, 0x00000004, 0x48007004, 0x4803b803,
605 0x4a007001, 0x00000007, 0x0401f022, 0x0201f800,
606 0x00109402, 0x42000800, 0x00000001, 0x42001000,
607 0x00100875, 0x0201f800, 0x00105f76, 0x0401f7ba,
608 0x4c040000, 0x4c080000, 0x58380803, 0x42001000,
609 0x00003fff, 0x82040480, 0x00003fff, 0x04021003,
610 0x40041000, 0x80000580, 0x48007003, 0x800800c4,
611 0x4803b802, 0x4a03b805, 0x30000002, 0x59dc0006,
612 0x4a03b805, 0x70000001, 0x59dc0006, 0x4a03b805,
613 0x10000000, 0x5c001000, 0x5c000800, 0x1c01f000,
614 0x483bc857, 0x4c040000, 0x4c080000, 0x58380803,
615 0x42001000, 0x00003fff, 0x82040480, 0x00003fff,
616 0x04021003, 0x40041000, 0x80000580, 0x48007003,
617 0x800800c4, 0x4803b802, 0x4a03b805, 0x10000002,
618 0x5c001000, 0x5c000800, 0x1c01f000, 0x4c040000,
619 0x4c380000, 0x42007000, 0x0010b7f8, 0x59dc0806,
620 0x4807c857, 0x4a03b805, 0x20000000, 0x8c040d3e,
621 0x04000007, 0x8c040d08, 0x04020cca, 0x58380001,
622 0x82000500, 0x00000007, 0x0c01f804, 0x5c007000,
623 0x5c000800, 0x1c01f000, 0x0010087d, 0x0010091e,
624 0x0010092e, 0x001005d8, 0x001005d8, 0x001005d8,
625 0x001005d8, 0x001011ea, 0x4807c856, 0x82040d00,
626 0x43000f80, 0x04020009, 0x58380003, 0x80000540,
627 0x0400001c, 0x59dc0000, 0x4803b800, 0x59dc0001,
628 0x4803b801, 0x0401f7af, 0x58380802, 0x4a000802,
629 0x00000200, 0x0401f01e, 0x4807c856, 0x82040d00,
630 0x43000f80, 0x04020009, 0x58380003, 0x80000540,
631 0x0400000c, 0x59dc0000, 0x4803b800, 0x59dc0001,
632 0x4803b801, 0x0401f7b7, 0x58380002, 0x82000400,
633 0x00000002, 0x46000000, 0x00000200, 0x0401f00c,
634 0x4c340000, 0x58386802, 0x59dc0000, 0x4803c857,
635 0x48006807, 0x59dc0001, 0x4803c857, 0x48006808,
636 0x4a006802, 0x00000100, 0x5c006800, 0x4a007001,
637 0x00000000, 0x4c300000, 0x58386002, 0x0401f80c,
638 0x04000009, 0x58300009, 0x82000c80, 0x0010ab4a,
639 0x04021c84, 0x82000c80, 0x00020000, 0x04001c81,
640 0x0801f800, 0x5c006000, 0x0401f723, 0x4833c857,
641 0x803061c0, 0x04000009, 0x59a8000c, 0x80300480,
642 0x04001007, 0x59a8000d, 0x80300480, 0x04021004,
643 0x82000540, 0x00000001, 0x1c01f000, 0x80000580,
644 0x1c01f000, 0x4803c856, 0x4dc00000, 0x42007000,
645 0x0010b803, 0x4a007400, 0x00000000, 0x49787001,
646 0x42038000, 0x00007720, 0x4a038006, 0x60000001,
647 0x4a038009, 0xf4f60000, 0x42038000, 0x00007700,
648 0x4a038006, 0x60000001, 0x4a038009, 0xf4f60000,
649 0x4a03c822, 0x00000010, 0x4a0370e8, 0x00000000,
650 0x0401f809, 0x4a0370e9, 0x00003a0f, 0x4a0370e8,
651 0x00000000, 0x4a0370e8, 0x00000001, 0x5c038000,
652 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x0401f80a,
653 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000,
654 0x825cbd40, 0x00000001, 0x0401f803, 0x5c00b800,
655 0x1c01f000, 0x4803c856, 0x4dc00000, 0x4c500000,
656 0x4c580000, 0x4c540000, 0x4a0370e8, 0x00000000,
657 0x805cb9c0, 0x04000009, 0x4a038807, 0x00000004,
658 0x59b800ea, 0x8c000510, 0x04000004, 0x59b800e0,
659 0x0401f87b, 0x0401f7fb, 0x42038000, 0x00007720,
660 0x0201f800, 0x00100ec1, 0x59c00007, 0x4a038006,
661 0x20000000, 0x59c00007, 0x4a038006, 0x8000000a,
662 0x59c00007, 0x4a038006, 0x8000000b, 0x59c00007,
663 0x4a038006, 0x40000001, 0x83c00580, 0x00007700,
664 0x04000004, 0x42038000, 0x00007700, 0x0401f7ed,
665 0x42038000, 0x00007720, 0x42000800, 0x00000800,
666 0x59c00007, 0x8c00051e, 0x04000006, 0x4a038006,
667 0x90000001, 0x80040840, 0x040207fa, 0x0401fc11,
668 0x83c00580, 0x00007700, 0x04000004, 0x42038000,
669 0x00007700, 0x0401f7f1, 0x805cb9c0, 0x0402001d,
670 0x4200b000, 0x00000020, 0x83b8ac00, 0x00000020,
671 0x0201f800, 0x0010ab20, 0x4a0370fb, 0x00000001,
672 0x4a037020, 0x001010bd, 0x59a80039, 0x82000500,
673 0x0000ffff, 0x48037021, 0x4a037035, 0x0010bddb,
674 0x4a037030, 0x0010b410, 0x4a037031, 0x0010ac00,
675 0x4a037032, 0x0010b519, 0x4a037036, 0x0010b524,
676 0x59840002, 0x48037034, 0x4a037038, 0x001010b4,
677 0x4a0370fb, 0x00000001, 0x4178a000, 0x4200b000,
678 0x00000020, 0x83b8ac00, 0x00000000, 0x0201f800,
679 0x0010ab20, 0x4200b000, 0x00000040, 0x83b8ac00,
680 0x00000040, 0x0201f800, 0x0010ab20, 0x805cb9c0,
681 0x04020004, 0x4a0370e4, 0xaaaaaaaa, 0x0401f003,
682 0x4a0370e4, 0xa2aaaa82, 0x4a0370e5, 0xaaaaaaaa,
683 0x4a0370e6, 0xaaaaaaaa, 0x4a0370fb, 0x00000000,
684 0x4a0370e6, 0xaaaaaaaa, 0x42038000, 0x00007720,
685 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
686 0x02020800, 0x001005d8, 0x42038000, 0x00007700,
687 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
688 0x02020800, 0x001005d8, 0x5c00a800, 0x5c00b000,
689 0x5c00a000, 0x5c038000, 0x1c01f000, 0x4d300000,
690 0x4d380000, 0x40026000, 0x82000500, 0x7f000000,
691 0x82000580, 0x00000003, 0x0402000f, 0x83326500,
692 0x00ffffff, 0x59300203, 0x82000580, 0x00000004,
693 0x04020009, 0x59300c06, 0x82040580, 0x00000009,
694 0x04020005, 0x42027000, 0x00000047, 0x0201f800,
695 0x000207a1, 0x5c027000, 0x5c026000, 0x1c01f000,
696 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4d400000,
697 0x4cfc0000, 0x4d380000, 0x4d3c0000, 0x4d440000,
698 0x4d4c0000, 0x4d480000, 0x4c5c0000, 0x4c600000,
699 0x4c640000, 0x4cc80000, 0x4ccc0000, 0x4cf00000,
700 0x4cf40000, 0x4cf80000, 0x4cfc0000, 0x4d000000,
701 0x4d040000, 0x0201f800, 0x00020015, 0x5c020800,
702 0x5c020000, 0x5c01f800, 0x5c01f000, 0x5c01e800,
703 0x5c01e000, 0x5c019800, 0x5c019000, 0x5c00c800,
704 0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800,
705 0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800,
706 0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000,
707 0x1c01f000, 0x493bc857, 0x0201f000, 0x00020044,
708 0x83300500, 0x1f000000, 0x04000008, 0x81326580,
709 0x80000130, 0x82000c80, 0x00000014, 0x02021800,
710 0x001005d8, 0x0c01f013, 0x83300500, 0x000000ff,
711 0x82000c80, 0x00000007, 0x02021800, 0x001005d8,
712 0x0c01f025, 0x1c01f000, 0x82000d00, 0xc0000038,
713 0x02020800, 0x001005d0, 0x0201f800, 0x001005d8,
714 0x00000000, 0x00000048, 0x00000054, 0x00000053,
715 0x00100a9b, 0x00100abf, 0x00100aba, 0x00100adf,
716 0x00100aa6, 0x00100ab2, 0x00100a9b, 0x00100ada,
717 0x00100b1a, 0x00100a9b, 0x00100a9b, 0x00100a9b,
718 0x00100a9b, 0x00100b1d, 0x00100b23, 0x00100b34,
719 0x00100b45, 0x00100a9b, 0x00100b4e, 0x00100b5a,
720 0x00100a9b, 0x00100a9b, 0x00100a9b, 0x0201f800,
721 0x001005d8, 0x00100aa4, 0x00100bff, 0x00100aec,
722 0x00100b0f, 0x00100aa4, 0x00100aa4, 0x00100aa4,
723 0x0201f800, 0x001005d8, 0x4803c856, 0x59300004,
724 0x8c00053e, 0x04020005, 0x42027000, 0x00000055,
725 0x0201f000, 0x000207a1, 0x0201f800, 0x00106f60,
726 0x040007fa, 0x1c01f000, 0x4803c856, 0x0401f8a9,
727 0x40002800, 0x41782000, 0x42027000, 0x00000056,
728 0x0201f000, 0x000207a1, 0x4803c856, 0x42027000,
729 0x00000057, 0x0201f000, 0x000207a1, 0x4803c856,
730 0x59300007, 0x8c00051a, 0x04020010, 0x59325808,
731 0x812e59c0, 0x04000014, 0x592c0408, 0x8c00051c,
732 0x04020003, 0x4a026011, 0xffffffff, 0x59300004,
733 0x8c00053e, 0x04020009, 0x42027000, 0x00000048,
734 0x0201f000, 0x000207a1, 0x59325808, 0x4a025a06,
735 0x00000007, 0x0401f7f4, 0x0201f800, 0x00106f60,
736 0x040007f6, 0x1c01f000, 0x4803c856, 0x83300500,
737 0x00ffffff, 0x0201f000, 0x001064d7, 0x1c01f000,
738 0x4c040000, 0x59b808ea, 0x82040d00, 0x00000007,
739 0x82040580, 0x00000003, 0x04000004, 0x42000000,
740 0x60000000, 0x0401f8ab, 0x5c000800, 0x1c01f000,
741 0x0401f8f9, 0x59325808, 0x812e59c0, 0x04000018,
742 0x592c0204, 0x82000500, 0x000000ff, 0x82000d80,
743 0x00000029, 0x04020012, 0x59300203, 0x82000580,
744 0x00000003, 0x0400000b, 0x59300807, 0x84040d26,
745 0x48066007, 0x0201f800, 0x00020086, 0x4a03900d,
746 0x00000040, 0x4a0370e5, 0x00000008, 0x1c01f000,
747 0x0201f800, 0x00106f60, 0x040007f4, 0x59880052,
748 0x80000000, 0x48031052, 0x4a03900d, 0x00000040,
749 0x42000000, 0xc0000000, 0x0401f05a, 0x42007800,
750 0x0010bde2, 0x42002000, 0x00003000, 0x42003000,
751 0x00000105, 0x0201f800, 0x00105e04, 0x4a0370e4,
752 0x02000000, 0x1c01f000, 0x4933c857, 0x0201f000,
753 0x0002077d, 0x41300800, 0x800409c0, 0x02020800,
754 0x001005d8, 0x0201f800, 0x001005d0, 0x4933c857,
755 0x813261c0, 0x02000800, 0x001005d8, 0x0401f835,
756 0x40002800, 0x0201f800, 0x0010a99c, 0x0401f8ae,
757 0x04000007, 0x59326809, 0x59340200, 0x8c00050e,
758 0x59300414, 0x02020800, 0x001092ce, 0x1c01f000,
759 0x4933c857, 0x813261c0, 0x02000800, 0x001005d8,
760 0x0401f8a1, 0x0400000b, 0x59325808, 0x0201f800,
761 0x00109037, 0x04000007, 0x592c0208, 0x8400054e,
762 0x48025a08, 0x417a7800, 0x0201f800, 0x00108be3,
763 0x1c01f000, 0x485fc857, 0x5c000000, 0x4d780000,
764 0x4203e000, 0x50000000, 0x4200b800, 0x00008005,
765 0x0201f000, 0x001005dd, 0x4933c857, 0x83300480,
766 0x00000020, 0x02021800, 0x001005d8, 0x83300c00,
767 0x0010b8cc, 0x50040000, 0x80000000, 0x04001002,
768 0x44000800, 0x1c01f000, 0x4933c857, 0x0401f7f4,
769 0x4807c856, 0x59b800ea, 0x8c000510, 0x040007fd,
770 0x59b800e0, 0x4803c857, 0x1c01f000, 0x4803c856,
771 0x42000000, 0x10000000, 0x41300800, 0x0401f02d,
772 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff,
773 0x80040d40, 0x4807c857, 0x59b800ea, 0x8c000516,
774 0x04020003, 0x480770e1, 0x1c01f000, 0x8c000510,
775 0x040007fa, 0x4c040000, 0x0401f809, 0x5c000800,
776 0x82100480, 0x00000008, 0x040017f4, 0x4c040000,
777 0x0401febc, 0x5c000800, 0x0401f7f0, 0x59b800e2,
778 0x59b820e2, 0x80100580, 0x040207fd, 0x80102114,
779 0x0401f006, 0x59b800e2, 0x59b820e2, 0x80100580,
780 0x040207fd, 0x0401f001, 0x40101800, 0x800c190a,
781 0x82100500, 0x0000001f, 0x820c1d00, 0x0000001f,
782 0x800c2480, 0x82102500, 0x0000001f, 0x1c01f000,
783 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff,
784 0x80040d40, 0x4807c857, 0x42001000, 0x0010b804,
785 0x50080000, 0x80000540, 0x04020005, 0x4a0370e5,
786 0x00000003, 0x4a0370e4, 0x00000300, 0x80000000,
787 0x44001000, 0x42001000, 0x00000400, 0x59b800ea,
788 0x8c000510, 0x0400000c, 0x0401ffd5, 0x82100480,
789 0x00000008, 0x04001007, 0x4c040000, 0x4c080000,
790 0x0401fe88, 0x5c001000, 0x5c000800, 0x0401f020,
791 0x59b800ea, 0x8c000516, 0x0402001d, 0x4a0370e4,
792 0x00300000, 0x480770e1, 0x42001000, 0x0000ff00,
793 0x80081040, 0x04000012, 0x59b808e4, 0x8c040d28,
794 0x040207fc, 0x42001000, 0x0010b804, 0x50080000,
795 0x80000040, 0x04020005, 0x4a0370e5, 0x00000002,
796 0x4a0370e4, 0x00000200, 0x02001800, 0x001005d8,
797 0x44001000, 0x8c040d2c, 0x1c01f000, 0x41f80000,
798 0x50000000, 0x0201f800, 0x001005d8, 0x80081040,
799 0x040207d3, 0x41f80000, 0x50000000, 0x0201f800,
800 0x001005d8, 0x4d380000, 0x59300c06, 0x82040580,
801 0x00000009, 0x04020006, 0x42027000, 0x00000047,
802 0x0201f800, 0x000207a1, 0x80000580, 0x5c027000,
803 0x1c01f000, 0x4c500000, 0x4a03900d, 0x00000001,
804 0x59c8a020, 0x4a03900d, 0x00000002, 0x59c80820,
805 0x8c50a52e, 0x04000002, 0x900409c0, 0x82040d00,
806 0x0000ffff, 0x0201f800, 0x00105dd7, 0x02000800,
807 0x001005d8, 0x4933c857, 0x8250a500, 0xff000000,
808 0x82500580, 0x05000000, 0x04000003, 0x82000540,
809 0x00000001, 0x5c00a000, 0x1c01f000, 0x0401ffe6,
810 0x4933c857, 0x59300406, 0x82000580, 0x00000000,
811 0x04000040, 0x59c82021, 0x4a03900d, 0x00000001,
812 0x59c82821, 0x82142d00, 0x0000ffff, 0x59325808,
813 0x812e59c0, 0x04000037, 0x59326809, 0x0201f800,
814 0x001048d9, 0x02020800, 0x001092b6, 0x599c0019,
815 0x8c00050c, 0x04020018, 0x0201f800, 0x001048d9,
816 0x04020015, 0x59300811, 0x4807c857, 0x592c0408,
817 0x8c00051c, 0x0402000e, 0x8400055c, 0x48025c08,
818 0x592c0a04, 0x82040d00, 0x000000ff, 0x82040580,
819 0x00000048, 0x04000004, 0x82040580, 0x00000018,
820 0x04020003, 0x59300811, 0x48065803, 0x4a026011,
821 0x7fffffff, 0x48166013, 0x0201f800, 0x001010dd,
822 0x04020014, 0x0401f9fd, 0x40280000, 0x4802600d,
823 0x04000005, 0x4832600b, 0x50200000, 0x4802600a,
824 0x4822600c, 0x59300414, 0x8c00051c, 0x04020004,
825 0x599c0019, 0x8c00050c, 0x0402086e, 0x4a03900d,
826 0x00000040, 0x4a0370e5, 0x00000008, 0x1c01f000,
827 0x59880052, 0x80000000, 0x48031052, 0x4a03900d,
828 0x00000040, 0x42000000, 0xc0000000, 0x0401f71d,
829 0x4cf80000, 0x58f40000, 0x8001f540, 0x0401f820,
830 0x41781800, 0x0401f8e4, 0x04020014, 0x44140800,
831 0x0401f82a, 0x04000011, 0x40043800, 0x42001800,
832 0x00000001, 0x40142000, 0x0401f8db, 0x0402000b,
833 0x801c3800, 0x501c0000, 0x44000800, 0x0401f810,
834 0x801c0580, 0x04000004, 0x44103800, 0x801c3840,
835 0x44143800, 0x0401f819, 0x5c01f000, 0x1c01f000,
836 0x80f9f1c0, 0x04020003, 0x58f41202, 0x0401f003,
837 0x42001000, 0x00000007, 0x1c01f000, 0x80f9f1c0,
838 0x04020006, 0x58f40401, 0x82000480, 0x00000002,
839 0x80f40400, 0x0401f005, 0x58f80401, 0x82000480,
840 0x00000002, 0x80f80400, 0x50002800, 0x80000000,
841 0x50002000, 0x1c01f000, 0x80f9f1c0, 0x04020008,
842 0x58f40401, 0x82000480, 0x00000002, 0x02001800,
843 0x001005d8, 0x4801ec01, 0x0401f00b, 0x58f80401,
844 0x82000480, 0x00000002, 0x02001800, 0x001005d8,
845 0x4801f401, 0x82000580, 0x00000002, 0x04020002,
846 0x0401f809, 0x58f40202, 0x80000040, 0x4801ea02,
847 0x02000800, 0x001005d8, 0x82000580, 0x00000001,
848 0x1c01f000, 0x4d2c0000, 0x40fa5800, 0x0201f800,
849 0x001007f4, 0x4979e800, 0x4179f000, 0x5c025800,
850 0x1c01f000, 0x80f5e9c0, 0x04000009, 0x80f9f1c0,
851 0x04020ff5, 0x4d2c0000, 0x40f65800, 0x0201f800,
852 0x001007f4, 0x4179e800, 0x5c025800, 0x1c01f000,
853 0x4cf40000, 0x59300807, 0x82040500, 0x00003100,
854 0x04020032, 0x8c040d22, 0x04000032, 0x5930001f,
855 0x8001ed40, 0x02000800, 0x001005d8, 0x82000580,
856 0xffffffff, 0x04000029, 0x58f40201, 0x82000580,
857 0x0000dcb3, 0x02020800, 0x001005d8, 0x58f40a02,
858 0x82040500, 0x0000fffe, 0x04000003, 0x0401ff89,
859 0x58f40a02, 0x82040480, 0x0000000f, 0x04021059,
860 0x80040800, 0x4805ea02, 0x82040580, 0x00000008,
861 0x0400005d, 0x82040480, 0x00000008, 0x0400100a,
862 0x58f40000, 0x8001ed40, 0x02000800, 0x001005d8,
863 0x58f40201, 0x82000580, 0x0000ddb9, 0x02020800,
864 0x001005d8, 0x58f40401, 0x82000c00, 0x00000002,
865 0x4805ec01, 0x80f40400, 0x59300812, 0x44040000,
866 0x80000000, 0x45780000, 0x5c01e800, 0x1c01f000,
867 0x42001000, 0x00000400, 0x59b800e4, 0x8c000524,
868 0x04020023, 0x4a0370e4, 0x00030000, 0x40000000,
869 0x59b800e4, 0x8c000524, 0x0402001b, 0x59300807,
870 0x84040d62, 0x48066007, 0x4a0370e4, 0x00020000,
871 0x4d2c0000, 0x0201f800, 0x001007d3, 0x04000025,
872 0x492e601f, 0x4a025a01, 0x0000dcb3, 0x59300008,
873 0x80001d40, 0x02000800, 0x001005d8, 0x580c080f,
874 0x48065803, 0x59301811, 0x40040000, 0x800c0580,
875 0x0402000d, 0x497a5a02, 0x4a025c01, 0x00000004,
876 0x0401f011, 0x4a0370e4, 0x00020000, 0x40000000,
877 0x40000000, 0x80081040, 0x02000800, 0x001005d8,
878 0x0401f7d6, 0x4a025a02, 0x00000001, 0x4a025c01,
879 0x00000006, 0x497a5804, 0x400c0000, 0x80040480,
880 0x48025805, 0x412de800, 0x5c025800, 0x0401f7a9,
881 0x5c025800, 0x4a02601f, 0xffffffff, 0x0401f7c3,
882 0x4d2c0000, 0x58f65800, 0x0201f800, 0x001007f4,
883 0x40f65800, 0x0201f800, 0x001007f4, 0x5c025800,
884 0x0401f7f5, 0x4d2c0000, 0x0201f800, 0x001007d3,
885 0x040007f8, 0x4a025a01, 0x0000ddb9, 0x4a025c01,
886 0x00000002, 0x492de800, 0x412de800, 0x5c025800,
887 0x0401f7a5, 0x0401ff33, 0x82f40400, 0x00000004,
888 0x800c0400, 0x40000800, 0x50040000, 0x80100580,
889 0x04000016, 0x82040c00, 0x00000002, 0x80081040,
890 0x040207fa, 0x80f9f1c0, 0x04000011, 0x58f41202,
891 0x82081480, 0x00000007, 0x82f80400, 0x00000002,
892 0x800c0400, 0x40000800, 0x50040000, 0x80100580,
893 0x04000006, 0x82040c00, 0x00000002, 0x80081040,
894 0x040207fa, 0x0401f002, 0x1c01f000, 0x82000540,
895 0x00000001, 0x0401f7fd, 0x4cf40000, 0x4cf80000,
896 0x4001e800, 0x592c0a06, 0x800409c0, 0x0402001d,
897 0x82f40580, 0xffffffff, 0x04000017, 0x58f40201,
898 0x82000580, 0x0000dcb3, 0x02020800, 0x001005d8,
899 0x58f40000, 0x8001f540, 0x04000006, 0x58f80201,
900 0x82000580, 0x0000ddb9, 0x02020800, 0x001005d8,
901 0x41783800, 0x0401f839, 0x04020006, 0x0401ff32,
902 0x497a601f, 0x5c01f000, 0x5c01e800, 0x1c01f000,
903 0x0401ff2d, 0x4a025a06, 0x00000011, 0x0401f7f9,
904 0x82f40580, 0xffffffff, 0x04020f27, 0x0401f7f5,
905 0x4cf40000, 0x4cf80000, 0x4001e800, 0x82040580,
906 0x00000001, 0x0402001f, 0x82f40580, 0xffffffff,
907 0x04000019, 0x58f40201, 0x82000580, 0x0000dcb3,
908 0x02020800, 0x001005d8, 0x58f40000, 0x8001f540,
909 0x04000006, 0x58f80201, 0x82000580, 0x0000ddb9,
910 0x02020800, 0x001005d8, 0x41783800, 0x0401f813,
911 0x04020008, 0x0401ff0c, 0x42000800, 0x00000001,
912 0x497a601f, 0x5c01f000, 0x5c01e800, 0x1c01f000,
913 0x0401ff05, 0x42000800, 0x00000011, 0x0401f7f9,
914 0x4c040000, 0x82f40580, 0xffffffff, 0x04020efe,
915 0x5c000800, 0x0401f7f3, 0x4803c856, 0x401c2000,
916 0x41781800, 0x0401ff8c, 0x0402002c, 0x58f42003,
917 0x42001800, 0x00000001, 0x0401ff87, 0x04020027,
918 0x0401feb8, 0x40082800, 0x82f40400, 0x00000004,
919 0x40003000, 0x50182000, 0x40100000, 0x801c0580,
920 0x04000005, 0x42001800, 0x00000001, 0x0401ff7a,
921 0x0402001a, 0x82183400, 0x00000002, 0x80142840,
922 0x040207f5, 0x80f9f1c0, 0x04000013, 0x58f42a02,
923 0x82142c80, 0x00000007, 0x82f80400, 0x00000003,
924 0x40003000, 0x50182000, 0x40100000, 0x801c0580,
925 0x04000005, 0x42001800, 0x00000001, 0x0401ff66,
926 0x04020006, 0x82183400, 0x00000002, 0x80142840,
927 0x040207f5, 0x1c01f000, 0x82000540, 0x00000001,
928 0x0401f7fd, 0x0201f800, 0x001005d8, 0x58380207,
929 0x8c000502, 0x040007fc, 0x50200000, 0x80387c00,
930 0x583c2800, 0x583c2001, 0x58380404, 0x80001540,
931 0x04020002, 0x58381407, 0x58c83401, 0x58380c08,
932 0x59303807, 0x497a6012, 0x497a6013, 0x0201f000,
933 0x000200be, 0x592c0408, 0x8c000502, 0x040007ea,
934 0x592c0409, 0x80000540, 0x040007e7, 0x82000c80,
935 0x00000002, 0x04001011, 0x58380001, 0x80007540,
936 0x02000800, 0x001005d8, 0x58380204, 0x82000500,
937 0x0000000f, 0x82000400, 0x001010bd, 0x50004000,
938 0x40040000, 0x800409c0, 0x04000005, 0x82040c80,
939 0x00000005, 0x040217f1, 0x80204400, 0x50200000,
940 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002,
941 0x592c0a07, 0x592c4c08, 0x592c300d, 0x59303807,
942 0x497a6012, 0x497a6013, 0x4816600e, 0x4812600f,
943 0x480a6010, 0x481a6011, 0x80040840, 0x4806600d,
944 0x02000000, 0x000200c6, 0x80204000, 0x50201800,
945 0x800c19c0, 0x0402000c, 0x58380001, 0x80007540,
946 0x02000800, 0x001005d8, 0x58380204, 0x82000500,
947 0x0000000f, 0x82000400, 0x001010bd, 0x50004000,
948 0x50201800, 0x483a600b, 0x480e600a, 0x4822600c,
949 0x0201f000, 0x000200c6, 0x4803c856, 0x592c0208,
950 0x8c00051e, 0x04020017, 0x50200000, 0x80306c00,
951 0x40240000, 0x0c01f001, 0x00100e46, 0x00100e46,
952 0x00100e4f, 0x00100e46, 0x00100e46, 0x00100e46,
953 0x00100e46, 0x00100e46, 0x00100e4f, 0x00100e46,
954 0x00100e4f, 0x00100e46, 0x00100e46, 0x00100e4f,
955 0x00100e46, 0x00100e46, 0x0201f800, 0x001005d8,
956 0x8400051e, 0x48025a08, 0x50200000, 0x80306c00,
957 0x58343801, 0x481e600f, 0x0401f007, 0x58341802,
958 0x58342800, 0x58343801, 0x480e6010, 0x4816600e,
959 0x481e600f, 0x0401f246, 0x4933c857, 0x5931f808,
960 0x59300a06, 0x800409c0, 0x04000005, 0x80040906,
961 0x04020002, 0x80040800, 0x4805fc06, 0x4a026206,
962 0x00000002, 0x592c0409, 0x82000500, 0x00000008,
963 0x0400000b, 0x0401f834, 0x59300203, 0x82000580,
964 0x00000004, 0x04020005, 0x42027000, 0x00000048,
965 0x0201f800, 0x000207a1, 0x1c01f000, 0x4cfc0000,
966 0x58fc0204, 0x82000500, 0x000000ff, 0x82000580,
967 0x00000048, 0x0402000c, 0x58fc000b, 0x800001c0,
968 0x04000009, 0x58fc0407, 0x800001c0, 0x04000006,
969 0x58fc080b, 0x8c040d16, 0x04000017, 0x58fc0007,
970 0x0401f00a, 0x58fc0408, 0x8c000512, 0x04020014,
971 0x58fc0c09, 0x8c040d16, 0x04020003, 0x5c01f800,
972 0x1c01f000, 0x58fc000a, 0x59300811, 0x80040580,
973 0x04020009, 0x59300007, 0x84000500, 0x48026007,
974 0x42027000, 0x00000048, 0x5c01f800, 0x0201f000,
975 0x000207a1, 0x5c01f800, 0x1c01f000, 0x58fdf809,
976 0x0401f7ec, 0x4933c857, 0x59b808ea, 0x82040d00,
977 0x00000007, 0x82040580, 0x00000000, 0x0400001e,
978 0x82040580, 0x00000003, 0x0400001b, 0x59300406,
979 0x4c000000, 0x4a026406, 0x00000000, 0x42003000,
980 0x00000041, 0x42000000, 0x50000000, 0x41300800,
981 0x4c180000, 0x0401fce7, 0x5c003000, 0x0400000b,
982 0x42000000, 0x0000001e, 0x80000040, 0x040207ff,
983 0x80183040, 0x040207f4, 0x42000000, 0x40000000,
984 0x41300800, 0x0401fcdb, 0x5c000000, 0x48026406,
985 0x1c01f000, 0x59300007, 0x84000500, 0x48026007,
986 0x0401f7fc, 0x59c00007, 0x4a038006, 0x30000000,
987 0x40000000, 0x59c00007, 0x8c00050a, 0x040207fe,
988 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
989 0x4dc00000, 0x4a0370e8, 0x00000000, 0x42038000,
990 0x00007720, 0x0401fff0, 0x42038000, 0x00007700,
991 0x0401ffed, 0x0201f800, 0x0010513b, 0x04020013,
992 0x4a038891, 0x0000ffff, 0x497b8880, 0x497b8892,
993 0x42001000, 0x00000190, 0x40000000, 0x40000000,
994 0x80081040, 0x040207fd, 0x42000000, 0x0010b8a6,
995 0x0201f800, 0x0010aa47, 0x0401f80e, 0x5c038000,
996 0x0201f000, 0x00105258, 0x0401f82d, 0x42000000,
997 0x0010b8a7, 0x0201f800, 0x0010aa47, 0x0401f805,
998 0x48178892, 0x480b8880, 0x5c038000, 0x1c01f000,
999 0x496fc857, 0x836c0580, 0x00000003, 0x0402000b,
1000 0x4c080000, 0x4c0c0000, 0x42001000, 0x00008048,
1001 0x42001800, 0x0000ffff, 0x0201f800, 0x00103a3e,
1002 0x5c001800, 0x5c001000, 0x42000800, 0x0000003c,
1003 0x0201f800, 0x00101345, 0x59a8006c, 0x80000540,
1004 0x04000006, 0x59a8106d, 0x800811c0, 0x04000003,
1005 0x0201f800, 0x00101aaf, 0x4a038891, 0x0000ffff,
1006 0x4a03900d, 0x00000040, 0x0201f800, 0x0010098e,
1007 0x4a0370e8, 0x00000001, 0x1c01f000, 0x5c000000,
1008 0x4c000000, 0x4803c857, 0x59c41080, 0x497b8880,
1009 0x59c42892, 0x497b8892, 0x0201f800, 0x0010513b,
1010 0x04020002, 0x1c01f000, 0x42002000, 0x00000260,
1011 0x59c418a4, 0x820c1d00, 0x0000000f, 0x820c0580,
1012 0x00000000, 0x04000010, 0x59c41805, 0x820c1d00,
1013 0x00000001, 0x0402000e, 0x59c418a4, 0x820c1d00,
1014 0x0000000f, 0x820c0480, 0x00000007, 0x04001004,
1015 0x820c0480, 0x0000000c, 0x04001003, 0x80102040,
1016 0x040207ec, 0x497b8891, 0x1c01f000, 0x4c100000,
1017 0x42002000, 0x00000019, 0x46000000, 0x00000001,
1018 0x0201f800, 0x00101937, 0x50001800, 0x820c1d00,
1019 0x00000001, 0x04000005, 0x80102040, 0x040207f7,
1020 0x5c002000, 0x0401f7f0, 0x5c002000, 0x0401f7ec,
1021 0x4803c856, 0x1c01f000, 0x4d2c0000, 0x59325808,
1022 0x592c0a04, 0x4807c857, 0x82040d00, 0x000000ff,
1023 0x82040500, 0x0000000f, 0x0c01f001, 0x00100f67,
1024 0x00100f67, 0x00100f67, 0x00100f7f, 0x00100f67,
1025 0x00100f67, 0x00100f67, 0x00100f67, 0x00100f67,
1026 0x00100f7f, 0x00100f67, 0x00100f69, 0x00100f67,
1027 0x00100f67, 0x00100f67, 0x00100f67, 0x0201f800,
1028 0x001005d8, 0x82040580, 0x0000003b, 0x02020800,
1029 0x001005d8, 0x592c020a, 0x8c000500, 0x0400005f,
1030 0x592c1a07, 0x82040500, 0x0000000f, 0x82000400,
1031 0x001010bd, 0x50001000, 0x50080000, 0x59302013,
1032 0x4802600a, 0x492e600b, 0x480a600c, 0x480e600d,
1033 0x48126012, 0x5c025800, 0x1c01f000, 0x82040500,
1034 0x0000000f, 0x82000400, 0x001010bd, 0x50001000,
1035 0x50080000, 0x592c1a07, 0x4802600a, 0x492e600b,
1036 0x480a600c, 0x480e600d, 0x497a6012, 0x0401f7f2,
1037 0x8c040d00, 0x04020041, 0x82040d00, 0x00000080,
1038 0x0400003e, 0x0201f000, 0x000200cf, 0x59300013,
1039 0x59301012, 0x80080580, 0x0402000c, 0x42007800,
1040 0x80000005, 0x592c1208, 0x82080500, 0xffff7fff,
1041 0x48025a08, 0x8c08151e, 0x0402002d, 0x823c7d40,
1042 0x00000020, 0x0401f02a, 0x480bc857, 0x42000000,
1043 0x0010b851, 0x0201f800, 0x0010aa47, 0x59300414,
1044 0x4803c857, 0x8c000514, 0x04020007, 0x599c1819,
1045 0x8c0c1d12, 0x04020004, 0x820c1d40, 0x00000001,
1046 0x0401f01d, 0x59302013, 0x0401f92b, 0x0402001a,
1047 0x42007800, 0x80000005, 0x5930500d, 0x592c0208,
1048 0x4803c857, 0x8c00051e, 0x04020005, 0x823c7d40,
1049 0x00000020, 0x5930400c, 0x0401f004, 0x8400051e,
1050 0x48025a08, 0x0401f8da, 0x50201800, 0x480e600a,
1051 0x4832600b, 0x4822600c, 0x482a600d, 0x480fc857,
1052 0x4833c857, 0x4823c857, 0x482bc857, 0x80000580,
1053 0x483e6004, 0x1c01f000, 0x0201f800, 0x001005d8,
1054 0x4933c857, 0x4d2c0000, 0x59900004, 0x81300580,
1055 0x02020800, 0x001005d8, 0x0201f800, 0x00109037,
1056 0x02000800, 0x001005d8, 0x59325808, 0x4d3c0000,
1057 0x4d400000, 0x59300004, 0x4803c857, 0x4c000000,
1058 0x0201f800, 0x00106dc3, 0x0201f800, 0x00106b8a,
1059 0x5c000000, 0x8c000516, 0x04000010, 0x592c000f,
1060 0x4803c857, 0x48025807, 0x41780800, 0x42028000,
1061 0x00000002, 0x0201f800, 0x00104e70, 0x4a025c06,
1062 0x0000ffff, 0x0201f800, 0x000202da, 0x0201f800,
1063 0x00107911, 0x0401f015, 0x4a026203, 0x00000002,
1064 0x592c0208, 0x8400054e, 0x48025a08, 0x59300406,
1065 0x82000580, 0x00000006, 0x04020009, 0x811800ca,
1066 0x81c80c00, 0x58040939, 0x592c000d, 0x80040480,
1067 0x592c080f, 0x80040480, 0x4802580b, 0x417a7800,
1068 0x0201f800, 0x00108be3, 0x5c028000, 0x5c027800,
1069 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
1070 0x59900004, 0x81300580, 0x02020800, 0x001005d8,
1071 0x0201f800, 0x00109037, 0x02000800, 0x001005d8,
1072 0x59325808, 0x592c0208, 0x84000540, 0x48025a08,
1073 0x0401f7bf, 0x491bc857, 0x49d3c857, 0x4dd00000,
1074 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
1075 0x4a03a005, 0x80000002, 0x42000000, 0x00001000,
1076 0x50000000, 0x82000480, 0x24220001, 0x04020029,
1077 0x59d01006, 0x82080500, 0x00006000, 0x82000580,
1078 0x00006000, 0x0400002f, 0x82080500, 0x40008000,
1079 0x040007f8, 0x800409c0, 0x0402002a, 0x811a31c0,
1080 0x04000028, 0x42000000, 0x00001002, 0x50001000,
1081 0x46000000, 0x00000512, 0x42001800, 0x0000000a,
1082 0x59e00000, 0x8c00051a, 0x040207fc, 0x800c1840,
1083 0x040207fc, 0x42000000, 0x00001002, 0x46000000,
1084 0x00000514, 0x42001800, 0x0000000a, 0x59e00000,
1085 0x8c00053a, 0x040207fc, 0x800c1840, 0x040207fc,
1086 0x42000000, 0x00001002, 0x44080000, 0x0401f00d,
1087 0x59d01006, 0x82080500, 0x00006000, 0x82000580,
1088 0x00006000, 0x04000007, 0x8c08151e, 0x040007f9,
1089 0x59d01006, 0x82080500, 0x00006000, 0x040207f5,
1090 0x83d3a400, 0x00000020, 0x80040800, 0x82040480,
1091 0x00000005, 0x040017bf, 0x5c03a000, 0x1c01f000,
1092 0x491bc857, 0x49d3c857, 0x4dd00000, 0x41780800,
1093 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005,
1094 0x80000001, 0x59d00006, 0x83d3a400, 0x00000020,
1095 0x80040800, 0x82040480, 0x00000005, 0x040017f8,
1096 0x5c03a000, 0x1c01f000, 0x59d00006, 0x8c00053e,
1097 0x0400001e, 0x59902804, 0x4817c857, 0x801429c0,
1098 0x04000013, 0x5990000a, 0x5990080b, 0x5990100c,
1099 0x5990180d, 0x4800280a, 0x4804280b, 0x4808280c,
1100 0x480c280d, 0x59d00000, 0x59d00801, 0x59d01002,
1101 0x59d01803, 0x59d02004, 0x4800280e, 0x4804280f,
1102 0x48082810, 0x480c2811, 0x48102812, 0x59900006,
1103 0x82000500, 0xffff0000, 0x48032006, 0x4a03a005,
1104 0x30000000, 0x59d00006, 0x1c01f000, 0x4803c856,
1105 0x80204000, 0x50200000, 0x80000540, 0x04000003,
1106 0x80285040, 0x1c01f000, 0x58300001, 0x80000540,
1107 0x0400000e, 0x4802600b, 0x40006000, 0x58300204,
1108 0x82000500, 0x0000000f, 0x82000400, 0x001010bd,
1109 0x50004000, 0x802041c0, 0x02000800, 0x001005d8,
1110 0x80285040, 0x1c01f000, 0x40005000, 0x1c01f000,
1111 0x00000005, 0x00000008, 0x0000000b, 0x0000000e,
1112 0x00000011, 0x00000000, 0x00000000, 0x0000000b,
1113 0x00000000, 0x00000000, 0x00000000, 0x001010b8,
1114 0x001010b7, 0x00000000, 0x00000000, 0x00000000,
1115 0x00000000, 0x001010b8, 0x001010b7, 0x001010b4,
1116 0x001010b8, 0x001010b7, 0x00000000, 0x00000000,
1117 0x00000000, 0x00000000, 0x00000000, 0x001010b8,
1118 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1119 0x00000000, 0x001010b8, 0x001010b8, 0x001010b8,
1120 0x00000000, 0x001010b8, 0x00000000, 0x00000000,
1121 0x00000000, 0x4813c857, 0x492fc857, 0x4933c857,
1122 0x48126012, 0x592c5207, 0x802851c0, 0x0400004a,
1123 0x412c6000, 0x0401f84b, 0x04000009, 0x82240580,
1124 0x00000002, 0x04020003, 0x5830000d, 0x80102480,
1125 0x50200000, 0x80004540, 0x0400003f, 0x50200000,
1126 0x80000540, 0x0400000b, 0x80301400, 0x58080002,
1127 0x80102480, 0x0400101e, 0x801021c0, 0x04000009,
1128 0x80285040, 0x04000034, 0x80204000, 0x0401f7f4,
1129 0x58300001, 0x80006540, 0x0400002f, 0x0401f7e6,
1130 0x80285040, 0x0400002c, 0x80204000, 0x50200000,
1131 0x80000540, 0x0402000a, 0x58300001, 0x80006540,
1132 0x04000025, 0x58300204, 0x82004d00, 0x0000000f,
1133 0x82244400, 0x001010bd, 0x50204000, 0x592c0208,
1134 0x8400051e, 0x48025a08, 0x0401f013, 0x80102080,
1135 0x80102000, 0x48126010, 0x4813c857, 0x58080802,
1136 0x40100000, 0x80042480, 0x02001800, 0x001005d8,
1137 0x58080000, 0x58081801, 0x80102400, 0x4812600e,
1138 0x480e600f, 0x4813c857, 0x592c0208, 0x8400055e,
1139 0x48025a08, 0x4833c857, 0x4823c857, 0x482bc857,
1140 0x4832600b, 0x4822600c, 0x482a600d, 0x80000580,
1141 0x0401f003, 0x82000540, 0x00000001, 0x1c01f000,
1142 0x58300204, 0x82004d00, 0x0000000f, 0x82244400,
1143 0x001010bd, 0x82000500, 0x000000ff, 0x82000580,
1144 0x00000029, 0x0402001b, 0x50204000, 0x592c0409,
1145 0x80000540, 0x02000800, 0x001005d8, 0x82000c80,
1146 0x00000002, 0x04001011, 0x58300001, 0x80006540,
1147 0x02000800, 0x001005d8, 0x58300204, 0x82000500,
1148 0x0000000f, 0x82000400, 0x001010bd, 0x50004000,
1149 0x40040000, 0x800409c0, 0x04000006, 0x82040c80,
1150 0x00000005, 0x040217f1, 0x80204400, 0x80000580,
1151 0x1c01f000, 0x59e00004, 0x8c00050e, 0x02020000,
1152 0x00100903, 0x1c01f000, 0x4c5c0000, 0x59e4b800,
1153 0x485fc857, 0x825c0500, 0x0000001f, 0x04000004,
1154 0x59e40862, 0x0201f800, 0x001005d8, 0x825c0500,
1155 0x000000e0, 0x02000800, 0x001005d8, 0x8c5cbd0e,
1156 0x04020807, 0x8c5cbd0c, 0x04020809, 0x8c5cbd0a,
1157 0x04020878, 0x5c00b800, 0x1c01f000, 0x4803c856,
1158 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000,
1159 0x42007800, 0x0010b8ec, 0x583c0001, 0x583c0802,
1160 0x80040540, 0x0400003f, 0x42000800, 0x0010b7f7,
1161 0x50065800, 0x592c0002, 0x82000580, 0x00000000,
1162 0x0400000e, 0x59e40850, 0x59e41853, 0x400c0000,
1163 0x80040400, 0x59e40852, 0x4807c857, 0x80041480,
1164 0x04021008, 0x40001000, 0x480bc857, 0x4a007800,
1165 0x00000001, 0x0401f006, 0x4803c857, 0x0401f029,
1166 0x59e41050, 0x480bc857, 0x49787800, 0x480bc857,
1167 0x480fc857, 0x592c0003, 0x80000540, 0x04000006,
1168 0x80080580, 0x04020004, 0x592c0003, 0x4803c857,
1169 0x480bc857, 0x480a5803, 0x592c0007, 0x800001c0,
1170 0x04000007, 0x592c1007, 0x480bc857, 0x583c0003,
1171 0x4803c857, 0x80080480, 0x04001003, 0x583c1001,
1172 0x480bc857, 0x583c0802, 0x480bc857, 0x4807c857,
1173 0x4a025801, 0x00000000, 0x4a025809, 0x001011bc,
1174 0x480a5807, 0x48065808, 0x59e40053, 0x48025804,
1175 0x412c1000, 0x492fc857, 0x0201f800, 0x00100858,
1176 0x5c025800, 0x4a03c800, 0x00000040, 0x1c01f000,
1177 0x42007800, 0x0010b7f7, 0x503c7800, 0x4a007802,
1178 0x00000100, 0x42007800, 0x0010b8ec, 0x583c0000,
1179 0x4803c857, 0x82000d80, 0x00000001, 0x04000004,
1180 0x80000000, 0x48007800, 0x0401f019, 0x49787800,
1181 0x583c1806, 0x583c0005, 0x800c1800, 0x480c7806,
1182 0x800c0580, 0x04020002, 0x49787806, 0x583c0807,
1183 0x800409c0, 0x0400000e, 0x583c0008, 0x80000000,
1184 0x48007808, 0x80040580, 0x04020009, 0x49787808,
1185 0x583c2006, 0x42001800, 0x00000001, 0x42001000,
1186 0x00008028, 0x0201f800, 0x00103a3e, 0x1c01f000,
1187 0x4a03c800, 0x00000020, 0x0201f800, 0x0010aa40,
1188 0x59e40000, 0x1c01f000, 0x4d2c0000, 0x4a007001,
1189 0x00000000, 0x82040d00, 0x43000f80, 0x02020800,
1190 0x001005d8, 0x58380009, 0x4803c00f, 0x0201f800,
1191 0x00109402, 0x583a5808, 0x592c0000, 0x48007008,
1192 0x800001c0, 0x04020002, 0x49787007, 0x0201f800,
1193 0x001007f4, 0x5c025800, 0x0201f000, 0x0010087d,
1194 0x4803c856, 0x4c3c0000, 0x4d2c0000, 0x4d300000,
1195 0x5830000a, 0x80025d40, 0x02000800, 0x001005d8,
1196 0x592e6008, 0x4c300000, 0x0201f800, 0x0010941a,
1197 0x5c006000, 0x02000800, 0x001005d8, 0x58300002,
1198 0x82000580, 0x00000100, 0x04020010, 0x5930780b,
1199 0x583c0001, 0x80000540, 0x0400000e, 0x4802600b,
1200 0x40007800, 0x82000400, 0x00000002, 0x48006003,
1201 0x583c0000, 0x48006004, 0x40301000, 0x0201f800,
1202 0x00100858, 0x0401f00c, 0x4a025a06, 0x00000002,
1203 0x4c300000, 0x0201f800, 0x000202da, 0x5c006000,
1204 0x40325800, 0x0201f800, 0x001007f4, 0x0201f800,
1205 0x0002077d, 0x5c026000, 0x5c025800, 0x5c007800,
1206 0x1c01f000, 0x4803c856, 0x4d2c0000, 0x4d300000,
1207 0x42007000, 0x0010b7f8, 0x58380801, 0x82040580,
1208 0x00000002, 0x04020011, 0x58386002, 0x5830000a,
1209 0x812c0580, 0x0402000d, 0x59e00004, 0x8c00050e,
1210 0x040007fe, 0x59dc0006, 0x4803c857, 0x4a03b805,
1211 0x20000000, 0x8c00053e, 0x040007f8, 0x4a007001,
1212 0x00000000, 0x0401f019, 0x58386006, 0x40305000,
1213 0x803061c0, 0x02000800, 0x001005d8, 0x5830000a,
1214 0x812c0580, 0x04000004, 0x40305000, 0x58306000,
1215 0x0401f7f8, 0x40280000, 0x80300580, 0x58300000,
1216 0x04000006, 0x48005000, 0x800001c0, 0x04020007,
1217 0x48287005, 0x0401f005, 0x800001c0, 0x04020002,
1218 0x48007005, 0x48007006, 0x40325800, 0x0201f800,
1219 0x001007f4, 0x42007000, 0x0010b7f8, 0x58380001,
1220 0x82000580, 0x00000000, 0x02000800, 0x0010087d,
1221 0x5c026000, 0x5c025800, 0x1c01f000, 0x4803c856,
1222 0x42000800, 0x0000003c, 0x48079000, 0x59c80000,
1223 0x80040500, 0x040207fe, 0x497b9005, 0x4a039035,
1224 0x00880200, 0x59a8000e, 0x800000e0, 0x4803900e,
1225 0x4a039011, 0x00000024, 0x4a03900f, 0x0010d1c0,
1226 0x4a039010, 0x0010d1c0, 0x4a039015, 0x0000007f,
1227 0x4a03900d, 0x00000040, 0x4a039000, 0x00001600,
1228 0x1c01f000, 0x59c80007, 0x8c000508, 0x040208b7,
1229 0x59c80800, 0x8c040d16, 0x04020004, 0x82000500,
1230 0x00000006, 0x0c01f005, 0x4807c857, 0x82000500,
1231 0x0000000e, 0x0c01f001, 0x001012a8, 0x001012a6,
1232 0x00105999, 0x001012a6, 0x001012aa, 0x001012a6,
1233 0x001012aa, 0x001012aa, 0x001012a6, 0x001012a6,
1234 0x001012a6, 0x001012a6, 0x001012aa, 0x001012a6,
1235 0x001012aa, 0x001012a6, 0x0201f800, 0x001005d8,
1236 0x4803c857, 0x1c01f000, 0x59c8080c, 0x4807c857,
1237 0x82040500, 0x00006000, 0x04000004, 0x0201f800,
1238 0x0010aa03, 0x0401f006, 0x82040500, 0x007f0000,
1239 0x04000006, 0x0201f800, 0x0010a9d5, 0x0201f800,
1240 0x00106eb3, 0x0401f02b, 0x82040500, 0x00000014,
1241 0x04000014, 0x0201f800, 0x0010aa32, 0x836c0580,
1242 0x00000003, 0x0400000d, 0x0201f800, 0x0010513b,
1243 0x04000004, 0x0201f800, 0x0010411d, 0x0401f007,
1244 0x4a035033, 0x00000001, 0x4202d800, 0x00000001,
1245 0x0201f800, 0x001050a2, 0x0401f817, 0x0401f015,
1246 0x82040500, 0x00001c00, 0x04000005, 0x0201f800,
1247 0x0010aa11, 0x0401f810, 0x0401f00e, 0x82040500,
1248 0x00000140, 0x04000005, 0x0201f800, 0x0010aa24,
1249 0x0401f809, 0x0401f007, 0x82040500, 0x00008000,
1250 0x04000004, 0x0201f800, 0x0010a9fc, 0x0401f802,
1251 0x1c01f000, 0x4c0c0000, 0x4c100000, 0x4c140000,
1252 0x0201f800, 0x00100ec9, 0x5c002800, 0x5c002000,
1253 0x5c001800, 0x1c01f000, 0x4803c856, 0x59a80804,
1254 0x59a8002b, 0x82000500, 0xfffff000, 0x80040540,
1255 0x4803502b, 0x59a8002f, 0x82000500, 0xfffff000,
1256 0x80040540, 0x4803502f, 0x48078882, 0x82041c00,
1257 0x0000000f, 0x800c1908, 0x820c1c00, 0x00000004,
1258 0x400c2000, 0x901029c0, 0x82040480, 0x000001e4,
1259 0x04021005, 0x42001000, 0x00000008, 0x801020c6,
1260 0x0401f031, 0x82040480, 0x00000230, 0x04021009,
1261 0x42001000, 0x00000007, 0x801000c2, 0x800000c2,
1262 0x80100400, 0x80100400, 0x80102400, 0x0401f026,
1263 0x82040480, 0x00000298, 0x04021008, 0x42001000,
1264 0x00000006, 0x801000c2, 0x800000c2, 0x80100400,
1265 0x80102400, 0x0401f01c, 0x82040480, 0x00000328,
1266 0x04021007, 0x42001000, 0x00000005, 0x801000c2,
1267 0x800000c2, 0x80102400, 0x0401f013, 0x82040480,
1268 0x00000404, 0x04021005, 0x42001000, 0x00000004,
1269 0x801020c4, 0x0401f00c, 0x82040480, 0x0000056c,
1270 0x04021006, 0x42001000, 0x00000003, 0x801000c2,
1271 0x80102400, 0x0401f004, 0x42001000, 0x00000002,
1272 0x801020c2, 0x82100480, 0x00000110, 0x80000080,
1273 0x80002000, 0x800800d0, 0x80140540, 0x80100540,
1274 0x48039035, 0x1c01f000, 0x59c80815, 0x0201f800,
1275 0x001005d0, 0x82040d00, 0x0000007c, 0x48079000,
1276 0x59c80000, 0x80040500, 0x040207fe, 0x8c040d04,
1277 0x04000003, 0x59c80035, 0x48039035, 0x59c80000,
1278 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
1279 0x4803c856, 0x497b88a9, 0x4a038807, 0x00000001,
1280 0x497b8807, 0x59c40005, 0x48038805, 0x0201f800,
1281 0x00101815, 0x4201d000, 0x000001f4, 0x0201f800,
1282 0x0010608e, 0x497b880e, 0x4200b000, 0x000001f4,
1283 0x42000000, 0x00000001, 0x42000800, 0x00000014,
1284 0x0201f800, 0x00101944, 0x42000800, 0x00000014,
1285 0x0201f800, 0x0010193f, 0x8c040d00, 0x04000005,
1286 0x8058b040, 0x040207f3, 0x0201f800, 0x001005d8,
1287 0x4200b000, 0x00000032, 0x42000000, 0x00000001,
1288 0x42000800, 0x000000b4, 0x0201f800, 0x00101944,
1289 0x42000800, 0x000000b4, 0x0201f800, 0x0010193f,
1290 0x8c040d00, 0x04000005, 0x8058b040, 0x040207f3,
1291 0x0201f800, 0x001005d8, 0x59c40005, 0x48038805,
1292 0x42000000, 0x00000089, 0x800008d0, 0x48075054,
1293 0x48075055, 0x48075056, 0x42000800, 0x000000e0,
1294 0x0201f800, 0x00101944, 0x42000800, 0x000000f4,
1295 0x0201f800, 0x0010193f, 0x82040500, 0xffffffd1,
1296 0x82000540, 0x00000002, 0x42000800, 0x000000f4,
1297 0x0201f800, 0x00101944, 0x42000800, 0x000000a0,
1298 0x0201f800, 0x0010193f, 0x82040540, 0x00000001,
1299 0x42000800, 0x000000a0, 0x0201f800, 0x00101944,
1300 0x42000800, 0x00000000, 0x0201f800, 0x0010193f,
1301 0x82040540, 0x00000001, 0x42000800, 0x00000000,
1302 0x0201f800, 0x00101944, 0x4201d000, 0x0001d4c0,
1303 0x0201f800, 0x0010608e, 0x0401fa2b, 0x4a0388a7,
1304 0x0000f7f7, 0x4a0388a3, 0x8000403c, 0x4a0388ae,
1305 0x000061a8, 0x4a038801, 0x00032063, 0x4a038810,
1306 0x00410108, 0x4a038811, 0x00520608, 0x4a038812,
1307 0x00450320, 0x4a038813, 0x00440405, 0x4a03881c,
1308 0x004132e1, 0x4a038850, 0x80000108, 0x4a038860,
1309 0x00000008, 0x4a038870, 0x00000008, 0x4a038851,
1310 0x80000508, 0x4a038861, 0x00800000, 0x4a038871,
1311 0x00800000, 0x4a038852, 0x80000708, 0x4a038862,
1312 0x00800000, 0x4a038872, 0x00800000, 0x4a038853,
1313 0x80000608, 0x497b8863, 0x4a038873, 0x00800000,
1314 0x4a038882, 0x00000840, 0x4a0388a5, 0x0000001e,
1315 0x4a0388a6, 0x0000001e, 0x4a0388b0, 0x00007530,
1316 0x4a038802, 0x0000ffff, 0x4a038806, 0xc0e00800,
1317 0x1c01f000, 0x497b5022, 0x4a035021, 0x00000001,
1318 0x42000800, 0x00000040, 0x0201f800, 0x0010193f,
1319 0x82040500, 0xffffffaf, 0x82000540, 0x00000000,
1320 0x42000800, 0x00000040, 0x0201f800, 0x00101944,
1321 0x42000800, 0x000000f4, 0x0201f800, 0x0010193f,
1322 0x4c040000, 0x40040000, 0x84000548, 0x42000800,
1323 0x000000f4, 0x0201f800, 0x00101944, 0x42000800,
1324 0x00000000, 0x0201f800, 0x0010193f, 0x82040500,
1325 0xffffffc1, 0x82000540, 0x00000038, 0x42000800,
1326 0x00000000, 0x0201f800, 0x00101944, 0x5c000000,
1327 0x42000800, 0x000000f4, 0x0201f000, 0x00101944,
1328 0x59c40805, 0x4807c857, 0x59c40006, 0x80040d00,
1329 0x02000800, 0x001005d8, 0x82040500, 0x00e00800,
1330 0x04020004, 0x8c040d3e, 0x040208c4, 0x0401f007,
1331 0x82040500, 0x00800800, 0x02020800, 0x001005d0,
1332 0x0201f800, 0x001005d8, 0x4c5c0000, 0x4c600000,
1333 0x59c4b805, 0x485fc857, 0x59c40006, 0x8c000500,
1334 0x04000003, 0x8c5cbd00, 0x04020079, 0x0201f800,
1335 0x0010513b, 0x04000014, 0x59c40005, 0x82000500,
1336 0x000000c0, 0x04000036, 0x0201f800, 0x00105151,
1337 0x04020033, 0x4a038805, 0x04000000, 0x59c400a3,
1338 0x82000500, 0xbf203fff, 0x480388a3, 0x497b5049,
1339 0x4a038805, 0x000000c0, 0x0201f800, 0x00105065,
1340 0x0401f063, 0x8c5cbd34, 0x04020025, 0x59c40005,
1341 0x8c00050c, 0x04020012, 0x8c00050e, 0x04020013,
1342 0x8c00050a, 0x04020014, 0x8c000508, 0x0400000b,
1343 0x59a80017, 0x82000580, 0x00000009, 0x04020007,
1344 0x42000000, 0x0010b844, 0x0201f800, 0x0010aa47,
1345 0x0201f800, 0x00105318, 0x0401f04b, 0x4a035033,
1346 0x00000000, 0x0401f00b, 0x4a035033, 0x00000002,
1347 0x0401f008, 0x42000000, 0x0010b846, 0x0201f800,
1348 0x0010aa47, 0x0201f800, 0x001052c2, 0x0401f03e,
1349 0x0201f800, 0x00105378, 0x0401f03b, 0x8c5cbd34,
1350 0x04000037, 0x59c40005, 0x8c00053a, 0x04020005,
1351 0x42000000, 0x0010b818, 0x0201f800, 0x0010aa47,
1352 0x4a038805, 0x02000000, 0x0201f800, 0x0010513b,
1353 0x04020010, 0x4a038805, 0x04000000, 0x0201f800,
1354 0x00105149, 0x04020008, 0x4a035033, 0x00000001,
1355 0x4202d800, 0x00000001, 0x0201f800, 0x001050a2,
1356 0x0401f05b, 0x41780000, 0x0201f800, 0x00105113,
1357 0x0201f800, 0x001019fe, 0x4000c000, 0x0201f800,
1358 0x00101963, 0x836c1580, 0x00000004, 0x0402000d,
1359 0x8c5cbd00, 0x04020012, 0x59a81005, 0x8c081506,
1360 0x04020005, 0x59c410a3, 0x82081540, 0x00000008,
1361 0x480b88a3, 0x59c41006, 0x84081540, 0x480b8806,
1362 0x4a038805, 0x04000000, 0x4202d800, 0x00000001,
1363 0x497b5014, 0x0201f800, 0x00103b38, 0x8c5cbd3c,
1364 0x04020858, 0x8c5cbd00, 0x04000036, 0x42000000,
1365 0x0010b8ca, 0x0201f800, 0x0010aa47, 0x4a038805,
1366 0x00000001, 0x4200b000, 0x000003e8, 0x4201d000,
1367 0x00000064, 0x4c580000, 0x0201f800, 0x0010608e,
1368 0x0201f800, 0x001018d3, 0x5c00b000, 0x04000004,
1369 0x8058b040, 0x040207f6, 0x0401f004, 0x4a038805,
1370 0x00000001, 0x0401f01f, 0x59c40006, 0x84000500,
1371 0x48038806, 0x0201f800, 0x00106ede, 0x497b8880,
1372 0x0201f800, 0x0010a9c0, 0x59c4000d, 0x8c000500,
1373 0x02020800, 0x0010a9ce, 0x59c400a3, 0x82000500,
1374 0xfcf8ffff, 0x480388a3, 0x4a03504c, 0x00000002,
1375 0x4202d800, 0x00000004, 0x4a038805, 0x00000001,
1376 0x0201f800, 0x001006d4, 0x0401fb3b, 0x497b5052,
1377 0x4a035049, 0x00000001, 0x0201f800, 0x00100452,
1378 0x825cbd00, 0xbbfffffe, 0x485f8805, 0x5c00c000,
1379 0x5c00b800, 0x1c01f000, 0x59c41004, 0x480bc857,
1380 0x8c081500, 0x04000006, 0x4803c856, 0x497b2807,
1381 0x0201f800, 0x00106fa4, 0x0401f00a, 0x82080500,
1382 0x000001f0, 0x04000007, 0x4803c856, 0x417a3000,
1383 0x0201f800, 0x00106062, 0x0201f800, 0x00106fc6,
1384 0x4a038805, 0x80000000, 0x1c01f000, 0x59c408a3,
1385 0x4807c857, 0x84040d40, 0x480788a3, 0x1c01f000,
1386 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
1387 0x4a038805, 0x40000000, 0x42000000, 0x0010b8c6,
1388 0x0201f800, 0x0010aa47, 0x0201f800, 0x00106c55,
1389 0x59c41004, 0x8c081500, 0x04000054, 0x598e600d,
1390 0x497b2807, 0x813261c0, 0x04000032, 0x59300403,
1391 0x82000580, 0x00000032, 0x0402002e, 0x5930001c,
1392 0x48038833, 0x4a038807, 0x00018000, 0x4201d000,
1393 0x00000002, 0x0201f800, 0x0010608e, 0x497b8807,
1394 0x4201d000, 0x00000002, 0x0201f800, 0x0010608e,
1395 0x0201f800, 0x00106e21, 0x4201d000, 0x00007530,
1396 0x0201f800, 0x0010608e, 0x59c408a4, 0x82040d00,
1397 0x0000000f, 0x82040d80, 0x00000000, 0x04000005,
1398 0x42000000, 0x00200000, 0x0201f800, 0x00101949,
1399 0x0201f800, 0x00106bbf, 0x59300008, 0x80000540,
1400 0x02000800, 0x001005d8, 0x40025800, 0x4a025a04,
1401 0x00000103, 0x5931d821, 0x58ef400b, 0x58ec0009,
1402 0x0801f800, 0x0201f800, 0x0002077d, 0x0401f047,
1403 0x598c000f, 0x82001c80, 0x000000c8, 0x0402100f,
1404 0x80000000, 0x4803180f, 0x59c400a4, 0x82000500,
1405 0x0000000f, 0x82000580, 0x00000002, 0x04020004,
1406 0x42000000, 0x00200000, 0x0401fbf7, 0x0201f800,
1407 0x0010604d, 0x0401f035, 0x4933c857, 0x0201f800,
1408 0x00106e21, 0x813261c0, 0x04000030, 0x4a026203,
1409 0x00000001, 0x42027000, 0x00000027, 0x0201f800,
1410 0x000207a1, 0x0401f029, 0x8c081508, 0x04000027,
1411 0x417a3000, 0x0201f800, 0x001070d8, 0x42032000,
1412 0x0000bf32, 0x0201f800, 0x00106062, 0x59926004,
1413 0x813261c0, 0x04000012, 0x42001800, 0x000000c8,
1414 0x0201f800, 0x001070a4, 0x0402000d, 0x59c400a4,
1415 0x82000500, 0x0000000f, 0x82000580, 0x00000002,
1416 0x04020004, 0x42000000, 0x00200000, 0x0401fbce,
1417 0x0201f800, 0x00106052, 0x0401f00c, 0x4933c857,
1418 0x0201f800, 0x00106dc3, 0x813261c0, 0x04000007,
1419 0x42027000, 0x0000004f, 0x4a026203, 0x00000003,
1420 0x0201f800, 0x000207a1, 0x5c022800, 0x5c034800,
1421 0x5c03a000, 0x5c032000, 0x0201f000, 0x00106c4b,
1422 0x4803c857, 0x59a80821, 0x48035021, 0x80041580,
1423 0x04000045, 0x800409c0, 0x04000023, 0x497b504c,
1424 0x42000000, 0x0010b80d, 0x0201f800, 0x0010aa47,
1425 0x0201f800, 0x0010aaf9, 0x42001000, 0x00008011,
1426 0x59c40001, 0x82000500, 0x00018000, 0x82001d80,
1427 0x00000000, 0x04000009, 0x82001d80, 0x00008000,
1428 0x04000009, 0x82001d80, 0x00010000, 0x04000009,
1429 0x0201f800, 0x001005d8, 0x42001800, 0x00000000,
1430 0x0401f006, 0x42001800, 0x00000001, 0x0401f003,
1431 0x42001800, 0x00000003, 0x0201f800, 0x00103a3e,
1432 0x0401f021, 0x59a8084c, 0x800409c0, 0x04020007,
1433 0x59c4000d, 0x8c000520, 0x04000004, 0x42001800,
1434 0x00000003, 0x0401f002, 0x40041800, 0x0201f800,
1435 0x0010aadd, 0x42001000, 0x00008012, 0x0201f800,
1436 0x00103a3e, 0x0201f800, 0x001006d4, 0x0201f800,
1437 0x0010ab33, 0x0402000c, 0x0401f853, 0x4d400000,
1438 0x4d3c0000, 0x42028000, 0x00000028, 0x42027800,
1439 0x00000408, 0x0201f800, 0x00101fe5, 0x5c027800,
1440 0x5c028000, 0x1c01f000, 0x4803c857, 0x82000400,
1441 0x0010210e, 0x50000800, 0x82040d00, 0x000000ff,
1442 0x1c01f000, 0x4803c856, 0x4c580000, 0x4200b000,
1443 0x00000010, 0x497b88ac, 0x497b88ad, 0x8058b040,
1444 0x040207fe, 0x5c00b000, 0x1c01f000, 0x4807c857,
1445 0x48075010, 0x80041108, 0x4200b000, 0x00000010,
1446 0x497b88ac, 0x80000580, 0x800811c0, 0x04020006,
1447 0x82040500, 0x0000000f, 0x82000400, 0x0010ab38,
1448 0x50000000, 0x480388ad, 0x80081040, 0x8058b040,
1449 0x040207f5, 0x1c01f000, 0x59a80005, 0x04000003,
1450 0x84000546, 0x0401f002, 0x84000506, 0x48035005,
1451 0x4803c857, 0x1c01f000, 0x4803c857, 0x4c080000,
1452 0x4c040000, 0x4c000000, 0x59c40892, 0x4807c857,
1453 0x80041580, 0x04000010, 0x80041480, 0x04021007,
1454 0x80081080, 0x80081000, 0x4008b000, 0x42000000,
1455 0x00000201, 0x0401f004, 0x4008b000, 0x42000000,
1456 0x00000210, 0x48038886, 0x8058b040, 0x040207fe,
1457 0x497b8886, 0x5c000000, 0x5c000800, 0x5c001000,
1458 0x1c01f000, 0x4803c856, 0x0201f800, 0x00103b25,
1459 0x04000005, 0x42028000, 0x0000002e, 0x0201f000,
1460 0x0010a449, 0x1c01f000, 0x42000800, 0x00000002,
1461 0x59a80005, 0x8c000514, 0x0402000b, 0x59c80835,
1462 0x82040d00, 0x00001f00, 0x80040910, 0x80040800,
1463 0x59a8006c, 0x80000540, 0x04000003, 0x42000800,
1464 0x0000025a, 0x4807c857, 0x1c01f000, 0x4c000000,
1465 0x59a80053, 0x4803c857, 0x82000580, 0x00000000,
1466 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80053,
1467 0x4803c857, 0x82000580, 0x00000001, 0x5c000000,
1468 0x1c01f000, 0x4c000000, 0x59a80053, 0x4803c857,
1469 0x82000580, 0x00000003, 0x5c000000, 0x1c01f000,
1470 0x4c000000, 0x59a80053, 0x82000580, 0x00000002,
1471 0x5c000000, 0x1c01f000, 0x4c000000, 0x4c040000,
1472 0x4c080000, 0x4c380000, 0x59a80040, 0x82000c80,
1473 0x00000007, 0x02021800, 0x001005d8, 0x0c01f806,
1474 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000,
1475 0x1c01f000, 0x0010166c, 0x0010167f, 0x00101693,
1476 0x00101695, 0x001016bc, 0x001016be, 0x001016c0,
1477 0x4803c856, 0x4a035042, 0x00000000, 0x42000000,
1478 0x00000002, 0x0401fa1b, 0x42000000, 0x00000002,
1479 0x0401f9ad, 0x0401fab2, 0x4803c856, 0x4a035040,
1480 0x00000006, 0x42000800, 0x0000001e, 0x42001000,
1481 0x001016c1, 0x0201f000, 0x0010606e, 0x497b5045,
1482 0x4a035050, 0x00000036, 0x4a03504f, 0x0000002a,
1483 0x4803c856, 0x4a035042, 0x00000001, 0x42000000,
1484 0x00000002, 0x0401f998, 0x4803c856, 0x4a035040,
1485 0x00000006, 0x42000800, 0x0000001e, 0x42001000,
1486 0x001016c1, 0x0201f000, 0x0010606e, 0x0201f800,
1487 0x001005d8, 0x4a035050, 0x00000036, 0x4803c856,
1488 0x4a035042, 0x00000003, 0x42000800, 0x00000000,
1489 0x0401faa3, 0x82040d00, 0x00000090, 0x82040580,
1490 0x00000090, 0x04000009, 0x82040580, 0x00000010,
1491 0x04000009, 0x82040580, 0x00000000, 0x04000008,
1492 0x0201f800, 0x001005d8, 0x42000000, 0x00000001,
1493 0x0401f005, 0x41780000, 0x0401f003, 0x42000000,
1494 0x00000002, 0x0401f970, 0x497b5046, 0x4803c856,
1495 0x4a035040, 0x00000006, 0x42000800, 0x0000001e,
1496 0x42001000, 0x001016c1, 0x0201f000, 0x0010606e,
1497 0x0201f800, 0x001005d8, 0x0201f800, 0x001005d8,
1498 0x1c01f000, 0x4c000000, 0x4c040000, 0x4c080000,
1499 0x4c380000, 0x59a80042, 0x82000c80, 0x00000007,
1500 0x02021800, 0x001005d8, 0x0c01f806, 0x5c007000,
1501 0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000,
1502 0x001016d7, 0x001016f6, 0x0010174a, 0x00101761,
1503 0x00101778, 0x00101781, 0x00101783, 0x0401f9fc,
1504 0x0402001b, 0x59a81048, 0x42000800, 0x00000000,
1505 0x0401fa63, 0x82040d00, 0x00000090, 0x82040580,
1506 0x00000090, 0x04000009, 0x82040580, 0x00000010,
1507 0x04000008, 0x82040580, 0x00000000, 0x04000007,
1508 0x0201f800, 0x001005d8, 0x84081540, 0x0401f004,
1509 0x84081542, 0x0401f002, 0x84081544, 0x480b5048,
1510 0x4a035040, 0x00000001, 0x0401f003, 0x0401f8cb,
1511 0x0401ff82, 0x1c01f000, 0x0401f88f, 0x04000052,
1512 0x0401f9db, 0x0402002a, 0x42000800, 0x00000000,
1513 0x0401fa43, 0x82040d00, 0x00000090, 0x82040580,
1514 0x00000000, 0x04000044, 0x82040580, 0x00000010,
1515 0x04000006, 0x82040580, 0x00000090, 0x04000009,
1516 0x0201f800, 0x001005d8, 0x59c40801, 0x82040d00,
1517 0x00018000, 0x82040580, 0x00000000, 0x04000036,
1518 0x42000800, 0x00000000, 0x0401fa2d, 0x82040d00,
1519 0x00000090, 0x82040580, 0x00000010, 0x04000006,
1520 0x82040580, 0x00000090, 0x04000006, 0x02020800,
1521 0x001005d8, 0x59a80048, 0x84000542, 0x0401f003,
1522 0x59a80048, 0x84000540, 0x48035048, 0x59a80045,
1523 0x80000000, 0x48035045, 0x82000580, 0x00000005,
1524 0x04000003, 0x0401f861, 0x0401f01e, 0x497b5045,
1525 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
1526 0x00000000, 0x04000009, 0x82040580, 0x00008000,
1527 0x04000009, 0x82040580, 0x00010000, 0x04000008,
1528 0x0201f800, 0x001005d8, 0x42000000, 0x00000001,
1529 0x0401f005, 0x41780000, 0x0401f003, 0x42000000,
1530 0x00000002, 0x0401f94b, 0x4a035042, 0x00000002,
1531 0x0401f004, 0x4a035040, 0x00000003, 0x0401f002,
1532 0x0401ff42, 0x1c01f000, 0x0401f83b, 0x04000015,
1533 0x59a8004f, 0x80000040, 0x4803504f, 0x0401f984,
1534 0x04020005, 0x4a035040, 0x00000003, 0x497b5041,
1535 0x0401f00c, 0x59a8004f, 0x80000540, 0x04020003,
1536 0x0401f89e, 0x0401f002, 0x0401f84b, 0x0401f82f,
1537 0x497b5045, 0x4a035042, 0x00000001, 0x0401ff2b,
1538 0x1c01f000, 0x0401f824, 0x04000015, 0x0401f970,
1539 0x0402000f, 0x59a80046, 0x80000000, 0x48035046,
1540 0x82000580, 0x00000007, 0x0402000c, 0x4a035052,
1541 0x0000000a, 0x497b5049, 0x59a80048, 0x8400055e,
1542 0x48035048, 0x4803c857, 0x0401f005, 0x0401f817,
1543 0x4a035042, 0x00000004, 0x0401ff3d, 0x1c01f000,
1544 0x0401f80d, 0x04000007, 0x0401f959, 0x04020003,
1545 0x0401ff1b, 0x0401f003, 0x0401f80c, 0x0401ff34,
1546 0x1c01f000, 0x0201f800, 0x001005d8, 0x0201f800,
1547 0x001005d8, 0x59a80050, 0x80000040, 0x48035050,
1548 0x0400088d, 0x1c01f000, 0x4c040000, 0x42000800,
1549 0x00000000, 0x0401f9b2, 0x82040d00, 0x00000090,
1550 0x82040580, 0x00000090, 0x04000009, 0x82040580,
1551 0x00000010, 0x04000009, 0x82040580, 0x00000000,
1552 0x04000009, 0x0201f800, 0x001005d8, 0x42000000,
1553 0x00000002, 0x0401f005, 0x42000000, 0x00000001,
1554 0x0401f002, 0x41780000, 0x0401f8ea, 0x5c000800,
1555 0x1c01f000, 0x4c040000, 0x59c40801, 0x82040d00,
1556 0x00018000, 0x82040580, 0x00000000, 0x04000009,
1557 0x82040580, 0x00008000, 0x04000009, 0x82040580,
1558 0x00010000, 0x04000009, 0x0201f800, 0x001005d8,
1559 0x42000000, 0x00000002, 0x0401f005, 0x42000000,
1560 0x00000001, 0x0401f002, 0x41780000, 0x0401f866,
1561 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a80045,
1562 0x80000000, 0x48035045, 0x82000580, 0x00000005,
1563 0x04020018, 0x497b5045, 0x59c40801, 0x82040d00,
1564 0x00018000, 0x82040580, 0x00000000, 0x04000009,
1565 0x82040580, 0x00008000, 0x04000009, 0x82040580,
1566 0x00010000, 0x04000009, 0x0201f800, 0x001005d8,
1567 0x42000000, 0x00000002, 0x0401f005, 0x42000000,
1568 0x00000001, 0x0401f002, 0x41780000, 0x0401f846,
1569 0x42000800, 0x00000000, 0x0401f961, 0x82040d00,
1570 0x00000090, 0x82040580, 0x00000090, 0x04000009,
1571 0x82040580, 0x00000010, 0x04000009, 0x82040580,
1572 0x00000000, 0x04000009, 0x0201f800, 0x001005d8,
1573 0x42000000, 0x00000002, 0x0401f005, 0x42000000,
1574 0x00000001, 0x0401f002, 0x41780000, 0x0401f899,
1575 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80048,
1576 0x82000500, 0x00007fff, 0x02000800, 0x001005d8,
1577 0x59a84047, 0x80204102, 0x02001800, 0x001005d8,
1578 0x48235047, 0x80204500, 0x040007fa, 0x8c000504,
1579 0x04020007, 0x8c000502, 0x04020008, 0x8c000500,
1580 0x04020008, 0x0201f800, 0x001005d8, 0x42000000,
1581 0x00000002, 0x0401f005, 0x41780000, 0x0401f003,
1582 0x42000000, 0x00000001, 0x0401f80f, 0x5c004000,
1583 0x1c01f000, 0x04011000, 0x4a03c840, 0x0010b440,
1584 0x4a03c842, 0x00000009, 0x40000000, 0x040117ff,
1585 0x4a035047, 0x00000004, 0x4a03503e, 0x00000000,
1586 0x1c01f000, 0x59a80858, 0x82040d80, 0x01391077,
1587 0x04020008, 0x59e00813, 0x8c040d00, 0x04000005,
1588 0x82000d80, 0x00000002, 0x04020002, 0x41780000,
1589 0x4c000000, 0x0401f9b1, 0x5c000000, 0x800001c0,
1590 0x04000040, 0x82000d80, 0x00000001, 0x0402001d,
1591 0x42000800, 0x000000a0, 0x0401f909, 0x82040540,
1592 0x00000004, 0x42000800, 0x000000a0, 0x0401f909,
1593 0x42000800, 0x000000c0, 0x0401f901, 0x82040540,
1594 0x00000020, 0x42000800, 0x000000c0, 0x0401f901,
1595 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
1596 0x00000000, 0x48038801, 0x59a80054, 0x80000110,
1597 0x42000800, 0x000000e0, 0x0401f8f6, 0x0401f03c,
1598 0x82000d80, 0x00000002, 0x02020800, 0x001005d8,
1599 0x42000800, 0x000000a0, 0x0401f8e9, 0x82040500,
1600 0xfffffffb, 0x42000800, 0x000000a0, 0x0401f8e9,
1601 0x42000800, 0x000000c0, 0x0401f8e1, 0x82040500,
1602 0xffffffdf, 0x42000800, 0x000000c0, 0x0401f8e1,
1603 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
1604 0x00010000, 0x48038801, 0x59a80056, 0x80000110,
1605 0x42000800, 0x000000e0, 0x0401f8d6, 0x0401f01c,
1606 0x42000800, 0x000000a0, 0x0401f8cd, 0x82040540,
1607 0x00000004, 0x42000800, 0x000000a0, 0x0401f8cd,
1608 0x42000800, 0x000000c0, 0x0401f8c5, 0x82040500,
1609 0xffffffdf, 0x42000800, 0x000000c0, 0x0401f8c5,
1610 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
1611 0x00008000, 0x48038801, 0x59a80055, 0x80000110,
1612 0x42000800, 0x000000e0, 0x0401f8ba, 0x0401f163,
1613 0x4803c857, 0x59a80858, 0x82040d80, 0x01391077,
1614 0x04020008, 0x59e00813, 0x8c040d00, 0x04000005,
1615 0x82000d80, 0x00000002, 0x04020002, 0x41780000,
1616 0x4c000000, 0x0401f94d, 0x5c000000, 0x800001c0,
1617 0x04000026, 0x82000d80, 0x00000001, 0x04020010,
1618 0x59a8006c, 0x80000540, 0x04000004, 0x42001000,
1619 0x00000000, 0x0401fa0a, 0x42000800, 0x00000000,
1620 0x0401f897, 0x82040540, 0x00000090, 0x42000800,
1621 0x00000000, 0x0401f897, 0x0401f024, 0x82000d80,
1622 0x00000002, 0x02020800, 0x001005d8, 0x59a8006c,
1623 0x80000540, 0x04000004, 0x42001000, 0x00010000,
1624 0x0401f9f7, 0x42000800, 0x00000000, 0x0401f884,
1625 0x82040500, 0xffffff6f, 0x42000800, 0x00000000,
1626 0x0401f884, 0x0401f011, 0x59a8006c, 0x80000540,
1627 0x04000004, 0x42001000, 0x00008000, 0x0401f9e8,
1628 0x42000800, 0x00000000, 0x0401f875, 0x82040500,
1629 0xffffff6f, 0x82000540, 0x00000010, 0x42000800,
1630 0x00000000, 0x0401f873, 0x0401f124, 0x4c580000,
1631 0x4200b000, 0x00000014, 0x8058b040, 0x04000043,
1632 0x59c4000d, 0x8c000520, 0x040207fc, 0x0401f85c,
1633 0x59c4000d, 0x8c000520, 0x040207f8, 0x59c40808,
1634 0x84040d50, 0x48078808, 0x4200b000, 0x000000c8,
1635 0x8058b040, 0x040207ff, 0x4200b000, 0x00000014,
1636 0x8058b040, 0x04000031, 0x59c4000d, 0x8c000520,
1637 0x0402002e, 0x42000800, 0x00001000, 0x50040800,
1638 0x82040c80, 0x24220001, 0x04020003, 0x8c000504,
1639 0x040007f4, 0x0401f842, 0x59c4000d, 0x8c000520,
1640 0x04020022, 0x42000800, 0x00001000, 0x50040800,
1641 0x82040c80, 0x24220001, 0x04020003, 0x8c000504,
1642 0x040007e8, 0x4200b000, 0x0000000a, 0x8058b040,
1643 0x04000003, 0x0401f832, 0x0401f7fd, 0x4200b000,
1644 0x00000064, 0x59c4000d, 0x8c00051e, 0x0400000f,
1645 0x8058b040, 0x040207fc, 0x42000000, 0x00001000,
1646 0x50000000, 0x82000480, 0x24220001, 0x04020004,
1647 0x59c40808, 0x84040d10, 0x48078808, 0x80000580,
1648 0x4803c857, 0x0401f00c, 0x42000000, 0x00001000,
1649 0x50000000, 0x82000480, 0x24220001, 0x04020004,
1650 0x59c40808, 0x84040d10, 0x48078808, 0x82000540,
1651 0x00000001, 0x5c00b000, 0x1c01f000, 0x42000800,
1652 0x000000a0, 0x0401f816, 0x82040500, 0xfffffffe,
1653 0x42000800, 0x000000a0, 0x0401f816, 0x42000800,
1654 0x00000000, 0x0401f80e, 0x82040500, 0xfffffffe,
1655 0x42000800, 0x00000000, 0x0401f00e, 0x40000000,
1656 0x40000000, 0x40000000, 0x40000000, 0x40000000,
1657 0x1c01f000, 0x480b8805, 0x1c01f000, 0x4807880e,
1658 0x59c4080f, 0x82040d00, 0x000000ff, 0x1c01f000,
1659 0x900001c0, 0x80040d40, 0x84040d40, 0x4807880e,
1660 0x1c01f000, 0x82000d80, 0x00200000, 0x04000009,
1661 0x82000d80, 0x02000000, 0x04000006, 0x82000d80,
1662 0x01000000, 0x04000006, 0x59c408a3, 0x0401f006,
1663 0x59c408a3, 0x84040d30, 0x0401f003, 0x59c408a3,
1664 0x84040d32, 0x80040540, 0x480388a3, 0x480788a3,
1665 0x1c01f000, 0x59c400a3, 0x84000556, 0x480388a3,
1666 0x84000516, 0x480388a3, 0x1c01f000, 0x485fc857,
1667 0x4863c857, 0x4c640000, 0x4d3c0000, 0x4d400000,
1668 0x0201f800, 0x00106ede, 0x4863500a, 0x0201f800,
1669 0x0010ab33, 0x0402006c, 0x82600d00, 0x0000ff00,
1670 0x800409c0, 0x0400000c, 0x4200c800, 0x00000001,
1671 0x59a80010, 0x82000500, 0x000000ff, 0x80041110,
1672 0x80081580, 0x04000021, 0x82041580, 0x0000ff00,
1673 0x0400000a, 0x59c410a3, 0x82081500, 0x00008000,
1674 0x04000009, 0x59c410a7, 0x82081500, 0x0000ff00,
1675 0x82081580, 0x0000ff00, 0x4200c800, 0x00000000,
1676 0x04000012, 0x59a80005, 0x8c000502, 0x04020008,
1677 0x8c000500, 0x0402000d, 0x599c1017, 0x8c08151a,
1678 0x0400003e, 0x84000542, 0x48035005, 0x4200c800,
1679 0x00000002, 0x42028000, 0x00000004, 0x42027800,
1680 0x00000008, 0x0401f008, 0x59a80805, 0x84040d40,
1681 0x48075005, 0x42028000, 0x00000004, 0x42027800,
1682 0x00000400, 0x59a80006, 0x8c000502, 0x04020006,
1683 0x59a80805, 0x8c040d0a, 0x04020033, 0x84040d4a,
1684 0x48075005, 0x42000000, 0x0010b812, 0x0201f800,
1685 0x0010aa47, 0x59a8180a, 0x42001000, 0x00008013,
1686 0x0201f800, 0x00103a3e, 0x0201f800, 0x00103b25,
1687 0x04000015, 0x4d400000, 0x82600500, 0x000000ff,
1688 0x42028800, 0x0000ffff, 0x40643000, 0x42028000,
1689 0x0000000e, 0x0201f800, 0x0010a446, 0x42000800,
1690 0x00000001, 0x42001000, 0x00000100, 0x0201f800,
1691 0x0010618b, 0x5c028000, 0x599c0817, 0x8c040d0a,
1692 0x04020011, 0x493fc857, 0x4943c857, 0x0201f800,
1693 0x00101fe5, 0x0401f00c, 0x0201f800, 0x00103b25,
1694 0x04000009, 0x42028000, 0x0000000f, 0x42028800,
1695 0x0000ffff, 0x42003000, 0x00000000, 0x0201f800,
1696 0x0010a449, 0x497b8880, 0x5c028000, 0x5c027800,
1697 0x5c00c800, 0x1c01f000, 0x42000800, 0x000000a0,
1698 0x0401ff5f, 0x82040540, 0x00000002, 0x42000800,
1699 0x000000a0, 0x0401f75f, 0x42000800, 0x00000000,
1700 0x0401ff57, 0x82040540, 0x00000002, 0x42000800,
1701 0x00000000, 0x0401f757, 0x42000800, 0x000000a0,
1702 0x0401ff4f, 0x82040500, 0xfffffffd, 0x42000800,
1703 0x000000a0, 0x0401f74f, 0x42000800, 0x00000000,
1704 0x0401ff47, 0x82040500, 0xfffffffd, 0x42000800,
1705 0x00000000, 0x0401f747, 0x59c408a8, 0x0401ff38,
1706 0x0401ff37, 0x59c400a8, 0x80040d80, 0x040207fb,
1707 0x1c01f000, 0x4803c856, 0x4a038807, 0x00000001,
1708 0x497b8807, 0x59c40005, 0x48038805, 0x497b506c,
1709 0x497b506d, 0x41785800, 0x42006000, 0x00000001,
1710 0x42006800, 0x00000003, 0x0401f824, 0x0401f82f,
1711 0x40400000, 0x4803c857, 0x82408580, 0x00000000,
1712 0x0402001d, 0x41785800, 0x42006000, 0x0000001e,
1713 0x42006800, 0x00000014, 0x0401f818, 0x0401f823,
1714 0x40400000, 0x4803c857, 0x82408580, 0x00000800,
1715 0x04020011, 0x42005800, 0x00000001, 0x42006000,
1716 0x0000001e, 0x42006800, 0x00000014, 0x0401f80b,
1717 0x0401f816, 0x40400000, 0x4803c857, 0x82408580,
1718 0x0000ffff, 0x04020004, 0x4a03506c, 0x00000001,
1719 0x4803c856, 0x1c01f000, 0x41785000, 0x0401f812,
1720 0x0401f838, 0x40347000, 0x40340800, 0x0401f03d,
1721 0x42005000, 0x00000001, 0x0401f80b, 0x0401f831,
1722 0x40340800, 0x0401f037, 0x42005000, 0x00000002,
1723 0x0401f805, 0x0401f81d, 0x0401f835, 0x40048000,
1724 0x1c01f000, 0x0401f808, 0x0401f814, 0x40280800,
1725 0x0401f826, 0x402c0800, 0x0401f827, 0x40300800,
1726 0x0401f025, 0x42000800, 0x0000ffff, 0x42001000,
1727 0x00000001, 0x0401f829, 0x42001000, 0x00000010,
1728 0x0401f826, 0x42000800, 0x0000ffff, 0x42001000,
1729 0x00000010, 0x0401f021, 0x41780800, 0x42001000,
1730 0x00000002, 0x0401f01d, 0x0401f92e, 0x4a03d000,
1731 0x00050004, 0x0401f92b, 0x4a03d000, 0x00050005,
1732 0x0401f928, 0x4a03d000, 0x00050004, 0x42000800,
1733 0x00000001, 0x42001000, 0x00000001, 0x0401f00f,
1734 0x42000800, 0x00000002, 0x42001000, 0x00000002,
1735 0x0401f00a, 0x42001000, 0x00000005, 0x0401f007,
1736 0x42001000, 0x00000010, 0x0401f004, 0x42001000,
1737 0x00000010, 0x0401f01b, 0x0401f912, 0x82082c00,
1738 0x0010ab38, 0x50142800, 0x82081500, 0xffffffff,
1739 0x04000013, 0x0401f90b, 0x80081040, 0x80142902,
1740 0x40040000, 0x80140500, 0x04000007, 0x4a03d000,
1741 0x00070006, 0x0401f903, 0x4a03d000, 0x00070007,
1742 0x0401f006, 0x4a03d000, 0x00070004, 0x0401f8fd,
1743 0x4a03d000, 0x00070005, 0x0401f7ec, 0x1c01f000,
1744 0x41780800, 0x82082c00, 0x0010ab38, 0x50142800,
1745 0x82081500, 0xffffffff, 0x04000010, 0x0401f8f1,
1746 0x4a03d000, 0x00050001, 0x0401f8ee, 0x59e81800,
1747 0x80081040, 0x80142902, 0x8c0c1d06, 0x04000004,
1748 0x40140000, 0x80040d40, 0x0401f8e6, 0x4a03d000,
1749 0x00070000, 0x0401f7ef, 0x1c01f000, 0x480bc857,
1750 0x480b506d, 0x59c40001, 0x82000500, 0xffffefff,
1751 0x48038801, 0x41781800, 0x0401f8c4, 0x41785800,
1752 0x42006000, 0x0000001e, 0x42006800, 0x00000004,
1753 0x0401ff7a, 0x42006800, 0x0000003c, 0x0401ff7d,
1754 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
1755 0x00000004, 0x0401ff71, 0x41786800, 0x0401ff75,
1756 0x41785800, 0x42006000, 0x0000001e, 0x41786800,
1757 0x0401ff6a, 0x42006800, 0x00000002, 0x0401ff6d,
1758 0x42006800, 0x00000001, 0x0401ff64, 0x42006800,
1759 0x000000f5, 0x0401ff67, 0x41785800, 0x42006000,
1760 0x0000001e, 0x42006800, 0x00000004, 0x0401ff5b,
1761 0x42006800, 0x00000020, 0x0401ff5e, 0x59a8106d,
1762 0x0401f865, 0x42001800, 0x000200f5, 0x0401f897,
1763 0x59a8106d, 0x0401f879, 0x41785800, 0x42006000,
1764 0x0000001e, 0x42006800, 0x00000004, 0x0401ff4b,
1765 0x41786800, 0x0401ff4f, 0x59c40001, 0x82000540,
1766 0x00001000, 0x48038801, 0x41785800, 0x42006000,
1767 0x0000001e, 0x42006800, 0x00000015, 0x0401ff3f,
1768 0x0401ff4a, 0x40400000, 0x82000540, 0x00000002,
1769 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
1770 0x42006800, 0x00000015, 0x0401ff34, 0x5c000000,
1771 0x40006800, 0x0401ff37, 0x41785800, 0x42006000,
1772 0x0000001e, 0x42006800, 0x00000015, 0x0401ff2b,
1773 0x0401ff36, 0x40400000, 0x82000500, 0x0000fffd,
1774 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
1775 0x42006800, 0x00000015, 0x0401ff20, 0x5c000000,
1776 0x40006800, 0x0401ff23, 0x41785800, 0x42006000,
1777 0x0000001e, 0x42006800, 0x00000014, 0x0401ff17,
1778 0x0401ff22, 0x40400000, 0x82000540, 0x00000040,
1779 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
1780 0x42006800, 0x00000014, 0x0401ff0c, 0x5c000000,
1781 0x40006800, 0x0401ff0f, 0x41785800, 0x42006000,
1782 0x0000001e, 0x42006800, 0x00000014, 0x0401ff03,
1783 0x0401ff0e, 0x40400000, 0x82000500, 0x0000ffbf,
1784 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
1785 0x42006800, 0x00000014, 0x0401fef8, 0x5c000000,
1786 0x40006800, 0x0401fefb, 0x4a038886, 0x00002020,
1787 0x0401f04c, 0x480bc857, 0x82080580, 0x00010000,
1788 0x04020007, 0x82040d40, 0x00010000, 0x42001800,
1789 0x00000001, 0x0401f82d, 0x0401f00f, 0x82080580,
1790 0x00008000, 0x04000007, 0x82040d40, 0x00000000,
1791 0x42001800, 0x00900001, 0x0401f824, 0x0401f006,
1792 0x82040d40, 0x00008000, 0x42001800, 0x00100001,
1793 0x0401f81e, 0x1c01f000, 0x480bc857, 0x82080580,
1794 0x00010000, 0x04020008, 0x42001800, 0x000000a1,
1795 0x0401f816, 0x42001800, 0x000000c1, 0x0401f813,
1796 0x0401f011, 0x82080580, 0x00008000, 0x04000008,
1797 0x42001800, 0x000400a1, 0x0401f80c, 0x42001800,
1798 0x002000c1, 0x0401f809, 0x0401f007, 0x42001800,
1799 0x000400a1, 0x0401f805, 0x42001800, 0x000000c1,
1800 0x0401f802, 0x1c01f000, 0x480fc857, 0x41785800,
1801 0x42006000, 0x0000001e, 0x41786800, 0x0401feb7,
1802 0x400c6800, 0x80346960, 0x0401feba, 0x42006800,
1803 0x00000001, 0x0401feb1, 0x400c6800, 0x0401feb5,
1804 0x42006800, 0x00000003, 0x0401feac, 0x0401feb7,
1805 0x40400000, 0x8c000504, 0x040207fc, 0x1c01f000,
1806 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
1807 0x1c01f000, 0x00020103, 0x00101bd5, 0x00101bdb,
1808 0x00101be1, 0x00101be9, 0x00101bef, 0x00101bf7,
1809 0x00101bff, 0x00101c09, 0x00101c0f, 0x00101c17,
1810 0x00101c1f, 0x00101c29, 0x00101c31, 0x00101c3b,
1811 0x00101c45, 0x000200f8, 0x00101c51, 0x00101c59,
1812 0x00101c61, 0x00101c6b, 0x00101c73, 0x00101c7d,
1813 0x00101c87, 0x00101c93, 0x00101c9b, 0x00101ca5,
1814 0x00101caf, 0x00101cbb, 0x00101cc5, 0x00101cd1,
1815 0x00101cdd, 0x000200fd, 0x00101ceb, 0x00101cf3,
1816 0x00101cfb, 0x00101d05, 0x00101d0d, 0x00101d17,
1817 0x00101d21, 0x00101d2d, 0x00101d35, 0x00101d3f,
1818 0x00101d49, 0x00101d55, 0x00101d5f, 0x00101d6b,
1819 0x00101d77, 0x00101d85, 0x00101d8d, 0x00101d97,
1820 0x00101da1, 0x00101dad, 0x00101db7, 0x00101dc3,
1821 0x00101dcf, 0x00101ddd, 0x00101de7, 0x00101df3,
1822 0x00101dff, 0x00101e0d, 0x00101e19, 0x00101e27,
1823 0x00101e35, 0x4c000000, 0x4df00000, 0x0201f800,
1824 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1825 0x4df00000, 0x0201f800, 0x00101418, 0x0201f000,
1826 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1827 0x00101418, 0x0201f800, 0x00020104, 0x0201f000,
1828 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1829 0x00101155, 0x0201f000, 0x00020101, 0x4c000000,
1830 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1831 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1832 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1833 0x00101418, 0x0201f000, 0x00020101, 0x4c000000,
1834 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1835 0x00101418, 0x0201f800, 0x00020104, 0x0201f000,
1836 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1837 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1838 0x4df00000, 0x0201f800, 0x00101289, 0x0201f800,
1839 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1840 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1841 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1842 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1843 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1844 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1845 0x00101155, 0x0201f800, 0x00101289, 0x0201f000,
1846 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1847 0x00101155, 0x0201f800, 0x00101289, 0x0201f800,
1848 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1849 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1850 0x00101418, 0x0201f800, 0x00101289, 0x0201f000,
1851 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1852 0x00101155, 0x0201f800, 0x00101418, 0x0201f800,
1853 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1854 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1855 0x00020729, 0x0201f800, 0x00020104, 0x0201f000,
1856 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1857 0x00101418, 0x0201f800, 0x00020729, 0x0201f000,
1858 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1859 0x00101418, 0x0201f800, 0x00020729, 0x0201f800,
1860 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1861 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1862 0x00020729, 0x0201f000, 0x00020101, 0x4c000000,
1863 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1864 0x00020729, 0x0201f800, 0x00020104, 0x0201f000,
1865 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1866 0x00101155, 0x0201f800, 0x00101418, 0x0201f800,
1867 0x00020729, 0x0201f000, 0x00020101, 0x4c000000,
1868 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1869 0x00101418, 0x0201f800, 0x00020729, 0x0201f800,
1870 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1871 0x4df00000, 0x0201f800, 0x00020729, 0x0201f800,
1872 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1873 0x4df00000, 0x0201f800, 0x00020729, 0x0201f800,
1874 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1875 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1876 0x00101418, 0x0201f800, 0x00020729, 0x0201f800,
1877 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1878 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1879 0x00020729, 0x0201f800, 0x00101289, 0x0201f800,
1880 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1881 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1882 0x00020729, 0x0201f800, 0x00101289, 0x0201f000,
1883 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1884 0x00101155, 0x0201f800, 0x00020729, 0x0201f800,
1885 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1886 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1887 0x00101155, 0x0201f800, 0x00101418, 0x0201f800,
1888 0x00020729, 0x0201f800, 0x00101289, 0x0201f000,
1889 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1890 0x00101155, 0x0201f800, 0x00101418, 0x0201f800,
1891 0x00020729, 0x0201f800, 0x00101289, 0x0201f800,
1892 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1893 0x4df00000, 0x0201f800, 0x00020015, 0x0201f800,
1894 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1895 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1896 0x00020015, 0x0201f000, 0x00020101, 0x4c000000,
1897 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1898 0x00020015, 0x0201f800, 0x00020104, 0x0201f000,
1899 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1900 0x00101155, 0x0201f800, 0x00020015, 0x0201f000,
1901 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1902 0x00101155, 0x0201f800, 0x00020015, 0x0201f800,
1903 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1904 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1905 0x00101155, 0x0201f800, 0x00020015, 0x0201f000,
1906 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1907 0x00101418, 0x0201f800, 0x00101155, 0x0201f800,
1908 0x00020015, 0x0201f800, 0x00020104, 0x0201f000,
1909 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1910 0x00020015, 0x0201f800, 0x00101289, 0x0201f000,
1911 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1912 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1913 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1914 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1915 0x00020015, 0x0201f800, 0x00101289, 0x0201f000,
1916 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1917 0x00101418, 0x0201f800, 0x00020015, 0x0201f800,
1918 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1919 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1920 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1921 0x00101155, 0x0201f000, 0x00020101, 0x4c000000,
1922 0x4df00000, 0x0201f800, 0x00020015, 0x0201f800,
1923 0x00101289, 0x0201f800, 0x00101155, 0x0201f800,
1924 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1925 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1926 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1927 0x00101155, 0x0201f000, 0x00020101, 0x4c000000,
1928 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1929 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1930 0x00101155, 0x0201f800, 0x00020104, 0x0201f000,
1931 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1932 0x00020729, 0x0201f800, 0x00020015, 0x0201f000,
1933 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1934 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1935 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1936 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1937 0x00020729, 0x0201f800, 0x00020015, 0x0201f000,
1938 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1939 0x00101418, 0x0201f800, 0x00020729, 0x0201f800,
1940 0x00020015, 0x0201f800, 0x00020104, 0x0201f000,
1941 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1942 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1943 0x00101155, 0x0201f000, 0x00020101, 0x4c000000,
1944 0x4df00000, 0x0201f800, 0x00020729, 0x0201f800,
1945 0x00020015, 0x0201f800, 0x00101155, 0x0201f800,
1946 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1947 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1948 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1949 0x00101155, 0x0201f000, 0x00020101, 0x4c000000,
1950 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1951 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1952 0x00101155, 0x0201f800, 0x00020104, 0x0201f000,
1953 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1954 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1955 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1956 0x4df00000, 0x0201f800, 0x00020729, 0x0201f800,
1957 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1958 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1959 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1960 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1961 0x00101289, 0x0201f000, 0x00020101, 0x4c000000,
1962 0x4df00000, 0x0201f800, 0x00101418, 0x0201f800,
1963 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1964 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1965 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1966 0x00101155, 0x0201f800, 0x00020729, 0x0201f800,
1967 0x00020015, 0x0201f800, 0x00101289, 0x0201f000,
1968 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1969 0x00101155, 0x0201f800, 0x00020729, 0x0201f800,
1970 0x00020015, 0x0201f800, 0x00101289, 0x0201f800,
1971 0x00020104, 0x0201f000, 0x00020101, 0x4c000000,
1972 0x4df00000, 0x0201f800, 0x00101155, 0x0201f800,
1973 0x00101418, 0x0201f800, 0x00020729, 0x0201f800,
1974 0x00020015, 0x0201f800, 0x00101289, 0x0201f000,
1975 0x00020101, 0x4c000000, 0x4df00000, 0x0201f800,
1976 0x00101155, 0x0201f800, 0x00101418, 0x0201f800,
1977 0x00020729, 0x0201f800, 0x00020015, 0x0201f800,
1978 0x00101289, 0x0201f800, 0x00020104, 0x0201f000,
1979 0x00020101, 0x4c5c0000, 0x4c600000, 0x4178b800,
1980 0x0201f800, 0x001048ec, 0x040200fd, 0x59a8c026,
1981 0x0201f800, 0x0010513b, 0x04000003, 0x8c60c506,
1982 0x0400000e, 0x8c60c500, 0x04020004, 0x8c60c50e,
1983 0x040008f6, 0x0401f0f2, 0x0401fab4, 0x040200f0,
1984 0x0201f800, 0x0010513b, 0x04020004, 0x4a03501c,
1985 0x0000ffff, 0x0401f0ea, 0x8c60c504, 0x04000004,
1986 0x4a03501c, 0x0000ffff, 0x0401f0e5, 0x59a8c010,
1987 0x8260c500, 0x000000ff, 0x59a81013, 0x8c081500,
1988 0x0400005d, 0x8c081502, 0x0402005b, 0x59a8b81c,
1989 0x825c0d80, 0x0000ffff, 0x04020003, 0x4200b800,
1990 0x00000001, 0x805c1104, 0x82086400, 0x0010be21,
1991 0x50300800, 0x825c0500, 0x00000003, 0x0c01f001,
1992 0x00101e81, 0x00101e7c, 0x00101e80, 0x00101e7e,
1993 0x80040910, 0x0401f004, 0x80040930, 0x0401f002,
1994 0x80040920, 0x82040500, 0x000000ff, 0x82000d80,
1995 0x000000ff, 0x0400000f, 0x4c000000, 0x82000400,
1996 0x0010210e, 0x50000800, 0x80040910, 0x82040580,
1997 0x00000080, 0x5c000000, 0x04000030, 0x80600d80,
1998 0x0400002e, 0x80000540, 0x0400002c, 0x0401f00b,
1999 0x59a81005, 0x82081500, 0x00000003, 0x0402002b,
2000 0x59a81013, 0x84081542, 0x480b5013, 0x4a03501c,
2001 0x0000ffff, 0x0401f028, 0x4c000000, 0x59a80005,
2002 0x8c000514, 0x42001000, 0x00000010, 0x02020800,
2003 0x00104c6d, 0x5c000000, 0x0402001c, 0x417a8800,
2004 0x0201f800, 0x00105c9a, 0x04020016, 0x0201f800,
2005 0x001045e5, 0x04000006, 0x0201f800, 0x00104c62,
2006 0x0401f8b1, 0x0400000f, 0x0401f00c, 0x599c0019,
2007 0x8c00050e, 0x04020009, 0x0201f800, 0x001045a6,
2008 0x04020008, 0x0201f800, 0x00104c62, 0x0401f9e1,
2009 0x0401f8be, 0x04000003, 0x805cb800, 0x0401f7b2,
2010 0x485f501c, 0x0401f086, 0x4a03501c, 0x0000ffff,
2011 0x0401f083, 0x42003000, 0x0000007e, 0x59a8001c,
2012 0x82001580, 0x0000ffff, 0x04020005, 0x80000d80,
2013 0x4018b000, 0x4803c856, 0x0401f009, 0x8018b480,
2014 0x04001004, 0x40000800, 0x4803c856, 0x0401f004,
2015 0x4a03501c, 0x0000ffff, 0x0401f071, 0x4c040000,
2016 0x4c580000, 0x82040400, 0x0010210e, 0x50000000,
2017 0x82000500, 0x000000ff, 0x80604580, 0x0400005c,
2018 0x0201f800, 0x00105c9b, 0x04020061, 0x59a80005,
2019 0x8c000514, 0x42001000, 0x00000010, 0x02020800,
2020 0x00104c6d, 0x5c00b000, 0x5c000800, 0x040207d7,
2021 0x4c040000, 0x4c580000, 0x845cbd00, 0x0201f800,
2022 0x00020245, 0x04000008, 0x599c0019, 0x8c00050e,
2023 0x04020047, 0x0201f800, 0x001045ab, 0x0402004c,
2024 0x0401f002, 0x845cbd40, 0x0201f800, 0x00104c62,
2025 0x0201f800, 0x001049e7, 0x04020007, 0x59a80005,
2026 0x8c000502, 0x04000033, 0x59340200, 0x8c00050e,
2027 0x04020030, 0x59a81013, 0x8c081502, 0x04000025,
2028 0x0201f800, 0x00104a09, 0x04000031, 0x8c5cbd00,
2029 0x04020004, 0x0201f800, 0x001045ff, 0x0401f02c,
2030 0x0401f9cd, 0x0400002a, 0x42026000, 0x0010bde9,
2031 0x49366009, 0x497a6008, 0x417a7800, 0x0401f925,
2032 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
2033 0x0201f800, 0x00103b25, 0x0400001d, 0x41782800,
2034 0x42003000, 0x00000008, 0x4d400000, 0x4d440000,
2035 0x59368c03, 0x42028000, 0x00000029, 0x0201f800,
2036 0x0010a446, 0x5c028800, 0x5c028000, 0x0401f010,
2037 0x4937c857, 0x599c0019, 0x8c00050e, 0x0402000c,
2038 0x0401f96c, 0x0401f849, 0x04000011, 0x0401f008,
2039 0x59a80013, 0x8c000500, 0x04000003, 0x0401f9a6,
2040 0x04000003, 0x0401f828, 0x04000009, 0x5c00b000,
2041 0x5c000800, 0x80040800, 0x8058b040, 0x04020798,
2042 0x4a03501c, 0x0000ffff, 0x0401f005, 0x4937c857,
2043 0x5c00b000, 0x5c000800, 0x4807501c, 0x5c00c000,
2044 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4a03501c,
2045 0x00000001, 0x42028800, 0x000007fe, 0x42003000,
2046 0x00fffffe, 0x0201f800, 0x001045a6, 0x0402000c,
2047 0x0401f948, 0x0401f825, 0x04000009, 0x59a80026,
2048 0x8400054e, 0x48035026, 0x0201f800, 0x0010930f,
2049 0x82000540, 0x00000001, 0x1c01f000, 0x80000580,
2050 0x0401f7fe, 0x4937c857, 0x0201f800, 0x00107942,
2051 0x04000015, 0x49366009, 0x4a026406, 0x00000001,
2052 0x417a7800, 0x0201f800, 0x00104567, 0x59a8001b,
2053 0x80000000, 0x4803501b, 0x42027000, 0x00000004,
2054 0x599c0019, 0x8c00050e, 0x04000003, 0x42027000,
2055 0x00000000, 0x0201f800, 0x000207a1, 0x82000540,
2056 0x00000001, 0x1c01f000, 0x4937c857, 0x0201f800,
2057 0x00107942, 0x0400001c, 0x49366009, 0x59340403,
2058 0x82000580, 0x000007fe, 0x04000005, 0x4d3c0000,
2059 0x417a7800, 0x0401f8b7, 0x5c027800, 0x4a026406,
2060 0x00000001, 0x417a7800, 0x0201f800, 0x00104567,
2061 0x42000800, 0x00000003, 0x0201f800, 0x00104571,
2062 0x59a8001b, 0x80000000, 0x4803501b, 0x42027000,
2063 0x00000002, 0x0201f800, 0x000207a1, 0x82000540,
2064 0x00000001, 0x1c01f000, 0x4803c856, 0x42028800,
2065 0x000007fc, 0x42003000, 0x00fffffc, 0x0201f800,
2066 0x001045a6, 0x04020005, 0x0401f805, 0x04000003,
2067 0x4a035027, 0x0000ffff, 0x1c01f000, 0x4937c857,
2068 0x0201f800, 0x00107942, 0x04000014, 0x49366009,
2069 0x4a026406, 0x00000001, 0x417a7800, 0x0201f800,
2070 0x00104567, 0x42000800, 0x00000003, 0x0201f800,
2071 0x00104571, 0x59a80028, 0x80000000, 0x48035028,
2072 0x42027000, 0x00000002, 0x0201f800, 0x000207a1,
2073 0x82000540, 0x00000001, 0x1c01f000, 0x480bc857,
2074 0x492fc857, 0x4c5c0000, 0x4008b800, 0x42028800,
2075 0x000007fd, 0x42003000, 0x00fffffd, 0x0201f800,
2076 0x001045a6, 0x0402001a, 0x0201f800, 0x0002075a,
2077 0x04000017, 0x49366009, 0x5934000a, 0x84000544,
2078 0x4802680a, 0x812e59c0, 0x04000005, 0x592c0404,
2079 0x8c00051e, 0x04000002, 0x48ee6021, 0x492e6008,
2080 0x4a026406, 0x00000001, 0x485e601c, 0x42027000,
2081 0x00000022, 0x0201f800, 0x000207a1, 0x82000540,
2082 0x00000001, 0x5c00b800, 0x1c01f000, 0x80000580,
2083 0x0401f7fd, 0x5c000000, 0x4c000000, 0x4803c857,
2084 0x4943c857, 0x493fc857, 0x4d340000, 0x4d440000,
2085 0x4c580000, 0x4d2c0000, 0x4c5c0000, 0x0201f800,
2086 0x00106c55, 0x4df00000, 0x0201f800, 0x001069f1,
2087 0x0201f800, 0x00106aac, 0x0201f800, 0x00106737,
2088 0x0201f800, 0x0010848a, 0x5c03e000, 0x02000800,
2089 0x00106c4b, 0x4200b000, 0x000007f0, 0x417a8800,
2090 0x0201f800, 0x00020245, 0x0402001f, 0x8d3e7d14,
2091 0x04000005, 0x59340212, 0x82000500, 0x0000ff00,
2092 0x04000019, 0x8d3e7d06, 0x04000004, 0x59340200,
2093 0x8c00050e, 0x04020014, 0x8d3e7d18, 0x0400000f,
2094 0x5934b80f, 0x805cb9c0, 0x04000009, 0x49425a06,
2095 0x592cb800, 0x0201f800, 0x000202ce, 0x805cb9c0,
2096 0x040207fb, 0x497a680f, 0x497a6810, 0x4a026c00,
2097 0x00000707, 0x0401f004, 0x4937c857, 0x0201f800,
2098 0x001042b4, 0x81468800, 0x8058b040, 0x040207dd,
2099 0x8d3e7d02, 0x04000011, 0x497b501d, 0x42028800,
2100 0x000007f0, 0x4200b000, 0x00000010, 0x0201f800,
2101 0x00020245, 0x04020006, 0x4937c857, 0x4a026c00,
2102 0x00000707, 0x0201f800, 0x001042b4, 0x81468800,
2103 0x8058b040, 0x040207f6, 0x5c00b800, 0x5c025800,
2104 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000,
2105 0x5c000000, 0x4c000000, 0x4803c857, 0x4933c857,
2106 0x493fc857, 0x4d340000, 0x4d400000, 0x4d440000,
2107 0x4d2c0000, 0x4c5c0000, 0x0201f800, 0x00106c55,
2108 0x4df00000, 0x59326809, 0x813669c0, 0x04000020,
2109 0x59368c03, 0x42028000, 0x00000029, 0x0201f800,
2110 0x00106a50, 0x0201f800, 0x00106ab4, 0x0201f800,
2111 0x001067fd, 0x0201f800, 0x0010a2ff, 0x4937c857,
2112 0x8d3e7d18, 0x04000010, 0x5934b80f, 0x805cb9c0,
2113 0x0400000a, 0x405e5800, 0x49425a06, 0x592cb800,
2114 0x0201f800, 0x000202ce, 0x805cb9c0, 0x040207fa,
2115 0x497a680f, 0x497a6810, 0x4a026c00, 0x00000707,
2116 0x0401f003, 0x0201f800, 0x001042b4, 0x5c03e000,
2117 0x02000800, 0x00106c4b, 0x5c00b800, 0x5c025800,
2118 0x5c028800, 0x5c028000, 0x5c026800, 0x1c01f000,
2119 0x4933c857, 0x59a80026, 0x8c000508, 0x04020012,
2120 0x59305009, 0x482bc857, 0x836c0580, 0x00000002,
2121 0x0402000d, 0x0401f813, 0x0402000b, 0x58280403,
2122 0x82000580, 0x000007fc, 0x04000008, 0x59a8001b,
2123 0x80000040, 0x4803c857, 0x02001800, 0x001005d8,
2124 0x4803501b, 0x1c01f000, 0x59a80028, 0x80000040,
2125 0x4803c857, 0x040017fc, 0x48035028, 0x1c01f000,
2126 0x59300008, 0x800001c0, 0x04020009, 0x59300403,
2127 0x82000580, 0x00000001, 0x04020004, 0x82000540,
2128 0x00000001, 0x0401f002, 0x80000580, 0x1c01f000,
2129 0x4937c857, 0x59340200, 0x84000502, 0x48026a00,
2130 0x1c01f000, 0x4933c857, 0x493fc857, 0x4947c857,
2131 0x4d3c0000, 0x4d400000, 0x4d340000, 0x4d440000,
2132 0x4c580000, 0x0201f800, 0x00106c55, 0x4df00000,
2133 0x813e79c0, 0x04020004, 0x4200b000, 0x00000001,
2134 0x0401f004, 0x4200b000, 0x000007f0, 0x417a8800,
2135 0x41440000, 0x81ac0400, 0x50000000, 0x80026d40,
2136 0x04000019, 0x42027800, 0x00000001, 0x0201f800,
2137 0x001048f6, 0x42028000, 0x00000029, 0x417a7800,
2138 0x0201f800, 0x00106a50, 0x0201f800, 0x00106ab4,
2139 0x0201f800, 0x001067fd, 0x0201f800, 0x001049e7,
2140 0x04020005, 0x4937c857, 0x4a026c00, 0x00000404,
2141 0x0401f003, 0x0201f800, 0x00104a14, 0x0201f800,
2142 0x0010a2ff, 0x81468800, 0x8058b040, 0x040207e1,
2143 0x5c03e000, 0x02000800, 0x00106c4b, 0x5c00b000,
2144 0x5c028800, 0x5c026800, 0x5c028000, 0x5c027800,
2145 0x1c01f000, 0x4937c857, 0x4947c857, 0x4c5c0000,
2146 0x4c600000, 0x4c640000, 0x59a80013, 0x8c000500,
2147 0x0400001f, 0x599c0017, 0x8c00050a, 0x0402001c,
2148 0x5934ba02, 0x825cbd00, 0x000000ff, 0x485fc857,
2149 0x4178c000, 0x4178c800, 0x82600400, 0x0010be21,
2150 0x50002000, 0x8060c1c0, 0x04000008, 0x82100500,
2151 0x000000ff, 0x82002d80, 0x000000ff, 0x0400000c,
2152 0x805c0580, 0x0400000d, 0x80102110, 0x8064c800,
2153 0x82640580, 0x00000004, 0x040207f5, 0x8060c000,
2154 0x82600580, 0x00000020, 0x040207eb, 0x4813c857,
2155 0x82000540, 0x00000001, 0x5c00c800, 0x5c00c000,
2156 0x5c00b800, 0x1c01f000, 0x59a80026, 0x4803c857,
2157 0x8c000512, 0x1c01f000, 0x00007eef, 0x00007de8,
2158 0x00007ce4, 0x000080e2, 0x00007be1, 0x000080e0,
2159 0x000080dc, 0x000080da, 0x00007ad9, 0x000080d6,
2160 0x000080d5, 0x000080d4, 0x000080d3, 0x000080d2,
2161 0x000080d1, 0x000079ce, 0x000078cd, 0x000080cc,
2162 0x000080cb, 0x000080ca, 0x000080c9, 0x000080c7,
2163 0x000080c6, 0x000077c5, 0x000076c3, 0x000080bc,
2164 0x000080ba, 0x000075b9, 0x000080b6, 0x000074b5,
2165 0x000073b4, 0x000072b3, 0x000080b2, 0x000080b1,
2166 0x000080ae, 0x000071ad, 0x000080ac, 0x000070ab,
2167 0x00006faa, 0x00006ea9, 0x000080a7, 0x00006da6,
2168 0x00006ca5, 0x00006ba3, 0x00006a9f, 0x0000699e,
2169 0x0000689d, 0x0000809b, 0x00008098, 0x00006797,
2170 0x00006690, 0x0000658f, 0x00006488, 0x00006384,
2171 0x00006282, 0x00008081, 0x00008080, 0x0000617c,
2172 0x0000607a, 0x00008079, 0x00005f76, 0x00008075,
2173 0x00008074, 0x00008073, 0x00008072, 0x00008071,
2174 0x0000806e, 0x00005e6d, 0x0000806c, 0x00005d6b,
2175 0x00005c6a, 0x00005b69, 0x00008067, 0x00005a66,
2176 0x00005965, 0x00005863, 0x0000575c, 0x0000565a,
2177 0x00005559, 0x00008056, 0x00008055, 0x00005454,
2178 0x00005353, 0x00005252, 0x00005151, 0x0000504e,
2179 0x00004f4d, 0x0000804c, 0x0000804b, 0x00004e4a,
2180 0x00004d49, 0x00008047, 0x00004c46, 0x00008045,
2181 0x00008043, 0x0000803c, 0x0000803a, 0x00008039,
2182 0x00008036, 0x00004b35, 0x00008034, 0x00004a33,
2183 0x00004932, 0x00004831, 0x0000802e, 0x0000472d,
2184 0x0000462c, 0x0000452b, 0x0000442a, 0x00004329,
2185 0x00004227, 0x00008026, 0x00008025, 0x00004123,
2186 0x0000401f, 0x00003f1e, 0x00003e1d, 0x00003d1b,
2187 0x00003c18, 0x00008017, 0x00008010, 0x00003b0f,
2188 0x00003a08, 0x00008004, 0x00003902, 0x00008001,
2189 0x00008000, 0x00008000, 0x00003800, 0x00003700,
2190 0x00003600, 0x00008000, 0x00003500, 0x00008000,
2191 0x00008000, 0x00008000, 0x00003400, 0x00008000,
2192 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2193 0x00008000, 0x00003300, 0x00003200, 0x00008000,
2194 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2195 0x00008000, 0x00003100, 0x00003000, 0x00008000,
2196 0x00008000, 0x00002f00, 0x00008000, 0x00002e00,
2197 0x00002d00, 0x00002c00, 0x00008000, 0x00008000,
2198 0x00008000, 0x00002b00, 0x00008000, 0x00002a00,
2199 0x00002900, 0x00002800, 0x00008000, 0x00002700,
2200 0x00002600, 0x00002500, 0x00002400, 0x00002300,
2201 0x00002200, 0x00008000, 0x00008000, 0x00002100,
2202 0x00002000, 0x00001f00, 0x00001e00, 0x00001d00,
2203 0x00001c00, 0x00008000, 0x00008000, 0x00001b00,
2204 0x00001a00, 0x00008000, 0x00001900, 0x00008000,
2205 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2206 0x00008000, 0x00001800, 0x00008000, 0x00001700,
2207 0x00001600, 0x00001500, 0x00008000, 0x00001400,
2208 0x00001300, 0x00001200, 0x00001100, 0x00001000,
2209 0x00000f00, 0x00008000, 0x00008000, 0x00000e00,
2210 0x00000d00, 0x00000c00, 0x00000b00, 0x00000a00,
2211 0x00000900, 0x00008000, 0x00008000, 0x00000800,
2212 0x00000700, 0x00008000, 0x00000600, 0x00008000,
2213 0x00008000, 0x00008000, 0x00000500, 0x00000400,
2214 0x00000300, 0x00008000, 0x00000200, 0x00008000,
2215 0x00008000, 0x00008000, 0x00000100, 0x00008000,
2216 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2217 0x00008000, 0x00000000, 0x00008000, 0x00008000,
2218 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2219 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2220 0x00008000, 0x00008000, 0x00008000, 0x00008000,
2221 0x00008000, 0x00008000, 0x0201f800, 0x001007d3,
2222 0x02000800, 0x001005d8, 0x492f4016, 0x1c01f000,
2223 0x83a0ac00, 0x00000006, 0x83a00580, 0x0010b4a4,
2224 0x0400000c, 0x492fc857, 0x812e59c0, 0x02000800,
2225 0x001005d8, 0x832ca400, 0x00000006, 0x4200b000,
2226 0x0000000d, 0x0201f800, 0x0010ab17, 0x0401f00f,
2227 0x4200b000, 0x00000010, 0x83e0a400, 0x00000020,
2228 0x50500000, 0x8050a000, 0x50500800, 0x900409c0,
2229 0x80040540, 0x4400a800, 0x8050a000, 0x8054a800,
2230 0x8058b040, 0x040207f7, 0x1c01f000, 0x59a00206,
2231 0x4803c857, 0x82000c80, 0x0000007f, 0x040210c9,
2232 0x59a80821, 0x0c01f001, 0x001022c0, 0x00102300,
2233 0x00102300, 0x0010234b, 0x0010236d, 0x00102300,
2234 0x001022c0, 0x0010238f, 0x001023a0, 0x00102300,
2235 0x00102300, 0x001023ad, 0x001023c5, 0x001023dd,
2236 0x00102300, 0x001023e7, 0x001023f4, 0x00102300,
2237 0x0010241d, 0x00102300, 0x0010247a, 0x00102300,
2238 0x00102300, 0x00102300, 0x00102300, 0x00102300,
2239 0x00102300, 0x00102300, 0x00102300, 0x00102300,
2240 0x00102300, 0x00102300, 0x00102491, 0x00102300,
2241 0x001024e3, 0x00102300, 0x00102300, 0x00102300,
2242 0x00102300, 0x001024e8, 0x00102560, 0x00102300,
2243 0x00102567, 0x00102300, 0x00102300, 0x00102300,
2244 0x00102300, 0x00102300, 0x00102569, 0x001025ea,
2245 0x00102727, 0x00102300, 0x00102300, 0x00102300,
2246 0x00102300, 0x00102300, 0x00102736, 0x00102300,
2247 0x00102300, 0x00102300, 0x00102300, 0x00102300,
2248 0x00102300, 0x00102300, 0x00102753, 0x001027a6,
2249 0x00102802, 0x00102816, 0x00102835, 0x00102a70,
2250 0x00102dff, 0x00102300, 0x00102300, 0x00102300,
2251 0x00102300, 0x00102300, 0x00102300, 0x00102300,
2252 0x00102300, 0x00102300, 0x00102300, 0x00102300,
2253 0x00102300, 0x00102fb4, 0x00103028, 0x00102300,
2254 0x00102300, 0x00103094, 0x00102300, 0x00103126,
2255 0x001031d8, 0x00102300, 0x00102300, 0x0010320f,
2256 0x0010326b, 0x00102300, 0x001032bd, 0x00103419,
2257 0x00102300, 0x0010342d, 0x001034b8, 0x00102300,
2258 0x00102300, 0x00102300, 0x00102300, 0x00103522,
2259 0x00103526, 0x00103545, 0x00102300, 0x001035e7,
2260 0x00102300, 0x00102300, 0x00103615, 0x00102300,
2261 0x00103643, 0x00102300, 0x00102300, 0x001036aa,
2262 0x001037b7, 0x00103814, 0x00102300, 0x0010387a,
2263 0x00102300, 0x00102300, 0x001038d3, 0x00103936,
2264 0x00102300, 0x48efc857, 0x4031d800, 0x58ef400b,
2265 0x58ec0002, 0x82000580, 0x00000200, 0x04000045,
2266 0x48efc857, 0x4a034206, 0x00004000, 0x0201f800,
2267 0x00103a15, 0x83a00580, 0x0010b4a4, 0x0400000d,
2268 0x58ee580a, 0x4d2c0000, 0x0401f856, 0x41a25800,
2269 0x0201f800, 0x001007f4, 0x40ee5800, 0x0201f800,
2270 0x001007f4, 0x5c025800, 0x0201f000, 0x000202da,
2271 0x04026007, 0x59a0001d, 0x84000542, 0x4803401d,
2272 0x4a01d809, 0x001022d4, 0x1c01f000, 0x59a00206,
2273 0x82000d80, 0x00004000, 0x04000006, 0x900001c0,
2274 0x82000540, 0x00000011, 0x4803c011, 0x0401f005,
2275 0x900001c0, 0x82000540, 0x00000010, 0x4803c011,
2276 0x0401f845, 0x59e00017, 0x8c000508, 0x0402000c,
2277 0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
2278 0x40ee5800, 0x0201f800, 0x001007f4, 0x59a0001d,
2279 0x84000504, 0x4803401d, 0x1c01f000, 0x4a03c017,
2280 0x00000000, 0x59a00206, 0x82000d80, 0x00004000,
2281 0x040007f0, 0x4a03c017, 0x00000001, 0x0401f7ed,
2282 0x4803c856, 0x4a034206, 0x00004001, 0x0401f7c0,
2283 0x4803c856, 0x4a034206, 0x00004002, 0x0401f7bc,
2284 0x4803c856, 0x4a034206, 0x00004003, 0x0401f7b8,
2285 0x4803c856, 0x4a034206, 0x00004005, 0x0401f7b4,
2286 0x4803c856, 0x4a034206, 0x00004006, 0x0401f7b0,
2287 0x4803c856, 0x4a034206, 0x0000400b, 0x0401f7ac,
2288 0x4803c856, 0x4a034206, 0x0000400c, 0x0401f7a8,
2289 0x4803c856, 0x4a034206, 0x0000400c, 0x0401f7a4,
2290 0x48efc857, 0x58eca80a, 0x8054a9c0, 0x02000800,
2291 0x001005d8, 0x83a0a400, 0x00000006, 0x8254ac00,
2292 0x00000006, 0x4200b000, 0x0000000d, 0x0201f000,
2293 0x0010ab17, 0x59a00206, 0x4803c857, 0x59a00406,
2294 0x4803c857, 0x59a00207, 0x4803c857, 0x59a00407,
2295 0x4803c857, 0x59a00208, 0x4803c857, 0x59a00408,
2296 0x4803c857, 0x59a00209, 0x4803c857, 0x83e0ac00,
2297 0x00000020, 0x83a0a400, 0x00000006, 0x4200b000,
2298 0x00000010, 0x50500000, 0x4400a800, 0x8054a800,
2299 0x900001c0, 0x4400a800, 0x8054a800, 0x8050a000,
2300 0x8058b040, 0x040207f8, 0x1c01f000, 0x59a00406,
2301 0x800000c2, 0x59a00a07, 0x900409c0, 0x80040540,
2302 0x84000540, 0x59a00c07, 0x8c040d00, 0x04000018,
2303 0x59a80805, 0x8c040d0e, 0x040207ba, 0x42000800,
2304 0x00000064, 0x80040840, 0x04000007, 0x4a030000,
2305 0x00000001, 0x40000000, 0x59801000, 0x8c081500,
2306 0x040007f9, 0x04000005, 0x48030004, 0x4a030000,
2307 0x00000000, 0x0401f75b, 0x4a030000, 0x00000000,
2308 0x4a034406, 0x00000004, 0x040007a2, 0x4803880e,
2309 0x0401f754, 0x59a00406, 0x800000c2, 0x59a00c07,
2310 0x8c040d00, 0x0400001a, 0x59a80805, 0x8c040d0e,
2311 0x0402079c, 0x42000800, 0x00000064, 0x80040840,
2312 0x04000007, 0x4a030000, 0x00000001, 0x40000000,
2313 0x59801000, 0x8c081500, 0x040007f9, 0x04000007,
2314 0x48030004, 0x59800805, 0x48074406, 0x4a030000,
2315 0x00000000, 0x0401f73b, 0x4a030000, 0x00000000,
2316 0x4a034406, 0x00000004, 0x04000782, 0x4803880e,
2317 0x59c4080f, 0x48074406, 0x0401f732, 0x59a01c06,
2318 0x59a00207, 0x900c19c0, 0x800c1d40, 0x580c0803,
2319 0x80000580, 0x500c1000, 0x80080400, 0x800c1800,
2320 0x80040840, 0x040207fc, 0x48034406, 0x900001c0,
2321 0x48034207, 0x800001c0, 0x04000722, 0x0401f769,
2322 0x4a034406, 0x00000004, 0x4a034207, 0x00000000,
2323 0x4a034407, 0x00000010, 0x59a8000d, 0x48034208,
2324 0x900001c0, 0x48034408, 0x4a034209, 0x00000002,
2325 0x0401f714, 0x59a00407, 0x59a01207, 0x900811c0,
2326 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
2327 0x800c1d40, 0x59a00a08, 0x59a00408, 0x900409c0,
2328 0x80040d40, 0x59a0020a, 0x82002480, 0x00000010,
2329 0x04001754, 0x59a02406, 0x900001c0, 0x80100540,
2330 0x59a8280d, 0x80142480, 0x0400174e, 0x0201f000,
2331 0x00103a25, 0x59a00407, 0x59a01207, 0x900811c0,
2332 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
2333 0x800c1d40, 0x59a00a08, 0x59a00408, 0x900409c0,
2334 0x80040d40, 0x59a0020a, 0x82002480, 0x00000010,
2335 0x0400173c, 0x59a02406, 0x900001c0, 0x80100540,
2336 0x59a8280d, 0x80142480, 0x04001736, 0x0201f000,
2337 0x00103a28, 0x59a00a0a, 0x59a00406, 0x900409c0,
2338 0x80040d40, 0x59a01407, 0x59a00207, 0x900811c0,
2339 0x80081540, 0x44080800, 0x0401f6da, 0x59a00a0a,
2340 0x59a00406, 0x900409c0, 0x80040d40, 0x50040000,
2341 0x82000d00, 0x0000ffff, 0x48074207, 0x82000d00,
2342 0xffff0000, 0x900409c0, 0x48074407, 0x0401f6cd,
2343 0x59a00406, 0x8c000500, 0x04000020, 0x59a01207,
2344 0x59a01c07, 0x59a02208, 0x480b5054, 0x480f5055,
2345 0x48135056, 0x59c40801, 0x82040d00, 0x00018000,
2346 0x82040580, 0x00000000, 0x04000009, 0x82040580,
2347 0x00008000, 0x04000008, 0x82040580, 0x00010000,
2348 0x04000007, 0x0201f800, 0x001005d8, 0x40080000,
2349 0x0401f004, 0x400c0000, 0x0401f002, 0x40100000,
2350 0x80000110, 0x42000800, 0x000000e0, 0x0201f800,
2351 0x00101944, 0x0401f007, 0x59a81054, 0x59a81855,
2352 0x59a82056, 0x480b4207, 0x480f4407, 0x48134208,
2353 0x0401f6a4, 0x4d2c0000, 0x4d340000, 0x4d300000,
2354 0x4d440000, 0x59a28c06, 0x0201f800, 0x00020245,
2355 0x04000006, 0x5c028800, 0x5c026000, 0x5c026800,
2356 0x5c025800, 0x0401f6e7, 0x59a04407, 0x59a00207,
2357 0x900001c0, 0x80204540, 0x0401f81e, 0x04000009,
2358 0x4a034208, 0x00000001, 0x4a034406, 0x0000ffff,
2359 0x4a034207, 0x0000ffff, 0x497b4407, 0x0401f00b,
2360 0x0401f822, 0x0400000e, 0x4a034208, 0x00000002,
2361 0x59300402, 0x48034406, 0x59300202, 0x48034207,
2362 0x59300206, 0x48034407, 0x5c028800, 0x5c026000,
2363 0x5c026800, 0x5c025800, 0x0401f67a, 0x5c028800,
2364 0x5c026000, 0x5c026800, 0x5c025800, 0x0401f6c1,
2365 0x4937c856, 0x4823c856, 0x4d2c0000, 0x5934000f,
2366 0x80025d40, 0x04000007, 0x592c0005, 0x80200580,
2367 0x592c0000, 0x040207fb, 0x82000540, 0x00000001,
2368 0x5c025800, 0x1c01f000, 0x4823c857, 0x4d2c0000,
2369 0x4d300000, 0x42026000, 0x0010d1c0, 0x59300406,
2370 0x82000d80, 0x00000003, 0x04000004, 0x82000d80,
2371 0x00000006, 0x04020007, 0x59325808, 0x812e59c0,
2372 0x04000004, 0x592c0005, 0x80200580, 0x0400000a,
2373 0x83326400, 0x00000024, 0x41580000, 0x81300480,
2374 0x040017ef, 0x80000580, 0x5c026000, 0x5c025800,
2375 0x1c01f000, 0x82000540, 0x00000001, 0x5c026000,
2376 0x5c025800, 0x1c01f000, 0x83a00580, 0x0010b4a4,
2377 0x04020684, 0x59a80005, 0x8c00050e, 0x04020003,
2378 0x4a030000, 0x00000000, 0x4a034206, 0x00004000,
2379 0x4a03c011, 0x40000010, 0x0401fea7, 0x59e00017,
2380 0x8c000508, 0x04000003, 0x4a03c017, 0x00000000,
2381 0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
2382 0x0401f000, 0x800409c0, 0x04000004, 0x4a034406,
2383 0x00000001, 0x0401f677, 0x836c0580, 0x00000003,
2384 0x04020010, 0x59a80010, 0x497b4406, 0x0201f800,
2385 0x0010513b, 0x0400000f, 0x82000d00, 0x00ffff00,
2386 0x0402000c, 0x82000c00, 0x0010210e, 0x50040800,
2387 0x80040910, 0x82041580, 0x00000080, 0x04020004,
2388 0x4a034406, 0x00000007, 0x0401f662, 0x48074406,
2389 0x82000d00, 0x0000ffff, 0x48074207, 0x80000120,
2390 0x48034407, 0x59a80026, 0x82001500, 0x00000100,
2391 0x480b4409, 0x8c000502, 0x0400001f, 0x8c000506,
2392 0x04000009, 0x82000d00, 0x0000000a, 0x82040d80,
2393 0x0000000a, 0x04020004, 0x4a034209, 0x00000001,
2394 0x0401f022, 0x8c00050a, 0x04000009, 0x82000d00,
2395 0x00000022, 0x82040d80, 0x00000022, 0x04020004,
2396 0x4a034209, 0x00000003, 0x0401f018, 0x8c000508,
2397 0x04000009, 0x82000d00, 0x00000012, 0x82040d80,
2398 0x00000012, 0x04020004, 0x4a034209, 0x00000002,
2399 0x0401f00e, 0x0201f800, 0x0010513b, 0x04020004,
2400 0x4a034209, 0x00000004, 0x0401f5e6, 0x8c000506,
2401 0x04000004, 0x4a034406, 0x00000005, 0x0401f62d,
2402 0x4a034209, 0x00000000, 0x0401f5de, 0x59a80037,
2403 0x48034407, 0x59a80038, 0x48034209, 0x0401f5d9,
2404 0x42007800, 0x0010b8ec, 0x59a00406, 0x4803c857,
2405 0x82000c80, 0x00000006, 0x04021622, 0x0c01f001,
2406 0x001024f6, 0x001024f7, 0x00102505, 0x00102518,
2407 0x00102539, 0x001024f6, 0x0401f61a, 0x836c0580,
2408 0x00000000, 0x04000613, 0x59a00a07, 0x59a00407,
2409 0x900001c0, 0x80040d40, 0x4807c857, 0x59a00a08,
2410 0x59a00408, 0x900001c0, 0x80040d40, 0x4807c857,
2411 0x0401f056, 0x836c0580, 0x00000000, 0x04000605,
2412 0x59a00407, 0x59a01207, 0x900001c0, 0x80081540,
2413 0x59a00408, 0x59a01a08, 0x900001c0, 0x800c1d40,
2414 0x42000000, 0x0010c1bf, 0x480fc857, 0x480bc857,
2415 0x42000800, 0x00001000, 0x0201f000, 0x00103a28,
2416 0x59a00a07, 0x59a00407, 0x900001c0, 0x80041d40,
2417 0x820c0c80, 0x0010ab4a, 0x040215f2, 0x820c0c80,
2418 0x00100000, 0x040015ef, 0x480fc857, 0x823c7c00,
2419 0x00000009, 0x503c0800, 0x800409c0, 0x04000006,
2420 0x823c0580, 0x0000000d, 0x040005e6, 0x803c7800,
2421 0x0401f7f9, 0x59e41001, 0x82080d00, 0xfffeffcf,
2422 0x4807c801, 0x440c7800, 0x46001800, 0x0201f800,
2423 0x800c1800, 0x46001800, 0x001005cb, 0x480bc801,
2424 0x0401f022, 0x59a01a07, 0x59a00407, 0x900001c0,
2425 0x800c1d40, 0x480c7801, 0x59a02208, 0x59a00408,
2426 0x900001c0, 0x80102540, 0x48107802, 0x59a00209,
2427 0x80000040, 0x040015cb, 0x48007806, 0x80000000,
2428 0x48007805, 0x42000800, 0x00004000, 0x40001000,
2429 0x0201f800, 0x00106681, 0x80000540, 0x04000003,
2430 0x49787801, 0x0401f5bf, 0x40040000, 0x800c1c00,
2431 0x040015bc, 0x480c7803, 0x48107804, 0x49787808,
2432 0x59a00409, 0x48007807, 0x59e40001, 0x4803c857,
2433 0x82000540, 0x00040000, 0x4803c801, 0x0401f561,
2434 0x59a80006, 0x48034406, 0x59a80007, 0x48034207,
2435 0x59a80008, 0x48034407, 0x0401f55a, 0x0201f800,
2436 0x001005d8, 0x4803c856, 0x4a03c013, 0x03800300,
2437 0x4a03c014, 0x03800380, 0x59a00c06, 0x82040580,
2438 0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
2439 0x0402002b, 0x59a0140a, 0x82080480, 0x00000100,
2440 0x04021027, 0x59a0020b, 0x8c000500, 0x0402002e,
2441 0x59a00a0a, 0x800409c0, 0x04000021, 0x82040480,
2442 0x00000041, 0x0402101e, 0x82040c00, 0x00000003,
2443 0x82040d00, 0x000000fc, 0x80040904, 0x59a00407,
2444 0x59a01207, 0x900811c0, 0x80081540, 0x59a00409,
2445 0x59a01a09, 0x900c19c0, 0x800c1d40, 0x0201f800,
2446 0x00103a00, 0x04020006, 0x4a034406, 0x00000002,
2447 0x4a03c014, 0x03800000, 0x0401f576, 0x832e5c00,
2448 0x00000004, 0x412c0000, 0x0201f800, 0x00103a25,
2449 0x4a01d809, 0x001025a2, 0x1c01f000, 0x4a03c014,
2450 0x03800000, 0x0401f56f, 0x4031d800, 0x58ef400b,
2451 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
2452 0x0400055c, 0x59a00c06, 0x59a0140a, 0x59a0020b,
2453 0x8c000500, 0x04020031, 0x832e5c00, 0x00000004,
2454 0x41783800, 0x59a04a0a, 0x401c0000, 0x812c0400,
2455 0x50004000, 0x82201d00, 0x000000ff, 0x4c040000,
2456 0x0401f8ac, 0x5c000800, 0x0400002d, 0x80244840,
2457 0x04000028, 0x80081000, 0x82201d00, 0x0000ff00,
2458 0x800c1910, 0x4c040000, 0x0401f8a2, 0x5c000800,
2459 0x04000023, 0x80244840, 0x0400001e, 0x80081000,
2460 0x82201d00, 0x00ff0000, 0x800c1920, 0x4c040000,
2461 0x0401f898, 0x5c000800, 0x04000019, 0x80244840,
2462 0x04000014, 0x80081000, 0x82201d00, 0xff000000,
2463 0x800c1930, 0x4c040000, 0x0401f88e, 0x5c000800,
2464 0x0400000f, 0x80244840, 0x0400000a, 0x80081000,
2465 0x801c3800, 0x0401f7d5, 0x59a0020a, 0x82000500,
2466 0x000000ff, 0x40001800, 0x0401f882, 0x04000004,
2467 0x4a03c014, 0x03800000, 0x0401f4da, 0x4a03c014,
2468 0x03800000, 0x0401f523, 0x4803c856, 0x4a03c013,
2469 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c06,
2470 0x82040580, 0x000000a0, 0x04000004, 0x82040580,
2471 0x000000a2, 0x0402006c, 0x59a0140a, 0x82080480,
2472 0x00000100, 0x04021068, 0x59a0020b, 0x8c000500,
2473 0x0402005c, 0x59a01a0a, 0x800c19c0, 0x04000062,
2474 0x820c0480, 0x00000041, 0x0402105f, 0x0201f800,
2475 0x00103a00, 0x04020006, 0x4a034406, 0x00000002,
2476 0x4a03c014, 0x03800000, 0x0401f502, 0x832e5c00,
2477 0x00000004, 0x41783800, 0x59a04a0a, 0x401c0000,
2478 0x812c0400, 0x40004000, 0x4c040000, 0x4c080000,
2479 0x0401f874, 0x5c001000, 0x5c000800, 0x04000047,
2480 0x44144000, 0x80244840, 0x0400002b, 0x80081000,
2481 0x4c040000, 0x4c080000, 0x0401f86a, 0x5c001000,
2482 0x5c000800, 0x0400003d, 0x50200000, 0x801428d0,
2483 0x80140540, 0x44004000, 0x80244840, 0x0400001e,
2484 0x80081000, 0x4c040000, 0x4c080000, 0x0401f85d,
2485 0x5c001000, 0x5c000800, 0x04000030, 0x50200000,
2486 0x801428e0, 0x80140540, 0x44004000, 0x80244840,
2487 0x04000011, 0x80081000, 0x4c040000, 0x4c080000,
2488 0x0401f850, 0x5c001000, 0x5c000800, 0x04000023,
2489 0x50200000, 0x801428f0, 0x80140540, 0x44004000,
2490 0x80244840, 0x04000004, 0x80081000, 0x801c3800,
2491 0x0401f7cb, 0x59a00a0a, 0x82040c00, 0x00000003,
2492 0x82040d00, 0x000000fc, 0x80040904, 0x59a00407,
2493 0x59a01207, 0x900811c0, 0x80081540, 0x59a00409,
2494 0x59a01a09, 0x900c19c0, 0x800c1d40, 0x4a03c014,
2495 0x03800000, 0x412c0000, 0x0201f000, 0x00103a28,
2496 0x0401f830, 0x04000005, 0x48174406, 0x4a03c014,
2497 0x03800000, 0x0401f463, 0x4a03c014, 0x03800000,
2498 0x0401f4ac, 0x4a03c014, 0x03800000, 0x0401f4ad,
2499 0x0401f836, 0x04000010, 0x0401f862, 0x0402000f,
2500 0x40080800, 0x0401f85f, 0x0402000c, 0x400c0800,
2501 0x0401f85c, 0x04020009, 0x0401f84b, 0x42000000,
2502 0x00030d40, 0x80000040, 0x040207ff, 0x82000540,
2503 0x00000001, 0x1c01f000, 0x0401f843, 0x80000580,
2504 0x0401f7fd, 0x0401f821, 0x0400000a, 0x82040d40,
2505 0x00000001, 0x0401f84b, 0x04020007, 0x0401f87e,
2506 0x0401f898, 0x0401f838, 0x82000540, 0x00000001,
2507 0x1c01f000, 0x0401f834, 0x80000580, 0x0401f7fd,
2508 0x40041800, 0x0401f811, 0x0400000c, 0x0401f83d,
2509 0x0402000b, 0x40080800, 0x0401f83a, 0x04020008,
2510 0x400c0800, 0x0401ffe8, 0x04000004, 0x0401f826,
2511 0x82000540, 0x00000001, 0x1c01f000, 0x0401f822,
2512 0x80000580, 0x0401f7fd, 0x4c040000, 0x42000800,
2513 0x00000064, 0x4a03c013, 0x03800300, 0x80040840,
2514 0x04000016, 0x59e00013, 0x82000500, 0x00000300,
2515 0x82000580, 0x00000300, 0x040207f7, 0x42000000,
2516 0x00000064, 0x80000040, 0x040207ff, 0x4a03c013,
2517 0x01000000, 0x42000000, 0x00000064, 0x80000040,
2518 0x040207ff, 0x4a03c013, 0x02000000, 0x82000540,
2519 0x00000001, 0x0401f002, 0x80000580, 0x5c000800,
2520 0x1c01f000, 0x4a03c013, 0x01000000, 0x42000000,
2521 0x00000064, 0x80000040, 0x040207ff, 0x4a03c013,
2522 0x02000200, 0x42000000, 0x00000064, 0x80000040,
2523 0x040207ff, 0x4a03c013, 0x01000100, 0x1c01f000,
2524 0x42002000, 0x00000008, 0x82040500, 0x00000080,
2525 0x800000c2, 0x82000540, 0x01000000, 0x4803c013,
2526 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2527 0x4a03c013, 0x02000200, 0x42000000, 0x00000064,
2528 0x80000040, 0x040207ff, 0x4a03c013, 0x02000000,
2529 0x800408c2, 0x80102040, 0x040207ec, 0x4a03c013,
2530 0x01000100, 0x42000000, 0x00000064, 0x80000040,
2531 0x040207ff, 0x4a03c013, 0x02000200, 0x42000000,
2532 0x00000064, 0x80000040, 0x040207ff, 0x59e00013,
2533 0x82000500, 0x00000100, 0x4a03c013, 0x02000000,
2534 0x4c040000, 0x42000800, 0x00000064, 0x59e00013,
2535 0x82000500, 0x00000100, 0x80040840, 0x04000003,
2536 0x80000540, 0x040207fa, 0x80000540, 0x5c000800,
2537 0x1c01f000, 0x4a03c013, 0x01000100, 0x42001000,
2538 0x00000008, 0x80000d80, 0x42000000, 0x00000064,
2539 0x80000040, 0x040207ff, 0x4a03c013, 0x02000200,
2540 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2541 0x59e00013, 0x82000500, 0x00000100, 0x80000110,
2542 0x800408c2, 0x80040d40, 0x4a03c013, 0x02000000,
2543 0x80081040, 0x040207ed, 0x40042800, 0x1c01f000,
2544 0x4a03c013, 0x01000100, 0x42000000, 0x00000064,
2545 0x80000040, 0x040207ff, 0x4a03c013, 0x02000200,
2546 0x42000000, 0x00000064, 0x80000040, 0x040207ff,
2547 0x4a03c013, 0x02000000, 0x1c01f000, 0x59a00407,
2548 0x59a80837, 0x48035037, 0x48074407, 0x59a00a09,
2549 0x82040480, 0x00000014, 0x04021003, 0x42000800,
2550 0x000007d0, 0x59a80038, 0x48075038, 0x48034209,
2551 0x0201f000, 0x001022c0, 0x836c0580, 0x00000000,
2552 0x0400000e, 0x59a80006, 0x59a00c06, 0x80041580,
2553 0x82081500, 0x00000040, 0x02000000, 0x001022c0,
2554 0x80080580, 0x48035006, 0x0201f800, 0x00100699,
2555 0x0201f000, 0x001022c0, 0x59a00406, 0x59a80806,
2556 0x48035006, 0x80040d80, 0x8c040d0c, 0x02020800,
2557 0x00100699, 0x59a00207, 0x48035007, 0x59a00407,
2558 0x48035008, 0x0201f000, 0x001022c0, 0x800409c0,
2559 0x04000005, 0x4a034406, 0x00000001, 0x0201f000,
2560 0x0010230c, 0x0201f800, 0x0010513b, 0x04020005,
2561 0x4a034406, 0x00000016, 0x0201f000, 0x0010230c,
2562 0x836c0580, 0x00000003, 0x04000005, 0x4a034406,
2563 0x00000007, 0x0201f000, 0x0010230c, 0x59a00c06,
2564 0x82040500, 0xffffff00, 0x02020000, 0x00102310,
2565 0x82041580, 0x000000ff, 0x04020007, 0x59a80010,
2566 0x82000500, 0x000000ff, 0x82001540, 0x0000ff00,
2567 0x0401f011, 0x82040400, 0x0010210e, 0x50000000,
2568 0x80000110, 0x82000580, 0x00000080, 0x02000000,
2569 0x00102310, 0x59a80010, 0x82000500, 0x000000ff,
2570 0x80041580, 0x02000000, 0x00102310, 0x840409c0,
2571 0x80041540, 0x0201f800, 0x0002075a, 0x04020005,
2572 0x4a034406, 0x00000003, 0x0201f000, 0x0010230c,
2573 0x48ee6021, 0x480a621c, 0x4a02641c, 0x0000bc09,
2574 0x4a026406, 0x00000001, 0x0201f800, 0x00103a00,
2575 0x04020007, 0x0201f800, 0x0002077d, 0x4a034406,
2576 0x00000002, 0x0201f000, 0x0010230c, 0x497a5a04,
2577 0x497a5805, 0x4a025c04, 0x00008000, 0x4a01d809,
2578 0x001027f9, 0x492e6008, 0x42027000, 0x00000032,
2579 0x0201f000, 0x000207a1, 0x800409c0, 0x04000005,
2580 0x4a034406, 0x00000001, 0x0201f000, 0x0010230c,
2581 0x0201f800, 0x0010513b, 0x04020005, 0x4a034406,
2582 0x00000016, 0x0201f000, 0x0010230c, 0x836c0580,
2583 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
2584 0x0201f000, 0x0010230c, 0x59a00c06, 0x82040500,
2585 0xffffff00, 0x02020000, 0x00102310, 0x82041580,
2586 0x000000ff, 0x04020007, 0x59a80010, 0x82000500,
2587 0x000000ff, 0x82001540, 0x0000ff00, 0x0401f011,
2588 0x82040400, 0x0010210e, 0x50000000, 0x80000110,
2589 0x82000580, 0x00000080, 0x02000000, 0x00102310,
2590 0x59a80010, 0x82000500, 0x000000ff, 0x80041580,
2591 0x02000000, 0x00102310, 0x840409c0, 0x80041540,
2592 0x0201f800, 0x0002075a, 0x04020005, 0x4a034406,
2593 0x00000003, 0x0201f000, 0x0010230c, 0x48ee6021,
2594 0x480a621c, 0x4a02641c, 0x0000bc05, 0x4a026406,
2595 0x00000001, 0x0201f800, 0x00103a00, 0x04020007,
2596 0x0201f800, 0x0002077d, 0x4a034406, 0x00000002,
2597 0x0201f000, 0x0010230c, 0x497a5a04, 0x497a5805,
2598 0x4a025c04, 0x00008000, 0x4a01d809, 0x001027f9,
2599 0x492e6008, 0x42027000, 0x00000032, 0x0201f000,
2600 0x000207a1, 0x592c0005, 0x82000580, 0x01000000,
2601 0x02020000, 0x001022c0, 0x4a034406, 0x00000004,
2602 0x0201f000, 0x0010230c, 0x497b4406, 0x497b4207,
2603 0x0201f800, 0x00103b25, 0x04000008, 0x59a80066,
2604 0x59a8086a, 0x80040480, 0x59a80867, 0x48074406,
2605 0x80041480, 0x480b4207, 0x49674407, 0x59a8000e,
2606 0x48034209, 0x495f4409, 0x59a80020, 0x4803420b,
2607 0x0201f000, 0x001022c0, 0x800409c0, 0x04000005,
2608 0x4a034406, 0x00000001, 0x0201f000, 0x0010230c,
2609 0x59a00406, 0x8c000500, 0x0402000f, 0x59a80069,
2610 0x81640480, 0x04001008, 0x59a8000b, 0x81500580,
2611 0x04000009, 0x59a8006a, 0x59a81066, 0x80080580,
2612 0x04000005, 0x4a034406, 0x00000018, 0x0201f000,
2613 0x0010230c, 0x82000540, 0x00000001, 0x0201f800,
2614 0x001015fe, 0x0201f800, 0x00103c80, 0x0201f000,
2615 0x001022c0, 0x4803c856, 0x800409c0, 0x02020000,
2616 0x00102314, 0x59a00406, 0x8c00051e, 0x04000008,
2617 0x4803c856, 0x59a0020b, 0x82000480, 0x00000800,
2618 0x04001015, 0x0201f000, 0x00102310, 0x4803c856,
2619 0x59a0020b, 0x599c0a01, 0x80040480, 0x04021003,
2620 0x0201f000, 0x00102310, 0x59a8000e, 0x81640580,
2621 0x04000009, 0x4a034406, 0x00000018, 0x0201f000,
2622 0x0010230c, 0x4a034406, 0x00000005, 0x0201f000,
2623 0x0010230c, 0x59a80026, 0x8c00050a, 0x040007fa,
2624 0x59a00406, 0x8c00051e, 0x04000036, 0x0201f800,
2625 0x0002075a, 0x040007f4, 0x0201f800, 0x00103a00,
2626 0x040007f1, 0x497a5a04, 0x59a00406, 0x4802620a,
2627 0x59a00209, 0x4802640a, 0x59a00409, 0x4802620b,
2628 0x59a0020d, 0x4802620c, 0x59a0040d, 0x4802640c,
2629 0x59a0020e, 0x4802620d, 0x59a0040e, 0x4802640d,
2630 0x59a00210, 0x4802620e, 0x59a00410, 0x4802640e,
2631 0x59a0020b, 0x82000500, 0x0000fffc, 0x80000104,
2632 0x4802640b, 0x0401f9d9, 0x040007d7, 0x48ee6021,
2633 0x58ee580d, 0x5930020e, 0x59301c0e, 0x900c19c0,
2634 0x800c1d40, 0x5930020c, 0x5930140c, 0x900811c0,
2635 0x80081540, 0x592c0a05, 0x832c0400, 0x00000006,
2636 0x0201f800, 0x00103a25, 0x4a01d809, 0x001029e5,
2637 0x4a034000, 0x00000001, 0x49334001, 0x1c01f000,
2638 0x0201f800, 0x00106c55, 0x0201f800, 0x00100ae0,
2639 0x0401f86d, 0x497b5057, 0x4201d000, 0x00002710,
2640 0x0201f800, 0x001060c6, 0x59c40880, 0x4c040000,
2641 0x59c408a3, 0x4c040000, 0x497b4002, 0x0401f876,
2642 0x0401f893, 0x4a03a005, 0x10000000, 0x0401f8b4,
2643 0x0401f901, 0x04000048, 0x59c80001, 0x800001c0,
2644 0x040007fc, 0x59c80018, 0x82000500, 0xf0000000,
2645 0x59c00808, 0x82040d00, 0x0fffffff, 0x80040540,
2646 0x48038008, 0x0201f800, 0x00100ec1, 0x59c00006,
2647 0x4a038006, 0x10000000, 0x59c00009, 0x82000d00,
2648 0x00e00000, 0x04020024, 0x4a03900d, 0x00000000,
2649 0x59c80020, 0x82000500, 0xff000000, 0x82000580,
2650 0x32000000, 0x0402001c, 0x4a03900d, 0x00000001,
2651 0x59c80020, 0x82000500, 0xff000000, 0x82000580,
2652 0xe1000000, 0x04020014, 0x4a03900d, 0x00000000,
2653 0x59c80020, 0x82000500, 0x00ffffff, 0x4a03900d,
2654 0x00000000, 0x59c80821, 0x82040d00, 0x00ffffff,
2655 0x80040580, 0x04020008, 0x59a80010, 0x80040580,
2656 0x04020005, 0x59c40005, 0x82000500, 0x000000f0,
2657 0x04000006, 0x4803c856, 0x0401f8d7, 0x4a035057,
2658 0x00000001, 0x0401f002, 0x0401f8e1, 0x42000000,
2659 0x00000064, 0x80000040, 0x02000800, 0x001005d8,
2660 0x59c00807, 0x82040d00, 0x0000000c, 0x040007fa,
2661 0x0401f003, 0x4a035057, 0x00000001, 0x0401f8da,
2662 0x0201f800, 0x00106f36, 0x0401f818, 0x4201d000,
2663 0x000186a0, 0x0201f800, 0x001060c6, 0x5c000800,
2664 0x480788a3, 0x5c000800, 0x48078880, 0x59a80057,
2665 0x800001c0, 0x02000000, 0x001022c0, 0x0201f000,
2666 0x00102318, 0x599c0201, 0x48035059, 0x41780800,
2667 0x42001000, 0x00003b10, 0x0201f800, 0x001066a0,
2668 0x480b505a, 0x1c01f000, 0x0201f800, 0x00106c4b,
2669 0x59b800ea, 0x82000500, 0x00000007, 0x82000580,
2670 0x00000003, 0x04020003, 0x4a0370e8, 0x00000001,
2671 0x1c01f000, 0x42038000, 0x00007700, 0x4a038006,
2672 0x30000000, 0x59c00007, 0x8c00050a, 0x040207fe,
2673 0x59c00006, 0x59a00209, 0x59a00c09, 0x900409c0,
2674 0x80040d40, 0x48078001, 0x59a0020e, 0x59a00c0e,
2675 0x900409c0, 0x80040d40, 0x48078000, 0x59a0020b,
2676 0x82000500, 0x0000fffc, 0x48038002, 0x48038003,
2677 0x48038005, 0x497b9009, 0x59e00003, 0x82000540,
2678 0x00008060, 0x4803c003, 0x1c01f000, 0x41780800,
2679 0x8007a0ca, 0x83d3a400, 0x00007600, 0x42000800,
2680 0x00000040, 0x0201f800, 0x00101345, 0x4a03a00a,
2681 0x00000001, 0x4a03a005, 0x20000000, 0x59d00006,
2682 0x4a03a005, 0x30000000, 0x59d00006, 0x8c00050a,
2683 0x040207fe, 0x59d00005, 0x59a00210, 0x59a00c10,
2684 0x900409c0, 0x80040d40, 0x4807a001, 0x59a0020d,
2685 0x59a00c0d, 0x900409c0, 0x80040d40, 0x4807a000,
2686 0x59a0020b, 0x82000500, 0x0000fffc, 0x4803a003,
2687 0x4803a002, 0x4803a008, 0x1c01f000, 0x59a00002,
2688 0x4803c857, 0x800001c0, 0x0402004a, 0x59a8005a,
2689 0x48038880, 0x59c400a3, 0x82000540, 0x00002008,
2690 0x8400053a, 0x480388a3, 0x59c40008, 0x8400054e,
2691 0x82000500, 0xffffffe1, 0x48038808, 0x59c80040,
2692 0x84000534, 0x48039040, 0x0401f902, 0x04020013,
2693 0x59a80010, 0x800000d0, 0x82000540, 0x00000011,
2694 0x48039120, 0x59a80010, 0x82000500, 0x00ffffff,
2695 0x82000540, 0x32000000, 0x48039121, 0x4a039123,
2696 0xe1290008, 0x59a80010, 0x82000500, 0x00ffffff,
2697 0x48039122, 0x0401f016, 0x59a80010, 0x82000500,
2698 0x000000ff, 0x900009c0, 0x840001c0, 0x80040540,
2699 0x82000540, 0x00000000, 0x48039120, 0x59a80010,
2700 0x82000500, 0x000000ff, 0x82000540, 0x01000000,
2701 0x48039121, 0x4a039123, 0x08210008, 0x59a80010,
2702 0x82000500, 0x000000ff, 0x48039122, 0x497b9124,
2703 0x59a80c5b, 0x80040800, 0x4807545b, 0x900409c0,
2704 0x82040540, 0x0000aaaa, 0x48039125, 0x497b9126,
2705 0x497b9127, 0x0401f8cf, 0x04020004, 0x4a039100,
2706 0x0000e980, 0x0401f003, 0x4a039100, 0x0000e9a0,
2707 0x1c01f000, 0x82000540, 0x00000001, 0x0402500d,
2708 0x4203e000, 0x80000000, 0x40e81000, 0x41780800,
2709 0x42000000, 0x00000064, 0x0201f800, 0x001066a0,
2710 0x59940024, 0x80080400, 0x48032824, 0x80000580,
2711 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
2712 0x4d140000, 0x417a3000, 0x0201f800, 0x001070d8,
2713 0x0201f800, 0x00106dc3, 0x5c022800, 0x5c034800,
2714 0x5c03a000, 0x5c032000, 0x1c01f000, 0x59c80007,
2715 0x8c000500, 0x04000003, 0x4a03900d, 0x00000030,
2716 0x1c01f000, 0x4a038805, 0x00020000, 0x42000800,
2717 0x0000003c, 0x0201f800, 0x00101345, 0x4a038891,
2718 0x0000ffff, 0x59c80035, 0x48039035, 0x4a03900d,
2719 0x00000040, 0x42038000, 0x00007700, 0x0201f800,
2720 0x00100ec1, 0x42038000, 0x00007720, 0x0201f800,
2721 0x00100ec1, 0x4a03a005, 0x20000000, 0x4a03a005,
2722 0x30000000, 0x59d00806, 0x8c040d0a, 0x040207fe,
2723 0x1c01f000, 0x4d300000, 0x4031d800, 0x58ef400b,
2724 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
2725 0x5c026000, 0x02000000, 0x00102304, 0x4d300000,
2726 0x59a26001, 0x59a00000, 0x4000b000, 0x80000000,
2727 0x48034000, 0x592c0001, 0x80000540, 0x0400001e,
2728 0x40025800, 0x8058b040, 0x040207fb, 0x58ec1007,
2729 0x58ec1808, 0x592c0a05, 0x4d2c0000, 0x58ec000d,
2730 0x40025800, 0x592c0204, 0x5c025800, 0x82000580,
2731 0x00000103, 0x04000008, 0x832c0400, 0x00000006,
2732 0x0201f800, 0x00103a25, 0x4a01d809, 0x001029e5,
2733 0x0401f007, 0x832c0400, 0x00000006, 0x0201f800,
2734 0x00103a28, 0x4a01d809, 0x001029e5, 0x5c026000,
2735 0x1c01f000, 0x58ec000d, 0x40025800, 0x592c0204,
2736 0x82000580, 0x00000103, 0x04020006, 0x0201f800,
2737 0x0002077d, 0x5c026000, 0x0201f000, 0x001022c0,
2738 0x58ec000d, 0x40025800, 0x592c0404, 0x8400055e,
2739 0x48025c04, 0x42028800, 0x000007fd, 0x42003000,
2740 0x00fffffd, 0x0201f800, 0x001045a6, 0x04000003,
2741 0x80000580, 0x0401f004, 0x59a26001, 0x0201f800,
2742 0x0010937d, 0x5c026000, 0x02000000, 0x0010230c,
2743 0x4d300000, 0x4a01d809, 0x00102a38, 0x0401f7dc,
2744 0x592c0005, 0x82000580, 0x01000000, 0x02000000,
2745 0x00102318, 0x4d300000, 0x59a26001, 0x5930020b,
2746 0x59301c0a, 0x900001c0, 0x800c1d40, 0x5930040d,
2747 0x5930120d, 0x900001c0, 0x80081540, 0x592c0a05,
2748 0x832c0400, 0x00000006, 0x0201f800, 0x00103a28,
2749 0x4a01d809, 0x001029e5, 0x4a034000, 0x00000001,
2750 0x5c026000, 0x1c01f000, 0x4933c857, 0x4c300000,
2751 0x5930040b, 0x82000c80, 0x0000000e, 0x04001004,
2752 0x4a025a05, 0x0000000e, 0x0401f003, 0x48025a05,
2753 0x0401f00c, 0x800409c0, 0x0400000a, 0x4c040000,
2754 0x0201f800, 0x00103a00, 0x5c000800, 0x04000003,
2755 0x40040000, 0x0401f7f0, 0x80000580, 0x0401f003,
2756 0x82000540, 0x00000001, 0x5c006000, 0x1c01f000,
2757 0x59a00206, 0x82000580, 0x00000044, 0x1c01f000,
2758 0x4807c857, 0x800409c0, 0x0400000c, 0x0201f800,
2759 0x00101650, 0x04020009, 0x42000000, 0x00000002,
2760 0x0201f800, 0x0010188c, 0x42000000, 0x00000002,
2761 0x0201f800, 0x00101821, 0x59a00406, 0x82000500,
2762 0x00000007, 0x0c01f001, 0x00102a8c, 0x00102aa1,
2763 0x00102ab7, 0x00102a8a, 0x00102a8a, 0x00102a8a,
2764 0x00102a8a, 0x00102a8a, 0x0201f000, 0x00102310,
2765 0x42000800, 0x000000c0, 0x0201f800, 0x0010193f,
2766 0x82040540, 0x00000002, 0x42000800, 0x000000c0,
2767 0x0201f800, 0x00101944, 0x42000800, 0x00000000,
2768 0x0201f800, 0x0010193f, 0x82040540, 0x00000008,
2769 0x42000800, 0x00000000, 0x0201f800, 0x00101944,
2770 0x0401f00b, 0x42000800, 0x000000c0, 0x0201f800,
2771 0x0010193f, 0x82040540, 0x00000001, 0x42000800,
2772 0x000000c0, 0x0201f800, 0x00101944, 0x59c80040,
2773 0x4c000000, 0x59a80010, 0x4c000000, 0x59c400a3,
2774 0x4c000000, 0x59c40008, 0x4c000000, 0x0401f911,
2775 0x04000021, 0x0201f800, 0x001005d8, 0x59a80821,
2776 0x800409c0, 0x02020000, 0x00102314, 0x0201f800,
2777 0x0010513b, 0x04020005, 0x4a034406, 0x00000016,
2778 0x0201f000, 0x0010230c, 0x836c0580, 0x00000003,
2779 0x02020000, 0x00102314, 0x59c408a4, 0x82040d00,
2780 0x0000000f, 0x82040580, 0x00000000, 0x02020000,
2781 0x00102314, 0x59c80040, 0x4c000000, 0x59a80010,
2782 0x4c000000, 0x59c400a3, 0x4c000000, 0x59c40008,
2783 0x4c000000, 0x59c40080, 0x4c000000, 0x59a0020f,
2784 0x59a0bc0f, 0x905cb9c0, 0x805cbd40, 0x41784800,
2785 0x41785000, 0x41785800, 0x41789000, 0x41789800,
2786 0x0401fe21, 0x0201f800, 0x00106c55, 0x0201f800,
2787 0x00100ae0, 0x4178c000, 0x497b4002, 0x0401f95c,
2788 0x0401f9aa, 0x59a0020c, 0x59a00c0c, 0x80040d40,
2789 0x04000002, 0x0401f9fb, 0x0401f9fa, 0x0401fe68,
2790 0x8060c1c0, 0x04020014, 0x0401fa98, 0x0401feb2,
2791 0x0402000e, 0x0201f800, 0x001018d3, 0x04020008,
2792 0x4a034406, 0x00000017, 0x0201f800, 0x0010230c,
2793 0x4203e000, 0x50000000, 0x0401f000, 0x42005800,
2794 0x0000aaaa, 0x0401f058, 0x59c80001, 0x800001c0,
2795 0x040007ee, 0x59c80801, 0x800409c0, 0x04000006,
2796 0x0401fa70, 0x40240000, 0x80280540, 0x802c0540,
2797 0x0402004d, 0x59a00002, 0x82000580, 0xfeedbeef,
2798 0x04000004, 0x42008800, 0x10000000, 0x0401f003,
2799 0x42008800, 0x10000004, 0x0401fa19, 0x4a034002,
2800 0xfeedbeef, 0x0401fa71, 0x0401fa97, 0x0401fea8,
2801 0x59c40005, 0x8c000534, 0x04000004, 0x42005800,
2802 0x0000bbbb, 0x0401f038, 0x0401fe83, 0x04020007,
2803 0x42005800, 0x0000cccc, 0x485f420f, 0x905cb9c0,
2804 0x485f440f, 0x0401f030, 0x59a0040c, 0x800001c0,
2805 0x0400000e, 0x59a26000, 0x5930000d, 0x800001c0,
2806 0x040207be, 0x59a26001, 0x5930080d, 0x800409c0,
2807 0x040207ba, 0x804891c0, 0x040207b8, 0x804c99c0,
2808 0x040207b6, 0x0401f87a, 0x805cb840, 0x04000005,
2809 0x40240000, 0x80280540, 0x802c0540, 0x0402001a,
2810 0x42000000, 0x00030d40, 0x80000040, 0x04020012,
2811 0x59c00007, 0x82000500, 0x000501c0, 0x0402000b,
2812 0x0201f800, 0x001018d3, 0x04020008, 0x4a034406,
2813 0x00000017, 0x0201f800, 0x0010230c, 0x4203e000,
2814 0x50000000, 0x0401f000, 0x42005800, 0x0000dddd,
2815 0x0401f005, 0x59c00807, 0x82040d00, 0x0000000c,
2816 0x040007ea, 0x0401fe5c, 0x59a0040c, 0x800001c0,
2817 0x04000002, 0x0401f856, 0x0401fe6b, 0x40240000,
2818 0x80280540, 0x802c0540, 0x04020003, 0x805cb9c0,
2819 0x04020781, 0x0201f800, 0x00106f36, 0x0401fda3,
2820 0x4201d000, 0x000186a0, 0x0201f800, 0x001060c6,
2821 0x5c000800, 0x48078880, 0x5c000800, 0x48078808,
2822 0x5c000800, 0x480788a3, 0x5c000800, 0x48075010,
2823 0x5c000800, 0x48079040, 0x0201f800, 0x00100969,
2824 0x59a00406, 0x82000500, 0x00000003, 0x82000580,
2825 0x00000002, 0x0400002c, 0x42000800, 0x000000c0,
2826 0x0201f800, 0x0010193f, 0x82040500, 0xfffffffc,
2827 0x42000800, 0x000000c0, 0x0201f800, 0x00101944,
2828 0x42000800, 0x00000000, 0x0201f800, 0x0010193f,
2829 0x82040500, 0xfffffff7, 0x42000800, 0x00000000,
2830 0x0201f800, 0x00101944, 0x42000800, 0x00000000,
2831 0x0201f800, 0x0010193f, 0x82040500, 0xfffffffb,
2832 0x42000800, 0x00000000, 0x0201f800, 0x00101944,
2833 0x4a0388a7, 0x0000f7f7, 0x42006000, 0xbeffffff,
2834 0x42006800, 0x80018000, 0x0201f800, 0x0010427d,
2835 0x42006000, 0xfffeffff, 0x41786800, 0x0201f800,
2836 0x0010427d, 0x402c0000, 0x80280540, 0x80240540,
2837 0x02000000, 0x001022c0, 0x48274406, 0x482b4207,
2838 0x482f4407, 0x0201f000, 0x0010231c, 0x59a26000,
2839 0x813261c0, 0x0400000e, 0x59325808, 0x812e59c0,
2840 0x0400000b, 0x0201f800, 0x0002077d, 0x0201f800,
2841 0x001007fd, 0x59a26001, 0x59325808, 0x0201f800,
2842 0x0002077d, 0x0201f800, 0x001007fd, 0x1c01f000,
2843 0x42000800, 0x000000ef, 0x0201f800, 0x001015eb,
2844 0x59c400a3, 0x8400055a, 0x8400053a, 0x480388a3,
2845 0x0201f800, 0x0010163b, 0x0402000a, 0x42000000,
2846 0x00000001, 0x0201f800, 0x0010188c, 0x42000000,
2847 0x00000001, 0x0201f800, 0x00101821, 0x0401f013,
2848 0x0201f800, 0x00101642, 0x04020008, 0x41780000,
2849 0x0201f800, 0x0010188c, 0x41780000, 0x0201f800,
2850 0x00101821, 0x0401f009, 0x42000000, 0x00000002,
2851 0x0201f800, 0x0010188c, 0x42000000, 0x00000002,
2852 0x0201f800, 0x00101821, 0x42000800, 0x00000000,
2853 0x0201f800, 0x0010193f, 0x82040540, 0x00000004,
2854 0x42000800, 0x00000000, 0x0201f800, 0x00101944,
2855 0x4201d000, 0x00000014, 0x0201f800, 0x0010608e,
2856 0x59c40008, 0x8400054e, 0x82000500, 0xffffffe1,
2857 0x48038808, 0x4a0388a7, 0x0000f7f7, 0x42001000,
2858 0x04000001, 0x0201f800, 0x0010193d, 0x42006000,
2859 0xbe20bfff, 0x42006800, 0x80018000, 0x0201f800,
2860 0x0010427d, 0x42006000, 0xfffeffff, 0x41786800,
2861 0x0201f800, 0x0010427d, 0x4200b000, 0x00001388,
2862 0x4201d000, 0x00000014, 0x4c580000, 0x0201f800,
2863 0x0010608e, 0x0201f800, 0x001018d3, 0x5c00b000,
2864 0x04000004, 0x8058b040, 0x040207f6, 0x0401f025,
2865 0x59c40005, 0x8c000534, 0x04020007, 0x59c400a4,
2866 0x82000500, 0x0000000f, 0x82000580, 0x00000008,
2867 0x0402001c, 0x42006000, 0x00020000, 0x0201f800,
2868 0x00104282, 0x4201d000, 0x00000064, 0x0201f800,
2869 0x0010608e, 0x42006000, 0xfeffffff, 0x42006800,
2870 0x02000000, 0x0201f800, 0x0010427d, 0x42006000,
2871 0xfdffffff, 0x41786800, 0x0201f800, 0x0010427d,
2872 0x4a038805, 0x04000001, 0x59c400a4, 0x82000500,
2873 0x0000000f, 0x82000580, 0x00000000, 0x04000003,
2874 0x82000540, 0x00000001, 0x1c01f000, 0x4803c856,
2875 0x42038000, 0x00007700, 0x0201f800, 0x00100ec1,
2876 0x59c00006, 0x59a0040c, 0x800001c0, 0x0400003f,
2877 0x59a03c0c, 0x59a00209, 0x59a01c09, 0x900c19c0,
2878 0x800c1d40, 0x59a0020e, 0x59a0240e, 0x901021c0,
2879 0x80102540, 0x59a0020b, 0x82000500, 0x0000fffc,
2880 0x59a0140b, 0x900811c0, 0x80081540, 0x480b8003,
2881 0x0201f800, 0x0002075a, 0x02000800, 0x001005d8,
2882 0x49334000, 0x0201f800, 0x001007e4, 0x4a025a04,
2883 0x00000018, 0x4a025805, 0x00abcdef, 0x492e6008,
2884 0x492e600b, 0x481e600d, 0x4a02600c, 0x00000004,
2885 0x832c0400, 0x00000011, 0x4802600a, 0x42001000,
2886 0x0000000c, 0x821c0d80, 0x00000001, 0x04000004,
2887 0x801c3840, 0x0401f963, 0x0401f004, 0x41783800,
2888 0x0401f960, 0x0401f011, 0x821c0c80, 0x00000005,
2889 0x04001005, 0x40043800, 0x42001000, 0x0000003c,
2890 0x0401f006, 0x80001580, 0x82081400, 0x0000000c,
2891 0x801c3840, 0x040207fd, 0x832c0400, 0x00000005,
2892 0x0401f950, 0x040207f1, 0x497b9009, 0x59e00003,
2893 0x82000540, 0x00008060, 0x4803c003, 0x4a038009,
2894 0x00e00000, 0x1c01f000, 0x4803c856, 0x41780800,
2895 0x8007a0ca, 0x83d3a400, 0x00007600, 0x42000800,
2896 0x00000040, 0x0201f800, 0x00101345, 0x4a03a00a,
2897 0x00000001, 0x4a03a005, 0x20000000, 0x59d00006,
2898 0x4a03a005, 0x30000000, 0x59d00006, 0x8c00050a,
2899 0x040207fe, 0x59d00005, 0x59a0020c, 0x800001c0,
2900 0x0400003f, 0x59a03a0c, 0x59a00210, 0x59a01c10,
2901 0x900c19c0, 0x800c1d40, 0x59a0020d, 0x59a0240d,
2902 0x901021c0, 0x80102540, 0x59a0120b, 0x82081500,
2903 0x0000fffc, 0x59a0040b, 0x900001c0, 0x80081540,
2904 0x480ba003, 0x0201f800, 0x0002075a, 0x02000800,
2905 0x001005d8, 0x49334001, 0x0201f800, 0x001007e4,
2906 0x4a025a04, 0x00000018, 0x4a025805, 0x00abcdef,
2907 0x492e6008, 0x492e600b, 0x481e600d, 0x4a02600c,
2908 0x00000004, 0x832c0400, 0x00000011, 0x4802600a,
2909 0x42001000, 0x0000000c, 0x821c0d80, 0x00000001,
2910 0x04000004, 0x801c3840, 0x0401f906, 0x0401f004,
2911 0x41783800, 0x0401f903, 0x0401f011, 0x821c0c80,
2912 0x00000005, 0x04001005, 0x40043800, 0x42001000,
2913 0x0000003c, 0x0401f006, 0x80001580, 0x82081400,
2914 0x0000000c, 0x801c3840, 0x040207fd, 0x832c0400,
2915 0x00000005, 0x0401f8f3, 0x040207f1, 0x1c01f000,
2916 0x4803c856, 0x59a0020c, 0x800001c0, 0x04000024,
2917 0x824c0580, 0x00000002, 0x04000040, 0x59a26001,
2918 0x5930380d, 0x801c39c0, 0x0400003c, 0x801c3840,
2919 0x481e600d, 0x5932580b, 0x5930080a, 0x50042000,
2920 0x58041801, 0x58041002, 0x82081500, 0xfffffffc,
2921 0x5930000c, 0x80000000, 0x82000d80, 0x00000005,
2922 0x04020009, 0x497a600c, 0x592e5801, 0x812e59c0,
2923 0x0400001a, 0x492e600b, 0x832c0c00, 0x00000005,
2924 0x0401f005, 0x4802600c, 0x5930080a, 0x82040c00,
2925 0x00000003, 0x4806600a, 0x0401f010, 0x59a0120b,
2926 0x82081500, 0x0000fffc, 0x59a0040b, 0x900001c0,
2927 0x80081540, 0x480ba003, 0x59a0020d, 0x59a0240d,
2928 0x901021c0, 0x80102540, 0x59a00210, 0x59a01c10,
2929 0x900c19c0, 0x800c1d40, 0x4201d000, 0x00003a98,
2930 0x0201f800, 0x001060c6, 0x480ba002, 0x59a80059,
2931 0x4803a008, 0x4813a000, 0x480fa001, 0x4a03a005,
2932 0x10000000, 0x02005800, 0x001005d8, 0x804c9800,
2933 0x82000540, 0x00000001, 0x1c01f000, 0x4847c857,
2934 0x59a0040c, 0x800001c0, 0x04000024, 0x82480580,
2935 0x00000002, 0x04000042, 0x59a26000, 0x5930380d,
2936 0x801c39c0, 0x0400003e, 0x801c3840, 0x481e600d,
2937 0x5932580b, 0x5930080a, 0x50042000, 0x58041801,
2938 0x58041002, 0x82081500, 0xfffffffc, 0x5930000c,
2939 0x80000000, 0x82000d80, 0x00000005, 0x04020009,
2940 0x497a600c, 0x592e5801, 0x812e59c0, 0x0400001d,
2941 0x492e600b, 0x832c0c00, 0x00000005, 0x0401f005,
2942 0x4802600c, 0x5930080a, 0x82040c00, 0x00000003,
2943 0x4806600a, 0x0401f013, 0x82440580, 0x10000000,
2944 0x0402001f, 0x59a0020e, 0x59a0240e, 0x901021c0,
2945 0x80102540, 0x59a00209, 0x59a01c09, 0x900c19c0,
2946 0x800c1d40, 0x59a0020b, 0x82000500, 0x0000fffc,
2947 0x59a0140b, 0x900811c0, 0x80081540, 0x480b8003,
2948 0x48138000, 0x480f8001, 0x480b8002, 0x59c80018,
2949 0x82000500, 0xf0000000, 0x59c02008, 0x82102500,
2950 0x0fffffff, 0x80100540, 0x48038008, 0x48478006,
2951 0x80489000, 0x8260c540, 0x00000001, 0x1c01f000,
2952 0x59c00009, 0x4803c857, 0x82000d00, 0x00e00000,
2953 0x0400000d, 0x485f420f, 0x905cb9c0, 0x485f440f,
2954 0x8c00052e, 0x04000002, 0x80285000, 0x8c00052c,
2955 0x04000002, 0x80244800, 0x8c00052a, 0x04000002,
2956 0x802c5800, 0x1c01f000, 0x59a0020c, 0x800001c0,
2957 0x04000024, 0x59d00806, 0x4807c857, 0x8c040d3e,
2958 0x04000020, 0x4a03a005, 0x20000000, 0x4a03a005,
2959 0x30000000, 0x59d00806, 0x8c040d0a, 0x040207fe,
2960 0x824c0480, 0x00000003, 0x02021800, 0x001005d8,
2961 0x404c0000, 0x0c01f001, 0x00102da1, 0x00102da3,
2962 0x00102da9, 0x0201f800, 0x001005d8, 0x80000040,
2963 0x40009800, 0x0401ff43, 0x0400000a, 0x0401ff41,
2964 0x0401f008, 0x80000040, 0x40009800, 0x59d00806,
2965 0x4807c857, 0x8c040d3e, 0x040207e3, 0x0401ff39,
2966 0x1c01f000, 0x59a0040c, 0x800001c0, 0x04000024,
2967 0x59c00807, 0x4807c857, 0x8c040d3e, 0x04000020,
2968 0x59c00807, 0x4a038006, 0x20000000, 0x82480480,
2969 0x00000003, 0x02021800, 0x001005d8, 0x40480000,
2970 0x0c01f001, 0x00102dc4, 0x00102dc6, 0x00102dce,
2971 0x0201f800, 0x001005d8, 0x80000040, 0x40009000,
2972 0x42008800, 0x10000004, 0x0401ff65, 0x0400000c,
2973 0x0401ff63, 0x0401f00a, 0x80000040, 0x40009000,
2974 0x59c00807, 0x4807c857, 0x8c040d3e, 0x040207e5,
2975 0x42008800, 0x10000004, 0x0401ff59, 0x1c01f000,
2976 0x492fc857, 0x4000a800, 0x4a03b805, 0x20000000,
2977 0x59dc0006, 0x4a03b805, 0x30000000, 0x4813b800,
2978 0x480fb801, 0x480bb802, 0x4857b803, 0x4a03b805,
2979 0x30000002, 0x59dc0006, 0x4a03b805, 0x70000001,
2980 0x59dc0006, 0x4a03b805, 0x10000000, 0x59dc0006,
2981 0x8c00053e, 0x040007fe, 0x4a03b805, 0x20000000,
2982 0x59dc0006, 0x59dc2000, 0x59dc1801, 0x801c39c0,
2983 0x0400000a, 0x4d2c0000, 0x0201f800, 0x001007e4,
2984 0x5c000800, 0x02000800, 0x001005d8, 0x4a025a04,
2985 0x0000000a, 0x492c0801, 0x1c01f000, 0x42006000,
2986 0x00102fb2, 0x0201f800, 0x00101345, 0x4a03902c,
2987 0x00200000, 0x4200b000, 0x000001f4, 0x59c8002c,
2988 0x8c00052c, 0x04000007, 0x8058b040, 0x040207fc,
2989 0x42000000, 0x00004003, 0x41781000, 0x0401f196,
2990 0x50301000, 0x41784800, 0x4a03902d, 0x00008000,
2991 0x4200b000, 0x000001f4, 0x59c8002c, 0x8c000534,
2992 0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
2993 0x00004003, 0x41781000, 0x0401f187, 0x0401f8f8,
2994 0x80244800, 0x40240000, 0x82000580, 0x000003b1,
2995 0x040207fb, 0x0401f988, 0x41784800, 0x0401f920,
2996 0x80244800, 0x40240000, 0x82000580, 0x000003b1,
2997 0x040207fb, 0x80306000, 0x82300580, 0x00102fb4,
2998 0x040207e0, 0x59a80863, 0x800409c0, 0x04000007,
2999 0x42000000, 0x00004004, 0x42001000, 0x00000002,
3000 0x59a81862, 0x0401f16c, 0x42006000, 0x00102fb2,
3001 0x4a035064, 0x00000004, 0x50301000, 0x41784800,
3002 0x4a03902d, 0x00004000, 0x4200b000, 0x000001f4,
3003 0x59c8002c, 0x8c000532, 0x04000007, 0x8058b040,
3004 0x040207fc, 0x42000000, 0x00004003, 0x41781000,
3005 0x0401f159, 0x0401f8ca, 0x80244800, 0x40240000,
3006 0x82000580, 0x00000154, 0x040207fb, 0x0401f95a,
3007 0x41784800, 0x0401f8f2, 0x80244800, 0x40240000,
3008 0x82000580, 0x00000154, 0x040207fb, 0x80306000,
3009 0x82300580, 0x00102fb4, 0x040207e0, 0x59a80863,
3010 0x800409c0, 0x04000007, 0x42000000, 0x00004004,
3011 0x42001000, 0x00000004, 0x59a81862, 0x0401f13e,
3012 0x42006000, 0x00102fb2, 0x497b5064, 0x50301000,
3013 0x41784800, 0x4a03902d, 0x00001000, 0x4200b000,
3014 0x000001f4, 0x59c8002c, 0x8c00052e, 0x04000007,
3015 0x8058b040, 0x040207fc, 0x42000000, 0x00004003,
3016 0x41781000, 0x0401f12c, 0x0401f89d, 0x80244800,
3017 0x40240000, 0x82000580, 0x00000088, 0x040207fb,
3018 0x0401f92d, 0x41784800, 0x0401f8c5, 0x80244800,
3019 0x40240000, 0x82000580, 0x00000088, 0x040207fb,
3020 0x80306000, 0x82300580, 0x00102fb4, 0x040207e0,
3021 0x59a80863, 0x800409c0, 0x04000007, 0x42000000,
3022 0x00004004, 0x42001000, 0x00000001, 0x59a81862,
3023 0x0401f111, 0x42006000, 0x00102fb2, 0x50301000,
3024 0x41784800, 0x4a03902d, 0x00000800, 0x0401f87c,
3025 0x80244800, 0x40240000, 0x82000580, 0x00000018,
3026 0x040207fb, 0x0401f90c, 0x41784800, 0x0401f8a4,
3027 0x80244800, 0x40240000, 0x82000580, 0x00000018,
3028 0x040207fb, 0x80306000, 0x82300580, 0x00102fb4,
3029 0x040207eb, 0x59a80863, 0x800409c0, 0x04000007,
3030 0x42000000, 0x00004004, 0x42001000, 0x00000010,
3031 0x59a81862, 0x0401f0f0, 0x42006000, 0x00102fb2,
3032 0x50301000, 0x41784800, 0x4a03902d, 0x00000400,
3033 0x0401f85b, 0x80244800, 0x40240000, 0x82000580,
3034 0x00000088, 0x040207fb, 0x0401f8eb, 0x41784800,
3035 0x0401f883, 0x80244800, 0x40240000, 0x82000580,
3036 0x00000088, 0x040207fb, 0x80306000, 0x82300580,
3037 0x00102fb4, 0x040207eb, 0x59a80863, 0x800409c0,
3038 0x04000007, 0x42000000, 0x00004004, 0x42001000,
3039 0x00000008, 0x59a81862, 0x0401f0cf, 0x42006000,
3040 0x00102fb2, 0x50301000, 0x41784800, 0x4a03902d,
3041 0x00002000, 0x4200b000, 0x000001f4, 0x59c8002c,
3042 0x8c000530, 0x04000007, 0x8058b040, 0x040207fc,
3043 0x42000000, 0x00004003, 0x41781000, 0x0401f0be,
3044 0x59c8002c, 0x82000500, 0xffe0ffff, 0x82080d00,
3045 0x001f0000, 0x80040540, 0x4803902c, 0x0401f828,
3046 0x80244800, 0x40240000, 0x82000580, 0x00000110,
3047 0x040207fb, 0x0401f8b8, 0x41784800, 0x0401f850,
3048 0x59c80034, 0x82080d00, 0x001f0000, 0x82000500,
3049 0x001f0000, 0x80040580, 0x04000006, 0x59a80063,
3050 0x80000000, 0x48035063, 0x40240000, 0x48035062,
3051 0x80244800, 0x40240000, 0x82000580, 0x00000110,
3052 0x040207ef, 0x80306000, 0x82300580, 0x00102fb4,
3053 0x040207cd, 0x59a80863, 0x800409c0, 0x04000006,
3054 0x42000000, 0x00004004, 0x42001000, 0x00000020,
3055 0x59a81862, 0x0201f000, 0x001022c0, 0x59c8002c,
3056 0x82000500, 0xffff0000, 0x82080d00, 0x0000ffff,
3057 0x80040540, 0x4803902c, 0x40080000, 0x48039028,
3058 0x48039029, 0x59a80064, 0x82000580, 0x00000004,
3059 0x04000004, 0x40080000, 0x4803902a, 0x4803902b,
3060 0x59c8082d, 0x82040d00, 0xfffffc00, 0x40240000,
3061 0x80040d40, 0x4807902d, 0x4200b000, 0x000001f4,
3062 0x59c8002c, 0x82000500, 0x18000000, 0x04000007,
3063 0x8058b040, 0x040207fb, 0x42000000, 0x00004003,
3064 0x41781000, 0x0401f06c, 0x4a03902e, 0x00000001,
3065 0x4200b000, 0x000001f4, 0x59c8002e, 0x8c000500,
3066 0x04000006, 0x8058b040, 0x040207fc, 0x42000000,
3067 0x00004003, 0x0401f060, 0x1c01f000, 0x41783800,
3068 0x59c8082d, 0x82040d00, 0xfffffc00, 0x40240000,
3069 0x80040d40, 0x4807902d, 0x4200b000, 0x000001f4,
3070 0x59c8002c, 0x82000500, 0x18000000, 0x04000007,
3071 0x8058b040, 0x040207fb, 0x42000000, 0x00004003,
3072 0x41781000, 0x0401f04c, 0x59c80030, 0x59c80830,
3073 0x80040580, 0x040207fd, 0x40041800, 0x59c80031,
3074 0x59c80831, 0x80040580, 0x040207fd, 0x40042000,
3075 0x59c80032, 0x59c80832, 0x80040580, 0x040207fd,
3076 0x40042800, 0x59c80033, 0x59c80833, 0x80040580,
3077 0x040207fd, 0x40043000, 0x400c0000, 0x80080580,
3078 0x04000002, 0x801c3800, 0x40100000, 0x80080580,
3079 0x04000002, 0x801c3800, 0x59a80064, 0x82000580,
3080 0x00000004, 0x04000009, 0x40140000, 0x80080580,
3081 0x04000002, 0x801c3800, 0x40180000, 0x80080580,
3082 0x04000002, 0x801c3800, 0x59a80064, 0x82000580,
3083 0x00000004, 0x0400000d, 0x59c80034, 0x59c80834,
3084 0x80040580, 0x040207fd, 0x82040500, 0x0000ffff,
3085 0x82080d00, 0x0000ffff, 0x80040580, 0x0400000e,
3086 0x801c3800, 0x0401f00c, 0x59c80034, 0x59c80834,
3087 0x80040580, 0x040207fd, 0x82040500, 0x000000ff,
3088 0x82080d00, 0x000000ff, 0x80040580, 0x04000002,
3089 0x801c3800, 0x801c39c0, 0x04000006, 0x59a80063,
3090 0x801c0400, 0x48035063, 0x40240000, 0x48035062,
3091 0x1c01f000, 0x48034206, 0x48074406, 0x480b4207,
3092 0x480f4407, 0x48134208, 0x48174408, 0x0201f000,
3093 0x001022c3, 0x42000000, 0x00600000, 0x80000040,
3094 0x040207ff, 0x1c01f000, 0x5a5a5a5a, 0xa5a5a5a5,
3095 0x59a00c0a, 0x800409c0, 0x02000000, 0x00102310,
3096 0x82040480, 0x00000021, 0x02021000, 0x00102310,
3097 0x82040480, 0x00000011, 0x04001003, 0x42000800,
3098 0x00000010, 0x59a00208, 0x59a01407, 0x900811c0,
3099 0x80081540, 0x59a00207, 0x59a01c06, 0x900c19c0,
3100 0x800c1d40, 0x0201f800, 0x00103a00, 0x04000006,
3101 0x0201f800, 0x00103a25, 0x4a01d809, 0x00102fd5,
3102 0x1c01f000, 0x4a034406, 0x00000002, 0x0201f000,
3103 0x0010230c, 0x4031d800, 0x58ef400b, 0x58ec0002,
3104 0x82000580, 0x00000200, 0x02000000, 0x00102304,
3105 0x59a00c0a, 0x82040480, 0x00000011, 0x04001003,
3106 0x42000800, 0x00000010, 0x59a0040b, 0x59a0120b,
3107 0x900811c0, 0x80081540, 0x59a00209, 0x59a01c08,
3108 0x900c19c0, 0x800c1d40, 0x58ec0003, 0x0201f800,
3109 0x00103a28, 0x4a01d809, 0x00102ff0, 0x1c01f000,
3110 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
3111 0x00000200, 0x02000000, 0x00102304, 0x59a00c0a,
3112 0x82040480, 0x00000011, 0x02001000, 0x001022c0,
3113 0x82040c80, 0x00000010, 0x59a00208, 0x59a01407,
3114 0x900811c0, 0x80081540, 0x59a00207, 0x59a01c06,
3115 0x900c19c0, 0x800c1d40, 0x82081400, 0x00000040,
3116 0x58ec0003, 0x0201f800, 0x00103a25, 0x4a01d809,
3117 0x0010300e, 0x1c01f000, 0x4031d800, 0x58ef400b,
3118 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3119 0x00102304, 0x59a0040a, 0x82000c80, 0x00000010,
3120 0x59a0040b, 0x59a0120b, 0x900811c0, 0x80081540,
3121 0x59a00209, 0x59a01c08, 0x900c19c0, 0x800c1d40,
3122 0x82081400, 0x00000040, 0x58ec0003, 0x0201f800,
3123 0x00103a28, 0x4a01d809, 0x001022b9, 0x1c01f000,
3124 0x48efc857, 0x59a00207, 0x59a01407, 0x900001c0,
3125 0x80081540, 0x59a00209, 0x59a01c09, 0x900001c0,
3126 0x800c1d40, 0x59a00406, 0x48034000, 0x480b4001,
3127 0x480f4002, 0x0201f800, 0x00103a00, 0x04020005,
3128 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3129 0x42000800, 0x00000010, 0x0201f800, 0x00103a25,
3130 0x4a01d809, 0x00103043, 0x1c01f000, 0x4031d800,
3131 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3132 0x00000200, 0x02000000, 0x00102304, 0x48efc857,
3133 0x49a3c857, 0x492fc857, 0x592c0a04, 0x80040910,
3134 0x04020005, 0x4a034406, 0x00000019, 0x0201f000,
3135 0x0010230c, 0x4805d80c, 0x0401f00a, 0x4031d800,
3136 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200,
3137 0x02000000, 0x00102304, 0x48efc857, 0x49a3c857,
3138 0x48efc857, 0x49a3c857, 0x58ec000c, 0x80000040,
3139 0x04000012, 0x4801d80c, 0x0201f800, 0x00103a00,
3140 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3141 0x0010230c, 0x42000800, 0x00000010, 0x58ec1007,
3142 0x58ec1808, 0x0201f800, 0x00103a25, 0x4a01d809,
3143 0x00103057, 0x1c01f000, 0x58ee580d, 0x48efc857,
3144 0x49a3c857, 0x492fc857, 0x492f3006, 0x592c0404,
3145 0x8400055e, 0x48025c04, 0x4a01d809, 0x00103081,
3146 0x1c01f000, 0x58ee580d, 0x48efc857, 0x49a3c857,
3147 0x492fc857, 0x592c0404, 0x8400051e, 0x48025c04,
3148 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400,
3149 0x820c1c40, 0x00000000, 0x832c0400, 0x00000004,
3150 0x42000800, 0x00000010, 0x0201f000, 0x00103a28,
3151 0x800409c0, 0x04000005, 0x4a034406, 0x00000001,
3152 0x0201f000, 0x0010230c, 0x836c0580, 0x00000003,
3153 0x04000005, 0x4a034406, 0x00000007, 0x0201f000,
3154 0x0010230c, 0x59a0320b, 0x82183500, 0x000000ff,
3155 0x59a28c06, 0x0201f800, 0x00020245, 0x02020000,
3156 0x00102310, 0x83440580, 0x000007fd, 0x04000008,
3157 0x0201f800, 0x001049e7, 0x04000005, 0x4a034406,
3158 0x00000009, 0x0201f000, 0x0010230c, 0x0201f800,
3159 0x00103a00, 0x04020005, 0x4a034406, 0x00000002,
3160 0x0201f000, 0x0010230c, 0x801831c0, 0x0400000a,
3161 0x412c0800, 0x0201f800, 0x00103a00, 0x04020005,
3162 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3163 0x40065800, 0x4a025c04, 0x00008000, 0x497a5a04,
3164 0x0201f800, 0x00109100, 0x04020005, 0x4a034406,
3165 0x00000003, 0x0201f000, 0x0010230c, 0x4a01d809,
3166 0x001030d2, 0x1c01f000, 0x592c0005, 0x82000580,
3167 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3168 0x0201f000, 0x0010230c, 0x592c0406, 0x82002d00,
3169 0x0000ff00, 0x82000500, 0x000000ff, 0x80000904,
3170 0x80040800, 0x82040480, 0x00000006, 0x04001003,
3171 0x42000800, 0x00000005, 0x832ca400, 0x00000006,
3172 0x4050a800, 0x4004b000, 0x0201f800, 0x0010ab28,
3173 0x59a00407, 0x59a01207, 0x900811c0, 0x80081540,
3174 0x59a00409, 0x59a01a09, 0x900c19c0, 0x800c1d40,
3175 0x832c0400, 0x00000006, 0x4c140000, 0x0201f800,
3176 0x00103a28, 0x5c002800, 0x801429c0, 0x04000003,
3177 0x4a01d809, 0x001030ff, 0x1c01f000, 0x4031d800,
3178 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3179 0x00000200, 0x02000000, 0x00102304, 0x812e59c0,
3180 0x02000800, 0x001005d8, 0x592c0006, 0x82000500,
3181 0xff000000, 0x80000904, 0x800409c0, 0x02000000,
3182 0x00102304, 0x82040480, 0x0000000e, 0x04001003,
3183 0x42000800, 0x0000000d, 0x592e5801, 0x812e59c0,
3184 0x02000800, 0x001005d8, 0x832ca400, 0x00000005,
3185 0x4050a800, 0x4004b000, 0x0201f800, 0x0010ab28,
3186 0x58ec1007, 0x58ec1808, 0x832c0400, 0x00000005,
3187 0x0201f000, 0x00103a28, 0x0201f800, 0x00103a00,
3188 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3189 0x0010230c, 0x59a00c06, 0x82040500, 0x0000ff00,
3190 0x840001c0, 0x82001480, 0x00000007, 0x02021000,
3191 0x00102310, 0x0c01f001, 0x0010313d, 0x00103144,
3192 0x0010314b, 0x0010314b, 0x0010314b, 0x0010314d,
3193 0x00103152, 0x42000800, 0x0000000d, 0x42003800,
3194 0x00103166, 0x4a034000, 0x0010b4eb, 0x0401f013,
3195 0x42000800, 0x0000000d, 0x42003800, 0x00103166,
3196 0x4a034000, 0x0010b4f8, 0x0401f00c, 0x0201f000,
3197 0x00102310, 0x42000800, 0x00000008, 0x42003800,
3198 0x00103179, 0x0401f005, 0x42000800, 0x00000004,
3199 0x42003800, 0x001031c3, 0x59a00207, 0x59a01407,
3200 0x900001c0, 0x80081540, 0x59a00209, 0x59a01c09,
3201 0x900001c0, 0x800c1d40, 0x832c0400, 0x00000005,
3202 0x4c1c0000, 0x0201f800, 0x00103a25, 0x5c003800,
3203 0x481dd809, 0x1c01f000, 0x4031d800, 0x58ef400b,
3204 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
3205 0x02000000, 0x00102304, 0x4a03501f, 0x00000001,
3206 0x4200b000, 0x0000000d, 0x59a0a800, 0x832ca400,
3207 0x00000005, 0x0201f800, 0x0010ab17, 0x0201f000,
3208 0x001022c0, 0x4031d800, 0x58ef400b, 0x58ee580d,
3209 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3210 0x00102304, 0x832ca400, 0x00000005, 0x50500000,
3211 0x82001500, 0x000c0016, 0x02020000, 0x00102310,
3212 0x82500c00, 0x00000003, 0x50040000, 0x82001500,
3213 0x00000001, 0x02020000, 0x00102310, 0x50500000,
3214 0x82001500, 0x00000028, 0x0400001d, 0x82081580,
3215 0x00000028, 0x02020000, 0x00102310, 0x80500800,
3216 0x50040000, 0x82001500, 0x00000013, 0x82081580,
3217 0x00000013, 0x02020000, 0x00102310, 0x80040800,
3218 0x50040000, 0x82001500, 0x00010000, 0x82081580,
3219 0x00010000, 0x02020000, 0x00102310, 0x836c0580,
3220 0x00000000, 0x04000012, 0x599c0019, 0x8c00050e,
3221 0x0402000f, 0x0201f000, 0x00102310, 0x80500800,
3222 0x50040000, 0x82001500, 0x00000013, 0x02020000,
3223 0x00102310, 0x80040800, 0x50040000, 0x82001500,
3224 0x00010000, 0x02020000, 0x00102310, 0x4200b000,
3225 0x00000008, 0x4200a800, 0x0010b4e3, 0x0201f800,
3226 0x0010ab17, 0x0201f000, 0x001022c0, 0x4031d800,
3227 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3228 0x00000200, 0x02000000, 0x00102304, 0x4200b000,
3229 0x00000004, 0x4200a800, 0x0010b8fa, 0x832ca400,
3230 0x00000005, 0x0201f800, 0x0010ab17, 0x59a80005,
3231 0x84000550, 0x48035005, 0x0201f000, 0x001022c0,
3232 0x0201f800, 0x00103a00, 0x04020005, 0x4a034406,
3233 0x00000002, 0x0201f000, 0x0010230c, 0x59a00c06,
3234 0x82040500, 0x0000ff00, 0x840001c0, 0x82001480,
3235 0x00000006, 0x02021000, 0x00102310, 0x0c01f001,
3236 0x001031ee, 0x001031f3, 0x001031f8, 0x001031f8,
3237 0x001031f8, 0x001031fa, 0x42000800, 0x0000000d,
3238 0x4200a000, 0x0010b4eb, 0x0401f00c, 0x42000800,
3239 0x0000000d, 0x4200a000, 0x0010b4f8, 0x0401f007,
3240 0x0201f000, 0x00102310, 0x42000800, 0x00000008,
3241 0x4200a000, 0x0010b4e3, 0x4004b000, 0x832cac00,
3242 0x00000005, 0x0201f800, 0x0010ab17, 0x59a00207,
3243 0x59a01407, 0x900001c0, 0x80081540, 0x59a00209,
3244 0x59a01c09, 0x900001c0, 0x800c1d40, 0x832c0400,
3245 0x00000005, 0x0201f000, 0x00103a28, 0x836c0580,
3246 0x00000000, 0x04020005, 0x4a034406, 0x00000007,
3247 0x0201f000, 0x0010230c, 0x59a00406, 0x800001c0,
3248 0x0400001a, 0x59a80005, 0x8c000514, 0x04000005,
3249 0x42000000, 0x00000001, 0x40000800, 0x0401f003,
3250 0x59a00207, 0x59a80853, 0x48035053, 0x0201f800,
3251 0x0010163b, 0x04000022, 0x0201f800, 0x00101642,
3252 0x0400001f, 0x0201f800, 0x00101649, 0x0400001c,
3253 0x0201f800, 0x00101650, 0x04000019, 0x48075053,
3254 0x0201f000, 0x00102310, 0x59c40801, 0x82040d00,
3255 0x00018000, 0x82040580, 0x00000000, 0x04020004,
3256 0x4a034406, 0x00000000, 0x0401f00d, 0x82040580,
3257 0x00008000, 0x04020004, 0x4a034406, 0x00000001,
3258 0x0401f007, 0x82040580, 0x00010000, 0x02020800,
3259 0x001005d8, 0x4a034406, 0x00000003, 0x59a00406,
3260 0x82000580, 0x00000002, 0x0402001f, 0x59c40006,
3261 0x84000500, 0x48038806, 0x0201f800, 0x00106ede,
3262 0x497b8880, 0x0201f800, 0x0010a9c0, 0x0201f800,
3263 0x0010a9ce, 0x42000000, 0x0010b8ca, 0x0201f800,
3264 0x0010aa47, 0x82000540, 0x00000001, 0x0201f800,
3265 0x0010518c, 0x4a038808, 0x00000000, 0x4202d800,
3266 0x00000004, 0x42001000, 0x00000001, 0x0201f800,
3267 0x0010193d, 0x4a035049, 0x00000001, 0x0201f800,
3268 0x001006d4, 0x0201f000, 0x001022c0, 0x800409c0,
3269 0x04000005, 0x4a034406, 0x00000001, 0x0201f000,
3270 0x0010230c, 0x836c0580, 0x00000003, 0x04000005,
3271 0x4a034406, 0x00000007, 0x0201f000, 0x0010230c,
3272 0x59a28c06, 0x59a0320b, 0x82183500, 0x000000ff,
3273 0x0201f800, 0x00020245, 0x02020000, 0x00102310,
3274 0x83440580, 0x000007fd, 0x04000008, 0x0201f800,
3275 0x001049e7, 0x04000005, 0x42000800, 0x00000009,
3276 0x0201f000, 0x0010230c, 0x0201f800, 0x00103a00,
3277 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3278 0x0010230c, 0x497a5a04, 0x4a025c04, 0x00008000,
3279 0x0201f800, 0x00109115, 0x04020005, 0x4a034406,
3280 0x00000003, 0x0201f000, 0x0010230c, 0x4a01d809,
3281 0x0010329e, 0x1c01f000, 0x592c0005, 0x82000d00,
3282 0x0000ffff, 0x82000500, 0xffff0000, 0x82000580,
3283 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3284 0x0201f000, 0x0010230c, 0x80040904, 0x832ca400,
3285 0x00000005, 0x4050a800, 0x4004b000, 0x0201f800,
3286 0x0010ab28, 0x59a00207, 0x59a01407, 0x900001c0,
3287 0x80081540, 0x59a00209, 0x59a01c09, 0x900001c0,
3288 0x800c1d40, 0x832c0400, 0x00000005, 0x0201f000,
3289 0x00103a28, 0x496fc857, 0x836c0580, 0x00000000,
3290 0x04000005, 0x4a034406, 0x0000001a, 0x0201f000,
3291 0x0010230c, 0x0201f800, 0x0010513b, 0x02020800,
3292 0x00104142, 0x42000800, 0x00000020, 0x59a00407,
3293 0x59a01207, 0x900811c0, 0x80081540, 0x59a00409,
3294 0x59a01a09, 0x900c19c0, 0x800c1d40, 0x419c0000,
3295 0x49a3c857, 0x0201f800, 0x00103a25, 0x4a01d809,
3296 0x001032da, 0x1c01f000, 0x4833c857, 0x4031d800,
3297 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200,
3298 0x02000000, 0x00102304, 0x599c0200, 0x800001c0,
3299 0x02000000, 0x00102310, 0x59a80005, 0x8c000512,
3300 0x04000004, 0x599c0019, 0x8400050c, 0x48033819,
3301 0x0201f800, 0x001097d7, 0x59a80005, 0x8c000514,
3302 0x04000004, 0x599c0017, 0x84000508, 0x48033817,
3303 0x0201f800, 0x00103b25, 0x04020004, 0x8c00050a,
3304 0x02020000, 0x00102310, 0x4803c857, 0x8c000504,
3305 0x04020004, 0x59c408a3, 0x84040d7a, 0x480788a3,
3306 0x8c000502, 0x04020004, 0x59c408a3, 0x84040d08,
3307 0x480788a3, 0x599c0c02, 0x8c000500, 0x04020004,
3308 0x8c000516, 0x04000012, 0x0401f001, 0x82041480,
3309 0x0000007f, 0x02021000, 0x00102310, 0x82041400,
3310 0x0010210e, 0x50081000, 0x82081500, 0x000000ff,
3311 0x8c000500, 0x04020006, 0x480b5010, 0x42000800,
3312 0x00000003, 0x0201f800, 0x00106c78, 0x599c0019,
3313 0x8c00050e, 0x0402000b, 0x59a80806, 0x8c040d14,
3314 0x04000008, 0x42000800, 0x0010b4e3, 0x50040800,
3315 0x82040d00, 0x00000028, 0x02020000, 0x00102310,
3316 0x82000500, 0x00000030, 0x04000003, 0x80000108,
3317 0x0401f003, 0x42000000, 0x00000002, 0x48039040,
3318 0x42000800, 0x00000002, 0x82000400, 0x00103415,
3319 0x50001000, 0x0201f800, 0x00106c78, 0x599c0201,
3320 0x82000c80, 0x00000100, 0x02001000, 0x00102310,
3321 0x82000c80, 0x00000841, 0x02021000, 0x00102310,
3322 0x82000500, 0x00000007, 0x02020000, 0x00102310,
3323 0x599c0401, 0x80000540, 0x02000000, 0x00102310,
3324 0x599c0409, 0x599c0c07, 0x80040c80, 0x02021000,
3325 0x00102310, 0x80000040, 0x02000000, 0x00102310,
3326 0x599c0209, 0x599c0a07, 0x80040c80, 0x02021000,
3327 0x00102310, 0x80000040, 0x02000000, 0x00102310,
3328 0x0201f800, 0x001053cd, 0x0201f800, 0x00104cb6,
3329 0x599c0201, 0x48035004, 0x0201f800, 0x001012ee,
3330 0x599c020a, 0x800001c0, 0x04000003, 0x4803504d,
3331 0x0401f003, 0x4a03504d, 0x000000c8, 0x0201f800,
3332 0x00103b25, 0x04000004, 0x0201f800, 0x001060df,
3333 0x417a5000, 0x836c0580, 0x00000000, 0x04020098,
3334 0x599c0003, 0x599c0804, 0x9c0001c0, 0x9c0409c0,
3335 0x48035002, 0x48075003, 0x599c1017, 0x8c08151c,
3336 0x04000006, 0x599c0005, 0x599c0806, 0x9c0001c0,
3337 0x9c0409c0, 0x0401f003, 0x82000500, 0xf0ffffff,
3338 0x48035000, 0x48075001, 0x42001000, 0x0010b4eb,
3339 0x48001000, 0x48041001, 0x42001000, 0x0010b4f8,
3340 0x48001000, 0x48041001, 0x59a80005, 0x8c000514,
3341 0x04020015, 0x599c1019, 0x82081500, 0x0000e000,
3342 0x82080580, 0x00000000, 0x0402000c, 0x4a035053,
3343 0x00000000, 0x42000000, 0x00000001, 0x0201f800,
3344 0x0010188c, 0x42000000, 0x00000001, 0x0201f800,
3345 0x00101821, 0x0401f02b, 0x82080580, 0x00002000,
3346 0x0402000a, 0x4a035053, 0x00000001, 0x41780000,
3347 0x0201f800, 0x0010188c, 0x41780000, 0x0201f800,
3348 0x00101821, 0x0401f01f, 0x82080580, 0x00004000,
3349 0x04020006, 0x4a035053, 0x00000002, 0x4a035049,
3350 0x00000001, 0x0401f017, 0x82080580, 0x00006000,
3351 0x02020000, 0x00102310, 0x59a80858, 0x82040d80,
3352 0x01391077, 0x04020005, 0x59e00813, 0x8c040d00,
3353 0x02020000, 0x00102310, 0x4a035053, 0x00000003,
3354 0x42000000, 0x00000002, 0x0201f800, 0x0010188c,
3355 0x42000000, 0x00000002, 0x0201f800, 0x00101821,
3356 0x599c0019, 0x8c000520, 0x0400000d, 0x42000000,
3357 0x00000004, 0x42000800, 0x00000040, 0x0201f800,
3358 0x00101944, 0x42000000, 0x00000010, 0x42000800,
3359 0x000000c0, 0x0201f800, 0x00101944, 0x4a035032,
3360 0x0000aaaa, 0x599c1018, 0x82081500, 0x00000030,
3361 0x59a8006c, 0x80000540, 0x0400000c, 0x82080580,
3362 0x00000000, 0x02000000, 0x00102310, 0x599c1018,
3363 0x82081500, 0xffffffcf, 0x82081540, 0x00000010,
3364 0x480b3818, 0x0401f010, 0x82080d80, 0x00000000,
3365 0x04000007, 0x82080d80, 0x00000010, 0x0400000a,
3366 0x82080d80, 0x00000020, 0x04020002, 0x48075032,
3367 0x0201f800, 0x00103aba, 0x04000008, 0x0201f800,
3368 0x001015fe, 0x0201f800, 0x0010162a, 0x59a8002a,
3369 0x80040540, 0x4803502a, 0x49f3c857, 0x42001000,
3370 0x00105065, 0x0201f800, 0x00105f90, 0x42001000,
3371 0x00105058, 0x0201f800, 0x00106084, 0x4a038805,
3372 0xffffffff, 0x4a03c014, 0x00400040, 0x4a03c013,
3373 0x00400000, 0x0201f800, 0x001048c7, 0x59a0001d,
3374 0x84000540, 0x4803401d, 0x49f3c857, 0x0201f000,
3375 0x001022c0, 0x00000018, 0x0000000c, 0x00000018,
3376 0x00000020, 0x836c0580, 0x00000000, 0x04020005,
3377 0x42000800, 0x00000007, 0x0201f000, 0x0010230c,
3378 0x42000800, 0x00000020, 0x59a00407, 0x59a01207,
3379 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a09,
3380 0x900c19c0, 0x800c1d40, 0x419c0000, 0x0201f000,
3381 0x00103a28, 0x800409c0, 0x04000005, 0x4a034406,
3382 0x00000001, 0x0201f000, 0x0010230c, 0x0201f800,
3383 0x0010513b, 0x04020005, 0x4a034406, 0x00000016,
3384 0x0201f000, 0x0010230c, 0x59a80013, 0x8c000500,
3385 0x04000011, 0x4a034406, 0x00000000, 0x42000800,
3386 0x00000020, 0x59a00407, 0x59a01207, 0x900811c0,
3387 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
3388 0x800c1d40, 0x42000000, 0x0010be21, 0x0201f000,
3389 0x00103a28, 0x4a034406, 0x00000001, 0x4200b000,
3390 0x00000020, 0x4200a800, 0x0010be21, 0x4200a000,
3391 0xffffffff, 0x4450a800, 0x8054a800, 0x8058b040,
3392 0x040207fd, 0x4d440000, 0x4d340000, 0x42028800,
3393 0xffffffff, 0x42002000, 0xffffffff, 0x42003000,
3394 0x00000001, 0x42003800, 0x00000001, 0x42001800,
3395 0x0010be21, 0x59a81010, 0x82081500, 0x000000ff,
3396 0x40180000, 0x0c01f001, 0x0010346e, 0x00103471,
3397 0x00103475, 0x00103479, 0x82102500, 0xffffff00,
3398 0x0401f014, 0x82102500, 0xffff00ff, 0x840811c0,
3399 0x0401f010, 0x82102500, 0xff00ffff, 0x900811c0,
3400 0x0401f00c, 0x82102500, 0x00ffffff, 0x9c0801c0,
3401 0x80102540, 0x44101800, 0x42003000, 0xffffffff,
3402 0x42002000, 0xffffffff, 0x800c1800, 0x0401f003,
3403 0x40080000, 0x80102540, 0x81468800, 0x83442c80,
3404 0x0000007f, 0x04021014, 0x4c080000, 0x4c0c0000,
3405 0x4c180000, 0x4c1c0000, 0x0201f800, 0x00020245,
3406 0x5c003800, 0x5c003000, 0x5c001800, 0x5c001000,
3407 0x040207f2, 0x0201f800, 0x001049f3, 0x040207ef,
3408 0x80183000, 0x801c3800, 0x59341202, 0x40180000,
3409 0x0c01f7ce, 0x82100580, 0xffffffff, 0x04000002,
3410 0x44101800, 0x42001800, 0x0010be21, 0x500c0000,
3411 0x82000500, 0xffffff00, 0x801c0540, 0x44001800,
3412 0x5c026800, 0x5c028800, 0x42000800, 0x00000020,
3413 0x59a00407, 0x59a01207, 0x900811c0, 0x80081540,
3414 0x59a00409, 0x59a01a09, 0x900c19c0, 0x800c1d40,
3415 0x42000000, 0x0010be21, 0x0201f000, 0x00103a28,
3416 0x59a28c06, 0x59a0020b, 0x8c000500, 0x0400000e,
3417 0x59a01208, 0x59a00408, 0x82000500, 0x000000ff,
3418 0x900001c0, 0x80081540, 0x41784000, 0x0201f800,
3419 0x00104919, 0x04000008, 0x48034406, 0x0201f000,
3420 0x00102310, 0x0201f800, 0x00020245, 0x02020000,
3421 0x00102310, 0x0201f800, 0x00103a00, 0x04020005,
3422 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3423 0x59a0020b, 0x8c000500, 0x04000005, 0x0201f800,
3424 0x001049f3, 0x02020000, 0x00103ac4, 0x59a0020b,
3425 0x8c000502, 0x04000019, 0x83440480, 0x000007f0,
3426 0x04021016, 0x0201f800, 0x001049fc, 0x04020013,
3427 0x497a5a04, 0x4a025c04, 0x00008000, 0x0201f800,
3428 0x001090e6, 0x04020005, 0x4a034406, 0x00000003,
3429 0x0201f000, 0x0010230c, 0x4a01d809, 0x001034f1,
3430 0x1c01f000, 0x59a28c06, 0x0201f800, 0x00020245,
3431 0x02020000, 0x00102310, 0x4200b000, 0x0000000a,
3432 0x4134a000, 0x832e5c00, 0x00000002, 0x412ca800,
3433 0x0201f800, 0x0010ab17, 0x832cac00, 0x00000006,
3434 0x4054a000, 0x4200b000, 0x00000004, 0x0201f800,
3435 0x0010ab28, 0x592c0802, 0x82040500, 0x00ff00ff,
3436 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540,
3437 0x48025802, 0x592c0801, 0x82040500, 0x00ff00ff,
3438 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540,
3439 0x48025801, 0x42000800, 0x0000000a, 0x59a00407,
3440 0x59a01207, 0x900811c0, 0x80081540, 0x59a00409,
3441 0x59a01a09, 0x900c19c0, 0x800c1d40, 0x412c0000,
3442 0x0201f000, 0x00103a28, 0x496fc857, 0x496f4406,
3443 0x0201f000, 0x001022c0, 0x59a28c06, 0x0201f800,
3444 0x00020245, 0x02020000, 0x00102310, 0x836c0580,
3445 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
3446 0x0201f000, 0x0010230c, 0x83340c00, 0x00000006,
3447 0x59a0020b, 0x8c000500, 0x04000003, 0x83340c00,
3448 0x00000008, 0x58040001, 0x48034409, 0x900001c0,
3449 0x48034209, 0x50040000, 0x48034407, 0x900001c0,
3450 0x48034207, 0x59340200, 0x48034406, 0x0201f000,
3451 0x001022c0, 0x800409c0, 0x04000005, 0x4a034406,
3452 0x00000001, 0x0201f000, 0x0010230c, 0x59a0220b,
3453 0x8c102500, 0x0402002e, 0x8c102506, 0x04020006,
3454 0x59a03208, 0x82180480, 0x00000003, 0x02021000,
3455 0x00102310, 0x59a28c06, 0x0201f800, 0x00020245,
3456 0x02020000, 0x00102310, 0x0201f800, 0x001049e7,
3457 0x04000005, 0x4a034406, 0x00000009, 0x0201f000,
3458 0x0010230c, 0x0201f800, 0x00103a00, 0x04020005,
3459 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3460 0x59a0220b, 0x8c102506, 0x04000004, 0x59343002,
3461 0x82183500, 0x00ffffff, 0x497a5a04, 0x4a025c04,
3462 0x00008000, 0x0201f800, 0x001090a8, 0x04020005,
3463 0x4a034406, 0x00000003, 0x0201f000, 0x0010230c,
3464 0x4a01d809, 0x001035d1, 0x1c01f000, 0x59a28c06,
3465 0x0201f800, 0x00020245, 0x02020000, 0x00102310,
3466 0x0201f800, 0x001049e7, 0x04000005, 0x4a034406,
3467 0x00000009, 0x0201f000, 0x0010230c, 0x0201f800,
3468 0x00103a00, 0x04020005, 0x4a034406, 0x00000002,
3469 0x0201f000, 0x0010230c, 0x497a5a04, 0x4a025c04,
3470 0x00008000, 0x0201f800, 0x00103a00, 0x04020005,
3471 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3472 0x592e5800, 0x0201f800, 0x001090bd, 0x04020005,
3473 0x4a034406, 0x00000003, 0x0201f000, 0x0010230c,
3474 0x4a01d809, 0x001035a3, 0x1c01f000, 0x592c2805,
3475 0x82140d80, 0x01000000, 0x04020005, 0x4a034406,
3476 0x00000004, 0x0201f000, 0x0010230c, 0x42000800,
3477 0x00000008, 0x59a00207, 0x59a01407, 0x900001c0,
3478 0x80081540, 0x59a00209, 0x59a01c09, 0x900001c0,
3479 0x800c1d40, 0x832c0400, 0x00000005, 0x0201f800,
3480 0x00103a28, 0x8c142d00, 0x04000003, 0x4a01d809,
3481 0x001035be, 0x1c01f000, 0x4031d800, 0x58ef400b,
3482 0x58ee580e, 0x58ec0002, 0x82000580, 0x00000200,
3483 0x02000000, 0x00102304, 0x812e59c0, 0x02000800,
3484 0x001005d8, 0x42000800, 0x00000008, 0x832c0400,
3485 0x00000005, 0x58ec1007, 0x58ec1808, 0x0201f000,
3486 0x00103a28, 0x592c0005, 0x82000580, 0x01000000,
3487 0x04020005, 0x4a034406, 0x00000004, 0x0201f000,
3488 0x0010230c, 0x59a00207, 0x59a01407, 0x900001c0,
3489 0x80081540, 0x59a00209, 0x59a01c09, 0x900001c0,
3490 0x800c1d40, 0x42000800, 0x00000006, 0x832c0400,
3491 0x00000006, 0x0201f000, 0x00103a28, 0x59a00a0a,
3492 0x800409c0, 0x02000000, 0x00102310, 0x82040480,
3493 0x000000e7, 0x04001003, 0x42000800, 0x000000e6,
3494 0x59a00207, 0x59a01407, 0x900001c0, 0x80081540,
3495 0x59a00209, 0x59a01c09, 0x900001c0, 0x800c1d40,
3496 0x83880400, 0x00000000, 0x0201f800, 0x00103a28,
3497 0x4a01d809, 0x001035ff, 0x1c01f000, 0x4031d800,
3498 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200,
3499 0x02000000, 0x00102304, 0x58ef400b, 0x59a0020b,
3500 0x8c000500, 0x04000008, 0x83880400, 0x00000000,
3501 0x4803c840, 0x4a03c842, 0x00000006, 0x04011000,
3502 0x497b8885, 0x4a034207, 0x000000e6, 0x0201f000,
3503 0x001022c0, 0x800409c0, 0x04000005, 0x4a034406,
3504 0x00000001, 0x0201f000, 0x0010230c, 0x0401fbe5,
3505 0x04020005, 0x4a034406, 0x00000002, 0x0201f000,
3506 0x0010230c, 0x497a5a04, 0x4a025c04, 0x00008000,
3507 0x59a00406, 0x800001c0, 0x02000000, 0x00102310,
3508 0x82001580, 0x000000ff, 0x04000005, 0x82001480,
3509 0x00000004, 0x02021000, 0x00102310, 0x40001000,
3510 0x0201f800, 0x00101fbf, 0x04020005, 0x4a034406,
3511 0x00000003, 0x0201f000, 0x0010230c, 0x4a01d809,
3512 0x0010363a, 0x1c01f000, 0x592c0005, 0x82000580,
3513 0x01000000, 0x02020000, 0x001022c0, 0x4a034406,
3514 0x00000004, 0x0201f000, 0x0010230c, 0x59a01406,
3515 0x8c081508, 0x04020007, 0x800409c0, 0x04000005,
3516 0x4a034406, 0x00000001, 0x0201f000, 0x0010230c,
3517 0x59a01c07, 0x820c0480, 0x00001000, 0x02021000,
3518 0x00102310, 0x497b2804, 0x497b2805, 0x497b281c,
3519 0x497b281d, 0x497b281f, 0x497b2820, 0x497b2822,
3520 0x497b2823, 0x80000580, 0x0201f800, 0x001015fe,
3521 0x59a80805, 0x8c081500, 0x04000004, 0x82040d40,
3522 0x00000011, 0x0401f004, 0x8c081506, 0x04000002,
3523 0x84040d42, 0x84040d0a, 0x48075005, 0x4202d800,
3524 0x00000001, 0x82081500, 0x000000e0, 0x8008010a,
3525 0x0c020036, 0x0201f800, 0x0010513b, 0x04020009,
3526 0x4a035033, 0x00000001, 0x0201f800, 0x001050a2,
3527 0x0401f01f, 0x4a035033, 0x00000000, 0x0401f7fb,
3528 0x497b5032, 0x0201f800, 0x00104142, 0x0201f800,
3529 0x00106c55, 0x0201f800, 0x00106ede, 0x0201f800,
3530 0x00106c4b, 0x59a00a07, 0x480788a7, 0x59c400a3,
3531 0x82000500, 0xfeffffff, 0x82000540, 0x80018000,
3532 0x40000800, 0x84040d20, 0x480388a3, 0x480788a3,
3533 0x497b504e, 0x42000800, 0x0000002d, 0x42001000,
3534 0x001041bc, 0x0201f800, 0x00105f69, 0x59a00407,
3535 0x800000c2, 0x800008c4, 0x8005d400, 0x42000000,
3536 0x0000ffff, 0x0201f800, 0x0010513b, 0x04000003,
3537 0x59a00207, 0x80000110, 0x0201f800, 0x00103afc,
3538 0x0201f000, 0x001022c0, 0x0010366d, 0x00103670,
3539 0x00103678, 0x00102310, 0x00103675, 0x00102310,
3540 0x00102310, 0x00102310, 0x836c0580, 0x00000003,
3541 0x04000005, 0x4a034406, 0x00000007, 0x0201f000,
3542 0x0010230c, 0x59a03c06, 0x59a00407, 0x59a04a07,
3543 0x902449c0, 0x80244d40, 0x59a00409, 0x59a05209,
3544 0x902851c0, 0x80285540, 0x0401fb46, 0x04020005,
3545 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3546 0x417a8800, 0x41783000, 0x497b4001, 0x497b4004,
3547 0x832c4400, 0x00000005, 0x48234002, 0x8c1c3d04,
3548 0x04020078, 0x0201f800, 0x00020245, 0x0402002a,
3549 0x0201f800, 0x001049e7, 0x04000004, 0x0201f800,
3550 0x001048e3, 0x04020024, 0x8c1c3d00, 0x04000008,
3551 0x59340009, 0x44004000, 0x59340008, 0x80204000,
3552 0x44004000, 0x80204000, 0x0401f007, 0x59340007,
3553 0x44004000, 0x59340006, 0x80204000, 0x44004000,
3554 0x80204000, 0x83440580, 0x000007fe, 0x0400000d,
3555 0x83440580, 0x000007fc, 0x0400000a, 0x0201f800,
3556 0x001049f3, 0x04000003, 0x85468d5e, 0x0401f005,
3557 0x0201f800, 0x00104838, 0x04020002, 0x85468d5e,
3558 0x45444000, 0x85468d1e, 0x80204000, 0x82183400,
3559 0x00000003, 0x81468800, 0x83440480, 0x000007f0,
3560 0x0400100e, 0x8c1c3d06, 0x04000010, 0x83440580,
3561 0x000007f0, 0x04020004, 0x42028800, 0x000007fe,
3562 0x0401f006, 0x83440580, 0x000007ff, 0x04020007,
3563 0x42028800, 0x000007fc, 0x82180580, 0x0000000f,
3564 0x0400000b, 0x0401f7c0, 0x801831c0, 0x04020006,
3565 0x59a00801, 0x800408c4, 0x48074406, 0x0201f000,
3566 0x001022c0, 0x4a034004, 0x00000001, 0x49474000,
3567 0x59a00001, 0x80180400, 0x48034001, 0x481f4003,
3568 0x4a01d801, 0x00000000, 0x4819d804, 0x59a00002,
3569 0x4801d803, 0x4825d807, 0x4829d808, 0x4000a800,
3570 0x4000a000, 0x4018b000, 0x0201f800, 0x0010ab17,
3571 0x40ec1000, 0x0201f800, 0x00100858, 0x4a01d809,
3572 0x0010372a, 0x1c01f000, 0x4031d800, 0x58ef400b,
3573 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3574 0x00102304, 0x59a00004, 0x80000540, 0x04020008,
3575 0x59a28800, 0x59a04002, 0x59a03803, 0x41783000,
3576 0x58ec4807, 0x58ec5008, 0x0401f78f, 0x59a00801,
3577 0x800408c4, 0x48074406, 0x0201f000, 0x001022c0,
3578 0x0201f800, 0x00020245, 0x0402002f, 0x0201f800,
3579 0x001049e7, 0x04000004, 0x0201f800, 0x001048e3,
3580 0x04020029, 0x83440580, 0x000007fe, 0x04000011,
3581 0x83440580, 0x000007fc, 0x0400000e, 0x0201f800,
3582 0x001049f3, 0x04000005, 0x59340403, 0x8400055e,
3583 0x48026c03, 0x0401f007, 0x0201f800, 0x00104838,
3584 0x04020004, 0x59340403, 0x8400055e, 0x48026c03,
3585 0x4134a000, 0x4020a800, 0x4200b000, 0x00000006,
3586 0x0201f800, 0x0010ab17, 0x59340007, 0x4400a800,
3587 0x59340006, 0x4800a801, 0x59340009, 0x4800a802,
3588 0x59340008, 0x4800a803, 0x59340403, 0x8400051e,
3589 0x48026c03, 0x82204400, 0x0000000a, 0x82183400,
3590 0x0000000a, 0x81468800, 0x83440480, 0x000007f0,
3591 0x0400100e, 0x8c1c3d06, 0x04000010, 0x83440580,
3592 0x000007f0, 0x04020004, 0x42028800, 0x000007fe,
3593 0x0401f006, 0x83440580, 0x000007ff, 0x04020007,
3594 0x42028800, 0x000007fc, 0x82180580, 0x0000000a,
3595 0x0400000b, 0x0401f7bb, 0x801831c0, 0x04020006,
3596 0x59a00801, 0x800408c4, 0x48074406, 0x0201f000,
3597 0x001022c0, 0x4a034004, 0x00000001, 0x49474000,
3598 0x59a00001, 0x80180400, 0x48034001, 0x481f4003,
3599 0x4a01d801, 0x00000000, 0x4819d804, 0x59a00002,
3600 0x4801d803, 0x4825d807, 0x4829d808, 0x40ec1000,
3601 0x0201f800, 0x00100858, 0x4a01d809, 0x001037a1,
3602 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ec0002,
3603 0x82000580, 0x00000200, 0x02000000, 0x00102304,
3604 0x59a00004, 0x80000540, 0x04020008, 0x59a28800,
3605 0x59a04002, 0x59a03803, 0x41783000, 0x58ec4807,
3606 0x58ec5008, 0x0401f78f, 0x59a00801, 0x800408c4,
3607 0x48074406, 0x0201f000, 0x001022c0, 0x42002800,
3608 0x0000007e, 0x59a00c06, 0x59a01207, 0x59a01c07,
3609 0x59a02209, 0x82040500, 0x0000ff00, 0x840001c0,
3610 0x82003480, 0x00000020, 0x02001000, 0x00102310,
3611 0x80140480, 0x02001000, 0x00102310, 0x82040500,
3612 0x000000ff, 0x82003480, 0x00000020, 0x02001000,
3613 0x00102310, 0x80140480, 0x02001000, 0x00102310,
3614 0x82080500, 0x0000ff00, 0x840001c0, 0x82003480,
3615 0x00000020, 0x02001000, 0x00102310, 0x80140480,
3616 0x02001000, 0x00102310, 0x82080500, 0x000000ff,
3617 0x82003480, 0x00000020, 0x02001000, 0x00102310,
3618 0x80140480, 0x02001000, 0x00102310, 0x820c0500,
3619 0x0000ff00, 0x840001c0, 0x82003480, 0x00000020,
3620 0x02001000, 0x00102310, 0x80140480, 0x02001000,
3621 0x00102310, 0x820c0500, 0x000000ff, 0x82003480,
3622 0x00000020, 0x02001000, 0x00102310, 0x80140480,
3623 0x02001000, 0x00102310, 0x82100500, 0x0000ff00,
3624 0x840001c0, 0x82003480, 0x00000020, 0x02001000,
3625 0x00102310, 0x80140480, 0x02001000, 0x00102310,
3626 0x82100500, 0x000000ff, 0x82003480, 0x00000020,
3627 0x02001000, 0x00102310, 0x80140480, 0x02001000,
3628 0x00102310, 0x900401c0, 0x80080d40, 0x900c01c0,
3629 0x80101d40, 0x83a83400, 0x0000003a, 0x44043000,
3630 0x80183000, 0x440c3000, 0x0201f000, 0x001022c0,
3631 0x0401f9ec, 0x04020005, 0x4a034406, 0x00000002,
3632 0x0201f000, 0x0010230c, 0x42000800, 0x0000000c,
3633 0x0401f853, 0x4a01d809, 0x00103820, 0x1c01f000,
3634 0x4031d800, 0x58ee580d, 0x58ef400b, 0x58ec0002,
3635 0x82000580, 0x00000200, 0x02000000, 0x00102304,
3636 0x832ca400, 0x00000004, 0x4200b000, 0x0000000c,
3637 0x40c8a800, 0x0201f800, 0x0010ab17, 0x58c80200,
3638 0x80000540, 0x04000034, 0x58c80400, 0x82000500,
3639 0xfffffffb, 0x04020030, 0x58c80401, 0x80000540,
3640 0x0400002d, 0x82000480, 0x0000ff01, 0x0402102a,
3641 0x58c80202, 0x82000480, 0x0000005c, 0x04001026,
3642 0x0201f800, 0x001063a3, 0x58c80c08, 0x58c80204,
3643 0x80040480, 0x04001020, 0x58c80204, 0x82000480,
3644 0x00000005, 0x0402101c, 0x58c80205, 0x58c80c08,
3645 0x80040902, 0x80040480, 0x04001017, 0x58c80c08,
3646 0x0201f800, 0x001062f1, 0x0400001b, 0x0201f800,
3647 0x001061b9, 0x04020012, 0x4979940b, 0x59c408a3,
3648 0x82040d40, 0x00000002, 0x480788a3, 0x4a038830,
3649 0x00000001, 0x4a038832, 0x01ffffff, 0x58c80202,
3650 0x48030804, 0x0201f800, 0x0010619b, 0x0201f000,
3651 0x001022c0, 0x0201f000, 0x00102310, 0x0201f800,
3652 0x001063f5, 0x0201f800, 0x00106402, 0x0201f800,
3653 0x001062e4, 0x0201f000, 0x0010230c, 0x4c000000,
3654 0x59a01207, 0x59a00407, 0x900811c0, 0x80081540,
3655 0x59a01a09, 0x59a00409, 0x900c19c0, 0x800c1d40,
3656 0x5c000000, 0x0401f1ac, 0x59840000, 0x82000580,
3657 0x00000000, 0x04000054, 0x59840002, 0x8c000504,
3658 0x04000051, 0x84000546, 0x48030802, 0x0201f800,
3659 0x001062e4, 0x59c408a3, 0x82040d00, 0xfffffffd,
3660 0x480788a3, 0x4c5c0000, 0x4200b800, 0x0010ac00,
3661 0x505e6800, 0x813669c0, 0x04000008, 0x5936600e,
3662 0x813261c0, 0x04000005, 0x0201f800, 0x001062d5,
3663 0x02000800, 0x001064ad, 0x805cb800, 0x825c0580,
3664 0x0010b3f0, 0x040207f3, 0x59866003, 0x813261c0,
3665 0x0400000b, 0x59300406, 0x82000580, 0x00000009,
3666 0x02020800, 0x001005d8, 0x5930b800, 0x0201f800,
3667 0x001062c1, 0x405e6000, 0x0401f7f5, 0x497b0803,
3668 0x4200b800, 0x0010b51b, 0x505e6000, 0x813261c0,
3669 0x04000011, 0x59300406, 0x82000580, 0x00000009,
3670 0x0402000d, 0x59300203, 0x82000580, 0x00000004,
3671 0x04020009, 0x59326809, 0x813669c0, 0x02020800,
3672 0x001005d8, 0x0201f800, 0x00100e99, 0x0201f800,
3673 0x001062c1, 0x4578b800, 0x805cb800, 0x825c0580,
3674 0x0010b523, 0x040207e9, 0x42000800, 0x0010b519,
3675 0x49780801, 0x49780800, 0x59a80069, 0x82000400,
3676 0x00000007, 0x48035069, 0x0201f800, 0x001063f5,
3677 0x0201f800, 0x00106402, 0x5c00b800, 0x0201f800,
3678 0x001061b4, 0x0201f000, 0x001022c0, 0x836c0580,
3679 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
3680 0x0201f000, 0x0010230c, 0x59a00407, 0x59a02207,
3681 0x901021c0, 0x80102540, 0x59a00409, 0x59a02a09,
3682 0x901429c0, 0x80142d40, 0x0401f91e, 0x04020005,
3683 0x4a034406, 0x00000002, 0x0201f000, 0x0010230c,
3684 0x417a8800, 0x41781800, 0x497b4001, 0x497b4003,
3685 0x832c3400, 0x00000004, 0x481b4002, 0x41440000,
3686 0x81ac0400, 0x50026800, 0x813669c0, 0x0400000b,
3687 0x0201f800, 0x001049e7, 0x04020008, 0x59340002,
3688 0x48003000, 0x49443001, 0x82183400, 0x00000002,
3689 0x820c1c00, 0x00000002, 0x81468800, 0x83440480,
3690 0x00000800, 0x04000005, 0x820c0480, 0x00000010,
3691 0x0402100b, 0x0401f7ea, 0x800c19c0, 0x04020006,
3692 0x59a00801, 0x80040902, 0x48074406, 0x0201f000,
3693 0x001022c0, 0x4a034003, 0x00000001, 0x49474000,
3694 0x59a00001, 0x800c0400, 0x48034001, 0x40ec1000,
3695 0x4a001001, 0x00000000, 0x480c1004, 0x59a00002,
3696 0x48001003, 0x48101007, 0x48141008, 0x0201f800,
3697 0x00100858, 0x4a01d809, 0x00103920, 0x1c01f000,
3698 0x4031d800, 0x58ef400b, 0x58ec0002, 0x82000580,
3699 0x00000200, 0x02000000, 0x00102304, 0x59a00003,
3700 0x80000540, 0x04020008, 0x59a28800, 0x59a03002,
3701 0x41781800, 0x40ec1000, 0x58082007, 0x58082808,
3702 0x0401f7bf, 0x59a00801, 0x80040902, 0x48074406,
3703 0x0201f000, 0x001022c0, 0x800409c0, 0x04000005,
3704 0x4a034406, 0x00000001, 0x0201f000, 0x0010230c,
3705 0x59a80026, 0x8c00050a, 0x04020007, 0x8c000506,
3706 0x04020005, 0x4a034406, 0x00000016, 0x0201f000,
3707 0x0010230c, 0x0401f8bb, 0x04020005, 0x4a034406,
3708 0x00000002, 0x0201f000, 0x0010230c, 0x59a00c06,
3709 0x80040902, 0x59a00407, 0x59a01207, 0x900811c0,
3710 0x80081540, 0x59a00409, 0x59a01a09, 0x900c19c0,
3711 0x800c1d40, 0x832c0400, 0x00000005, 0x0401f8ce,
3712 0x4a01d809, 0x0010395b, 0x1c01f000, 0x4031d800,
3713 0x58ef400b, 0x58ee580d, 0x58ec0002, 0x82000580,
3714 0x00000200, 0x02000000, 0x00102304, 0x592c0009,
3715 0x0201f800, 0x00105c9a, 0x02000800, 0x001045a6,
3716 0x02020000, 0x00102310, 0x49474001, 0x481a6802,
3717 0x592c000a, 0x82001d80, 0x70000000, 0x04020007,
3718 0x0401f890, 0x04020011, 0x4a034406, 0x00000002,
3719 0x0201f000, 0x0010230c, 0x82001d80, 0x72000000,
3720 0x02020000, 0x00102310, 0x0401f886, 0x04020885,
3721 0x04020884, 0x04020005, 0x4a034406, 0x00000002,
3722 0x0201f000, 0x0010230c, 0x58ee580d, 0x4a025c04,
3723 0x00008000, 0x497a5a04, 0x592c3208, 0x80183102,
3724 0x592c1801, 0x4a001805, 0x01000000, 0x0201f800,
3725 0x001090d1, 0x04020005, 0x4a034406, 0x00000003,
3726 0x0201f000, 0x0010230c, 0x4a01d809, 0x00103995,
3727 0x1c01f000, 0x592c4000, 0x592c0005, 0x82000580,
3728 0x01000000, 0x04020005, 0x4a034406, 0x00000004,
3729 0x0201f000, 0x0010230c, 0x832c3c00, 0x00000005,
3730 0x401ca000, 0x401ca800, 0x5820280a, 0x4200b000,
3731 0x00000002, 0x82143580, 0x70000000, 0x04000003,
3732 0x4200b000, 0x0000000f, 0x0201f800, 0x0010ab28,
3733 0x401c0000, 0x58201006, 0x58201807, 0x58202205,
3734 0x80102102, 0x82143580, 0x70000000, 0x04020008,
3735 0x82103480, 0x00000002, 0x02001000, 0x00102310,
3736 0x42000800, 0x00000002, 0x0401f06e, 0x82143580,
3737 0x72000000, 0x02020000, 0x00102310, 0x82103480,
3738 0x0000002a, 0x02001000, 0x00102310, 0x42000800,
3739 0x0000000f, 0x0401f863, 0x4a01d809, 0x001039c9,
3740 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ee580e,
3741 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3742 0x00102304, 0x592e5800, 0x832c0c00, 0x00000005,
3743 0x4004a000, 0x4004a800, 0x4200b000, 0x0000000f,
3744 0x0201f800, 0x0010ab28, 0x40ec1000, 0x4a001001,
3745 0x00000000, 0x4a001004, 0x0000000f, 0x48041003,
3746 0x0201f800, 0x00100858, 0x4a01d809, 0x001039e5,
3747 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ee580e,
3748 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
3749 0x00102304, 0x832c0c00, 0x00000005, 0x4004a000,
3750 0x4004a800, 0x4200b000, 0x0000000c, 0x0201f800,
3751 0x0010ab28, 0x40ec1000, 0x4a001001, 0x00000000,
3752 0x4a001004, 0x0000000c, 0x48041003, 0x0201f800,
3753 0x00100858, 0x4a01d809, 0x001022b9, 0x1c01f000,
3754 0x0201f800, 0x001007e4, 0x04000010, 0x497a5800,
3755 0x58ec000d, 0x80000540, 0x04020004, 0x492dd80d,
3756 0x492dd80e, 0x0401f007, 0x58ec000e, 0x48025800,
3757 0x82000400, 0x00000001, 0x452c0000, 0x492dd80e,
3758 0x832c0400, 0x00000004, 0x492fc857, 0x4803c857,
3759 0x1c01f000, 0x4d2c0000, 0x48efc857, 0x58ec400d,
3760 0x4823c857, 0x802041c0, 0x04000007, 0x40225800,
3761 0x592c4001, 0x497a5801, 0x0201f800, 0x001007f4,
3762 0x0401f7f8, 0x4979d80d, 0x4979d80e, 0x5c025800,
3763 0x1c01f000, 0x42003000, 0x00000001, 0x0401f003,
3764 0x42003000, 0x00000000, 0x4803c857, 0x4807c857,
3765 0x480bc857, 0x480fc857, 0x481bc857, 0x48efc857,
3766 0x4819d801, 0x800409c0, 0x02000800, 0x001005d8,
3767 0x4805d804, 0x4801d803, 0x4809d807, 0x480dd808,
3768 0x40ec1000, 0x0201f800, 0x00100858, 0x4a01d809,
3769 0x001022b9, 0x1c01f000, 0x80002d80, 0x480bc857,
3770 0x480fc857, 0x4813c857, 0x4817c857, 0x4d2c0000,
3771 0x4da00000, 0x42034000, 0x0010b4a4, 0x59a00017,
3772 0x800001c0, 0x04020013, 0x04006012, 0x480bc020,
3773 0x480fc021, 0x4813c022, 0x4817c023, 0x900811c0,
3774 0x82081540, 0x00000012, 0x480bc011, 0x59e00017,
3775 0x8c000508, 0x04020004, 0x4203e000, 0x30000001,
3776 0x0401f053, 0x4a03c017, 0x00000002, 0x0401f7fb,
3777 0x4c040000, 0x4c1c0000, 0x80000800, 0x48074017,
3778 0x59a0381a, 0x481fc857, 0x801c39c0, 0x04020027,
3779 0x82000480, 0x0000000a, 0x04021010, 0x59a00018,
3780 0x80000000, 0x48034018, 0x59a00219, 0x82000400,
3781 0x00000002, 0x82000c80, 0x00000013, 0x48034219,
3782 0x04001003, 0x497b4219, 0x41780000, 0x59a03816,
3783 0x801c3c00, 0x0401f030, 0x4803c856, 0x0201f800,
3784 0x001007e4, 0x04000007, 0x492f401a, 0x492f401b,
3785 0x412c3800, 0x497b421c, 0x497a5813, 0x0401f026,
3786 0x59880051, 0x80000000, 0x48031051, 0x59a00017,
3787 0x80000040, 0x48034017, 0x59a00219, 0x59a03816,
3788 0x801c3c00, 0x0401f01c, 0x59a0021c, 0x82000400,
3789 0x00000002, 0x82000c80, 0x00000012, 0x04021004,
3790 0x4803421c, 0x801c3c00, 0x0401f013, 0x0201f800,
3791 0x001007e4, 0x0402000b, 0x59880051, 0x80000000,
3792 0x48031051, 0x59a00017, 0x80000040, 0x48034017,
3793 0x4803c856, 0x59a0021c, 0x801c3c00, 0x0401f006,
3794 0x492f401a, 0x492c3813, 0x412c3800, 0x497b421c,
3795 0x497a5813, 0x48083c00, 0x480c3a00, 0x48103c01,
3796 0x48143a01, 0x5c003800, 0x5c000800, 0x5c034000,
3797 0x5c025800, 0x1c01f000, 0x480fc857, 0x4813c857,
3798 0x481bc857, 0x42000000, 0x0010b813, 0x0201f800,
3799 0x0010aa47, 0x801800d0, 0x40002800, 0x42001000,
3800 0x00008014, 0x0401f786, 0x4c000000, 0x599c0017,
3801 0x8c000512, 0x5c000000, 0x1c01f000, 0x4c000000,
3802 0x599c0018, 0x8c00050e, 0x5c000000, 0x1c01f000,
3803 0x59a80821, 0x800409c0, 0x04000005, 0x4a034406,
3804 0x00000001, 0x0201f000, 0x0010230c, 0x836c0580,
3805 0x00000003, 0x04000005, 0x4a034406, 0x00000007,
3806 0x0201f000, 0x0010230c, 0x599c0017, 0x8c00050a,
3807 0x04000005, 0x4a034406, 0x00000008, 0x0201f000,
3808 0x0010230c, 0x59340405, 0x8c000508, 0x04020004,
3809 0x8c00050a, 0x02020000, 0x001034db, 0x497a5a04,
3810 0x497a5805, 0x4a025c04, 0x00008000, 0x0201f800,
3811 0x00109176, 0x04020005, 0x4a034406, 0x00000003,
3812 0x0201f000, 0x0010230c, 0x4a01d809, 0x00103aed,
3813 0x1c01f000, 0x592c0005, 0x82000580, 0x01000000,
3814 0x04020005, 0x4a034406, 0x00000004, 0x0201f000,
3815 0x0010230c, 0x59a28c06, 0x0201f800, 0x00020245,
3816 0x02020000, 0x00102310, 0x0201f000, 0x001034db,
3817 0x82001580, 0x0000ffff, 0x04000009, 0x0201f800,
3818 0x00105c9a, 0x02000800, 0x00020245, 0x0402000c,
3819 0x0201f800, 0x00105fae, 0x0401f009, 0x42028800,
3820 0x000007ef, 0x0201f800, 0x00020245, 0x02000800,
3821 0x00105fae, 0x81468840, 0x040217fb, 0x1c01f000,
3822 0x4803c856, 0x4c0c0000, 0x4d340000, 0x4d440000,
3823 0x42028800, 0x000007fe, 0x0201f800, 0x00020245,
3824 0x04020009, 0x5934180a, 0x820c1d00, 0x00000001,
3825 0x820c1d80, 0x00000001, 0x42001000, 0x0000801b,
3826 0x0401ff1e, 0x5c028800, 0x5c026800, 0x5c001800,
3827 0x1c01f000, 0x599c0017, 0x8c000508, 0x1c01f000,
3828 0x48efc857, 0x04011000, 0x48efc840, 0x4a03c842,
3829 0x00000011, 0x40000000, 0x040117ff, 0x4a01d80f,
3830 0xbeefbeef, 0x1c01f000, 0x497b4000, 0x497b4001,
3831 0x497b4002, 0x497b4003, 0x497b4004, 0x1c01f000,
3832 0x59c400a4, 0x4c580000, 0x4c500000, 0x4c540000,
3833 0x82000500, 0x0000000f, 0x82000480, 0x00000007,
3834 0x0400100a, 0x82006c80, 0x00000006, 0x02021800,
3835 0x001005d8, 0x0c01f807, 0x5c00a800, 0x5c00a000,
3836 0x5c00b000, 0x1c01f000, 0x0401f906, 0x0401f7fb,
3837 0x00103b51, 0x00103b57, 0x00103b7c, 0x00103b9e,
3838 0x00103c59, 0x59c40806, 0x8c040d00, 0x04020003,
3839 0x84040d40, 0x48078806, 0x1c01f000, 0x59c40005,
3840 0x8c000534, 0x02020000, 0x0010429e, 0x4a038805,
3841 0xffffffff, 0x42006000, 0x00020000, 0x0201f800,
3842 0x00104282, 0x59a80015, 0x82000500, 0xfffffffa,
3843 0x84000542, 0x48035015, 0x497b5026, 0x42000800,
3844 0x0010be21, 0x45780800, 0x497b5013, 0x42006000,
3845 0xffefffff, 0x42006800, 0x40000000, 0x0201f800,
3846 0x0010427d, 0x59c40006, 0x82000500, 0xffffff0f,
3847 0x48038806, 0x42000800, 0x00000010, 0x42001000,
3848 0x001041f3, 0x0201f800, 0x00105f83, 0x0401f001,
3849 0x42006000, 0xffffffff, 0x42006800, 0x00800000,
3850 0x0201f800, 0x0010427d, 0x4200b000, 0x000000c8,
3851 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
3852 0x0000000a, 0x0400000f, 0x8058b040, 0x040207f9,
3853 0x497b5014, 0x42006000, 0xbf7fffff, 0x42006800,
3854 0x00018000, 0x0201f800, 0x0010427d, 0x42006000,
3855 0xfffeffff, 0x41786800, 0x0201f000, 0x0010427d,
3856 0x497b5014, 0x4a035012, 0x00000000, 0x80000580,
3857 0x0201f000, 0x00104289, 0x4a038805, 0xffffffff,
3858 0x59a80012, 0x82000c80, 0x00000004, 0x02021800,
3859 0x001005d8, 0x0c01f001, 0x00103ba9, 0x00103bd6,
3860 0x00103c4f, 0x4803c856, 0x59c400a3, 0x8400051e,
3861 0x480388a3, 0x4a035012, 0x00000001, 0x59c40008,
3862 0x8400054e, 0x48038808, 0x0201f800, 0x00104263,
3863 0x42007800, 0x0010b54c, 0x4a007806, 0x11010000,
3864 0x4200a000, 0x0010b402, 0x4200a800, 0x0010b553,
3865 0x4200b000, 0x00000002, 0x0201f800, 0x0010ab17,
3866 0x497b8802, 0x42000800, 0x00000003, 0x497b504a,
3867 0x0201f800, 0x0010416e, 0x4a03504a, 0x00000001,
3868 0x497b5016, 0x0201f800, 0x00104290, 0x42006000,
3869 0xffffffff, 0x42006800, 0x00080000, 0x0201f800,
3870 0x0010427d, 0x42006000, 0xfff7ffff, 0x41786800,
3871 0x0201f000, 0x0010427d, 0x59a80016, 0x497b5016,
3872 0x80002540, 0x04000066, 0x59c40004, 0x82000500,
3873 0x00000003, 0x04020071, 0x59a80815, 0x8c040d02,
3874 0x0400004b, 0x82100580, 0x0000000c, 0x0402004f,
3875 0x82100400, 0x00000018, 0x8000b104, 0x41cc1000,
3876 0x42001800, 0x0010b54c, 0x50080800, 0x500c0000,
3877 0x80040580, 0x0402001a, 0x80081000, 0x800c1800,
3878 0x8058b040, 0x040207f9, 0x0201f800, 0x00104290,
3879 0x42006000, 0xffffffff, 0x42006800, 0x00500000,
3880 0x0201f800, 0x0010427d, 0x4a035012, 0x00000002,
3881 0x4a035014, 0x00000002, 0x42000800, 0x000007d0,
3882 0x42001000, 0x00104148, 0x0201f800, 0x0010606e,
3883 0x0201f800, 0x00104263, 0x0401f048, 0x59cc0806,
3884 0x82040d80, 0x11010000, 0x04020028, 0x59cc0800,
3885 0x82040500, 0x00ffffff, 0x0400001a, 0x82000580,
3886 0x000000ef, 0x04020017, 0x59cc0801, 0x82040500,
3887 0x00ffffff, 0x82000580, 0x000000ef, 0x04020011,
3888 0x83cca400, 0x00000007, 0x4200a800, 0x0010b402,
3889 0x4200b000, 0x00000002, 0x50500800, 0x50540000,
3890 0x80040480, 0x04001007, 0x04020010, 0x8050a000,
3891 0x8054a800, 0x8058b040, 0x040207f8, 0x0401f00b,
3892 0x59a80015, 0x84000502, 0x48035015, 0x41cca000,
3893 0x4200a800, 0x0010b54c, 0x4200b000, 0x00000009,
3894 0x0201f800, 0x0010ab17, 0x0201f800, 0x00104290,
3895 0x42006000, 0xffffffff, 0x42006800, 0x00080000,
3896 0x0201f800, 0x0010427d, 0x42006000, 0xfff7ffff,
3897 0x41786800, 0x0201f800, 0x0010427d, 0x42006000,
3898 0xffffffff, 0x42006800, 0x00004000, 0x0201f800,
3899 0x0010427d, 0x59c40004, 0x82000500, 0x00000003,
3900 0x04020006, 0x497b5016, 0x42000800, 0x00000003,
3901 0x0201f000, 0x0010416e, 0x1c01f000, 0x1c01f000,
3902 0x59a80014, 0x82006d80, 0x0000000f, 0x04000005,
3903 0x82000580, 0x0000001b, 0x02020800, 0x00104139,
3904 0x1c01f000, 0x59a80015, 0x84000506, 0x48035015,
3905 0x497b504a, 0x59a80014, 0x82000c80, 0x0000001e,
3906 0x02021800, 0x001005d8, 0x0c01f001, 0x00103c97,
3907 0x00103cac, 0x00103cd5, 0x00103cf0, 0x00103d14,
3908 0x00103d45, 0x00103d68, 0x00103d9b, 0x00103dbe,
3909 0x00103de4, 0x00103e21, 0x00103e48, 0x00103e5f,
3910 0x00103e71, 0x00103e8a, 0x00103ea0, 0x00103ea5,
3911 0x00103ecd, 0x00103ef0, 0x00103f16, 0x00103f39,
3912 0x00103f6c, 0x00103fae, 0x00103fd8, 0x00103ff0,
3913 0x00104030, 0x00104049, 0x0010405c, 0x0010405d,
3914 0x4803c856, 0x4202d800, 0x00000007, 0x0201f800,
3915 0x0010513b, 0x04000007, 0x42006000, 0xffffffd7,
3916 0x41786800, 0x0201f800, 0x0010427d, 0x0401f00b,
3917 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
3918 0x42001000, 0x000000f0, 0x0201f800, 0x0010193d,
3919 0x0201f800, 0x00105098, 0x1c01f000, 0x4803c856,
3920 0x42006000, 0xbf7fffff, 0x42006800, 0x00400000,
3921 0x0201f800, 0x0010427d, 0x4a035014, 0x00000001,
3922 0x42001000, 0x001041f3, 0x0201f800, 0x00105fa4,
3923 0x0201f800, 0x001041f8, 0x42000800, 0x000007d0,
3924 0x42001000, 0x00104148, 0x0201f000, 0x0010606e,
3925 0x59a80016, 0x82000580, 0x00000014, 0x04020025,
3926 0x4803c857, 0x42006000, 0xffbfffff, 0x41786800,
3927 0x0201f800, 0x0010427d, 0x59c40004, 0x82000500,
3928 0x00000003, 0x0402001b, 0x59cc1006, 0x82081580,
3929 0x11020000, 0x04020016, 0x59cc1007, 0x8c08153e,
3930 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
3931 0x42000000, 0x0010b83f, 0x0201f800, 0x0010aa47,
3932 0x59a80015, 0x84000544, 0x48035015, 0x42001000,
3933 0x00104148, 0x0201f800, 0x00105f90, 0x4a035014,
3934 0x00000010, 0x0401f9d4, 0x0401f002, 0x497b5016,
3935 0x1c01f000, 0x4803c856, 0x4a035014, 0x00000003,
3936 0x42006000, 0xbf3fffff, 0x42006800, 0x00100000,
3937 0x0201f800, 0x0010427d, 0x42001000, 0x001041f3,
3938 0x0201f800, 0x00105fa4, 0x0201f800, 0x001041f8,
3939 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
3940 0x42007800, 0x0010b552, 0x46007800, 0x11020000,
3941 0x42000800, 0x00000005, 0x0201f000, 0x0010416e,
3942 0x59a80016, 0x80000540, 0x04000021, 0x4803c857,
3943 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
3944 0x59a80016, 0x82000580, 0x00000014, 0x04020016,
3945 0x59cc1006, 0x82081580, 0x11020000, 0x04020012,
3946 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
3947 0x8c000504, 0x04020008, 0x42000000, 0x0010b83f,
3948 0x0201f800, 0x0010aa47, 0x59a80015, 0x84000544,
3949 0x48035015, 0x4a035014, 0x00000004, 0x0401f805,
3950 0x0401f003, 0x0201f800, 0x00104139, 0x1c01f000,
3951 0x4803c856, 0x4a035014, 0x00000005, 0x83cca400,
3952 0x00000006, 0x4200a800, 0x0010b552, 0x4200b000,
3953 0x00000005, 0x0201f800, 0x0010ab17, 0x42007800,
3954 0x0010b552, 0x46007800, 0x11030000, 0x0201f800,
3955 0x0010413e, 0x04020014, 0x59a80015, 0x8c000500,
3956 0x04020011, 0x59a80810, 0x82040580, 0x00ffffff,
3957 0x0400000d, 0x82040d00, 0x000000ff, 0x82040400,
3958 0x0010210e, 0x50000800, 0x80040910, 0x42001000,
3959 0x00000004, 0x0401fb9b, 0x0400000b, 0x0201f800,
3960 0x0010420d, 0x4200b000, 0x00000004, 0x83cca400,
3961 0x00000007, 0x4200a800, 0x0010b553, 0x0201f800,
3962 0x0010ab17, 0x42000800, 0x00000005, 0x0201f000,
3963 0x0010416e, 0x59a80016, 0x80000540, 0x04000020,
3964 0x4803c857, 0x42001000, 0x00104148, 0x0201f800,
3965 0x00105f90, 0x59a80016, 0x82000580, 0x00000014,
3966 0x04020016, 0x59cc1006, 0x82081580, 0x11030000,
3967 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
3968 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
3969 0x0010b83f, 0x0201f800, 0x0010aa47, 0x59a80015,
3970 0x84000544, 0x48035015, 0x4a035014, 0x00000006,
3971 0x0401f804, 0x0401f002, 0x0401fbd3, 0x1c01f000,
3972 0x4803c856, 0x4a035014, 0x00000007, 0x83cca400,
3973 0x00000006, 0x4200a800, 0x0010b552, 0x4200b000,
3974 0x00000005, 0x0201f800, 0x0010ab17, 0x42007800,
3975 0x0010b552, 0x46007800, 0x11040000, 0x0401fbc7,
3976 0x04020020, 0x59a80015, 0x8c000500, 0x0402001d,
3977 0x599c0017, 0x8c000500, 0x0400001a, 0x599c1402,
3978 0x82080480, 0x0000007f, 0x02021800, 0x001005d8,
3979 0x4c080000, 0x82081400, 0x0010210e, 0x50081000,
3980 0x82081500, 0x000000ff, 0x480b5010, 0x42000800,
3981 0x00000003, 0x0201f800, 0x00106c78, 0x5c000800,
3982 0x42001000, 0x00000004, 0x0401fb3e, 0x04000005,
3983 0x0401fd2b, 0x04000003, 0x0201f800, 0x001015fe,
3984 0x42000800, 0x00000005, 0x0401f3d4, 0x59a80016,
3985 0x80000540, 0x04000020, 0x4803c857, 0x42001000,
3986 0x00104148, 0x0201f800, 0x00105f90, 0x59a80016,
3987 0x82000580, 0x00000014, 0x04020016, 0x59cc1006,
3988 0x82081580, 0x11040000, 0x04020012, 0x59cc1007,
3989 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
3990 0x04020008, 0x42000000, 0x0010b83f, 0x0201f800,
3991 0x0010aa47, 0x59a80015, 0x84000544, 0x48035015,
3992 0x4a035014, 0x00000008, 0x0401f804, 0x0401f002,
3993 0x0401fb7d, 0x1c01f000, 0x4803c856, 0x4a035014,
3994 0x00000009, 0x83cca400, 0x00000006, 0x4200a800,
3995 0x0010b552, 0x4200b000, 0x00000005, 0x0201f800,
3996 0x0010ab17, 0x42007800, 0x0010b552, 0x46007800,
3997 0x11050100, 0x0401fb71, 0x0402000a, 0x59a80015,
3998 0x8c000500, 0x04020007, 0x0401fa8c, 0x04020005,
3999 0x82000540, 0x00000001, 0x0201f800, 0x001015fe,
4000 0x42000800, 0x00000005, 0x0401fb94, 0x0401fb63,
4001 0x04020ea4, 0x4d3c0000, 0x42027800, 0x00000001,
4002 0x0201f800, 0x00109874, 0x5c027800, 0x1c01f000,
4003 0x59a80016, 0x80000540, 0x0400003a, 0x4803c857,
4004 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
4005 0x59a80016, 0x82000580, 0x00000014, 0x04020030,
4006 0x59cc1006, 0x82080500, 0x11050000, 0x82000580,
4007 0x11050000, 0x0402002a, 0x8c081510, 0x04000014,
4008 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
4009 0x8c000504, 0x04020008, 0x42000000, 0x0010b83f,
4010 0x0201f800, 0x0010aa47, 0x59a80015, 0x84000544,
4011 0x48035015, 0x4a035013, 0x00000001, 0x4a035014,
4012 0x0000000a, 0x0401f818, 0x0401f016, 0x80000540,
4013 0x04020013, 0x59cc1007, 0x8c08153e, 0x0400000b,
4014 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
4015 0x0010b83f, 0x0201f800, 0x0010aa47, 0x59a80015,
4016 0x84000544, 0x48035015, 0x497b5013, 0x4a035014,
4017 0x0000000e, 0x0401f86d, 0x0401f002, 0x0401fb1a,
4018 0x1c01f000, 0x4803c856, 0x4a035014, 0x0000000b,
4019 0x42001000, 0x0010b553, 0x4008a800, 0x4200b000,
4020 0x00000020, 0x4600a800, 0xffffffff, 0x8054a800,
4021 0x8058b040, 0x040207fc, 0x42007800, 0x0010b552,
4022 0x46007800, 0x11060000, 0x42001000, 0x0010b553,
4023 0x0401fb0a, 0x04000005, 0x50080000, 0x46001000,
4024 0x00ffffff, 0x0401f00c, 0x50080800, 0x82040d00,
4025 0x0000ffff, 0x59a80010, 0x82000500, 0x000000ff,
4026 0x82000540, 0x00000100, 0x800000e0, 0x80040d40,
4027 0x44041000, 0x42000800, 0x00000021, 0x0401f327,
4028 0x59a80016, 0x80000540, 0x04000014, 0x4803c857,
4029 0x59a80016, 0x42001000, 0x00104148, 0x0201f800,
4030 0x00105f90, 0x59a80016, 0x82000580, 0x00000084,
4031 0x04020009, 0x59cc1006, 0x82081580, 0x11060000,
4032 0x04020005, 0x4a035014, 0x0000000c, 0x0401f804,
4033 0x0401f002, 0x0401fadc, 0x1c01f000, 0x4803c856,
4034 0x4a035014, 0x0000000d, 0x83cca400, 0x00000006,
4035 0x4200a800, 0x0010b552, 0x4200b000, 0x00000021,
4036 0x0201f800, 0x0010ab17, 0x42007800, 0x0010b552,
4037 0x46007800, 0x11070000, 0x42000800, 0x00000021,
4038 0x0401f2fe, 0x59a80016, 0x80000540, 0x04000016,
4039 0x4803c857, 0x59a80016, 0x42001000, 0x00104148,
4040 0x0201f800, 0x00105f90, 0x82000580, 0x00000084,
4041 0x0402000c, 0x59cc1006, 0x82081580, 0x11070000,
4042 0x04020008, 0x4a035013, 0x00000001, 0x0401fa91,
4043 0x4a035014, 0x0000000e, 0x0401f804, 0x0401f002,
4044 0x0401fab1, 0x1c01f000, 0x4803c856, 0x82040d40,
4045 0x00000001, 0x0401fbfc, 0x4a035014, 0x0000000f,
4046 0x497b5016, 0x42006000, 0xffffffff, 0x42006800,
4047 0x00300000, 0x0401fbe8, 0x42006000, 0xffdfffff,
4048 0x41786800, 0x0401fbe4, 0x42000800, 0x000007d0,
4049 0x42001000, 0x00104148, 0x0201f000, 0x00105f69,
4050 0x4803c856, 0x59a80016, 0x80000540, 0x04020296,
4051 0x1c01f000, 0x4803c856, 0x4a035014, 0x00000011,
4052 0x83cca400, 0x00000006, 0x4200a800, 0x0010b552,
4053 0x4200b000, 0x00000005, 0x0201f800, 0x0010ab17,
4054 0x4200a800, 0x0010b552, 0x4600a800, 0x11020000,
4055 0x0401fa8a, 0x04020015, 0x59a80010, 0x82000d00,
4056 0xffff0000, 0x04000011, 0x82000500, 0x000000ff,
4057 0x0400000e, 0x82000c00, 0x0010210e, 0x50040800,
4058 0x80040910, 0x82040580, 0x0000007e, 0x04000007,
4059 0x82040580, 0x00000080, 0x04000004, 0x42001000,
4060 0x00000004, 0x0401fa07, 0x42000800, 0x00000005,
4061 0x0401f2a2, 0x59a80016, 0x80000540, 0x04000020,
4062 0x4803c857, 0x42001000, 0x00104148, 0x0201f800,
4063 0x00105f90, 0x59a80016, 0x82000580, 0x00000014,
4064 0x04020016, 0x59cc1006, 0x82081580, 0x11030000,
4065 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
4066 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
4067 0x0010b83f, 0x0201f800, 0x0010aa47, 0x59a80015,
4068 0x84000544, 0x48035015, 0x4a035014, 0x00000012,
4069 0x0401f804, 0x0401f002, 0x0401fa4b, 0x1c01f000,
4070 0x4803c856, 0x4a035014, 0x00000013, 0x83cca400,
4071 0x00000006, 0x4200a800, 0x0010b552, 0x4200b000,
4072 0x00000005, 0x0201f800, 0x0010ab17, 0x4200a800,
4073 0x0010b552, 0x4600a800, 0x11030000, 0x0401fa3f,
4074 0x04020013, 0x59a80015, 0x8c000500, 0x04020010,
4075 0x59a80810, 0x82040580, 0x00ffffff, 0x0400000c,
4076 0x82040d00, 0x000000ff, 0x82040400, 0x0010210e,
4077 0x50000800, 0x80040910, 0x42001000, 0x00000004,
4078 0x0401f9c0, 0x04000002, 0x0401fafb, 0x42000800,
4079 0x00000005, 0x0401f259, 0x59a80016, 0x80000540,
4080 0x04000020, 0x4803c857, 0x42001000, 0x00104148,
4081 0x0201f800, 0x00105f90, 0x59a80016, 0x82000580,
4082 0x00000014, 0x04020016, 0x59cc1006, 0x82081580,
4083 0x11040000, 0x04020012, 0x59cc1007, 0x8c08153e,
4084 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
4085 0x42000000, 0x0010b83f, 0x0201f800, 0x0010aa47,
4086 0x59a80015, 0x84000544, 0x48035015, 0x4a035014,
4087 0x00000014, 0x0401f804, 0x0401f002, 0x0401fa02,
4088 0x1c01f000, 0x4803c856, 0x4a035014, 0x00000015,
4089 0x83cca400, 0x00000006, 0x4200a800, 0x0010b552,
4090 0x4200b000, 0x00000005, 0x0201f800, 0x0010ab17,
4091 0x4200a800, 0x0010b552, 0x4600a800, 0x11040000,
4092 0x0401f9f6, 0x04020020, 0x59a80015, 0x8c000500,
4093 0x0402001d, 0x599c0017, 0x8c000500, 0x0400001a,
4094 0x599c1402, 0x82080480, 0x0000007f, 0x02021800,
4095 0x001005d8, 0x4c080000, 0x82081400, 0x0010210e,
4096 0x50081000, 0x82081500, 0x000000ff, 0x480b5010,
4097 0x42000800, 0x00000003, 0x0201f800, 0x00106c78,
4098 0x5c000800, 0x42001000, 0x00000004, 0x0401f96d,
4099 0x04000005, 0x0201f800, 0x00103abf, 0x02020800,
4100 0x001015fe, 0x42000800, 0x00000005, 0x0401f203,
4101 0x59a80016, 0x80000540, 0x0400003f, 0x4803c857,
4102 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
4103 0x59a80016, 0x82000580, 0x00000014, 0x04020035,
4104 0x59cc1006, 0x82080500, 0x11050000, 0x82000580,
4105 0x11050000, 0x0402002f, 0x8c081510, 0x04000010,
4106 0x0401fb09, 0x59cc1007, 0x8c08153e, 0x0400000b,
4107 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
4108 0x0010b83f, 0x0201f800, 0x0010aa47, 0x59a80015,
4109 0x84000544, 0x48035015, 0x0401f013, 0x59cc1007,
4110 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
4111 0x04020008, 0x42000000, 0x0010b83f, 0x0201f800,
4112 0x0010aa47, 0x59a80015, 0x84000544, 0x48035015,
4113 0x82000540, 0x00000001, 0x0401faeb, 0x497b5013,
4114 0x0401f003, 0x4a035013, 0x00000001, 0x59cc1007,
4115 0x8c08153c, 0x04000003, 0x4a035026, 0x00000008,
4116 0x4a035014, 0x00000016, 0x0401f804, 0x0401f002,
4117 0x0401f98d, 0x1c01f000, 0x4803c856, 0x83cca400,
4118 0x00000006, 0x4200a800, 0x0010b552, 0x4200b000,
4119 0x00000005, 0x0201f800, 0x0010ab17, 0x4a035014,
4120 0x00000017, 0x59a80013, 0x8c000500, 0x04000006,
4121 0x42001000, 0x0010b552, 0x46001000, 0x11050100,
4122 0x0401f003, 0x4a035014, 0x0000001b, 0x0401f97b,
4123 0x0402000a, 0x59a80015, 0x8c000500, 0x04020007,
4124 0x0401f896, 0x04020005, 0x82000540, 0x00000001,
4125 0x0201f800, 0x001015fe, 0x42000800, 0x00000005,
4126 0x0401f99e, 0x4d3c0000, 0x42027800, 0x00000001,
4127 0x0201f800, 0x00109874, 0x5c027800, 0x1c01f000,
4128 0x59a80016, 0x80000540, 0x04000015, 0x4803c857,
4129 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
4130 0x59a80016, 0x82000580, 0x00000084, 0x0402000b,
4131 0x59cc1006, 0x82081580, 0x11060000, 0x04020007,
4132 0x80000580, 0x0401faa0, 0x4a035014, 0x00000018,
4133 0x0401f804, 0x0401f002, 0x0401f94b, 0x1c01f000,
4134 0x4803c856, 0x4a035014, 0x00000019, 0x83cca400,
4135 0x00000006, 0x4200a800, 0x0010b552, 0x4200b000,
4136 0x00000021, 0x0201f800, 0x0010ab17, 0x42003800,
4137 0x0010b553, 0x0401f941, 0x04020018, 0x401c2800,
4138 0x50141000, 0x80080130, 0x80000000, 0x40001800,
4139 0x82081500, 0x00ffffff, 0x800000f0, 0x80080540,
4140 0x44002800, 0x59a80810, 0x82040d00, 0x000000ff,
4141 0x400c1000, 0x80081104, 0x82082400, 0x0010b553,
4142 0x50101000, 0x820c0500, 0x00000003, 0x0c01f806,
4143 0x80081540, 0x44082000, 0x42000800, 0x00000021,
4144 0x0401f156, 0x0010401d, 0x00104022, 0x00104027,
4145 0x0010402c, 0x800408f0, 0x40040000, 0x82081500,
4146 0x00ffffff, 0x1c01f000, 0x800408e0, 0x40040000,
4147 0x82081500, 0xff00ffff, 0x1c01f000, 0x800408d0,
4148 0x40040000, 0x82081500, 0xffff00ff, 0x1c01f000,
4149 0x40040000, 0x82081500, 0xffffff00, 0x1c01f000,
4150 0x59a80016, 0x80000540, 0x04000016, 0x4803c857,
4151 0x42001000, 0x00104148, 0x0201f800, 0x00105f90,
4152 0x59a80016, 0x82000580, 0x00000084, 0x0402000c,
4153 0x59cc1006, 0x82081580, 0x11070000, 0x04020008,
4154 0x4a035013, 0x00000001, 0x0401f8d2, 0x4a035014,
4155 0x0000001a, 0x0401f804, 0x0401f002, 0x0401f8f2,
4156 0x1c01f000, 0x82000540, 0x00000001, 0x0401fa3e,
4157 0x4a035014, 0x0000001b, 0x83cca400, 0x00000006,
4158 0x4200a800, 0x0010b552, 0x59a82016, 0x40100000,
4159 0x8000b104, 0x40580800, 0x5450a800, 0x8050a000,
4160 0x8054a800, 0x8058b040, 0x040207fc, 0x0401f113,
4161 0x1c01f000, 0x1c01f000, 0x4803c856, 0x42003000,
4162 0x00000004, 0x42004000, 0x0010b553, 0x599c2817,
4163 0x8c142d14, 0x0402001f, 0x42001000, 0x00000003,
4164 0x40200000, 0x80080400, 0x50000800, 0x82042580,
4165 0xffffffff, 0x04020005, 0x80081040, 0x80183040,
4166 0x040207f8, 0x0401f05e, 0x800811c0, 0x04020006,
4167 0x82042580, 0x3fffffff, 0x04000058, 0x82040d40,
4168 0xc0000000, 0x4200b000, 0x00000020, 0x42001800,
4169 0x00000001, 0x40042000, 0x80102102, 0x04021021,
4170 0x800c18c2, 0x8058b040, 0x040207fc, 0x0401f04b,
4171 0x41781000, 0x40200000, 0x80080400, 0x50000800,
4172 0x82042580, 0xffffffff, 0x04020005, 0x80081000,
4173 0x80183040, 0x040207f8, 0x0401f040, 0x800811c0,
4174 0x04020003, 0x82040d40, 0xc0000000, 0x4200b000,
4175 0x00000001, 0x42001800, 0x80000000, 0x40042000,
4176 0x801020c2, 0x04021007, 0x800c1902, 0x8058b000,
4177 0x82580480, 0x00000021, 0x040017fa, 0x0401f02f,
4178 0x40200000, 0x80082400, 0x50100000, 0x800c0540,
4179 0x44002000, 0x59a80015, 0x84000540, 0x48035015,
4180 0x40580000, 0x42002800, 0x00000020, 0x80142c80,
4181 0x40080000, 0x42003800, 0x00000003, 0x801c0480,
4182 0x800000ca, 0x80142d40, 0x82144c00, 0x0010210e,
4183 0x50242800, 0x82142d00, 0x000000ff, 0x48175010,
4184 0x4c040000, 0x40140800, 0x0201f800, 0x001015eb,
4185 0x5c000800, 0x40001800, 0x500c0000, 0x80100540,
4186 0x44001800, 0x59a80015, 0x84000540, 0x48035015,
4187 0x4200a800, 0x0010b553, 0x4020a000, 0x4200b000,
4188 0x00000004, 0x0201f800, 0x0010ab17, 0x82000540,
4189 0x00000001, 0x0401f002, 0x80000580, 0x1c01f000,
4190 0x4807c857, 0x480bc857, 0x4008b000, 0x83cca400,
4191 0x00000007, 0x4200a800, 0x0010b553, 0x40541000,
4192 0x0201f800, 0x0010ab17, 0x40041800, 0x41782000,
4193 0x42000000, 0x00000003, 0x820c1c80, 0x00000020,
4194 0x04001004, 0x80102000, 0x80000040, 0x0401f7fb,
4195 0x40041800, 0x801021c0, 0x04000005, 0x820c1c80,
4196 0x00000020, 0x80102040, 0x040207fd, 0x42002000,
4197 0x00000001, 0x800c19c0, 0x04000004, 0x801020c2,
4198 0x800c1840, 0x040207fe, 0x80083c00, 0x83cc2c00,
4199 0x00000007, 0x80142c00, 0x50140000, 0x80102d00,
4200 0x04020012, 0x80100540, 0x44003800, 0x82042400,
4201 0x0010210e, 0x50102800, 0x82142d00, 0x000000ff,
4202 0x48175010, 0x4c040000, 0x40140800, 0x0201f800,
4203 0x001015eb, 0x5c000800, 0x59a80015, 0x84000540,
4204 0x48035015, 0x80000580, 0x1c01f000, 0x4807c856,
4205 0x42001000, 0x00008017, 0x59a8184e, 0x0201f800,
4206 0x0010aa4f, 0x0201f800, 0x00103a3e, 0x1c01f000,
4207 0x4807c856, 0x4200b000, 0x00000020, 0x83cca400,
4208 0x00000007, 0x4200a800, 0x0010be21, 0x0201f000,
4209 0x0010ab28, 0x4807c856, 0x0201f800, 0x00106ede,
4210 0x42000800, 0x000000f7, 0x0401f8de, 0x497b2804,
4211 0x497b2805, 0x497b281c, 0x497b281d, 0x4202d800,
4212 0x00000001, 0x42006000, 0xbf7fffff, 0x42006800,
4213 0x00018000, 0x0401f950, 0x42006000, 0xfffeffff,
4214 0x41786800, 0x0401f94c, 0x497b504e, 0x42000800,
4215 0x0000002d, 0x42001000, 0x001041bc, 0x0201f000,
4216 0x00105f69, 0x4807c856, 0x0401ffe3, 0x497b5014,
4217 0x497b5016, 0x1c01f000, 0x4807c856, 0x59a80005,
4218 0x8c000506, 0x1c01f000, 0x4807c856, 0x42006000,
4219 0xffffffff, 0x42006800, 0x00000028, 0x0401f136,
4220 0x4807c856, 0x0401ffc2, 0x0201f800, 0x00106c55,
4221 0x4df00000, 0x0201f800, 0x00106e21, 0x5c03e000,
4222 0x02000800, 0x00106c4b, 0x59c400a4, 0x82000500,
4223 0x0000000f, 0x82000580, 0x00000002, 0x0402000a,
4224 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
4225 0x0401f921, 0x42006000, 0xffdfffff, 0x41786800,
4226 0x0401f91d, 0x497b5014, 0x42000800, 0x000000f7,
4227 0x0401f89c, 0x59c400a3, 0x82000500, 0xbf20bfff,
4228 0x82000540, 0x0001c000, 0x480388a3, 0x84000520,
4229 0x480388a3, 0x1c01f000, 0x497b5016, 0x59b400f5,
4230 0x8c000500, 0x04020004, 0x82000540, 0x00000001,
4231 0x480368f5, 0x800400c4, 0x82000400, 0x00002000,
4232 0x4803910a, 0x59b400f6, 0x82000500, 0x00000018,
4233 0x040207fd, 0x4a0368f0, 0x0010b54b, 0x42000000,
4234 0x0010b552, 0x480368f1, 0x82040400, 0x0000dc00,
4235 0x480368f3, 0x59c400a4, 0x82000500, 0x0000000f,
4236 0x82000580, 0x00000008, 0x04020017, 0x4c5c0000,
4237 0x4c600000, 0x59c4b805, 0x8c5cbd3a, 0x04020005,
4238 0x42000000, 0x0010b818, 0x0201f800, 0x0010aa47,
4239 0x4a038805, 0x02000000, 0x0201f800, 0x001019fe,
4240 0x4000c000, 0x0201f800, 0x00101963, 0x4202d800,
4241 0x00000001, 0x497b5014, 0x5c00c000, 0x5c00b800,
4242 0x1c01f000, 0x59c8010b, 0x8c000502, 0x040007e2,
4243 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040d80,
4244 0x0000000b, 0x04020005, 0x59a80814, 0x82040d40,
4245 0x00002000, 0x0401f004, 0x59a80812, 0x82040d40,
4246 0x00001000, 0x4807504e, 0x59a8084a, 0x800409c0,
4247 0x04020007, 0x42000800, 0x000007d0, 0x42001000,
4248 0x00104148, 0x0201f800, 0x0010606e, 0x1c01f000,
4249 0x4807c856, 0x0401ff4e, 0x0201f800, 0x00106c55,
4250 0x4df00000, 0x0201f800, 0x00106e21, 0x5c03e000,
4251 0x02000800, 0x00106c4b, 0x59c400a4, 0x82000500,
4252 0x0000000f, 0x82000580, 0x00000002, 0x0402000a,
4253 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
4254 0x0401f8ad, 0x42006000, 0xffdfffff, 0x41786800,
4255 0x0401f8a9, 0x0201f800, 0x00105141, 0x04000014,
4256 0x0201f800, 0x00105151, 0x04020011, 0x4a035032,
4257 0x0000aaaa, 0x4c040000, 0x0201f800, 0x0010162a,
4258 0x59a8002a, 0x82000500, 0xffff0000, 0x80040540,
4259 0x4803502a, 0x5c000800, 0x4a035033, 0x00000000,
4260 0x0201f800, 0x001050a2, 0x0401f008, 0x4a03504c,
4261 0x00000005, 0x42000000, 0x00000001, 0x0201f800,
4262 0x00101590, 0x0401ff2c, 0x1c01f000, 0x0401f805,
4263 0x42006000, 0xbf7f7fff, 0x41786800, 0x0401f086,
4264 0x0201f800, 0x00105151, 0x04020005, 0x59c40006,
4265 0x82000540, 0x000000f0, 0x48038806, 0x1c01f000,
4266 0x800408d0, 0x59a80015, 0x8c000506, 0x04000006,
4267 0x59a80010, 0x82000500, 0x000000ff, 0x80040540,
4268 0x0401f003, 0x82040540, 0x000000f7, 0x480388a7,
4269 0x1c01f000, 0x4807c856, 0x42000000, 0x0010b83b,
4270 0x0201f800, 0x0010aa47, 0x42003000, 0x00000005,
4271 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000d,
4272 0x42027800, 0x00000002, 0x0401f038, 0x4807c856,
4273 0x42000000, 0x0010b86b, 0x0201f800, 0x0010aa47,
4274 0x42003000, 0x00000000, 0x4d3c0000, 0x4c180000,
4275 0x42003000, 0x0000000f, 0x42027800, 0x00000002,
4276 0x0401f02a, 0x4807c856, 0x42000000, 0x0010b86a,
4277 0x0201f800, 0x0010aa47, 0x42003000, 0x00000003,
4278 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000e,
4279 0x42027800, 0x00000202, 0x0401f01c, 0x4807c856,
4280 0x42000000, 0x0010b869, 0x0201f800, 0x0010aa47,
4281 0x42003000, 0x00000004, 0x4d3c0000, 0x4c180000,
4282 0x42003000, 0x00000010, 0x42027800, 0x00000202,
4283 0x0401f00e, 0x4807c856, 0x42000000, 0x0010b83e,
4284 0x0201f800, 0x0010aa47, 0x42003000, 0x00000001,
4285 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000c,
4286 0x42027800, 0x00000202, 0x42001800, 0x0000ffff,
4287 0x42002000, 0x00000007, 0x0201f800, 0x00103aae,
4288 0x5c003000, 0x4d400000, 0x0201f800, 0x0010a95d,
4289 0x42028000, 0x0000002a, 0x0201f800, 0x00101fe5,
4290 0x5c028000, 0x5c027800, 0x1c01f000, 0x4807c856,
4291 0x04011000, 0x4a03c840, 0x0010b54b, 0x4a03c842,
4292 0x00000040, 0x40000000, 0x040117ff, 0x42007800,
4293 0x0010b54b, 0x46007800, 0x00000011, 0x803c7800,
4294 0x4a007800, 0x220000ef, 0x4a007801, 0x000000ef,
4295 0x4a007802, 0x01380000, 0x4a007803, 0x00000000,
4296 0x4a007804, 0xffffffff, 0x4a007805, 0x00000000,
4297 0x1c01f000, 0x59c400a3, 0x80300500, 0x80340540,
4298 0x480388a3, 0x1c01f000, 0x4833c857, 0x59c400a3,
4299 0x80300540, 0x480388a3, 0x80300580, 0x480388a3,
4300 0x1c01f000, 0x4803c856, 0x04000004, 0x4a03504b,
4301 0x00000001, 0x0401f002, 0x497b504b, 0x1c01f000,
4302 0x4803c856, 0x59c80002, 0x80000540, 0x0400000a,
4303 0x80000040, 0x04000008, 0x4a039005, 0x00000140,
4304 0x42000000, 0x00000006, 0x80000040, 0x040207ff,
4305 0x0401f7f4, 0x1c01f000, 0x4c5c0000, 0x4c600000,
4306 0x59c4b805, 0x485fc856, 0x8c5cbd3a, 0x04020005,
4307 0x42000000, 0x0010b818, 0x0201f800, 0x0010aa47,
4308 0x4a038805, 0x02000000, 0x0201f800, 0x001019fe,
4309 0x4000c000, 0x0201f800, 0x00101963, 0x4a038805,
4310 0x04000000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
4311 0x497a6a00, 0x4937c857, 0x4a026c00, 0x00000707,
4312 0x497a6801, 0x497a6808, 0x497a6809, 0x497a6806,
4313 0x497a6807, 0x497a6c0b, 0x497a680c, 0x0201f800,
4314 0x00103b25, 0x04020006, 0x5934080f, 0x59340010,
4315 0x80040540, 0x02020800, 0x001005d8, 0x4a026a04,
4316 0x00000100, 0x497a6a03, 0x59340402, 0x82000500,
4317 0x000000ff, 0x48026c02, 0x497a6c04, 0x497a6a05,
4318 0x497a6c05, 0x497a6811, 0x4d2c0000, 0x5934000d,
4319 0x49466c03, 0x80025d40, 0x04000004, 0x0201f800,
4320 0x001007fd, 0x497a680d, 0x5c025800, 0x599c0401,
4321 0x48026a0b, 0x599c0208, 0x48026c12, 0x497a680a,
4322 0x0201f000, 0x00104c62, 0x42000000, 0x00000005,
4323 0x80000d80, 0x0401f02d, 0x0201f800, 0x00104a09,
4324 0x04020017, 0x59a80026, 0x8c00050a, 0x04020010,
4325 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857,
4326 0x0400000b, 0x59340a00, 0x8c040d1e, 0x02000000,
4327 0x000201c4, 0x42000000, 0x00000029, 0x42000800,
4328 0x00001000, 0x492fc857, 0x0401f018, 0x492fc857,
4329 0x42000000, 0x00000028, 0x0401f012, 0x59a80805,
4330 0x8c040d02, 0x04020003, 0x8c040d00, 0x04000004,
4331 0x42000000, 0x00000004, 0x0401f00a, 0x42000000,
4332 0x00000029, 0x59340a00, 0x8c040d1e, 0x04000005,
4333 0x492fc857, 0x42000800, 0x00001000, 0x0401f003,
4334 0x492fc857, 0x80000d80, 0x4803c857, 0x80028540,
4335 0x1c01f000, 0x4803c857, 0x59a80005, 0x8c000500,
4336 0x040207ec, 0x0201f800, 0x001049e7, 0x040207e4,
4337 0x59340200, 0x8c00050e, 0x040007e1, 0x0201f000,
4338 0x000201c4, 0x0201f800, 0x001047eb, 0x040007bf,
4339 0x0201f000, 0x000201c8, 0x592c0206, 0x492fc857,
4340 0x82000d80, 0x000007ff, 0x04020006, 0x4a025c0a,
4341 0x00000030, 0x42026800, 0x0010b524, 0x0401f021,
4342 0x82000c80, 0x000007f0, 0x04021046, 0x81ac0400,
4343 0x50000000, 0x80026d40, 0x04000038, 0x0201f800,
4344 0x001048e3, 0x04020038, 0x592c040a, 0x8c00050a,
4345 0x04020014, 0x592e6009, 0x83300480, 0x0010d1c0,
4346 0x0400103b, 0x41580000, 0x81300480, 0x04021038,
4347 0x59300c06, 0x82040580, 0x00000009, 0x04020037,
4348 0x4a025a06, 0x00000000, 0x497a5800, 0x59300008,
4349 0x80000540, 0x04020018, 0x492e6008, 0x0401f010,
4350 0x0201f800, 0x0002075a, 0x04000019, 0x592c0206,
4351 0x49366009, 0x492e6008, 0x4a026406, 0x00000009,
4352 0x497a6015, 0x49325809, 0x82000d80, 0x000007ff,
4353 0x04020003, 0x4a026015, 0x00008000, 0x42027000,
4354 0x00000043, 0x0201f800, 0x000207a1, 0x80000580,
4355 0x0401f020, 0x40000800, 0x58040000, 0x80000d40,
4356 0x040207fd, 0x492c0800, 0x0401f01a, 0x42000000,
4357 0x0000002c, 0x0401f016, 0x42000000, 0x00000028,
4358 0x0401f013, 0x59a80805, 0x82040500, 0x00000003,
4359 0x04000004, 0x42000000, 0x00000004, 0x0401f00c,
4360 0x42000000, 0x00000029, 0x0401f009, 0x42000000,
4361 0x00000008, 0x0401f006, 0x82040580, 0x00000007,
4362 0x040207fb, 0x42000000, 0x00000005, 0x80000540,
4363 0x1c01f000, 0x492fc857, 0x592e8c06, 0x83440d80,
4364 0x000007fc, 0x04000004, 0x83440480, 0x000007f0,
4365 0x04021014, 0x0201f800, 0x00020245, 0x04020011,
4366 0x0201f800, 0x001049f3, 0x04020011, 0x0201f800,
4367 0x0002075a, 0x0400001c, 0x49366009, 0x492e6008,
4368 0x4a026406, 0x0000000a, 0x42027000, 0x00000040,
4369 0x0201f800, 0x000207a1, 0x80000580, 0x0401f011,
4370 0x42000000, 0x00000028, 0x0401f00d, 0x0201f800,
4371 0x00104a09, 0x040007fb, 0x59a80805, 0x82040d00,
4372 0x00000003, 0x04000004, 0x42000000, 0x00000004,
4373 0x0401f003, 0x42000000, 0x00000029, 0x80000540,
4374 0x1c01f000, 0x42000000, 0x0000002c, 0x0401f7fc,
4375 0x492fc857, 0x592e8c06, 0x4947c857, 0x83440c80,
4376 0x00000800, 0x42000000, 0x0000000a, 0x04021176,
4377 0x592c4207, 0x4823c857, 0x82200500, 0x0000000f,
4378 0x0c01f001, 0x001043d5, 0x0010445d, 0x001044a9,
4379 0x001044b4, 0x001044bf, 0x001043d1, 0x001043d1,
4380 0x001043d1, 0x001044cf, 0x00104513, 0x00104530,
4381 0x001043d1, 0x001043d1, 0x001043d1, 0x001043d1,
4382 0x001043d1, 0x4803c857, 0x42000000, 0x0000000c,
4383 0x0401f15d, 0x592c1008, 0x82081500, 0x00ffffff,
4384 0x59a80010, 0x80084d80, 0x42000000, 0x00000010,
4385 0x04000155, 0x0201f800, 0x00104919, 0x04000036,
4386 0x4803c857, 0x82004d80, 0x0000001d, 0x0402001a,
4387 0x0201f800, 0x00105755, 0x59340405, 0x4c000000,
4388 0x0201f800, 0x001049e7, 0x5c000000, 0x04000004,
4389 0x8c20450a, 0x04000028, 0x80000580, 0x44002800,
4390 0x59340008, 0x48002802, 0x59340009, 0x48002801,
4391 0x59340006, 0x48002804, 0x59340007, 0x48002803,
4392 0x4200b000, 0x00000005, 0x0201f800, 0x0010955f,
4393 0x0401f166, 0x4803c857, 0x82004d80, 0x0000001a,
4394 0x04020003, 0x40101000, 0x0401f136, 0x4803c857,
4395 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
4396 0x0401f130, 0x4803c857, 0x82004d80, 0x0000001c,
4397 0x04000131, 0x82004d80, 0x00000019, 0x42000000,
4398 0x0000000a, 0x04000120, 0x42000000, 0x0000000a,
4399 0x04020137, 0x59a80005, 0x8c000514, 0x0400001b,
4400 0x0201f800, 0x001049e7, 0x04000018, 0x59340212,
4401 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
4402 0x0402000c, 0x42001000, 0x00000008, 0x59a80026,
4403 0x8c000506, 0x04020009, 0x59340002, 0x82000500,
4404 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000007,
4405 0x0201f800, 0x00104c6d, 0x42000000, 0x0000001c,
4406 0x40181000, 0x04020107, 0x0201f800, 0x0002075a,
4407 0x04000111, 0x49366009, 0x492e6008, 0x4a026406,
4408 0x00000001, 0x8c20450a, 0x04000004, 0x592c0404,
4409 0x8400055c, 0x48025c04, 0x4c200000, 0x4d3c0000,
4410 0x42027800, 0x00001000, 0x0201f800, 0x0010203c,
4411 0x5c027800, 0x5c004000, 0x8c204512, 0x0400000b,
4412 0x599c0018, 0x8c000518, 0x04000008, 0x592c0009,
4413 0x82000500, 0x00000380, 0x5934080a, 0x80040d40,
4414 0x84040d54, 0x4806680a, 0x417a7800, 0x0401f914,
4415 0x42000800, 0x00000003, 0x0401f91b, 0x42027000,
4416 0x00000002, 0x0201f800, 0x000207a1, 0x80000580,
4417 0x0401f10a, 0x0201f800, 0x00020245, 0x040200ec,
4418 0x0201f800, 0x001049ed, 0x04000008, 0x0201f800,
4419 0x001049e7, 0x040200ec, 0x417a7800, 0x417a6000,
4420 0x0201f800, 0x001020a1, 0x59a80005, 0x8c000514,
4421 0x0400001b, 0x0201f800, 0x001049e7, 0x04000018,
4422 0x59340212, 0x82000500, 0x0000ff00, 0x42001000,
4423 0x00000010, 0x0402000c, 0x42001000, 0x00000008,
4424 0x59a80026, 0x8c000506, 0x04020009, 0x59340002,
4425 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
4426 0x04000007, 0x0201f800, 0x00104c6d, 0x42000000,
4427 0x0000001c, 0x40181000, 0x040200b2, 0x0201f800,
4428 0x0002075a, 0x040000bc, 0x5934080a, 0x8c204512,
4429 0x0400000c, 0x599c0018, 0x8c000518, 0x04000009,
4430 0x592c0009, 0x82000500, 0x00000380, 0x82041500,
4431 0xfffffc7f, 0x80080d40, 0x84040d54, 0x0401f002,
4432 0x84040d14, 0x4806680a, 0x49366009, 0x492e6008,
4433 0x4a026406, 0x00000001, 0x417a7800, 0x0401f8c8,
4434 0x42000800, 0x00000005, 0x0401f8cf, 0x42027000,
4435 0x00000003, 0x0201f800, 0x000207a1, 0x80000580,
4436 0x0401f0be, 0x0201f800, 0x00020245, 0x040200a0,
4437 0x0201f800, 0x001049fc, 0x040200a3, 0x0201f800,
4438 0x00109517, 0x04000094, 0x80000580, 0x0401f0b3,
4439 0x0201f800, 0x00020245, 0x04020095, 0x0201f800,
4440 0x001049fc, 0x04020098, 0x0201f800, 0x001090e6,
4441 0x04000089, 0x80000580, 0x0401f0a8, 0x0201f800,
4442 0x00020245, 0x0402008a, 0x83444d80, 0x000007fe,
4443 0x42000000, 0x0000000a, 0x0402006b, 0x0201f800,
4444 0x001049e7, 0x04020088, 0x0201f800, 0x0010952f,
4445 0x04000079, 0x80000580, 0x0401f098, 0x82200500,
4446 0x00000070, 0x04020005, 0x8c20450e, 0x42000000,
4447 0x0000000c, 0x0402005c, 0x8c20450a, 0x0400000d,
4448 0x4d3c0000, 0x42027800, 0x00001000, 0x8c20450e,
4449 0x04020002, 0x853e7d56, 0x82200500, 0x000000a0,
4450 0x0201f800, 0x001049d3, 0x5c027800, 0x0401f07f,
4451 0x0201f800, 0x00020245, 0x04020065, 0x8c204508,
4452 0x04000010, 0x4d3c0000, 0x42027800, 0x00001000,
4453 0x8c20450e, 0x04020002, 0x853e7d56, 0x82200500,
4454 0x00000090, 0x0201f800, 0x001049bb, 0x5c027800,
4455 0x42000000, 0x0000000a, 0x0402003b, 0x0401f06b,
4456 0x836c0580, 0x00000003, 0x42000800, 0x00000007,
4457 0x0402000f, 0x0201f800, 0x001049f3, 0x04000007,
4458 0x4c000000, 0x0201f800, 0x00104a1f, 0x5c000000,
4459 0x0400004d, 0x0401f05d, 0x0201f800, 0x001094c5,
4460 0x04000007, 0x80000580, 0x0401f05c, 0x0201f800,
4461 0x00104a1f, 0x04000051, 0x0401f054, 0x0201f800,
4462 0x00104a1f, 0x04000034, 0x0401f050, 0x0201f800,
4463 0x00020245, 0x04020036, 0x836c0580, 0x00000003,
4464 0x04020040, 0x8c204508, 0x04000006, 0x417a7800,
4465 0x417a6000, 0x0201f800, 0x001020a1, 0x0401f043,
4466 0x0201f800, 0x001049ed, 0x04000008, 0x0201f800,
4467 0x001049e7, 0x0402002c, 0x417a7800, 0x417a6000,
4468 0x0201f800, 0x001020a1, 0x480bc856, 0x0201f800,
4469 0x00109332, 0x04000018, 0x80000580, 0x0401f037,
4470 0x0401f7e3, 0x480bc857, 0x42000800, 0x00000019,
4471 0x40001000, 0x4200b000, 0x00000002, 0x0401f00a,
4472 0x480bc857, 0x40000800, 0x4200b000, 0x00000002,
4473 0x0401f005, 0x480bc857, 0x40000800, 0x4200b000,
4474 0x00000001, 0x480bc857, 0x42028000, 0x00000031,
4475 0x0401f020, 0x480bc857, 0x42000800, 0x00000003,
4476 0x4200b000, 0x00000001, 0x0401f7f7, 0x480bc857,
4477 0x42000800, 0x0000000a, 0x4200b000, 0x00000001,
4478 0x0401f7f1, 0x480bc857, 0x42000800, 0x00000009,
4479 0x40001000, 0x4200b000, 0x00000002, 0x0401f7ea,
4480 0x480bc857, 0x42000800, 0x00000007, 0x4200b000,
4481 0x00000001, 0x0401f7e4, 0x480bc857, 0x4200b000,
4482 0x00000001, 0x0401f7e0, 0x80028580, 0x4178b000,
4483 0x82000540, 0x00000001, 0x1c01f000, 0x4937c857,
4484 0x59326809, 0x59341200, 0x813e79c0, 0x04000003,
4485 0x84081540, 0x0401f002, 0x84081500, 0x480a6a00,
4486 0x1c01f000, 0x59326809, 0x5c000000, 0x4c000000,
4487 0x4803c857, 0x4937c857, 0x82040580, 0x00000006,
4488 0x04020004, 0x42000000, 0x00000606, 0x0401f021,
4489 0x82040580, 0x00000004, 0x04020004, 0x42000000,
4490 0x00000404, 0x0401f01b, 0x82040580, 0x00000007,
4491 0x42000000, 0x00000707, 0x04000016, 0x82040580,
4492 0x00000003, 0x42000000, 0x00000703, 0x04000011,
4493 0x82040580, 0x00000005, 0x42000000, 0x00000405,
4494 0x0400000c, 0x82040580, 0x00000009, 0x42000000,
4495 0x00000409, 0x04000007, 0x82040580, 0x0000000b,
4496 0x42000000, 0x0000070b, 0x02020800, 0x001005d8,
4497 0x4803c857, 0x48026c00, 0x82040d80, 0x00000006,
4498 0x04020005, 0x59341404, 0x800811c0, 0x02000800,
4499 0x001005d8, 0x1c01f000, 0x5c000000, 0x4c000000,
4500 0x4803c857, 0x4947c857, 0x481bc857, 0x83440480,
4501 0x00000800, 0x04021034, 0x83441400, 0x0010ac00,
4502 0x50080000, 0x80026d40, 0x04020011, 0x4c180000,
4503 0x4d2c0000, 0x0201f800, 0x001007d3, 0x412e6800,
4504 0x5c025800, 0x5c003000, 0x04000027, 0x45341000,
4505 0x497a680d, 0x497a6810, 0x497a680f, 0x497a680e,
4506 0x4c180000, 0x0401fcf3, 0x5c003000, 0x59340a12,
4507 0x4c040000, 0x0201f800, 0x0010513b, 0x5c000800,
4508 0x04000009, 0x82180500, 0x00ffff00, 0x04000008,
4509 0x59a81010, 0x82081500, 0x00ffff00, 0x80080580,
4510 0x04000003, 0x80000580, 0x0401f004, 0x82180500,
4511 0x000000ff, 0x800000d0, 0x80040d80, 0x04000003,
4512 0x4803c857, 0x48026a12, 0x59340002, 0x80180580,
4513 0x04000003, 0x481bc857, 0x481a6802, 0x80000580,
4514 0x1c01f000, 0x4803c856, 0x82000540, 0x00000001,
4515 0x0401f7fc, 0x4947c857, 0x83440480, 0x00000800,
4516 0x04021011, 0x83441400, 0x0010ac00, 0x50080000,
4517 0x80026d40, 0x0400000b, 0x0401fbf9, 0x0402000a,
4518 0x59a80005, 0x8c000502, 0x04000004, 0x59340200,
4519 0x8c00050e, 0x04000004, 0x82000540, 0x00000001,
4520 0x1c01f000, 0x80000580, 0x0401f7fe, 0x5c000000,
4521 0x4c000000, 0x4803c857, 0x4947c857, 0x4d2c0000,
4522 0x4d300000, 0x83440480, 0x00000800, 0x04021024,
4523 0x83441400, 0x0010ac00, 0x50080000, 0x80026d40,
4524 0x0400001b, 0x45781000, 0x5934000d, 0x80025d40,
4525 0x02020800, 0x001007fd, 0x59366011, 0x813261c0,
4526 0x0400000e, 0x4c640000, 0x5930c800, 0x59325808,
4527 0x0201f800, 0x00109037, 0x02020800, 0x001007fd,
4528 0x0201f800, 0x0002077d, 0x82666540, 0x00000000,
4529 0x040207f6, 0x5c00c800, 0x0201f800, 0x00104c62,
4530 0x41365800, 0x0201f800, 0x001007f5, 0x80000580,
4531 0x5c026000, 0x5c025800, 0x1c01f000, 0x82000540,
4532 0x00000001, 0x0401f7fb, 0x4937c857, 0x4c580000,
4533 0x59cc0001, 0x82000500, 0x00ffffff, 0x48026802,
4534 0x497a6c01, 0x497a6a01, 0x59340200, 0x84000502,
4535 0x48026a00, 0x0201f800, 0x0010513b, 0x04020017,
4536 0x59340403, 0x82000580, 0x000007fe, 0x04000005,
4537 0x59a80026, 0x8c00050a, 0x04020010, 0x0401f008,
4538 0x59cc0408, 0x8c000518, 0x0400000c, 0x59cc0009,
4539 0x48035035, 0x59cc000a, 0x48035036, 0x59cc0207,
4540 0x80000540, 0x04020003, 0x42000000, 0x00000001,
4541 0x48038893, 0x4803501e, 0x59cc0a09, 0x82040d00,
4542 0x00000010, 0x59cc0408, 0x82000500, 0x00000020,
4543 0x04000002, 0x84040d40, 0x5934000a, 0x82000500,
4544 0xffffffee, 0x80040540, 0x4802680a, 0x83cca400,
4545 0x0000000b, 0x8334ac00, 0x00000006, 0x4200b000,
4546 0x00000002, 0x0201f800, 0x0010ab17, 0x83cca400,
4547 0x0000000d, 0x8334ac00, 0x00000008, 0x4200b000,
4548 0x00000002, 0x0201f800, 0x0010ab17, 0x59cc0a18,
4549 0x82040480, 0x00000800, 0x0402100c, 0x82040480,
4550 0x00000400, 0x04001004, 0x42000800, 0x00000400,
4551 0x0401f006, 0x82040480, 0x00000200, 0x04001003,
4552 0x42000800, 0x00000200, 0x48066a04, 0x59340403,
4553 0x82000580, 0x000007fe, 0x04020003, 0x59cc0a08,
4554 0x48066a04, 0x42000800, 0x00000004, 0x59cc1207,
4555 0x800811c0, 0x04000005, 0x82080480, 0x00000004,
4556 0x04021002, 0x40080800, 0x48066c04, 0x5c00b000,
4557 0x1c01f000, 0x4937c857, 0x59a80026, 0x8c000508,
4558 0x04000004, 0x84000556, 0x4803c857, 0x48035026,
4559 0x59cc0207, 0x4803c857, 0x48026a05, 0x59cc020a,
4560 0x4803c857, 0x48026c05, 0x59341200, 0x599c0818,
4561 0x5934180a, 0x4807c857, 0x480bc857, 0x480fc857,
4562 0x59cc2006, 0x82102500, 0xff000000, 0x82102580,
4563 0x02000000, 0x04000007, 0x8c00050e, 0x04000009,
4564 0x8c0c1d14, 0x04000003, 0x8c0c1d0e, 0x04000005,
4565 0x8c040d18, 0x04000003, 0x8408154a, 0x0401f002,
4566 0x8408150a, 0x8c000510, 0x04000009, 0x8c0c1d14,
4567 0x04000003, 0x8c0c1d10, 0x04000005, 0x8c040d18,
4568 0x04000003, 0x8408154e, 0x0401f002, 0x8408150e,
4569 0x8c000512, 0x04000009, 0x8c0c1d14, 0x04000003,
4570 0x8c0c1d12, 0x04000005, 0x8c040d18, 0x04000003,
4571 0x8408155c, 0x0401f002, 0x8408151c, 0x480a6a00,
4572 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
4573 0x4c580000, 0x5934000d, 0x80025d40, 0x04000029,
4574 0x592c0003, 0x82000480, 0x00000008, 0x0400100b,
4575 0x412cb800, 0x592c0001, 0x80025d40, 0x040207f9,
4576 0x0201f800, 0x001007e4, 0x04000037, 0x492fc857,
4577 0x492cb801, 0x0401f020, 0x832c0c00, 0x00000004,
4578 0x4200b000, 0x00000008, 0x50040000, 0x82000580,
4579 0xffffffff, 0x04020006, 0x80041000, 0x50080000,
4580 0x82000580, 0xffffffff, 0x04000007, 0x82040c00,
4581 0x00000002, 0x8058b040, 0x040207f4, 0x0201f800,
4582 0x001005d8, 0x45480800, 0x454c1000, 0x592c1803,
4583 0x800c1800, 0x480e5803, 0x480fc857, 0x0401f014,
4584 0x0201f800, 0x001007e4, 0x04000017, 0x492fc857,
4585 0x492e680d, 0x497a5802, 0x4a025803, 0x00000001,
4586 0x494a5804, 0x494e5805, 0x832c0c00, 0x00000006,
4587 0x4200b000, 0x0000000e, 0x46000800, 0xffffffff,
4588 0x80040800, 0x8058b040, 0x040207fc, 0x82000540,
4589 0x00000001, 0x5c00b000, 0x5c025800, 0x5c00b800,
4590 0x1c01f000, 0x80000580, 0x0401f7fb, 0x4803c856,
4591 0x4d3c0000, 0x4d2c0000, 0x5934000d, 0x80025d40,
4592 0x0400001f, 0x592c0002, 0x80000540, 0x0402001f,
4593 0x412e7800, 0x0401f8ce, 0x0402001c, 0x46000800,
4594 0xffffffff, 0x46001000, 0xffffffff, 0x4813c857,
4595 0x480fc857, 0x580c0003, 0x82000c80, 0x00000002,
4596 0x04021014, 0x480fc857, 0x400c0000, 0x812c0580,
4597 0x04020004, 0x580c0001, 0x4802680d, 0x0401f003,
4598 0x580c0001, 0x48002001, 0x400e5800, 0x0201f800,
4599 0x001007f4, 0x82000540, 0x00000001, 0x5c025800,
4600 0x5c027800, 0x1c01f000, 0x80000580, 0x0401f7fc,
4601 0x80000040, 0x48001803, 0x4803c857, 0x0401f7f6,
4602 0x0201f800, 0x00020086, 0x59300007, 0x8400054e,
4603 0x48026007, 0x592c1a04, 0x820c1d00, 0x000000ff,
4604 0x820c0580, 0x00000048, 0x04000013, 0x0201f000,
4605 0x0002028e, 0x8c000500, 0x02020800, 0x000200e5,
4606 0x4a026203, 0x00000002, 0x592c1a04, 0x820c1d00,
4607 0x000000ff, 0x820c0580, 0x00000018, 0x02000000,
4608 0x0002028e, 0x820c0580, 0x00000048, 0x02020000,
4609 0x0002028e, 0x42000800, 0x80000804, 0x0201f800,
4610 0x00106721, 0x0201f000, 0x00020297, 0x4a025a06,
4611 0x00000008, 0x0201f000, 0x000202da, 0x4a025a06,
4612 0x00000029, 0x0201f000, 0x000202da, 0x4a025a06,
4613 0x0000002a, 0x0201f000, 0x000202da, 0x4a025a06,
4614 0x00000028, 0x0201f000, 0x000202da, 0x4943c857,
4615 0x4d440000, 0x4d340000, 0x4d2c0000, 0x4c580000,
4616 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
4617 0x00020245, 0x0402000d, 0x8d3e7d14, 0x04000005,
4618 0x59340212, 0x82000500, 0x0000ff00, 0x04000007,
4619 0x8d3e7d06, 0x04000004, 0x59340200, 0x8c00050e,
4620 0x04020002, 0x0401f813, 0x81468800, 0x8058b040,
4621 0x040207ef, 0x83440480, 0x00000800, 0x04021008,
4622 0x8d3e7d02, 0x04000006, 0x42028800, 0x000007f0,
4623 0x4200b000, 0x00000010, 0x0401f7e5, 0x5c00b000,
4624 0x5c025800, 0x5c026800, 0x5c028800, 0x1c01f000,
4625 0x4d2c0000, 0x41783000, 0x5936580f, 0x812e59c0,
4626 0x04000029, 0x592c0204, 0x82000500, 0x000000ff,
4627 0x82000580, 0x00000012, 0x04000020, 0x8d3e7d00,
4628 0x04000003, 0x0401f83c, 0x0402001c, 0x592c2000,
4629 0x497a5800, 0x801831c0, 0x04020009, 0x59340010,
4630 0x812c0580, 0x04020004, 0x497a680f, 0x497a6810,
4631 0x0401f008, 0x4812680f, 0x0401f006, 0x48103000,
4632 0x59340010, 0x812c0580, 0x04020002, 0x481a6810,
4633 0x4a025a04, 0x00000103, 0x49425a06, 0x497a5c09,
4634 0x0201f800, 0x001091c6, 0x0201f800, 0x000202da,
4635 0x40125800, 0x0401f7da, 0x412c3000, 0x592e5800,
4636 0x0401f7d7, 0x5c025800, 0x1c01f000, 0x4803c856,
4637 0x41781800, 0x5934000f, 0x80025d40, 0x04000010,
4638 0x592c0005, 0x80200580, 0x592c0000, 0x04000003,
4639 0x412c1800, 0x0401f7f9, 0x497a5800, 0x800c19c0,
4640 0x04000008, 0x48001800, 0x80000540, 0x04020004,
4641 0x480e6810, 0x82000540, 0x00000001, 0x1c01f000,
4642 0x4802680f, 0x80000540, 0x040207fd, 0x497a6810,
4643 0x0401f7f9, 0x592c0008, 0x81480580, 0x04020003,
4644 0x592c0009, 0x814c0580, 0x1c01f000, 0x4803c856,
4645 0x4c580000, 0x413c1800, 0x400c2000, 0x593c0002,
4646 0x80000540, 0x04020018, 0x4200b000, 0x00000008,
4647 0x820c0c00, 0x00000004, 0x50040000, 0x81480580,
4648 0x04020005, 0x80041000, 0x50080000, 0x814c0580,
4649 0x0400000d, 0x82040c00, 0x00000002, 0x8058b040,
4650 0x040207f6, 0x400c2000, 0x580c0001, 0x80001d40,
4651 0x040207ee, 0x82000540, 0x00000001, 0x5c00b000,
4652 0x1c01f000, 0x80000580, 0x0401f7fd, 0x4937c857,
4653 0x4c580000, 0x4d2c0000, 0x5934000d, 0x80025d40,
4654 0x04020016, 0x0201f800, 0x001007e4, 0x04000010,
4655 0x492e680d, 0x4a025802, 0x00000001, 0x497a5803,
4656 0x832c0c00, 0x00000004, 0x4200b000, 0x00000010,
4657 0x46000800, 0xffffffff, 0x80040800, 0x8058b040,
4658 0x040207fc, 0x82000540, 0x00000001, 0x5c025800,
4659 0x5c00b000, 0x1c01f000, 0x4d2c0000, 0x592e5801,
4660 0x0201f800, 0x001007fd, 0x5c025800, 0x0401f7ea,
4661 0x4d2c0000, 0x5936580d, 0x812e59c0, 0x04000007,
4662 0x4937c857, 0x497a680d, 0x0201f800, 0x001007fd,
4663 0x82000540, 0x00000001, 0x5c025800, 0x1c01f000,
4664 0x59340405, 0x4937c857, 0x4803c857, 0x8c000508,
4665 0x1c01f000, 0x4803c856, 0x0201f800, 0x0010513b,
4666 0x04000011, 0x59a80815, 0x8c040d04, 0x0402000e,
4667 0x59a80826, 0x8c040d06, 0x0400000b, 0x83ac0400,
4668 0x000007fe, 0x50000000, 0x80026d40, 0x04000006,
4669 0x0401f9a7, 0x04020004, 0x59340200, 0x8400055a,
4670 0x48026a00, 0x599c0017, 0x8c000508, 0x04000015,
4671 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
4672 0x00020245, 0x0402000c, 0x0401f999, 0x0402000a,
4673 0x59a80010, 0x59340802, 0x80040580, 0x82000500,
4674 0x00ffff00, 0x04020004, 0x59340200, 0x8400055a,
4675 0x48026a00, 0x81468800, 0x8058b040, 0x040207f0,
4676 0x0401f884, 0x04000003, 0x59a80836, 0x0401f006,
4677 0x599c0017, 0x8c000508, 0x04000007, 0x42000800,
4678 0x000007d0, 0x42001000, 0x00104876, 0x0201f800,
4679 0x0010606e, 0x1c01f000, 0x4803c856, 0x4d340000,
4680 0x4d440000, 0x4d3c0000, 0x4c580000, 0x42001000,
4681 0x00104876, 0x0201f800, 0x00105f90, 0x59a80826,
4682 0x8c040d06, 0x04000015, 0x0401f86a, 0x04000013,
4683 0x83ae6c00, 0x000007fe, 0x51366800, 0x59340200,
4684 0x8400051a, 0x48026a00, 0x599c0017, 0x8c000508,
4685 0x04000007, 0x42000800, 0x000007d0, 0x42001000,
4686 0x00104876, 0x0201f800, 0x0010606e, 0x0201f800,
4687 0x00101e45, 0x0401f027, 0x4200b000, 0x000007f0,
4688 0x80028d80, 0x0201f800, 0x00020245, 0x0402001e,
4689 0x59340200, 0x8c00051a, 0x0400001b, 0x59368c03,
4690 0x417a7800, 0x42028000, 0x00000029, 0x41783000,
4691 0x0201f800, 0x0010a446, 0x59340200, 0x84000558,
4692 0x8400051a, 0x48026a00, 0x4937c857, 0x4a026c00,
4693 0x00000707, 0x42028000, 0x00000029, 0x0201f800,
4694 0x00106ab4, 0x417a7800, 0x0201f800, 0x001067fd,
4695 0x80000d80, 0x0201f800, 0x0010a2ff, 0x0201f800,
4696 0x00106c4b, 0x81468800, 0x8058b040, 0x040207de,
4697 0x5c00b000, 0x5c027800, 0x5c028800, 0x5c026800,
4698 0x1c01f000, 0x4933c857, 0x59303809, 0x581c0200,
4699 0x8400051a, 0x48003a00, 0x1c01f000, 0x4803c856,
4700 0x42026800, 0x0010b524, 0x497a680e, 0x42028800,
4701 0x000007ff, 0x0201f800, 0x001042b4, 0x4937c857,
4702 0x4a026c00, 0x00000606, 0x4a026802, 0x00ffffff,
4703 0x4a026a04, 0x00000200, 0x4a026c04, 0x00000002,
4704 0x1c01f000, 0x59300009, 0x50000000, 0x4933c857,
4705 0x4803c857, 0x8c00050e, 0x1c01f000, 0x59300009,
4706 0x50000000, 0x8c00050a, 0x1c01f000, 0x4933c856,
4707 0x0401f90f, 0x04000006, 0x59340400, 0x82000d00,
4708 0x000000ff, 0x82041580, 0x00000005, 0x1c01f000,
4709 0x4d340000, 0x83ac0400, 0x000007fe, 0x50000000,
4710 0x80026d40, 0x04000003, 0x59340200, 0x8c00051a,
4711 0x5c026800, 0x1c01f000, 0x4937c857, 0x493fc857,
4712 0x59340403, 0x81ac0400, 0x50000000, 0x81340580,
4713 0x02020800, 0x001005d8, 0x59341200, 0x813e79c0,
4714 0x04000003, 0x8408155e, 0x0401f002, 0x8408151e,
4715 0x480a6a00, 0x1c01f000, 0x4937c857, 0x0201f800,
4716 0x0010210a, 0x04000006, 0x59a80835, 0x42001000,
4717 0x00104910, 0x0201f800, 0x0010606e, 0x1c01f000,
4718 0x4937c857, 0x42001000, 0x00104910, 0x0201f800,
4719 0x00105f90, 0x59a81026, 0x84081512, 0x480b5026,
4720 0x1c01f000, 0x4c380000, 0x4c340000, 0x4c240000,
4721 0x4c600000, 0x4008c000, 0x83440480, 0x00000800,
4722 0x04021045, 0x80002d80, 0x41442000, 0x83447400,
4723 0x0010ac00, 0x4200b000, 0x000007f0, 0x83444c80,
4724 0x000007f0, 0x04001003, 0x4200b000, 0x00000010,
4725 0x50380000, 0x80000540, 0x0402001e, 0x41440000,
4726 0x80100580, 0x04020043, 0x40102800, 0x82104c80,
4727 0x000007f0, 0x04001015, 0x82104d80, 0x000007fc,
4728 0x04020005, 0x82604d80, 0x00fffffc, 0x0402002a,
4729 0x0401f00e, 0x82104d80, 0x000007fd, 0x04020005,
4730 0x82604d80, 0x00fffffd, 0x04020023, 0x0401f007,
4731 0x82104d80, 0x000007ff, 0x0402001f, 0x82604d80,
4732 0x00ffffff, 0x0402001c, 0x84142d5e, 0x0401f029,
4733 0x40006800, 0x58343002, 0x82183500, 0x00ffffff,
4734 0x40180000, 0x80600580, 0x04020019, 0x40100000,
4735 0x81440580, 0x0402000a, 0x40366800, 0x8c204508,
4736 0x04000053, 0x0401ff8a, 0x04020051, 0x4947c857,
4737 0x42000000, 0x0000001d, 0x0401f04e, 0x4947c857,
4738 0x480bc857, 0x4823c857, 0x42000000, 0x0000001a,
4739 0x0401f048, 0x4947c857, 0x4863c857, 0x4813c857,
4740 0x42000000, 0x00000019, 0x0401f042, 0x40100000,
4741 0x81440580, 0x04020007, 0x58343002, 0x4947c857,
4742 0x481bc857, 0x42000000, 0x0000001b, 0x0401f039,
4743 0x80102000, 0x80387000, 0x83444c80, 0x000007f0,
4744 0x04001009, 0x82104d80, 0x00000800, 0x0402000c,
4745 0x42002000, 0x000007f0, 0x42007000, 0x0010b3f0,
4746 0x0401f007, 0x82104d80, 0x000007f0, 0x04020004,
4747 0x41782000, 0x42007000, 0x0010ac00, 0x8058b040,
4748 0x040207a4, 0x801429c0, 0x04020007, 0x0201f800,
4749 0x001005d8, 0x4947c857, 0x42000000, 0x0000000a,
4750 0x0401f01c, 0x4d2c0000, 0x4c180000, 0x40603000,
4751 0x0401fc12, 0x4947c857, 0x4937c857, 0x5c003000,
4752 0x5c025800, 0x040207f4, 0x497a6a12, 0x59a80026,
4753 0x8c00050a, 0x0402000d, 0x82600500, 0x00ffff00,
4754 0x04000006, 0x59a84810, 0x82244d00, 0x00ffff00,
4755 0x80240580, 0x04020005, 0x82600500, 0x000000ff,
4756 0x800000d0, 0x48026a12, 0x48626802, 0x80000580,
4757 0x80000540, 0x5c00c000, 0x5c004800, 0x5c006800,
4758 0x5c007000, 0x1c01f000, 0x5934000f, 0x5934140b,
4759 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
4760 0x02020800, 0x00020253, 0x1c01f000, 0x4803c857,
4761 0x4947c857, 0x4c300000, 0x82006500, 0x00000030,
4762 0x04000006, 0x4c000000, 0x0201f800, 0x0010942a,
4763 0x5c000000, 0x0402000b, 0x8c00050e, 0x04000006,
4764 0x0201f800, 0x00020245, 0x04020006, 0x4937c857,
4765 0x0401fc2f, 0x80000580, 0x5c006000, 0x1c01f000,
4766 0x82000540, 0x00000001, 0x0401f7fc, 0x4803c857,
4767 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80,
4768 0x4200b000, 0x000007f0, 0x4c040000, 0x40068800,
4769 0x4c080000, 0x40080000, 0x0401ffdd, 0x5c001000,
4770 0x5c000800, 0x80040800, 0x8058b040, 0x040207f7,
4771 0x5c028800, 0x5c00b000, 0x1c01f000, 0x4c5c0000,
4772 0x59340400, 0x8200bd80, 0x00000606, 0x5c00b800,
4773 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
4774 0x00000404, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
4775 0x59340400, 0x8200bd80, 0x00000404, 0x04000003,
4776 0x8200bd80, 0x00000606, 0x5c00b800, 0x1c01f000,
4777 0x4c5c0000, 0x4c600000, 0x59340400, 0x8200bd00,
4778 0x0000ff00, 0x825cc580, 0x00000400, 0x04000003,
4779 0x825cc580, 0x00000600, 0x5c00c000, 0x5c00b800,
4780 0x1c01f000, 0x4c5c0000, 0x59340400, 0x82000500,
4781 0x000000ff, 0x8200bd80, 0x00000003, 0x04000003,
4782 0x8200bd80, 0x00000005, 0x5c00b800, 0x1c01f000,
4783 0x4c5c0000, 0x59340400, 0x82000500, 0x0000ff00,
4784 0x8400b9c0, 0x805c0580, 0x4937c857, 0x4803c857,
4785 0x48026c00, 0x5c00b800, 0x1c01f000, 0x4c040000,
4786 0x4c080000, 0x592c0207, 0x8c00050c, 0x0400000f,
4787 0x592e8c06, 0x82000500, 0x00000080, 0x84000548,
4788 0x4d3c0000, 0x42027800, 0x00001000, 0x0401ff90,
4789 0x5c027800, 0x82000540, 0x00000001, 0x5c001000,
4790 0x5c000800, 0x1c01f000, 0x80000580, 0x0401f7fc,
4791 0x592c040b, 0x82000500, 0x0000e000, 0x82000580,
4792 0x00006000, 0x04000019, 0x836c0580, 0x00000003,
4793 0x04000016, 0x836c0580, 0x00000002, 0x040200ff,
4794 0x59a80026, 0x82000d00, 0x00000038, 0x04020005,
4795 0x59a80832, 0x800409c0, 0x0400000c, 0x0401f0f7,
4796 0x82000d00, 0x00000003, 0x82040d80, 0x00000003,
4797 0x040200f2, 0x82000d00, 0x00000028, 0x04020003,
4798 0x8c00050c, 0x040000ed, 0x592c100a, 0x82080500,
4799 0xff000000, 0x040200ce, 0x59a80010, 0x80080580,
4800 0x040000c8, 0x592c0c0b, 0x82040d00, 0x0000e000,
4801 0x82040480, 0x00008000, 0x040210c8, 0x592e8c06,
4802 0x83440480, 0x00000800, 0x04001007, 0x83440580,
4803 0x0000ffff, 0x040200af, 0x800409c0, 0x040200f7,
4804 0x0401f0ac, 0x800409c0, 0x040200f4, 0x41784000,
4805 0x0401fead, 0x040200db, 0x42027000, 0x00000053,
4806 0x592c2409, 0x82100500, 0xffffff00, 0x040200aa,
4807 0x4813c857, 0x592c000c, 0x800001c0, 0x04000083,
4808 0x82100580, 0x00000004, 0x040000a0, 0x82100580,
4809 0x00000051, 0x0400009d, 0x82100580, 0x00000003,
4810 0x04000016, 0x82100580, 0x00000020, 0x0400004b,
4811 0x82100580, 0x00000024, 0x04000042, 0x82100580,
4812 0x00000021, 0x04000042, 0x82100580, 0x00000050,
4813 0x04000037, 0x82100580, 0x00000052, 0x04000031,
4814 0x82100580, 0x00000005, 0x0402006b, 0x42027000,
4815 0x00000001, 0x0401f01b, 0x42027000, 0x00000002,
4816 0x59a80005, 0x8c000514, 0x04000016, 0x0401ff4c,
4817 0x04000014, 0x59340212, 0x82000500, 0x0000ff00,
4818 0x42001000, 0x00000010, 0x0402000c, 0x59a80026,
4819 0x8c000506, 0x0402006f, 0x42001000, 0x00000008,
4820 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
4821 0x00ff0000, 0x04000003, 0x0401f9bf, 0x04020065,
4822 0x0201f800, 0x0002075a, 0x0400007e, 0x4a026406,
4823 0x00000010, 0x49366009, 0x42000800, 0x00000003,
4824 0x83380580, 0x00000002, 0x04000003, 0x42000800,
4825 0x0000000b, 0x0201f800, 0x00104571, 0x0401f044,
4826 0x42027000, 0x00000000, 0x0401f003, 0x42027000,
4827 0x00000004, 0x0401ff37, 0x04020071, 0x0401f036,
4828 0x42027000, 0x00000033, 0x0401f006, 0x42027000,
4829 0x00000005, 0x0401f003, 0x42027000, 0x00000003,
4830 0x0401ff23, 0x04020066, 0x59a80005, 0x8c000514,
4831 0x04000016, 0x0401ff12, 0x04000014, 0x59340212,
4832 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
4833 0x0402000c, 0x59a80026, 0x8c000506, 0x04020035,
4834 0x42001000, 0x00000008, 0x59340002, 0x82000500,
4835 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000003,
4836 0x0401f985, 0x0402002b, 0x0201f800, 0x0002075a,
4837 0x04000044, 0x4a026406, 0x00000010, 0x49366009,
4838 0x42000800, 0x00000005, 0x83380580, 0x00000003,
4839 0x04000003, 0x42000800, 0x00000009, 0x0201f800,
4840 0x00104571, 0x0401f00a, 0x82102580, 0x00000011,
4841 0x0402002d, 0x0201f800, 0x0002075a, 0x04000031,
4842 0x4a026406, 0x00000010, 0x49366009, 0x492e6008,
4843 0x49325808, 0x813669c0, 0x04000007, 0x592c0c0b,
4844 0x8c040d18, 0x04000004, 0x59340200, 0x84000514,
4845 0x48026a00, 0x0201f800, 0x000207a1, 0x80000580,
4846 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
4847 0x42001000, 0x0000000a, 0x0401f015, 0x42001000,
4848 0x00000010, 0x0401f012, 0x42001000, 0x00000016,
4849 0x0401f00f, 0x42001000, 0x00000017, 0x0401f00c,
4850 0x42001000, 0x00000018, 0x0401f009, 0x42001000,
4851 0x0000001b, 0x0401f006, 0x42001000, 0x0000001e,
4852 0x0401f003, 0x42001000, 0x00000020, 0x42000800,
4853 0x00000019, 0x42028000, 0x00000031, 0x0401f7e2,
4854 0x42000800, 0x00000003, 0x0401f003, 0x42000800,
4855 0x0000000a, 0x41781000, 0x0401f7f7, 0x42000800,
4856 0x00000009, 0x59341400, 0x0401f7f3, 0x42028000,
4857 0x00000008, 0x0401f005, 0x42000800, 0x00000007,
4858 0x416c1000, 0x0401f7ec, 0x41780800, 0x41781000,
4859 0x0401f7cd, 0x42028000, 0x00000000, 0x0401f7fb,
4860 0x82004d80, 0x0000001d, 0x02000800, 0x001005d8,
4861 0x82004d80, 0x0000001a, 0x04020004, 0x40101000,
4862 0x40000800, 0x0401f7dc, 0x82004d80, 0x0000001b,
4863 0x04020003, 0x40181000, 0x0401f7fa, 0x82004d80,
4864 0x0000001c, 0x040007f7, 0x82004d80, 0x00000019,
4865 0x040007b8, 0x0401f7d6, 0x592e6008, 0x0201f800,
4866 0x0010941a, 0x040007b6, 0x59300c06, 0x82040580,
4867 0x00000011, 0x040207d6, 0x83440580, 0x0000ffff,
4868 0x04020005, 0x59326809, 0x813669c0, 0x0400000e,
4869 0x0401f7cf, 0x592c100a, 0x82081500, 0x00ffffff,
4870 0x41784000, 0x0401fda8, 0x040207d6, 0x59300009,
4871 0x800001c0, 0x04000003, 0x81340580, 0x040207c4,
4872 0x49366009, 0x592c0c0b, 0x82041500, 0x0000e000,
4873 0x82080580, 0x00006000, 0x04000009, 0x59300a03,
4874 0x82040580, 0x00000007, 0x040207b9, 0x492e6008,
4875 0x42027000, 0x00000054, 0x0401f77f, 0x0201f800,
4876 0x0010a8d4, 0x040007bc, 0x0401f7b1, 0x492fc857,
4877 0x59a80021, 0x800001c0, 0x04020073, 0x592e6008,
4878 0x4933c857, 0x0201f800, 0x0010941a, 0x04000041,
4879 0x59301406, 0x82080580, 0x00000005, 0x0402005b,
4880 0x59301203, 0x82080580, 0x00000007, 0x04020057,
4881 0x592e8c06, 0x83440480, 0x00000800, 0x04021032,
4882 0x41784000, 0x592c1009, 0x82081500, 0x00ffffff,
4883 0x0401fd75, 0x0402005f, 0x59300009, 0x800001c0,
4884 0x04000003, 0x81340580, 0x04020048, 0x4d300000,
4885 0x592e6013, 0x4933c857, 0x83300580, 0xffffffff,
4886 0x0400000d, 0x0201f800, 0x0010941a, 0x5c026000,
4887 0x04000029, 0x591c1406, 0x82080580, 0x00000006,
4888 0x04000046, 0x82080580, 0x00000011, 0x04000043,
4889 0x0401f002, 0x5c026000, 0x59a80010, 0x592c100a,
4890 0x82081500, 0x00ffffff, 0x80081580, 0x04020017,
4891 0x592c1009, 0x82081500, 0x00ffffff, 0x80081580,
4892 0x0400000f, 0x49366009, 0x492e6008, 0x42027000,
4893 0x00000092, 0x0201f800, 0x000207a1, 0x80000580,
4894 0x1c01f000, 0x42001000, 0x0000000a, 0x0401f00c,
4895 0x42001000, 0x00000010, 0x0401f009, 0x42001000,
4896 0x00000014, 0x0401f006, 0x42001000, 0x00000018,
4897 0x0401f003, 0x42001000, 0x0000003c, 0x492fc857,
4898 0x480bc857, 0x42000800, 0x00000019, 0x42028000,
4899 0x00000031, 0x82000540, 0x00000001, 0x0401f7e9,
4900 0x492fc857, 0x4803c857, 0x480bc857, 0x40000800,
4901 0x0401f7f7, 0x492fc857, 0x42000800, 0x0000000a,
4902 0x41781000, 0x0401f7f2, 0x4933c857, 0x59300406,
4903 0x4803c857, 0x59300203, 0x4803c857, 0x59300009,
4904 0x4803c857, 0x42028000, 0x00000008, 0x41780800,
4905 0x41781000, 0x0401f7e8, 0x42000800, 0x0000001e,
4906 0x0401f7f0, 0x42000800, 0x00000001, 0x0401f7ed,
4907 0x82004d80, 0x0000001d, 0x02000800, 0x001005d8,
4908 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
4909 0x0401f7dc, 0x82004d80, 0x0000001b, 0x04020003,
4910 0x40181000, 0x0401f7d7, 0x82004d80, 0x0000001c,
4911 0x040007d4, 0x82004d80, 0x00000019, 0x040007d1,
4912 0x0401f7d5, 0x59302009, 0x801021c0, 0x04000035,
4913 0x58101400, 0x82081d00, 0x000000ff, 0x59300c03,
4914 0x82040580, 0x00000008, 0x04000022, 0x82040580,
4915 0x0000000a, 0x04000017, 0x82040580, 0x0000000c,
4916 0x04000010, 0x82040580, 0x00000002, 0x04000019,
4917 0x82040580, 0x00000001, 0x04000012, 0x82040580,
4918 0x00000003, 0x0400000b, 0x82040580, 0x00000005,
4919 0x04000004, 0x82040580, 0x00000033, 0x04020019,
4920 0x820c0580, 0x00000009, 0x0400000d, 0x0401f015,
4921 0x820c0580, 0x00000005, 0x04000009, 0x0401f011,
4922 0x820c0580, 0x0000000b, 0x04000005, 0x0401f00d,
4923 0x820c0580, 0x00000003, 0x0402000a, 0x82081d00,
4924 0xffffff00, 0x840c01c0, 0x800c0540, 0x4813c857,
4925 0x480bc857, 0x4807c857, 0x4803c857, 0x48002400,
4926 0x1c01f000, 0x599c0017, 0x8c00050a, 0x04000003,
4927 0x80000580, 0x1c01f000, 0x59a80026, 0x82000500,
4928 0x00000028, 0x04000008, 0x42028800, 0x000007fd,
4929 0x0201f800, 0x00020245, 0x04020003, 0x5934000a,
4930 0x8c000504, 0x1c01f000, 0x4d300000, 0x5934000e,
4931 0x80026540, 0x04000006, 0x0201f800, 0x001062d5,
4932 0x02000800, 0x001064ad, 0x497a680e, 0x5c026000,
4933 0x1c01f000, 0x4d440000, 0x4d340000, 0x80000580,
4934 0x40001800, 0x40028800, 0x82080580, 0x00000008,
4935 0x04020003, 0x42001800, 0x00000001, 0x0201f800,
4936 0x00020245, 0x0402000a, 0x0401fd6d, 0x04020008,
4937 0x800c19c0, 0x04000004, 0x59340405, 0x8c000508,
4938 0x04000003, 0x80081040, 0x04000009, 0x81468800,
4939 0x83440480, 0x00000800, 0x040017f1, 0x80000580,
4940 0x5c026800, 0x5c028800, 0x1c01f000, 0x82000540,
4941 0x00000001, 0x5c026800, 0x5c028800, 0x1c01f000,
4942 0x4a033020, 0x00000000, 0x497b3026, 0x497b3027,
4943 0x497b3028, 0x497b3029, 0x497b302b, 0x497b3021,
4944 0x4a03b104, 0x60000001, 0x1c01f000, 0x4803c856,
4945 0x599c0018, 0x497b3024, 0x497b3025, 0x82000500,
4946 0x0000000f, 0x82000d80, 0x00000005, 0x04000006,
4947 0x82000580, 0x00000006, 0x0400000d, 0x497b3022,
4948 0x1c01f000, 0x4a033022, 0x00000005, 0x599c0216,
4949 0x82000500, 0x0000ffff, 0x04020003, 0x42000000,
4950 0x00000002, 0x48033023, 0x1c01f000, 0x4a033022,
4951 0x00000006, 0x0401f7f6, 0x0401ffe5, 0x4a03c826,
4952 0x00000004, 0x599c0209, 0x80000540, 0x0400001f,
4953 0x599c0207, 0x80000540, 0x04000007, 0x800000cc,
4954 0x599c080d, 0x80040400, 0x4803b100, 0x497bb102,
4955 0x59d80101, 0x599c000d, 0x4803b100, 0x599c000e,
4956 0x4803b101, 0x599c0207, 0x80000540, 0x04020002,
4957 0x497bb102, 0x599c0a09, 0x82040540, 0x00400000,
4958 0x59980822, 0x4803b103, 0x4a03b109, 0x00000004,
4959 0x4a03b104, 0x10000001, 0x800409c0, 0x04020004,
4960 0x4a033020, 0x00000001, 0x1c01f000, 0x4a033020,
4961 0x00000002, 0x0401f7fd, 0x59980022, 0x4803c856,
4962 0x80000540, 0x02000000, 0x000202de, 0x0401f017,
4963 0x42034000, 0x0010b4a4, 0x59a1d81e, 0x80edd9c0,
4964 0x02000800, 0x001005d8, 0x58ec0009, 0x48efc857,
4965 0x49a3c857, 0x492fc857, 0x4803c857, 0x800001c0,
4966 0x08020000, 0x0201f800, 0x001005d8, 0x5931d821,
4967 0x58ef400b, 0x58ec0009, 0x800001c0, 0x08020000,
4968 0x0201f800, 0x001005d8, 0x497a5800, 0x59980026,
4969 0x80000540, 0x0402008c, 0x59d80105, 0x82000d00,
4970 0x00018780, 0x040201da, 0x80000106, 0x82000500,
4971 0x00000003, 0x0c01f001, 0x00104d0a, 0x00104d89,
4972 0x00104d22, 0x00104d50, 0x592c0001, 0x492fc857,
4973 0x492fb107, 0x80000d40, 0x04020007, 0x59940019,
4974 0x80000540, 0x04022003, 0x59980023, 0x48032819,
4975 0x1c01f000, 0x497a5801, 0x40065800, 0x592c0001,
4976 0x496a5800, 0x815eb800, 0x412ed000, 0x80000d40,
4977 0x040207f9, 0x59c80000, 0x82000540, 0x00001200,
4978 0x48039000, 0x0401f7ee, 0x492fc857, 0x492fb107,
4979 0x592c0001, 0x80000d40, 0x04020012, 0x59da5908,
4980 0x835c0480, 0x00000020, 0x0400101c, 0x0402b01a,
4981 0x492fb007, 0x0400e7fa, 0x59d80105, 0x82000500,
4982 0x00018780, 0x040201aa, 0x59940019, 0x80000540,
4983 0x04022003, 0x59980023, 0x48032819, 0x1c01f000,
4984 0x497a5801, 0x40065800, 0x592c0001, 0x496a5800,
4985 0x815eb800, 0x412ed000, 0x80000d40, 0x040207f9,
4986 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
4987 0x0401f7e3, 0x0400f009, 0x496a5800, 0x412ed000,
4988 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
4989 0x48039000, 0x0401f7e0, 0x492fa807, 0x0401f7de,
4990 0x492fc857, 0x59d81108, 0x45681000, 0x400ad000,
4991 0x815eb800, 0x0400e7fc, 0x59c80000, 0x82000540,
4992 0x00001200, 0x48039000, 0x0402d00c, 0x592c0001,
4993 0x492fc857, 0x492fb107, 0x80000d40, 0x0402001d,
4994 0x59940019, 0x80000540, 0x04022003, 0x59980023,
4995 0x48032819, 0x1c01f000, 0x59d80105, 0x82000500,
4996 0x00018780, 0x04020172, 0x42000000, 0x0010b855,
4997 0x0201f800, 0x0010aa47, 0x59980026, 0x59980828,
4998 0x80000000, 0x48033026, 0x492fc857, 0x800409c0,
4999 0x492f3028, 0x04000003, 0x492c0800, 0x0401f002,
5000 0x492f3029, 0x592c0001, 0x80000d40, 0x040007e5,
5001 0x497a5801, 0x40065800, 0x592c0001, 0x496a5800,
5002 0x815eb800, 0x412ed000, 0x80000d40, 0x040207f9,
5003 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
5004 0x0401f7d8, 0x59980026, 0x59980828, 0x80000000,
5005 0x48033026, 0x492fc857, 0x800409c0, 0x492f3028,
5006 0x04000003, 0x492c0800, 0x0401f002, 0x492f3029,
5007 0x592c0001, 0x80000d40, 0x04020027, 0x0402d00e,
5008 0x59980029, 0x80025d40, 0x0400000f, 0x59980026,
5009 0x80000040, 0x48033026, 0x04020002, 0x48033028,
5010 0x592c0000, 0x48033029, 0x492fc857, 0x492fb107,
5011 0x0400d7f4, 0x42000000, 0x0010b855, 0x0201f800,
5012 0x0010aa47, 0x0402e00a, 0x59da5908, 0x496a5800,
5013 0x412ed000, 0x815eb800, 0x0400e7fc, 0x59c80000,
5014 0x82000540, 0x00001200, 0x48039000, 0x59d80105,
5015 0x82000500, 0x00018780, 0x04020125, 0x59940019,
5016 0x80000540, 0x04022003, 0x59980023, 0x48032819,
5017 0x1c01f000, 0x497a5801, 0x40065800, 0x592c0001,
5018 0x496a5800, 0x815eb800, 0x412ed000, 0x80000d40,
5019 0x040207f9, 0x59c80000, 0x82000540, 0x00001200,
5020 0x48039000, 0x0401f7ce, 0x592c0204, 0x4803c856,
5021 0x04000008, 0x42034000, 0x0010b4a4, 0x59a1d81e,
5022 0x80edd9c0, 0x02000800, 0x001005d8, 0x0401f003,
5023 0x5931d821, 0x58ef400b, 0x58ec0009, 0x800001c0,
5024 0x08020000, 0x0201f800, 0x001005d8, 0x497a5801,
5025 0x40065800, 0x592c0001, 0x496a5800, 0x412ed000,
5026 0x815eb800, 0x80000d40, 0x040207f9, 0x59c80000,
5027 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
5028 0x497a5801, 0x40065800, 0x592c0001, 0x496a5800,
5029 0x412ed000, 0x815eb800, 0x80000d40, 0x040207f9,
5030 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
5031 0x0200e000, 0x000202fb, 0x0201f000, 0x00020302,
5032 0x5998002b, 0x84000540, 0x4803302b, 0x0201f000,
5033 0x0002035e, 0x42000000, 0x0010b855, 0x0201f800,
5034 0x0010aa47, 0x492fc857, 0x59980026, 0x59980828,
5035 0x80000000, 0x48033026, 0x800409c0, 0x492f3028,
5036 0x04000003, 0x492c0800, 0x0401f002, 0x492f3029,
5037 0x592c0001, 0x80000d40, 0x04020002, 0x1c01f000,
5038 0x497a5801, 0x40065800, 0x592c0001, 0x496a5800,
5039 0x412ed000, 0x815eb800, 0x80000d40, 0x040207f9,
5040 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
5041 0x1c01f000, 0x59980026, 0x59980828, 0x80000000,
5042 0x48033026, 0x492fc857, 0x800409c0, 0x492f3028,
5043 0x04000003, 0x492c0800, 0x0401f002, 0x492f3029,
5044 0x592c0001, 0x80000d40, 0x04020039, 0x0402d00e,
5045 0x59980029, 0x80025d40, 0x0400000f, 0x59980026,
5046 0x80000040, 0x48033026, 0x04020002, 0x48033028,
5047 0x592c0000, 0x48033029, 0x492fc857, 0x492fb107,
5048 0x0400d7f4, 0x42000000, 0x0010b855, 0x0201f800,
5049 0x0010aa47, 0x0402e01d, 0x59da5908, 0x496a5800,
5050 0x412ed000, 0x815eb800, 0x0400e7fc, 0x59c80000,
5051 0x82000540, 0x00001200, 0x48039000, 0x04006018,
5052 0x59d8010a, 0x59d8090a, 0x80040d80, 0x040207fd,
5053 0x900001c0, 0x82000540, 0x00000013, 0x4803c011,
5054 0x5998002b, 0x84000500, 0x4803302b, 0x59e00017,
5055 0x8c000508, 0x04000003, 0x4a03c017, 0x00000003,
5056 0x4203e000, 0x30000001, 0x59d80105, 0x82000500,
5057 0x00018780, 0x0402007e, 0x1c01f000, 0x5998002b,
5058 0x84000540, 0x4803302b, 0x0401f7f8, 0x497a5801,
5059 0x40065800, 0x592c0001, 0x496a5800, 0x412ed000,
5060 0x815eb800, 0x80000d40, 0x040207f9, 0x59c80000,
5061 0x82000540, 0x00001200, 0x48039000, 0x0401f7bc,
5062 0x5c000000, 0x4c000000, 0x4803c857, 0x492fc857,
5063 0x4943c857, 0x4807c857, 0x4a025a04, 0x00000103,
5064 0x49425a06, 0x48065a08, 0x4a025c06, 0x0000ffff,
5065 0x813261c0, 0x04000003, 0x59300402, 0x48025c06,
5066 0x832c0400, 0x00000009, 0x04011000, 0x4803c840,
5067 0x4a03c842, 0x0000000b, 0x04011000, 0x1c01f000,
5068 0x4df00000, 0x4203e000, 0x50000000, 0x599cb817,
5069 0x59940019, 0x80000540, 0x04002023, 0x0400000e,
5070 0x59980022, 0x82000580, 0x00000005, 0x0400001e,
5071 0x59a80069, 0x81640580, 0x0402001b, 0x8c5cbd08,
5072 0x04000005, 0x59a8006a, 0x59a80866, 0x80040580,
5073 0x04020015, 0x8c5cbd08, 0x04020030, 0x59d8090b,
5074 0x59d8010a, 0x80040580, 0x0400000d, 0x0400600e,
5075 0x4a03c011, 0x80400012, 0x4a03c020, 0x00008040,
5076 0x59e00017, 0x8c000508, 0x04000003, 0x4a03c017,
5077 0x00000002, 0x4203e000, 0x30000001, 0x4a032819,
5078 0xffff0000, 0x04026835, 0x04006003, 0x8c5cbd08,
5079 0x04020860, 0x59980029, 0x80025d40, 0x04000010,
5080 0x59d80105, 0x82000500, 0x00018780, 0x04020020,
5081 0x0402d00d, 0x59980026, 0x492fc857, 0x80000040,
5082 0x48033026, 0x592c0000, 0x492fb107, 0x48033029,
5083 0x04020003, 0x4803c856, 0x48033028, 0x5c03e000,
5084 0x1c01f000, 0x42000000, 0x0010b855, 0x0201f800,
5085 0x0010aa47, 0x0401f7fa, 0x59e0000f, 0x59e0080f,
5086 0x80040580, 0x040207fd, 0x59e00010, 0x59e01010,
5087 0x80081580, 0x040207fd, 0x40065000, 0x80041580,
5088 0x040007c7, 0x040067dc, 0x0401f7ca, 0x4803c857,
5089 0x485fc857, 0x8c00050e, 0x02020800, 0x001005d0,
5090 0x4203e000, 0x50000000, 0x4200b800, 0x00008004,
5091 0x0201f000, 0x001005dd, 0x5998002b, 0x8c000500,
5092 0x04000013, 0x84000500, 0x4803302b, 0x59d8010a,
5093 0x59d8090a, 0x80040580, 0x040207fd, 0x800408e0,
5094 0x82040d40, 0x00000013, 0x4807c011, 0x59e00017,
5095 0x8c000508, 0x04000003, 0x4a03c017, 0x00000003,
5096 0x4203e000, 0x30000001, 0x1c01f000, 0x0402e014,
5097 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800,
5098 0x0400e7fc, 0x59c80000, 0x82000540, 0x00001200,
5099 0x48039000, 0x59d8090b, 0x59980024, 0x48073024,
5100 0x80040480, 0x04020004, 0x59940019, 0x80000540,
5101 0x04022003, 0x59980823, 0x48072819, 0x59d80105,
5102 0x82000500, 0x00018780, 0x040207c9, 0x1c01f000,
5103 0x59981025, 0x59e00010, 0x59e00810, 0x80041d80,
5104 0x040207fd, 0x80080580, 0x04000013, 0x48073025,
5105 0x59e0000f, 0x59e0100f, 0x80081d80, 0x040207fd,
5106 0x81280580, 0x04000008, 0x400a5000, 0x40080000,
5107 0x80040580, 0x04000003, 0x59980823, 0x48072819,
5108 0x1c01f000, 0x59940019, 0x80000540, 0x040227f8,
5109 0x0401f7fc, 0x59e0000f, 0x59e0100f, 0x80081d80,
5110 0x040207fd, 0x81280580, 0x040007f6, 0x400a5000,
5111 0x59940019, 0x80000540, 0x040027ed, 0x0401f7f1,
5112 0x59a80017, 0x82000c80, 0x0000000a, 0x02021800,
5113 0x001005d8, 0x0c01f809, 0x4a038805, 0x000000f0,
5114 0x59c400a3, 0x82000500, 0x02870000, 0x02020800,
5115 0x001005d8, 0x1c01f000, 0x00104fc5, 0x00104f51,
5116 0x00104f6c, 0x00104f95, 0x00104fb8, 0x00104ff2,
5117 0x00105004, 0x00104f6c, 0x00104fd6, 0x00104f50,
5118 0x1c01f000, 0x4a038808, 0x00000004, 0x0401f8f9,
5119 0x0201f800, 0x001053ab, 0x59c40805, 0x8c040d0e,
5120 0x04020013, 0x8c040d0a, 0x0402000b, 0x8c040d0c,
5121 0x04020006, 0x8c040d08, 0x0400000d, 0x4a035017,
5122 0x00000003, 0x0401f00a, 0x4a035017, 0x00000000,
5123 0x0401f007, 0x42000000, 0x0010b844, 0x0201f800,
5124 0x0010aa47, 0x4a035017, 0x00000002, 0x1c01f000,
5125 0x4a038808, 0x00000002, 0x0401f8de, 0x59c40805,
5126 0x8c040d08, 0x04020021, 0x8c040d0c, 0x0402001c,
5127 0x8c040d0e, 0x04020017, 0x82040500, 0x000000f0,
5128 0x0402001c, 0x0201f800, 0x001053ab, 0x4a038808,
5129 0x00000080, 0x59c40002, 0x8400050c, 0x48038802,
5130 0x0401f9d9, 0x4d3c0000, 0x42027800, 0x00000001,
5131 0x0201f800, 0x00109874, 0x5c027800, 0x4a038808,
5132 0x00000080, 0x4a035017, 0x00000009, 0x0401f009,
5133 0x4a035017, 0x00000001, 0x0401f006, 0x4a035017,
5134 0x00000000, 0x0401f003, 0x4a035017, 0x00000003,
5135 0x1c01f000, 0x0401f8b7, 0x4a038808, 0x00000080,
5136 0x59c40805, 0x8c040d0a, 0x0402001b, 0x8c040d0c,
5137 0x04020016, 0x8c040d0e, 0x04020011, 0x82040500,
5138 0x000000f0, 0x04020016, 0x59c40002, 0x8400050c,
5139 0x48038802, 0x0401f9b4, 0x4d3c0000, 0x42027800,
5140 0x00000001, 0x0201f800, 0x00109874, 0x5c027800,
5141 0x4a035017, 0x00000009, 0x0401f009, 0x4a035017,
5142 0x00000001, 0x0401f006, 0x4a035017, 0x00000000,
5143 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
5144 0x4a038808, 0x00000008, 0x59c40805, 0x8c040d0c,
5145 0x04020006, 0x8c040d0e, 0x04000006, 0x4a035017,
5146 0x00000001, 0x0401f003, 0x4a035017, 0x00000000,
5147 0x1c01f000, 0x0401f8d3, 0x59c40805, 0x8c040d0c,
5148 0x0402000d, 0x4c040000, 0x0401f882, 0x5c000800,
5149 0x8c040d0a, 0x04020006, 0x8c040d0e, 0x04000006,
5150 0x4a035017, 0x00000001, 0x0401f003, 0x4a035017,
5151 0x00000002, 0x1c01f000, 0x4a038808, 0x00000008,
5152 0x42001000, 0x00105058, 0x0201f800, 0x00106084,
5153 0x59c40805, 0x8c040d0a, 0x0402000d, 0x8c040d08,
5154 0x0402000b, 0x8c040d0c, 0x04020006, 0x8c040d0e,
5155 0x0400000d, 0x4a035017, 0x00000001, 0x0401f00a,
5156 0x4a035017, 0x00000000, 0x0401f007, 0x42000000,
5157 0x0010b844, 0x0201f800, 0x0010aa47, 0x4a035017,
5158 0x00000004, 0x1c01f000, 0x0401f8a6, 0x0401f859,
5159 0x59c40805, 0x8c040d0a, 0x0402000b, 0x8c040d0c,
5160 0x04020006, 0x8c040d0e, 0x04000009, 0x4a035017,
5161 0x00000001, 0x0401f006, 0x4a035017, 0x00000000,
5162 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
5163 0x4a038808, 0x00000004, 0x0401f846, 0x59c40805,
5164 0x8c040d0a, 0x04020010, 0x8c040d08, 0x0402000b,
5165 0x8c040d0c, 0x04020006, 0x8c040d0e, 0x0400000c,
5166 0x4a035017, 0x00000001, 0x0401f009, 0x4a035017,
5167 0x00000000, 0x0401f006, 0x4a035017, 0x00000003,
5168 0x0401f003, 0x4a035017, 0x00000002, 0x1c01f000,
5169 0x0401f91f, 0x02020800, 0x001005d8, 0x59a80805,
5170 0x8c040d0c, 0x04000015, 0x84040d0c, 0x48075005,
5171 0x4a038805, 0x00000010, 0x0201f800, 0x00101937,
5172 0x59c40005, 0x8c000508, 0x04000008, 0x4a038808,
5173 0x00000008, 0x4a035033, 0x00000001, 0x4202d800,
5174 0x00000001, 0x0401f01a, 0x59c40006, 0x84000548,
5175 0x48038806, 0x0401f016, 0x59a80017, 0x82000580,
5176 0x00000001, 0x0400000c, 0x59a80017, 0x82000580,
5177 0x00000005, 0x0402000c, 0x42000000, 0x0010b844,
5178 0x0201f800, 0x0010aa47, 0x4a035017, 0x00000008,
5179 0x0401f007, 0x42000000, 0x0010b844, 0x0201f800,
5180 0x0010aa47, 0x4a035017, 0x00000004, 0x1c01f000,
5181 0x4803c856, 0x4c040000, 0x4c080000, 0x42000800,
5182 0x00000064, 0x42001000, 0x00105058, 0x0201f800,
5183 0x00106079, 0x5c001000, 0x5c000800, 0x1c01f000,
5184 0x4803c856, 0x4c040000, 0x0201f800, 0x00106c55,
5185 0x4df00000, 0x0201f800, 0x00106e21, 0x5c03e000,
5186 0x02000800, 0x00106c4b, 0x0401ffba, 0x5c000800,
5187 0x1c01f000, 0x4803c856, 0x4c040000, 0x4c080000,
5188 0x0201f800, 0x00106c55, 0x4df00000, 0x0201f800,
5189 0x00106e21, 0x5c03e000, 0x02000800, 0x00106c4b,
5190 0x59c40006, 0x84000500, 0x48038806, 0x0201f800,
5191 0x00106ede, 0x497b8880, 0x0201f800, 0x0010a9c0,
5192 0x0201f800, 0x0010a9ce, 0x0201f800, 0x00101815,
5193 0x4a03504c, 0x00000004, 0x4202d800, 0x00000004,
5194 0x4a038805, 0x00000001, 0x42001000, 0x00105058,
5195 0x0201f800, 0x00106084, 0x0201f800, 0x001006d4,
5196 0x0401f8c1, 0x04000006, 0x42006000, 0xfeffffff,
5197 0x41786800, 0x0201f800, 0x0010427d, 0x0201f800,
5198 0x00100452, 0x42000000, 0x00000001, 0x0201f800,
5199 0x00101590, 0x5c001000, 0x5c000800, 0x1c01f000,
5200 0x59c40008, 0x8c000508, 0x04020007, 0x4a038808,
5201 0x00000010, 0x4201d000, 0x00001388, 0x0201f800,
5202 0x0010608e, 0x1c01f000, 0x4c040000, 0x59a80833,
5203 0x82040580, 0x00000000, 0x0400000b, 0x82040580,
5204 0x00000001, 0x0400000b, 0x82040580, 0x00000002,
5205 0x0400000b, 0x82040580, 0x00000003, 0x0400000b,
5206 0x0401f057, 0x4a035017, 0x00000000, 0x0401f009,
5207 0x4a035017, 0x00000004, 0x0401f006, 0x4a035017,
5208 0x00000001, 0x0401f003, 0x4a035017, 0x00000007,
5209 0x497b8880, 0x4a038893, 0x00000001, 0x41780000,
5210 0x0201f800, 0x00101606, 0x0201f800, 0x00106ede,
5211 0x836c0d80, 0x00000004, 0x04000008, 0x59c40006,
5212 0x82000500, 0xffffff0f, 0x82000540, 0x04000001,
5213 0x48038806, 0x0401f007, 0x59c40006, 0x82000500,
5214 0xffffff0f, 0x82000540, 0x04000000, 0x48038806,
5215 0x0401f875, 0x04020005, 0x59c40806, 0x82040d00,
5216 0xfbffff0f, 0x48078806, 0x4200b000, 0x00000005,
5217 0x59c40005, 0x8c000534, 0x04020033, 0x42006000,
5218 0xfc18ffff, 0x42006800, 0x01000000, 0x0201f800,
5219 0x0010427d, 0x0201f800, 0x00101937, 0x59c408a4,
5220 0x82040d00, 0x0000000f, 0x82040d80, 0x0000000c,
5221 0x0400000a, 0x42006000, 0xfeffffff, 0x42006800,
5222 0x02000000, 0x0201f800, 0x0010427d, 0x8058b040,
5223 0x040207e8, 0x0401f8a1, 0x0401f853, 0x04000006,
5224 0x42006000, 0xfeffffff, 0x41786800, 0x0201f800,
5225 0x0010427d, 0x836c0d80, 0x00000004, 0x04000006,
5226 0x59a8084d, 0x42001000, 0x00105065, 0x0201f800,
5227 0x0010606e, 0x4a035033, 0x00000004, 0x0401fe31,
5228 0x0401f841, 0x04020008, 0x59c408a4, 0x82040d00,
5229 0x0000000f, 0x82040580, 0x0000000c, 0x02020800,
5230 0x001005d8, 0x5c000800, 0x1c01f000, 0x4803c856,
5231 0x4c000000, 0x0201f800, 0x0010609e, 0x4a035010,
5232 0x00ffffff, 0x497b5032, 0x59a8002a, 0x82000500,
5233 0xffff0000, 0x4803502a, 0x497b8880, 0x497b8893,
5234 0x41780000, 0x0201f800, 0x00101606, 0x59c40001,
5235 0x82000500, 0xfffffcff, 0x48038801, 0x42006000,
5236 0xfc18ffff, 0x41786800, 0x0201f800, 0x0010427d,
5237 0x4a038808, 0x00000000, 0x5c000000, 0x800001c0,
5238 0x02020800, 0x0010411d, 0x4a038805, 0x040000f0,
5239 0x59c40006, 0x82000500, 0xffffffcf, 0x82000540,
5240 0x440000c1, 0x48038806, 0x1c01f000, 0x4c5c0000,
5241 0x59a8b832, 0x825cbd80, 0x0000aaaa, 0x5c00b800,
5242 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x825cbd00,
5243 0x00000030, 0x825cbd80, 0x00000000, 0x5c00b800,
5244 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x825cbd00,
5245 0x00000030, 0x825cbd80, 0x00000010, 0x5c00b800,
5246 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x825cbd00,
5247 0x00000030, 0x825cbd80, 0x00000020, 0x5c00b800,
5248 0x1c01f000, 0x59a80005, 0x4803c857, 0x82000d00,
5249 0x00000013, 0x04000025, 0x599c1017, 0x4d3c0000,
5250 0x82000500, 0x00000011, 0x04000007, 0x42027800,
5251 0x00000400, 0x0201f800, 0x00103b25, 0x0402000a,
5252 0x0401f012, 0x42027800, 0x00000408, 0x0201f800,
5253 0x00103b25, 0x0400000d, 0x42003000, 0x00000003,
5254 0x0401f003, 0x42003000, 0x00000004, 0x42028000,
5255 0x0000000e, 0x0201f800, 0x0010a449, 0x599c1017,
5256 0x8c08150a, 0x04020007, 0x42028000, 0x00000004,
5257 0x0201f800, 0x00101fe5, 0x80000580, 0x0401f80d,
5258 0x5c027800, 0x0401f00a, 0x0201f800, 0x00103b25,
5259 0x04000007, 0x42028000, 0x0000000f, 0x42003000,
5260 0x00000001, 0x0201f800, 0x0010a449, 0x1c01f000,
5261 0x59a80005, 0x04000004, 0x82000540, 0x00000010,
5262 0x0401f003, 0x82000500, 0xffffffef, 0x48035005,
5263 0x4803c857, 0x1c01f000, 0x4803c856, 0x4c580000,
5264 0x42000000, 0x0010b8cb, 0x0201f800, 0x0010aa47,
5265 0x42000800, 0x0010c0f1, 0x59c40003, 0x44000800,
5266 0x59c40004, 0x48000801, 0x59c4000b, 0x48000802,
5267 0x59c4008e, 0x48000803, 0x59c4008f, 0x48000804,
5268 0x59c40090, 0x48000805, 0x59c40091, 0x48000806,
5269 0x59c40092, 0x48000807, 0x59c40093, 0x48000808,
5270 0x59c40099, 0x48000809, 0x59c4009e, 0x4800080a,
5271 0x59c400aa, 0x4800080b, 0x59c400af, 0x4800080c,
5272 0x59c400b2, 0x4800080d, 0x59c400b1, 0x4800080e,
5273 0x82040c00, 0x0000000f, 0x41c41800, 0x4200b000,
5274 0x00000030, 0x580c0050, 0x44000800, 0x80040800,
5275 0x800c1800, 0x8058b040, 0x040207fb, 0x41c41800,
5276 0x4200b000, 0x00000020, 0x580c0010, 0x44000800,
5277 0x80040800, 0x800c1800, 0x8058b040, 0x040207fb,
5278 0x497b8830, 0x4200b000, 0x00000040, 0x59c40031,
5279 0x44000800, 0x80040800, 0x8058b040, 0x040207fc,
5280 0x497b88ac, 0x4200b000, 0x00000010, 0x59c400ad,
5281 0x44000800, 0x80040800, 0x8058b040, 0x040207fc,
5282 0x59c41001, 0x4c080000, 0x8408150c, 0x480b8801,
5283 0x4a0370e4, 0x00000300, 0x4a0370e5, 0xb0000000,
5284 0x42000800, 0x00000800, 0x80040840, 0x02000800,
5285 0x001005d8, 0x59b800e5, 0x8c000538, 0x040207fb,
5286 0x4a0370e4, 0x00000200, 0x42006000, 0xffffffff,
5287 0x42006800, 0x80000000, 0x0201f800, 0x0010427d,
5288 0x4a038807, 0x00000001, 0x497b8807, 0x4a038808,
5289 0x00000010, 0x42006000, 0xfcf8ffff, 0x42006800,
5290 0x01000000, 0x0201f800, 0x0010427d, 0x5c001000,
5291 0x480b8801, 0x42000800, 0x0010c0f1, 0x50040000,
5292 0x48038803, 0x58040001, 0x48038804, 0x58040002,
5293 0x4803880b, 0x58040003, 0x4803888e, 0x58040004,
5294 0x4803888f, 0x58040005, 0x48038890, 0x58040006,
5295 0x48038891, 0x58040007, 0x48038892, 0x58040008,
5296 0x48038893, 0x58040009, 0x48038899, 0x5804000a,
5297 0x4803889e, 0x5804000b, 0x480388aa, 0x5804000c,
5298 0x480388af, 0x5804000d, 0x480388b2, 0x5804000e,
5299 0x480388b1, 0x82040c00, 0x0000000f, 0x41c41800,
5300 0x4200b000, 0x00000030, 0x50040000, 0x48001850,
5301 0x80040800, 0x800c1800, 0x8058b040, 0x040207fb,
5302 0x41c41800, 0x4200b000, 0x00000020, 0x50040000,
5303 0x48001810, 0x80040800, 0x800c1800, 0x8058b040,
5304 0x040207fb, 0x497b8830, 0x4200b000, 0x00000040,
5305 0x50040000, 0x48038831, 0x80040800, 0x8058b040,
5306 0x040207fc, 0x497b88ac, 0x4200b000, 0x00000010,
5307 0x50040000, 0x480388ad, 0x80040800, 0x8058b040,
5308 0x040207fc, 0x497b8880, 0x41780000, 0x0201f800,
5309 0x00101606, 0x59c408a4, 0x82040d00, 0x0000000f,
5310 0x82040580, 0x0000000c, 0x02020800, 0x001005d8,
5311 0x4a038805, 0x04000000, 0x5c00b000, 0x1c01f000,
5312 0x4803c856, 0x4c580000, 0x4ce80000, 0x42000000,
5313 0x0010b845, 0x0201f800, 0x0010aa47, 0x59c41008,
5314 0x4c080000, 0x82080500, 0xffffff7f, 0x48038808,
5315 0x59c40004, 0x82000500, 0x00003e02, 0x04000005,
5316 0x4201d000, 0x00000014, 0x0201f800, 0x0010608e,
5317 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
5318 0x4a038805, 0x00000010, 0x4a038808, 0x00000004,
5319 0x4200b000, 0x00000065, 0x59c40005, 0x8c000508,
5320 0x04020012, 0x4201d000, 0x000003e8, 0x0201f800,
5321 0x0010608e, 0x8058b040, 0x040207f8, 0x0201f800,
5322 0x00106ede, 0x4a038808, 0x00000008, 0x4a035033,
5323 0x00000001, 0x4202d800, 0x00000001, 0x82000540,
5324 0x00000001, 0x0401f030, 0x0201f800, 0x00100ae0,
5325 0x42000000, 0x0010b8a8, 0x0201f800, 0x0010aa47,
5326 0x0201f800, 0x00100ef4, 0x497b8880, 0x59a8002a,
5327 0x82000500, 0x0000ffff, 0x4c000000, 0x0201f800,
5328 0x00101606, 0x5c000000, 0x48038880, 0x4a038808,
5329 0x00000000, 0x4200b000, 0x00000065, 0x4a038805,
5330 0x000000f0, 0x0201f800, 0x00101937, 0x42000800,
5331 0x000000f0, 0x59c40005, 0x80040d00, 0x04000008,
5332 0x4201d000, 0x000003e8, 0x0201f800, 0x0010608e,
5333 0x8058b040, 0x040207f2, 0x0401f7d1, 0x59c40006,
5334 0x82000540, 0x000000f0, 0x48038806, 0x59a8001e,
5335 0x80000540, 0x04020002, 0x80000000, 0x48038893,
5336 0x80000580, 0x5c001000, 0x4df00000, 0x0201f800,
5337 0x0010195d, 0x5c03e000, 0x480b8808, 0x5c01d000,
5338 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000,
5339 0x4ce80000, 0x59c41008, 0x82080500, 0xffffff7f,
5340 0x48038808, 0x4c080000, 0x59c40004, 0x82000500,
5341 0x00003e02, 0x04000005, 0x4201d000, 0x00000014,
5342 0x0201f800, 0x0010608e, 0x0201f800, 0x00100ae0,
5343 0x42000000, 0x0010b8a9, 0x0201f800, 0x0010aa47,
5344 0x0201f800, 0x00100ef4, 0x4a038808, 0x00000002,
5345 0x80000580, 0x48038880, 0x48038893, 0x0201f800,
5346 0x00101606, 0x4200b000, 0x00000384, 0x4a038805,
5347 0x000000f0, 0x0201f800, 0x00101937, 0x42000800,
5348 0x000000f0, 0x59c40005, 0x80040d00, 0x04000015,
5349 0x82000500, 0x000000d0, 0x04020012, 0x4201d000,
5350 0x00000067, 0x0201f800, 0x0010608e, 0x8058b040,
5351 0x040207ef, 0x0201f800, 0x00106ede, 0x4a038808,
5352 0x00000008, 0x4a035033, 0x00000001, 0x4202d800,
5353 0x00000001, 0x82000540, 0x00000001, 0x0401f010,
5354 0x497b8880, 0x59a8001e, 0x80000540, 0x04020002,
5355 0x80000000, 0x48038893, 0x59a8002a, 0x82000500,
5356 0x0000ffff, 0x4c000000, 0x0201f800, 0x00101606,
5357 0x5c000000, 0x48038880, 0x80000580, 0x5c001000,
5358 0x4df00000, 0x0201f800, 0x0010195d, 0x5c03e000,
5359 0x480b8808, 0x5c01d000, 0x5c00b000, 0x1c01f000,
5360 0x4803c856, 0x59c40004, 0x82000500, 0x00003e02,
5361 0x0400000a, 0x0201f800, 0x00106ede, 0x4a038808,
5362 0x00000008, 0x4a035033, 0x00000001, 0x4202d800,
5363 0x00000001, 0x0401f052, 0x0201f800, 0x00100ae0,
5364 0x42000000, 0x0010b8aa, 0x0201f800, 0x0010aa47,
5365 0x0201f800, 0x00100ef4, 0x59c40006, 0x84000508,
5366 0x48038806, 0x4a038805, 0x00000010, 0x59a80805,
5367 0x84040d4c, 0x48075005, 0x42000800, 0x00000064,
5368 0x42001000, 0x00105058, 0x0201f800, 0x0010606e,
5369 0x4a038808, 0x00000000, 0x497b8880, 0x4a038805,
5370 0x000000f0, 0x0201f800, 0x00101937, 0x42000800,
5371 0x000000f0, 0x59c40005, 0x80040d00, 0x0400000e,
5372 0x82000500, 0x000000e0, 0x0402000b, 0x4201d000,
5373 0x000003e8, 0x0201f800, 0x0010608e, 0x0201f800,
5374 0x00105f48, 0x59940004, 0x80000540, 0x040207ec,
5375 0x0401f023, 0x4c080000, 0x42001000, 0x00105065,
5376 0x0201f800, 0x00105f90, 0x42001000, 0x00105058,
5377 0x0201f800, 0x00106084, 0x5c001000, 0x497b8880,
5378 0x59a8001e, 0x80000540, 0x04020002, 0x80000000,
5379 0x48038893, 0x59a8002a, 0x82000500, 0x0000ffff,
5380 0x4c000000, 0x0201f800, 0x00101606, 0x5c000000,
5381 0x48038880, 0x59a80805, 0x84040d0c, 0x48075005,
5382 0x59c40006, 0x84000548, 0x48038806, 0x0201f800,
5383 0x0010195d, 0x4a038808, 0x00000080, 0x1c01f000,
5384 0x4803c856, 0x4d400000, 0x4d3c0000, 0x0201f800,
5385 0x00106ede, 0x0201f800, 0x0010ab33, 0x04020025,
5386 0x599c1017, 0x59a80805, 0x8c040d00, 0x0402000c,
5387 0x8c08151a, 0x0400001f, 0x84040d42, 0x48075005,
5388 0x42028000, 0x00000004, 0x42027800, 0x0000000c,
5389 0x8c081508, 0x04020008, 0x0401f012, 0x42028000,
5390 0x00000004, 0x42027800, 0x00000004, 0x8c081508,
5391 0x0400000c, 0x4d400000, 0x42028000, 0x0000000e,
5392 0x42028800, 0x0000ffff, 0x0201f800, 0x0010a446,
5393 0x5c028000, 0x599c0817, 0x8c040d0a, 0x04020005,
5394 0x4943c857, 0x493fc857, 0x0201f800, 0x00101fe5,
5395 0x497b8880, 0x4202d800, 0x00000001, 0x0401fcfb,
5396 0x5c027800, 0x5c028000, 0x1c01f000, 0x0201f800,
5397 0x00100ae0, 0x42000000, 0x0010b8ab, 0x0201f800,
5398 0x0010aa47, 0x0201f800, 0x00100ef4, 0x42000000,
5399 0x00000001, 0x0201f800, 0x00101606, 0x4a038880,
5400 0x00000001, 0x0201f000, 0x0010195d, 0x4202e000,
5401 0x00000000, 0x4a033015, 0x00000001, 0x497b301d,
5402 0x497b3006, 0x4a03b004, 0x60000001, 0x59d80005,
5403 0x4a03b004, 0x90000001, 0x4a03a804, 0x60000001,
5404 0x59d40005, 0x4a03a804, 0x90000001, 0x0201f000,
5405 0x00105983, 0x4a03c825, 0x00000004, 0x4a03c827,
5406 0x00000004, 0x599c0409, 0x80000d40, 0x04000020,
5407 0x599c0407, 0x80000540, 0x04000007, 0x800000cc,
5408 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
5409 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
5410 0x4803b001, 0x599c0407, 0x80000540, 0x04020002,
5411 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
5412 0x4803b003, 0x4a03b009, 0x00000004, 0x4a03b004,
5413 0x10000001, 0x59e00803, 0x82040d00, 0xfffffeff,
5414 0x82040d40, 0x00008000, 0x4807c003, 0x599c040a,
5415 0x80000540, 0x04000020, 0x599c0408, 0x80000540,
5416 0x04000007, 0x800000cc, 0x599c100f, 0x80080400,
5417 0x4803a800, 0x497ba802, 0x59d40001, 0x599c000f,
5418 0x4803a800, 0x599c0010, 0x4803a801, 0x599c0408,
5419 0x80000540, 0x04020002, 0x497ba802, 0x599c0c0a,
5420 0x82040540, 0x00400000, 0x4803a803, 0x4a03a809,
5421 0x00000004, 0x4a03a804, 0x10000001, 0x59e00803,
5422 0x82040d00, 0xfffffbff, 0x82040d40, 0x00008000,
5423 0x4807c003, 0x800409c0, 0x04000007, 0x4202e000,
5424 0x00000001, 0x0200b800, 0x00020551, 0x0200f000,
5425 0x00020566, 0x1c01f000, 0x0201f800, 0x001005d8,
5426 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
5427 0x59981005, 0x800811c0, 0x0400001e, 0x58080005,
5428 0x82000d00, 0x43018780, 0x02020000, 0x00105846,
5429 0x8c000508, 0x04000015, 0x580a5808, 0x592c0204,
5430 0x497a5800, 0x497a5801, 0x82000500, 0x000000ff,
5431 0x82000c80, 0x0000004b, 0x0402100b, 0x0c01f80f,
5432 0x5c03e000, 0x83700580, 0x00000003, 0x040007e6,
5433 0x0200f800, 0x00020566, 0x0200b000, 0x00020551,
5434 0x1c01f000, 0x0401f850, 0x5c03e000, 0x0401f7f9,
5435 0x0401f8de, 0x0401f7fd, 0x00105491, 0x00105491,
5436 0x00105491, 0x00105491, 0x001054a1, 0x00105491,
5437 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5438 0x00105519, 0x00105491, 0x00105491, 0x001054a1,
5439 0x001054a1, 0x00105491, 0x00105491, 0x00105491,
5440 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5441 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5442 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5443 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5444 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5445 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5446 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5447 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5448 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5449 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5450 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5451 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5452 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5453 0x00105491, 0x00105491, 0x00105491, 0x00105491,
5454 0x00105491, 0x492fc857, 0x42000000, 0x0010b85e,
5455 0x0201f800, 0x0010aa47, 0x42000000, 0x00000400,
5456 0x0401f019, 0x492fc857, 0x42000000, 0x0010b85d,
5457 0x0201f800, 0x0010aa47, 0x42000000, 0x00001000,
5458 0x0401f011, 0x492fc857, 0x42000000, 0x0010b85c,
5459 0x0201f800, 0x0010aa47, 0x42000000, 0x00002000,
5460 0x0401f009, 0x492fc857, 0x42000000, 0x0010b85f,
5461 0x0201f800, 0x0010aa47, 0x42000000, 0x00000800,
5462 0x0401f001, 0x4803c857, 0x4202e000, 0x00000001,
5463 0x592c0c04, 0x82040d00, 0xffff80ff, 0x80040540,
5464 0x48025c04, 0x0201f000, 0x000202da, 0x592c0204,
5465 0x492fc857, 0x80000110, 0x040007db, 0x80000040,
5466 0x04000025, 0x48033002, 0x492f3003, 0x492f3004,
5467 0x4a033008, 0x001054e5, 0x4202e000, 0x00000003,
5468 0x1c01f000, 0x592c0204, 0x492fc857, 0x80000110,
5469 0x040007cd, 0x80000040, 0x04000033, 0x48033002,
5470 0x492f3003, 0x492f3004, 0x4a033008, 0x00105501,
5471 0x4202e000, 0x00000003, 0x1c01f000, 0x0201f800,
5472 0x0010ab33, 0x02020000, 0x000204d9, 0x42028000,
5473 0x00000028, 0x41780800, 0x417a6000, 0x0201f800,
5474 0x00104e70, 0x0201f800, 0x001091c6, 0x0201f000,
5475 0x000202da, 0x592c0a0a, 0x8c040d02, 0x04020016,
5476 0x59a80021, 0x492fc857, 0x80000540, 0x0402000f,
5477 0x592c0207, 0x80000540, 0x04000005, 0x0201f800,
5478 0x00104326, 0x04020004, 0x1c01f000, 0x42000000,
5479 0x00000000, 0x592c0a06, 0x48065c06, 0x48025a06,
5480 0x0201f000, 0x000202da, 0x42000000, 0x00000028,
5481 0x0401f7f9, 0x42000800, 0x00000009, 0x0201f000,
5482 0x0010665b, 0x592c0208, 0x492fc857, 0x82000c80,
5483 0x0000199a, 0x040217a4, 0x592c0408, 0x80000540,
5484 0x040207a1, 0x59a80821, 0x800409c0, 0x04020009,
5485 0x592c0207, 0x80000540, 0x0400079b, 0x497a5a06,
5486 0x0201f800, 0x00104385, 0x04020004, 0x1c01f000,
5487 0x42000000, 0x00000028, 0x48025a06, 0x0201f000,
5488 0x000202da, 0x59980804, 0x59980002, 0x48065800,
5489 0x492c0801, 0x492f3004, 0x80000040, 0x48033002,
5490 0x04000002, 0x1c01f000, 0x599a5803, 0x59980008,
5491 0x4202e000, 0x00000001, 0x0801f000, 0x592e8a06,
5492 0x592c0406, 0x4803c856, 0x82000500, 0x000000ff,
5493 0x4200b800, 0x00000001, 0x82000d80, 0x00000001,
5494 0x04000015, 0x417a8800, 0x4200b800, 0x000007f0,
5495 0x82000d80, 0x00000002, 0x0400000f, 0x80000540,
5496 0x02020000, 0x000202da, 0x592e8a06, 0x0201f800,
5497 0x00020245, 0x02020000, 0x000202da, 0x592e9008,
5498 0x592e9809, 0x0201f800, 0x00104713, 0x0201f000,
5499 0x000202da, 0x59a80805, 0x84040d00, 0x48075005,
5500 0x0201f800, 0x00020245, 0x02000800, 0x0010482c,
5501 0x81468800, 0x805cb840, 0x040207fa, 0x0201f000,
5502 0x000202da, 0x592c0a08, 0x4807c857, 0x82040580,
5503 0x0000000e, 0x04000045, 0x82040580, 0x00000046,
5504 0x04000046, 0x82040580, 0x00000045, 0x04000020,
5505 0x82040580, 0x00000029, 0x04000010, 0x82040580,
5506 0x0000002a, 0x04000009, 0x82040580, 0x0000000f,
5507 0x040001fc, 0x82040580, 0x0000002e, 0x040001f9,
5508 0x4807c856, 0x0401f1f2, 0x59a80805, 0x84040d04,
5509 0x48075005, 0x0401f1f3, 0x592e8a06, 0x0201f800,
5510 0x00020245, 0x040201ef, 0x59340200, 0x84000518,
5511 0x48026a00, 0x592e6009, 0x4933c857, 0x83300580,
5512 0xffffffff, 0x0402002a, 0x0401f1e6, 0x592c1407,
5513 0x480bc857, 0x0201f800, 0x00109410, 0x411e6000,
5514 0x04020003, 0x4803c856, 0x0401f1d9, 0x592e3809,
5515 0x591c1414, 0x84081516, 0x84081554, 0x480a3c14,
5516 0x4a026403, 0x0000003a, 0x592c040b, 0x80000540,
5517 0x04000007, 0x4a026403, 0x0000003b, 0x592c020c,
5518 0x4802641a, 0x592c040c, 0x4802621a, 0x4a026203,
5519 0x00000001, 0x42000800, 0x80000040, 0x0201f800,
5520 0x00020721, 0x0401f1c7, 0x59a80068, 0x84000510,
5521 0x48035068, 0x0401f1c3, 0x592c1207, 0x8c081500,
5522 0x040201c0, 0x592e8a06, 0x592e6009, 0x0201f800,
5523 0x0010941a, 0x04020003, 0x4803c856, 0x0401f1b4,
5524 0x59300c06, 0x82040580, 0x00000004, 0x04000003,
5525 0x4803c856, 0x0401f1ae, 0x59300a03, 0x82040580,
5526 0x00000007, 0x04000003, 0x4803c856, 0x0401f1a8,
5527 0x59300c03, 0x82040580, 0x00000001, 0x04000021,
5528 0x82040580, 0x00000003, 0x04000016, 0x82040580,
5529 0x00000006, 0x04000020, 0x82040580, 0x00000008,
5530 0x04000015, 0x82040580, 0x0000000a, 0x0400000a,
5531 0x82040580, 0x0000000c, 0x04000004, 0x82040580,
5532 0x0000002e, 0x04020018, 0x42000800, 0x00000009,
5533 0x0401f013, 0x42000800, 0x00000005, 0x0401f010,
5534 0x417a7800, 0x0201f800, 0x0010203c, 0x4a026406,
5535 0x00000001, 0x42000800, 0x00000003, 0x0401f008,
5536 0x417a7800, 0x0201f800, 0x0010203c, 0x4a026406,
5537 0x00000001, 0x42000800, 0x0000000b, 0x0201f800,
5538 0x00104571, 0x4a026203, 0x00000001, 0x0201f800,
5539 0x0010672b, 0x0401f17b, 0x40000800, 0x58040000,
5540 0x80000540, 0x040207fd, 0x492c0800, 0x1c01f000,
5541 0x492fc857, 0x59300c06, 0x82040580, 0x00000006,
5542 0x04020094, 0x0201f800, 0x001049e7, 0x04020005,
5543 0x59340200, 0x8c00051a, 0x02000000, 0x00020533,
5544 0x59340200, 0x8c00050e, 0x0400008a, 0x59300203,
5545 0x42027800, 0x00000001, 0x82000580, 0x00000007,
5546 0x02020000, 0x00020533, 0x4a026203, 0x00000002,
5547 0x0201f000, 0x00020533, 0x42028000, 0x00000002,
5548 0x4a026206, 0x00000014, 0x4d2c0000, 0x0201f800,
5549 0x0010a1d1, 0x5c025800, 0x59300c06, 0x4807c857,
5550 0x82040580, 0x00000007, 0x04020063, 0x492fc857,
5551 0x4a025a06, 0x00000001, 0x0201f000, 0x000202da,
5552 0x592c240a, 0x492fc857, 0x4813c857, 0x8c10251c,
5553 0x04020016, 0x8c10251a, 0x04000003, 0x8c10250a,
5554 0x04000069, 0x59340a00, 0x8c040d0e, 0x04000003,
5555 0x8c10251e, 0x04000064, 0x0201f800, 0x0002075a,
5556 0x0400006b, 0x592c240a, 0x49366009, 0x49325809,
5557 0x4a026406, 0x00000006, 0x4a026203, 0x00000007,
5558 0x0201f000, 0x0002052f, 0x592c0a0c, 0x5934000f,
5559 0x41784000, 0x80001540, 0x0400006d, 0x58080204,
5560 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
5561 0x04020004, 0x5808020c, 0x80040580, 0x04000004,
5562 0x58080000, 0x40084000, 0x0401f7f3, 0x58080000,
5563 0x49781000, 0x802041c0, 0x04000006, 0x48004000,
5564 0x80000540, 0x04020007, 0x48226810, 0x0401f005,
5565 0x4802680f, 0x80000540, 0x04020002, 0x497a6810,
5566 0x4d2c0000, 0x400a5800, 0x4a025a06, 0x00000002,
5567 0x0201f800, 0x000202da, 0x5c025800, 0x0401f7bc,
5568 0x592c040a, 0x8c00051c, 0x04000016, 0x592c0206,
5569 0x82000580, 0x0000ffff, 0x04020012, 0x592e6009,
5570 0x83300580, 0xffffffff, 0x040007b1, 0x83300480,
5571 0x0010d1c0, 0x04001010, 0x59a8000b, 0x81300480,
5572 0x0402100d, 0x59300008, 0x800001c0, 0x04020005,
5573 0x59300203, 0x82000580, 0x00000007, 0x04000797,
5574 0x492fc857, 0x4a025a06, 0x00000029, 0x0201f000,
5575 0x000202da, 0x492fc857, 0x4a025a06, 0x00000008,
5576 0x0201f000, 0x000202da, 0x492fc857, 0x4a025a06,
5577 0x00000045, 0x0201f000, 0x000202da, 0x492fc857,
5578 0x4a025a06, 0x0000002a, 0x0201f000, 0x000202da,
5579 0x492fc857, 0x4a025a06, 0x00000028, 0x0201f000,
5580 0x000202da, 0x492fc857, 0x4a025a06, 0x00000006,
5581 0x0201f000, 0x000202da, 0x492fc857, 0x4a025a06,
5582 0x0000000e, 0x0201f000, 0x000202da, 0x59340010,
5583 0x492e6810, 0x492fc857, 0x80000d40, 0x04000003,
5584 0x492c0800, 0x1c01f000, 0x5934040b, 0x492e680f,
5585 0x492fc857, 0x4803c857, 0x80000540, 0x04020003,
5586 0x4a026a03, 0x00000001, 0x1c01f000, 0x59a8000e,
5587 0x81640480, 0x0402176e, 0x42026000, 0x0010d1c0,
5588 0x59300009, 0x81340580, 0x04020004, 0x59300202,
5589 0x80040580, 0x04000759, 0x83326400, 0x00000024,
5590 0x41580000, 0x81300480, 0x040017f6, 0x0401f760,
5591 0x492fc857, 0x592c0407, 0x82000c80, 0x0000199a,
5592 0x040215f1, 0x592c0204, 0x80000112, 0x040205de,
5593 0x592e8a06, 0x0201f800, 0x00020245, 0x04020059,
5594 0x0201f800, 0x001049e7, 0x04020059, 0x592e780a,
5595 0x493fc857, 0x8d3e7d3e, 0x04020007, 0x59a80021,
5596 0x80000540, 0x0402004f, 0x0201f800, 0x00104838,
5597 0x040005dd, 0x833c1d00, 0x0000001f, 0x040005da,
5598 0x592c0207, 0x82000c80, 0x00001000, 0x040215d6,
5599 0x800000c2, 0x800008c4, 0x8005d400, 0x592e9008,
5600 0x592e9809, 0x5934080d, 0x800409c0, 0x0402002e,
5601 0x833c1d00, 0x0000001f, 0x81780040, 0x80000000,
5602 0x800c1902, 0x040217fe, 0x040205c7, 0x0c01f001,
5603 0x001056e9, 0x001056ec, 0x001056f9, 0x001056fc,
5604 0x001056ff, 0x0201f800, 0x0010903e, 0x0401f01a,
5605 0x0201f800, 0x0010480b, 0x04000027, 0x80e9d1c0,
5606 0x02020800, 0x00105fae, 0x42028000, 0x00000005,
5607 0x417a9000, 0x417a9800, 0x0201f800, 0x0010904e,
5608 0x0401f00d, 0x42027000, 0x0000004d, 0x0401f006,
5609 0x42027000, 0x0000004e, 0x0401f003, 0x42027000,
5610 0x00000052, 0x0201f800, 0x001046c9, 0x02020800,
5611 0x0010907e, 0x04000010, 0x8d3e7d3e, 0x04020017,
5612 0x1c01f000, 0x58040002, 0x80000540, 0x04020007,
5613 0x4d3c0000, 0x40067800, 0x0201f800, 0x001047eb,
5614 0x5c027800, 0x040207cb, 0x4a025a06, 0x00000030,
5615 0x0401f00d, 0x4a025a06, 0x0000002c, 0x0401f00a,
5616 0x4a025a06, 0x00000028, 0x0401f007, 0x4a025a06,
5617 0x00000029, 0x0401f004, 0x497a5c09, 0x4a025a06,
5618 0x00000000, 0x4a025a04, 0x00000103, 0x0201f000,
5619 0x000202da, 0x492fc857, 0x592c0204, 0x80000110,
5620 0x80000040, 0x04000002, 0x0401f56f, 0x592c0207,
5621 0x82000500, 0x000003ff, 0x48025a07, 0x8c000506,
5622 0x04000004, 0x82000500, 0x00000070, 0x04020004,
5623 0x59a80821, 0x800409c0, 0x04020018, 0x4a025a06,
5624 0x0000dead, 0x592c0408, 0x82000500, 0x0000f0ff,
5625 0x48025c08, 0x0201f800, 0x001043b4, 0x04020002,
5626 0x1c01f000, 0x49425a06, 0x8058b1c0, 0x04000009,
5627 0x0201f800, 0x0010955f, 0x0401f80f, 0x44042800,
5628 0x82580580, 0x00000002, 0x04020002, 0x48082801,
5629 0x0201f000, 0x000202da, 0x42028000, 0x00000031,
5630 0x42000800, 0x00000001, 0x4200b000, 0x00000001,
5631 0x0401f7ed, 0x592c0408, 0x80000118, 0x832c2c00,
5632 0x00000009, 0x80142c00, 0x1c01f000, 0x492fc857,
5633 0x4a025a08, 0x00000006, 0x0201f000, 0x000202da,
5634 0x492fc857, 0x4a025a08, 0x00000001, 0x0201f000,
5635 0x000202da, 0x492fc857, 0x592c040a, 0x82000500,
5636 0x00000003, 0x04000020, 0x0201f800, 0x0002075a,
5637 0x04000021, 0x592c0204, 0x492e6008, 0x82000500,
5638 0x000000ff, 0x82000580, 0x00000045, 0x0400000e,
5639 0x592c000b, 0x0201f800, 0x00105c9a, 0x02000800,
5640 0x00020245, 0x04020018, 0x42027000, 0x00000041,
5641 0x49366009, 0x4a026406, 0x00000001, 0x0201f000,
5642 0x000207a1, 0x59300015, 0x8400055e, 0x48026015,
5643 0x42026800, 0x0010b524, 0x42027000, 0x00000040,
5644 0x0401f7f4, 0x4a025a06, 0x00000101, 0x0201f000,
5645 0x000202da, 0x4a025a06, 0x0000002c, 0x0201f000,
5646 0x000202da, 0x4a025a06, 0x00000028, 0x0201f800,
5647 0x000202da, 0x0201f000, 0x0002077d, 0x492fc857,
5648 0x0201f800, 0x001062e1, 0x0400000b, 0x592c0204,
5649 0x80000110, 0x80000040, 0x040204fb, 0x592c0c06,
5650 0x800409c0, 0x04000009, 0x42000000, 0x00000102,
5651 0x0401f003, 0x42000000, 0x00000104, 0x48025a06,
5652 0x0201f000, 0x000202da, 0x592c0c07, 0x800409c0,
5653 0x04000024, 0x82040480, 0x00000005, 0x04021021,
5654 0x4c040000, 0x80040800, 0x0201f800, 0x00106306,
5655 0x5c001000, 0x04020018, 0x832c0400, 0x00000008,
5656 0x4000a000, 0x0201f800, 0x0010632f, 0x04020012,
5657 0x592c1207, 0x82cc0580, 0x0010b50e, 0x04020009,
5658 0x58c80c0b, 0x84040d00, 0x84040d02, 0x8c081500,
5659 0x04000002, 0x84040d5e, 0x4805940b, 0x0401f001,
5660 0x42000000, 0x00000000, 0x48025a06, 0x0201f000,
5661 0x000202da, 0x42000000, 0x00000103, 0x0401f7fb,
5662 0x42000000, 0x00000102, 0x0401f7f8, 0x492fc857,
5663 0x592e7c06, 0x833c0500, 0xfffffffe, 0x04020043,
5664 0x592c4007, 0x42026000, 0x0010d1c0, 0x41581800,
5665 0x400c0000, 0x81300480, 0x04021023, 0x59300203,
5666 0x82000580, 0x00000000, 0x04000007, 0x59300008,
5667 0x80000d40, 0x04000004, 0x58040005, 0x80200580,
5668 0x04000004, 0x83326400, 0x00000024, 0x0401f7f1,
5669 0x58040204, 0x82000500, 0x000000ff, 0x82000d80,
5670 0x00000053, 0x04000007, 0x82000d80, 0x00000048,
5671 0x04000004, 0x82000580, 0x00000018, 0x04020023,
5672 0x4d2c0000, 0x0201f800, 0x00108be3, 0x5c025800,
5673 0x0400001e, 0x4a025a06, 0x00000000, 0x0201f000,
5674 0x000202da, 0x592e8a06, 0x83440480, 0x000007f0,
5675 0x04021016, 0x83440400, 0x0010ac00, 0x50000000,
5676 0x80026d40, 0x04000011, 0x4d2c0000, 0x0201f800,
5677 0x001047cb, 0x0400000c, 0x42028000, 0x00000005,
5678 0x592c0a08, 0x0201f800, 0x00104e70, 0x0201f800,
5679 0x001091cc, 0x0201f800, 0x000202da, 0x5c025800,
5680 0x0401f7e5, 0x5c025800, 0x4a025a06, 0x00000031,
5681 0x0201f000, 0x000202da, 0x492fc857, 0x4d2c0000,
5682 0x0201f800, 0x001007e4, 0x04000016, 0x492fc857,
5683 0x412f4000, 0x0201f800, 0x001007e4, 0x0400000e,
5684 0x492fc857, 0x412dd800, 0x0201f800, 0x00103b28,
5685 0x0201f800, 0x00103b32, 0x49a1d80b, 0x5c025800,
5686 0x492dd80a, 0x0201f800, 0x00102214, 0x0201f000,
5687 0x00102233, 0x41a25800, 0x0201f800, 0x001007f4,
5688 0x5c025800, 0x4a025a06, 0x00004005, 0x4a025c06,
5689 0x00000002, 0x0201f000, 0x000202da, 0x4807c857,
5690 0x485fc857, 0x4200b800, 0x00000001, 0x5c000800,
5691 0x4c5c0000, 0x0401f005, 0x4807c857, 0x485fc857,
5692 0x5c000800, 0x4d780000, 0x4803c857, 0x492fc857,
5693 0x8c00050e, 0x02020800, 0x001005d0, 0x4203e000,
5694 0x50000000, 0x4200b800, 0x00008003, 0x0201f000,
5695 0x001005dd, 0x592c0204, 0x80000110, 0x80000040,
5696 0x04020441, 0x0201f800, 0x00104a34, 0x04020002,
5697 0x1c01f000, 0x49425a06, 0x4806580d, 0x480a580e,
5698 0x4943c857, 0x4807c857, 0x480bc857, 0x0201f000,
5699 0x000202da, 0x592c0204, 0x80000110, 0x80000040,
5700 0x04020431, 0x0201f800, 0x00104b8b, 0x04020002,
5701 0x1c01f000, 0x49425a06, 0x48065811, 0x480a5812,
5702 0x0201f000, 0x000202da, 0x592c0204, 0x80000110,
5703 0x04000425, 0x80000040, 0x0402000c, 0x4202e000,
5704 0x00000001, 0x592c020a, 0x8c000504, 0x02000000,
5705 0x000204d0, 0x592c0207, 0x82000c80, 0x00001001,
5706 0x04021429, 0x0401f009, 0x4202e000, 0x00000003,
5707 0x48033002, 0x492f3003, 0x492f3004, 0x4a033008,
5708 0x000204d0, 0x1c01f000, 0x4202e000, 0x00000002,
5709 0x42000000, 0x0010beda, 0x50007000, 0x492c700b,
5710 0x4978700e, 0x4978700c, 0x592c0011, 0x592c0812,
5711 0x48007007, 0x48047008, 0x592c1013, 0x82080500,
5712 0xffff0000, 0x04000003, 0x0201f800, 0x001005d8,
5713 0x4978700d, 0x82080480, 0x00000180, 0x4803c857,
5714 0x04001007, 0x4800700f, 0x4a007005, 0x00000180,
5715 0x4a007004, 0x00000060, 0x0401f005, 0x4978700f,
5716 0x48087005, 0x80081104, 0x48087004, 0x5838000a,
5717 0x48007003, 0x40381000, 0x0201f000, 0x00100858,
5718 0x0201f800, 0x001007d3, 0x04000003, 0x59980007,
5719 0x0801f000, 0x1c01f000, 0x40307000, 0x5838000b,
5720 0x80025d40, 0x0400001b, 0x58380002, 0x82000580,
5721 0x00000100, 0x0400001d, 0x4c380000, 0x592c0204,
5722 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
5723 0x0400000b, 0x592c0208, 0x8400054e, 0x48025a08,
5724 0x4a025a06, 0x00000002, 0x4a025a04, 0x00000103,
5725 0x0201f800, 0x000202c1, 0x0401f005, 0x4a025a06,
5726 0x00000010, 0x0201f800, 0x000202da, 0x5c007000,
5727 0x4202e000, 0x00000001, 0x4a007002, 0x00000100,
5728 0x49787010, 0x1c01f000, 0x58380004, 0x82000480,
5729 0x00000003, 0x04000087, 0x58380010, 0x8c000500,
5730 0x04020019, 0x4200b000, 0x00000003, 0x832cac00,
5731 0x00000011, 0x5838000a, 0x5838100d, 0x8008a400,
5732 0x4c380000, 0x0201f800, 0x0010ab17, 0x5c007000,
5733 0x5838000d, 0x82000400, 0x00000003, 0x4800700d,
5734 0x4a007010, 0x00000001, 0x58380004, 0x82000480,
5735 0x00000003, 0x48007004, 0x82000580, 0x00000003,
5736 0x0400006c, 0x5838000e, 0x80001d40, 0x04020020,
5737 0x4c380000, 0x0201f800, 0x001007d3, 0x5c007000,
5738 0x04000010, 0x4a025a04, 0x0000010a, 0x42001800,
5739 0x00000005, 0x480c700e, 0x5838000c, 0x80000540,
5740 0x04020002, 0x5838000b, 0x40000800, 0x492c0801,
5741 0x492c700c, 0x42000800, 0x0000000f, 0x0401f011,
5742 0x4202e000, 0x00000008, 0x4a033007, 0x00105915,
5743 0x1c01f000, 0x4202e000, 0x00000002, 0x42000000,
5744 0x0010beda, 0x50007000, 0x0401f7e7, 0x583a580c,
5745 0x400c0000, 0x42000800, 0x00000014, 0x80040c80,
5746 0x58381004, 0x5838000f, 0x41783000, 0x80000540,
5747 0x04020005, 0x84183540, 0x82081480, 0x00000003,
5748 0x0400003c, 0x40080000, 0x80040480, 0x04001002,
5749 0x40080800, 0x4004b000, 0x412c0000, 0x800c0400,
5750 0x4000a800, 0x5838000a, 0x5838100d, 0x8008a400,
5751 0x4c080000, 0x4c040000, 0x4c0c0000, 0x4c380000,
5752 0x0201f800, 0x0010ab17, 0x5c007000, 0x5c001800,
5753 0x5c000800, 0x40040000, 0x58381004, 0x80080480,
5754 0x48007004, 0x82000580, 0x00000003, 0x04000002,
5755 0x84183500, 0x5c000000, 0x80041400, 0x82080480,
5756 0x00000060, 0x04020003, 0x84183542, 0x41781000,
5757 0x400c0000, 0x80041c00, 0x820c0480, 0x00000014,
5758 0x04020003, 0x84183544, 0x40001800, 0x40080800,
5759 0x4804700d, 0x480c700e, 0x40180000, 0x0c01f001,
5760 0x00105960, 0x00105964, 0x00105962, 0x00105960,
5761 0x001058fc, 0x00105964, 0x00105962, 0x00105960,
5762 0x0201f800, 0x001005d8, 0x5838100f, 0x0401f739,
5763 0x5838080d, 0x82040400, 0x00000002, 0x5838100a,
5764 0x80080400, 0x50001000, 0x800811c0, 0x0402000f,
5765 0x4202e000, 0x00000001, 0x583a580b, 0x4978700b,
5766 0x49787010, 0x592c0204, 0x82000500, 0x000000ff,
5767 0x82000580, 0x00000012, 0x02000000, 0x00020507,
5768 0x0201f000, 0x000204d0, 0x5838000a, 0x80040c00,
5769 0x82381c00, 0x00000007, 0x54041800, 0x80040800,
5770 0x800c1800, 0x54041800, 0x0401f71a, 0x0201f800,
5771 0x001007d3, 0x02000800, 0x001005d8, 0x4a02580a,
5772 0x0010be79, 0x42000800, 0x0010beda, 0x452c0800,
5773 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e,
5774 0x497a580f, 0x4a025809, 0x001058b6, 0x497a5810,
5775 0x4a025802, 0x00000100, 0x4a025801, 0x00000001,
5776 0x1c01f000, 0x59c80007, 0x8c000502, 0x04000070,
5777 0x835c2c80, 0x00000005, 0x02001000, 0x00105f23,
5778 0x59c82817, 0x497b9005, 0x82140500, 0x00e00000,
5779 0x0402004f, 0x82140500, 0x000003ff, 0x82001c00,
5780 0x00000006, 0x41cc2000, 0x42003000, 0x00006080,
5781 0x820c0480, 0x00000040, 0x04001006, 0x42001000,
5782 0x00000040, 0x820c1c80, 0x00000040, 0x0401f003,
5783 0x400c1000, 0x41781800, 0x54182000, 0x80102000,
5784 0x80183000, 0x80081040, 0x040207fc, 0x800c19c0,
5785 0x04000005, 0x59c80005, 0x80000000, 0x48039005,
5786 0x0401f7ea, 0x82140500, 0x01f60000, 0x04020029,
5787 0x82140500, 0x0000f000, 0x0400000b, 0x82000c80,
5788 0x00002000, 0x0402100f, 0x82140500, 0x0e000000,
5789 0x80000132, 0x0c01f840, 0x4a039005, 0x00000140,
5790 0x1c01f000, 0x59cc0400, 0x82000500, 0x0000ff00,
5791 0x82000580, 0x00008100, 0x040007f4, 0x0401f01c,
5792 0x4817c857, 0x82140500, 0x000003ff, 0x04020007,
5793 0x59cc0400, 0x82000500, 0x0000ff00, 0x82000580,
5794 0x00008100, 0x04020012, 0x42000000, 0x0010b8bd,
5795 0x0201f800, 0x0010aa47, 0x0201f800, 0x00105dfa,
5796 0x4803c856, 0x4a039005, 0x00000140, 0x0401f020,
5797 0x4817c857, 0x82140500, 0x00f60000, 0x04020004,
5798 0x0201f800, 0x00105e35, 0x040207d2, 0x0201f800,
5799 0x0010513b, 0x04000010, 0x59c400a4, 0x4803c857,
5800 0x82000500, 0x0000000f, 0x82000580, 0x0000000a,
5801 0x04020009, 0x497b5016, 0x59c400a3, 0x82000540,
5802 0x00080000, 0x480388a3, 0x82000500, 0xfff7ffff,
5803 0x480388a3, 0x4817c856, 0x0201f800, 0x0010a978,
5804 0x4a039005, 0x00000140, 0x0401f842, 0x4803c856,
5805 0x1c01f000, 0x00105a1d, 0x00105cf4, 0x00105a15,
5806 0x00105a15, 0x00105a15, 0x00105a15, 0x00105a15,
5807 0x00105a15, 0x4803c857, 0x42000000, 0x0010b85a,
5808 0x0201f800, 0x0010aa47, 0x4a039005, 0x00000140,
5809 0x1c01f000, 0x4817c857, 0x59cc0400, 0x4803c857,
5810 0x82000d00, 0x0000ff00, 0x82041500, 0x0000f000,
5811 0x840409c0, 0x82140500, 0x000003ff, 0x800018c4,
5812 0x8c142d14, 0x04000005, 0x59cc0002, 0x82000500,
5813 0x00000003, 0x800c1c80, 0x480f5016, 0x82080580,
5814 0x00002000, 0x04020011, 0x836c0580, 0x00000001,
5815 0x0402000c, 0x59cc0006, 0x82000500, 0xff000000,
5816 0x82000580, 0x11000000, 0x04020011, 0x0201f800,
5817 0x00103b38, 0x0201f800, 0x00105f48, 0x0401f00c,
5818 0x0401f81f, 0x0401f00a, 0x82080580, 0x00003000,
5819 0x04020003, 0x0401fa06, 0x0401f005, 0x82080580,
5820 0x00008000, 0x04020002, 0x0401fafc, 0x1c01f000,
5821 0x4817c857, 0x42000000, 0x0010b859, 0x0201f800,
5822 0x0010aa47, 0x836c0580, 0x00000003, 0x0402000b,
5823 0x4c080000, 0x4c0c0000, 0x42001000, 0x00008048,
5824 0x40141800, 0x80142120, 0x0201f800, 0x00103a3e,
5825 0x5c001800, 0x5c001000, 0x1c01f000, 0x4807c857,
5826 0x59cc0002, 0x82000500, 0xff000000, 0x82001580,
5827 0x01000000, 0x04000004, 0x82001580, 0x23000000,
5828 0x04020192, 0x82040580, 0x00000023, 0x0402003f,
5829 0x0401fb6a, 0x0400018d, 0x59300c06, 0x82040580,
5830 0x00000010, 0x04000013, 0x82040580, 0x00000011,
5831 0x04000010, 0x82040580, 0x00000001, 0x0400000d,
5832 0x82040580, 0x00000004, 0x0400000a, 0x82040580,
5833 0x00000008, 0x04000007, 0x82040580, 0x0000000a,
5834 0x04000004, 0x4933c857, 0x4807c857, 0x0401f177,
5835 0x59300004, 0x82000500, 0x80010000, 0x04000004,
5836 0x0201f800, 0x00106f60, 0x04020170, 0x59cc0a04,
5837 0x48066202, 0x59cc0006, 0x82000500, 0xffff0000,
5838 0x82000d80, 0x02000000, 0x04020005, 0x42027000,
5839 0x00000015, 0x0201f000, 0x000207a1, 0x82000d80,
5840 0x02140000, 0x040007fa, 0x82000d80, 0x02100000,
5841 0x040007f7, 0x82000d80, 0x02100000, 0x040007f4,
5842 0x82000d80, 0x01000000, 0x04020158, 0x59cc0006,
5843 0x82000500, 0x0000ffff, 0x04020154, 0x42027000,
5844 0x00000016, 0x0401f7ec, 0x82040580, 0x00000022,
5845 0x0402014e, 0x59a80806, 0x8c040d14, 0x04000011,
5846 0x0401f967, 0x0402000f, 0x0401f97d, 0x0400000d,
5847 0x42027000, 0x0000004c, 0x59cc0001, 0x82000500,
5848 0x00ffffff, 0x0201f800, 0x00105eec, 0x0400012a,
5849 0x42028800, 0x0000ffff, 0x417a6800, 0x0401f126,
5850 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
5851 0x03000000, 0x04020021, 0x59a80026, 0x8c000508,
5852 0x04000017, 0x8400054c, 0x48035026, 0x59cc0800,
5853 0x82040d00, 0x00ffffff, 0x48075010, 0x497b8830,
5854 0x84040d70, 0x48078832, 0x59c40802, 0x84040d4c,
5855 0x48078802, 0x59cc0007, 0x82000500, 0x0000ffff,
5856 0x48038893, 0x4803501e, 0x42000800, 0x00000003,
5857 0x59a81010, 0x0201f800, 0x00106c78, 0x59cc0006,
5858 0x82000500, 0x0000ffff, 0x04020118, 0x42027000,
5859 0x00000017, 0x0401f0d9, 0x82000d80, 0x04000000,
5860 0x04020011, 0x59cc0006, 0x82000500, 0x0000ffff,
5861 0x0402010e, 0x0201f800, 0x0010513b, 0x04000004,
5862 0x42027000, 0x0000001d, 0x0401f0cc, 0x59a80026,
5863 0x84000548, 0x48035026, 0x42027000, 0x00000030,
5864 0x0401f0c6, 0x82000d80, 0x05000000, 0x04020008,
5865 0x59cc0006, 0x82000500, 0x0000ffff, 0x040200fb,
5866 0x42027000, 0x00000018, 0x0401f0bc, 0x82000d80,
5867 0x20100000, 0x04020004, 0x42027000, 0x00000019,
5868 0x0401f0b6, 0x82000d80, 0x21100000, 0x04020004,
5869 0x42027000, 0x0000001a, 0x0401f0b0, 0x82000d80,
5870 0x52000000, 0x04020008, 0x59cc0006, 0x82000500,
5871 0x0000ffff, 0x040200e5, 0x42027000, 0x0000001b,
5872 0x0401f0a6, 0x82000d80, 0x50000000, 0x04020008,
5873 0x59cc0006, 0x82000500, 0x0000ffff, 0x040200db,
5874 0x42027000, 0x0000001c, 0x0401f09c, 0x82000d80,
5875 0x13000000, 0x04020004, 0x42027000, 0x00000034,
5876 0x0401f096, 0x82000d80, 0x12000000, 0x04020008,
5877 0x59cc0006, 0x82000500, 0x0000ffff, 0x040200cb,
5878 0x42027000, 0x00000024, 0x0401f08c, 0x82000d00,
5879 0xff000000, 0x82040d80, 0x24000000, 0x04020004,
5880 0x42027000, 0x0000002d, 0x0401f084, 0x82000d00,
5881 0xff000000, 0x82040d80, 0x53000000, 0x04020004,
5882 0x42027000, 0x0000002a, 0x0401f07c, 0x82000d80,
5883 0x0f000000, 0x04020004, 0x42027000, 0x00000020,
5884 0x0401f076, 0x82000d80, 0x61040000, 0x04020036,
5885 0x83cc1400, 0x00000006, 0x80080800, 0x50080000,
5886 0x82000500, 0x0000ffff, 0x82000480, 0x00000004,
5887 0x4c580000, 0x8000b104, 0x8058b1c0, 0x04000026,
5888 0x4c100000, 0x50041800, 0x820c1500, 0x03000000,
5889 0x80081130, 0x42000000, 0x0010b817, 0x82082580,
5890 0x00000000, 0x04020004, 0x42000000, 0x0010b814,
5891 0x0401f00c, 0x82082580, 0x00000001, 0x04020004,
5892 0x42000000, 0x0010b815, 0x0401f006, 0x82082580,
5893 0x00000002, 0x04020003, 0x42000000, 0x0010b816,
5894 0x0201f800, 0x0010aa47, 0x42001000, 0x00008015,
5895 0x820c2500, 0x0000ffff, 0x800c1920, 0x0201f800,
5896 0x00103a3e, 0x5c002000, 0x80040800, 0x8058b040,
5897 0x040207da, 0x5c00b000, 0x42027000, 0x00000023,
5898 0x0401f03e, 0x82000d80, 0x60000000, 0x04020004,
5899 0x42027000, 0x0000003f, 0x0401f038, 0x82000d80,
5900 0x54000000, 0x04020006, 0x0401fb12, 0x0402006f,
5901 0x42027000, 0x00000046, 0x0401f030, 0x82000d80,
5902 0x55000000, 0x04020009, 0x0401fb32, 0x04020004,
5903 0x42027000, 0x00000041, 0x0401f028, 0x42027000,
5904 0x00000042, 0x0401f025, 0x82000d80, 0x78000000,
5905 0x04020004, 0x42027000, 0x00000045, 0x0401f01f,
5906 0x82000d80, 0x10000000, 0x04020004, 0x42027000,
5907 0x0000004e, 0x0401f019, 0x82000d80, 0x63000000,
5908 0x04020004, 0x42027000, 0x0000004a, 0x0401f013,
5909 0x82000d00, 0xff000000, 0x82040d80, 0x56000000,
5910 0x04020004, 0x42027000, 0x0000004f, 0x0401f00b,
5911 0x82000d00, 0xff000000, 0x82040d80, 0x57000000,
5912 0x04020004, 0x42027000, 0x00000050, 0x0401f003,
5913 0x42027000, 0x0000001d, 0x59cc3800, 0x821c3d00,
5914 0x00ffffff, 0x821c0580, 0x00fffffe, 0x59cc0001,
5915 0x04020005, 0x40003000, 0x42028800, 0x000007fe,
5916 0x0401f003, 0x0401f8d1, 0x04020030, 0x0201f800,
5917 0x001045a6, 0x0402002d, 0x83380580, 0x00000046,
5918 0x04020004, 0x59a80010, 0x80180580, 0x04000027,
5919 0x59340200, 0x8c000514, 0x0400000f, 0x83380580,
5920 0x00000030, 0x0400000c, 0x83380580, 0x0000003f,
5921 0x04000009, 0x83380580, 0x00000034, 0x04000006,
5922 0x83380580, 0x00000024, 0x04000003, 0x42027000,
5923 0x0000004c, 0x0201f800, 0x0002075a, 0x04000018,
5924 0x49366009, 0x4a026406, 0x00000004, 0x59cc0c04,
5925 0x48066202, 0x83380580, 0x0000004c, 0x04020009,
5926 0x4a026406, 0x00000011, 0x813669c0, 0x04020005,
5927 0x59cc0001, 0x82000500, 0x00ffffff, 0x4802601e,
5928 0x0201f000, 0x000207a1, 0x59880052, 0x4803c857,
5929 0x80000000, 0x48031052, 0x1c01f000, 0x42001000,
5930 0x00008049, 0x59cc1806, 0x800c1930, 0x0201f800,
5931 0x00103a3e, 0x0201f800, 0x00107942, 0x040007f3,
5932 0x49366009, 0x4a026406, 0x00000004, 0x59cc0c04,
5933 0x48066202, 0x4a026403, 0x00000009, 0x4a02641a,
5934 0x00000009, 0x4a02621a, 0x00002900, 0x4a026203,
5935 0x00000001, 0x0201f000, 0x0010672b, 0x59a80026,
5936 0x4803c857, 0x8c000508, 0x04000010, 0x59cc0006,
5937 0x82000500, 0xff000000, 0x82000d80, 0x03000000,
5938 0x0400000c, 0x82000d80, 0x20000000, 0x04000009,
5939 0x82000d80, 0x05000000, 0x04000006, 0x82000d80,
5940 0x21000000, 0x04000003, 0x80000580, 0x1c01f000,
5941 0x82000540, 0x00000001, 0x0401f7fd, 0x59cc2006,
5942 0x82102500, 0xff000000, 0x9c1021c0, 0x0401f807,
5943 0x820c1c00, 0x0010b4e3, 0x500c1800, 0x800c0500,
5944 0x4803c857, 0x1c01f000, 0x40100800, 0x41781800,
5945 0x82040480, 0x00000020, 0x04001004, 0x800c1800,
5946 0x40000800, 0x0401f7fb, 0x82040500, 0x0000000f,
5947 0x82000400, 0x0010ab38, 0x50000000, 0x8c040d08,
5948 0x04000002, 0x900001c0, 0x1c01f000, 0x4803c856,
5949 0x0401fac3, 0x0402000a, 0x0201f800, 0x0010210a,
5950 0x04020007, 0x59cc0002, 0x82000500, 0xff000000,
5951 0x82000d80, 0x08000000, 0x04000802, 0x1c01f000,
5952 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00,
5953 0x840409c0, 0x82040580, 0x00000033, 0x0402001f,
5954 0x0401f976, 0x04000038, 0x59cc0a04, 0x48066202,
5955 0x59cc0006, 0x4803c857, 0x82000500, 0xffff0000,
5956 0x82000d80, 0x02000000, 0x04020009, 0x59cc0006,
5957 0x82000500, 0x0000ffff, 0x0402002b, 0x42027000,
5958 0x00000015, 0x0201f000, 0x000207a1, 0x82000d80,
5959 0x01000000, 0x04020024, 0x59cc0006, 0x82000500,
5960 0x0000ffff, 0x04020020, 0x42027000, 0x00000016,
5961 0x0201f000, 0x000207a1, 0x82040580, 0x00000032,
5962 0x04020019, 0x59cc0006, 0x82000500, 0xffff0000,
5963 0x82000d80, 0x14000000, 0x04020013, 0x42027000,
5964 0x00000038, 0x59cc0001, 0x0401f810, 0x0402000e,
5965 0x0201f800, 0x001045a6, 0x0402000b, 0x0201f800,
5966 0x0002075a, 0x04000008, 0x49366009, 0x4a026406,
5967 0x00000004, 0x59cc0c04, 0x48066202, 0x0201f000,
5968 0x000207a1, 0x1c01f000, 0x4803c857, 0x4c580000,
5969 0x4c100000, 0x4c380000, 0x4c340000, 0x82003500,
5970 0x00ffffff, 0x82181500, 0x00ff0000, 0x82081580,
5971 0x00ff0000, 0x04020016, 0x82181480, 0x00fffffc,
5972 0x04001013, 0x82181580, 0x00fffffd, 0x04020004,
5973 0x42028800, 0x000007fd, 0x0401f040, 0x82181580,
5974 0x00fffffe, 0x04020004, 0x42028800, 0x000007fe,
5975 0x0401f03a, 0x82181580, 0x00fffffc, 0x04020004,
5976 0x42028800, 0x000007fc, 0x0401f034, 0x41781000,
5977 0x42002000, 0x00000000, 0x4200b000, 0x000007f0,
5978 0x41ac7000, 0x50380000, 0x80006d40, 0x04020005,
5979 0x800811c0, 0x0402001e, 0x8410155e, 0x0401f01c,
5980 0x58340212, 0x82000500, 0x0000ff00, 0x04000011,
5981 0x59a84010, 0x82204500, 0x00ffff00, 0x82180500,
5982 0x00ffff00, 0x04000002, 0x80200580, 0x58340002,
5983 0x0402000f, 0x82000500, 0x000000ff, 0x82184500,
5984 0x000000ff, 0x80204580, 0x04020009, 0x0401f006,
5985 0x58340002, 0x82000500, 0x00ffffff, 0x80184580,
5986 0x04020003, 0x40128800, 0x0401f00c, 0x80102000,
5987 0x80387000, 0x8058b040, 0x040207db, 0x800811c0,
5988 0x04020005, 0x481bc857, 0x82000540, 0x00000001,
5989 0x0401f003, 0x840a8d1e, 0x80000580, 0x5c006800,
5990 0x5c007000, 0x5c002000, 0x5c00b000, 0x1c01f000,
5991 0x59a80026, 0x8c00050e, 0x04000003, 0x8c000502,
5992 0x04000006, 0x59cc0c00, 0x80040910, 0x82040500,
5993 0x0000000f, 0x0c01f002, 0x1c01f000, 0x00105d0f,
5994 0x00105d0f, 0x00105d0f, 0x00105de5, 0x00105d0f,
5995 0x00105d11, 0x00105d29, 0x00105d2c, 0x00105d0f,
5996 0x00105d0f, 0x00105d0f, 0x00105d0f, 0x00105d0f,
5997 0x00105d0f, 0x00105d0f, 0x00105d0f, 0x4803c856,
5998 0x1c01f000, 0x0401f8c5, 0x04000014, 0x82140500,
5999 0x000003ff, 0x800000c4, 0x82000480, 0x00000008,
6000 0x0400100e, 0x59cc0001, 0x59326809, 0x59340802,
6001 0x80040580, 0x82000500, 0x00ffffff, 0x04020007,
6002 0x59cc0a04, 0x48066202, 0x42027000, 0x00000046,
6003 0x0201f000, 0x000207a1, 0x59cc0004, 0x4803c857,
6004 0x1c01f000, 0x59cc0004, 0x4803c857, 0x1c01f000,
6005 0x0401f8aa, 0x04000016, 0x82140500, 0x000003ff,
6006 0x800000c4, 0x82000480, 0x0000000c, 0x04001010,
6007 0x59cc0001, 0x82000500, 0x00ffffff, 0x59326809,
6008 0x59340802, 0x82040d00, 0x00ffffff, 0x80040580,
6009 0x04020007, 0x59cc0a04, 0x48066202, 0x42027000,
6010 0x00000045, 0x0201f000, 0x000207a1, 0x59cc0004,
6011 0x4803c857, 0x1c01f000, 0x4817c857, 0x0401f9c8,
6012 0x04020011, 0x0201f800, 0x0010210a, 0x0402000e,
6013 0x59cc0002, 0x82000500, 0xff000000, 0x82000580,
6014 0x00000000, 0x04020008, 0x82040500, 0x0000000f,
6015 0x82000c80, 0x00000006, 0x04021003, 0x4803c857,
6016 0x0c01f002, 0x1c01f000, 0x00105d60, 0x00105d64,
6017 0x00105d60, 0x00105d60, 0x00105db2, 0x00105dc3,
6018 0x4803c857, 0x59cc0004, 0x4803c857, 0x1c01f000,
6019 0x59cc0004, 0x4803c857, 0x59a80016, 0x800001c0,
6020 0x040207f8, 0x59cc0802, 0x8c040d2e, 0x0402001d,
6021 0x0201f800, 0x00107942, 0x02000800, 0x001005d8,
6022 0x59cc0001, 0x4803c857, 0x0401ff28, 0x0402000d,
6023 0x0201f800, 0x00020245, 0x0402000a, 0x4a026406,
6024 0x00000005, 0x49366009, 0x59cc0c04, 0x48066202,
6025 0x42027000, 0x00000088, 0x0201f000, 0x000207a1,
6026 0x42028800, 0x0000ffff, 0x417a6800, 0x59cc0001,
6027 0x82000500, 0x00ffffff, 0x4802601e, 0x0401f7f0,
6028 0x59cc0001, 0x4803c857, 0x0401ff10, 0x040207d5,
6029 0x0201f800, 0x001045a6, 0x040207d2, 0x59cc0005,
6030 0x8c000500, 0x04020004, 0x59340200, 0x8c00050e,
6031 0x040207cc, 0x0201f800, 0x001049f3, 0x0402000f,
6032 0x0401f83e, 0x040007c7, 0x0201f800, 0x0002075a,
6033 0x040007c4, 0x49366009, 0x4a026406, 0x00000002,
6034 0x59cc0c04, 0x48066202, 0x42027000, 0x00000088,
6035 0x0201f000, 0x000207a1, 0x0201f800, 0x0002075a,
6036 0x040007b8, 0x49366009, 0x4a026406, 0x00000004,
6037 0x59cc0c04, 0x48066202, 0x42027000, 0x00000001,
6038 0x0201f000, 0x000207a1, 0x59cc0004, 0x4803c857,
6039 0x59cc0802, 0x8c040d2e, 0x0400000b, 0x0401f81f,
6040 0x04000009, 0x0401f960, 0x04020007, 0x59cc0a04,
6041 0x48066202, 0x42027000, 0x00000089, 0x0201f000,
6042 0x000207a1, 0x4933c857, 0x1c01f000, 0x59cc0004,
6043 0x4803c857, 0x59cc0802, 0x8c040d2e, 0x0400000b,
6044 0x0401f80e, 0x04000009, 0x0401f94f, 0x04020007,
6045 0x59cc0a04, 0x48066202, 0x42027000, 0x0000008a,
6046 0x0201f000, 0x000207a1, 0x4933c857, 0x1c01f000,
6047 0x59cc0a04, 0x0401f002, 0x59cc0c04, 0x59a8000e,
6048 0x59a81067, 0x80080400, 0x80040480, 0x04021008,
6049 0x40040000, 0x800000c4, 0x800408ca, 0x80040c00,
6050 0x82066400, 0x0010d1c0, 0x1c01f000, 0x80000580,
6051 0x0401f7fe, 0x59cc0802, 0x8c040d2e, 0x04020010,
6052 0x0401ffec, 0x0400000e, 0x59cc0001, 0x82000500,
6053 0x00ffffff, 0x59326809, 0x59340802, 0x82040d00,
6054 0x00ffffff, 0x80040580, 0x04020005, 0x42027000,
6055 0x00000051, 0x0201f000, 0x000207a1, 0x59cc0004,
6056 0x4803c857, 0x1c01f000, 0x4803c856, 0x42003000,
6057 0x00000105, 0x0401f001, 0x4803c856, 0x4c3c0000,
6058 0x41cc7800, 0x0401f803, 0x5c007800, 0x1c01f000,
6059 0x4803c856, 0x4c580000, 0x583c0400, 0x82000500,
6060 0x0000f000, 0x82000580, 0x0000c000, 0x04000024,
6061 0x0201f800, 0x0002075a, 0x04000021, 0x4c180000,
6062 0x583c0001, 0x0401fe89, 0x0402001f, 0x0201f800,
6063 0x001045a6, 0x0402001c, 0x49366009, 0x0201f800,
6064 0x001007e4, 0x04000018, 0x492e6017, 0x497a5800,
6065 0x497a5a04, 0x48125c04, 0x832cac00, 0x00000005,
6066 0x4200b000, 0x00000007, 0x403ca000, 0x0201f800,
6067 0x0010ab17, 0x5c003000, 0x481a641a, 0x4a026403,
6068 0x0000003e, 0x4a026406, 0x00000001, 0x4a026203,
6069 0x00000001, 0x0201f800, 0x0010672b, 0x5c00b000,
6070 0x1c01f000, 0x0201f800, 0x0002077d, 0x5c003000,
6071 0x0401f7fb, 0x4803c856, 0x59cc0400, 0x82000d00,
6072 0x0000ff00, 0x82040500, 0x0000f000, 0x840409c0,
6073 0x82000580, 0x00002000, 0x04020049, 0x82040580,
6074 0x00000022, 0x0402003a, 0x59c400a4, 0x82000500,
6075 0x0000000f, 0x82000c80, 0x00000007, 0x04001004,
6076 0x82000480, 0x0000000c, 0x0400103f, 0x59cc0006,
6077 0x82000500, 0xffff0000, 0x82000d80, 0x04000000,
6078 0x04000039, 0x82000d80, 0x60000000, 0x04000036,
6079 0x82000d80, 0x54000000, 0x04000033, 0x82000d80,
6080 0x03000000, 0x04020015, 0x59a80826, 0x8c040d02,
6081 0x0402002d, 0x8c040d08, 0x0402002b, 0x0201f800,
6082 0x001048ec, 0x0400002b, 0x59a8001d, 0x800000d0,
6083 0x59a80810, 0x82040d00, 0x000000ff, 0x80040540,
6084 0x59cc0800, 0x82040d00, 0x00ffffff, 0x80040580,
6085 0x0402001b, 0x0401f01c, 0x59c40802, 0x8c040d0c,
6086 0x04020017, 0x82000d80, 0x52000000, 0x040007ec,
6087 0x82000d80, 0x05000000, 0x040007e9, 0x82000d80,
6088 0x50000000, 0x040007e6, 0x0401f00d, 0x82040580,
6089 0x00000023, 0x0402000a, 0x0401ff58, 0x04000008,
6090 0x59300c03, 0x82040580, 0x00000002, 0x04000006,
6091 0x82040580, 0x00000051, 0x04000003, 0x80000580,
6092 0x0401f003, 0x82000540, 0x00000001, 0x1c01f000,
6093 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
6094 0x03000000, 0x04000004, 0x82000d80, 0x52000000,
6095 0x040207f3, 0x59a80026, 0x82000500, 0x00000009,
6096 0x82000580, 0x00000008, 0x040007ef, 0x0401f7ec,
6097 0x4803c856, 0x4c5c0000, 0x4c580000, 0x59a80016,
6098 0x82000580, 0x0000004c, 0x0402001f, 0x59ccb807,
6099 0x9c5cb9c0, 0x825cbd00, 0x00000007, 0x8c5cbd00,
6100 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
6101 0x00000002, 0x83cc1400, 0x0000000d, 0x0201f800,
6102 0x0010855a, 0x04020010, 0x8c5cbd02, 0x0400000a,
6103 0x4200b000, 0x00000002, 0x83a81c00, 0x00000000,
6104 0x83cc1400, 0x0000000f, 0x0201f800, 0x0010855a,
6105 0x04020005, 0x8c5cbd04, 0x04000003, 0x82000540,
6106 0x00000001, 0x5c00b000, 0x5c00b800, 0x1c01f000,
6107 0x4803c856, 0x4c5c0000, 0x4c580000, 0x59a80016,
6108 0x82000580, 0x0000004c, 0x0402001f, 0x59ccb807,
6109 0x9c5cb9c0, 0x825cbd00, 0x00000007, 0x8c5cbd00,
6110 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
6111 0x00000002, 0x83cc1400, 0x00000009, 0x0201f800,
6112 0x0010855a, 0x04020010, 0x8c5cbd02, 0x0400000a,
6113 0x4200b000, 0x00000002, 0x83a81c00, 0x00000000,
6114 0x83cc1400, 0x0000000b, 0x0201f800, 0x0010855a,
6115 0x04020005, 0x8c5cbd04, 0x04000003, 0x82000540,
6116 0x00000001, 0x5c00b000, 0x5c00b800, 0x1c01f000,
6117 0x4803c857, 0x4c580000, 0x40003000, 0x42002000,
6118 0x000007f0, 0x4200b000, 0x00000010, 0x83ac7400,
6119 0x000007f0, 0x50380000, 0x80026d40, 0x04000006,
6120 0x59340002, 0x82000500, 0x00ffffff, 0x80180580,
6121 0x04000010, 0x80102000, 0x80387000, 0x8058b040,
6122 0x040207f5, 0x82100480, 0x00000800, 0x42002000,
6123 0x00000000, 0x4200b000, 0x000007f0, 0x41ac7000,
6124 0x040217ed, 0x82000540, 0x00000001, 0x0401f002,
6125 0x40128800, 0x5c00b000, 0x1c01f000, 0x59a80026,
6126 0x8c00050e, 0x04000004, 0x8c000502, 0x04000003,
6127 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
6128 0x0401f7fd, 0x59300c06, 0x82040580, 0x00000002,
6129 0x04000006, 0x82040580, 0x00000005, 0x04000003,
6130 0x82000540, 0x00000001, 0x1c01f000, 0x59c80000,
6131 0x84000558, 0x84000512, 0x48039000, 0x1c01f000,
6132 0x4a03281a, 0x000003e8, 0x4a032802, 0x0010d1c0,
6133 0x4a032800, 0x00000000, 0x4a032808, 0x00107049,
6134 0x42000000, 0x00000005, 0x83947c00, 0x00000009,
6135 0x49787801, 0x4a007802, 0x00106fff, 0x823c7c00,
6136 0x00000003, 0x80000040, 0x040207fa, 0x4a032819,
6137 0xffff0000, 0x4201d000, 0x00000064, 0x0401f96e,
6138 0x4201d000, 0x000186a0, 0x0401f184, 0x00000000,
6139 0x00000003, 0x00000006, 0x00000009, 0x0000000c,
6140 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4d400000,
6141 0x4cfc0000, 0x4d380000, 0x4d3c0000, 0x4d440000,
6142 0x4d4c0000, 0x4d480000, 0x4c5c0000, 0x4c600000,
6143 0x4c640000, 0x4cc80000, 0x4ccc0000, 0x0201f800,
6144 0x0002057b, 0x5c019800, 0x5c019000, 0x5c00c800,
6145 0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800,
6146 0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800,
6147 0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000,
6148 0x1c01f000, 0x59940004, 0x80000540, 0x0402000a,
6149 0x59940025, 0x80040400, 0x02001800, 0x001005d8,
6150 0x48032804, 0x480b2805, 0x4a032803, 0x0000000a,
6151 0x80000580, 0x1c01f000, 0x5994001f, 0x80000540,
6152 0x0402000a, 0x59940025, 0x80040400, 0x02001800,
6153 0x001005d8, 0x4803281f, 0x480b2820, 0x4a03281e,
6154 0x00000001, 0x80000580, 0x1c01f000, 0x59940022,
6155 0x80000540, 0x0402000a, 0x59940025, 0x80040400,
6156 0x02001800, 0x001005d8, 0x48032822, 0x480b2823,
6157 0x4a032821, 0x0000000a, 0x80000580, 0x1c01f000,
6158 0x4c000000, 0x59940005, 0x4803c857, 0x480bc857,
6159 0x80080580, 0x04020003, 0x497b2804, 0x497b2805,
6160 0x5c000000, 0x1c01f000, 0x4c000000, 0x59940020,
6161 0x4803c857, 0x480bc857, 0x80080580, 0x04020003,
6162 0x497b281f, 0x497b2820, 0x5c000000, 0x1c01f000,
6163 0x4c000000, 0x59940023, 0x4803c857, 0x480bc857,
6164 0x80080580, 0x04020003, 0x497b2822, 0x497b2823,
6165 0x5c000000, 0x1c01f000, 0x4937c857, 0x48ebc857,
6166 0x59340203, 0x80e80480, 0x04001002, 0x48ea6a03,
6167 0x1c01f000, 0x5c03e000, 0x1c01f000, 0x4d440000,
6168 0x42007800, 0x00000010, 0x59968801, 0x0201f800,
6169 0x00020245, 0x04020012, 0x59341a03, 0x800c1840,
6170 0x0400100f, 0x59940027, 0x800c0480, 0x04000003,
6171 0x48026a03, 0x0402100a, 0x5934000f, 0x497a6a03,
6172 0x80000540, 0x04000006, 0x4c3c0000, 0x5934140b,
6173 0x0201f800, 0x00020253, 0x5c007800, 0x81468800,
6174 0x83440480, 0x00000800, 0x04021007, 0x803c7840,
6175 0x040207e7, 0x49472801, 0x5c028800, 0x5c03e000,
6176 0x1c01f000, 0x4a032800, 0x00000002, 0x497b2801,
6177 0x0401f7fa, 0x42007800, 0x00000010, 0x59966002,
6178 0x59300205, 0x80000d40, 0x04000006, 0x59940027,
6179 0x80040480, 0x48026205, 0x0400102d, 0x0400002c,
6180 0x59300206, 0x80000d40, 0x04000014, 0x59b800e4,
6181 0x8c000524, 0x04020011, 0x4a0370e4, 0x00030000,
6182 0x40000000, 0x59b800e4, 0x8c000524, 0x04000004,
6183 0x4a0370e4, 0x00020000, 0x0401f008, 0x59940027,
6184 0x80040480, 0x48026206, 0x4a0370e4, 0x00020000,
6185 0x0400101c, 0x0400001b, 0x83326400, 0x00000024,
6186 0x49332802, 0x41540000, 0x81300480, 0x04021005,
6187 0x803c7840, 0x040207db, 0x5c03e000, 0x1c01f000,
6188 0x59940026, 0x48032827, 0x4a032802, 0x0010d1c0,
6189 0x497b2826, 0x80000540, 0x0400000f, 0x4a032800,
6190 0x00000001, 0x5c03e000, 0x1c01f000, 0x4c3c0000,
6191 0x0201f800, 0x001091db, 0x5c007800, 0x0401f7d1,
6192 0x4c3c0000, 0x0201f800, 0x00108d5d, 0x5c007800,
6193 0x0401f7e2, 0x4a032800, 0x00000000, 0x5c03e000,
6194 0x1c01f000, 0x59a8086b, 0x8c040d30, 0x04020029,
6195 0x8c040d32, 0x0400000f, 0x59a80069, 0x81640480,
6196 0x04001019, 0x59a8000b, 0x81500580, 0x04000005,
6197 0x59a8006a, 0x59a81066, 0x80080580, 0x04020012,
6198 0x900411c0, 0x82081500, 0x00007000, 0x0401f012,
6199 0x82040500, 0x0000001f, 0x04000016, 0x80040840,
6200 0x82040500, 0x0000001f, 0x04000003, 0x4807506b,
6201 0x0401f010, 0x900401c0, 0x82000500, 0x0000001f,
6202 0x80040d40, 0x900401c0, 0x80040580, 0x82001500,
6203 0x00007000, 0x82040500, 0xffff8fff, 0x80080540,
6204 0x4803506b, 0x80081114, 0x0201f800, 0x001006e2,
6205 0x1c01f000, 0x4a032807, 0x000007d0, 0x4a032806,
6206 0x0000000a, 0x1c01f000, 0x42000800, 0x000007d0,
6207 0x83180480, 0x00000005, 0x02021800, 0x001005d8,
6208 0x83947c00, 0x00000009, 0x83180400, 0x00105f43,
6209 0x50000000, 0x803c7c00, 0x48047801, 0x4a007800,
6210 0x0000000a, 0x1c01f000, 0x83180480, 0x00000005,
6211 0x02021800, 0x001005d8, 0x83947c00, 0x00000009,
6212 0x83180400, 0x00105f43, 0x50000000, 0x803c7c00,
6213 0x49787801, 0x1c01f000, 0x4807c857, 0x480bc857,
6214 0x59940025, 0x80040400, 0x02001800, 0x001005d8,
6215 0x48032804, 0x480b2805, 0x4a032803, 0x0000000a,
6216 0x1c01f000, 0x4807c857, 0x480bc857, 0x59940025,
6217 0x80040400, 0x02001800, 0x001005d8, 0x4803281c,
6218 0x480b281d, 0x4a03281b, 0x0000000a, 0x1c01f000,
6219 0x4c000000, 0x5994001d, 0x4803c857, 0x480bc857,
6220 0x80080580, 0x04020003, 0x4803281c, 0x4803281d,
6221 0x5c000000, 0x1c01f000, 0x80e9d1c0, 0x0400000e,
6222 0x0401f836, 0x04025000, 0x4203e000, 0x80000000,
6223 0x40e81000, 0x41780800, 0x42000000, 0x00000064,
6224 0x0201f800, 0x001066a0, 0x59940024, 0x80080400,
6225 0x48032824, 0x1c01f000, 0x42001000, 0x00105065,
6226 0x0401fef0, 0x42001000, 0x00105058, 0x0401ffe1,
6227 0x42001000, 0x00104148, 0x0401feea, 0x42001000,
6228 0x001041bc, 0x0401fee7, 0x42001000, 0x001041f3,
6229 0x0401f6f8, 0x4203e000, 0x70000000, 0x4203e000,
6230 0xb0300000, 0x41fc0000, 0x40ebf800, 0x80e80480,
6231 0x04001011, 0x04000004, 0x82000480, 0x00000003,
6232 0x0402100d, 0x42000000, 0x0000000f, 0x04004004,
6233 0x80000040, 0x040207fe, 0x0401f007, 0x4203e000,
6234 0x70000000, 0x42000000, 0x0010b87e, 0x0201f800,
6235 0x0010aa47, 0x1c01f000, 0x4203e000, 0x80000000,
6236 0x4203e000, 0xb0400000, 0x41fc0000, 0x40ebf800,
6237 0x80e80480, 0x04001011, 0x04000004, 0x82000480,
6238 0x00000003, 0x0402100d, 0x42000000, 0x0000000f,
6239 0x04005004, 0x80000040, 0x040207fe, 0x0401f007,
6240 0x4203e000, 0x80000000, 0x42000000, 0x0010b87f,
6241 0x0201f800, 0x0010aa47, 0x1c01f000, 0x59a8000e,
6242 0x82000480, 0x00000100, 0x599c0a02, 0x800409c0,
6243 0x04020002, 0x80040800, 0x80041480, 0x04001002,
6244 0x40000800, 0x48075067, 0x59a8100e, 0x40040000,
6245 0x800acc80, 0x4967500e, 0x49675069, 0x59aaa80b,
6246 0x41640800, 0x42001000, 0x00000024, 0x0201f800,
6247 0x00106681, 0x8206a400, 0x0010d1c0, 0x49535065,
6248 0x4152b000, 0x42006000, 0x0010be65, 0x4a006004,
6249 0x0000012c, 0x4a006005, 0xda10da10, 0x4a006008,
6250 0x00000011, 0x4a006009, 0x0010be65, 0x4a00600a,
6251 0x001010b8, 0x599c0014, 0x48006011, 0x599c0015,
6252 0x48006012, 0x42006000, 0x0010be41, 0x4a006203,
6253 0x00000008, 0x4a006406, 0x00000006, 0x4a006002,
6254 0xffff0000, 0x4a006008, 0x0010be65, 0x4a006014,
6255 0x0010be65, 0x599c0014, 0x48006015, 0x599c0015,
6256 0x48006016, 0x599c0413, 0x48006017, 0x49506018,
6257 0x49546019, 0x59a80067, 0x4800601a, 0x4a00601b,
6258 0x0010b465, 0x4a00601c, 0x0010b466, 0x4a00601d,
6259 0x0010b46a, 0x42000000, 0xb0000000, 0x42000800,
6260 0x0010be41, 0x0201f800, 0x00100b68, 0x1c01f000,
6261 0x82000d00, 0x000000c0, 0x04000004, 0x82040d80,
6262 0x000000c0, 0x04020055, 0x82000d00, 0x00002020,
6263 0x59300414, 0x84000512, 0x82040d80, 0x00002020,
6264 0x0400000b, 0x8c000514, 0x0402000f, 0x48026414,
6265 0x813e79c0, 0x02020000, 0x000206d0, 0x42027000,
6266 0x00000043, 0x0201f000, 0x000207a1, 0x59326809,
6267 0x59340a00, 0x8c040d0a, 0x040007f3, 0x84000552,
6268 0x0401f7f1, 0x84000514, 0x592c080d, 0x48066015,
6269 0x0401f7ef, 0x59326809, 0x59340a00, 0x8c040d0a,
6270 0x02000000, 0x000206e3, 0x59300c14, 0x84040d52,
6271 0x48066414, 0x0201f000, 0x000206e3, 0x0201f800,
6272 0x00020086, 0x813e79c0, 0x02020000, 0x000206d0,
6273 0x0201f000, 0x000206f1, 0x8c00051e, 0x02000000,
6274 0x000206fd, 0x82000d00, 0x00002020, 0x82040d80,
6275 0x00002020, 0x04000014, 0x82000500, 0x000000c0,
6276 0x82000d80, 0x00000080, 0x04000008, 0x813e79c0,
6277 0x02020000, 0x000206d0, 0x42027000, 0x00000041,
6278 0x0201f000, 0x000207a1, 0x813e79c0, 0x02020000,
6279 0x000206d0, 0x42027000, 0x00000043, 0x0201f000,
6280 0x000207a1, 0x59326809, 0x59340a00, 0x8c040d0a,
6281 0x040007ea, 0x59300c14, 0x84040d52, 0x48066414,
6282 0x0401f7e6, 0x492fc857, 0x42000800, 0x00000006,
6283 0x0201f000, 0x000206f8, 0x492fc857, 0x42000800,
6284 0x00000004, 0x0201f000, 0x000206f8, 0x4807c856,
6285 0x59a80068, 0x800409c0, 0x04000003, 0x80080540,
6286 0x0401f002, 0x80080500, 0x48035068, 0x1c01f000,
6287 0x4a030800, 0x00000000, 0x4a030802, 0x00000001,
6288 0x497b0803, 0x497b0804, 0x1c01f000, 0x59840002,
6289 0x8c000500, 0x04000004, 0x84000500, 0x4a030800,
6290 0x00000001, 0x84000544, 0x84000506, 0x48030802,
6291 0x82000d00, 0x0fffffff, 0x42000000, 0x90000000,
6292 0x0201f800, 0x00100b94, 0x59a80069, 0x82000480,
6293 0x00000007, 0x48035069, 0x80000580, 0x42000800,
6294 0x0010b519, 0x48000800, 0x48000801, 0x1c01f000,
6295 0x59a80069, 0x82000480, 0x00000007, 0x48035069,
6296 0x1c01f000, 0x83640480, 0x00000008, 0x0400101b,
6297 0x58c80a03, 0x80000580, 0x82000400, 0x00000008,
6298 0x80040840, 0x040207fd, 0x815c0480, 0x04001013,
6299 0x4200b000, 0x00000007, 0x0201f800, 0x0002075a,
6300 0x4a026203, 0x00000004, 0x4a026406, 0x00000009,
6301 0x4a026203, 0x00000004, 0x4a026007, 0x00000101,
6302 0x0401f809, 0x0401f880, 0x8058b040, 0x040207f3,
6303 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
6304 0x0401f7fd, 0x0201f800, 0x001007e4, 0x492e6008,
6305 0x58c80a03, 0x4a025a04, 0x0000002c, 0x497a5800,
6306 0x497a5801, 0x497a5c04, 0x497a5c06, 0x497a5805,
6307 0x4a025a08, 0x00000005, 0x4a025a07, 0x00000002,
6308 0x58c80201, 0x48025c04, 0x58c80202, 0x48025c07,
6309 0x58c80204, 0x48025c08, 0x4a02580d, 0x0000ffff,
6310 0x80040840, 0x0400000c, 0x412c2000, 0x0201f800,
6311 0x001007e4, 0x4a025a04, 0x0000000a, 0x497a5c04,
6312 0x48125800, 0x492c2001, 0x412c2000, 0x80040840,
6313 0x040207f7, 0x1c01f000, 0x4d7c0000, 0x4202f800,
6314 0x00000010, 0x4df00000, 0x4203e000, 0x50000000,
6315 0x59847803, 0x803c79c0, 0x0400001e, 0x4c5c0000,
6316 0x583cb808, 0x585c3408, 0x801831c0, 0x0400000b,
6317 0x0401f84a, 0x04000016, 0x42001000, 0x0010b519,
6318 0x0401f87f, 0x04000012, 0x0201f800, 0x001007d3,
6319 0x0400000f, 0x492cb805, 0x585c0005, 0x80000540,
6320 0x02000800, 0x001005d8, 0x0401f830, 0x585c5408,
6321 0x0401f80b, 0x5c00b800, 0x5c03e000, 0x817ef840,
6322 0x040207e1, 0x5c02f800, 0x1c01f000, 0x5c00b800,
6323 0x5c03e000, 0x5c02f800, 0x1c01f000, 0x4803c856,
6324 0x405c6000, 0x802851c0, 0x04000018, 0x585c0204,
6325 0x82000d00, 0x0000000f, 0x82040c00, 0x001010bd,
6326 0x50044000, 0x4cf00000, 0x4d000000, 0x4d040000,
6327 0x4021e000, 0x40320800, 0x59860004, 0x4c280000,
6328 0x0401f934, 0x5c005000, 0x40f04000, 0x41046000,
6329 0x0201f800, 0x0010109b, 0x040207f6, 0x5c020800,
6330 0x5c020000, 0x5c01e000, 0x58c80204, 0x4800bc08,
6331 0x0201f800, 0x00020086, 0x4a026007, 0x00000101,
6332 0x497a6009, 0x0401f055, 0x4803c856, 0x59840003,
6333 0x80026540, 0x04000003, 0x59300000, 0x48030803,
6334 0x1c01f000, 0x4803c856, 0x59840003, 0x48026000,
6335 0x49330803, 0x1c01f000, 0x58cc0805, 0x40180000,
6336 0x80040480, 0x0400100d, 0x82cc0580, 0x0010b50e,
6337 0x02020800, 0x001005d8, 0x58c80205, 0x80040480,
6338 0x0400101d, 0x82000540, 0x00000001, 0x1c01f000,
6339 0x80003580, 0x0401f7fe, 0x82cc0580, 0x0010b50e,
6340 0x02020800, 0x001005d8, 0x58c80400, 0x8c000504,
6341 0x040007f8, 0x58c8040b, 0x8c00051e, 0x040007f5,
6342 0x8c000500, 0x040207f3, 0x84000540, 0x4801940b,
6343 0x42000000, 0x0010b839, 0x0201f800, 0x0010aa47,
6344 0x42001000, 0x00008026, 0x0201f800, 0x00103a3e,
6345 0x0401f7e8, 0x58c8040b, 0x8c00051e, 0x040007e2,
6346 0x8c000502, 0x040207e0, 0x84000542, 0x4801940b,
6347 0x42000000, 0x0010b838, 0x0201f800, 0x0010aa47,
6348 0x42001000, 0x00008025, 0x42001800, 0x00000000,
6349 0x0201f800, 0x00103a3e, 0x0401f7d3, 0x4803c856,
6350 0x58080000, 0x42001800, 0x00000007, 0x58080801,
6351 0x80040480, 0x04020004, 0x400c0000, 0x80000540,
6352 0x0401f005, 0x04001003, 0x800c0480, 0x0401f002,
6353 0x80000080, 0x1c01f000, 0x4803c856, 0x59300008,
6354 0x80000d40, 0x02000800, 0x001005d8, 0x58040005,
6355 0x80000540, 0x02000800, 0x001005d8, 0x59300007,
6356 0x82000500, 0x00000101, 0x82000580, 0x00000101,
6357 0x02020800, 0x001005d8, 0x42001000, 0x0010b519,
6358 0x58080801, 0x82040400, 0x0010b51b, 0x497a6414,
6359 0x4a026015, 0x0000ffff, 0x45300000, 0x80040800,
6360 0x82040480, 0x00000008, 0x04001002, 0x80000d80,
6361 0x48041001, 0x82040400, 0x0010b51b, 0x45780000,
6362 0x1c01f000, 0x4933c857, 0x59300808, 0x800409c0,
6363 0x02000800, 0x001005d8, 0x4d2c0000, 0x58065805,
6364 0x812e59c0, 0x02020800, 0x001007f4, 0x49780805,
6365 0x40065800, 0x0201f800, 0x001007fd, 0x5c025800,
6366 0x4d300000, 0x0201f800, 0x0002077d, 0x5c026000,
6367 0x1c01f000, 0x59300406, 0x82000580, 0x00000009,
6368 0x04020006, 0x59300007, 0x8c000510, 0x04000003,
6369 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
6370 0x1c01f000, 0x59840802, 0x8c040d04, 0x1c01f000,
6371 0x4803c856, 0x59840802, 0x84040d04, 0x84040d40,
6372 0x4a030800, 0x00000000, 0x48070802, 0x82040d00,
6373 0x0fffffff, 0x42000000, 0x90000000, 0x0201f000,
6374 0x00100b94, 0x4807c857, 0x4805980a, 0x49799801,
6375 0x49799803, 0x49799806, 0x49799807, 0x49799808,
6376 0x49799805, 0x49799809, 0x0401f8c9, 0x0400000a,
6377 0x0401f8eb, 0x04000008, 0x48359800, 0x48359802,
6378 0x48359806, 0x4a019804, 0x00000001, 0x4a019807,
6379 0x00000005, 0x1c01f000, 0x4807c857, 0x58cc1007,
6380 0x40040000, 0x80080480, 0x04021020, 0x4c040000,
6381 0x4c080000, 0x0401f8da, 0x5c001000, 0x5c000800,
6382 0x0400001c, 0x58cc0006, 0x80006540, 0x0402000b,
6383 0x48359800, 0x48359802, 0x48359806, 0x49799801,
6384 0x49799803, 0x49786801, 0x49786800, 0x49799804,
6385 0x49799807, 0x0401f005, 0x48306801, 0x48346000,
6386 0x48359806, 0x49786800, 0x58cc0004, 0x58cc1007,
6387 0x80000000, 0x82081400, 0x00000005, 0x48019804,
6388 0x48099807, 0x0401f7df, 0x80000580, 0x1c01f000,
6389 0x82000540, 0x00000001, 0x1c01f000, 0x480bc857,
6390 0x4c500000, 0x4c540000, 0x4c580000, 0x40083000,
6391 0x58cc0801, 0x82040480, 0x00000005, 0x02021800,
6392 0x001005d8, 0x82040400, 0x00106418, 0x50000000,
6393 0x58cca800, 0x8054ac00, 0x42001800, 0x00000005,
6394 0x40040000, 0x800c0480, 0x80082480, 0x04021002,
6395 0x40080000, 0x8000b0c2, 0x8058b400, 0x5450a800,
6396 0x8050a000, 0x8054a800, 0x8058b040, 0x040207fc,
6397 0x40001000, 0x58cc2805, 0x58cc0807, 0x58cc2001,
6398 0x80142c00, 0x80040c80, 0x80102400, 0x48159805,
6399 0x48059807, 0x48119801, 0x82100580, 0x00000005,
6400 0x0400000c, 0x48119801, 0x40080000, 0x80181480,
6401 0x40083000, 0x04000003, 0x040217d6, 0x80000580,
6402 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000,
6403 0x58cc0800, 0x800409c0, 0x02000800, 0x001005d8,
6404 0x58040800, 0x48059800, 0x41782000, 0x0401f7ee,
6405 0x0401f813, 0x50f00000, 0x81040400, 0x40001800,
6406 0x585c0204, 0x4803c857, 0x82000580, 0x0000002c,
6407 0x02020800, 0x001005d8, 0x58040202, 0x800000e0,
6408 0x81000540, 0x48001802, 0x58040000, 0x48001800,
6409 0x58040001, 0x48001801, 0x1c01f000, 0x4807c856,
6410 0x58cc0005, 0x80000040, 0x02001800, 0x001005d8,
6411 0x48019805, 0x58cc1003, 0x82080480, 0x00000005,
6412 0x02021800, 0x001005d8, 0x82080400, 0x00106418,
6413 0x50000000, 0x58cc0802, 0x80040c00, 0x80081000,
6414 0x82080480, 0x00000005, 0x0402000f, 0x58cc2002,
6415 0x58100000, 0x80006d40, 0x04000009, 0x4c340000,
6416 0x0401f858, 0x5c006800, 0x49786801, 0x48359802,
6417 0x58cc0004, 0x80000040, 0x48019804, 0x49799803,
6418 0x0401f002, 0x48099803, 0x1c01f000, 0x4807c856,
6419 0x41781800, 0x58c80201, 0x80000540, 0x04000002,
6420 0x800c1800, 0x58c80c01, 0x80040c80, 0x0400100a,
6421 0x04000009, 0x800c1800, 0x58c80202, 0x80041480,
6422 0x04001005, 0x04000004, 0x800c1800, 0x40080800,
6423 0x0401f7fb, 0x480d9204, 0x400c0000, 0x42002000,
6424 0x00000001, 0x80000040, 0x04000007, 0x04001006,
6425 0x80102000, 0x82000480, 0x00000005, 0x04000002,
6426 0x040217fc, 0x48119203, 0x1c01f000, 0x4807c856,
6427 0x4d2c0000, 0x58cc000a, 0x80000540, 0x02000800,
6428 0x001005d8, 0x82002400, 0x00000005, 0x0201f800,
6429 0x001007d3, 0x04000012, 0x492d9809, 0x497a5800,
6430 0x497a5801, 0x0201f800, 0x001007d3, 0x0400000c,
6431 0x58cc0009, 0x48025800, 0x497a5801, 0x492d9809,
6432 0x82102480, 0x00000005, 0x040217f7, 0x82000540,
6433 0x00000001, 0x5c025800, 0x1c01f000, 0x58cc0009,
6434 0x80025d40, 0x040007fc, 0x592c2000, 0x0201f800,
6435 0x001007f4, 0x40100000, 0x0401f7fa, 0x58cc0009,
6436 0x48cfc857, 0x80006d40, 0x04000005, 0x50340000,
6437 0x48019809, 0x49786800, 0x49786801, 0x1c01f000,
6438 0x4813c857, 0x58cc0009, 0x48002000, 0x48119809,
6439 0x1c01f000, 0x4807c856, 0x4d2c0000, 0x58cc0009,
6440 0x80025d40, 0x04000007, 0x592c0000, 0x4c000000,
6441 0x0201f800, 0x001007f4, 0x5c000000, 0x0401f7f9,
6442 0x5c025800, 0x1c01f000, 0x4807c856, 0x4d2c0000,
6443 0x58cc0002, 0x80025d40, 0x04000007, 0x592c0000,
6444 0x4c000000, 0x0201f800, 0x001007f4, 0x5c000000,
6445 0x0401f7f9, 0x49799800, 0x49799802, 0x49799801,
6446 0x49799803, 0x49799806, 0x49799807, 0x49799808,
6447 0x49799809, 0x4979980a, 0x5c025800, 0x1c01f000,
6448 0x00000003, 0x00000006, 0x00000009, 0x0000000c,
6449 0x0000000f, 0x00000012, 0x4803c856, 0x0401f857,
6450 0x4a00c204, 0x0000003c, 0x59301009, 0x82080580,
6451 0x0010b524, 0x04000013, 0x58080802, 0x82040d00,
6452 0x00ffffff, 0x58080403, 0x4804c005, 0x4800c406,
6453 0x4a00c207, 0x00000003, 0x59300811, 0x585c0404,
6454 0x4978c206, 0x4804c407, 0x80000540, 0x0400000d,
6455 0x58600206, 0x84000540, 0x4800c206, 0x0401f009,
6456 0x585c080a, 0x82040d00, 0x00ffffff, 0x4804c005,
6457 0x4a00c406, 0x000007ff, 0x4978c207, 0x0401f7ef,
6458 0x82603c00, 0x00000008, 0x58605404, 0x40282000,
6459 0x405c6000, 0x585c0a04, 0x82040d00, 0x0000000f,
6460 0x82040c00, 0x001010bd, 0x50044000, 0x80004d80,
6461 0x50200000, 0x80307400, 0x58380402, 0x8c244d00,
6462 0x04020003, 0x48003a00, 0x0401f003, 0x48003c00,
6463 0x801c3800, 0x80244800, 0x80102040, 0x04000006,
6464 0x0201f800, 0x0010109b, 0x02000800, 0x001005d8,
6465 0x0401f7f0, 0x1c01f000, 0x4803c856, 0x4d340000,
6466 0x59300009, 0x80026d40, 0x02000800, 0x001005d8,
6467 0x59340401, 0x80000540, 0x0400000e, 0x59840000,
6468 0x80000540, 0x0400000b, 0x836c0580, 0x00000003,
6469 0x04020008, 0x59341c03, 0x42002000, 0x00000004,
6470 0x42003000, 0x00000004, 0x0201f800, 0x00103aae,
6471 0x5c026800, 0x1c01f000, 0x4803c856, 0x80001580,
6472 0x58c80c01, 0x59300011, 0x80040c80, 0x48066011,
6473 0x58c80201, 0x80000540, 0x04000005, 0x80081000,
6474 0x80040c80, 0x04001007, 0x04000006, 0x58c80202,
6475 0x80081000, 0x80040c80, 0x04001002, 0x040207fd,
6476 0x4808bc08, 0x4808c404, 0x1c01f000, 0x4803c856,
6477 0x4a0370e5, 0x00020000, 0x59b800e5, 0x8c000524,
6478 0x040207fc, 0x4a0370e5, 0x00030000, 0x40000000,
6479 0x40000000, 0x59b800e5, 0x8c000524, 0x040207f5,
6480 0x5934000e, 0x80006d40, 0x04000010, 0x81300580,
6481 0x04020004, 0x58340000, 0x4802680e, 0x0401f00a,
6482 0x40347800, 0x58340000, 0x80006d40, 0x02000800,
6483 0x001005d8, 0x81300580, 0x040207fa, 0x58340000,
6484 0x48007800, 0x497a6000, 0x4a0370e5, 0x00020000,
6485 0x1c01f000, 0x4803c856, 0x4d300000, 0x4d2c0000,
6486 0x42000800, 0x000003ff, 0x4a0370e5, 0x00020000,
6487 0x59b800e5, 0x8c000524, 0x04000005, 0x80040840,
6488 0x040207fa, 0x0201f800, 0x001005d8, 0x4a0370e5,
6489 0x00030000, 0x40000000, 0x40000000, 0x59b800e5,
6490 0x8c000524, 0x040207f1, 0x5934000e, 0x80026540,
6491 0x0400000e, 0x4933c857, 0x59300000, 0x4802680e,
6492 0x4a026203, 0x00000004, 0x497a6206, 0x497a6009,
6493 0x4a026007, 0x00000101, 0x59325808, 0x497a5c08,
6494 0x0401fd81, 0x0401f7f1, 0x4a0370e5, 0x00020000,
6495 0x5c025800, 0x5c026000, 0x1c01f000, 0x4803c856,
6496 0x4c000000, 0x0201f800, 0x00105c9a, 0x04020011,
6497 0x0201f800, 0x001045a6, 0x02020800, 0x001005d8,
6498 0x5c000000, 0x48026802, 0x0201f800, 0x0002075a,
6499 0x04000009, 0x49366009, 0x4a026406, 0x00000001,
6500 0x42027000, 0x00000001, 0x0201f000, 0x000207a1,
6501 0x5c000000, 0x1c01f000, 0x59300203, 0x82000c80,
6502 0x0000000e, 0x02021800, 0x001005d8, 0x4803c857,
6503 0x0c01f001, 0x00106503, 0x00106503, 0x00106503,
6504 0x00106505, 0x00106565, 0x00106503, 0x00106503,
6505 0x001065b7, 0x001065b8, 0x00106503, 0x00106503,
6506 0x00106503, 0x00106503, 0x00106503, 0x0201f800,
6507 0x001005d8, 0x493bc857, 0x83380480, 0x00000050,
6508 0x02021800, 0x001005d8, 0x83380480, 0x00000049,
6509 0x02001800, 0x001005d8, 0x0c01f001, 0x00106518,
6510 0x0010653a, 0x00106516, 0x00106516, 0x00106516,
6511 0x00106516, 0x00106549, 0x0201f800, 0x001005d8,
6512 0x4d2c0000, 0x59325808, 0x592c0206, 0x48025c06,
6513 0x4a025a06, 0x00000000, 0x4c5c0000, 0x592cbc0a,
6514 0x592c0000, 0x48026008, 0x0201f800, 0x00104cde,
6515 0x59300008, 0x80000540, 0x04000008, 0x4a026203,
6516 0x00000007, 0x42027000, 0x00000043, 0x5c00b800,
6517 0x5c025800, 0x0401f08a, 0x8c5cbd08, 0x04020006,
6518 0x4a026203, 0x00000007, 0x497a6206, 0x497a6008,
6519 0x0401f003, 0x0201f800, 0x0002077d, 0x5c00b800,
6520 0x5c025800, 0x1c01f000, 0x0201f800, 0x00106b8a,
6521 0x4d2c0000, 0x59325808, 0x0201f800, 0x00109037,
6522 0x04000006, 0x4d400000, 0x42028000, 0x00000001,
6523 0x0401f8f8, 0x5c028000, 0x5c025800, 0x0201f000,
6524 0x0002077d, 0x0201f800, 0x00106b8a, 0x4d3c0000,
6525 0x417a7800, 0x0201f800, 0x0010203c, 0x5c027800,
6526 0x42003000, 0x00000014, 0x0201f800, 0x0010a942,
6527 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
6528 0x4d2c0000, 0x59325808, 0x0201f800, 0x00109037,
6529 0x04000006, 0x4d400000, 0x42028000, 0x00000029,
6530 0x0401f8dc, 0x5c028000, 0x5c025800, 0x0201f000,
6531 0x0002077d, 0x493bc857, 0x497a6206, 0x83380480,
6532 0x00000054, 0x02021800, 0x001005d8, 0x83380480,
6533 0x00000047, 0x02001800, 0x001005d8, 0x0c01f001,
6534 0x001065b6, 0x0010657f, 0x0010657d, 0x0010657d,
6535 0x0010657d, 0x0010657d, 0x0010657d, 0x0010657d,
6536 0x0010657d, 0x0010657d, 0x0010657d, 0x0010657d,
6537 0x00106583, 0x0201f800, 0x001005d8, 0x59300011,
6538 0x82000500, 0xffff0000, 0x04020034, 0x59840802,
6539 0x8c040d04, 0x04000025, 0x59300009, 0x80026d40,
6540 0x0400001f, 0x4c5c0000, 0x4c600000, 0x497a6206,
6541 0x5930b808, 0x585c0005, 0x8000c540, 0x02000800,
6542 0x001005d8, 0x0401fe8d, 0x40625800, 0x0201f800,
6543 0x00104cde, 0x4978b805, 0x0401fef5, 0x497a6009,
6544 0x585c3408, 0x0401fcbd, 0x0400000e, 0x42001000,
6545 0x0010b519, 0x0401fcf2, 0x0400000a, 0x0201f800,
6546 0x001007e4, 0x04000007, 0x492cb805, 0x585c5408,
6547 0x0401fc83, 0x5c00c000, 0x5c00b800, 0x1c01f000,
6548 0x0401fca9, 0x0401f7fc, 0x8c040d06, 0x040207fc,
6549 0x59300009, 0x80026d40, 0x04000006, 0x5934000e,
6550 0x80000540, 0x02020800, 0x001005d8, 0x497a6009,
6551 0x0401fd0d, 0x0401f7f2, 0x0401f06f, 0x4803c856,
6552 0x4803c856, 0x83380580, 0x00000043, 0x02020800,
6553 0x001005d8, 0x4a026203, 0x00000003, 0x493a6403,
6554 0x59325808, 0x592c000f, 0x48026011, 0x497a6013,
6555 0x592c0406, 0x800000c2, 0x800010c4, 0x80081400,
6556 0x480a6206, 0x0201f800, 0x00100f4e, 0x42000800,
6557 0x80000060, 0x0401f154, 0x42000000, 0x0010b875,
6558 0x0201f800, 0x0010aa47, 0x59300203, 0x82000c80,
6559 0x0000000e, 0x02021800, 0x001005d8, 0x4803c857,
6560 0x82000d80, 0x00000003, 0x04000006, 0x82000d80,
6561 0x00000004, 0x04000045, 0x0201f800, 0x001005d8,
6562 0x0201f800, 0x00106c55, 0x59300004, 0x8c00053e,
6563 0x04020007, 0x0201f800, 0x00106b6c, 0x02020800,
6564 0x001005d8, 0x0201f000, 0x00106c4b, 0x0401f9c3,
6565 0x0201f800, 0x00106c4b, 0x59325808, 0x42028000,
6566 0x00000006, 0x0401f84b, 0x0201f000, 0x0002077d,
6567 0x4803c856, 0x59300203, 0x82000c80, 0x0000000e,
6568 0x02021800, 0x001005d8, 0x82000d80, 0x00000003,
6569 0x04000006, 0x82000d80, 0x00000004, 0x04000023,
6570 0x0201f800, 0x001005d8, 0x4803c856, 0x0201f800,
6571 0x00106c55, 0x4df00000, 0x59300004, 0x8c00053e,
6572 0x04020006, 0x0201f800, 0x00106f60, 0x02020800,
6573 0x001005d8, 0x0401f010, 0x0201f800, 0x00108cd6,
6574 0x04020004, 0x0201f800, 0x00106e62, 0x0402000a,
6575 0x0401f99a, 0x02020800, 0x001005d8, 0x5c03e000,
6576 0x02000800, 0x00106c4b, 0x82000540, 0x00000001,
6577 0x1c01f000, 0x5c03e000, 0x02000800, 0x00106c4b,
6578 0x80000580, 0x1c01f000, 0x4933c857, 0x0201f800,
6579 0x00100e99, 0x4933c857, 0x4c5c0000, 0x4d340000,
6580 0x497a6206, 0x5930b808, 0x59300009, 0x80026d40,
6581 0x04020e5f, 0x42001000, 0x0010b519, 0x0401fc60,
6582 0x04000009, 0x58c80204, 0x4800bc08, 0x41785000,
6583 0x0201f800, 0x00106227, 0x5c026800, 0x5c00b800,
6584 0x1c01f000, 0x4978bc08, 0x0401fc17, 0x0401f7fb,
6585 0x4803c856, 0x0201f800, 0x00109037, 0x0400000f,
6586 0x592c0000, 0x80000d40, 0x04000009, 0x497a5800,
6587 0x49425a06, 0x4c040000, 0x0201f800, 0x000202da,
6588 0x5c000800, 0x40065800, 0x0401f7f6, 0x49425a06,
6589 0x0201f800, 0x000202da, 0x1c01f000, 0x4933c857,
6590 0x59300c06, 0x82040580, 0x0000000e, 0x04000004,
6591 0x82040580, 0x00000009, 0x04020004, 0x0401ffe5,
6592 0x497a6008, 0x80000580, 0x1c01f000, 0x592e6009,
6593 0x83300480, 0x0010d1c0, 0x04001016, 0x41580000,
6594 0x81300480, 0x04021013, 0x40040000, 0x59300c06,
6595 0x80040580, 0x04020012, 0x59300a03, 0x82040580,
6596 0x00000007, 0x02020800, 0x001005d8, 0x59300008,
6597 0x80000540, 0x02020800, 0x001005d8, 0x0201f800,
6598 0x0002077d, 0x42000000, 0x00000000, 0x0401f009,
6599 0x42000000, 0x00000008, 0x0401f006, 0x82040580,
6600 0x00000007, 0x040207fb, 0x42000000, 0x00000005,
6601 0x592c0a06, 0x48065c06, 0x48025a06, 0x0201f000,
6602 0x000202da, 0x4c0c0000, 0x4c100000, 0x4c140000,
6603 0x4c180000, 0x80001d80, 0x80002580, 0x42003000,
6604 0x00000020, 0x82040500, 0x00000001, 0x04000003,
6605 0x40080000, 0x800c1c00, 0x400c2800, 0x800c1902,
6606 0x80102102, 0x82140500, 0x00000001, 0x04000003,
6607 0x82102540, 0x80000000, 0x80040902, 0x80183040,
6608 0x040207f1, 0x40100800, 0x400c0000, 0x5c003000,
6609 0x5c002800, 0x5c002000, 0x5c001800, 0x1c01f000,
6610 0x4c580000, 0x4200b000, 0x00000020, 0x80000540,
6611 0x04000018, 0x80041c80, 0x04021016, 0x800810c2,
6612 0x80040982, 0x04001006, 0x80041c80, 0x04021005,
6613 0x8058b040, 0x040207fa, 0x0401f006, 0x80041c80,
6614 0x400c0800, 0x80081000, 0x8058b040, 0x040207f4,
6615 0x4c000000, 0x41f00000, 0x82000500, 0xf7ffffff,
6616 0x4003e000, 0x5c000000, 0x5c00b000, 0x1c01f000,
6617 0x4c000000, 0x41f00000, 0x82000540, 0x08000000,
6618 0x0401f7f8, 0x4a0378e8, 0x00000000, 0x4a03c821,
6619 0x00000010, 0x4a03c823, 0x00000004, 0x0401f82c,
6620 0x4a0378e9, 0x00003a0d, 0x4a0378e8, 0x00000001,
6621 0x42000000, 0x00001000, 0x50000000, 0x82000480,
6622 0x24220001, 0x04000004, 0x59e00002, 0x84000548,
6623 0x4803c002, 0x42000800, 0x00000005, 0x4203a000,
6624 0x00007600, 0x42000000, 0x00001000, 0x50000000,
6625 0x82000480, 0x24320001, 0x04021003, 0x4a03a005,
6626 0xd0000001, 0x59d00006, 0x4a03a005, 0x90000001,
6627 0x83d3a400, 0x00000020, 0x80040840, 0x040207fa,
6628 0x59e00003, 0x82000500, 0xffffffe0, 0x82000540,
6629 0x00008000, 0x4803c003, 0x59c40006, 0x82000500,
6630 0xfffcffff, 0x48038806, 0x1c01f000, 0x4d900000,
6631 0x4d180000, 0x4a0378e7, 0xaaaaaaaa, 0x4a0378e6,
6632 0xaaaaaaaa, 0x4a0378e5, 0xaaaaaaaa, 0x4a0378e4,
6633 0xaaaaaaaa, 0x42000800, 0x0000bf00, 0x4a00081a,
6634 0x0010b7d4, 0x4a00081b, 0x001010bd, 0x4a00081c,
6635 0x001010cd, 0x4a031800, 0x00000000, 0x4a031801,
6636 0x0010b544, 0x4a031802, 0x0010b54b, 0x42000800,
6637 0x0010b7d7, 0x417a3000, 0x811b20c8, 0x83932400,
6638 0x0000bf32, 0x48072000, 0x4a032001, 0x00000000,
6639 0x83180400, 0x001070ea, 0x50000000, 0x48032002,
6640 0x82040c00, 0x00000003, 0x811a3000, 0x83180480,
6641 0x00000005, 0x040017f1, 0x5c023000, 0x5c032000,
6642 0x1c01f000, 0x48066004, 0x497a6000, 0x497a6001,
6643 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
6644 0xa0000000, 0x480378e1, 0x1c01f000, 0x4933c857,
6645 0x42000800, 0x80000040, 0x48066004, 0x497a6000,
6646 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
6647 0x60000000, 0x480378e1, 0x1c01f000, 0x0201f800,
6648 0x00106c55, 0x4df00000, 0x4d300000, 0x4d340000,
6649 0x4d2c0000, 0x4d180000, 0x4c5c0000, 0x4c600000,
6650 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
6651 0x42003000, 0x0000bf2e, 0x581a6001, 0x813261c0,
6652 0x0400002c, 0x41302800, 0x4178c000, 0x59300000,
6653 0x4c000000, 0x59326809, 0x5930b801, 0x59300406,
6654 0x82000d80, 0x00000006, 0x04020003, 0x8d3e7d18,
6655 0x04000010, 0x8d3e7d06, 0x04000007, 0x82000580,
6656 0x00000003, 0x04020004, 0x59340200, 0x8c00050e,
6657 0x04020008, 0x0401f92f, 0x4c0c0000, 0x4c140000,
6658 0x0401fb5f, 0x5c002800, 0x5c001800, 0x0401f005,
6659 0x41301800, 0x8060c1c0, 0x04020002, 0x400cc000,
6660 0x805cb9c0, 0x04000003, 0x405e6000, 0x0401f7e3,
6661 0x5c026000, 0x813261c0, 0x04000006, 0x8060c1c0,
6662 0x04000002, 0x40602800, 0x4178c000, 0x0401f7d8,
6663 0x417a3000, 0x0201f800, 0x001070d8, 0x59926004,
6664 0x813261c0, 0x04000023, 0x59326809, 0x4130c000,
6665 0x59300001, 0x8000bd40, 0x04000016, 0x40026000,
6666 0x40602800, 0x5930b801, 0x59300406, 0x82000d80,
6667 0x00000006, 0x0400000e, 0x8d3e7d06, 0x04000007,
6668 0x82000580, 0x00000003, 0x04020004, 0x59340200,
6669 0x8c00050e, 0x04020006, 0x0401f8dc, 0x4c140000,
6670 0x0401fb2f, 0x5c002800, 0x0401f002, 0x41302800,
6671 0x405e6000, 0x813261c0, 0x040207eb, 0x8060c1c0,
6672 0x04000004, 0x40626000, 0x4178c000, 0x0401f7e7,
6673 0x811a3000, 0x83180480, 0x00000005, 0x040017d6,
6674 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
6675 0x5c00c000, 0x5c00b800, 0x5c023000, 0x5c025800,
6676 0x5c026800, 0x5c026000, 0x5c03e000, 0x02000800,
6677 0x00106c4b, 0x1c01f000, 0x4933c857, 0x0201f800,
6678 0x00106c55, 0x4df00000, 0x4d340000, 0x4d180000,
6679 0x4d900000, 0x42003000, 0x0000bf2e, 0x59326809,
6680 0x58182001, 0x40102800, 0x801021c0, 0x04000016,
6681 0x41300000, 0x80100580, 0x04000011, 0x58100009,
6682 0x81340580, 0x0402000b, 0x40101800, 0x58102001,
6683 0x41300000, 0x801021c0, 0x0400000b, 0x80100d80,
6684 0x04000007, 0x40101800, 0x58102001, 0x0401f7fa,
6685 0x40102800, 0x58102000, 0x0401f7ec, 0x0401f8bd,
6686 0x0401f01a, 0x42032000, 0x0000bf32, 0x417a3000,
6687 0x59902004, 0x40102800, 0x801021c0, 0x0400000b,
6688 0x58100009, 0x81340580, 0x04020008, 0x41300000,
6689 0x80100580, 0x0400000c, 0x40102800, 0x58102001,
6690 0x801021c0, 0x040207fa, 0x811a3000, 0x83180480,
6691 0x00000005, 0x0402100d, 0x83932400, 0x00000010,
6692 0x0401f7ec, 0x0401f881, 0x5c032000, 0x5c023000,
6693 0x5c026800, 0x5c03e000, 0x02000800, 0x00106c4b,
6694 0x80000580, 0x1c01f000, 0x0401fb6f, 0x040007f7,
6695 0x5c032000, 0x5c023000, 0x5c026800, 0x5c03e000,
6696 0x02000800, 0x00106c4b, 0x82000540, 0x00000001,
6697 0x1c01f000, 0x0201f800, 0x00106c55, 0x4df00000,
6698 0x4d300000, 0x4d340000, 0x4d180000, 0x4d2c0000,
6699 0x4c5c0000, 0x4c600000, 0x4d900000, 0x4dd00000,
6700 0x4da40000, 0x4d140000, 0x42003000, 0x0000bf2e,
6701 0x581a6001, 0x813261c0, 0x04000023, 0x41302800,
6702 0x5930b800, 0x59326809, 0x59340403, 0x81440580,
6703 0x04000006, 0x805cb9c0, 0x0400001b, 0x41302800,
6704 0x405e6000, 0x0401f7f7, 0x5930b801, 0x8d3e7d00,
6705 0x04000003, 0x0401fb67, 0x0402000e, 0x59300406,
6706 0x82000580, 0x00000006, 0x04020003, 0x8d3e7d18,
6707 0x04000008, 0x0401f867, 0x4c0c0000, 0x4c140000,
6708 0x0401fa97, 0x5c002800, 0x5c001800, 0x0401f002,
6709 0x41301800, 0x405e6000, 0x813261c0, 0x040207eb,
6710 0x0401f02d, 0x417a3000, 0x0201f800, 0x001070d8,
6711 0x59926004, 0x813261c0, 0x04000005, 0x59326809,
6712 0x59340403, 0x81440580, 0x04000006, 0x811a3000,
6713 0x83180480, 0x00000005, 0x040017f4, 0x0401f01e,
6714 0x4130c000, 0x59300001, 0x8000bd40, 0x04000012,
6715 0x40026000, 0x40602800, 0x5930b801, 0x8d3e7d00,
6716 0x04000003, 0x0401fb3b, 0x0402000a, 0x59300406,
6717 0x82000580, 0x00000006, 0x04000006, 0x0401f81b,
6718 0x4c140000, 0x0401fa6e, 0x5c002800, 0x0401f002,
6719 0x41302800, 0x405e6000, 0x813261c0, 0x040207ef,
6720 0x8060c1c0, 0x04000004, 0x40626000, 0x4178c000,
6721 0x0401f7eb, 0x5c022800, 0x5c034800, 0x5c03a000,
6722 0x5c032000, 0x5c00c000, 0x5c00b800, 0x5c025800,
6723 0x5c023000, 0x5c026800, 0x5c026000, 0x5c03e000,
6724 0x04000be3, 0x1c01f000, 0x0401fbc8, 0x59900004,
6725 0x81300580, 0x04020018, 0x4c140000, 0x0201f800,
6726 0x00106dc3, 0x0401fbb8, 0x5c002800, 0x59300001,
6727 0x800001c0, 0x04020003, 0x497a680c, 0x1c01f000,
6728 0x42003000, 0x0000bf2e, 0x497a6001, 0x58180801,
6729 0x800409c0, 0x04020004, 0x48003000, 0x48003001,
6730 0x1c01f000, 0x58180800, 0x48000800, 0x48003000,
6731 0x1c01f000, 0x59300001, 0x48002801, 0x800001c0,
6732 0x04020002, 0x4816680c, 0x497a6001, 0x1c01f000,
6733 0x0401fba6, 0x42003000, 0x0000bf2e, 0x58180001,
6734 0x81300580, 0x0402001c, 0x59300801, 0x800409c0,
6735 0x0400000e, 0x59300000, 0x800001c0, 0x04020005,
6736 0x48043001, 0x48043000, 0x497a6001, 0x1c01f000,
6737 0x59300000, 0x48000800, 0x48043001, 0x497a6000,
6738 0x497a6001, 0x1c01f000, 0x59300800, 0x800409c0,
6739 0x04020005, 0x49783001, 0x49783000, 0x497a680c,
6740 0x1c01f000, 0x48043001, 0x497a6000, 0x497a680c,
6741 0x1c01f000, 0x58180000, 0x81300580, 0x0402000c,
6742 0x59300001, 0x800001c0, 0x04020005, 0x48143000,
6743 0x49782800, 0x497a680c, 0x1c01f000, 0x48003000,
6744 0x48002800, 0x497a6001, 0x1c01f000, 0x59300000,
6745 0x800001c0, 0x04020008, 0x59300001, 0x48001801,
6746 0x800001c0, 0x04020002, 0x480e680c, 0x497a6001,
6747 0x1c01f000, 0x59300801, 0x800409c0, 0x04020006,
6748 0x59300800, 0x48042800, 0x497a6000, 0x497a680c,
6749 0x1c01f000, 0x59300000, 0x48000800, 0x48042800,
6750 0x497a6000, 0x497a6001, 0x1c01f000, 0x0401fb82,
6751 0x4df00000, 0x0401f839, 0x040208c4, 0x04020945,
6752 0x04020a89, 0x04020005, 0x5c03e000, 0x04000b70,
6753 0x80000580, 0x1c01f000, 0x5c03e000, 0x04000b6c,
6754 0x82000540, 0x00000001, 0x1c01f000, 0x4d2c0000,
6755 0x4d340000, 0x4d300000, 0x41783000, 0x598e6009,
6756 0x813261c0, 0x04000021, 0x59300406, 0x82000580,
6757 0x00000006, 0x04020004, 0x8d3e7d18, 0x0402000a,
6758 0x0401f017, 0x82040580, 0x00000005, 0x04020006,
6759 0x8d3e7d16, 0x04000004, 0x59300420, 0x8c000500,
6760 0x0402000f, 0x0401fa4e, 0x59300000, 0x4c000000,
6761 0x8d3e7d06, 0x04000004, 0x0201f800, 0x001092d7,
6762 0x04000005, 0x0401f867, 0x4c180000, 0x0401f9bc,
6763 0x5c003000, 0x5c026000, 0x0401f7e2, 0x41303000,
6764 0x59326000, 0x0401f7df, 0x5c026000, 0x5c026800,
6765 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c5c0000,
6766 0x813261c0, 0x02000800, 0x001005d8, 0x41300000,
6767 0x598cb809, 0x41783000, 0x805cb9c0, 0x04000013,
6768 0x805c0d80, 0x04000004, 0x405c3000, 0x5818b800,
6769 0x0401f7fa, 0x0401f84b, 0x598c000d, 0x81300580,
6770 0x02000800, 0x001070b9, 0x59300403, 0x82000580,
6771 0x00000042, 0x04020002, 0x497a6007, 0x80000580,
6772 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
6773 0x5c00b800, 0x1c01f000, 0x0401fb27, 0x4df00000,
6774 0x4d2c0000, 0x4d340000, 0x4d300000, 0x41783000,
6775 0x598e6009, 0x813261c0, 0x0400002c, 0x59300c06,
6776 0x82040580, 0x00000006, 0x04020004, 0x8d3e7d18,
6777 0x0402000a, 0x0401f022, 0x82040580, 0x00000005,
6778 0x04020006, 0x8d3e7d18, 0x04000004, 0x59300420,
6779 0x8c000500, 0x0402001a, 0x59326809, 0x59340403,
6780 0x81440580, 0x04020016, 0x8d3e7d00, 0x04000006,
6781 0x82040580, 0x00000003, 0x04020011, 0x0401fa35,
6782 0x0402000f, 0x0401f9f6, 0x59300000, 0x4c000000,
6783 0x8d3e7d06, 0x04000004, 0x0201f800, 0x001092d7,
6784 0x04000005, 0x0401f80f, 0x4c180000, 0x0401f964,
6785 0x5c003000, 0x5c026000, 0x0401f7d7, 0x41303000,
6786 0x59326000, 0x0401f7d4, 0x5c026000, 0x5c026800,
6787 0x5c025800, 0x5c03e000, 0x04000ae5, 0x1c01f000,
6788 0x59300800, 0x497a6000, 0x0401fac8, 0x801831c0,
6789 0x04020009, 0x598c0008, 0x81300580, 0x04020004,
6790 0x48031808, 0x48031809, 0x0401f008, 0x48071809,
6791 0x0401f006, 0x48043000, 0x598c0008, 0x81300580,
6792 0x04020002, 0x481b1808, 0x0401f2ca, 0x4d2c0000,
6793 0x4d300000, 0x4d340000, 0x41783000, 0x598e600b,
6794 0x813261c0, 0x04000013, 0x8d3e7d06, 0x04000005,
6795 0x59326809, 0x59340200, 0x8c00050e, 0x0402000a,
6796 0x0401f9bf, 0x59300000, 0x4c000000, 0x0401f853,
6797 0x4c180000, 0x0401f932, 0x5c003000, 0x5c026000,
6798 0x0401f7f0, 0x41303000, 0x59326000, 0x0401f7ed,
6799 0x0201f800, 0x00104773, 0x5c026800, 0x5c026000,
6800 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c5c0000,
6801 0x813261c0, 0x02000800, 0x001005d8, 0x41300000,
6802 0x598cb80b, 0x41783000, 0x805cb9c0, 0x0400000f,
6803 0x805c0d80, 0x04000004, 0x405c3000, 0x5818b800,
6804 0x0401f7fa, 0x0401f835, 0x598c000d, 0x81300580,
6805 0x02000800, 0x001070b9, 0x497a6007, 0x80000580,
6806 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
6807 0x5c00b800, 0x1c01f000, 0x0401fa9f, 0x4df00000,
6808 0x4d340000, 0x4d300000, 0x4d2c0000, 0x0201f800,
6809 0x00020245, 0x02020800, 0x001005d8, 0x41783000,
6810 0x598e600b, 0x813261c0, 0x04000014, 0x59300009,
6811 0x81340580, 0x0402000e, 0x8d3e7d00, 0x04000003,
6812 0x0401f9bc, 0x0402000a, 0x0401f97d, 0x59300000,
6813 0x4c000000, 0x0401f811, 0x4c180000, 0x0401f8f0,
6814 0x5c003000, 0x5c026000, 0x0401f7ef, 0x41303000,
6815 0x59326000, 0x0401f7ec, 0x0201f800, 0x0010479c,
6816 0x5c025800, 0x5c026000, 0x5c026800, 0x5c03e000,
6817 0x04000a6f, 0x1c01f000, 0x59300800, 0x497a6000,
6818 0x0401fa52, 0x801831c0, 0x04020009, 0x598c000a,
6819 0x81300580, 0x04020004, 0x4803180a, 0x4803180b,
6820 0x0401f008, 0x4807180b, 0x0401f006, 0x48043000,
6821 0x598c000a, 0x81300580, 0x04020002, 0x481b180a,
6822 0x0401f254, 0x0401fa64, 0x4df00000, 0x4d300000,
6823 0x598e6005, 0x813261c0, 0x04000020, 0x59300000,
6824 0x4c000000, 0x59300c06, 0x82040580, 0x00000011,
6825 0x04020007, 0x833c0500, 0x00001800, 0x04000015,
6826 0x8d3e7d16, 0x04020013, 0x0401f009, 0x82040580,
6827 0x00000004, 0x04020006, 0x8d3e7d16, 0x04000004,
6828 0x59300420, 0x8c000500, 0x0402000a, 0x0201f800,
6829 0x0010914e, 0x02000800, 0x0010801c, 0x0201f800,
6830 0x00109326, 0x0201f800, 0x0002077d, 0x0401fa31,
6831 0x5c026000, 0x0401f7e0, 0x497b1805, 0x497b1804,
6832 0x5c026000, 0x5c03e000, 0x04000a31, 0x1c01f000,
6833 0x4933c857, 0x4c5c0000, 0x4c600000, 0x813261c0,
6834 0x02000800, 0x001005d8, 0x41300000, 0x598cb805,
6835 0x405cc000, 0x805cb9c0, 0x04000025, 0x805c0d80,
6836 0x04000004, 0x405cc000, 0x5860b800, 0x0401f7fa,
6837 0x598c000d, 0x81300580, 0x02000800, 0x001070b9,
6838 0x0401fa02, 0x598c0005, 0x805c0580, 0x04020009,
6839 0x585c0000, 0x48031805, 0x4978b800, 0x598c0004,
6840 0x805c0580, 0x0402000d, 0x497b1804, 0x0401f00b,
6841 0x598c0004, 0x805c0580, 0x04020005, 0x48631804,
6842 0x4978b800, 0x4978c000, 0x0401f004, 0x585c0000,
6843 0x4800c000, 0x4978b800, 0x0401f9fe, 0x80000580,
6844 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x82000540,
6845 0x00000001, 0x5c00c000, 0x5c00b800, 0x1c01f000,
6846 0x4933c857, 0x0401fa04, 0x4df00000, 0x4d2c0000,
6847 0x4d340000, 0x4d300000, 0x4c5c0000, 0x4178b800,
6848 0x8d3e7d18, 0x0400000d, 0x8d3e7d16, 0x0402000b,
6849 0x0201f800, 0x00109037, 0x04000008, 0x0201f800,
6850 0x00109597, 0x04020005, 0x592c0207, 0x492fc857,
6851 0x8200bd00, 0x0000000f, 0x41783000, 0x598e6005,
6852 0x813261c0, 0x04000029, 0x59326809, 0x813669c0,
6853 0x04000023, 0x59340403, 0x81440580, 0x04020020,
6854 0x59300c06, 0x82040580, 0x00000011, 0x0400001a,
6855 0x82040580, 0x00000004, 0x04020004, 0x59300420,
6856 0x8c000500, 0x04020016, 0x0201f800, 0x00109037,
6857 0x04000008, 0x0201f800, 0x00109597, 0x04020005,
6858 0x59300403, 0x82000580, 0x00000043, 0x0400000c,
6859 0x0401f8c3, 0x59300000, 0x4c000000, 0x0401f812,
6860 0x4c180000, 0x0401f836, 0x5c003000, 0x5c026000,
6861 0x0401f7dc, 0x805cb9c0, 0x040207ec, 0x41303000,
6862 0x59326000, 0x0401f7d7, 0x5c00b800, 0x5c026000,
6863 0x5c026800, 0x5c025800, 0x5c03e000, 0x040009b4,
6864 0x1c01f000, 0x59300800, 0x497a6000, 0x0401f997,
6865 0x801831c0, 0x04020009, 0x598c0004, 0x81300580,
6866 0x04020004, 0x48031804, 0x48031805, 0x0401f008,
6867 0x48071805, 0x0401f006, 0x48043000, 0x598c0004,
6868 0x81300580, 0x04020002, 0x481b1804, 0x0401f199,
6869 0x4943c857, 0x0401f9a8, 0x4df00000, 0x0401fe34,
6870 0x0401fecb, 0x5c03e000, 0x04000999, 0x1c01f000,
6871 0x4947c857, 0x0401f9a0, 0x4df00000, 0x4d3c0000,
6872 0x853e7d00, 0x0401fe75, 0x0401fefc, 0x5c027800,
6873 0x5c03e000, 0x0400098e, 0x1c01f000, 0x5c000000,
6874 0x4c000000, 0x4803c857, 0x4d340000, 0x4d2c0000,
6875 0x59326809, 0x59325808, 0x59300406, 0x82000c80,
6876 0x00000012, 0x02021800, 0x001005d8, 0x4933c857,
6877 0x4943c857, 0x493fc857, 0x4803c857, 0x0c01f804,
6878 0x5c025800, 0x5c026800, 0x1c01f000, 0x00106ae5,
6879 0x00106ae7, 0x00106af1, 0x00106b0b, 0x00106ae7,
6880 0x00106afb, 0x00106b23, 0x00106ae5, 0x00106ae5,
6881 0x00106b36, 0x00106b2d, 0x00106ae5, 0x00106ae5,
6882 0x00106ae5, 0x00106ae5, 0x00106ae5, 0x00106b3c,
6883 0x00106b3c, 0x0201f800, 0x001005d8, 0x0201f800,
6884 0x00109134, 0x02000800, 0x00102074, 0x0201f800,
6885 0x00109326, 0x0201f800, 0x0010801c, 0x0201f000,
6886 0x00107911, 0x812e59c0, 0x02020800, 0x001005d8,
6887 0x5930021d, 0x82000580, 0x00000003, 0x02000800,
6888 0x0010912a, 0x0201f000, 0x00107911, 0x0201f800,
6889 0x00109037, 0x02000000, 0x00107911, 0x592c1204,
6890 0x82081500, 0x000000ff, 0x82080580, 0x00000055,
6891 0x02020800, 0x001005d8, 0x49425a06, 0x0201f800,
6892 0x000202da, 0x0201f000, 0x00107911, 0x59300004,
6893 0x8400055c, 0x48026004, 0x59300007, 0x8c000500,
6894 0x02020800, 0x00100e99, 0x0201f800, 0x00109037,
6895 0x0400000d, 0x4a025a04, 0x00000103, 0x49425a06,
6896 0x497a5c09, 0x0201f800, 0x001091c6, 0x0201f800,
6897 0x0010a693, 0x0201f800, 0x000202da, 0x0201f800,
6898 0x0010912a, 0x0201f000, 0x00107911, 0x59300007,
6899 0x8c000500, 0x02020800, 0x00100e99, 0x0201f800,
6900 0x00109037, 0x02020800, 0x0010a3ef, 0x0201f000,
6901 0x00107911, 0x0201f800, 0x00109037, 0x04000005,
6902 0x49425a06, 0x497a5c09, 0x0201f800, 0x000202da,
6903 0x0201f000, 0x00107911, 0x0201f800, 0x00109037,
6904 0x02020800, 0x0010664f, 0x0201f000, 0x00107911,
6905 0x0201f800, 0x00109037, 0x04000004, 0x49425a06,
6906 0x0201f800, 0x000202da, 0x59325817, 0x0201f800,
6907 0x001007fd, 0x0201f000, 0x00107911, 0x598c000d,
6908 0x81300580, 0x04000003, 0x497a6007, 0x1c01f000,
6909 0x59c40004, 0x82000500, 0x0000000c, 0x04000005,
6910 0x4a038804, 0x0000000c, 0x497b2807, 0x0401f00a,
6911 0x0401facd, 0x59300403, 0x82000d80, 0x00000040,
6912 0x04000004, 0x82000580, 0x00000042, 0x04020002,
6913 0x497a6007, 0x0201f800, 0x001070b9, 0x80000580,
6914 0x1c01f000, 0x59300804, 0x8c040d3e, 0x04020004,
6915 0x82000540, 0x00000001, 0x0401f005, 0x4933c857,
6916 0x84040d3e, 0x48066004, 0x80000580, 0x1c01f000,
6917 0x59300804, 0x8c040d20, 0x04020004, 0x82000540,
6918 0x00000001, 0x1c01f000, 0x4933c857, 0x4d380000,
6919 0x59300804, 0x84040d20, 0x48066004, 0x42027000,
6920 0x00000049, 0x59300203, 0x82000580, 0x00000003,
6921 0x04000003, 0x42027000, 0x00000013, 0x0201f800,
6922 0x000207a1, 0x80000580, 0x5c027000, 0x1c01f000,
6923 0x59300017, 0x81480580, 0x04020003, 0x59300018,
6924 0x814c0580, 0x1c01f000, 0x4d2c0000, 0x4d300000,
6925 0x0401f8c9, 0x4df00000, 0x0201f800, 0x00106062,
6926 0x59900001, 0x82000500, 0x00000003, 0x0c01f001,
6927 0x00106bba, 0x00106b9a, 0x00106b98, 0x00106b98,
6928 0x0201f800, 0x001005d8, 0x59926004, 0x0401f88e,
6929 0x813261c0, 0x0400001d, 0x59300004, 0x8c000516,
6930 0x04000004, 0x59325808, 0x497a5808, 0x497a5809,
6931 0x0401f88e, 0x59300001, 0x800001c0, 0x0400000e,
6932 0x497a6001, 0x42003000, 0x0000bf2e, 0x58180801,
6933 0x800409c0, 0x04020004, 0x48003001, 0x48003000,
6934 0x0401f00a, 0x58180800, 0x48000800, 0x48003000,
6935 0x0401f006, 0x59300809, 0x800409c0, 0x02000800,
6936 0x001005d8, 0x4978080c, 0x5c03e000, 0x04000890,
6937 0x5c026000, 0x5c025800, 0x1c01f000, 0x4d300000,
6938 0x497b2807, 0x0401f894, 0x4df00000, 0x598c0000,
6939 0x82000500, 0x00000007, 0x4803c857, 0x0c01f001,
6940 0x00106bef, 0x00106bd2, 0x00106bdb, 0x00106bdf,
6941 0x00106bea, 0x00106bef, 0x00106bd0, 0x00106bd0,
6942 0x0201f800, 0x001005d8, 0x598c000d, 0x80026540,
6943 0x04000004, 0x0401f81e, 0x02020800, 0x001005d8,
6944 0x0201f800, 0x001070b9, 0x0401f015, 0x0401f827,
6945 0x0201f800, 0x001070b9, 0x0401f011, 0x598c000d,
6946 0x80026540, 0x0400000e, 0x0401f838, 0x04000004,
6947 0x0401f80f, 0x04000002, 0x0401f81c, 0x0201f800,
6948 0x001070b9, 0x0401f006, 0x0401f830, 0x02020800,
6949 0x001005d8, 0x0201f800, 0x001070b9, 0x5c03e000,
6950 0x0400085b, 0x5c026000, 0x1c01f000, 0x598c0009,
6951 0x81300580, 0x0402000c, 0x0401f84e, 0x0401f83b,
6952 0x59300000, 0x800001c0, 0x04000004, 0x48031809,
6953 0x497a6000, 0x0401f003, 0x497b1809, 0x497b1808,
6954 0x80000580, 0x1c01f000, 0x4d2c0000, 0x59300406,
6955 0x82000580, 0x00000003, 0x04020012, 0x598c000b,
6956 0x81300580, 0x0402000f, 0x0401f83a, 0x59325808,
6957 0x497a5808, 0x497a5809, 0x0401f824, 0x59300000,
6958 0x800001c0, 0x04000004, 0x4803180b, 0x497a6000,
6959 0x0401f003, 0x497b180a, 0x497b180b, 0x80000580,
6960 0x5c025800, 0x1c01f000, 0x598c0005, 0x81300580,
6961 0x0402000c, 0x0401f827, 0x0401f814, 0x59300000,
6962 0x800001c0, 0x04000004, 0x48031805, 0x497a6000,
6963 0x0401f003, 0x497b1805, 0x497b1804, 0x80000580,
6964 0x1c01f000, 0x4a032001, 0x00000000, 0x497b2004,
6965 0x497b2005, 0x59900006, 0x82000500, 0x0000ffff,
6966 0x48032006, 0x1c01f000, 0x4c040000, 0x59300004,
6967 0x82000500, 0x7ffeffff, 0x48026004, 0x59bc00e4,
6968 0x8c000514, 0x04000009, 0x42000800, 0x0000bf00,
6969 0x58040012, 0x81300580, 0x04020004, 0x49780812,
6970 0x4a0378e4, 0x00000800, 0x5c000800, 0x1c01f000,
6971 0x4803c856, 0x598c000c, 0x80000540, 0x04000003,
6972 0x80000040, 0x4803180c, 0x1c01f000, 0x59bc00ea,
6973 0x82000500, 0x00000007, 0x82000580, 0x00000003,
6974 0x04020004, 0x4803c856, 0x4a0378e8, 0x00000001,
6975 0x1c01f000, 0x59bc00ea, 0x82000500, 0x00000007,
6976 0x82000580, 0x00000001, 0x04020011, 0x4803c856,
6977 0x42000800, 0x00000000, 0x0401f80e, 0x42000800,
6978 0x00001000, 0x59bc00ea, 0x82000500, 0x00000007,
6979 0x82000580, 0x00000003, 0x04000005, 0x80040840,
6980 0x040207f9, 0x0201f800, 0x001005d8, 0x1c01f000,
6981 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
6982 0x00000001, 0x02020800, 0x001005d8, 0x59bc00ea,
6983 0x8c000516, 0x040207fe, 0x480778e1, 0x1c01f000,
6984 0x59bc00ea, 0x8c000516, 0x040207fe, 0x480778e1,
6985 0x59bc00ea, 0x8c000516, 0x040207fe, 0x480b78e1,
6986 0x1c01f000, 0x82000d00, 0x80000018, 0x02020800,
6987 0x001005d0, 0x0201f800, 0x001005d8, 0x00106c97,
6988 0x00106d3b, 0x00106d55, 0x00106c97, 0x00106c99,
6989 0x00106cba, 0x00106cd9, 0x00106d0d, 0x00106c97,
6990 0x00106d39, 0x00106c97, 0x00106c97, 0x00106c97,
6991 0x00106c97, 0x00106c97, 0x00106c97, 0x0201f800,
6992 0x001005d8, 0x4d300000, 0x4d900000, 0x4dd00000,
6993 0x4da40000, 0x4d140000, 0x0201f800, 0x001070d8,
6994 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
6995 0x59300004, 0x8c000520, 0x04000011, 0x82000500,
6996 0xfffefeff, 0x48026004, 0x4a026203, 0x00000003,
6997 0x0401ffa9, 0x0201f800, 0x00100fd0, 0x5c022800,
6998 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000,
6999 0x4a0378e4, 0x00000008, 0x0401f795, 0x84000510,
7000 0x48026004, 0x0401f7f6, 0x4d300000, 0x4d900000,
7001 0x4dd00000, 0x4da40000, 0x4d140000, 0x0201f800,
7002 0x001070d8, 0x59bc00ea, 0x8c000510, 0x040007fe,
7003 0x59be60e0, 0x59300004, 0x8c000520, 0x0400000f,
7004 0x82000500, 0xfffefeff, 0x48026004, 0x0401ff8a,
7005 0x0201f800, 0x0010100e, 0x5c022800, 0x5c034800,
7006 0x5c03a000, 0x5c032000, 0x5c026000, 0x4a0378e4,
7007 0x00000008, 0x0401f776, 0x84000510, 0x48026004,
7008 0x0401f7f6, 0x4d300000, 0x4d2c0000, 0x4d340000,
7009 0x4da40000, 0x4cd00000, 0x59bc00ea, 0x8c000510,
7010 0x040007fe, 0x59be60e0, 0x813261c0, 0x02000800,
7011 0x001005d8, 0x59300004, 0x8c000520, 0x0400001d,
7012 0x82000500, 0xfffefeff, 0x48026004, 0x59326809,
7013 0x42034800, 0x0010b544, 0x04011000, 0x4a03c840,
7014 0x0010b54b, 0x4a03c842, 0x00000012, 0x04011000,
7015 0x4a03c840, 0x0010b55d, 0x4a03c842, 0x000000ff,
7016 0x04011000, 0x4a03c840, 0x0010b65c, 0x4a03c842,
7017 0x000000ff, 0x0401fbf2, 0x5c01a000, 0x5c034800,
7018 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
7019 0x84000510, 0x48026004, 0x5c01a000, 0x5c034800,
7020 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
7021 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
7022 0x4cd00000, 0x4d900000, 0x4dd00000, 0x4da40000,
7023 0x4d140000, 0x0401fbc3, 0x59bc00ea, 0x8c000510,
7024 0x040007fe, 0x59be60e0, 0x813261c0, 0x02000800,
7025 0x001005d8, 0x59300004, 0x8c000520, 0x0400000f,
7026 0x82000500, 0xfffefeff, 0x48026004, 0x0201f800,
7027 0x0010783a, 0x5c022800, 0x5c034800, 0x5c03a000,
7028 0x5c032000, 0x5c01a000, 0x5c026800, 0x5c025800,
7029 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004,
7030 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
7031 0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000,
7032 0x1c01f000, 0x0201f800, 0x001005d8, 0x4d300000,
7033 0x4d380000, 0x42000000, 0x0010b8c4, 0x0201f800,
7034 0x0010aa47, 0x0401ff14, 0x598e600d, 0x59c40004,
7035 0x8c000506, 0x04000004, 0x0401f8db, 0x4a038804,
7036 0x00000008, 0x813261c0, 0x04000006, 0x0401fb87,
7037 0x42027000, 0x00000014, 0x0201f800, 0x000207a1,
7038 0x4a0378e4, 0x00000002, 0x5c027000, 0x5c026000,
7039 0x0401f6f7, 0x4d180000, 0x4d300000, 0x4d380000,
7040 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
7041 0x0401fef9, 0x417a3000, 0x59c40804, 0x83180400,
7042 0x0010709f, 0x50000000, 0x80040500, 0x0400001b,
7043 0x42000000, 0x0010b8c5, 0x0201f800, 0x0010aa47,
7044 0x0401fb70, 0x59926004, 0x0401f859, 0x83180400,
7045 0x0010709f, 0x50000000, 0x48038804, 0x813261c0,
7046 0x0400000a, 0x59300004, 0x8c00050c, 0x04020003,
7047 0x4a026203, 0x00000003, 0x42027000, 0x0000004a,
7048 0x0201f800, 0x000207a1, 0x59c40004, 0x82000500,
7049 0x00f80000, 0x04000005, 0x811a3000, 0x83180480,
7050 0x00000005, 0x040017dd, 0x4a0378e4, 0x00000008,
7051 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
7052 0x5c027000, 0x5c026000, 0x5c023000, 0x0401f6c0,
7053 0x4d2c0000, 0x4d340000, 0x59326809, 0x598c0800,
7054 0x82040580, 0x00000004, 0x04020004, 0x838c1400,
7055 0x00000005, 0x0401f00c, 0x82040580, 0x00000001,
7056 0x04020004, 0x838c1400, 0x00000009, 0x0401f006,
7057 0x82040580, 0x00000002, 0x04020022, 0x838c1400,
7058 0x0000000b, 0x41306800, 0x58340000, 0x80007d40,
7059 0x0400001c, 0x583c0009, 0x81340580, 0x04020006,
7060 0x403c6800, 0x583c0000, 0x80007d40, 0x040207fa,
7061 0x0401f014, 0x4933c857, 0x483fc857, 0x583c0000,
7062 0x48006800, 0x49307800, 0x443c1000, 0x80000580,
7063 0x4803180d, 0x4803180f, 0x598c0000, 0x82000580,
7064 0x00000003, 0x04000003, 0x4a031800, 0x00000000,
7065 0x80000580, 0x5c026800, 0x5c025800, 0x1c01f000,
7066 0x82000540, 0x00000001, 0x0401f7fb, 0x491bc857,
7067 0x59c80840, 0x82040540, 0x00000010, 0x48039040,
7068 0x59c41008, 0x82080500, 0xffffff7f, 0x48038808,
7069 0x4c040000, 0x4c080000, 0x0401fabb, 0x04020007,
7070 0x0401fabf, 0x04000022, 0x48038804, 0x0201f800,
7071 0x0010107a, 0x0401f042, 0x4a038803, 0x00000008,
7072 0x59c40003, 0x82000500, 0x00000003, 0x040007fd,
7073 0x8c000502, 0x04020007, 0x0401fab1, 0x04000014,
7074 0x48038804, 0x0201f800, 0x0010107a, 0x0401f034,
7075 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
7076 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
7077 0xc0000000, 0x04000006, 0x59c400a3, 0x84000540,
7078 0x480388a3, 0x4a038805, 0xc0000000, 0x0201f800,
7079 0x0010101d, 0x4a03a005, 0x30000000, 0x59d00006,
7080 0x4a03a005, 0x30000000, 0x59900006, 0x82000500,
7081 0xffff0000, 0x48032006, 0x59d00005, 0x8c000504,
7082 0x040207fe, 0x42000800, 0x00007600, 0x83180540,
7083 0x60000000, 0x480008a1, 0x811800dc, 0x59c80840,
7084 0x80040540, 0x48039040, 0x82000540, 0x00003000,
7085 0x48039040, 0x59c80040, 0x82000500, 0x00003000,
7086 0x040207fd, 0x0201f800, 0x00101068, 0x83180400,
7087 0x0010709f, 0x50000000, 0x48038804, 0x80000580,
7088 0x4df00000, 0x0201f800, 0x00106062, 0x5c03e000,
7089 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
7090 0x1c01f000, 0x4803c856, 0x59c80840, 0x82040540,
7091 0x00000010, 0x48039040, 0x59c41008, 0x82080500,
7092 0xffffff7f, 0x48038808, 0x4c040000, 0x4c080000,
7093 0x59c40004, 0x82000500, 0x00000003, 0x04020010,
7094 0x59c40004, 0x82000500, 0x0000000c, 0x04000005,
7095 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f025,
7096 0x59c80040, 0x8400056e, 0x48039040, 0x59c80040,
7097 0x8c00052e, 0x040207fe, 0x0401f01e, 0x4a038803,
7098 0x00000008, 0x59c40003, 0x82000500, 0x00000003,
7099 0x040007fd, 0x8c000502, 0x04020006, 0x59c40004,
7100 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f011,
7101 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
7102 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
7103 0xc0000000, 0x04000007, 0x59c400a3, 0x84000540,
7104 0x480388a3, 0x4a038805, 0xc0000000, 0x80000580,
7105 0x497b2807, 0x5c001000, 0x5c000800, 0x480b8808,
7106 0x48079040, 0x1c01f000, 0x4933c857, 0x4d900000,
7107 0x4dd00000, 0x4da40000, 0x4d140000, 0x0401fdee,
7108 0x4df00000, 0x0401fa6f, 0x59900004, 0x800001c0,
7109 0x04000011, 0x81300580, 0x0402000f, 0x59300004,
7110 0x84000520, 0x48026004, 0x0401ff51, 0x04020009,
7111 0x5c03e000, 0x04000dd6, 0x80000580, 0x5c022800,
7112 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
7113 0x0401fd0e, 0x42027000, 0x00000049, 0x59300004,
7114 0x84000520, 0x48026004, 0x8c00050c, 0x02020800,
7115 0x000207a1, 0x5c03e000, 0x04000dc5, 0x82000540,
7116 0x00000001, 0x5c022800, 0x5c034800, 0x5c03a000,
7117 0x5c032000, 0x1c01f000, 0x4933c857, 0x0401fdc6,
7118 0x4df00000, 0x598c000d, 0x80026540, 0x04000012,
7119 0x59300004, 0x84000520, 0x48026004, 0x0401ff8a,
7120 0x04000017, 0x0401fd26, 0x42027000, 0x00000013,
7121 0x59300004, 0x8c00050c, 0x02020800, 0x000207a1,
7122 0x5c03e000, 0x04000daa, 0x82000540, 0x00000001,
7123 0x1c01f000, 0x836c1580, 0x00000001, 0x040007f9,
7124 0x836c1580, 0x00000004, 0x040007f6, 0x42001000,
7125 0x00104148, 0x0201f800, 0x00105f90, 0x5c03e000,
7126 0x04000d9b, 0x80000580, 0x1c01f000, 0x4d300000,
7127 0x4d180000, 0x4d3c0000, 0x0401fd9f, 0x4df00000,
7128 0x4a0378e4, 0x0000000f, 0x0401f9ff, 0x417a3000,
7129 0x59926004, 0x813261c0, 0x04000010, 0x417a7800,
7130 0x0201f800, 0x001048d9, 0x0400000a, 0x59300c06,
7131 0x82040580, 0x00000003, 0x04000004, 0x82040580,
7132 0x00000006, 0x04020003, 0x42027800, 0x00000002,
7133 0x0201f800, 0x00108be3, 0x811a3000, 0x83180480,
7134 0x00000005, 0x040017eb, 0x42000800, 0x00000040,
7135 0x0201f800, 0x00101345, 0x4a0378e4, 0x0000000a,
7136 0x5c03e000, 0x04000d72, 0x5c027800, 0x5c023000,
7137 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
7138 0x0401fd75, 0x4df00000, 0x59c80840, 0x82040540,
7139 0x00000010, 0x48039040, 0x59c41008, 0x82080500,
7140 0xffffff7f, 0x48038808, 0x4c040000, 0x4c080000,
7141 0x42001000, 0x00000003, 0x0401f9c2, 0x598e600d,
7142 0x813261c0, 0x04020f9d, 0x040009c7, 0x497b2807,
7143 0x0401f80a, 0x5c001000, 0x5c000800, 0x480b8808,
7144 0x84040d74, 0x48079040, 0x5c03e000, 0x04000d50,
7145 0x5c026000, 0x1c01f000, 0x4d380000, 0x4d180000,
7146 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000,
7147 0x4d140000, 0x59c41004, 0x480bc857, 0x82080500,
7148 0x00003ff0, 0x04000025, 0x417a3000, 0x4c080000,
7149 0x0201f800, 0x00106062, 0x5c001000, 0x82080500,
7150 0x00000210, 0x04020004, 0x811a3000, 0x80081102,
7151 0x0401f7f7, 0x0401f9c3, 0x59926004, 0x4933c857,
7152 0x813261c0, 0x04020005, 0x59c400a3, 0x8c00051a,
7153 0x02000800, 0x001005d8, 0x0401fea5, 0x04000009,
7154 0x0401fc6a, 0x42027000, 0x00000049, 0x59300004,
7155 0x8c00050c, 0x02020800, 0x000207a1, 0x0401f007,
7156 0x42027000, 0x0000004a, 0x4a026203, 0x00000003,
7157 0x0201f800, 0x000207a1, 0x5c022800, 0x5c034800,
7158 0x5c03a000, 0x5c032000, 0x5c026000, 0x5c023000,
7159 0x5c027000, 0x1c01f000, 0x4d300000, 0x4d180000,
7160 0x4d900000, 0x0401fd1c, 0x42001000, 0x00000000,
7161 0x598c0000, 0x82000580, 0x00000005, 0x04000971,
7162 0x417a3000, 0x811b20c8, 0x83932400, 0x0000bf32,
7163 0x59900001, 0x82000580, 0x00000001, 0x0402000d,
7164 0x42000800, 0x000007d0, 0x59926004, 0x59300011,
7165 0x82000500, 0xfff00000, 0x80000540, 0x04000003,
7166 0x42000800, 0x00001b58, 0x0201f800, 0x00106054,
7167 0x811a3000, 0x83180480, 0x00000005, 0x040017ea,
7168 0x59c81040, 0x84081534, 0x480b9040, 0x0401fcf0,
7169 0x5c032000, 0x5c023000, 0x5c026000, 0x1c01f000,
7170 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000,
7171 0x4d140000, 0x4d380000, 0x0401fcef, 0x4df00000,
7172 0x59300004, 0x8c00053e, 0x04020007, 0x8c000520,
7173 0x04000025, 0x0201f800, 0x00106b6c, 0x04000022,
7174 0x0401f02a, 0x598c000d, 0x81300580, 0x04000011,
7175 0x0201f800, 0x00108cd6, 0x04020024, 0x0401f918,
7176 0x04000022, 0x48038804, 0x0401f95e, 0x0201f800,
7177 0x0010107a, 0x0401fc0d, 0x42027000, 0x00000049,
7178 0x59300004, 0x8c00050c, 0x0402000d, 0x0401f00e,
7179 0x59c40004, 0x8c000504, 0x04000014, 0x4a038804,
7180 0x00000004, 0x0401fc36, 0x42027000, 0x00000013,
7181 0x59300004, 0x8c00050c, 0x04000003, 0x0201f800,
7182 0x000207a1, 0x5c03e000, 0x04000cb9, 0x5c027000,
7183 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
7184 0x80000580, 0x1c01f000, 0x5c03e000, 0x04000cb0,
7185 0x5c027000, 0x5c022800, 0x5c034800, 0x5c03a000,
7186 0x5c032000, 0x82000540, 0x00000001, 0x1c01f000,
7187 0x497b2807, 0x0401fcb0, 0x59c400af, 0x800001c0,
7188 0x04020004, 0x0401fca2, 0x0201f000, 0x001014fb,
7189 0x598c000f, 0x82001480, 0x00000002, 0x04021007,
7190 0x80000000, 0x4803180f, 0x80000580, 0x0201f800,
7191 0x0010604d, 0x0400000e, 0x0401fed8, 0x0402000c,
7192 0x0401fdd4, 0x0400000a, 0x0201f800, 0x0010a9c7,
7193 0x0401f916, 0x4d380000, 0x42027000, 0x00000014,
7194 0x0201f800, 0x000207a1, 0x5c027000, 0x0401fc88,
7195 0x0201f000, 0x001014fb, 0x4d900000, 0x4dd00000,
7196 0x4da40000, 0x4d140000, 0x4d300000, 0x0201f800,
7197 0x00106062, 0x0401fc88, 0x59c400af, 0x800001c0,
7198 0x04000027, 0x0401f907, 0x59926004, 0x4933c857,
7199 0x59300004, 0x8c000516, 0x0400000b, 0x0401fe8b,
7200 0x0402001f, 0x0201f800, 0x00106b8a, 0x0401fc70,
7201 0x42000800, 0x80000804, 0x0201f800, 0x00106721,
7202 0x0401f017, 0x42001800, 0x00007530, 0x0401f8c1,
7203 0x04020004, 0x0201f800, 0x00106052, 0x0401f010,
7204 0x0401fe7a, 0x0402000e, 0x0201f800, 0x0010a9c7,
7205 0x59300004, 0x8c00050c, 0x04020003, 0x4a026203,
7206 0x00000003, 0x4d380000, 0x42027000, 0x0000004a,
7207 0x0201f800, 0x000207a1, 0x5c027000, 0x0401fc54,
7208 0x5c026000, 0x5c022800, 0x5c034800, 0x5c03a000,
7209 0x5c032000, 0x0201f000, 0x001014fb, 0x4d900000,
7210 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d300000,
7211 0x4d2c0000, 0x0401fc50, 0x0401f8d2, 0x59926004,
7212 0x4933c857, 0x0401f880, 0x04000016, 0x0201f800,
7213 0x00106062, 0x813261c0, 0x04000034, 0x59325808,
7214 0x812e59c0, 0x02000800, 0x001005d8, 0x0201f800,
7215 0x0010513b, 0x0402001d, 0x592c0208, 0x84000550,
7216 0x48025a08, 0x0201f800, 0x00105258, 0x04020027,
7217 0x592c0208, 0x84000510, 0x48025a08, 0x0401f023,
7218 0x0201f800, 0x00106052, 0x0401f020, 0x0201f800,
7219 0x0010a9c7, 0x0401fd9e, 0x592c0208, 0x84000550,
7220 0x48025a08, 0x4d380000, 0x42027000, 0x0000004a,
7221 0x4a026203, 0x00000003, 0x0201f800, 0x000207a1,
7222 0x5c027000, 0x0401f011, 0x59900006, 0x82000500,
7223 0xffff0000, 0x040207ee, 0x59c408af, 0x82040480,
7224 0x000003e8, 0x040217ea, 0x59900006, 0x82000400,
7225 0x00010000, 0x48032006, 0x0201f800, 0x00106052,
7226 0x0201f800, 0x0010411d, 0x5c025800, 0x5c026000,
7227 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
7228 0x0401f403, 0x4d300000, 0x4d2c0000, 0x0401fc0a,
7229 0x598e600d, 0x4933c857, 0x59c41004, 0x8c081500,
7230 0x04000007, 0x0201f800, 0x0010513b, 0x04020007,
7231 0x0201f800, 0x00105258, 0x0402002f, 0x0201f800,
7232 0x0010604d, 0x0401f02c, 0x598c000f, 0x80000540,
7233 0x04020011, 0x59c408af, 0x82040480, 0x000003e8,
7234 0x0402100d, 0x598c080f, 0x80040800, 0x4807180f,
7235 0x0201f800, 0x0010604d, 0x42000000, 0x0010b852,
7236 0x0201f800, 0x0010aa47, 0x0201f800, 0x0010411d,
7237 0x0401f019, 0x0401fdb4, 0x813261c0, 0x04020003,
7238 0x0401f849, 0x0401f014, 0x0201f800, 0x0010a9c7,
7239 0x59300406, 0x82000580, 0x00000003, 0x04020007,
7240 0x59325808, 0x812e59c0, 0x04000004, 0x592c0208,
7241 0x84000550, 0x48025a08, 0x0401f854, 0x4d380000,
7242 0x42027000, 0x00000014, 0x0201f800, 0x000207a1,
7243 0x5c027000, 0x5c025800, 0x5c026000, 0x0201f000,
7244 0x00106c4b, 0x59c40804, 0x83180400, 0x00107095,
7245 0x50000000, 0x80040500, 0x1c01f000, 0x59c40804,
7246 0x83180400, 0x0010709a, 0x50000000, 0x80040500,
7247 0x1c01f000, 0x00000210, 0x00000420, 0x00000840,
7248 0x00001080, 0x00002100, 0x00004000, 0x00008000,
7249 0x00010000, 0x00020000, 0x00040000, 0x00080000,
7250 0x00100000, 0x00200000, 0x00400000, 0x00800000,
7251 0x59900806, 0x80040120, 0x800c0480, 0x04021004,
7252 0x82000540, 0x00000001, 0x0401f005, 0x82040c00,
7253 0x00010000, 0x48072006, 0x80000580, 0x1c01f000,
7254 0x480bc857, 0x0201f800, 0x00106c55, 0x4df00000,
7255 0x480b1800, 0x5c03e000, 0x02000800, 0x00106c4b,
7256 0x1c01f000, 0x4803c856, 0x0201f800, 0x00106c55,
7257 0x4df00000, 0x497b180d, 0x497b1803, 0x497b180e,
7258 0x497b180f, 0x497b1810, 0x598c0000, 0x82000580,
7259 0x00000003, 0x04000009, 0x836c0580, 0x00000002,
7260 0x04020004, 0x4a031800, 0x00000005, 0x0401f003,
7261 0x4a031800, 0x00000000, 0x5c03e000, 0x02000800,
7262 0x00106c4b, 0x1c01f000, 0x59300004, 0x8c00050c,
7263 0x04020003, 0x4a026203, 0x00000001, 0x1c01f000,
7264 0x83180480, 0x00000005, 0x02021800, 0x001005d8,
7265 0x491bc857, 0x811b20c8, 0x83932400, 0x0000bf32,
7266 0x811ba0ca, 0x83d3a400, 0x00007600, 0x83180400,
7267 0x001070ea, 0x50034800, 0x811a28c2, 0x83162c00,
7268 0x00006100, 0x1c01f000, 0x0010b75b, 0x0010b772,
7269 0x0010b789, 0x0010b7a0, 0x0010b7b7, 0x4933c857,
7270 0x59300406, 0x82000c80, 0x00000012, 0x04021016,
7271 0x4803c857, 0x04011000, 0x0c01f001, 0x00107109,
7272 0x00107198, 0x001074d1, 0x00107556, 0x00107198,
7273 0x001074d1, 0x00107556, 0x00107109, 0x00107198,
7274 0x00107109, 0x00107109, 0x00107109, 0x00107109,
7275 0x00107109, 0x00107109, 0x00107109, 0x0010710f,
7276 0x0010710f, 0x0201f800, 0x00106c55, 0x0201f800,
7277 0x00106bbf, 0x0201f000, 0x00106c4b, 0x42001000,
7278 0x0010b7f6, 0x50081000, 0x4930100c, 0x58080002,
7279 0x82000580, 0x00000100, 0x04020032, 0x59325808,
7280 0x812e59c0, 0x02000800, 0x001005d8, 0x59326809,
7281 0x813669c0, 0x04000019, 0x592c040b, 0x82000500,
7282 0x0000e000, 0x04000003, 0x0401fba8, 0x0401f002,
7283 0x0401fb98, 0x42001000, 0x0010b7f6, 0x50081000,
7284 0x4930100b, 0x492c100a, 0x82d00400, 0x00000006,
7285 0x48001003, 0x592c000d, 0x80000104, 0x48001004,
7286 0x592c000e, 0x48001007, 0x592c000f, 0x48001008,
7287 0x0201f000, 0x00100858, 0x42026800, 0x0010be0d,
7288 0x592c080a, 0x48066802, 0x82040500, 0x00ffff00,
7289 0x04000007, 0x497a6a12, 0x59a81010, 0x82081500,
7290 0x00ffff00, 0x80080580, 0x040207dc, 0x82040d00,
7291 0x000000ff, 0x800408d0, 0x48066a12, 0x0401f7d7,
7292 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x4c580000,
7293 0x4c540000, 0x4c500000, 0x5832580a, 0x812e59c0,
7294 0x02000800, 0x001005d8, 0x58300002, 0x4a006002,
7295 0x00000100, 0x82000580, 0x00000100, 0x0402001c,
7296 0x5830000b, 0x5832600c, 0x81300580, 0x04020010,
7297 0x0401f828, 0x04020010, 0x592c080d, 0x80040904,
7298 0x4004b000, 0x4200a000, 0x0010b54b, 0x4050a800,
7299 0x0201f800, 0x0010ab28, 0x42001000, 0x0000dc00,
7300 0x0201f800, 0x001078bc, 0x0401f003, 0x0401f819,
7301 0x04000fa3, 0x5c00a000, 0x5c00a800, 0x5c00b000,
7302 0x5c026000, 0x5c025800, 0x1c01f000, 0x5830000b,
7303 0x5832600c, 0x81300580, 0x040207f5, 0x0401f80d,
7304 0x040207f5, 0x0201f800, 0x001068d3, 0x02020800,
7305 0x001005d8, 0x4a025a06, 0x00000002, 0x0201f800,
7306 0x000202da, 0x0201f800, 0x00107911, 0x0401f7ea,
7307 0x0201f800, 0x00106c55, 0x4df00000, 0x598c000d,
7308 0x81300580, 0x04020009, 0x598c0005, 0x81300580,
7309 0x04020006, 0x5c03e000, 0x02000800, 0x00106c4b,
7310 0x80000580, 0x1c01f000, 0x5c03e000, 0x02000800,
7311 0x00106c4b, 0x82000540, 0x00000001, 0x1c01f000,
7312 0x59300403, 0x82000c80, 0x00000056, 0x02021800,
7313 0x001005d8, 0x4803c857, 0x0c01f001, 0x00107302,
7314 0x0010731d, 0x0010732e, 0x00107431, 0x001073f1,
7315 0x001073f5, 0x00107406, 0x0010741a, 0x0010740f,
7316 0x0010741a, 0x00107455, 0x0010741a, 0x00107497,
7317 0x0010741a, 0x001074a5, 0x0010741a, 0x0010740f,
7318 0x0010741a, 0x001074a9, 0x001071f5, 0x001071f5,
7319 0x001071f5, 0x001071f5, 0x001071f5, 0x001071f5,
7320 0x001071f5, 0x001071f5, 0x001071f5, 0x001071f5,
7321 0x001071f5, 0x00107574, 0x00107593, 0x0010759d,
7322 0x001071f5, 0x001075b3, 0x00107406, 0x001071f5,
7323 0x00107406, 0x0010741a, 0x001071f5, 0x0010732e,
7324 0x00107431, 0x001071f5, 0x00107603, 0x0010741a,
7325 0x001071f5, 0x00107613, 0x0010741a, 0x001071f5,
7326 0x0010740f, 0x001072f3, 0x001071f7, 0x001071f5,
7327 0x0010762a, 0x0010765d, 0x001076d7, 0x001071f5,
7328 0x001076e7, 0x00107404, 0x001076da, 0x001071f5,
7329 0x001075bf, 0x00107700, 0x001071f5, 0x00107735,
7330 0x00107788, 0x001071f5, 0x0010720c, 0x00107265,
7331 0x00107272, 0x001071f5, 0x00107406, 0x001071f5,
7332 0x001072b9, 0x001072c4, 0x001071f5, 0x001071f5,
7333 0x00107220, 0x00107245, 0x001077c7, 0x00107808,
7334 0x0010782e, 0x001071f5, 0x001071f5, 0x001071f5,
7335 0x001077fc, 0x0201f800, 0x001005d8, 0x0401fac5,
7336 0x59325808, 0x592c0009, 0x4801a006, 0x592c000a,
7337 0x4801a007, 0x592c000b, 0x4801a008, 0x592c000c,
7338 0x4801a009, 0x592c000d, 0x4801a00a, 0x4979a00b,
7339 0x592c0809, 0x82040d00, 0x00000fff, 0x80040904,
7340 0x42001000, 0x0000dc00, 0x0201f000, 0x001078bc,
7341 0x4a026202, 0x0000ffff, 0x0401faae, 0x4d2c0000,
7342 0x4a01a006, 0x05000000, 0x59325808, 0x592c0009,
7343 0x4801a007, 0x592c000a, 0x4801a008, 0x592c000b,
7344 0x4801a009, 0x42000800, 0x00000004, 0x42001000,
7345 0x0000dc00, 0x5c025800, 0x0201f000, 0x001078bc,
7346 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000,
7347 0x0401fa98, 0x59325808, 0x5930040b, 0x800000c2,
7348 0x4200a800, 0x0010b54b, 0x592cb205, 0x832ca400,
7349 0x00000006, 0x0201f800, 0x0010ab17, 0x40580000,
7350 0x8054ac00, 0x592c0001, 0x80000540, 0x04000003,
7351 0x40025800, 0x0401f7f5, 0x4200a000, 0x0010b54b,
7352 0x4050a800, 0x5930b40b, 0x0201f800, 0x0010ab28,
7353 0x59300c0b, 0x42001000, 0x0000dc00, 0x5c025800,
7354 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x0201f000,
7355 0x001078bc, 0x4c580000, 0x4c500000, 0x4c540000,
7356 0x4d2c0000, 0x42034800, 0x0010b544, 0x0401fa7f,
7357 0x59325808, 0x4a025805, 0x02000000, 0x592c0802,
7358 0x82d0ac00, 0x00000006, 0x592cb011, 0x832ca400,
7359 0x00000005, 0x0201f800, 0x0010ab17, 0x40580000,
7360 0x8054ac00, 0x592e5801, 0x41780000, 0x812e5d40,
7361 0x040207f6, 0x42001000, 0x0000dc00, 0x5c025800,
7362 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x0201f000,
7363 0x001078bc, 0x0401fa57, 0x4a01a006, 0x78000000,
7364 0x5930001c, 0x840001c0, 0x4801a407, 0x4979a207,
7365 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
7366 0x0201f000, 0x001078bc, 0x4c580000, 0x4c540000,
7367 0x4c500000, 0x0401fa55, 0x4a01a006, 0x02000000,
7368 0x59a80002, 0x4801a008, 0x59a80003, 0x4801a009,
7369 0x59a80000, 0x4801a00a, 0x59a80001, 0x4801a00b,
7370 0x5930001c, 0x82000d80, 0x0000e000, 0x04000016,
7371 0x82000d80, 0x0000df00, 0x04000006, 0x4a01a407,
7372 0x00000010, 0x42000800, 0x00000006, 0x0401f027,
7373 0x4a03c840, 0x0010b4eb, 0x4a03c842, 0x0000000d,
7374 0x42001800, 0x0010b4eb, 0x0201f800, 0x001007af,
7375 0x42000000, 0x0000df00, 0x4200a000, 0x0010b4eb,
7376 0x0401f00d, 0x4a03c840, 0x0010b4f8, 0x4a03c842,
7377 0x0000000d, 0x42001800, 0x0010b4f8, 0x0201f800,
7378 0x001007af, 0x42000000, 0x0000e000, 0x4200a000,
7379 0x0010b4f8, 0x82000540, 0x00000010, 0x4801a407,
7380 0x4a01a207, 0x00000034, 0x4200b000, 0x0000000d,
7381 0x82d0ac00, 0x0000000c, 0x0201f800, 0x0010ab17,
7382 0x42000800, 0x00000013, 0x42001000, 0x0000dc00,
7383 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x0201f000,
7384 0x001078bc, 0x0401fa03, 0x4a01a006, 0x63000028,
7385 0x5930001c, 0x4801a007, 0x42000800, 0x00000002,
7386 0x42001000, 0x0000dc00, 0x0201f000, 0x001078bc,
7387 0x0401fa06, 0x41780000, 0x41780800, 0x42002000,
7388 0x00080000, 0x0c01f81b, 0x80000000, 0x80040800,
7389 0x42001000, 0x0000000c, 0x59841802, 0x8c0c1d00,
7390 0x04020008, 0x42002000, 0x00050000, 0x0c01f811,
7391 0x80000000, 0x80040800, 0x82081400, 0x00000004,
7392 0x82080540, 0x02000000, 0x4801a006, 0x800408e0,
7393 0x5930001c, 0x80040540, 0x4801a007, 0x80080904,
7394 0x42001000, 0x0000dc00, 0x0201f000, 0x001078bc,
7395 0x001072e9, 0x001072eb, 0x001072ed, 0x001072ef,
7396 0x001072f1, 0x4811a008, 0x1c01f000, 0x4811a009,
7397 0x1c01f000, 0x4811a00a, 0x1c01f000, 0x4811a00b,
7398 0x1c01f000, 0x4811a00c, 0x1c01f000, 0x4a026009,
7399 0x0010be0d, 0x59a80010, 0x82000500, 0x000000ff,
7400 0x800000d0, 0x42026800, 0x0010be0d, 0x48026a12,
7401 0x0401fa3b, 0x41780800, 0x42001000, 0x00005c00,
7402 0x0201f000, 0x001078bc, 0x0401f9ba, 0x4a01a006,
7403 0x52000000, 0x4979a007, 0x599c0017, 0x8c000500,
7404 0x04000005, 0x599c0402, 0x0201f800, 0x001015da,
7405 0x4805a007, 0x59a80002, 0x4801a008, 0x59a80003,
7406 0x4801a009, 0x59a80000, 0x4801a00a, 0x59a80001,
7407 0x4801a00b, 0x59a80010, 0x4801a00c, 0x42000800,
7408 0x00000007, 0x42001000, 0x0000dc00, 0x0201f000,
7409 0x001078bc, 0x4a026202, 0x0000ffff, 0x0401f99d,
7410 0x4a01a006, 0x05000000, 0x59a80010, 0x4801a007,
7411 0x59a80002, 0x59a80803, 0x4801a008, 0x4805a009,
7412 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
7413 0x0201f000, 0x001078bc, 0x4a026202, 0x0000ffff,
7414 0x0401f98c, 0x4d3c0000, 0x417a7800, 0x0201f800,
7415 0x001048f6, 0x5c027800, 0x4a01a006, 0x03000000,
7416 0x59340403, 0x82000580, 0x000007fe, 0x0402006e,
7417 0x4a01a006, 0x04000000, 0x81a40800, 0x4a000800,
7418 0x22fffffe, 0x5934000a, 0x84000500, 0x4802680a,
7419 0x59c41002, 0x8408150c, 0x480b8802, 0x59a80026,
7420 0x8c000508, 0x04000010, 0x59a8002a, 0x4801a007,
7421 0x59a8002b, 0x82000500, 0xffff2000, 0x599c0818,
7422 0x8c040d16, 0x04000002, 0x8400056a, 0x4801a008,
7423 0x4a01a009, 0x00002710, 0x59a8002d, 0x4801a00a,
7424 0x0401f039, 0x59a8002a, 0x4801a007, 0x0201f800,
7425 0x0010513b, 0x04020009, 0x497b8880, 0x82000500,
7426 0x0000ffff, 0x4c000000, 0x0201f800, 0x00101606,
7427 0x5c000000, 0x48038880, 0x59a8002b, 0x0201f800,
7428 0x0010513b, 0x04020004, 0x82000500, 0x37ffffff,
7429 0x0401f003, 0x82000500, 0x3fffffff, 0x599c0818,
7430 0x8c040d16, 0x04000002, 0x8400056a, 0x59a80805,
7431 0x8c040d10, 0x04000019, 0x59300c03, 0x82041580,
7432 0x00000051, 0x04000015, 0x82041580, 0x00000031,
7433 0x04000012, 0x4c580000, 0x4c500000, 0x4c540000,
7434 0x4200b000, 0x00000004, 0x4200a000, 0x0010b8fa,
7435 0x82d0ac00, 0x0000001f, 0x4c000000, 0x0201f800,
7436 0x0010ab17, 0x5c000000, 0x5c00a800, 0x5c00a000,
7437 0x5c00b000, 0x8400057a, 0x4801a008, 0x4979a009,
7438 0x4979a00a, 0x59a80002, 0x59a80803, 0x4801a00b,
7439 0x4805a00c, 0x59a80000, 0x59a80801, 0x4801a00d,
7440 0x4805a00e, 0x4979a00f, 0x4979a010, 0x4979a011,
7441 0x4979a012, 0x4979a013, 0x4979a014, 0x4979a015,
7442 0x4979a016, 0x59a8002e, 0x84000576, 0x4801a017,
7443 0x59a8002f, 0x4801a018, 0x4979a019, 0x4979a01a,
7444 0x0401f043, 0x59a80026, 0x8c000508, 0x0400000d,
7445 0x59a8002a, 0x82000500, 0x0000ffff, 0x59c40880,
7446 0x80040d80, 0x04000007, 0x497b8880, 0x4c000000,
7447 0x0201f800, 0x00101606, 0x5c000000, 0x48038880,
7448 0x59a8002a, 0x4801a007, 0x4c640000, 0x4d2c0000,
7449 0x59a8c82b, 0x0201f800, 0x00109037, 0x0400000d,
7450 0x0201f800, 0x00109597, 0x0402000a, 0x592c0207,
7451 0x8c00050e, 0x04000007, 0x8264cd00, 0x0000ffff,
7452 0x592c0009, 0x82000500, 0xffff0000, 0x8064cd40,
7453 0x4865a008, 0x5c025800, 0x5c00c800, 0x59a8002c,
7454 0x4801a009, 0x59a8002d, 0x4801a00a, 0x59a80002,
7455 0x59a80803, 0x4801a00b, 0x4805a00c, 0x59a80000,
7456 0x59a80801, 0x4801a00d, 0x4805a00e, 0x4979a00f,
7457 0x4979a010, 0x4979a011, 0x4979a012, 0x4979a013,
7458 0x4979a014, 0x4979a015, 0x4979a016, 0x59a8002e,
7459 0x4801a017, 0x59a8002f, 0x4801a018, 0x59a80030,
7460 0x4801a019, 0x59a80031, 0x4801a01a, 0x42000800,
7461 0x0000001d, 0x42001000, 0x0000dc00, 0x0201f000,
7462 0x001078bc, 0x0401f8cb, 0x4a01a006, 0x50000000,
7463 0x0401f7b5, 0x0401f8c7, 0x4a01a406, 0x21000010,
7464 0x4a01a206, 0x00000014, 0x4979a007, 0x4979a008,
7465 0x4979a009, 0x4979a00a, 0x42000800, 0x00000005,
7466 0x42001000, 0x0000dc00, 0x0201f000, 0x001078bc,
7467 0x0401f8bf, 0x0401f002, 0x0401f8c4, 0x4a01a006,
7468 0x02000000, 0x42000800, 0x00000001, 0x42001000,
7469 0x0000dc00, 0x0201f000, 0x001078bc, 0x0401f8bb,
7470 0x4a01a006, 0x02000000, 0x59300403, 0x82000580,
7471 0x00000031, 0x04020794, 0x81a40800, 0x4a000801,
7472 0x00fffffe, 0x0401f72b, 0x0401f8b0, 0x4a01a006,
7473 0x01000000, 0x5930041a, 0x80000540, 0x04000003,
7474 0x4801a407, 0x0401f003, 0x4a01a407, 0x00000003,
7475 0x5930021a, 0x80000540, 0x04000003, 0x4801a207,
7476 0x0401f003, 0x4a01a207, 0x00002a00, 0x42000800,
7477 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
7478 0x001078bc, 0x4a026202, 0x0000ffff, 0x0401f889,
7479 0x4a01a406, 0x00002010, 0x4a01a206, 0x00000014,
7480 0x4a01a407, 0x00000800, 0x4a01a207, 0x00002000,
7481 0x80000580, 0x599c0817, 0x8c040d0a, 0x04020003,
7482 0x82000540, 0x00000020, 0x8c040d08, 0x04000003,
7483 0x82000540, 0x00000010, 0x82000540, 0x00000002,
7484 0x5934080a, 0x8c040d14, 0x04000005, 0x82040d00,
7485 0x00000380, 0x80040540, 0x0401f006, 0x599c0818,
7486 0x8c040d18, 0x04000003, 0x82000540, 0x00000380,
7487 0x0401f03c, 0x0401f875, 0x4a01a406, 0x00000210,
7488 0x4a01a206, 0x00000014, 0x4a01a407, 0x00000800,
7489 0x5934000a, 0x8c000516, 0x04000014, 0x59340c05,
7490 0x82040500, 0x00000030, 0x04000013, 0x59340a05,
7491 0x82040500, 0x0000c000, 0x04020009, 0x8c040d1a,
7492 0x04000004, 0x4a01a207, 0x00002100, 0x0401f00c,
7493 0x4a01a207, 0x00000100, 0x0401f009, 0x4a01a207,
7494 0x00000400, 0x0401f006, 0x4a01a207, 0x00000700,
7495 0x0401f003, 0x4a01a207, 0x00000800, 0x80000580,
7496 0x599c0817, 0x8c040d0a, 0x04020003, 0x82000540,
7497 0x00000020, 0x8c040d08, 0x04000003, 0x82000540,
7498 0x00000010, 0x82000540, 0x00000002, 0x59340a00,
7499 0x8c040d0e, 0x0400000b, 0x84000550, 0x599c1017,
7500 0x8c08150a, 0x04020004, 0x8c040d0a, 0x04000002,
7501 0x8400054e, 0x8c040d1c, 0x04000002, 0x84000552,
7502 0x4801a20a, 0x42000800, 0x00000005, 0x42001000,
7503 0x0000dc00, 0x0201f000, 0x001078bc, 0x0401f833,
7504 0x4a01a006, 0x02100014, 0x4a01a007, 0x01000000,
7505 0x4979a008, 0x4979a009, 0x4979a00a, 0x42000800,
7506 0x00000005, 0x42001000, 0x0000dc00, 0x0201f000,
7507 0x001078bc, 0x0401f825, 0x4a01a006, 0x02000000,
7508 0x0401f65d, 0x4933c857, 0x0401f820, 0x4a01a006,
7509 0x01000000, 0x4a01a407, 0x0000000b, 0x42000800,
7510 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
7511 0x001078bc, 0x42005000, 0x32000000, 0x42006000,
7512 0x08290000, 0x41786800, 0x41787800, 0x0401f3df,
7513 0x42005000, 0x22000000, 0x42006000, 0x01290000,
7514 0x41786800, 0x41787800, 0x0401f3d8, 0x42005000,
7515 0x33000000, 0x42006000, 0x08980000, 0x41786800,
7516 0x41787800, 0x0401f3d1, 0x42005000, 0x23000000,
7517 0x42006000, 0x01980000, 0x41786800, 0x41787800,
7518 0x0401f3ca, 0x59300403, 0x82000c80, 0x00000085,
7519 0x02001800, 0x001005d8, 0x82000c80, 0x00000093,
7520 0x02021800, 0x001005d8, 0x82000480, 0x00000085,
7521 0x0c01f001, 0x001074eb, 0x001074ed, 0x001074fb,
7522 0x001074eb, 0x001074eb, 0x001074eb, 0x001074eb,
7523 0x001074eb, 0x001074eb, 0x001074eb, 0x001074eb,
7524 0x001074eb, 0x001074eb, 0x00107506, 0x0201f800,
7525 0x001005d8, 0x4933c857, 0x0401f850, 0x59300402,
7526 0x4801a407, 0x5930001c, 0x4801a207, 0x4979a408,
7527 0x4a01a208, 0x0000ffff, 0x42000800, 0x00000003,
7528 0x42001000, 0x0000dc00, 0x0401f3c2, 0x4933c857,
7529 0x0401f84e, 0x4a01a406, 0x00000003, 0x4a01a206,
7530 0x00000300, 0x42000800, 0x00000001, 0x42001000,
7531 0x0000dc00, 0x0401f3b7, 0x4d2c0000, 0x59325808,
7532 0x4933c857, 0x492fc857, 0x812e59c0, 0x02000800,
7533 0x001005d8, 0x59340a12, 0x82040d00, 0x0000ff00,
7534 0x592c000a, 0x82000500, 0x000000ff, 0x900001c0,
7535 0x80040540, 0x82000540, 0x00000011, 0x44034800,
7536 0x81a5a000, 0x42001000, 0x00000009, 0x42000800,
7537 0x00000003, 0x592c0009, 0x82000500, 0xff000000,
7538 0x82001d80, 0x84000000, 0x04000009, 0x82001d80,
7539 0x85000000, 0x02020800, 0x001005d8, 0x42001000,
7540 0x00000007, 0x42000800, 0x00000001, 0x832c1c00,
7541 0x00000009, 0x500c0000, 0x4401a000, 0x800c1800,
7542 0x80d1a000, 0x80081040, 0x040207fb, 0x42001000,
7543 0x0000dc00, 0x5c025800, 0x0401f386, 0x42005000,
7544 0x81000000, 0x42006000, 0x00090000, 0x41786800,
7545 0x41787800, 0x0401f35d, 0x42005000, 0x84000000,
7546 0x42006000, 0x00990000, 0x59300406, 0x82000580,
7547 0x00000005, 0x04000002, 0x8430652e, 0x41786800,
7548 0x41787800, 0x0401f351, 0x42005000, 0x85000000,
7549 0x42006000, 0x00990000, 0x59300406, 0x82000580,
7550 0x00000005, 0x04000002, 0x8430652e, 0x41786800,
7551 0x41787800, 0x0401f345, 0x59300403, 0x82000c80,
7552 0x00000053, 0x02021800, 0x001005d8, 0x82000480,
7553 0x0000004b, 0x02001800, 0x001005d8, 0x59326809,
7554 0x59368c03, 0x4803c857, 0x0c01f001, 0x001075da,
7555 0x001075e2, 0x001075ea, 0x001075f2, 0x0010756b,
7556 0x0010756b, 0x0010756b, 0x001075d2, 0x0201f800,
7557 0x001005d8, 0x42005000, 0x06000000, 0x42006000,
7558 0x08290000, 0x41786800, 0x41787800, 0x0401f327,
7559 0x4933c857, 0x0401ff47, 0x4a01a006, 0x12000000,
7560 0x59300406, 0x82000580, 0x00000004, 0x04020003,
7561 0x59340002, 0x0401f002, 0x59a80010, 0x82000500,
7562 0x00ffffff, 0x4801a007, 0x59300419, 0x4801a408,
7563 0x59300219, 0x4801a208, 0x4979a009, 0x4979a00a,
7564 0x4979a00b, 0x4979a00c, 0x4979a00d, 0x4979a00e,
7565 0x4979a00f, 0x4979a010, 0x42000800, 0x0000000b,
7566 0x42001000, 0x0000dc00, 0x0401f32a, 0x0401ff29,
7567 0x4a01a006, 0x0f000000, 0x5930001c, 0x4801a007,
7568 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
7569 0x0401f320, 0x0401ff2d, 0x4a01a006, 0x02000000,
7570 0x59c40085, 0x48031004, 0x59880000, 0x4801a007,
7571 0x59880001, 0x4801a008, 0x59880002, 0x4801a009,
7572 0x59880003, 0x4801a00a, 0x59880004, 0x4801a00b,
7573 0x59880005, 0x4801a00c, 0x42000800, 0x00000007,
7574 0x42001000, 0x0000dc00, 0x0401f30a, 0x4a026202,
7575 0x0000ffff, 0x0401ff07, 0x4a01a006, 0x62000000,
7576 0x5930001c, 0x4801a007, 0x42000800, 0x00000002,
7577 0x42001000, 0x0000dc00, 0x0401f2fe, 0x0401fefd,
7578 0x59300808, 0x4c500000, 0x4c540000, 0x4c580000,
7579 0x8204a400, 0x0000000a, 0x5930b01c, 0x82d0ac00,
7580 0x00000006, 0x0201f800, 0x0010ab17, 0x5930081c,
7581 0x42001000, 0x0000dc00, 0x5c00b000, 0x5c00a800,
7582 0x5c00a000, 0x0401f2eb, 0x0401ff9b, 0x59300017,
7583 0x4801a006, 0x59300018, 0x4801a007, 0x4a01a008,
7584 0x00001000, 0x0401f020, 0x0401ff93, 0x59300017,
7585 0x4801a006, 0x59300018, 0x4801a007, 0x4a01a008,
7586 0x00004000, 0x0401f018, 0x0401ff8b, 0x59300017,
7587 0x4801a006, 0x59300018, 0x4801a007, 0x4a01a008,
7588 0x00002000, 0x0401f010, 0x0401ff83, 0x59300017,
7589 0x4801a006, 0x59300018, 0x4801a007, 0x4a01a008,
7590 0x00000400, 0x0401f008, 0x0401ff7b, 0x59300017,
7591 0x4801a006, 0x59300018, 0x4801a007, 0x4a01a008,
7592 0x00000200, 0x4979a009, 0x4979a00a, 0x4979a00b,
7593 0x4979a00c, 0x4979a00d, 0x42000800, 0x00000008,
7594 0x42001000, 0x0000dc00, 0x0401f2ba, 0x0401fec7,
7595 0x4a01a006, 0x02000014, 0x4979a407, 0x4979a207,
7596 0x59a8003a, 0x4801a008, 0x59a8003b, 0x4801a009,
7597 0x4a01a00a, 0x00047878, 0x42000800, 0x00000005,
7598 0x42001000, 0x0000dc00, 0x0401f2aa, 0x0401feb7,
7599 0x4a01a006, 0x02140018, 0x4a01a407, 0x00000800,
7600 0x5930001c, 0x82000d00, 0xff000000, 0x900409c0,
7601 0x4805a207, 0x82000500, 0x00ffffff, 0x4801a00a,
7602 0x4979a408, 0x4979a208, 0x4979a409, 0x4979a209,
7603 0x4979a00b, 0x42000800, 0x00000006, 0x42001000,
7604 0x0000dc00, 0x0401f293, 0x4803c856, 0x4d380000,
7605 0x4d1c0000, 0x42027000, 0x00000035, 0x0201f800,
7606 0x001093ba, 0x0402001e, 0x0401fe8a, 0x4a01a006,
7607 0x13000000, 0x5932381e, 0x591c0019, 0x4801a005,
7608 0x591c0406, 0x82000580, 0x00000003, 0x04000007,
7609 0x59300809, 0x58040002, 0x82000500, 0x00ffffff,
7610 0x4801a007, 0x0401f003, 0x59a80010, 0x4801a007,
7611 0x59300419, 0x4801a408, 0x59300219, 0x4801a208,
7612 0x42000800, 0x00000003, 0x42001000, 0x0000dc00,
7613 0x5c023800, 0x5c027000, 0x0401f26e, 0x0201f800,
7614 0x00106c55, 0x598c000d, 0x81300580, 0x02020800,
7615 0x001005d8, 0x0201f800, 0x00106bbf, 0x0201f800,
7616 0x0002077d, 0x5c023800, 0x5c027000, 0x0201f000,
7617 0x00106c4b, 0x4803c856, 0x4d2c0000, 0x4d1c0000,
7618 0x5932381e, 0x811e39c0, 0x02000800, 0x001005d8,
7619 0x591c0c06, 0x82040580, 0x00000006, 0x0400000d,
7620 0x82040580, 0x00000003, 0x04000036, 0x4a026403,
7621 0x00000037, 0x4a02641a, 0x00000003, 0x4a02621a,
7622 0x00001700, 0x5c023800, 0x5c025800, 0x0401f064,
7623 0x0401f84b, 0x42001000, 0x40000000, 0x591c0203,
7624 0x591c0804, 0x8c040d3e, 0x04020023, 0x82000c80,
7625 0x0000000e, 0x0c001003, 0x0201f800, 0x001005d8,
7626 0x00107691, 0x0010769d, 0x00107693, 0x0010769d,
7627 0x00107699, 0x00107691, 0x00107691, 0x0010769d,
7628 0x0010769d, 0x00107691, 0x00107691, 0x00107691,
7629 0x00107691, 0x00107691, 0x0010769d, 0x00107691,
7630 0x0010769d, 0x0201f800, 0x001005d8, 0x591c0414,
7631 0x4803c857, 0x8c000518, 0x04000003, 0x8c000512,
7632 0x04000003, 0x80001580, 0x0401f003, 0x42001000,
7633 0x20000000, 0x591c0015, 0x4801a00a, 0x0401f018,
7634 0x0401f81f, 0x591e5808, 0x812e59c0, 0x02000800,
7635 0x001005d8, 0x592c100f, 0x591c0011, 0x80080480,
7636 0x4801a00a, 0x591c0203, 0x591c0804, 0x8c040d3e,
7637 0x04020007, 0x82000d80, 0x00000002, 0x04000007,
7638 0x82000d80, 0x00000004, 0x04000004, 0x42001000,
7639 0x40000000, 0x0401f002, 0x80001580, 0x4809a00b,
7640 0x42000800, 0x00000006, 0x42001000, 0x0000dc00,
7641 0x5c023800, 0x5c025800, 0x0401f1fe, 0x4803c856,
7642 0x0401fe0a, 0x4a01a006, 0x02000000, 0x59300c19,
7643 0x4805a407, 0x59300a19, 0x4805a207, 0x59a81010,
7644 0x59300809, 0x58041802, 0x820c1d00, 0x00ffffff,
7645 0x5930081e, 0x58040406, 0x82000580, 0x00000003,
7646 0x04020004, 0x4809a008, 0x480da009, 0x0401f003,
7647 0x480da008, 0x4809a009, 0x1c01f000, 0x4803c856,
7648 0x0401fdf2, 0x0401f003, 0x4803c856, 0x0401fde8,
7649 0x4a01a006, 0x01000000, 0x5930041a, 0x4801a407,
7650 0x5930021a, 0x4801a207, 0x42000800, 0x00000002,
7651 0x42001000, 0x0000dc00, 0x0401f1d6, 0x4803c856,
7652 0x4d1c0000, 0x0401fdcc, 0x4a01a006, 0x14000000,
7653 0x5932381e, 0x591c0019, 0x4801a005, 0x59300419,
7654 0x4801a407, 0x59300219, 0x4801a207, 0x59300015,
7655 0x4801a008, 0x59300216, 0x82000500, 0x000000ff,
7656 0x840001c0, 0x4801a409, 0x42000800, 0x00000004,
7657 0x42001000, 0x0000dc00, 0x5c023800, 0x0401f1bd,
7658 0x4803c856, 0x0401f80b, 0x5930041a, 0x900001c0,
7659 0x4801a005, 0x0401f9ec, 0x41780800, 0x42001000,
7660 0x00005c00, 0x0401f9b3, 0x0201f000, 0x0010604d,
7661 0x4803c856, 0x59300817, 0x82041c00, 0x00000005,
7662 0x46034800, 0x00000021, 0x58040404, 0x82000500,
7663 0x0000f000, 0x82000580, 0x00003000, 0x04000003,
7664 0x46034800, 0x00000041, 0x81a5a000, 0x580c0001,
7665 0x82000d00, 0x00ffffff, 0x82040d40, 0xc2000000,
7666 0x4805a000, 0x580c0800, 0x82041500, 0x00ffffff,
7667 0x82000500, 0xff000000, 0x80080540, 0x4801a001,
7668 0x580c0002, 0x82000580, 0x00c00000, 0x82000500,
7669 0x00fd0300, 0x4801a002, 0x580c0003, 0x4801a003,
7670 0x580c0404, 0x4801a404, 0x580c0204, 0x4801a204,
7671 0x1c01f000, 0x4803c856, 0x59a80026, 0x82000500,
7672 0x00000028, 0x04020009, 0x59a80026, 0x82000500,
7673 0x00000028, 0x04000003, 0x497a6a12, 0x0401f003,
7674 0x4a026a12, 0x0000ff00, 0x42005000, 0x22000000,
7675 0x42006000, 0x01380000, 0x41786800, 0x41787800,
7676 0x0401f952, 0x59301008, 0x4a01a006, 0x54000000,
7677 0x59a80010, 0x82000500, 0x00ffffff, 0x58080c0a,
7678 0x800408f0, 0x80040540, 0x4801a007, 0x5808000a,
7679 0x82000500, 0xff000000, 0x4801a008, 0x59a80002,
7680 0x4801a009, 0x59a80003, 0x4801a00a, 0x59a80000,
7681 0x4801a00b, 0x59a80001, 0x4801a00c, 0x5808000c,
7682 0x9c0001c0, 0x4801a00d, 0x5808000d, 0x9c0001c0,
7683 0x4801a00e, 0x5808000e, 0x9c0001c0, 0x4801a00f,
7684 0x5808000f, 0x9c0001c0, 0x4801a010, 0x58080010,
7685 0x9c0001c0, 0x4801a011, 0x58080011, 0x9c0001c0,
7686 0x4801a012, 0x58080012, 0x9c0001c0, 0x4801a013,
7687 0x58080013, 0x9c0001c0, 0x4801a014, 0x58080010,
7688 0x9c0001c0, 0x4801a015, 0x58080011, 0x9c0001c0,
7689 0x4801a016, 0x58080012, 0x9c0001c0, 0x4801a017,
7690 0x58080013, 0x9c0001c0, 0x4801a018, 0x42000800,
7691 0x00000013, 0x42001000, 0x0000dc00, 0x0401f135,
7692 0x4803c856, 0x42005000, 0x22000000, 0x42006000,
7693 0x01290000, 0x41786800, 0x41787800, 0x0401f90b,
7694 0x59301008, 0x4a01a006, 0x55000000, 0x5808000b,
7695 0x82000500, 0x00ffffff, 0x58080c0a, 0x800408f0,
7696 0x80040540, 0x4801a007, 0x5808080a, 0x82040d00,
7697 0xff000000, 0x59a80010, 0x82000500, 0x00ffffff,
7698 0x80040540, 0x4801a008, 0x5808000c, 0x9c0001c0,
7699 0x4801a009, 0x5808000d, 0x9c0001c0, 0x4801a00a,
7700 0x5808000e, 0x9c0001c0, 0x4801a00b, 0x5808000f,
7701 0x9c0001c0, 0x4801a00c, 0x59a80002, 0x4801a00d,
7702 0x59a80003, 0x4801a00e, 0x59a80000, 0x4801a00f,
7703 0x59a80001, 0x4801a010, 0x58080010, 0x4801a011,
7704 0x58080011, 0x4801a012, 0x58080012, 0x4801a013,
7705 0x58080013, 0x4801a014, 0x4979a015, 0x4979a016,
7706 0x4979a017, 0x4979a018, 0x42000800, 0x00000013,
7707 0x42001000, 0x0000dc00, 0x0401f0f6, 0x0401fd03,
7708 0x5930001c, 0x800001c0, 0x04000008, 0x4a01a006,
7709 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
7710 0x00000002, 0x0401f028, 0x4a01a006, 0x02000000,
7711 0x41780800, 0x836c0580, 0x00000004, 0x04020003,
7712 0x84040d42, 0x0401f00d, 0x0201f800, 0x0010513b,
7713 0x04020003, 0x84040d4a, 0x0401f002, 0x84040d48,
7714 0x59a80026, 0x8c000506, 0x04020003, 0x8c00050a,
7715 0x04000002, 0x84040d46, 0x4805a207, 0x59c40085,
7716 0x48031004, 0x4c580000, 0x4c500000, 0x4c540000,
7717 0x4200b000, 0x00000006, 0x8388a400, 0x00000000,
7718 0x82d0ac00, 0x00000008, 0x0201f800, 0x0010ab17,
7719 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x42000800,
7720 0x00000008, 0x42001000, 0x0000dc00, 0x0401f0c1,
7721 0x0401fcc0, 0x4a01a006, 0x56000000, 0x59340006,
7722 0x4801a007, 0x59340007, 0x4801a008, 0x42000800,
7723 0x00000003, 0x42001000, 0x0000dc00, 0x0401f0b5,
7724 0x4803c856, 0x0401fcc1, 0x5930081c, 0x800409c0,
7725 0x0400000e, 0x82040580, 0x0000ffff, 0x04000004,
7726 0x82040480, 0x00000007, 0x04021008, 0x4a01a006,
7727 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
7728 0x00000002, 0x0401f012, 0x4a01a006, 0x0200001c,
7729 0x4a01a007, 0x00000001, 0x42001000, 0x0010b4f0,
7730 0x50080000, 0x9c0001c0, 0x4801a009, 0x59a80010,
7731 0x4801a00a, 0x59a80002, 0x59a80803, 0x4801a00b,
7732 0x4805a00c, 0x42000800, 0x00000007, 0x42001000,
7733 0x0000dc00, 0x0401f08f, 0x4d2c0000, 0x0401fc8d,
7734 0x59325808, 0x592c0008, 0x82000500, 0x00ffffff,
7735 0x4801a001, 0x4a01a006, 0x51000000, 0x5c025800,
7736 0x0201f000, 0x00107344, 0x4803c856, 0x59a80810,
7737 0x82040d00, 0x000000ff, 0x59325808, 0x59326809,
7738 0x59a83026, 0x8c18350a, 0x04020008, 0x8c00050e,
7739 0x04020006, 0x80001d80, 0x59a82010, 0x82102500,
7740 0x000000ff, 0x0401f001, 0x59300406, 0x4803c857,
7741 0x82000d80, 0x00000009, 0x04000006, 0x82000d80,
7742 0x0000000a, 0x0400002e, 0x0201f800, 0x001005d8,
7743 0x59300015, 0x8c00051e, 0x04020020, 0x42005000,
7744 0x04000000, 0x42006000, 0x05000000, 0x592c040a,
7745 0x82000500, 0x00000030, 0x800000e0, 0x80306540,
7746 0x5934000a, 0x8c000508, 0x04000002, 0x84306546,
7747 0x41786800, 0x41787800, 0x0401f831, 0x59300c14,
7748 0x80040000, 0x48026414, 0x40040000, 0x800000d0,
7749 0x82000540, 0x00000020, 0x4801a403, 0x83180d40,
7750 0x00000038, 0x42001000, 0x0000c920, 0x0401f860,
7751 0x0201f000, 0x00106052, 0x59a80026, 0x82000500,
7752 0x00000028, 0x04000003, 0x497a6a12, 0x0401f7dc,
7753 0x4a026a12, 0x0000ff00, 0x0401f7d9, 0x42005000,
7754 0x02000000, 0x42006000, 0x20290000, 0x41786800,
7755 0x41787800, 0x0401f812, 0x83180d40, 0x00000038,
7756 0x42001000, 0x0000c9a0, 0x0401f849, 0x42000800,
7757 0x000007d0, 0x59300011, 0x82000500, 0xfff00000,
7758 0x80000540, 0x04000003, 0x42000800, 0x00001b58,
7759 0x41781000, 0x0201f000, 0x00106054, 0x4201a000,
7760 0x00000000, 0x0401f003, 0x4201a000, 0x00000011,
7761 0x59340a12, 0x82040d00, 0x0000ff00, 0x59a80010,
7762 0x82000500, 0x000000ff, 0x900001c0, 0x80040540,
7763 0x80d00540, 0x44034800, 0x81a5a000, 0x59340002,
7764 0x82000500, 0x00ffffff, 0x80280540, 0x4801a000,
7765 0x59a80010, 0x4801a001, 0x4831a002, 0x82340540,
7766 0x00000000, 0x4801a003, 0x59300402, 0x4801a404,
7767 0x59300a02, 0x4805a204, 0x8c30652e, 0x04000003,
7768 0x4805a404, 0x4801a204, 0x483da005, 0x1c01f000,
7769 0x4803c856, 0x4c040000, 0x0401f822, 0x5c000800,
7770 0x40040000, 0x80081540, 0x800000c4, 0x82000540,
7771 0x00002000, 0x4803910a, 0x59b400f6, 0x82000500,
7772 0x00000018, 0x040207fd, 0x4a0368f0, 0x0010b544,
7773 0x4a0368f1, 0x0010b54b, 0x480b68f3, 0x4a0378e4,
7774 0x00008000, 0x0201f000, 0x0010604d, 0x4807c857,
7775 0x480a2800, 0x4c040000, 0x0401f80a, 0x5c000800,
7776 0x59b400f6, 0x8c00050a, 0x040207fe, 0x49a768f2,
7777 0x480768f4, 0x4a0378e4, 0x00008000, 0x1c01f000,
7778 0x4a0378e4, 0x0000c000, 0x59bc00e4, 0x8c000520,
7779 0x0400000c, 0x4a0378e4, 0x00008000, 0x42007000,
7780 0x000003e8, 0x59bc00e4, 0x8c000520, 0x040007f5,
7781 0x80387040, 0x02000800, 0x001005d8, 0x0401f7fa,
7782 0x1c01f000, 0x82000500, 0xffff0000, 0x82000580,
7783 0x01050000, 0x0402000d, 0x599c0818, 0x8c040d10,
7784 0x0400000a, 0x59a80807, 0x8c040d0a, 0x04000007,
7785 0x42001000, 0x0000804f, 0x41781800, 0x41782000,
7786 0x0201f800, 0x00103a3e, 0x1c01f000, 0x41781000,
7787 0x42026000, 0x0010d1c0, 0x59a8180e, 0x480a6402,
7788 0x4a026202, 0x0000ffff, 0x80081000, 0x800c1840,
7789 0x04000004, 0x83326400, 0x00000024, 0x0401f7f8,
7790 0x1c01f000, 0x4933c857, 0x59300203, 0x82000580,
7791 0x00000000, 0x0400002c, 0x59300406, 0x4803c857,
7792 0x82000d80, 0x00000004, 0x04000011, 0x82000d80,
7793 0x00000001, 0x0400000e, 0x82000d80, 0x00000003,
7794 0x04000006, 0x82000d80, 0x00000006, 0x04020011,
7795 0x0201f800, 0x0010a5df, 0x5930001c, 0x800001c0,
7796 0x02020800, 0x0010984e, 0x0401f00a, 0x5930081e,
7797 0x4807c857, 0x800409c0, 0x04000006, 0x5804001c,
7798 0x4803c857, 0x81300580, 0x04020002, 0x4978081c,
7799 0x497a6008, 0x4a026004, 0x00004000, 0x59a80037,
7800 0x82000c80, 0x00000051, 0x04001002, 0x80000102,
7801 0x48026206, 0x497a6205, 0x497a6009, 0x4a026406,
7802 0x00000007, 0x1c01f000, 0x8166c9c0, 0x0400001c,
7803 0x41626000, 0x41580000, 0x59300a03, 0x82040d80,
7804 0x00000000, 0x04000008, 0x83326400, 0x00000024,
7805 0x81300c80, 0x040017f9, 0x42026000, 0x0010d1c0,
7806 0x0401f7f6, 0x4933c857, 0x8166c840, 0x83300c00,
7807 0x00000024, 0x80040480, 0x04021006, 0x4006c000,
7808 0x4a026203, 0x00000008, 0x813261c0, 0x1c01f000,
7809 0x4202c000, 0x0010d1c0, 0x0401f7fa, 0x42000000,
7810 0x0010b854, 0x0201f800, 0x0010aa47, 0x4933c856,
7811 0x417a6000, 0x0401f7f5, 0x4933c857, 0x83380580,
7812 0x00000013, 0x0402000b, 0x59300004, 0x8c00053e,
7813 0x04000007, 0x0201f800, 0x00106c55, 0x0201f800,
7814 0x00106bbf, 0x0201f800, 0x00106c4b, 0x1c01f000,
7815 0x4933c857, 0x59880052, 0x80000000, 0x48031052,
7816 0x1c01f000, 0x4933c857, 0x59300203, 0x82003480,
7817 0x0000000e, 0x02021800, 0x001005d8, 0x4d2c0000,
7818 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00107991,
7819 0x00107efd, 0x0010804a, 0x00107991, 0x001080b0,
7820 0x00107af5, 0x00107991, 0x00107991, 0x00107e93,
7821 0x00107991, 0x00107991, 0x00107991, 0x00107991,
7822 0x00107991, 0x0201f800, 0x001005d8, 0x4933c857,
7823 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
7824 0x001005d8, 0x0c01f001, 0x001079a8, 0x00108a3d,
7825 0x001079a8, 0x001079a8, 0x001079a8, 0x001079a8,
7826 0x001079a8, 0x001079a8, 0x001089e5, 0x00108a58,
7827 0x00108ac6, 0x00108a58, 0x00108ac6, 0x001079a8,
7828 0x0201f800, 0x001005d8, 0x0201f800, 0x001005d8,
7829 0x4933c857, 0x4d2c0000, 0x59325808, 0x59300203,
7830 0x82003480, 0x0000000e, 0x02021800, 0x001005d8,
7831 0x0c01f803, 0x5c025800, 0x1c01f000, 0x001079c5,
7832 0x001079c5, 0x001079c5, 0x001079e1, 0x00107a2d,
7833 0x001079c5, 0x001079c5, 0x001079c5, 0x001079c7,
7834 0x001079c5, 0x001079c5, 0x001079c5, 0x001079c5,
7835 0x001079c5, 0x0201f800, 0x001005d8, 0x4933c857,
7836 0x83380580, 0x00000040, 0x02020800, 0x001005d8,
7837 0x4a026007, 0x00082000, 0x4a026203, 0x00000003,
7838 0x493a6403, 0x4a025c08, 0x00000001, 0x592c000d,
7839 0x48026011, 0x497a6013, 0x592c0208, 0x800000c2,
7840 0x800010c4, 0x80081400, 0x480a6206, 0x0201f800,
7841 0x00100f4e, 0x42000800, 0x80000060, 0x0201f000,
7842 0x00106721, 0x4933c857, 0x83380480, 0x00000050,
7843 0x02021800, 0x001005d8, 0x83380480, 0x00000049,
7844 0x02001800, 0x001005d8, 0x0c01f001, 0x001079f4,
7845 0x001079ff, 0x001079f2, 0x001079f2, 0x001079f2,
7846 0x001079f2, 0x00107a0a, 0x0201f800, 0x001005d8,
7847 0x4a026203, 0x00000004, 0x4a025c08, 0x00000002,
7848 0x592c0207, 0x48025c09, 0x592c0209, 0x48025a07,
7849 0x592c000c, 0x4802580d, 0x1c01f000, 0x0201f800,
7850 0x00106b8a, 0x0201f800, 0x00109037, 0x04000005,
7851 0x4a025a06, 0x00000006, 0x0201f800, 0x000202da,
7852 0x0201f000, 0x0002077d, 0x0201f800, 0x00106b8a,
7853 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010203c,
7854 0x5c027800, 0x42003000, 0x00000014, 0x41782800,
7855 0x42002000, 0x00000002, 0x4d400000, 0x4d440000,
7856 0x59368c03, 0x42028000, 0x00000029, 0x0201f800,
7857 0x0010985e, 0x5c028800, 0x5c028000, 0x42000000,
7858 0x0010b864, 0x0201f800, 0x0010aa47, 0x0201f800,
7859 0x00109037, 0x02000000, 0x0002077d, 0x4a025a06,
7860 0x00000029, 0x0201f800, 0x000202da, 0x0201f000,
7861 0x0002077d, 0x4933c857, 0x83380580, 0x00000048,
7862 0x04000005, 0x83380580, 0x00000053, 0x02020800,
7863 0x001005d8, 0x592c0206, 0x82000580, 0x00000007,
7864 0x04000009, 0x59300011, 0x80000540, 0x04000006,
7865 0x592c080c, 0x80040480, 0x4802580c, 0x4a025a06,
7866 0x00000015, 0x592c0206, 0x80000540, 0x04020003,
7867 0x4a025a06, 0x00000000, 0x0201f800, 0x000202da,
7868 0x0201f000, 0x0002077d, 0x4933c857, 0x4d2c0000,
7869 0x4c500000, 0x4c540000, 0x4c580000, 0x0201f800,
7870 0x001007e4, 0x02000800, 0x001005d8, 0x497a5a06,
7871 0x59c80017, 0x82000500, 0x0000f000, 0x48025c07,
7872 0x59a80816, 0x82040c00, 0x00000018, 0x48065a07,
7873 0x412c7800, 0x4d2c0000, 0x41cca000, 0x42002800,
7874 0x00000001, 0x42001000, 0x0000002c, 0x82040480,
7875 0x0000002d, 0x04021006, 0x832cac00, 0x00000009,
7876 0x0201f800, 0x00108b96, 0x0401f02e, 0x40043000,
7877 0x42000800, 0x0000002c, 0x832cac00, 0x00000009,
7878 0x0201f800, 0x00108b96, 0x82183480, 0x0000002c,
7879 0x0201f800, 0x001007e4, 0x0400001a, 0x80142800,
7880 0x4a025804, 0x00000110, 0x492c7801, 0x82180c80,
7881 0x0000003d, 0x04021007, 0x40180800, 0x832cac00,
7882 0x00000005, 0x0201f800, 0x00108b96, 0x0401f015,
7883 0x82081400, 0x0000003c, 0x82183480, 0x0000003c,
7884 0x42000800, 0x0000003c, 0x412c7800, 0x832cac00,
7885 0x00000005, 0x0201f800, 0x00108b96, 0x0401f7e5,
7886 0x5c025800, 0x592c0206, 0x8400055e, 0x48025a06,
7887 0x592c0407, 0x80080540, 0x48025c07, 0x0401f002,
7888 0x5c025800, 0x813669c0, 0x04000003, 0x59343403,
7889 0x0401f003, 0x42003000, 0x0000ffff, 0x49325808,
7890 0x481a5c06, 0x82100580, 0x00000054, 0x04020002,
7891 0x491e5813, 0x841401c0, 0x80100540, 0x48025804,
7892 0x592c0001, 0x497a5801, 0x4c000000, 0x0201f800,
7893 0x000202da, 0x5c025800, 0x812e59c0, 0x040207f9,
7894 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
7895 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
7896 0x4c500000, 0x4c540000, 0x4c580000, 0x412cb800,
7897 0x592c040b, 0x8c000516, 0x04000003, 0x41cca000,
7898 0x0401f003, 0x83cca400, 0x00000006, 0x4008b000,
7899 0x41781000, 0x82580480, 0x00000012, 0x04001004,
7900 0x4200b000, 0x00000012, 0x40001000, 0x4c080000,
7901 0x4d2c0000, 0x0201f800, 0x001007e4, 0x04000023,
7902 0x5c001800, 0x492c1801, 0x485a5800, 0x832cac00,
7903 0x00000002, 0x0201f800, 0x0010ab28, 0x585c040b,
7904 0x8c000500, 0x0400000e, 0x832c1400, 0x00000002,
7905 0x8c000516, 0x04000003, 0x82081400, 0x00000006,
7906 0x46001000, 0x00000001, 0x80081000, 0x46001000,
7907 0x00000900, 0x84000500, 0x4800bc0b, 0x5c001000,
7908 0x800811c0, 0x040207da, 0x82000540, 0x00000001,
7909 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
7910 0x5c00b800, 0x1c01f000, 0x5c025800, 0x5c001000,
7911 0x0401f7f8, 0x4933c857, 0x83380d80, 0x00000015,
7912 0x04020003, 0x0201f000, 0x0002077d, 0x83380d80,
7913 0x00000016, 0x02020800, 0x001005d8, 0x0201f000,
7914 0x0002077d, 0x4933c857, 0x4d2c0000, 0x4c500000,
7915 0x4c540000, 0x4c580000, 0x59325808, 0x83cca400,
7916 0x00000006, 0x59cc1806, 0x820c0580, 0x01000000,
7917 0x04020004, 0x4200b000, 0x00000002, 0x0401f00f,
7918 0x4200b000, 0x00000008, 0x832cac00, 0x00000005,
7919 0x0201f800, 0x0010ab17, 0x8c0c1d00, 0x0400000b,
7920 0x4200b000, 0x00000008, 0x592e5801, 0x812e59c0,
7921 0x02000800, 0x001005d8, 0x832cac00, 0x00000005,
7922 0x0201f800, 0x0010ab17, 0x0401f816, 0x5c00b000,
7923 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
7924 0x4933c857, 0x4c500000, 0x4c540000, 0x4c580000,
7925 0x83cca400, 0x00000006, 0x5930a808, 0x8254ac00,
7926 0x00000005, 0x4200b000, 0x00000007, 0x0201f800,
7927 0x0010ab17, 0x5c00b000, 0x5c00a800, 0x5c00a000,
7928 0x4933c857, 0x0201f800, 0x00109037, 0x02000000,
7929 0x0002077d, 0x4d2c0000, 0x0201f800, 0x00109597,
7930 0x0402000b, 0x41780800, 0x4d400000, 0x42028000,
7931 0x00000000, 0x0201f800, 0x0010943b, 0x5c028000,
7932 0x5c025800, 0x0201f000, 0x0002077d, 0x5931d821,
7933 0x58ef400b, 0x58ee580d, 0x4a025a04, 0x00000103,
7934 0x58ec0009, 0x0801f800, 0x5c025800, 0x0201f000,
7935 0x0002077d, 0x4933c857, 0x59cc1806, 0x820c0580,
7936 0x02000000, 0x04020014, 0x4a026802, 0x00fffffd,
7937 0x5934000a, 0x84000504, 0x4802680a, 0x59300808,
7938 0x800409c0, 0x02000000, 0x0002077d, 0x4a000a04,
7939 0x00000103, 0x480c0805, 0x5931d821, 0x58ef400b,
7940 0x58ee580d, 0x58ec0009, 0x0801f800, 0x0201f000,
7941 0x0002077d, 0x42000000, 0x0010b86c, 0x0201f800,
7942 0x0010aa47, 0x4c0c0000, 0x0401f804, 0x5c001800,
7943 0x040207eb, 0x1c01f000, 0x4933c857, 0x4d2c0000,
7944 0x59325808, 0x812e59c0, 0x04020009, 0x497a6206,
7945 0x497a6205, 0x4d380000, 0x42027000, 0x00000022,
7946 0x0401fb77, 0x5c027000, 0x80000580, 0x5c025800,
7947 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000,
7948 0x4c540000, 0x4c580000, 0x59325808, 0x592e5801,
7949 0x832cac00, 0x00000005, 0x83cca400, 0x00000006,
7950 0x59c80817, 0x82040d00, 0x000003ff, 0x82041480,
7951 0x0000000f, 0x0400101b, 0x4200b000, 0x0000000f,
7952 0x0201f800, 0x0010ab17, 0x592e5801, 0x832cac00,
7953 0x00000005, 0x82080c80, 0x0000000f, 0x0400100d,
7954 0x4200b000, 0x0000000f, 0x0201f800, 0x0010ab17,
7955 0x592e5801, 0x832cac00, 0x00000005, 0x82041480,
7956 0x0000000f, 0x04001007, 0x42001000, 0x0000000f,
7957 0x4008b000, 0x0201f800, 0x0010ab17, 0x0401f004,
7958 0x4004b000, 0x0201f800, 0x0010ab17, 0x5931d821,
7959 0x58ef400b, 0x58ee580d, 0x4a025a04, 0x00000103,
7960 0x592e5801, 0x58ec0009, 0x0801f800, 0x0201f800,
7961 0x0002077d, 0x5c00b000, 0x5c00a800, 0x5c00a000,
7962 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
7963 0x4c500000, 0x4c540000, 0x4c580000, 0x59cc0006,
7964 0x82000d80, 0x01000000, 0x0400002c, 0x59cc0007,
7965 0x9000b1c0, 0x8258b500, 0x000000ff, 0x8058b104,
7966 0x8258b400, 0x00000002, 0x82580c80, 0x00000007,
7967 0x04001003, 0x4200b000, 0x00000006, 0x83cca400,
7968 0x00000006, 0x59301008, 0x800811c0, 0x02000800,
7969 0x001005d8, 0x8208ac00, 0x00000005, 0x0201f800,
7970 0x0010ab17, 0x82000d00, 0xff000000, 0x800409c0,
7971 0x04000019, 0x8200b500, 0x000000ff, 0x8058b104,
7972 0x82580c80, 0x0000000e, 0x04001003, 0x4200b000,
7973 0x0000000d, 0x58081001, 0x800811c0, 0x02000800,
7974 0x001005d8, 0x8208ac00, 0x00000005, 0x0201f800,
7975 0x0010ab17, 0x0401f008, 0x59301008, 0x800811c0,
7976 0x02000800, 0x001005d8, 0x48001005, 0x59cc0007,
7977 0x48001006, 0x0401ff3b, 0x5c00b000, 0x5c00a800,
7978 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
7979 0x42000800, 0x00000000, 0x59cc0006, 0x82000580,
7980 0x02000000, 0x04000003, 0x42000800, 0x00000001,
7981 0x4d2c0000, 0x59325808, 0x812e59c0, 0x02000800,
7982 0x001005d8, 0x48065a06, 0x0201f800, 0x000202da,
7983 0x5c025800, 0x0201f000, 0x0002077d, 0x4933c857,
7984 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
7985 0x4200b000, 0x00000002, 0x59cc0806, 0x82040580,
7986 0x01000000, 0x04000004, 0x8204b500, 0x0000ffff,
7987 0x8058b104, 0x83cca400, 0x00000006, 0x59300008,
7988 0x8200ac00, 0x00000005, 0x0201f800, 0x0010ab17,
7989 0x0401ff0c, 0x5c00b000, 0x5c00a800, 0x5c00a000,
7990 0x5c025800, 0x1c01f000, 0x4933c857, 0x4803c857,
7991 0x4807c857, 0x480bc857, 0x480fc857, 0x4813c857,
7992 0x481bc857, 0x492fc857, 0x4d2c0000, 0x4c000000,
7993 0x0201f800, 0x001007d3, 0x5c000000, 0x0400000f,
7994 0x48025803, 0x5c000000, 0x4802580a, 0x4c000000,
7995 0x481a5801, 0x48125809, 0x48065804, 0x480a5807,
7996 0x480e5808, 0x412c1000, 0x0201f800, 0x00100858,
7997 0x82000540, 0x00000001, 0x5c025800, 0x1c01f000,
7998 0x4933c857, 0x4d1c0000, 0x59cc0001, 0x82000500,
7999 0x00ffffff, 0x59341002, 0x82081500, 0x00ffffff,
8000 0x80080580, 0x0402001f, 0x497a6205, 0x4d380000,
8001 0x42027000, 0x00000035, 0x0201f800, 0x001093ba,
8002 0x5c027000, 0x04020012, 0x591c001c, 0x800001c0,
8003 0x0400000f, 0x497a381c, 0x591c0414, 0x8c000502,
8004 0x02000800, 0x001005d8, 0x84000502, 0x48023c14,
8005 0x591c1406, 0x82080580, 0x00000003, 0x04000006,
8006 0x82080580, 0x00000006, 0x04000005, 0x0401fc9e,
8007 0x0401f004, 0x0401f805, 0x0401f002, 0x0401f8c0,
8008 0x5c023800, 0x1c01f000, 0x4d2c0000, 0x591e5808,
8009 0x4933c857, 0x491fc857, 0x493bc857, 0x492fc857,
8010 0x83380580, 0x00000015, 0x040000b3, 0x83380580,
8011 0x00000016, 0x040200ae, 0x4d300000, 0x411e6000,
8012 0x59cc0207, 0x4803c857, 0x82000d00, 0x0000ff00,
8013 0x82040580, 0x00001700, 0x04000004, 0x82040580,
8014 0x00000300, 0x0402005b, 0x591c0203, 0x4803c857,
8015 0x82000580, 0x0000000d, 0x0400003f, 0x812e59c0,
8016 0x0400009a, 0x591c0202, 0x4803c857, 0x82000580,
8017 0x0000ffff, 0x0402007e, 0x592c020a, 0x4803c857,
8018 0x82000500, 0x00000003, 0x82000580, 0x00000002,
8019 0x04020007, 0x592c080f, 0x591c0011, 0x4803c857,
8020 0x4807c857, 0x80040580, 0x04020071, 0x591c0414,
8021 0x4803c857, 0x8c000500, 0x0402006d, 0x41780800,
8022 0x591c1206, 0x42000000, 0x0000000a, 0x0201f800,
8023 0x001066a0, 0x592c0406, 0x4803c857, 0x800001c0,
8024 0x0400000c, 0x80080c80, 0x04001004, 0x02020800,
8025 0x001005d8, 0x80001040, 0x480a5c06, 0x800811c0,
8026 0x04020004, 0x0201f800, 0x00108d88, 0x0401f06b,
8027 0x0201f800, 0x0010912a, 0x591c0817, 0x591c0018,
8028 0x48065808, 0x48025809, 0x59300007, 0x8c000500,
8029 0x02020800, 0x00100e99, 0x497a3808, 0x0201f800,
8030 0x000201ba, 0x0402004a, 0x411e6000, 0x0401fc3e,
8031 0x0401f05a, 0x0401fc6d, 0x04000013, 0x49366009,
8032 0x4a026406, 0x00000003, 0x492e6008, 0x591c0817,
8033 0x591c1018, 0x48066017, 0x480a6018, 0x4d380000,
8034 0x591e7403, 0x4d300000, 0x411e6000, 0x0401fc2e,
8035 0x5c026000, 0x0201f800, 0x000207a1, 0x5c027000,
8036 0x0401f046, 0x59a80039, 0x48023a05, 0x0401f043,
8037 0x59cc0407, 0x82000580, 0x0000000b, 0x04020025,
8038 0x59340a00, 0x84040d0e, 0x48066a00, 0x592c0a04,
8039 0x82040d00, 0x000000ff, 0x82040d80, 0x00000014,
8040 0x04000003, 0x4a02621d, 0x00000003, 0x59300007,
8041 0x8c000500, 0x02020800, 0x00100e99, 0x4d400000,
8042 0x42028000, 0x00000003, 0x592c0a08, 0x0201f800,
8043 0x00104e70, 0x0201f800, 0x000202da, 0x5c028000,
8044 0x497a6008, 0x4a026403, 0x00000085, 0x4a026203,
8045 0x00000009, 0x4a026406, 0x00000002, 0x42000800,
8046 0x8000404b, 0x0201f800, 0x00020721, 0x0401f01b,
8047 0x59cc0207, 0x82000580, 0x00002a00, 0x04020004,
8048 0x59a80039, 0x48023a05, 0x0401f014, 0x812e59c0,
8049 0x02000800, 0x001005d8, 0x4a025a04, 0x00000103,
8050 0x591c0007, 0x8c000500, 0x02020800, 0x00100e99,
8051 0x591c0402, 0x48025c06, 0x4a025a06, 0x00000003,
8052 0x0201f800, 0x000202c1, 0x0201f800, 0x00107911,
8053 0x0201f800, 0x001049b2, 0x5c026000, 0x0201f800,
8054 0x0002077d, 0x0401f002, 0x5c026000, 0x5c025800,
8055 0x1c01f000, 0x0401f819, 0x0401f7fd, 0x4933c857,
8056 0x83380580, 0x00000015, 0x04020004, 0x59a80039,
8057 0x48023a05, 0x0401f00d, 0x83380580, 0x00000016,
8058 0x0402000d, 0x4d300000, 0x411e6000, 0x0201f800,
8059 0x0010a5df, 0x0201f800, 0x000206fd, 0x0201f800,
8060 0x0002077d, 0x5c026000, 0x497a381c, 0x0201f800,
8061 0x0002077d, 0x1c01f000, 0x591c0414, 0x84000540,
8062 0x48023c14, 0x59cc100b, 0x4933c857, 0x491fc857,
8063 0x492fc857, 0x4803c857, 0x480bc857, 0x8c08153c,
8064 0x04000006, 0x59a80039, 0x48023a05, 0x497a381c,
8065 0x0201f000, 0x0002077d, 0x4d300000, 0x411e6000,
8066 0x0201f800, 0x00108bd7, 0x5c026000, 0x591c0406,
8067 0x82000580, 0x00000000, 0x02000000, 0x0002077d,
8068 0x591c0403, 0x82000580, 0x00000050, 0x0402000d,
8069 0x4d300000, 0x411e6000, 0x4a026203, 0x00000001,
8070 0x42000800, 0x80000043, 0x0201f800, 0x00020721,
8071 0x5c026000, 0x497a381c, 0x0201f000, 0x0002077d,
8072 0x591c0203, 0x82000580, 0x0000000d, 0x04000014,
8073 0x812e59c0, 0x02000800, 0x001005d8, 0x591c0203,
8074 0x82000580, 0x00000004, 0x04020011, 0x592c020a,
8075 0x8c000502, 0x0400000e, 0x4a023812, 0x0fffffff,
8076 0x592c0208, 0x8400051e, 0x48025a08, 0x42000000,
8077 0x00000001, 0x48023a14, 0x0401f021, 0x42000000,
8078 0x00000007, 0x48023a14, 0x0401f01d, 0x592c020a,
8079 0x4803c857, 0x8c000500, 0x0402000b, 0x8c000502,
8080 0x040007f7, 0x591c0414, 0x8c00051c, 0x040207eb,
8081 0x591c0011, 0x4803c857, 0x800001c0, 0x040007f0,
8082 0x0401f7e6, 0x8c08153a, 0x040207ed, 0x59cc000a,
8083 0x592c180f, 0x4803c857, 0x480fc857, 0x800c0580,
8084 0x040007e7, 0x59cc000a, 0x4803c857, 0x48023816,
8085 0x42000000, 0x00000005, 0x48023a14, 0x0201f000,
8086 0x00109259, 0x4933c857, 0x4d1c0000, 0x59cc0001,
8087 0x59341002, 0x80080580, 0x82000500, 0x00ffffff,
8088 0x04020041, 0x59301419, 0x0201f800, 0x00109410,
8089 0x02000800, 0x001005d8, 0x591c1406, 0x82080580,
8090 0x00000007, 0x04000038, 0x82080580, 0x00000002,
8091 0x04000035, 0x82080580, 0x00000000, 0x04000032,
8092 0x591c0202, 0x82000d80, 0x0000ffff, 0x04000004,
8093 0x59301a19, 0x800c0580, 0x0402002b, 0x83380580,
8094 0x00000015, 0x04000026, 0x4d300000, 0x4d2c0000,
8095 0x411e6000, 0x59325808, 0x0201f800, 0x00109037,
8096 0x02000800, 0x001005d8, 0x592c0204, 0x82000500,
8097 0x000000ff, 0x82000580, 0x00000014, 0x04000003,
8098 0x4a02621d, 0x00000003, 0x42028000, 0x00000003,
8099 0x592c0a08, 0x0201f800, 0x00104e70, 0x0201f800,
8100 0x000202da, 0x5c025800, 0x497a6008, 0x4a026403,
8101 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
8102 0x00000002, 0x42000800, 0x8000404b, 0x0201f800,
8103 0x00020721, 0x5c026000, 0x0401f003, 0x59a80039,
8104 0x48023a05, 0x497a381c, 0x0201f800, 0x0002077d,
8105 0x5c023800, 0x1c01f000, 0x4933c857, 0x4c580000,
8106 0x4d2c0000, 0x59325808, 0x83383580, 0x00000015,
8107 0x04000010, 0x59342200, 0x84102502, 0x48126a00,
8108 0x0201f800, 0x00109037, 0x04000066, 0x0201f800,
8109 0x00109597, 0x04020005, 0x4200b000, 0x00000002,
8110 0x0201f800, 0x0010957d, 0x0401fa0a, 0x0401f079,
8111 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
8112 0x83341c00, 0x00000006, 0x0201f800, 0x0010855a,
8113 0x04020015, 0x83cc1400, 0x0000000a, 0x4200b000,
8114 0x00000002, 0x83341c00, 0x00000008, 0x0201f800,
8115 0x0010855a, 0x0402000c, 0x0201f800, 0x00102074,
8116 0x59342200, 0x59cc1007, 0x800811c0, 0x04000003,
8117 0x480a6801, 0x84102542, 0x8410251a, 0x48126a00,
8118 0x0401f05f, 0x4d3c0000, 0x417a7800, 0x0201f800,
8119 0x0010203c, 0x5c027800, 0x42000000, 0x0010b864,
8120 0x0201f800, 0x0010aa47, 0x59340200, 0x84000558,
8121 0x48026a00, 0x4d300000, 0x0201f800, 0x0002075a,
8122 0x02000800, 0x001005d8, 0x49366009, 0x497a6008,
8123 0x4a026406, 0x00000001, 0x4a026403, 0x00000001,
8124 0x42003000, 0x00000003, 0x0201f800, 0x0010a942,
8125 0x0201f800, 0x00103b25, 0x04000011, 0x41782800,
8126 0x42003000, 0x00000001, 0x4d400000, 0x42028000,
8127 0x00000029, 0x0201f800, 0x0010a43e, 0x5c028000,
8128 0x4a026406, 0x00000004, 0x4a026203, 0x00000007,
8129 0x4a026420, 0x00000001, 0x0401f009, 0x4a026203,
8130 0x00000001, 0x42000800, 0x0000000b, 0x0201f800,
8131 0x00104571, 0x0201f800, 0x0010672b, 0x5c026000,
8132 0x0201f800, 0x00109037, 0x04000022, 0x0201f800,
8133 0x00109597, 0x04020022, 0x0401f9ae, 0x0401f01d,
8134 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010203c,
8135 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8136 0x59340200, 0x84000558, 0x48026a00, 0x42003000,
8137 0x00000003, 0x41782800, 0x42002000, 0x00000005,
8138 0x4d400000, 0x4d440000, 0x59368c03, 0x42028000,
8139 0x00000029, 0x0201f800, 0x0010985e, 0x5c028800,
8140 0x5c028000, 0x5c027800, 0x0201f800, 0x00102074,
8141 0x0201f800, 0x0002077d, 0x0401f002, 0x0401fca9,
8142 0x5c025800, 0x5c00b000, 0x1c01f000, 0x4933c857,
8143 0x41380000, 0x83383480, 0x00000056, 0x02021800,
8144 0x001005d8, 0x0c01f001, 0x00107ef7, 0x00107ef2,
8145 0x00107ef7, 0x00107ef7, 0x00107ef7, 0x00107ef7,
8146 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8147 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8148 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8149 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8150 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8151 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8152 0x00107ef0, 0x00107ef7, 0x00107ef0, 0x00107ef7,
8153 0x00107ef7, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8154 0x00107ef0, 0x00107ef0, 0x00107ef7, 0x00107ef0,
8155 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8156 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8157 0x00107ef7, 0x00107ef7, 0x00107ef0, 0x00107ef0,
8158 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef0,
8159 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef7,
8160 0x00107ef0, 0x00107ef0, 0x00107ef7, 0x00107ef7,
8161 0x00107ef0, 0x00107ef7, 0x00107ef7, 0x00107ef0,
8162 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef7,
8163 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef7,
8164 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef7,
8165 0x00107ef0, 0x00107ef0, 0x00107ef0, 0x00107ef7,
8166 0x0201f800, 0x001005d8, 0x4a026203, 0x00000001,
8167 0x493a6403, 0x0201f000, 0x0010672b, 0x4933c857,
8168 0x4a026203, 0x00000001, 0x493a6403, 0x0201f000,
8169 0x0010672b, 0x4933c857, 0x59300403, 0x82003480,
8170 0x00000056, 0x02021800, 0x001005d8, 0x83383580,
8171 0x00000013, 0x04000093, 0x83383580, 0x00000027,
8172 0x0402004b, 0x0201f800, 0x00106bbf, 0x0201f800,
8173 0x00109134, 0x0400000b, 0x0201f800, 0x0010914e,
8174 0x04000041, 0x59300403, 0x82000d80, 0x00000022,
8175 0x04020038, 0x0401fc61, 0x0400003a, 0x0401f03a,
8176 0x0201f800, 0x00102074, 0x42000800, 0x00000007,
8177 0x0201f800, 0x00104571, 0x0401f8fe, 0x4d440000,
8178 0x59368c03, 0x83440580, 0x000007fe, 0x04020008,
8179 0x59a81026, 0x84081540, 0x0201f800, 0x0010513b,
8180 0x04020002, 0x8408154a, 0x480b5026, 0x42028000,
8181 0x00000029, 0x4d3c0000, 0x417a7800, 0x0201f800,
8182 0x0010203c, 0x5c027800, 0x836c0580, 0x00000003,
8183 0x0400000c, 0x59326809, 0x59340008, 0x800001c0,
8184 0x04020008, 0x59368c03, 0x4933c857, 0x4937c857,
8185 0x4947c857, 0x0201f800, 0x001045fb, 0x0401f00c,
8186 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8187 0x42003000, 0x00000015, 0x41782800, 0x42002000,
8188 0x00000003, 0x0201f800, 0x0010985e, 0x5c028800,
8189 0x0201f800, 0x00109326, 0x0201f000, 0x0002077d,
8190 0x1c01f000, 0x0401f8cb, 0x0401f7fa, 0x83380580,
8191 0x00000014, 0x0400000b, 0x0201f800, 0x00106f60,
8192 0x02020000, 0x00107974, 0x59300203, 0x82000580,
8193 0x00000002, 0x040000ed, 0x0201f800, 0x001005d8,
8194 0x0201f800, 0x00106bbf, 0x4d3c0000, 0x417a7800,
8195 0x0201f800, 0x0010203c, 0x5c027800, 0x42003000,
8196 0x00000016, 0x41782800, 0x4d400000, 0x4d440000,
8197 0x59368c03, 0x42002000, 0x00000009, 0x42028000,
8198 0x00000029, 0x0201f800, 0x0010985e, 0x5c028800,
8199 0x5c028000, 0x42000000, 0x0010b864, 0x0201f800,
8200 0x0010aa47, 0x0201f800, 0x00109134, 0x0402000c,
8201 0x0201f800, 0x00102074, 0x0401f89e, 0x59340c03,
8202 0x82040580, 0x000007fe, 0x040207ca, 0x59a80826,
8203 0x84040d40, 0x48075026, 0x0401f7c6, 0x0201f800,
8204 0x0010914e, 0x04020003, 0x0401f892, 0x0401f7c1,
8205 0x59300403, 0x82000d80, 0x00000032, 0x04020004,
8206 0x0201f800, 0x0010230c, 0x0401f7ba, 0x59300403,
8207 0x82000d80, 0x00000022, 0x04000886, 0x0401f7b5,
8208 0x4803c857, 0x0c01f001, 0x00108016, 0x00108016,
8209 0x00108016, 0x00108016, 0x00108016, 0x00108016,
8210 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8211 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8212 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8213 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8214 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8215 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8216 0x00107ff9, 0x00108016, 0x00107ff0, 0x00108016,
8217 0x00108016, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8218 0x00107ff0, 0x00107ff0, 0x00108016, 0x00108016,
8219 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8220 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00107ff0,
8221 0x00108007, 0x00108016, 0x00107ff0, 0x00108000,
8222 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108000,
8223 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108016,
8224 0x00108003, 0x00107ff0, 0x00107ff2, 0x00108016,
8225 0x00107ff0, 0x00108016, 0x00108016, 0x00107ff0,
8226 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108016,
8227 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108016,
8228 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108016,
8229 0x00107ff0, 0x00107ff0, 0x00107ff0, 0x00108016,
8230 0x0201f800, 0x001005d8, 0x4d2c0000, 0x59325808,
8231 0x0201f800, 0x000202da, 0x5c025800, 0x0201f000,
8232 0x0002077d, 0x4a026203, 0x00000005, 0x59a80039,
8233 0x48026205, 0x59a80037, 0x48026206, 0x1c01f000,
8234 0x5930081e, 0x49780a05, 0x0401f014, 0x0201f800,
8235 0x00109326, 0x0201f000, 0x0002077d, 0x0201f800,
8236 0x0010230c, 0x0201f800, 0x00106c55, 0x04000005,
8237 0x0201f800, 0x00106bbf, 0x0201f000, 0x0002077d,
8238 0x0201f800, 0x00106bbf, 0x0201f800, 0x0002077d,
8239 0x0201f000, 0x00106c4b, 0x4933c857, 0x4a026203,
8240 0x00000002, 0x59a80037, 0x48026206, 0x1c01f000,
8241 0x4933c857, 0x0201f800, 0x00109037, 0x0400002a,
8242 0x4d2c0000, 0x0201f800, 0x00109597, 0x0402000a,
8243 0x4d400000, 0x42028000, 0x00000031, 0x42000800,
8244 0x00000004, 0x0201f800, 0x0010943b, 0x5c028000,
8245 0x0401f01c, 0x59300c06, 0x82040580, 0x00000010,
8246 0x04000004, 0x82040580, 0x00000011, 0x0402000a,
8247 0x4a025a06, 0x00000031, 0x4a02580d, 0x00000004,
8248 0x4a02580e, 0x000000ff, 0x0201f800, 0x000202da,
8249 0x0401f00c, 0x592c0404, 0x8c00051e, 0x04000009,
8250 0x4a025a04, 0x00000103, 0x4a025805, 0x01000000,
8251 0x5931d821, 0x58ef400b, 0x58ec0009, 0x0801f800,
8252 0x5c025800, 0x1c01f000, 0x4933c857, 0x59340400,
8253 0x82000500, 0x000000ff, 0x82003480, 0x0000000c,
8254 0x02021800, 0x001005d8, 0x59303403, 0x82180d80,
8255 0x0000004d, 0x02000000, 0x0010938b, 0x82180d80,
8256 0x00000033, 0x02000000, 0x00109349, 0x82180d80,
8257 0x00000028, 0x02000000, 0x0010918f, 0x82180d80,
8258 0x00000029, 0x02000000, 0x001091a3, 0x82180d80,
8259 0x0000001f, 0x02000000, 0x00107b28, 0x82180d80,
8260 0x00000055, 0x02000000, 0x00107b01, 0x82180d80,
8261 0x00000000, 0x04000591, 0x82180d80, 0x00000022,
8262 0x02000000, 0x00107b55, 0x82180d80, 0x00000035,
8263 0x02000000, 0x00107c50, 0x82180d80, 0x00000039,
8264 0x04000539, 0x82180d80, 0x0000003d, 0x02000000,
8265 0x00107b85, 0x82180d80, 0x00000044, 0x02000000,
8266 0x00107bc2, 0x82180d80, 0x00000049, 0x02000000,
8267 0x00107c17, 0x82180d80, 0x00000041, 0x02000000,
8268 0x00107c03, 0x82180d80, 0x00000043, 0x02000000,
8269 0x001094dc, 0x82180d80, 0x00000051, 0x02000000,
8270 0x00109542, 0x82180d80, 0x00000004, 0x04020003,
8271 0x42000000, 0x00000001, 0x83380d80, 0x00000015,
8272 0x04000006, 0x83380d80, 0x00000016, 0x02020000,
8273 0x00107974, 0x0401f20f, 0x4d2c0000, 0x4d3c0000,
8274 0x0c01f804, 0x5c027800, 0x5c025800, 0x1c01f000,
8275 0x001080b8, 0x001080bc, 0x001080b8, 0x00108131,
8276 0x001080b8, 0x00108226, 0x001082bf, 0x001080b8,
8277 0x001080b8, 0x00108288, 0x001080b8, 0x0010829a,
8278 0x4933c857, 0x497a6007, 0x59300808, 0x58040000,
8279 0x4a000a04, 0x00000103, 0x0201f000, 0x0002077d,
8280 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
8281 0x4933c857, 0x59a80016, 0x82000580, 0x00000074,
8282 0x0402005c, 0x0201f800, 0x0010a2c8, 0x04020016,
8283 0x0401f85c, 0x0201f800, 0x00109037, 0x0400000c,
8284 0x0201f800, 0x00109597, 0x04020009, 0x41780800,
8285 0x4d400000, 0x42028000, 0x00000000, 0x0201f800,
8286 0x0010943b, 0x5c028000, 0x0401f003, 0x0201f800,
8287 0x00102074, 0x0201f800, 0x001048c1, 0x0201f000,
8288 0x0002077d, 0x0201f800, 0x00109037, 0x04000007,
8289 0x0201f800, 0x00109597, 0x04020004, 0x0401ff3d,
8290 0x0201f000, 0x0002077d, 0x417a7800, 0x0201f800,
8291 0x0010203c, 0x42000000, 0x0010b864, 0x0201f800,
8292 0x0010aa47, 0x59340200, 0x84000558, 0x48026a00,
8293 0x42003000, 0x00000003, 0x0201f800, 0x0010a942,
8294 0x4d300000, 0x0201f800, 0x0002075a, 0x02000800,
8295 0x001005d8, 0x49366009, 0x497a6008, 0x4a026406,
8296 0x00000001, 0x4a026403, 0x00000001, 0x0201f800,
8297 0x00103b25, 0x04000011, 0x4a026406, 0x00000004,
8298 0x4a026203, 0x00000007, 0x4a026420, 0x00000001,
8299 0x42003000, 0x00000001, 0x4d400000, 0x42028000,
8300 0x00000029, 0x41782800, 0x0201f800, 0x0010a43e,
8301 0x5c028000, 0x0401f009, 0x42000800, 0x0000000b,
8302 0x0201f800, 0x00104571, 0x4a026203, 0x00000001,
8303 0x0201f800, 0x0010672b, 0x5c026000, 0x0401ff05,
8304 0x0201f800, 0x00102074, 0x0201f000, 0x0002077d,
8305 0x0401ff00, 0x42000000, 0x00000001, 0x0401f0c7,
8306 0x4933c857, 0x59340200, 0x8c000500, 0x0400000d,
8307 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00104567,
8308 0x5c027800, 0x0201f800, 0x00103b25, 0x04000005,
8309 0x42000800, 0x00000006, 0x0201f800, 0x00104571,
8310 0x1c01f000, 0x4933c857, 0x59a80816, 0x82040580,
8311 0x00000074, 0x0400000e, 0x4807c857, 0x82040580,
8312 0x00000100, 0x040200a0, 0x59cc0408, 0x4803c857,
8313 0x8c000500, 0x0400009c, 0x59341403, 0x82080580,
8314 0x000007fe, 0x04000006, 0x0401f097, 0x59341403,
8315 0x82080580, 0x000007fe, 0x04020003, 0x0401fa9c,
8316 0x0401f04c, 0x0201f800, 0x0010462a, 0x59341403,
8317 0x82080580, 0x000007fc, 0x0402001f, 0x4a026802,
8318 0x00fffffc, 0x0201f800, 0x00109037, 0x04000012,
8319 0x0201f800, 0x00109597, 0x0402000f, 0x0401f8a9,
8320 0x41780800, 0x4d400000, 0x42028000, 0x00000000,
8321 0x0201f800, 0x0010943b, 0x5c028000, 0x42000800,
8322 0x00000004, 0x0201f800, 0x00104571, 0x0201f000,
8323 0x0002077d, 0x42000800, 0x00000004, 0x0201f800,
8324 0x00104571, 0x0201f800, 0x00102074, 0x0201f000,
8325 0x0002077d, 0x59a80005, 0x8c000514, 0x04000011,
8326 0x0201f800, 0x0010513b, 0x42001000, 0x00000010,
8327 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
8328 0x82000580, 0x00ff0000, 0x04000006, 0x42001000,
8329 0x00000008, 0x0201f800, 0x00104c6d, 0x0402005a,
8330 0x0201f800, 0x00109037, 0x0400005b, 0x0201f800,
8331 0x00109597, 0x04020005, 0x592c0404, 0x8c00051c,
8332 0x040207c9, 0x0401f877, 0x42000800, 0x00000005,
8333 0x0201f800, 0x00104571, 0x4a026203, 0x00000001,
8334 0x4a026403, 0x00000003, 0x0201f000, 0x0010672b,
8335 0x59cc0408, 0x8c000518, 0x04000010, 0x0201f800,
8336 0x001092e5, 0x0201f800, 0x0010513b, 0x04000004,
8337 0x59cc0408, 0x8c000516, 0x040207b3, 0x59a80026,
8338 0x8400054a, 0x48035026, 0x59a80010, 0x84000570,
8339 0x48038832, 0x0401f7ac, 0x42001000, 0x000000ef,
8340 0x480b5010, 0x497b8830, 0x84081570, 0x480b8832,
8341 0x59c40802, 0x84040d4c, 0x48078802, 0x0201f800,
8342 0x0010930f, 0x59a80026, 0x84000548, 0x48035026,
8343 0x0201f800, 0x0010a3da, 0x0402079b, 0x59a80026,
8344 0x8400054c, 0x48035026, 0x42000800, 0x00000006,
8345 0x0201f800, 0x00104571, 0x417a7800, 0x0201f800,
8346 0x00104567, 0x42000000, 0x000000e8, 0x0201f800,
8347 0x00105c9a, 0x02000800, 0x001045a6, 0x02020800,
8348 0x001005d8, 0x49366009, 0x59340200, 0x8400051a,
8349 0x48026a00, 0x42000800, 0x00000003, 0x0201f800,
8350 0x00104571, 0x4a026406, 0x00000001, 0x4a026203,
8351 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
8352 0x0010672b, 0x0401fe43, 0x42000000, 0x00000001,
8353 0x0401f00a, 0x599c0017, 0x8c00050a, 0x040007ab,
8354 0x42000800, 0x00000004, 0x0201f800, 0x00104571,
8355 0x0201f000, 0x0002077d, 0x4933c857, 0x80003540,
8356 0x04000005, 0x42000800, 0x00000007, 0x0201f800,
8357 0x00104571, 0x801831c0, 0x0402000e, 0x59302008,
8358 0x801021c0, 0x04000004, 0x58100404, 0x8c00051e,
8359 0x04020008, 0x59341c03, 0x42002000, 0x00000004,
8360 0x42003000, 0x00000012, 0x0201f800, 0x00103aae,
8361 0x0201f800, 0x00102074, 0x0201f000, 0x0002077d,
8362 0x4c5c0000, 0x4d2c0000, 0x59325808, 0x0201f800,
8363 0x00105755, 0x5c025800, 0x59cc0008, 0x48002805,
8364 0x59cc0009, 0x48002806, 0x49782807, 0x49782808,
8365 0x49782809, 0x4978280a, 0x59cc0013, 0x8c00053e,
8366 0x04000009, 0x59cc0414, 0x900001c0, 0x59ccbc15,
8367 0x805c0540, 0x48002807, 0x59cc0416, 0x900001c0,
8368 0x48002808, 0x59cc0017, 0x8c00053e, 0x04000009,
8369 0x59cc0418, 0x900001c0, 0x59ccbc19, 0x805c0540,
8370 0x48002809, 0x59cc041a, 0x900001c0, 0x4800280a,
8371 0x5c00b800, 0x1c01f000, 0x4933c857, 0x59a80016,
8372 0x82000580, 0x00000014, 0x04020048, 0x59a80005,
8373 0x8c000514, 0x04000015, 0x0201f800, 0x0010513b,
8374 0x42001000, 0x00000010, 0x04020009, 0x59340002,
8375 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
8376 0x0400000a, 0x42001000, 0x00000008, 0x0201f800,
8377 0x00104c6d, 0x04000005, 0x59a80005, 0x84000556,
8378 0x48035005, 0x0401f031, 0x836c0580, 0x00000003,
8379 0x0402000b, 0x59300008, 0x80000540, 0x04020008,
8380 0x59341c03, 0x42002000, 0x00000006, 0x42003000,
8381 0x00000013, 0x0201f800, 0x00103aae, 0x0201f800,
8382 0x0010468d, 0x0401fecf, 0x0401fa1d, 0x0402001f,
8383 0x59340404, 0x80000540, 0x0400001c, 0x42000800,
8384 0x00000006, 0x0201f800, 0x00104571, 0x0201f800,
8385 0x00109037, 0x04000011, 0x0201f800, 0x00109597,
8386 0x0402000a, 0x41780800, 0x4d400000, 0x42028000,
8387 0x00000000, 0x0201f800, 0x0010943b, 0x5c028000,
8388 0x0201f000, 0x0002077d, 0x4a025a04, 0x00000103,
8389 0x4a025805, 0x02000000, 0x0201f800, 0x00102074,
8390 0x0201f000, 0x0002077d, 0x0201f800, 0x00104c19,
8391 0x0201f800, 0x00109037, 0x04000007, 0x0201f800,
8392 0x00109597, 0x04020004, 0x0401fda2, 0x0201f000,
8393 0x0002077d, 0x0401fd9f, 0x80000580, 0x59a80005,
8394 0x8c000516, 0x04000005, 0x84000516, 0x48035005,
8395 0x82000540, 0x00000001, 0x0401ff60, 0x1c01f000,
8396 0x4933c857, 0x59a80016, 0x82000580, 0x00000014,
8397 0x0402000b, 0x42000800, 0x0000000b, 0x0201f800,
8398 0x00104571, 0x4a026203, 0x00000001, 0x4a026403,
8399 0x00000001, 0x0201f000, 0x0010672b, 0x42000000,
8400 0x00000001, 0x0401f74d, 0x4933c857, 0x40003000,
8401 0x59a80016, 0x82000580, 0x00000004, 0x0402000a,
8402 0x82183580, 0x0000000b, 0x04020005, 0x42000800,
8403 0x00000007, 0x0201f800, 0x00104571, 0x0201f000,
8404 0x0002077d, 0x42000000, 0x00000001, 0x0401f73b,
8405 0x4803c857, 0x4d2c0000, 0x4d3c0000, 0x0c01f804,
8406 0x5c027800, 0x5c025800, 0x1c01f000, 0x001080b8,
8407 0x001082ce, 0x001080b8, 0x00108323, 0x001080b8,
8408 0x00108391, 0x001082bf, 0x001080b8, 0x001080b8,
8409 0x001083b1, 0x001080b8, 0x001083c1, 0x4933c857,
8410 0x4d1c0000, 0x59301403, 0x82080580, 0x00000003,
8411 0x04000008, 0x82081580, 0x0000001e, 0x04020003,
8412 0x0201f800, 0x0002077d, 0x5c023800, 0x1c01f000,
8413 0x0401ff5a, 0x0401f7fd, 0x4933c857, 0x0201f800,
8414 0x00109037, 0x0400000b, 0x0201f800, 0x00109597,
8415 0x04020008, 0x4200b000, 0x00000002, 0x0201f800,
8416 0x0010957d, 0x0401fd43, 0x0201f000, 0x0002077d,
8417 0x0401f8f5, 0x04020030, 0x417a7800, 0x0201f800,
8418 0x00104567, 0x417a7800, 0x0201f800, 0x0010203c,
8419 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8420 0x59340200, 0x84000558, 0x48026a00, 0x4a026403,
8421 0x00000002, 0x42003000, 0x00000003, 0x0201f800,
8422 0x0010a942, 0x0201f800, 0x00103b25, 0x04000011,
8423 0x4d400000, 0x41782800, 0x42003000, 0x00000005,
8424 0x42028000, 0x00000029, 0x0201f800, 0x0010a43e,
8425 0x5c028000, 0x4a026203, 0x00000007, 0x4a026406,
8426 0x00000004, 0x4a026420, 0x00000001, 0x1c01f000,
8427 0x42000800, 0x00000003, 0x0201f800, 0x00104571,
8428 0x4a026203, 0x00000001, 0x0201f800, 0x0010672b,
8429 0x0401f7f7, 0x59cc0407, 0x82000580, 0x00000009,
8430 0x0402000a, 0x59340412, 0x82000500, 0x000000ff,
8431 0x0400000c, 0x80000040, 0x48026c12, 0x4a026206,
8432 0x0000000a, 0x0401f7ea, 0x59cc0207, 0x82000500,
8433 0x0000ff00, 0x82000580, 0x00001900, 0x040007c2,
8434 0x0401fcfc, 0x80000580, 0x0401f6c4, 0x4933c857,
8435 0x59a80032, 0x80000540, 0x04000015, 0x59340403,
8436 0x82000580, 0x000007fe, 0x04020011, 0x59a80010,
8437 0x80000000, 0x48035010, 0x417a7800, 0x0201f800,
8438 0x00104567, 0x42000800, 0x00000003, 0x0201f800,
8439 0x00104571, 0x4a026203, 0x00000001, 0x4a026403,
8440 0x00000002, 0x0201f000, 0x0010672b, 0x0201f800,
8441 0x00109037, 0x04000011, 0x0201f800, 0x00109597,
8442 0x0402000e, 0x4c580000, 0x4200b000, 0x00000002,
8443 0x0201f800, 0x0010957d, 0x5c00b000, 0x0401fcd5,
8444 0x42000800, 0x00000007, 0x0201f800, 0x00104571,
8445 0x0201f000, 0x0002077d, 0x0401fcce, 0x59cc3407,
8446 0x82183500, 0x000000ff, 0x82180580, 0x00000005,
8447 0x0400001c, 0x82180580, 0x0000000b, 0x04000016,
8448 0x59cc0207, 0x82000500, 0x0000ff00, 0x04020004,
8449 0x82180580, 0x00000009, 0x04000012, 0x82000580,
8450 0x00001900, 0x0402000c, 0x82180580, 0x00000009,
8451 0x0400000c, 0x42000800, 0x00000004, 0x0201f800,
8452 0x00104571, 0x0201f800, 0x00102074, 0x0201f000,
8453 0x0002077d, 0x42000000, 0x00000001, 0x0401f677,
8454 0x0201f800, 0x00109037, 0x59325808, 0x04000008,
8455 0x592c0204, 0x82000580, 0x00000139, 0x040007f6,
8456 0x592c0404, 0x8c00051e, 0x040207f3, 0x59340403,
8457 0x82000580, 0x000007fe, 0x04020007, 0x59a80026,
8458 0x84000540, 0x48035026, 0x0201f800, 0x00104229,
8459 0x0401f7e9, 0x417a7800, 0x0201f800, 0x0010203c,
8460 0x42003000, 0x00000005, 0x0201f800, 0x0010a942,
8461 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8462 0x0401f7dd, 0x4933c857, 0x0401f84d, 0x0402000b,
8463 0x42000800, 0x00000005, 0x0201f800, 0x00104571,
8464 0x4a026203, 0x00000001, 0x4a026403, 0x00000003,
8465 0x0201f000, 0x0010672b, 0x42000800, 0x00000004,
8466 0x0201f800, 0x00104571, 0x0201f800, 0x00109597,
8467 0x0402000a, 0x4c580000, 0x4200b000, 0x00000002,
8468 0x0201f800, 0x0010957d, 0x5c00b000, 0x0401fc71,
8469 0x0201f000, 0x0002077d, 0x0401fc6e, 0x80000580,
8470 0x0401f636, 0x4933c857, 0x0401f82d, 0x0402000b,
8471 0x42000800, 0x00000009, 0x0201f800, 0x00104571,
8472 0x4a026203, 0x00000001, 0x4a026403, 0x00000005,
8473 0x0201f000, 0x0010672b, 0x42000000, 0x00000001,
8474 0x0401f626, 0x4933c857, 0x0401f81d, 0x0402000b,
8475 0x42000800, 0x0000000b, 0x0201f800, 0x00104571,
8476 0x4a026203, 0x00000001, 0x4a026403, 0x00000001,
8477 0x0201f000, 0x0010672b, 0x42000000, 0x00000001,
8478 0x0401f616, 0x4933c857, 0x59cc0407, 0x82000580,
8479 0x00000003, 0x04020009, 0x59cc0207, 0x82000500,
8480 0x0000ff00, 0x82000d80, 0x00002a00, 0x04000003,
8481 0x82000d80, 0x00001e00, 0x1c01f000, 0x4933c857,
8482 0x82000540, 0x00000001, 0x1c01f000, 0x4933c857,
8483 0x4d400000, 0x4c580000, 0x59a80026, 0x82000540,
8484 0x00000003, 0x48035026, 0x0401f85c, 0x04000038,
8485 0x4d340000, 0x4d440000, 0x59a80026, 0x84000552,
8486 0x48035026, 0x0201f800, 0x00103b25, 0x0400000c,
8487 0x42028000, 0x0000002a, 0x42028800, 0x0000ffff,
8488 0x42003000, 0x00000002, 0x0201f800, 0x0010a446,
8489 0x59a80805, 0x84040d44, 0x48075005, 0x42028000,
8490 0x0000002a, 0x4d3c0000, 0x42027800, 0x00000204,
8491 0x0201f800, 0x00101fe5, 0x5c027800, 0x42000000,
8492 0x0010b864, 0x0201f800, 0x0010aa47, 0x0201f800,
8493 0x00101e45, 0x4200b000, 0x00000010, 0x42028800,
8494 0x000007f0, 0x4d2c0000, 0x83440580, 0x000007fe,
8495 0x04000003, 0x0201f800, 0x001045fb, 0x81468800,
8496 0x8058b040, 0x040207f9, 0x5c025800, 0x59cc0408,
8497 0x8c00051e, 0x04000004, 0x59a80026, 0x84000512,
8498 0x48035026, 0x5c028800, 0x5c026800, 0x0201f800,
8499 0x0010462a, 0x4a026802, 0x00fffffe, 0x59a80826,
8500 0x84040d50, 0x59cc0013, 0x8c00053e, 0x04000003,
8501 0x8c000536, 0x04000004, 0x59cc0017, 0x8c000536,
8502 0x04020002, 0x84040d10, 0x48075026, 0x59cc0800,
8503 0x82040d00, 0x00ffffff, 0x48075010, 0x80040110,
8504 0x4803501d, 0x48038881, 0x0201f800, 0x0010513b,
8505 0x04000007, 0x59cc0009, 0x48035035, 0x59cc000a,
8506 0x48035036, 0x0201f800, 0x001092e5, 0x5c00b000,
8507 0x5c028000, 0x1c01f000, 0x4933c857, 0x4c580000,
8508 0x59a80010, 0x82000500, 0x00ffff00, 0x04000022,
8509 0x59cc1000, 0x82081500, 0x00ffff00, 0x80080580,
8510 0x04000004, 0x42000000, 0x0010b83b, 0x0401f016,
8511 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
8512 0x83341c00, 0x00000006, 0x0401f900, 0x04000004,
8513 0x42000000, 0x0010b83c, 0x0401f00b, 0x83cc1400,
8514 0x0000000d, 0x4200b000, 0x00000002, 0x83341c00,
8515 0x00000008, 0x0401f8f5, 0x04000007, 0x42000000,
8516 0x0010b83d, 0x0201f800, 0x0010aa47, 0x82000540,
8517 0x00000001, 0x5c00b000, 0x1c01f000, 0x4933c857,
8518 0x59cc0206, 0x82000580, 0x00000014, 0x04020016,
8519 0x59cc0407, 0x82000580, 0x00000800, 0x04020012,
8520 0x59cc0207, 0x8c00051a, 0x0400000d, 0x82000500,
8521 0x00000f00, 0x82000580, 0x00000100, 0x04020008,
8522 0x59cc020a, 0x8c000508, 0x04020003, 0x8c00050a,
8523 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
8524 0x00000001, 0x1c01f000, 0x4933c857, 0x4943c857,
8525 0x493fc857, 0x4c5c0000, 0x4d300000, 0x4d340000,
8526 0x4d2c0000, 0x4d380000, 0x4130b800, 0x42026000,
8527 0x0010d1c0, 0x59a8000e, 0x81640480, 0x040210bd,
8528 0x8d3e7d12, 0x04000004, 0x405c0000, 0x81300580,
8529 0x040000b3, 0x59300406, 0x82000c80, 0x00000012,
8530 0x04021015, 0x59326809, 0x0c01f001, 0x0010854f,
8531 0x001084bc, 0x001084d3, 0x001084de, 0x001084b7,
8532 0x001084ce, 0x00108507, 0x0010854f, 0x001084b5,
8533 0x0010851b, 0x0010852a, 0x001084b5, 0x001084b5,
8534 0x001084b5, 0x001084b5, 0x0010854f, 0x00108540,
8535 0x00108538, 0x0201f800, 0x001005d8, 0x8d3e7d18,
8536 0x04000004, 0x59300420, 0x8c000500, 0x04020094,
8537 0x59300403, 0x82000580, 0x00000043, 0x04000090,
8538 0x0201f800, 0x00109134, 0x02000800, 0x00102074,
8539 0x0201f800, 0x0010914e, 0x02000800, 0x0010801c,
8540 0x8d3e7d06, 0x04000084, 0x0201f800, 0x001092d7,
8541 0x04000083, 0x0401f080, 0x8d3e7d16, 0x04000004,
8542 0x59300420, 0x8c000500, 0x0402007d, 0x59325808,
8543 0x0201f800, 0x00109037, 0x04000077, 0x49425a06,
8544 0x497a5c09, 0x0201f800, 0x000202da, 0x0201f800,
8545 0x0010912a, 0x0401f070, 0x813669c0, 0x02000800,
8546 0x001005d8, 0x8d3e7d06, 0x04000004, 0x59340200,
8547 0x8c00050e, 0x0402006a, 0x59300004, 0x8400055c,
8548 0x48026004, 0x59300203, 0x82000580, 0x00000004,
8549 0x02000800, 0x00100e99, 0x59325808, 0x0201f800,
8550 0x00109037, 0x0400005c, 0x4a025a04, 0x00000103,
8551 0x59300402, 0x48025c06, 0x592c0408, 0x8c000512,
8552 0x04000006, 0x4d2c0000, 0x592e5809, 0x0201f800,
8553 0x001007fd, 0x5c025800, 0x49425a06, 0x497a5c09,
8554 0x0201f800, 0x0010959c, 0x0201f800, 0x000202da,
8555 0x0201f800, 0x0010912a, 0x0401f047, 0x8c000518,
8556 0x04000047, 0x59300203, 0x82000580, 0x00000004,
8557 0x02000800, 0x00100e99, 0x59325808, 0x0201f800,
8558 0x00109037, 0x0400003c, 0x49425a06, 0x497a5c09,
8559 0x0201f800, 0x0010a693, 0x0201f800, 0x0010959c,
8560 0x0201f800, 0x000202da, 0x0401f033, 0x0201f800,
8561 0x001062d5, 0x04000032, 0x59300203, 0x82000580,
8562 0x00000004, 0x04020004, 0x0201f800, 0x00100e99,
8563 0x0401f02b, 0x42027000, 0x00000047, 0x0201f800,
8564 0x000207a1, 0x0401f026, 0x59300203, 0x82000580,
8565 0x00000004, 0x02000800, 0x00100e99, 0x59325808,
8566 0x0201f800, 0x00109037, 0x0400001b, 0x49425a06,
8567 0x497a5c09, 0x0201f800, 0x000202da, 0x0401f016,
8568 0x833c0500, 0x00001800, 0x04000015, 0x8d3e7d16,
8569 0x04020013, 0x59325817, 0x0201f800, 0x001007fd,
8570 0x59300203, 0x82000580, 0x00000004, 0x02000800,
8571 0x00100e99, 0x59325808, 0x0201f800, 0x00109037,
8572 0x04000005, 0x49425a06, 0x497a5c09, 0x0201f800,
8573 0x000202da, 0x0201f800, 0x00107911, 0x83326400,
8574 0x00000024, 0x41580000, 0x81300480, 0x04001742,
8575 0x5c027000, 0x5c025800, 0x5c026800, 0x5c026000,
8576 0x5c00b800, 0x1c01f000, 0x5c000000, 0x4c000000,
8577 0x4803c857, 0x480bc857, 0x480fc857, 0x485bc857,
8578 0x50080800, 0x500c0000, 0x80042580, 0x04020007,
8579 0x80081000, 0x800c1800, 0x8058b040, 0x040207f9,
8580 0x80000580, 0x1c01f000, 0x4803c857, 0x4807c857,
8581 0x480bc857, 0x480fc857, 0x80040480, 0x04001006,
8582 0x42000000, 0x00000001, 0x82040d40, 0x00000001,
8583 0x1c01f000, 0x41780000, 0x0401f7fc, 0x83380480,
8584 0x00000053, 0x02021800, 0x001005d8, 0x83380480,
8585 0x0000004b, 0x02001800, 0x001005d8, 0x0c01f001,
8586 0x0010858a, 0x0010858a, 0x0010858a, 0x0010858a,
8587 0x00108588, 0x00108588, 0x00108588, 0x0010858a,
8588 0x0201f800, 0x001005d8, 0x493bc857, 0x4a026203,
8589 0x0000000d, 0x493a6403, 0x42000800, 0x80000000,
8590 0x0201f000, 0x00020721, 0x83380580, 0x00000013,
8591 0x04020008, 0x59300403, 0x82000580, 0x00000050,
8592 0x02020800, 0x001005d8, 0x0201f000, 0x0002077d,
8593 0x4933c857, 0x83380580, 0x00000027, 0x04020030,
8594 0x4933c857, 0x0201f800, 0x00106bbf, 0x4d3c0000,
8595 0x417a7800, 0x0201f800, 0x0010203c, 0x5c027800,
8596 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8597 0x4d2c0000, 0x59325808, 0x0201f800, 0x00109037,
8598 0x492fc857, 0x0400000d, 0x4a025a04, 0x00000103,
8599 0x59300c02, 0x48065c06, 0x4a025a06, 0x00000029,
8600 0x497a5c09, 0x592c0c08, 0x84040d50, 0x48065c08,
8601 0x0201f800, 0x000202da, 0x5c025800, 0x42003000,
8602 0x00000015, 0x41782800, 0x42002000, 0x00000003,
8603 0x4d400000, 0x4d440000, 0x59368c03, 0x42028000,
8604 0x00000029, 0x0201f800, 0x0010985e, 0x5c028800,
8605 0x5c028000, 0x0201f000, 0x0002077d, 0x83380580,
8606 0x00000014, 0x0402000c, 0x59300403, 0x82000c80,
8607 0x00000053, 0x02021800, 0x001005d8, 0x82000480,
8608 0x00000040, 0x02001800, 0x001005d8, 0x4803c857,
8609 0x0c01f00e, 0x83380580, 0x00000053, 0x0400000a,
8610 0x83380580, 0x00000048, 0x02020800, 0x001005d8,
8611 0x59300403, 0x82000580, 0x00000050, 0x02020800,
8612 0x001005d8, 0x1c01f000, 0x001085ff, 0x001085fd,
8613 0x001085fd, 0x001085fd, 0x001085fd, 0x001085fd,
8614 0x001085fd, 0x001085fd, 0x001085fd, 0x001085fd,
8615 0x001085fd, 0x00108616, 0x00108616, 0x00108616,
8616 0x00108616, 0x001085fd, 0x00108616, 0x001085fd,
8617 0x00108616, 0x0201f800, 0x001005d8, 0x4933c857,
8618 0x0201f800, 0x00106bbf, 0x0201f800, 0x00109037,
8619 0x02000000, 0x0002077d, 0x4d2c0000, 0x59325808,
8620 0x4a025a04, 0x00000103, 0x59300402, 0x48025c06,
8621 0x4a025a06, 0x00000006, 0x497a5c09, 0x0201f800,
8622 0x000202da, 0x5c025800, 0x0201f800, 0x0010912a,
8623 0x0201f000, 0x0002077d, 0x4933c857, 0x0201f800,
8624 0x00106bbf, 0x0201f000, 0x0002077d, 0x0201f800,
8625 0x001005d8, 0x5930001c, 0x800001c0, 0x02020800,
8626 0x0010984e, 0x59300004, 0x8c00053e, 0x04020029,
8627 0x59325808, 0x592c0c08, 0x59cc2a08, 0x82141d00,
8628 0x00000c00, 0x04000002, 0x59cc1809, 0x84040d58,
8629 0x48065c08, 0x82143500, 0x00000fff, 0x04020027,
8630 0x59340200, 0x8c00050e, 0x04020080, 0x0201f800,
8631 0x0002082b, 0x04020006, 0x4a025a06, 0x00000000,
8632 0x59300811, 0x800409c0, 0x0402094b, 0x4a025a04,
8633 0x00000103, 0x48065807, 0x480e580a, 0x48165c09,
8634 0x59300c02, 0x48065c06, 0x0201f800, 0x000202c1,
8635 0x0201f800, 0x001049b2, 0x59cc0208, 0x8c000518,
8636 0x02020000, 0x001091d1, 0x0201f000, 0x0002077d,
8637 0x0201f800, 0x00106f60, 0x040007d6, 0x4d3c0000,
8638 0x42027800, 0x00000002, 0x0201f800, 0x00108be3,
8639 0x5c027800, 0x0401f7cf, 0x4817c857, 0x480fc857,
8640 0x82180500, 0x000000ff, 0x0400000e, 0x592c0204,
8641 0x82000500, 0x000000ff, 0x82000580, 0x00000048,
8642 0x04020008, 0x592c0407, 0x800001c0, 0x04000005,
8643 0x0201f800, 0x0010973f, 0x0201f000, 0x00109787,
8644 0x82180d00, 0x00000c00, 0x04000004, 0x59340200,
8645 0x8c00050e, 0x04020032, 0x4a025a06, 0x00000000,
8646 0x41782000, 0x8c183510, 0x04000007, 0x59cc000c,
8647 0x82000500, 0x000000ff, 0x04000002, 0x4803c857,
8648 0x59cc200b, 0x4812580c, 0x41780000, 0x8c183512,
8649 0x04000002, 0x59cc000a, 0x4802580b, 0x80100c00,
8650 0x040007b8, 0x82041480, 0x0000001d, 0x04001006,
8651 0x592c0404, 0x8c00051e, 0x0400000e, 0x42000800,
8652 0x0000001c, 0x4c500000, 0x4c540000, 0x83cca400,
8653 0x0000000c, 0x832cac00, 0x0000000d, 0x0201f800,
8654 0x00108b9f, 0x5c00a800, 0x5c00a000, 0x0401f7a5,
8655 0x59300011, 0x59301402, 0x480a5c06, 0x48025807,
8656 0x480e580a, 0x48165c09, 0x0201f800, 0x00108b48,
8657 0x0201f800, 0x00108b84, 0x0401f7a6, 0x592c020a,
8658 0x8c000502, 0x040007cd, 0x592c0208, 0x8c00050e,
8659 0x040207ca, 0x59300011, 0x800c0d80, 0x040007c7,
8660 0x4803c857, 0x480fc857, 0x8c183514, 0x02000000,
8661 0x0010920f, 0x80000540, 0x040007c0, 0x4807c856,
8662 0x0201f000, 0x0010920f, 0x592c020a, 0x8c000502,
8663 0x04000782, 0x59300011, 0x800001c0, 0x0400077f,
8664 0x592c0208, 0x8c00050e, 0x0402077c, 0x0201f000,
8665 0x0010920f, 0x59cc2006, 0x59cc2807, 0x0401f035,
8666 0x0401f034, 0x1c01f000, 0x4933c857, 0x5930001c,
8667 0x800001c0, 0x02020800, 0x0010984e, 0x59325808,
8668 0x592c0c08, 0x41782800, 0x41781800, 0x84040d58,
8669 0x48065c08, 0x41783000, 0x59340200, 0x8c00050e,
8670 0x04020018, 0x0201f800, 0x0002082b, 0x04020007,
8671 0x4a025a06, 0x00000000, 0x59300811, 0x4807c857,
8672 0x800409c0, 0x040208ac, 0x4a025a04, 0x00000103,
8673 0x48065807, 0x480e580a, 0x48165c09, 0x4933c857,
8674 0x59300c02, 0x48065c06, 0x0201f800, 0x000202c1,
8675 0x0201f800, 0x001049b2, 0x0201f000, 0x0002077d,
8676 0x592c020a, 0x8c000502, 0x040007ea, 0x59300011,
8677 0x4803c857, 0x800001c0, 0x040007e6, 0x592c0208,
8678 0x8c00050e, 0x040207e3, 0x0201f000, 0x0010920f,
8679 0x5930001c, 0x800001c0, 0x4c100000, 0x4c140000,
8680 0x02020800, 0x0010984e, 0x5c002800, 0x5c002000,
8681 0x4a026203, 0x00000002, 0x4a026403, 0x00000043,
8682 0x59325808, 0x592c020a, 0x8c000502, 0x04020018,
8683 0x40100000, 0x592c080f, 0x80040c80, 0x40140000,
8684 0x80040480, 0x04001014, 0x48126013, 0x48166011,
8685 0x59300004, 0x8c00053e, 0x04020008, 0x497a6205,
8686 0x0201f800, 0x00100f93, 0x04020009, 0x59300804,
8687 0x0201f000, 0x00106721, 0x0201f800, 0x00106f60,
8688 0x040007f7, 0x0201f000, 0x00107974, 0x4933c857,
8689 0x1c01f000, 0x4807c857, 0x40042800, 0x0401f7eb,
8690 0x83380480, 0x00000058, 0x04021005, 0x83380480,
8691 0x00000040, 0x04001002, 0x0c01f002, 0x1c01f000,
8692 0x00108740, 0x00108740, 0x00108740, 0x00108740,
8693 0x00108740, 0x00108740, 0x00108740, 0x00108740,
8694 0x00108740, 0x00108740, 0x00108742, 0x00108740,
8695 0x00108740, 0x00108740, 0x00108740, 0x0010874f,
8696 0x00108740, 0x00108740, 0x00108740, 0x00108740,
8697 0x0010877d, 0x00108740, 0x00108740, 0x00108740,
8698 0x0201f800, 0x001005d8, 0x4933c857, 0x0201f800,
8699 0x00106dc3, 0x4a026203, 0x00000002, 0x59a80039,
8700 0x48026205, 0x59300011, 0x59300815, 0x80040c80,
8701 0x48066015, 0x0201f000, 0x00106b8a, 0x4933c857,
8702 0x0201f800, 0x00106b8a, 0x4d3c0000, 0x417a7800,
8703 0x0201f800, 0x0010203c, 0x5c027800, 0x42000000,
8704 0x0010b864, 0x0201f800, 0x0010aa47, 0x0201f800,
8705 0x00109037, 0x04000010, 0x4d2c0000, 0x59325808,
8706 0x4a025a04, 0x00000103, 0x59300402, 0x48025c06,
8707 0x4a025a06, 0x00000029, 0x497a5c09, 0x592c0c08,
8708 0x84040d50, 0x48065c08, 0x0201f800, 0x000202da,
8709 0x5c025800, 0x42003000, 0x00000014, 0x41782800,
8710 0x4d400000, 0x4d440000, 0x59368c03, 0x42002000,
8711 0x00000002, 0x42028000, 0x00000029, 0x0201f800,
8712 0x0010985e, 0x5c028800, 0x5c028000, 0x0201f000,
8713 0x0002077d, 0x4933c857, 0x59300808, 0x49780c09,
8714 0x4978080a, 0x58041408, 0x84081558, 0x48080c08,
8715 0x1c01f000, 0x4807c857, 0x8c040d3e, 0x04020023,
8716 0x497a5a06, 0x5930001f, 0x80000540, 0x04000017,
8717 0x497a5a06, 0x4c040000, 0x4c080000, 0x4c0c0000,
8718 0x4c100000, 0x4c140000, 0x58f41003, 0x40040000,
8719 0x80081480, 0x5930001f, 0x4809e803, 0x0201f800,
8720 0x00100d56, 0x5c002800, 0x5c002000, 0x5c001800,
8721 0x5c001000, 0x5c000800, 0x592c0206, 0x80000540,
8722 0x04020009, 0x0401f005, 0x592c0408, 0x8c00051c,
8723 0x04000002, 0x592c0803, 0x4807c857, 0x4a025a06,
8724 0x00000015, 0x1c01f000, 0x5930001f, 0x80000540,
8725 0x04000009, 0x4a025a06, 0x00000011, 0x5930001f,
8726 0x4c040000, 0x0201f800, 0x00100d56, 0x5c000800,
8727 0x0401f7f5, 0x4807c856, 0x4a025a06, 0x00000007,
8728 0x1c01f000, 0x83380480, 0x00000058, 0x04021007,
8729 0x83380480, 0x00000040, 0x04001004, 0x4d2c0000,
8730 0x0c01f803, 0x5c025800, 0x1c01f000, 0x001087db,
8731 0x001087db, 0x001087db, 0x001087db, 0x001087db,
8732 0x001087dd, 0x001087db, 0x001087db, 0x00108860,
8733 0x001087db, 0x001087db, 0x001087db, 0x001087db,
8734 0x001087db, 0x001087db, 0x001087db, 0x001087db,
8735 0x001087db, 0x001087db, 0x00108910, 0x00108939,
8736 0x00108918, 0x001087db, 0x00108945, 0x0201f800,
8737 0x001005d8, 0x5930001c, 0x800001c0, 0x02020800,
8738 0x0010984e, 0x59300007, 0x8c00050e, 0x0400007c,
8739 0x8c000500, 0x0400006e, 0x8c00051c, 0x04000009,
8740 0x84000500, 0x48026007, 0x59325808, 0x592c3c08,
8741 0x841c3d58, 0x481e5c08, 0x0201f000, 0x000207dd,
8742 0x59325808, 0x592c3c08, 0x841c3d58, 0x59300007,
8743 0x8c00051c, 0x040207f3, 0x481e5c08, 0x42000000,
8744 0x00000005, 0x40000000, 0x80000040, 0x040207fe,
8745 0x59300007, 0x8c00051c, 0x040207ea, 0x59cc0a08,
8746 0x592c0204, 0x82000500, 0x000000ff, 0x82000580,
8747 0x00000048, 0x0402000c, 0x497a580b, 0x82040500,
8748 0x000000ff, 0x04000008, 0x592c0407, 0x800001c0,
8749 0x04000005, 0x0201f800, 0x0010973f, 0x0201f000,
8750 0x00100e56, 0x48065c09, 0x41782000, 0x82040500,
8751 0x00000c00, 0x04000002, 0x59cc2009, 0x82043500,
8752 0x00000fff, 0x04020027, 0x481e5c08, 0x4a025a06,
8753 0x00000000, 0x801831c0, 0x02000000, 0x00100e56,
8754 0x41782000, 0x8c183510, 0x04000002, 0x59cc200b,
8755 0x4812580c, 0x41780000, 0x8c183512, 0x04000002,
8756 0x59cc000a, 0x4802580b, 0x80100c00, 0x02001800,
8757 0x001005d8, 0x02000000, 0x00100e56, 0x82041480,
8758 0x0000001d, 0x0402100c, 0x4c500000, 0x4c540000,
8759 0x83cca400, 0x0000000c, 0x832cac00, 0x0000000d,
8760 0x0401fb67, 0x5c00a800, 0x5c00a000, 0x0201f000,
8761 0x00100e56, 0x0401fb0b, 0x0201f000, 0x00100e56,
8762 0x412c7800, 0x0201f800, 0x001007e4, 0x02000800,
8763 0x001005d8, 0x492c7809, 0x841c3d52, 0x481c7c08,
8764 0x4a025a04, 0x00000103, 0x4812580a, 0x48065c09,
8765 0x583c0404, 0x583c1005, 0x583c2208, 0x48025c04,
8766 0x480a5805, 0x48125a08, 0x0401f7c8, 0x8c000524,
8767 0x04000794, 0x59325808, 0x4c000000, 0x592c0408,
8768 0x8c00051c, 0x5c000000, 0x04020003, 0x4a026011,
8769 0xffffffff, 0x84000524, 0x0401f78a, 0x1c01f000,
8770 0x59a80039, 0x48026205, 0x59325808, 0x4a026203,
8771 0x00000002, 0x592c2408, 0x59300807, 0x4933c857,
8772 0x4807c857, 0x592c0204, 0x82000500, 0x000000ff,
8773 0x82000580, 0x00000048, 0x04020004, 0x8c102500,
8774 0x02020000, 0x00109787, 0x4a025a06, 0x00000000,
8775 0x8c040d1e, 0x04000027, 0x41780800, 0x497a5c09,
8776 0x592c1c09, 0x59300011, 0x59341200, 0x497a6205,
8777 0x8c08150e, 0x0402006e, 0x4807c857, 0x4806580a,
8778 0x80000d40, 0x04020f04, 0x59300402, 0x48025c06,
8779 0x48065807, 0x4a025a04, 0x00000103, 0x4c040000,
8780 0x4c0c0000, 0x4c100000, 0x0201f800, 0x0010959c,
8781 0x5c002000, 0x5c001800, 0x5c000800, 0x8c102512,
8782 0x0402001a, 0x4c0c0000, 0x0201f800, 0x000202c1,
8783 0x0201f800, 0x001049b2, 0x5c001800, 0x8c0c1d18,
8784 0x02000000, 0x0002077d, 0x0201f000, 0x001091d1,
8785 0x4813c857, 0x8c102518, 0x0400004b, 0x41780800,
8786 0x592c1c09, 0x820c0580, 0x00001000, 0x040007d6,
8787 0x8c102512, 0x040007d4, 0x592c7809, 0x583c080a,
8788 0x583c1c09, 0x0401f7d0, 0x4807c857, 0x592c7809,
8789 0x59300402, 0x592c1404, 0x8c08151e, 0x0402000d,
8790 0x592c1206, 0x48007c06, 0x48047807, 0x48087a06,
8791 0x84102512, 0x48107c08, 0x4c0c0000, 0x0201f800,
8792 0x001007fd, 0x403e5800, 0x0401faca, 0x0401f7d9,
8793 0x48025c06, 0x48065807, 0x583c080c, 0x583c000b,
8794 0x80040c00, 0x82041480, 0x0000001d, 0x04001006,
8795 0x583c1001, 0x480a5801, 0x49787801, 0x42000800,
8796 0x0000001c, 0x82040c00, 0x00000014, 0x4c0c0000,
8797 0x4c500000, 0x4c540000, 0x823ca400, 0x00000008,
8798 0x832cac00, 0x00000008, 0x4c100000, 0x4c3c0000,
8799 0x0401facb, 0x5c007800, 0x5c002000, 0x5c00a800,
8800 0x5c00a000, 0x84102512, 0x48125c08, 0x403e5800,
8801 0x0201f800, 0x001007fd, 0x42034000, 0x0010b4a4,
8802 0x59a1d81e, 0x80edd9c0, 0x02000800, 0x001005d8,
8803 0x48efc857, 0x58ec0009, 0x4803c857, 0x0801f800,
8804 0x0401f7ac, 0x4933c857, 0x1c01f000, 0x59301414,
8805 0x480bc857, 0x8c08151c, 0x0402000e, 0x80000540,
8806 0x4803c857, 0x0400078d, 0x80042c80, 0x0402178b,
8807 0x8c081514, 0x04020005, 0x592c080f, 0x4807c857,
8808 0x80040480, 0x48026016, 0x8408155c, 0x480a6414,
8809 0x59301007, 0x8408151e, 0x480a6007, 0x4a025c09,
8810 0x00000001, 0x0201f800, 0x0010959c, 0x497a5c09,
8811 0x8c102512, 0x04000006, 0x4d2c0000, 0x403e5800,
8812 0x0201f800, 0x001007fd, 0x5c025800, 0x82102500,
8813 0xffffedff, 0x48125c08, 0x0201f000, 0x0010920f,
8814 0x59325808, 0x592c0408, 0x8c000518, 0x04000004,
8815 0x412df800, 0x0201f000, 0x00100e6f, 0x1c01f000,
8816 0x4933c857, 0x59325808, 0x497a5c09, 0x4a025a06,
8817 0x00000000, 0x4a025a04, 0x00000103, 0x59300811,
8818 0x4807c857, 0x800409c0, 0x0402000a, 0x48065807,
8819 0x59300c02, 0x48065c06, 0x0201f800, 0x000202c1,
8820 0x0201f800, 0x001049b2, 0x0201f000, 0x0002077d,
8821 0x59340200, 0x8c00050e, 0x04020005, 0x59300811,
8822 0x0401fe55, 0x48065807, 0x0401f7f2, 0x592c0208,
8823 0x8c00050e, 0x040207fa, 0x4933c857, 0x0201f000,
8824 0x0010920f, 0x4933c857, 0x59325808, 0x812e59c0,
8825 0x02000800, 0x001005d8, 0x592c020a, 0x8c000502,
8826 0x02000800, 0x001005d8, 0x4a026206, 0x00000002,
8827 0x1c01f000, 0x5930001c, 0x800001c0, 0x02020800,
8828 0x0010984e, 0x59300007, 0x4933c857, 0x4803c857,
8829 0x8c00050e, 0x04000037, 0x8c000500, 0x04000029,
8830 0x8c00051c, 0x0400000a, 0x84000500, 0x48026007,
8831 0x59325808, 0x592c3c08, 0x481fc857, 0x841c3d58,
8832 0x481e5c08, 0x0201f000, 0x000207dd, 0x59325808,
8833 0x592c3c08, 0x841c3d58, 0x59300007, 0x8c00051c,
8834 0x040207f2, 0x481e5c08, 0x42000000, 0x00000005,
8835 0x40000000, 0x80000040, 0x040207fe, 0x59300007,
8836 0x8c00051c, 0x040207e9, 0x592c0204, 0x82000500,
8837 0x000000ff, 0x82000580, 0x00000048, 0x04020003,
8838 0x497a580b, 0x0401f002, 0x497a5c09, 0x481e5c08,
8839 0x4a025a06, 0x00000000, 0x0201f000, 0x00100e56,
8840 0x8c000524, 0x040007d9, 0x59325808, 0x4c000000,
8841 0x592c0408, 0x8c00051c, 0x5c000000, 0x04020003,
8842 0x4a026011, 0xffffffff, 0x84000524, 0x0401f7cf,
8843 0x1c01f000, 0x4933c857, 0x41780800, 0x83380480,
8844 0x00000058, 0x0402100b, 0x83380480, 0x00000040,
8845 0x04001008, 0x4d2c0000, 0x59325808, 0x812e59c0,
8846 0x0c020806, 0x5c025800, 0x0201f000, 0x0002077d,
8847 0x493bc857, 0x1c01f000, 0x001089ae, 0x001089ae,
8848 0x001089ae, 0x001089ae, 0x001089ae, 0x001089b0,
8849 0x001089ae, 0x001089ae, 0x001089ae, 0x001089ae,
8850 0x001089ae, 0x001089ae, 0x001089ae, 0x001089ae,
8851 0x001089ae, 0x001089ae, 0x001089ae, 0x001089ae,
8852 0x001089ae, 0x001089ae, 0x001089b5, 0x001089ae,
8853 0x001089ae, 0x001089ae, 0x0201f800, 0x001005d8,
8854 0x59cc0a08, 0x497a5807, 0x4807c857, 0x82040d00,
8855 0x00000fff, 0x59300402, 0x48025c06, 0x4a025a04,
8856 0x00000103, 0x48065c09, 0x4a025a06, 0x00000000,
8857 0x800409c0, 0x02000000, 0x000202c1, 0x59cc0009,
8858 0x4802580a, 0x82042500, 0x00000100, 0x04000002,
8859 0x59cc200b, 0x4812580c, 0x82040500, 0x00000200,
8860 0x04000002, 0x59cc000a, 0x4802580b, 0x80100c00,
8861 0x02001800, 0x001005d8, 0x02000000, 0x000202da,
8862 0x82041480, 0x0000001d, 0x04001006, 0x592c0404,
8863 0x8c00051e, 0x0400000e, 0x42000800, 0x0000001c,
8864 0x4c500000, 0x4c540000, 0x83cca400, 0x0000000c,
8865 0x832cac00, 0x0000000d, 0x0401f9c1, 0x5c00a800,
8866 0x5c00a000, 0x0201f000, 0x000202da, 0x0401f965,
8867 0x0401f1a0, 0x83380480, 0x00000093, 0x02021800,
8868 0x001005d8, 0x83380480, 0x00000085, 0x02001800,
8869 0x001005d8, 0x0c01f001, 0x001089fd, 0x001089fb,
8870 0x001089fb, 0x00108a04, 0x001089fb, 0x001089fb,
8871 0x001089fb, 0x001089fb, 0x001089fb, 0x001089fb,
8872 0x001089fb, 0x001089fb, 0x001089fb, 0x0201f800,
8873 0x001005d8, 0x4a026203, 0x00000001, 0x493a6403,
8874 0x42000800, 0x80000040, 0x0201f000, 0x00020721,
8875 0x4933c857, 0x59cc1204, 0x480a601c, 0x59cc1404,
8876 0x0201f800, 0x00109410, 0x0400001b, 0x591c0203,
8877 0x82000580, 0x00000000, 0x04000017, 0x591c0009,
8878 0x81340580, 0x04020014, 0x4d300000, 0x4d1c0000,
8879 0x411e6000, 0x0401f9c2, 0x5c023800, 0x5c026000,
8880 0x0400000b, 0x59cc0005, 0x8c000500, 0x04020003,
8881 0x0401f98c, 0x0401f003, 0x4a023a03, 0x00000002,
8882 0x4a026403, 0x00000086, 0x0401f005, 0x0401f9a6,
8883 0x040007f5, 0x4a026403, 0x00000087, 0x4a026203,
8884 0x00000001, 0x42000800, 0x80000040, 0x0201f800,
8885 0x00020721, 0x59340200, 0x8c00050e, 0x0400000d,
8886 0x59cc1404, 0x0201f800, 0x00109410, 0x04000009,
8887 0x591c0414, 0x8c00051a, 0x04000006, 0x4d300000,
8888 0x411e6000, 0x0201f800, 0x0010921e, 0x5c026000,
8889 0x1c01f000, 0x83380580, 0x00000013, 0x0402000a,
8890 0x59300403, 0x82000d80, 0x00000086, 0x04000012,
8891 0x82000d80, 0x00000087, 0x02020800, 0x001005d8,
8892 0x0401f00d, 0x83380580, 0x00000027, 0x04000005,
8893 0x83380580, 0x00000014, 0x02020800, 0x001005d8,
8894 0x493bc857, 0x0201f800, 0x00106bbf, 0x0201f000,
8895 0x00107911, 0x4933c857, 0x0201f000, 0x00107911,
8896 0x83380580, 0x00000013, 0x04020005, 0x59300403,
8897 0x82000480, 0x00000085, 0x0c01f04d, 0x83380580,
8898 0x00000027, 0x04020041, 0x4933c857, 0x0201f800,
8899 0x00106bbf, 0x4d3c0000, 0x417a7800, 0x0201f800,
8900 0x0010203c, 0x5c027800, 0x42003000, 0x00000015,
8901 0x41782800, 0x42002000, 0x00000003, 0x42028000,
8902 0x00000029, 0x4d400000, 0x4d440000, 0x59368c03,
8903 0x0201f800, 0x0010985e, 0x5c028800, 0x5c028000,
8904 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
8905 0x0201f800, 0x00109037, 0x0400000c, 0x4d2c0000,
8906 0x59325808, 0x4a025a04, 0x00000103, 0x59300402,
8907 0x48025c06, 0x497a5c09, 0x49425a06, 0x0201f800,
8908 0x000202da, 0x5c025800, 0x0201f800, 0x0010912a,
8909 0x0201f000, 0x0002077d, 0x83380580, 0x00000089,
8910 0x04000005, 0x83380580, 0x0000008a, 0x02020000,
8911 0x00107974, 0x0201f800, 0x00106f60, 0x02020000,
8912 0x00107974, 0x59300a03, 0x82040580, 0x0000000a,
8913 0x0400002a, 0x82040580, 0x0000000c, 0x04000027,
8914 0x0201f800, 0x001005d8, 0x83380580, 0x00000014,
8915 0x040207ea, 0x4933c857, 0x0201f800, 0x00106bbf,
8916 0x42028000, 0x00000006, 0x0401f7d2, 0x00108aba,
8917 0x00108ab8, 0x00108ab8, 0x00108ab8, 0x00108ab8,
8918 0x00108ab8, 0x00108ac0, 0x00108ab8, 0x00108ab8,
8919 0x00108ab8, 0x00108ab8, 0x00108ab8, 0x00108ab8,
8920 0x0201f800, 0x001005d8, 0x4933c857, 0x59a80037,
8921 0x48026206, 0x4a026203, 0x0000000a, 0x1c01f000,
8922 0x4933c857, 0x59a80037, 0x48026206, 0x4a026203,
8923 0x0000000c, 0x1c01f000, 0x83380580, 0x00000089,
8924 0x04000008, 0x83380580, 0x0000008a, 0x04000032,
8925 0x4933c857, 0x493bc857, 0x0201f000, 0x00107974,
8926 0x4933c857, 0x59325808, 0x59300a1d, 0x82040580,
8927 0x00000003, 0x04020004, 0x0201f800, 0x001049b2,
8928 0x0401f00c, 0x5930021d, 0x82000580, 0x00000001,
8929 0x04020008, 0x59300c16, 0x82040580, 0x00000039,
8930 0x0400002c, 0x82040580, 0x00000035, 0x04000029,
8931 0x4c340000, 0x41306800, 0x0201f800, 0x0002075a,
8932 0x04000010, 0x4a026203, 0x00000001, 0x4a026403,
8933 0x0000001e, 0x59cc0c07, 0x48066419, 0x59cc0a07,
8934 0x48066219, 0x49366009, 0x4a026406, 0x00000001,
8935 0x42000800, 0x80000040, 0x0201f800, 0x00020721,
8936 0x40366000, 0x0201f800, 0x0002077d, 0x5c006800,
8937 0x1c01f000, 0x4933c857, 0x5930021d, 0x82000580,
8938 0x00000001, 0x04020040, 0x59300c16, 0x82040580,
8939 0x00000035, 0x04000007, 0x82040580, 0x0000001e,
8940 0x04000004, 0x82040580, 0x00000039, 0x04020036,
8941 0x4933c857, 0x4c500000, 0x4d1c0000, 0x4130a000,
8942 0x40067000, 0x0201f800, 0x001093ba, 0x04020029,
8943 0x0201f800, 0x0002075a, 0x04000026, 0x491fc857,
8944 0x4933c857, 0x83380580, 0x00000035, 0x04000004,
8945 0x83380580, 0x00000039, 0x04020002, 0x4932381c,
8946 0x493a6403, 0x4a026203, 0x00000001, 0x4a026406,
8947 0x00000001, 0x58500809, 0x4807c857, 0x48066009,
8948 0x58500c15, 0x4807c857, 0x48066415, 0x58500a15,
8949 0x4807c857, 0x48066215, 0x58500a16, 0x4807c857,
8950 0x48066216, 0x58500c19, 0x4807c857, 0x48066419,
8951 0x58500a19, 0x4807c857, 0x48066219, 0x491e601e,
8952 0x42000800, 0x80000040, 0x0201f800, 0x00020721,
8953 0x40526000, 0x5c023800, 0x5c00a000, 0x0201f000,
8954 0x0002077d, 0x5930021d, 0x82000580, 0x00000003,
8955 0x02000800, 0x001049b2, 0x0201f000, 0x0002077d,
8956 0x4803c856, 0x4c500000, 0x4c540000, 0x412c7800,
8957 0x4c3c0000, 0x42002800, 0x00000001, 0x82040480,
8958 0x00000101, 0x04001003, 0x42000800, 0x00000100,
8959 0x40043000, 0x42000800, 0x0000001c, 0x83cca400,
8960 0x0000000c, 0x832cac00, 0x0000000d, 0x0401f844,
8961 0x82183480, 0x0000001c, 0x592e5801, 0x812e59c0,
8962 0x02020800, 0x001007fd, 0x0201f800, 0x001007e4,
8963 0x04000017, 0x80142800, 0x4a025a04, 0x00000110,
8964 0x497a5c04, 0x492c7801, 0x82180c80, 0x0000003d,
8965 0x04021006, 0x40180800, 0x832cac00, 0x00000005,
8966 0x0401f82f, 0x0401f00a, 0x82183480, 0x0000003c,
8967 0x42000800, 0x0000003c, 0x412c7800, 0x832cac00,
8968 0x00000005, 0x0401f826, 0x0401f7e8, 0x5c007800,
8969 0x841429c0, 0x82142d40, 0x00000003, 0x48147a04,
8970 0x403e5800, 0x5c00a800, 0x5c00a000, 0x1c01f000,
8971 0x492fc857, 0x812e59c0, 0x0400000f, 0x4d2c0000,
8972 0x4c3c0000, 0x592c7801, 0x803c79c0, 0x04000006,
8973 0x497a5801, 0x0201f800, 0x000202da, 0x403e5800,
8974 0x0401f7f9, 0x5c007800, 0x0201f800, 0x000202da,
8975 0x5c025800, 0x1c01f000, 0x4803c856, 0x4c580000,
8976 0x82040c00, 0x00000003, 0x8004b104, 0x0201f800,
8977 0x0010ab17, 0x5c00b000, 0x1c01f000, 0x4803c856,
8978 0x4c580000, 0x82040c00, 0x00000003, 0x8004b104,
8979 0x0201f800, 0x0010ab17, 0x5c00b000, 0x1c01f000,
8980 0x591c0c06, 0x82040580, 0x00000003, 0x04000004,
8981 0x82040580, 0x00000002, 0x0402001a, 0x4d300000,
8982 0x4d2c0000, 0x411e6000, 0x59325808, 0x0201f800,
8983 0x00109037, 0x0400000f, 0x4d400000, 0x42028000,
8984 0x00000013, 0x592c0a08, 0x84040d54, 0x0201f800,
8985 0x00104e70, 0x5c028000, 0x0201f800, 0x0010959c,
8986 0x0201f800, 0x000202da, 0x0201f800, 0x0010912a,
8987 0x0201f800, 0x00107911, 0x5c025800, 0x5c026000,
8988 0x1c01f000, 0x59cc0005, 0x8c000500, 0x0402000b,
8989 0x591c0406, 0x82000580, 0x00000002, 0x04020007,
8990 0x591c0c03, 0x82040580, 0x00000085, 0x04000003,
8991 0x82040580, 0x0000008b, 0x1c01f000, 0x4933c857,
8992 0x4d3c0000, 0x42027800, 0x00000002, 0x59300406,
8993 0x82000c80, 0x00000012, 0x02021800, 0x001005d8,
8994 0x0c01f80a, 0x5c027800, 0x1c01f000, 0x4933c857,
8995 0x59300406, 0x82000c80, 0x00000012, 0x02021800,
8996 0x001005d8, 0x0c01f001, 0x00108c01, 0x00108bfe,
8997 0x00108bfe, 0x00108c29, 0x00108bfc, 0x00108bfe,
8998 0x00108c1a, 0x00108bfe, 0x00108bfc, 0x001065f4,
8999 0x00108bfe, 0x00108bfe, 0x00108bfe, 0x00108bfc,
9000 0x00108bfc, 0x00108bfc, 0x00108cf9, 0x00108bfe,
9001 0x0201f800, 0x001005d8, 0x4803c856, 0x80000580,
9002 0x1c01f000, 0x4803c856, 0x8d3e7d02, 0x04020016,
9003 0x0201f800, 0x00109037, 0x0400000f, 0x59325808,
9004 0x41780800, 0x4d400000, 0x42028000, 0x00000005,
9005 0x0201f800, 0x00104e70, 0x5c028000, 0x0201f800,
9006 0x0010959c, 0x0201f800, 0x001091cc, 0x0201f800,
9007 0x000202da, 0x0201f800, 0x00107911, 0x82000540,
9008 0x00000001, 0x1c01f000, 0x4933c857, 0x0201f800,
9009 0x001048d9, 0x0402000c, 0x4d400000, 0x42028000,
9010 0x00000010, 0x0201f800, 0x0010a1d1, 0x4a026406,
9011 0x00000006, 0x4a026203, 0x00000007, 0x5c028000,
9012 0x1c01f000, 0x4933c857, 0x0201f800, 0x00106c55,
9013 0x4df00000, 0x0401f8b8, 0x82000c80, 0x0000000e,
9014 0x02021800, 0x001005d8, 0x0c01f001, 0x00108c43,
9015 0x00108cb0, 0x00108c5a, 0x00108cc3, 0x00108cab,
9016 0x00108c41, 0x00108c43, 0x00108c43, 0x00108c47,
9017 0x00108c43, 0x00108c43, 0x00108c43, 0x00108c43,
9018 0x00108c5a, 0x0201f800, 0x001005d8, 0x5c03e000,
9019 0x02000800, 0x00106c4b, 0x0401f7b8, 0x5c03e000,
9020 0x02000800, 0x00106c4b, 0x59300406, 0x82000580,
9021 0x00000003, 0x040207b4, 0x59300203, 0x82000580,
9022 0x0000000d, 0x040007b0, 0x8d3e7d02, 0x040207ae,
9023 0x4d340000, 0x59326809, 0x0201f800, 0x001049b2,
9024 0x5c026800, 0x0401f7a8, 0x59300004, 0x8400055c,
9025 0x48026004, 0x0201f800, 0x00106c4b, 0x59300406,
9026 0x82000580, 0x00000006, 0x04000043, 0x8d3e7d02,
9027 0x04020041, 0x497a621d, 0x59300203, 0x82000580,
9028 0x0000000d, 0x04000003, 0x4a02621d, 0x00000003,
9029 0x0401fbcb, 0x04000024, 0x4d2c0000, 0x4d400000,
9030 0x59325808, 0x0201f800, 0x001091cc, 0x592c0408,
9031 0x8c000512, 0x04000009, 0x4d2c0000, 0x84000512,
9032 0x48025c08, 0x592c0809, 0x40065800, 0x0201f800,
9033 0x001007fd, 0x5c025800, 0x4d400000, 0x42028000,
9034 0x00000005, 0x592c0a08, 0x8c040d0e, 0x04000004,
9035 0x42028000, 0x00000002, 0x0401f001, 0x0201f800,
9036 0x00104e70, 0x5c028000, 0x0201f800, 0x0010959c,
9037 0x0201f800, 0x000202da, 0x497a6008, 0x5c028000,
9038 0x5c025800, 0x8d3e7d00, 0x04000009, 0x4d340000,
9039 0x59326809, 0x0201f800, 0x001049b2, 0x5c026800,
9040 0x0201f800, 0x00107911, 0x0401f00b, 0x4a026403,
9041 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
9042 0x00000002, 0x42000800, 0x8000404b, 0x0201f800,
9043 0x00020721, 0x5c03e000, 0x02020800, 0x00106c55,
9044 0x82000540, 0x00000001, 0x1c01f000, 0x0201f800,
9045 0x00106c4b, 0x0201f800, 0x00100e99, 0x0401f7ab,
9046 0x598c000d, 0x81300580, 0x04020004, 0x0201f800,
9047 0x00106e8e, 0x0402001b, 0x0201f800, 0x001068d3,
9048 0x04020006, 0x59300c03, 0x82040580, 0x00000040,
9049 0x0400078b, 0x0401f79d, 0x0201f800, 0x00106b6c,
9050 0x04000010, 0x0201f800, 0x001005d8, 0x0401f813,
9051 0x04020004, 0x0201f800, 0x00106e62, 0x04020009,
9052 0x0201f800, 0x001067ae, 0x040207f4, 0x59300c03,
9053 0x82040580, 0x00000040, 0x04000779, 0x0401f78b,
9054 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
9055 0x001005d8, 0x0c01f75e, 0x417a3000, 0x42032000,
9056 0x0000bf32, 0x59900004, 0x81300580, 0x04000009,
9057 0x83932400, 0x00000010, 0x811a3000, 0x83180480,
9058 0x00000005, 0x040017f8, 0x82000540, 0x00000001,
9059 0x1c01f000, 0x59300004, 0x8c00053e, 0x04000010,
9060 0x8c00050c, 0x0402000e, 0x8c000516, 0x04020006,
9061 0x82000d00, 0x0000001f, 0x82040580, 0x00000005,
9062 0x04020004, 0x42000000, 0x00000003, 0x0401f005,
9063 0x42000000, 0x00000001, 0x0401f002, 0x59300203,
9064 0x1c01f000, 0x4933c857, 0x0201f800, 0x00106c55,
9065 0x4df00000, 0x59300203, 0x82000c80, 0x0000000e,
9066 0x02021800, 0x001005d8, 0x0c01f001, 0x00108d13,
9067 0x00108d30, 0x00108d17, 0x00108d11, 0x00108d11,
9068 0x00108d11, 0x00108d11, 0x00108d11, 0x00108d11,
9069 0x00108d11, 0x00108d11, 0x00108d11, 0x00108d11,
9070 0x00108d11, 0x0201f800, 0x001005d8, 0x5c03e000,
9071 0x02000800, 0x00106c4b, 0x0401f6e8, 0x5c03e000,
9072 0x02000800, 0x00106c4b, 0x4d2c0000, 0x59325808,
9073 0x59300403, 0x82000580, 0x00000052, 0x02000800,
9074 0x00101231, 0x0401fb16, 0x02000800, 0x001005d8,
9075 0x4a025a06, 0x00000005, 0x0201f800, 0x000202da,
9076 0x0201f800, 0x00104c19, 0x0201f800, 0x00107911,
9077 0x5c025800, 0x82000540, 0x00000001, 0x1c01f000,
9078 0x598c000d, 0x81300580, 0x0402001a, 0x59300004,
9079 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
9080 0x0401f01a, 0x42001000, 0x0010b7f6, 0x50081000,
9081 0x58080002, 0x82000580, 0x00000100, 0x0400000a,
9082 0x5808000c, 0x81300580, 0x02020800, 0x001005d8,
9083 0x0201f800, 0x001068d3, 0x02020800, 0x001005d8,
9084 0x0401f7cf, 0x0201f800, 0x00106e8e, 0x0402000c,
9085 0x59300004, 0x8c000520, 0x04000004, 0x84000520,
9086 0x48026004, 0x0401f7c6, 0x0201f800, 0x001068d3,
9087 0x040007c3, 0x0201f800, 0x001005d8, 0x59300203,
9088 0x82000c80, 0x0000000e, 0x02021800, 0x001005d8,
9089 0x0c01f7a7, 0x59300406, 0x4933c857, 0x4803c857,
9090 0x82000c80, 0x00000012, 0x02021800, 0x001005d8,
9091 0x0c01f001, 0x00108d7c, 0x00108e41, 0x00108f79,
9092 0x00108d88, 0x00107911, 0x00108d7c, 0x0010a1c0,
9093 0x0002077d, 0x00108e41, 0x001065ce, 0x00108fda,
9094 0x00108d77, 0x00108d77, 0x00108d77, 0x00108d77,
9095 0x00108d77, 0x001096eb, 0x001096eb, 0x0201f800,
9096 0x001005d8, 0x0401fbd5, 0x02000000, 0x0010801c,
9097 0x1c01f000, 0x0201f800, 0x00106c55, 0x0201f800,
9098 0x00106bbf, 0x0201f800, 0x00106c4b, 0x0201f000,
9099 0x0002077d, 0x4a026206, 0x00000001, 0x1c01f000,
9100 0x42000000, 0x0010b872, 0x0201f800, 0x0010aa47,
9101 0x4d2c0000, 0x4d400000, 0x417a5800, 0x0401faa8,
9102 0x04000007, 0x59325808, 0x592c0208, 0x8400054c,
9103 0x48025a08, 0x42028000, 0x00000006, 0x0201f800,
9104 0x00106c55, 0x0401ff4c, 0x4803c857, 0x82000c80,
9105 0x0000000e, 0x02021800, 0x001005d8, 0x0c01f806,
9106 0x0201f800, 0x00106c4b, 0x5c028000, 0x5c025800,
9107 0x1c01f000, 0x00108e40, 0x00108db5, 0x00108dc3,
9108 0x00108de5, 0x00108e11, 0x00108db3, 0x00108d7c,
9109 0x00108d7c, 0x00108d7c, 0x00108db3, 0x00108db3,
9110 0x00108db3, 0x00108db3, 0x00108dc3, 0x0201f800,
9111 0x001005d8, 0x598c000d, 0x81300580, 0x04020004,
9112 0x0201f800, 0x00106e8e, 0x04020038, 0x0201f800,
9113 0x001068d3, 0x0400003b, 0x0201f800, 0x00106b6c,
9114 0x04000032, 0x0201f800, 0x001005d8, 0x497a621d,
9115 0x812e59c0, 0x02000800, 0x001005d8, 0x592c0204,
9116 0x82000500, 0x000000ff, 0x82000580, 0x00000014,
9117 0x04000003, 0x4a02621d, 0x00000003, 0x592c0a08,
9118 0x0201f800, 0x00104e70, 0x0201f800, 0x0010959c,
9119 0x0201f800, 0x000202da, 0x497a6008, 0x4a026403,
9120 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
9121 0x00000002, 0x4a026004, 0x8000404b, 0x0201f800,
9122 0x00106c4b, 0x42000800, 0x8000404b, 0x0201f000,
9123 0x00020721, 0x0401fef1, 0x04020004, 0x0201f800,
9124 0x00106e62, 0x04020009, 0x0201f800, 0x001067ae,
9125 0x040207d2, 0x59300c03, 0x82040580, 0x00000040,
9126 0x04000008, 0x0401f7d2, 0x59300203, 0x82000c80,
9127 0x0000000e, 0x02021800, 0x001005d8, 0x0c01f7ae,
9128 0x0201f800, 0x00106c4b, 0x812e59c0, 0x04000013,
9129 0x592c0a08, 0x0201f800, 0x00104e70, 0x0201f800,
9130 0x0010959c, 0x0201f800, 0x000202da, 0x59300203,
9131 0x82000580, 0x0000000d, 0x04000008, 0x0201f800,
9132 0x00106c4b, 0x4d340000, 0x59326809, 0x0201f800,
9133 0x001049b2, 0x5c026800, 0x0201f800, 0x00107911,
9134 0x0401f030, 0x812e59c0, 0x02000800, 0x001005d8,
9135 0x0201f800, 0x0010940a, 0x04020004, 0x0201f800,
9136 0x00100e99, 0x0401f7aa, 0x0201f800, 0x00106c4b,
9137 0x592c0208, 0x8400050c, 0x48025a08, 0x592c0406,
9138 0x800000c2, 0x800008c4, 0x80040c00, 0x48066206,
9139 0x42000000, 0x10000000, 0x41300800, 0x0201f800,
9140 0x00100b94, 0x0400000d, 0x592c0208, 0x8c00051c,
9141 0x04020006, 0x8400055c, 0x48025a08, 0x4a026206,
9142 0x00000002, 0x0401f00f, 0x4d300000, 0x0201f800,
9143 0x001012e5, 0x5c026000, 0x59300203, 0x82000580,
9144 0x00000004, 0x04020007, 0x4d380000, 0x42027000,
9145 0x00000048, 0x0201f800, 0x000207a1, 0x5c027000,
9146 0x1c01f000, 0x42000000, 0x0010b86e, 0x0201f800,
9147 0x0010aa47, 0x59300203, 0x82000c80, 0x0000000e,
9148 0x02021800, 0x001005d8, 0x4803c857, 0x0c01f001,
9149 0x00108e5a, 0x00108d85, 0x00108e5c, 0x00108e5a,
9150 0x00108e5c, 0x00108e5c, 0x00108d7d, 0x00108e5a,
9151 0x00108d79, 0x00108e5a, 0x00108e5a, 0x00108e5a,
9152 0x00108e5a, 0x00108e5a, 0x0201f800, 0x001005d8,
9153 0x4d340000, 0x4d2c0000, 0x59326809, 0x59340400,
9154 0x82000500, 0x000000ff, 0x82000c80, 0x0000000c,
9155 0x02021800, 0x001005d8, 0x59303403, 0x82180d80,
9156 0x00000004, 0x04020004, 0x42000000, 0x00000001,
9157 0x0401f006, 0x82180d80, 0x00000000, 0x04020003,
9158 0x42000000, 0x00000001, 0x4803c857, 0x0c01f804,
9159 0x5c025800, 0x5c026800, 0x1c01f000, 0x00108e83,
9160 0x00108f22, 0x00108e85, 0x00108eba, 0x00108e85,
9161 0x00108f3f, 0x00108e85, 0x00108e8f, 0x00108e83,
9162 0x00108f3f, 0x00108e83, 0x00108e9e, 0x0201f800,
9163 0x001005d8, 0x59300403, 0x82000d80, 0x00000016,
9164 0x0400002e, 0x82000d80, 0x00000004, 0x0400002b,
9165 0x82000d80, 0x00000002, 0x04000028, 0x0401fabf,
9166 0x04000079, 0x59300403, 0x82000d80, 0x00000022,
9167 0x040000ae, 0x82000d80, 0x00000039, 0x040000b3,
9168 0x82000d80, 0x00000035, 0x040000b0, 0x82000d80,
9169 0x0000001e, 0x0400001b, 0x0401f999, 0x04000007,
9170 0x0201f800, 0x00109597, 0x04020004, 0x0201f800,
9171 0x00104a14, 0x0401f011, 0x59300403, 0x82000d80,
9172 0x00000001, 0x04020004, 0x0201f800, 0x001049e7,
9173 0x0400000a, 0x4d3c0000, 0x417a7800, 0x0201f800,
9174 0x0010203c, 0x5c027800, 0x42000000, 0x0010b864,
9175 0x0201f800, 0x0010aa47, 0x0201f800, 0x0010801c,
9176 0x0201f000, 0x00107911, 0x0401f97d, 0x04000004,
9177 0x0201f800, 0x00109597, 0x040000a9, 0x59300c03,
9178 0x82040580, 0x00000016, 0x04000056, 0x82040580,
9179 0x00000002, 0x04020034, 0x59a80026, 0x8c000502,
9180 0x04020013, 0x0201f800, 0x0010513b, 0x04020010,
9181 0x0201f800, 0x00105151, 0x04020006, 0x42000000,
9182 0x00000001, 0x0201f800, 0x00105113, 0x0401f094,
9183 0x4a035033, 0x00000001, 0x4202d800, 0x00000001,
9184 0x0201f800, 0x001050a2, 0x0401f08d, 0x59340403,
9185 0x82000580, 0x000007fc, 0x04000008, 0x59a80026,
9186 0x8c00050a, 0x04020084, 0x59340212, 0x82000500,
9187 0x0000ff00, 0x04000082, 0x59340412, 0x82000500,
9188 0x000000ff, 0x04000010, 0x80000040, 0x48026c12,
9189 0x497a6008, 0x4a026406, 0x00000007, 0x4a026206,
9190 0x00000398, 0x497a6205, 0x0201f800, 0x0002075a,
9191 0x04000005, 0x49366009, 0x4a026406, 0x00000001,
9192 0x0401f020, 0x59300403, 0x82000d80, 0x00000002,
9193 0x0402000d, 0x59340403, 0x82000580, 0x000007fe,
9194 0x04020009, 0x59a80026, 0x84000540, 0x48035026,
9195 0x0201f800, 0x00104237, 0x0201f800, 0x0010801c,
9196 0x0401f00c, 0x0201f800, 0x0010801c, 0x4d3c0000,
9197 0x417a7800, 0x0201f800, 0x0010203c, 0x5c027800,
9198 0x42000000, 0x0010b864, 0x0201f800, 0x0010aa47,
9199 0x0201f800, 0x00102074, 0x0201f000, 0x00107911,
9200 0x42000800, 0x00000003, 0x0201f800, 0x00104571,
9201 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
9202 0x0201f000, 0x0010672b, 0x0401f915, 0x04020793,
9203 0x0201f800, 0x00102074, 0x4d3c0000, 0x417a7800,
9204 0x0201f800, 0x0010203c, 0x5c027800, 0x42000000,
9205 0x0010b864, 0x0201f800, 0x0010aa47, 0x42003000,
9206 0x00000018, 0x41782800, 0x42002000, 0x00000000,
9207 0x4d400000, 0x4d440000, 0x59368c03, 0x42028000,
9208 0x00000029, 0x0201f800, 0x0010985e, 0x5c028800,
9209 0x5c028000, 0x0201f000, 0x00107911, 0x0201f800,
9210 0x00104a14, 0x0401f7c8, 0x42000000, 0x0010b86d,
9211 0x0201f800, 0x0010aa47, 0x0201f800, 0x00107b76,
9212 0x040207c1, 0x1c01f000, 0x4d380000, 0x59327403,
9213 0x0201f800, 0x001093ba, 0x5c027000, 0x02020000,
9214 0x0002077d, 0x836c0580, 0x00000003, 0x04000004,
9215 0x4a026206, 0x00000002, 0x1c01f000, 0x59300403,
9216 0x48026416, 0x4a02621d, 0x00000001, 0x4a026403,
9217 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
9218 0x00000002, 0x42000800, 0x8000004b, 0x0201f000,
9219 0x00020721, 0x0201f800, 0x00102074, 0x0201f800,
9220 0x0010801c, 0x4d3c0000, 0x417a7800, 0x0201f800,
9221 0x0010203c, 0x5c027800, 0x42000000, 0x0010b864,
9222 0x0201f800, 0x0010aa47, 0x497a6008, 0x4a026406,
9223 0x00000007, 0x4a026206, 0x00000398, 0x497a6205,
9224 0x1c01f000, 0x42000000, 0x0010b870, 0x0201f800,
9225 0x0010aa47, 0x4d340000, 0x59326809, 0x59300203,
9226 0x82000c80, 0x0000000e, 0x02021800, 0x001005d8,
9227 0x4803c857, 0x0c01f803, 0x5c026800, 0x1c01f000,
9228 0x00108f96, 0x00108d85, 0x00108f96, 0x00108f96,
9229 0x00108f96, 0x00108f96, 0x00108f96, 0x00108f96,
9230 0x00108f96, 0x00108d85, 0x00108f98, 0x00108d85,
9231 0x00108fa0, 0x00108f96, 0x0201f800, 0x001005d8,
9232 0x4a026403, 0x0000008b, 0x4a026203, 0x0000000b,
9233 0x42000800, 0x8000404b, 0x0201f000, 0x00020721,
9234 0x59300a1d, 0x4d3c0000, 0x417a7800, 0x0201f800,
9235 0x0010203c, 0x5c027800, 0x42003000, 0x00000011,
9236 0x0201f800, 0x0010a942, 0x42000000, 0x0010b864,
9237 0x0201f800, 0x0010aa47, 0x41306800, 0x0201f800,
9238 0x0002075a, 0x04000008, 0x49366009, 0x4d300000,
9239 0x40366000, 0x0201f800, 0x00107911, 0x5c026000,
9240 0x0401f002, 0x40366000, 0x497a6008, 0x4a026406,
9241 0x00000001, 0x4a026403, 0x00000001, 0x0201f800,
9242 0x00103b25, 0x04000011, 0x4a026406, 0x00000004,
9243 0x4a026203, 0x00000007, 0x4a026420, 0x00000001,
9244 0x42003000, 0x00000004, 0x4d400000, 0x42028000,
9245 0x00000029, 0x41782800, 0x0201f800, 0x0010a43e,
9246 0x5c028000, 0x1c01f000, 0x42000800, 0x0000000b,
9247 0x0201f800, 0x00104571, 0x4a026203, 0x00000001,
9248 0x0201f000, 0x0010672b, 0x42000000, 0x0010b876,
9249 0x0201f800, 0x0010aa47, 0x59300203, 0x82000c80,
9250 0x0000000e, 0x02021800, 0x001005d8, 0x4803c857,
9251 0x0c01f001, 0x0010900b, 0x00108ff3, 0x00108ff7,
9252 0x0010900c, 0x00108ff5, 0x00108ff3, 0x00108ff3,
9253 0x00108ff3, 0x00108ff3, 0x00108ff3, 0x00108ff3,
9254 0x00108ff3, 0x00108ff3, 0x00108ff3, 0x0201f800,
9255 0x001005d8, 0x0201f800, 0x00100e99, 0x4d2c0000,
9256 0x59325808, 0x4a025a06, 0x00000006, 0x0201f800,
9257 0x000202da, 0x5c025800, 0x497a6008, 0x4a02621d,
9258 0x0000000a, 0x4a026403, 0x00000085, 0x4a026203,
9259 0x00000009, 0x4a026406, 0x00000002, 0x42000800,
9260 0x8000404b, 0x0201f000, 0x00020721, 0x1c01f000,
9261 0x0201f800, 0x00106c55, 0x4df00000, 0x0401fcc7,
9262 0x04020004, 0x0201f800, 0x00106e62, 0x0402000c,
9263 0x0201f800, 0x001067ae, 0x04020005, 0x5c03e000,
9264 0x0201f800, 0x00106c4b, 0x0401f7dd, 0x0201f800,
9265 0x00106b6c, 0x02020800, 0x001005d8, 0x5c03e000,
9266 0x0201f800, 0x00106c4b, 0x59300203, 0x82000d80,
9267 0x00000003, 0x02000800, 0x001005d8, 0x82000c80,
9268 0x0000000e, 0x02021800, 0x001005d8, 0x0c01f7ba,
9269 0x4803c856, 0x59a8000e, 0x59a80867, 0x80040400,
9270 0x80080480, 0x04021004, 0x82000540, 0x00000001,
9271 0x1c01f000, 0x80000580, 0x1c01f000, 0x4803c856,
9272 0x4c080000, 0x59301008, 0x82081500, 0xfff00000,
9273 0x5c001000, 0x1c01f000, 0x4803c856, 0x4d300000,
9274 0x0201f800, 0x0002075a, 0x0400000a, 0x0401f82f,
9275 0x4d380000, 0x42027000, 0x0000004b, 0x0201f800,
9276 0x000207a1, 0x5c027000, 0x82000540, 0x00000001,
9277 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
9278 0x0201f800, 0x00107942, 0x0400001b, 0x0401f81f,
9279 0x4d300000, 0x0201f800, 0x00106c55, 0x4d3c0000,
9280 0x417a7800, 0x0201f800, 0x00106ab4, 0x0201f800,
9281 0x001067fd, 0x5c027800, 0x0201f800, 0x0010a2ff,
9282 0x0201f800, 0x00106c4b, 0x5c026000, 0x8d3e7d3e,
9283 0x0402000b, 0x4d380000, 0x42027000, 0x0000004c,
9284 0x0201f800, 0x000207a1, 0x5c027000, 0x82000540,
9285 0x00000001, 0x5c026000, 0x1c01f000, 0x0201f800,
9286 0x0002077d, 0x0401f7fa, 0x592c0407, 0x494a6017,
9287 0x494e6018, 0x49366009, 0x492e6008, 0x4a026406,
9288 0x00000003, 0x800000c2, 0x800008c4, 0x80040400,
9289 0x48026206, 0x1c01f000, 0x493bc857, 0x4d300000,
9290 0x0201f800, 0x0002075a, 0x0400000d, 0x0401ffef,
9291 0x4d400000, 0x42028000, 0x00000005, 0x0401f80d,
9292 0x5c028000, 0x8d3e7d3e, 0x04020007, 0x0201f800,
9293 0x000207a1, 0x82000540, 0x00000001, 0x5c026000,
9294 0x1c01f000, 0x0201f800, 0x0002077d, 0x0401f7fa,
9295 0x4803c856, 0x0201f800, 0x00106c55, 0x4d3c0000,
9296 0x4d440000, 0x59368c03, 0x42027800, 0x00000001,
9297 0x0201f800, 0x001069b6, 0x0201f800, 0x0010692e,
9298 0x0201f800, 0x001067fd, 0x0201f800, 0x0010a2ff,
9299 0x5c028800, 0x5c027800, 0x0201f000, 0x00106c4b,
9300 0x4803c856, 0x4d300000, 0x0201f800, 0x0002075a,
9301 0x0400000f, 0x481a601c, 0x48ee6021, 0x49366009,
9302 0x4a026406, 0x00000001, 0x492e6008, 0x4d380000,
9303 0x42027000, 0x0000001f, 0x0201f800, 0x000207a1,
9304 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9305 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
9306 0x0002075a, 0x0400000e, 0x48ee6021, 0x49366009,
9307 0x4a026406, 0x00000001, 0x492e6008, 0x4d380000,
9308 0x42027000, 0x00000055, 0x0201f800, 0x000207a1,
9309 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9310 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
9311 0x0002075a, 0x0400000f, 0x481a601c, 0x48ee6021,
9312 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9313 0x4d380000, 0x42027000, 0x0000003d, 0x0201f800,
9314 0x000207a1, 0x5c027000, 0x82000540, 0x00000001,
9315 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
9316 0x0201f800, 0x00107942, 0x04000014, 0x49366009,
9317 0x492fc857, 0x4933c857, 0x592c0404, 0x8c00051e,
9318 0x04000003, 0x48efc857, 0x48ee6021, 0x4a026406,
9319 0x00000001, 0x492e6008, 0x4d380000, 0x42027000,
9320 0x00000000, 0x0201f800, 0x000207a1, 0x5c027000,
9321 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
9322 0x4803c856, 0x4d300000, 0x0201f800, 0x0002075a,
9323 0x0400000f, 0x48ee6021, 0x481a601c, 0x49366009,
9324 0x4a026406, 0x00000001, 0x492e6008, 0x4d380000,
9325 0x42027000, 0x00000044, 0x0201f800, 0x000207a1,
9326 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9327 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
9328 0x0002075a, 0x0400000f, 0x481a601c, 0x48ee6021,
9329 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9330 0x4d380000, 0x42027000, 0x00000049, 0x0201f800,
9331 0x000207a1, 0x5c027000, 0x82000540, 0x00000001,
9332 0x5c026000, 0x1c01f000, 0x59300009, 0x80001540,
9333 0x02000800, 0x001005d8, 0x5808040b, 0x4803c856,
9334 0x80000040, 0x04001002, 0x4800140b, 0x1c01f000,
9335 0x4803c856, 0x59300403, 0x82000d80, 0x00000002,
9336 0x04000015, 0x82000d80, 0x00000003, 0x04000012,
9337 0x82000d80, 0x00000004, 0x0400000f, 0x82000d80,
9338 0x00000008, 0x0400000c, 0x82000d80, 0x0000000a,
9339 0x04000009, 0x599c0819, 0x8c040d0e, 0x04000004,
9340 0x82000d80, 0x00000000, 0x04000003, 0x82000540,
9341 0x00000001, 0x1c01f000, 0x4803c856, 0x4c000000,
9342 0x4d2c0000, 0x59300406, 0x82000580, 0x00000004,
9343 0x0400001d, 0x59300008, 0x80025d40, 0x800001c0,
9344 0x04000019, 0x0201f800, 0x00109597, 0x04000014,
9345 0x59300406, 0x82004580, 0x00000010, 0x04000010,
9346 0x82004580, 0x00000011, 0x0400000d, 0x82004580,
9347 0x00000003, 0x0400000c, 0x82004580, 0x00000002,
9348 0x04000009, 0x82004580, 0x0000000a, 0x04000006,
9349 0x592c0404, 0x8c00051e, 0x04000003, 0x80000580,
9350 0x0401f003, 0x82000540, 0x00000001, 0x5c025800,
9351 0x5c000000, 0x1c01f000, 0x4803c856, 0x4d300000,
9352 0x0201f800, 0x00107942, 0x04000013, 0x49366009,
9353 0x48ee6021, 0x4a026406, 0x00000001, 0x492e6008,
9354 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010203c,
9355 0x5c027800, 0x4d380000, 0x42027000, 0x00000028,
9356 0x0201f800, 0x000207a1, 0x5c027000, 0x82000540,
9357 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
9358 0x83380580, 0x00000015, 0x0402000d, 0x59a80016,
9359 0x82000580, 0x00000074, 0x04020009, 0x0201f800,
9360 0x0010462a, 0x4a026203, 0x00000001, 0x4a026403,
9361 0x00000029, 0x0201f000, 0x0010672b, 0x0201f800,
9362 0x0010801c, 0x0201f000, 0x0002077d, 0x4803c856,
9363 0x83380580, 0x00000016, 0x04020007, 0x42000800,
9364 0x00000004, 0x0201f800, 0x00104571, 0x0201f000,
9365 0x00107b38, 0x83380580, 0x00000015, 0x04020013,
9366 0x59a80016, 0x82000580, 0x00000014, 0x0402000f,
9367 0x0201f800, 0x0010468d, 0x0201f800, 0x0010846f,
9368 0x0402000a, 0x59340404, 0x80000540, 0x04000007,
9369 0x42000800, 0x00000006, 0x0201f800, 0x00104571,
9370 0x0201f000, 0x00107b38, 0x0201f800, 0x0010801c,
9371 0x0201f000, 0x0002077d, 0x4803c856, 0x592c0206,
9372 0x82000580, 0x00000005, 0x04000002, 0x1c01f000,
9373 0x4803c856, 0x592c0208, 0x8400054a, 0x48025a08,
9374 0x1c01f000, 0x497a6205, 0x497a6008, 0x4a026203,
9375 0x00000001, 0x4a026403, 0x00000050, 0x42000800,
9376 0x80000043, 0x0201f000, 0x00020721, 0x4933c857,
9377 0x4d340000, 0x59326809, 0x59340200, 0x8c00050e,
9378 0x04000006, 0x59300406, 0x82000c80, 0x00000012,
9379 0x04021004, 0x0c01f806, 0x5c026800, 0x1c01f000,
9380 0x0201f800, 0x00108d7c, 0x0401f7fc, 0x00108d7c,
9381 0x001091fd, 0x00109201, 0x00109204, 0x0010a49b,
9382 0x0010a4b8, 0x0010a4bc, 0x00108d7c, 0x00108d7c,
9383 0x00108d7c, 0x00108d7c, 0x00108d7c, 0x00108d7c,
9384 0x00108d7c, 0x00108d7c, 0x00108d7c, 0x00108d7c,
9385 0x00108d7c, 0x4803c856, 0x40000000, 0x40000000,
9386 0x1c01f000, 0x40000000, 0x40000000, 0x1c01f000,
9387 0x5930001c, 0x4803c857, 0x59300414, 0x4933c857,
9388 0x4803c857, 0x8c000502, 0x04000005, 0x84000502,
9389 0x84000540, 0x48026414, 0x1c01f000, 0x42000000,
9390 0xd0000000, 0x41300800, 0x0201f800, 0x00100b94,
9391 0x0401f80a, 0x04020008, 0x59a80037, 0x82000400,
9392 0x0000000a, 0x48026205, 0x59300414, 0x84000542,
9393 0x48026414, 0x1c01f000, 0x4933c857, 0x4d340000,
9394 0x59326809, 0x59340200, 0x8c00050e, 0x02000800,
9395 0x001005d8, 0x5930001c, 0x80000540, 0x0402002f,
9396 0x59a80021, 0x80000540, 0x0402002a, 0x4d1c0000,
9397 0x41323800, 0x0201f800, 0x0002075a, 0x04000023,
9398 0x4932381c, 0x591c0414, 0x84000542, 0x48023c14,
9399 0x49366009, 0x591c0406, 0x82000580, 0x00000003,
9400 0x04000006, 0x591c0202, 0x48026419, 0x591c0402,
9401 0x48026219, 0x0401f005, 0x591c0202, 0x48026219,
9402 0x591c0402, 0x48026419, 0x491e601e, 0x4a026406,
9403 0x00000001, 0x4a026403, 0x00000035, 0x4a026203,
9404 0x00000001, 0x42000800, 0x80000040, 0x0201f800,
9405 0x00020721, 0x411e6000, 0x5c023800, 0x80000580,
9406 0x5c026800, 0x1c01f000, 0x411e6000, 0x5c023800,
9407 0x59a80039, 0x48026205, 0x82000540, 0x00000001,
9408 0x0401f7f8, 0x4933c857, 0x4d2c0000, 0x4932381c,
9409 0x4a026202, 0x0000ffff, 0x591e5808, 0x591c0007,
9410 0x8c00051e, 0x04000005, 0x8400051e, 0x48023807,
9411 0x497a5c09, 0x0401f014, 0x592c0408, 0x8c000518,
9412 0x04000011, 0x84000518, 0x48025c08, 0x4a025c09,
9413 0x00000001, 0x0401fb2f, 0x497a5c09, 0x592c0408,
9414 0x8c000512, 0x04000008, 0x4d2c0000, 0x84000512,
9415 0x48025c08, 0x592e5809, 0x0201f800, 0x001007fd,
9416 0x5c025800, 0x59a80039, 0x48026205, 0x591c0214,
9417 0x48026216, 0x82000d80, 0x00000001, 0x04000008,
9418 0x4a023a03, 0x00000002, 0x82000580, 0x00000005,
9419 0x04000008, 0x497a6015, 0x0401f01e, 0x591c0007,
9420 0x84000540, 0x48023807, 0x4a023a03, 0x00000004,
9421 0x591c0414, 0x4803c857, 0x8400051c, 0x84000554,
9422 0x48023c14, 0x592c000f, 0x40001000, 0x591c0816,
9423 0x80040480, 0x040217f0, 0x591c0016, 0x82000500,
9424 0xfffffffc, 0x48026015, 0x48023816, 0x591c0a14,
9425 0x4807c857, 0x82040d80, 0x00000005, 0x04020005,
9426 0x480bc857, 0x4803c857, 0x4a023812, 0xffffffff,
9427 0x591c0402, 0x48026419, 0x591c0202, 0x48026219,
9428 0x591e6809, 0x49366009, 0x4a026406, 0x00000001,
9429 0x4a026403, 0x00000039, 0x4a026203, 0x00000001,
9430 0x42000800, 0x80000040, 0x0201f800, 0x00020721,
9431 0x5c025800, 0x1c01f000, 0x4933c857, 0x59300414,
9432 0x8c000514, 0x04000015, 0x8c00051c, 0x04020012,
9433 0x59300016, 0x80100480, 0x04001006, 0x04000005,
9434 0x59300414, 0x84000514, 0x8400055c, 0x0401f009,
9435 0x48126016, 0x48126012, 0x40100000, 0x592c180f,
9436 0x800c0480, 0x48026011, 0x59300414, 0x84000514,
9437 0x48026414, 0x1c01f000, 0x4933c857, 0x8c00051c,
9438 0x04020006, 0x59300012, 0x48026016, 0x59300414,
9439 0x8400055c, 0x48026414, 0x1c01f000, 0x59300c03,
9440 0x4933c857, 0x4807c857, 0x82040480, 0x00000034,
9441 0x04001006, 0x82040480, 0x0000003c, 0x04021003,
9442 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
9443 0x0401f7fd, 0x41780800, 0x59a81035, 0x42000000,
9444 0x00000032, 0x0201f800, 0x001066a0, 0x800811c0,
9445 0x04020003, 0x42001000, 0x00000014, 0x480b5037,
9446 0x59a81036, 0x480b502d, 0x41780800, 0x42000000,
9447 0x00000064, 0x0201f800, 0x001066a0, 0x800811c0,
9448 0x04020003, 0x42001000, 0x00000014, 0x480b5038,
9449 0x82081400, 0x0000000a, 0x480b5039, 0x42000800,
9450 0x00000001, 0x0201f800, 0x00106c78, 0x42000000,
9451 0x30000000, 0x40080800, 0x0201f800, 0x00100b68,
9452 0x42000800, 0x00000003, 0x59a81010, 0x0201f800,
9453 0x00106c78, 0x0201f000, 0x00104906, 0x4a035037,
9454 0x00000028, 0x4a035038, 0x00000014, 0x4a03502d,
9455 0x000007d0, 0x42001000, 0x0000001e, 0x480b5039,
9456 0x42000800, 0x00000001, 0x0201f800, 0x00106c78,
9457 0x42000000, 0x30000000, 0x40080800, 0x0201f800,
9458 0x00100b68, 0x42000800, 0x00000003, 0x59a81010,
9459 0x0201f000, 0x00106c78, 0x4933c857, 0x4d2c0000,
9460 0x59300403, 0x82000580, 0x0000003e, 0x04020005,
9461 0x59325817, 0x812e59c0, 0x02020800, 0x001007f4,
9462 0x5c025800, 0x1c01f000, 0x4937c857, 0x4d300000,
9463 0x0201f800, 0x0002075a, 0x04000011, 0x49366009,
9464 0x4a026406, 0x00000001, 0x492e6008, 0x42000800,
9465 0x00000009, 0x0201f800, 0x00104571, 0x4d380000,
9466 0x42027000, 0x00000033, 0x0201f800, 0x000207a1,
9467 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
9468 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c580000,
9469 0x4d3c0000, 0x59325808, 0x83380580, 0x00000015,
9470 0x04020022, 0x59a8b016, 0x82580c80, 0x00000019,
9471 0x04001003, 0x4200b000, 0x00000018, 0x8058b104,
9472 0x0401fa07, 0x80000580, 0x0401fa17, 0x832cac00,
9473 0x00000009, 0x83cca400, 0x00000006, 0x0201f800,
9474 0x0010ab17, 0x42027800, 0x00000001, 0x592c100a,
9475 0x8c081518, 0x04020006, 0x59a80010, 0x592c100d,
9476 0x80080580, 0x04020006, 0x417a7800, 0x59301009,
9477 0x58081403, 0x0201f800, 0x001020a1, 0x0201f800,
9478 0x00107b38, 0x0401f008, 0x4200b000, 0x00000002,
9479 0x0401fa09, 0x0201f800, 0x0010801c, 0x0201f800,
9480 0x0002077d, 0x5c027800, 0x5c00b000, 0x5c025800,
9481 0x1c01f000, 0x4933c856, 0x49366009, 0x4a026406,
9482 0x00000001, 0x492e6008, 0x4d380000, 0x42027000,
9483 0x0000004d, 0x0201f800, 0x000207a1, 0x5c027000,
9484 0x82000540, 0x00000001, 0x1c01f000, 0x4803c856,
9485 0x4d2c0000, 0x83380580, 0x00000015, 0x04020027,
9486 0x59a80816, 0x59325808, 0x5930040b, 0x800000c4,
9487 0x80040580, 0x04020021, 0x4c500000, 0x4c540000,
9488 0x4c580000, 0x83cca400, 0x00000006, 0x4050a800,
9489 0x5930b40b, 0x0201f800, 0x0010ab28, 0x83cca400,
9490 0x00000006, 0x592cb205, 0x832cac00, 0x00000006,
9491 0x0201f800, 0x0010ab17, 0x592e5801, 0x812e59c0,
9492 0x040207f9, 0x5931d821, 0x58ef400b, 0x58ee580d,
9493 0x4a025a04, 0x00000103, 0x58ec0009, 0x0801f800,
9494 0x59300402, 0x5c00b000, 0x5c00a800, 0x5c00a000,
9495 0x5c025800, 0x1c01f000, 0x0201f800, 0x0010801c,
9496 0x5c025800, 0x1c01f000, 0x4933c857, 0x83380580,
9497 0x00000035, 0x04000005, 0x59301419, 0x0401f851,
9498 0x04000027, 0x0401f006, 0x4d300000, 0x5932601e,
9499 0x0401f856, 0x5c026000, 0x04000020, 0x591c0c06,
9500 0x82040580, 0x00000003, 0x04000004, 0x82040580,
9501 0x00000006, 0x0402001c, 0x591c0c02, 0x59300419,
9502 0x80040580, 0x04000009, 0x59300219, 0x80040580,
9503 0x04020015, 0x591c0a02, 0x59300419, 0x80040580,
9504 0x04020011, 0x0401f009, 0x59300a19, 0x82040580,
9505 0x0000ffff, 0x04000005, 0x591c0202, 0x59300a19,
9506 0x80040580, 0x04020008, 0x591c0009, 0x59300809,
9507 0x80040580, 0x1c01f000, 0x417a3800, 0x82000540,
9508 0x00000001, 0x1c01f000, 0x4803c856, 0x59b800e4,
9509 0x8c000538, 0x02020800, 0x001005d8, 0x42000800,
9510 0x0000012c, 0x4a0370e4, 0x20000000, 0x59b800e4,
9511 0x80040840, 0x02000800, 0x001005d8, 0x8c00053c,
9512 0x040207f9, 0x4a0370e4, 0x30000000, 0x40000000,
9513 0x40000000, 0x40000000, 0x59b800e4, 0x8c00053c,
9514 0x040207f1, 0x1c01f000, 0x4803c856, 0x4a0370e4,
9515 0x20000000, 0x40000000, 0x59b800e4, 0x8c000538,
9516 0x040207fb, 0x1c01f000, 0x59300807, 0x8c040d1e,
9517 0x592c0c08, 0x04020002, 0x8c040d18, 0x1c01f000,
9518 0x0401fc1c, 0x04000008, 0x42000800, 0x00000024,
9519 0x0201f800, 0x00106681, 0x82063c00, 0x0010d1c0,
9520 0x491fc857, 0x1c01f000, 0x83300480, 0x0010d1c0,
9521 0x0400100a, 0x59a8000b, 0x81300480, 0x04021007,
9522 0x59301402, 0x0401ffef, 0x04000007, 0x411c0000,
9523 0x81300580, 0x04000003, 0x81780500, 0x0401f002,
9524 0x81300540, 0x1c01f000, 0x4947c857, 0x4d300000,
9525 0x0201f800, 0x00020245, 0x0402000a, 0x42026000,
9526 0x0010bde9, 0x49366009, 0x492e6008, 0x0201f800,
9527 0x0010203c, 0x80000580, 0x5c026000, 0x1c01f000,
9528 0x82000540, 0x00000001, 0x0401f7fc, 0x4933c857,
9529 0x0201f800, 0x00109037, 0x02000800, 0x001005d8,
9530 0x4d2c0000, 0x4d340000, 0x4d440000, 0x4c580000,
9531 0x59325808, 0x59326809, 0x49425a06, 0x0201f800,
9532 0x00105755, 0x592e8c06, 0x592c4207, 0x82200500,
9533 0x0000000f, 0x0c01f806, 0x5c00b000, 0x5c028800,
9534 0x5c026800, 0x5c025800, 0x1c01f000, 0x00109466,
9535 0x00109488, 0x0010948f, 0x00109493, 0x0010949c,
9536 0x00109463, 0x00109463, 0x00109463, 0x001094a0,
9537 0x001094ac, 0x001094ac, 0x00109463, 0x00109463,
9538 0x00109463, 0x00109463, 0x00109463, 0x4803c857,
9539 0x0201f800, 0x001005d8, 0x814281c0, 0x04020012,
9540 0x41785800, 0x592c0404, 0x8c00051c, 0x04020002,
9541 0x59345c05, 0x442c2800, 0x59340008, 0x48002802,
9542 0x59340009, 0x48002801, 0x59340006, 0x48002804,
9543 0x59340007, 0x48002803, 0x4200b000, 0x0000000b,
9544 0x0401f037, 0x592c0207, 0x8c00051e, 0x4200b000,
9545 0x00000002, 0x04020032, 0x8204b540, 0x00000000,
9546 0x0400002f, 0x44042800, 0x59326809, 0x59340400,
9547 0x48002801, 0x4200b000, 0x00000002, 0x0401f028,
9548 0x814281c0, 0x04020030, 0x59345c05, 0x442c2800,
9549 0x4200b000, 0x00000001, 0x0401f021, 0x8340b540,
9550 0x00000000, 0x0400001e, 0x0401f027, 0x814281c0,
9551 0x04020025, 0x59340200, 0x44002800, 0x59340001,
9552 0x48002801, 0x4200b000, 0x00000002, 0x0401f014,
9553 0x8340b540, 0x00000000, 0x0402001b, 0x0401f010,
9554 0x8340b540, 0x00000000, 0x0400000d, 0x0201f800,
9555 0x00104a1f, 0x04000014, 0x8c20450e, 0x04000002,
9556 0x497a6009, 0x4178b000, 0x497a5a06, 0x0401f004,
9557 0x8340b540, 0x00000000, 0x0402000b, 0x592c0404,
9558 0x8400051c, 0x48025c04, 0x592c0207, 0x8400051e,
9559 0x48025a07, 0x0401f8aa, 0x497a6008, 0x0201f000,
9560 0x000202da, 0x592c0207, 0x8c00051e, 0x4200b000,
9561 0x00000002, 0x040207f2, 0x8204b540, 0x00000000,
9562 0x040007ef, 0x44042800, 0x4200b000, 0x00000001,
9563 0x0401f7eb, 0x4937c857, 0x4d300000, 0x0201f800,
9564 0x0002075a, 0x04000011, 0x49366009, 0x4a026406,
9565 0x00000001, 0x492e6008, 0x42000800, 0x0000000b,
9566 0x0201f800, 0x00104571, 0x4d380000, 0x42027000,
9567 0x00000043, 0x0201f800, 0x000207a1, 0x5c027000,
9568 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
9569 0x4937c857, 0x4d2c0000, 0x59325808, 0x83380580,
9570 0x00000015, 0x04020025, 0x59a80016, 0x82000580,
9571 0x00000004, 0x04020021, 0x59a80010, 0x592c1009,
9572 0x80080580, 0x04020010, 0x4d440000, 0x592e8c06,
9573 0x592c0207, 0x4803c856, 0x82000500, 0x00000080,
9574 0x84000548, 0x4d3c0000, 0x42027800, 0x00001000,
9575 0x0201f800, 0x001049bb, 0x5c027800, 0x5c028800,
9576 0x0401f004, 0x4803c856, 0x0201f800, 0x00104a1f,
9577 0x0201f800, 0x00109037, 0x04000017, 0x4d400000,
9578 0x42028000, 0x00000000, 0x41780800, 0x0401ff38,
9579 0x5c028000, 0x0401f00e, 0x0201f800, 0x00104a1f,
9580 0x040207f4, 0x0201f800, 0x00109037, 0x0400000a,
9581 0x4c580000, 0x4200b000, 0x00000002, 0x0401f86e,
9582 0x5c00b000, 0x0201f800, 0x0010801c, 0x0201f800,
9583 0x0002077d, 0x5c025800, 0x1c01f000, 0x4937c857,
9584 0x4d300000, 0x0201f800, 0x0002075a, 0x04000012,
9585 0x49366009, 0x4a026406, 0x00000001, 0x4d3c0000,
9586 0x4d380000, 0x417a7800, 0x0201f800, 0x00104567,
9587 0x492e6008, 0x42027000, 0x00000004, 0x0201f800,
9588 0x000207a1, 0x5c027000, 0x5c027800, 0x82000540,
9589 0x00000001, 0x5c026000, 0x1c01f000, 0x4937c857,
9590 0x4d300000, 0x0201f800, 0x00107942, 0x0400000d,
9591 0x49366009, 0x4a026406, 0x00000001, 0x492e6008,
9592 0x4d380000, 0x42027000, 0x00000051, 0x0201f800,
9593 0x000207a1, 0x5c027000, 0x82000540, 0x00000001,
9594 0x5c026000, 0x1c01f000, 0x4933c857, 0x4c580000,
9595 0x59325808, 0x83383580, 0x00000015, 0x04020011,
9596 0x592c0008, 0x82000500, 0x00ffffff, 0x0402000a,
9597 0x0201f800, 0x00105755, 0x59cc0000, 0x82000500,
9598 0x00ffffff, 0x44002800, 0x4200b000, 0x00000001,
9599 0x0401f80b, 0x0201f800, 0x00107b38, 0x0401f006,
9600 0x4200b000, 0x00000002, 0x0401f823, 0x0201f800,
9601 0x0010801c, 0x5c00b000, 0x1c01f000, 0x492fc857,
9602 0x4c580000, 0x4c000000, 0x8058b1c0, 0x0400000b,
9603 0x82580500, 0xfffffff0, 0x02020800, 0x001005d8,
9604 0x8058b0d0, 0x592c0408, 0x82000500, 0xfffff0ff,
9605 0x80580540, 0x48025c08, 0x5c000000, 0x5c00b000,
9606 0x1c01f000, 0x492fc857, 0x4c000000, 0x4c040000,
9607 0x800000d8, 0x592c0c08, 0x82040d00, 0xffff0fff,
9608 0x80040540, 0x48025c08, 0x5c000800, 0x5c000000,
9609 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325808,
9610 0x592c0207, 0x8400055e, 0x48025a07, 0x4c500000,
9611 0x4c540000, 0x4c580000, 0x0401ffd9, 0x0201f800,
9612 0x00105755, 0x46002800, 0x00000018, 0x80142800,
9613 0x8058b040, 0x83cca400, 0x00000007, 0x4014a800,
9614 0x0201f800, 0x0010ab17, 0x5c00b000, 0x5c00a800,
9615 0x5c00a000, 0x5c025800, 0x1c01f000, 0x59325808,
9616 0x592c0204, 0x82000580, 0x00000152, 0x1c01f000,
9617 0x5930001f, 0x80000540, 0x02020800, 0x00100d56,
9618 0x1c01f000, 0x4d2c0000, 0x59325808, 0x59300203,
9619 0x4933c857, 0x492fc857, 0x493bc857, 0x4803c857,
9620 0x82003480, 0x0000000e, 0x02021800, 0x001005d8,
9621 0x0c01f803, 0x5c025800, 0x1c01f000, 0x001095bd,
9622 0x001095c8, 0x00109603, 0x001095bd, 0x001095bd,
9623 0x001095bd, 0x001095bd, 0x001095bd, 0x001095bf,
9624 0x001095bd, 0x001095bd, 0x001095bd, 0x001095bd,
9625 0x001095bd, 0x0201f800, 0x001005d8, 0x83383480,
9626 0x00000056, 0x02021800, 0x001005d8, 0x493a6403,
9627 0x4a026203, 0x00000001, 0x0201f000, 0x0010672b,
9628 0x83380580, 0x00000013, 0x0402000f, 0x592c000c,
9629 0x800001c0, 0x04000006, 0x4a026203, 0x00000002,
9630 0x59a80037, 0x48026206, 0x1c01f000, 0x4a025a06,
9631 0x00000000, 0x0201f800, 0x000202da, 0x0201f000,
9632 0x0002077d, 0x83380580, 0x00000027, 0x0400001a,
9633 0x83380580, 0x00000014, 0x04000012, 0x83380580,
9634 0x00000015, 0x04000005, 0x83380580, 0x00000016,
9635 0x02020800, 0x001005d8, 0x0201f800, 0x00106f60,
9636 0x02020000, 0x00107974, 0x59300203, 0x82000580,
9637 0x00000002, 0x02020800, 0x001005d8, 0x0401f014,
9638 0x0201f800, 0x00106bbf, 0x4a02580e, 0x00000011,
9639 0x0401f005, 0x0201f800, 0x00106bbf, 0x4a02580e,
9640 0x00000010, 0x4a025a06, 0x00000031, 0x4a02580d,
9641 0x00000004, 0x0201f800, 0x000202da, 0x0201f800,
9642 0x00104c19, 0x0201f000, 0x00107911, 0x59341400,
9643 0x82081d00, 0x000000ff, 0x59300c03, 0x480bc857,
9644 0x4807c857, 0x82040580, 0x00000053, 0x0400002e,
9645 0x82040580, 0x00000002, 0x04000016, 0x82040580,
9646 0x00000001, 0x04000017, 0x82040580, 0x00000003,
9647 0x0400001c, 0x82040580, 0x00000005, 0x0400001d,
9648 0x82040580, 0x00000033, 0x0400001a, 0x82040580,
9649 0x00000000, 0x0400001b, 0x82040580, 0x00000004,
9650 0x02020800, 0x001005d8, 0x0401f8a1, 0x0401f016,
9651 0x820c0580, 0x00000003, 0x0400084c, 0x0401f012,
9652 0x820c0580, 0x0000000b, 0x0402000f, 0x42000800,
9653 0x00000007, 0x0201f800, 0x00104571, 0x0401f00a,
9654 0x820c0580, 0x00000005, 0x04000864, 0x0401f006,
9655 0x820c0580, 0x00000009, 0x04000889, 0x0401f002,
9656 0x0401f893, 0x4a026403, 0x00000052, 0x59a81016,
9657 0x592c040b, 0x8c000500, 0x04000003, 0x42001000,
9658 0x00000008, 0x592c040b, 0x8c000516, 0x04000003,
9659 0x82081400, 0x00000018, 0x592c000c, 0x497a580d,
9660 0x497a580e, 0x80080c80, 0x04000009, 0x04001005,
9661 0x4a025a06, 0x00000007, 0x40001000, 0x0401f006,
9662 0x4a025a06, 0x00000015, 0x0401f003, 0x4a025a06,
9663 0x00000000, 0x480a580c, 0x82081400, 0x00000003,
9664 0x80081104, 0x0201f800, 0x00107ab5, 0x04000010,
9665 0x592c1001, 0x480a600b, 0x58080800, 0x82080400,
9666 0x00000002, 0x592c1011, 0x592c1812, 0x42003000,
9667 0x00000000, 0x42002000, 0x00101200, 0x0201f800,
9668 0x00107c32, 0x04000002, 0x1c01f000, 0x4a025a06,
9669 0x0000002c, 0x497a580c, 0x0201f800, 0x000202da,
9670 0x0201f000, 0x0002077d, 0x83380580, 0x00000015,
9671 0x0402000a, 0x59a80005, 0x8c000514, 0x0402000b,
9672 0x0201f800, 0x0010462a, 0x42000800, 0x00000004,
9673 0x0201f000, 0x00104571, 0x42000800, 0x00000007,
9674 0x0201f000, 0x00104571, 0x0201f800, 0x0010513b,
9675 0x42001000, 0x00000010, 0x04020009, 0x59340002,
9676 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
9677 0x040007ec, 0x42001000, 0x00000008, 0x0201f800,
9678 0x00104c6d, 0x040007e7, 0x592c040b, 0x84000540,
9679 0x48025c0b, 0x0401f7e9, 0x83380580, 0x00000015,
9680 0x0402000f, 0x59a80005, 0x8c000514, 0x04020010,
9681 0x0201f800, 0x0010468d, 0x4d3c0000, 0x417a7800,
9682 0x0201f800, 0x00104567, 0x5c027800, 0x42000800,
9683 0x00000006, 0x0201f000, 0x00104571, 0x42000800,
9684 0x00000004, 0x0201f000, 0x00104571, 0x0201f800,
9685 0x0010513b, 0x42001000, 0x00000010, 0x04020009,
9686 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
9687 0x00ff0000, 0x040007e7, 0x42001000, 0x00000008,
9688 0x0201f800, 0x00104c6d, 0x040007e2, 0x592c040b,
9689 0x84000540, 0x48025c0b, 0x0401f7e9, 0x42000800,
9690 0x00000004, 0x0201f000, 0x00104571, 0x83380580,
9691 0x00000015, 0x04020005, 0x0201f800, 0x0010a2c8,
9692 0x02000800, 0x001048c1, 0x1c01f000, 0x83380580,
9693 0x00000015, 0x0402001d, 0x4c580000, 0x83cc1400,
9694 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
9695 0x00000006, 0x0201f800, 0x0010855a, 0x04020012,
9696 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
9697 0x83341c00, 0x00000008, 0x0201f800, 0x0010855a,
9698 0x04020009, 0x59342200, 0x59cc1007, 0x800811c0,
9699 0x04000003, 0x480a6801, 0x84102542, 0x8410251a,
9700 0x48126a00, 0x5c00b000, 0x1c01f000, 0x42000000,
9701 0x0010b87b, 0x0201f800, 0x0010aa47, 0x0201f800,
9702 0x00106c55, 0x59300203, 0x4933c857, 0x4803c857,
9703 0x82000c80, 0x0000000e, 0x02021800, 0x001005d8,
9704 0x0c01f803, 0x0201f000, 0x00106c4b, 0x0010970b,
9705 0x0010971a, 0x0010970c, 0x00109709, 0x00109709,
9706 0x00109709, 0x00109709, 0x00109709, 0x00109709,
9707 0x00109709, 0x00109709, 0x00109709, 0x00109709,
9708 0x00109709, 0x0201f800, 0x001005d8, 0x1c01f000,
9709 0x59300403, 0x82000580, 0x00000052, 0x02000000,
9710 0x00108d85, 0x0201f800, 0x00104c19, 0x59325808,
9711 0x4a025a06, 0x00000006, 0x0201f800, 0x000202da,
9712 0x0201f000, 0x00107911, 0x59301804, 0x840c0520,
9713 0x48026004, 0x598c000d, 0x81300580, 0x04020010,
9714 0x8c0c1d20, 0x04020010, 0x42001000, 0x0010b7f6,
9715 0x50081000, 0x58080002, 0x82000580, 0x00000100,
9716 0x0400000e, 0x5808000c, 0x81300580, 0x02020800,
9717 0x001005d8, 0x4978100c, 0x0401f003, 0x8c0c1d20,
9718 0x040207dc, 0x0201f800, 0x001068d3, 0x040007d9,
9719 0x0201f800, 0x001005d8, 0x0201f800, 0x00106e8e,
9720 0x040007f9, 0x59300203, 0x82000c80, 0x0000000e,
9721 0x02021800, 0x001005d8, 0x0c01f7bd, 0x4933c857,
9722 0x4c500000, 0x4c540000, 0x4c580000, 0x592c0c07,
9723 0x4806580a, 0x59cc0809, 0x48065807, 0x59cc0a08,
9724 0x4806580b, 0x59c80817, 0x82040500, 0x000003ff,
9725 0x800010c4, 0x8c040d14, 0x04000005, 0x59cc0002,
9726 0x82000500, 0x00000003, 0x80081480, 0x82080480,
9727 0x000000f1, 0x02021800, 0x001005d8, 0x480a621a,
9728 0x412c0800, 0x0201f800, 0x001007d3, 0x02000800,
9729 0x001005d8, 0x492c0809, 0x58040408, 0x84000552,
9730 0x84000540, 0x48000c08, 0x82081400, 0x00000003,
9731 0x80081104, 0x83cca400, 0x00000006, 0x832cac00,
9732 0x00000004, 0x42000800, 0x00000010, 0x82080480,
9733 0x00000010, 0x04021003, 0x40080800, 0x80000580,
9734 0x4004b000, 0x4c000000, 0x0201f800, 0x0010ab28,
9735 0x5c000000, 0x800001c0, 0x0400000d, 0x412c1000,
9736 0x4c000000, 0x0201f800, 0x001007d3, 0x02000800,
9737 0x001005d8, 0x492c1001, 0x832cac00, 0x00000004,
9738 0x5c000000, 0x40001000, 0x0401f7e9, 0x5c00b000,
9739 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x4933c857,
9740 0x4d2c0000, 0x4c380000, 0x59325808, 0x5930021a,
9741 0x48025a08, 0x59301011, 0x800811c0, 0x04020008,
9742 0x4a025a06, 0x00000000, 0x592c000b, 0x82000500,
9743 0x00000c00, 0x0400000b, 0x0401f00b, 0x8c08153e,
9744 0x04000006, 0x4a025a06, 0x00000007, 0x80081080,
9745 0x80081000, 0x0401f003, 0x4a025a06, 0x00000015,
9746 0x480a5807, 0x42000000, 0x0010bed9, 0x50007000,
9747 0x5838000b, 0x80000540, 0x04020008, 0x4930700c,
9748 0x4930700b, 0x58380002, 0x82000580, 0x00000000,
9749 0x04020809, 0x0401f005, 0x82001400, 0x00000000,
9750 0x45301000, 0x4930700b, 0x5c007000, 0x5c025800,
9751 0x1c01f000, 0x4933c857, 0x592c0009, 0x40001000,
9752 0x4800700a, 0x82080400, 0x00000004, 0x48007003,
9753 0x592c000d, 0x592c100e, 0x48007007, 0x48087008,
9754 0x592c000a, 0x592c1208, 0x80080c80, 0x04001002,
9755 0x40001000, 0x82081400, 0x00000003, 0x80081104,
9756 0x82080480, 0x00000010, 0x04021003, 0x80000580,
9757 0x0401f003, 0x42001000, 0x00000010, 0x4800700d,
9758 0x48087004, 0x800810c4, 0x48087005, 0x40381000,
9759 0x0201f800, 0x00100858, 0x1c01f000, 0x4d2c0000,
9760 0x0201f800, 0x001007d3, 0x02000800, 0x001005d8,
9761 0x42000800, 0x0010bed9, 0x452c0800, 0x497a580b,
9762 0x497a580c, 0x497a580d, 0x4a025809, 0x001097ea,
9763 0x4a025802, 0x00000100, 0x4a025801, 0x00000000,
9764 0x5c025800, 0x1c01f000, 0x4833c857, 0x4d300000,
9765 0x4d2c0000, 0x4c5c0000, 0x4030b800, 0x585c000a,
9766 0x80025d40, 0x04020004, 0x585c000c, 0x4c000000,
9767 0x0401f044, 0x585c0002, 0x82000580, 0x00000100,
9768 0x04020022, 0x592c0801, 0x4c040000, 0x0201f800,
9769 0x001007f4, 0x5c000800, 0x800409c0, 0x0400001c,
9770 0x4804b80a, 0x585c100d, 0x800811c0, 0x04020005,
9771 0x40065800, 0x0201f800, 0x001007fd, 0x0401f014,
9772 0x82080480, 0x00000010, 0x04021003, 0x80000580,
9773 0x0401f003, 0x42001000, 0x00000010, 0x4800b80d,
9774 0x4808b804, 0x800810c4, 0x4808b805, 0x82040400,
9775 0x00000004, 0x4800b803, 0x405c1000, 0x0201f800,
9776 0x00100858, 0x0401f025, 0x0401f828, 0x585c000c,
9777 0x80026540, 0x59300000, 0x80000d40, 0x04020002,
9778 0x4800b80b, 0x4800b80c, 0x497a6000, 0x4c000000,
9779 0x4978b80a, 0x59325808, 0x4a025a04, 0x00000103,
9780 0x59300402, 0x48025c06, 0x592c100b, 0x4c080000,
9781 0x0201f800, 0x000202c1, 0x0201f800, 0x0010912a,
9782 0x5c001000, 0x8c081518, 0x04000004, 0x0201f800,
9783 0x001091d1, 0x0401f003, 0x0201f800, 0x0002077d,
9784 0x405c7000, 0x5c000000, 0x80026540, 0x04000003,
9785 0x59325808, 0x0401ff78, 0x5c00b800, 0x5c025800,
9786 0x5c026000, 0x1c01f000, 0x483bc857, 0x5838000a,
9787 0x40025800, 0x0201f800, 0x001007fd, 0x5838000c,
9788 0x80026540, 0x59300008, 0x80025d40, 0x4a025a06,
9789 0x00000002, 0x1c01f000, 0x4803c857, 0x4d1c0000,
9790 0x497a601c, 0x41323800, 0x40026000, 0x4d3c0000,
9791 0x42027800, 0x00000005, 0x0401f83c, 0x5c027800,
9792 0x411e6000, 0x59300414, 0x84000502, 0x48026414,
9793 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857,
9794 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
9795 0x0201f800, 0x0010a942, 0x0201f800, 0x00103b25,
9796 0x04000008, 0x40602800, 0x405c3000, 0x0201f800,
9797 0x0010a446, 0x82000540, 0x00000001, 0x0401f002,
9798 0x80000580, 0x5c00c000, 0x5c00b800, 0x1c01f000,
9799 0x4803c856, 0x4d300000, 0x42026000, 0x0010d1c0,
9800 0x59a8000e, 0x81640580, 0x04000016, 0x59300c06,
9801 0x82040580, 0x00000001, 0x04000009, 0x82040580,
9802 0x00000004, 0x04000006, 0x82040580, 0x00000010,
9803 0x02000800, 0x00108cf9, 0x0401f005, 0x4807c857,
9804 0x0201f800, 0x001092d7, 0x04020808, 0x83326400,
9805 0x00000024, 0x41580000, 0x81300480, 0x040017e9,
9806 0x5c026000, 0x1c01f000, 0x4933c857, 0x59300403,
9807 0x4803c857, 0x0201f800, 0x00106c55, 0x4df00000,
9808 0x59300406, 0x4803c857, 0x82000d80, 0x00000002,
9809 0x04000018, 0x82000d80, 0x00000001, 0x04000009,
9810 0x82000d80, 0x00000004, 0x04000006, 0x4933c856,
9811 0x5c03e000, 0x02000800, 0x00106c4b, 0x0401f03c,
9812 0x59300203, 0x82000d80, 0x00000001, 0x04000018,
9813 0x82000d80, 0x00000002, 0x04000026, 0x82000d80,
9814 0x00000005, 0x04000023, 0x0201f800, 0x001005d8,
9815 0x59300203, 0x82000d80, 0x00000009, 0x0400000c,
9816 0x82000d80, 0x0000000b, 0x04000009, 0x82000d80,
9817 0x0000000a, 0x04000017, 0x82000d80, 0x0000000c,
9818 0x04000014, 0x0201f800, 0x001005d8, 0x598c000d,
9819 0x81300580, 0x04020004, 0x0201f800, 0x00106e8e,
9820 0x0402000c, 0x59300004, 0x4803c857, 0x8c000520,
9821 0x04000004, 0x84000520, 0x48026004, 0x0401f005,
9822 0x0201f800, 0x001068d3, 0x02020800, 0x001005d8,
9823 0x5c03e000, 0x02000800, 0x00106c4b, 0x59300406,
9824 0x82000d80, 0x00000002, 0x04000009, 0x0201f800,
9825 0x00104c19, 0x0201f800, 0x0010914e, 0x02000800,
9826 0x0010801c, 0x8d3e7d00, 0x04000003, 0x0201f000,
9827 0x00107911, 0x4a02621d, 0x00000001, 0x4a026403,
9828 0x00000085, 0x4a026203, 0x00000009, 0x4a026406,
9829 0x00000002, 0x42000800, 0x8000004b, 0x0201f000,
9830 0x00020721, 0x4933c857, 0x59368c03, 0x4c180000,
9831 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
9832 0x001005d8, 0x0c01f803, 0x5c003000, 0x1c01f000,
9833 0x0010990a, 0x00109dcf, 0x00109edb, 0x0010990a,
9834 0x0010990a, 0x0010990a, 0x0010990a, 0x0010990a,
9835 0x0010992d, 0x0010990a, 0x0010990a, 0x0010990a,
9836 0x0010990a, 0x0010990a, 0x0201f800, 0x001005d8,
9837 0x4933c857, 0x42028800, 0x0000ffff, 0x813669c0,
9838 0x04000002, 0x59368c03, 0x4c180000, 0x59300203,
9839 0x82003480, 0x0000000e, 0x02021800, 0x001005d8,
9840 0x0c01f803, 0x5c003000, 0x1c01f000, 0x00109929,
9841 0x0010a180, 0x00109929, 0x00109929, 0x00109929,
9842 0x00109929, 0x00109929, 0x0010a952, 0x0010a0ed,
9843 0x0010a52c, 0x0010a562, 0x0010a52c, 0x0010a562,
9844 0x00109929, 0x0201f800, 0x001005d8, 0x0201f800,
9845 0x001005d8, 0x83383480, 0x00000051, 0x02021800,
9846 0x001005d8, 0x41380000, 0x493bc857, 0x4d1c0000,
9847 0x4d400000, 0x0c01f804, 0x5c028000, 0x5c023800,
9848 0x1c01f000, 0x0010998a, 0x00109b69, 0x0010998a,
9849 0x0010998a, 0x0010998a, 0x00109b74, 0x0010998a,
9850 0x0010998a, 0x0010998a, 0x0010998a, 0x0010998a,
9851 0x0010998a, 0x0010998a, 0x0010998a, 0x0010998a,
9852 0x0010998a, 0x0010998a, 0x0010998a, 0x0010998a,
9853 0x0010998a, 0x0010998a, 0x0010998a, 0x0010998a,
9854 0x001099ac, 0x001099f5, 0x00109a0c, 0x00109a62,
9855 0x00109ac6, 0x00109b04, 0x00109b34, 0x0010998a,
9856 0x0010998a, 0x00109b7c, 0x0010998a, 0x0010998a,
9857 0x00109b8a, 0x00109b93, 0x0010998a, 0x0010998a,
9858 0x0010998a, 0x0010998a, 0x0010998a, 0x00109c15,
9859 0x0010998a, 0x0010998a, 0x00109a9a, 0x0010998a,
9860 0x0010998a, 0x00109bec, 0x0010998a, 0x0010998a,
9861 0x0010998a, 0x00109c23, 0x0010998a, 0x0010998a,
9862 0x0010998a, 0x00109c6c, 0x0010998a, 0x0010998a,
9863 0x0010998a, 0x0010998a, 0x0010998a, 0x0010998a,
9864 0x00109cb9, 0x0010998a, 0x00109ce5, 0x00109cf0,
9865 0x0010998a, 0x0010998a, 0x0010998c, 0x00109cfb,
9866 0x0010998a, 0x0010998a, 0x0010998a, 0x0010999b,
9867 0x0010998a, 0x0010998a, 0x0010998a, 0x00109d02,
9868 0x00109d0a, 0x00109d28, 0x0201f800, 0x001005d8,
9869 0x4933c857, 0x0201f800, 0x0010a592, 0x040203a4,
9870 0x0201f800, 0x0010210a, 0x040203a1, 0x59cc0407,
9871 0x4802601c, 0x4a026403, 0x00000045, 0x4a026203,
9872 0x00000001, 0x0201f000, 0x0010672b, 0x4933c857,
9873 0x0201f800, 0x0010a592, 0x04020395, 0x0201f800,
9874 0x0010210a, 0x04020392, 0x0401fbce, 0x040201a0,
9875 0x59cc0007, 0x4802601c, 0x4a026403, 0x0000004a,
9876 0x4a026203, 0x00000001, 0x0201f000, 0x0010672b,
9877 0x4933c857, 0x0201f800, 0x0010210a, 0x04020009,
9878 0x0201f800, 0x001048ec, 0x04020006, 0x82000500,
9879 0x00000009, 0x82000580, 0x00000008, 0x04020008,
9880 0x4a026403, 0x00000009, 0x4a02641a, 0x00000009,
9881 0x4a02621a, 0x00000000, 0x0401f1b2, 0x0201f800,
9882 0x001048c1, 0x0201f800, 0x00104a09, 0x04000021,
9883 0x0201f800, 0x001049ed, 0x0400001e, 0x0201f800,
9884 0x0010a252, 0x04020025, 0x42028000, 0x00000029,
9885 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010203c,
9886 0x5c027800, 0x0201f800, 0x0010462a, 0x836c0580,
9887 0x00000002, 0x04020004, 0x59a8001b, 0x80000000,
9888 0x4803501b, 0x4a026403, 0x00000008, 0x42003000,
9889 0x00000003, 0x0201f800, 0x00103b25, 0x04000191,
9890 0x4a026203, 0x00000007, 0x41782800, 0x0401f180,
9891 0x0201f800, 0x0010a3da, 0x040207e1, 0x4a026403,
9892 0x00000009, 0x4a02641a, 0x0000000e, 0x4a02621a,
9893 0x00001900, 0x0401f183, 0x4a026403, 0x00000009,
9894 0x4a02641a, 0x00000003, 0x4a02621a, 0x00000f00,
9895 0x0401f17c, 0x4933c857, 0x0201f800, 0x0010210a,
9896 0x0402033b, 0x0201f800, 0x001048ec, 0x04020338,
9897 0x493a6403, 0x0201f800, 0x0010a22d, 0x04020006,
9898 0x42003000, 0x00000005, 0x4a026403, 0x00000006,
9899 0x0401f7d9, 0x4a026403, 0x00000007, 0x4a02641a,
9900 0x00000009, 0x4a02621a, 0x00000000, 0x0401f165,
9901 0x4933c857, 0x0201f800, 0x001048ec, 0x04020324,
9902 0x0201f800, 0x0010a592, 0x02000800, 0x0010210a,
9903 0x0402031f, 0x0201f800, 0x00104a09, 0x04020005,
9904 0x42027800, 0x00000001, 0x0201f800, 0x00104567,
9905 0x0201f800, 0x001049fc, 0x0402002b, 0x59cc0206,
9906 0x82003500, 0x00000003, 0x0402002e, 0x82003480,
9907 0x00000014, 0x0400102b, 0x5934300a, 0x84183516,
9908 0x82000580, 0x00000014, 0x04020002, 0x84183556,
9909 0x481a680a, 0x59cc0406, 0x82000500, 0x00000003,
9910 0x04020020, 0x0201f800, 0x0010a29f, 0x04020028,
9911 0x0201f800, 0x001049e7, 0x0402000c, 0x417a7800,
9912 0x0201f800, 0x001020a1, 0x42003000, 0x00000006,
9913 0x0201f800, 0x0010a93a, 0x42000000, 0x0010b865,
9914 0x0201f800, 0x0010aa47, 0x0201f800, 0x0010468d,
9915 0x4a026403, 0x0000000a, 0x42003000, 0x00000020,
9916 0x0401f795, 0x4a026403, 0x0000000b, 0x4a02641a,
9917 0x00000009, 0x4a02621a, 0x00001e00, 0x0401f121,
9918 0x42000000, 0x0010b860, 0x0201f800, 0x0010aa47,
9919 0x4a026403, 0x0000000b, 0x4a02641a, 0x00000007,
9920 0x4a02621a, 0x00000000, 0x0401f116, 0x4a026403,
9921 0x0000000b, 0x4a02641a, 0x00000003, 0x4a02621a,
9922 0x00000000, 0x0401f10f, 0x4933c857, 0x0201f800,
9923 0x001048ec, 0x040202ce, 0x0201f800, 0x0010a592,
9924 0x040202cb, 0x0201f800, 0x0010210a, 0x040202c8,
9925 0x59cc0206, 0x82003500, 0x00000003, 0x0402001d,
9926 0x82003480, 0x00000014, 0x0400101a, 0x59cc0406,
9927 0x82000500, 0x00000003, 0x04020016, 0x59340400,
9928 0x82000580, 0x00000707, 0x04000019, 0x417a7800,
9929 0x0201f800, 0x001020a1, 0x42003000, 0x0000000a,
9930 0x0201f800, 0x0010a93a, 0x42000000, 0x0010b862,
9931 0x0201f800, 0x0010aa47, 0x4a026403, 0x0000000c,
9932 0x41782800, 0x42003000, 0x00000021, 0x0401f752,
9933 0x4a026403, 0x0000000d, 0x4a02641a, 0x00000007,
9934 0x4a02621a, 0x00000000, 0x0401f0de, 0x4a026403,
9935 0x0000000d, 0x4a02641a, 0x00000009, 0x4a02621a,
9936 0x00001e00, 0x0401f0d7, 0x4933c857, 0x0201f800,
9937 0x001048ec, 0x04020296, 0x0201f800, 0x0010a592,
9938 0x04020293, 0x0201f800, 0x0010210a, 0x04020290,
9939 0x0401facc, 0x0402001a, 0x493a6403, 0x4c5c0000,
9940 0x0401fad2, 0x0402000e, 0x4a026403, 0x0000002e,
9941 0x405c2800, 0x42003000, 0x00000024, 0x0201f800,
9942 0x00103b25, 0x0400000c, 0x4a026203, 0x00000007,
9943 0x405c2800, 0x5c00b800, 0x0401f0ad, 0x4a026403,
9944 0x0000000d, 0x4a02641a, 0x00000007, 0x4a02621a,
9945 0x00000000, 0x5c00b800, 0x0401f0b2, 0x4a026403,
9946 0x0000000d, 0x4a02641a, 0x00000009, 0x4a02621a,
9947 0x00001e00, 0x0401f0ab, 0x4933c857, 0x0201f800,
9948 0x001048ec, 0x040206ef, 0x59a80026, 0x82000500,
9949 0x00000009, 0x82000580, 0x00000008, 0x040006e9,
9950 0x0201f800, 0x001049fc, 0x0402002d, 0x0201f800,
9951 0x0010a2a7, 0x04020007, 0x4a026403, 0x0000000e,
9952 0x41782800, 0x42003000, 0x00000052, 0x0401f702,
9953 0x4933c857, 0x42003000, 0x00000003, 0x0201f800,
9954 0x0010a942, 0x4d3c0000, 0x417a7800, 0x0201f800,
9955 0x0010203c, 0x5c027800, 0x42000000, 0x0010b864,
9956 0x0201f800, 0x0010aa47, 0x59340200, 0x84000558,
9957 0x48026a00, 0x42000800, 0x0000000b, 0x0201f800,
9958 0x00104571, 0x0201f800, 0x00103b25, 0x04000076,
9959 0x42003000, 0x00000007, 0x0401f062, 0x4933c857,
9960 0x4a026403, 0x0000000f, 0x4a02641a, 0x00000003,
9961 0x4a02621a, 0x00001e00, 0x0401f072, 0x59340400,
9962 0x82000580, 0x00000703, 0x040007f5, 0x0401f040,
9963 0x4933c857, 0x0201f800, 0x001048ec, 0x0402022c,
9964 0x59a80026, 0x82000500, 0x00000009, 0x82000580,
9965 0x00000008, 0x04000226, 0x0201f800, 0x001049f3,
9966 0x0402002f, 0x0201f800, 0x0010a2c8, 0x02000800,
9967 0x0010a252, 0x04020007, 0x4a026403, 0x00000010,
9968 0x41782800, 0x42003000, 0x00000050, 0x0401f6c2,
9969 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010203c,
9970 0x5c027800, 0x42003000, 0x00000003, 0x0201f800,
9971 0x0010a942, 0x42000000, 0x0010b864, 0x0201f800,
9972 0x0010aa47, 0x59340200, 0x84000558, 0x48026a00,
9973 0x0401f7c5, 0x4a026403, 0x00000011, 0x4a02641a,
9974 0x00000003, 0x4a02621a, 0x00001e00, 0x0401f03d,
9975 0x4933c857, 0x0201f800, 0x0010210a, 0x02000800,
9976 0x0010a592, 0x040201fa, 0x0401fa36, 0x04020008,
9977 0x4a026403, 0x00000012, 0x0401f032, 0x59340400,
9978 0x82000580, 0x00000703, 0x040007eb, 0x4d3c0000,
9979 0x417a7800, 0x42028000, 0x00000029, 0x0201f800,
9980 0x0010203c, 0x5c027800, 0x42003000, 0x00000017,
9981 0x0201f800, 0x0010a942, 0x42000000, 0x0010b864,
9982 0x0201f800, 0x0010aa47, 0x0201f800, 0x00103b25,
9983 0x04000015, 0x42003000, 0x00000006, 0x41782800,
9984 0x42028000, 0x00000029, 0x4933c857, 0x4a026403,
9985 0x00000001, 0x4a026203, 0x00000007, 0x0201f800,
9986 0x0010a974, 0x0201f000, 0x0010a43e, 0x42028000,
9987 0x00000046, 0x0201f800, 0x0010a974, 0x0201f000,
9988 0x0010a43e, 0x4933c857, 0x4a026403, 0x00000001,
9989 0x42000800, 0x0000000b, 0x0201f800, 0x00104571,
9990 0x4a026203, 0x00000001, 0x0201f000, 0x0010672b,
9991 0x4933c857, 0x42000800, 0x00000009, 0x0201f800,
9992 0x00104571, 0x4a026403, 0x00000005, 0x0401f7f5,
9993 0x0201f800, 0x0010a592, 0x040201b5, 0x0201f800,
9994 0x0010210a, 0x040201b2, 0x0401f9ee, 0x040207c0,
9995 0x4a026403, 0x00000020, 0x4a026203, 0x00000001,
9996 0x0201f000, 0x0010672b, 0x0201f800, 0x0010210a,
9997 0x040201a7, 0x4a026403, 0x00000023, 0x4a026203,
9998 0x00000001, 0x0201f000, 0x0010672b, 0x0201f800,
9999 0x0010a592, 0x02000800, 0x0010210a, 0x0402019c,
10000 0x0401f9d8, 0x040207aa, 0x40300800, 0x59a81010,
10001 0x59cc0007, 0x82000500, 0x00ffffff, 0x80080580,
10002 0x04000019, 0x59cc1408, 0x0201f800, 0x0010902c,
10003 0x0400002d, 0x59cc0c08, 0x4d300000, 0x0201f800,
10004 0x00105dd7, 0x41323800, 0x5c026000, 0x04000026,
10005 0x591c0202, 0x82000580, 0x0000ffff, 0x04000005,
10006 0x59cc1208, 0x591c0202, 0x80080580, 0x0402001e,
10007 0x591c0406, 0x82000580, 0x00000007, 0x0402001a,
10008 0x0401f02c, 0x59cc1208, 0x82080580, 0x0000ffff,
10009 0x0400000c, 0x0201f800, 0x00109410, 0x04000012,
10010 0x59cc1408, 0x591c0202, 0x80080580, 0x0402000e,
10011 0x591c0009, 0x81340580, 0x04000016, 0x0401f00a,
10012 0x59cc1408, 0x417a7800, 0x0201f800, 0x0010a405,
10013 0x04020010, 0x59cc1208, 0x82080580, 0x0000ffff,
10014 0x04000019, 0x4a026403, 0x00000026, 0x4a02621a,
10015 0x00001700, 0x59cc1204, 0x82081580, 0x0000ffff,
10016 0x04020798, 0x4a026403, 0x00000025, 0x0401f795,
10017 0x591c0406, 0x82000580, 0x00000007, 0x040207f2,
10018 0x591c0403, 0x82000580, 0x00000024, 0x04020006,
10019 0x4d300000, 0x411e6000, 0x0201f800, 0x0002077d,
10020 0x5c026000, 0x4a026403, 0x00000025, 0x0401f785,
10021 0x4933c857, 0x4d3c0000, 0x42027800, 0x00000001,
10022 0x0201f800, 0x00104567, 0x5c027800, 0x4c580000,
10023 0x4200b000, 0x00000002, 0x83a81c00, 0x00000002,
10024 0x83cc1400, 0x0000000b, 0x0201f800, 0x0010855a,
10025 0x5c00b000, 0x04000004, 0x4a026403, 0x00000031,
10026 0x0401f770, 0x0201f800, 0x00107911, 0x0201f800,
10027 0x0010513b, 0x0402000f, 0x0201f800, 0x00105149,
10028 0x04020008, 0x4a035033, 0x00000001, 0x4202d800,
10029 0x00000001, 0x0201f800, 0x001050a2, 0x0401f005,
10030 0x42000000, 0x00000001, 0x0201f800, 0x00105113,
10031 0x1c01f000, 0x0201f800, 0x0010210a, 0x0402011c,
10032 0x0401f958, 0x0402072a, 0x493a6403, 0x0401f996,
10033 0x04020004, 0x4a026403, 0x0000002b, 0x0401f751,
10034 0x4a026403, 0x0000002c, 0x0401f74e, 0x4933c857,
10035 0x0201f800, 0x0010210a, 0x0402010d, 0x0201f800,
10036 0x001049e7, 0x04020740, 0x0201f800, 0x001048d9,
10037 0x0400003c, 0x59cc0408, 0x48026419, 0x59cc0208,
10038 0x48026219, 0x59cc0807, 0x59340002, 0x82000500,
10039 0x00ffffff, 0x80040580, 0x04000012, 0x59a80010,
10040 0x80040580, 0x04020021, 0x59cc1408, 0x0201f800,
10041 0x00109410, 0x04000023, 0x0201f800, 0x0010a4ca,
10042 0x04000020, 0x0201f800, 0x0010a921, 0x0400001d,
10043 0x491e601e, 0x4a026403, 0x00000036, 0x0401f0e6,
10044 0x59cc1208, 0x82080580, 0x0000ffff, 0x04000009,
10045 0x0201f800, 0x00109410, 0x04000012, 0x591c0202,
10046 0x59cc0c08, 0x80040580, 0x0402000e, 0x0401f7eb,
10047 0x59cc1408, 0x41327800, 0x0201f800, 0x0010a405,
10048 0x04000008, 0x0401f7e5, 0x4803c856, 0x4a02641a,
10049 0x00000009, 0x4a02621a, 0x00001500, 0x0401f006,
10050 0x4803c856, 0x4a02641a, 0x00000003, 0x4a02621a,
10051 0x00001700, 0x4a026403, 0x00000037, 0x0401f0c6,
10052 0x4803c856, 0x4a026403, 0x00000012, 0x0401f0c2,
10053 0x4933c857, 0x0201f800, 0x0010210a, 0x040200c4,
10054 0x0201f800, 0x001049e7, 0x040206f7, 0x0201f800,
10055 0x001048d9, 0x0400003e, 0x59cc0407, 0x48026419,
10056 0x59cc1207, 0x480a6219, 0x82080580, 0x0000ffff,
10057 0x04000005, 0x0201f800, 0x00109410, 0x0400002c,
10058 0x0401f006, 0x59cc1407, 0x41327800, 0x0201f800,
10059 0x0010a405, 0x04000026, 0x59cc0c07, 0x591c0202,
10060 0x80040580, 0x04020022, 0x4d300000, 0x411e6000,
10061 0x0201f800, 0x00108bd7, 0x5c026000, 0x59cc0c09,
10062 0x82040d00, 0x0000ff00, 0x840409c0, 0x0201f800,
10063 0x0010a921, 0x04000016, 0x82040580, 0x00000001,
10064 0x0400000a, 0x82040580, 0x00000005, 0x04000004,
10065 0x82040580, 0x00000007, 0x04020007, 0x591c0008,
10066 0x80000540, 0x04000004, 0x59cc2808, 0x0201f000,
10067 0x0010a4de, 0x4803c856, 0x4a02641a, 0x00000009,
10068 0x4a02621a, 0x00002a00, 0x0401f006, 0x4803c856,
10069 0x4a02641a, 0x00000003, 0x4a02621a, 0x00000300,
10070 0x4a026403, 0x0000003b, 0x0401f07b, 0x4803c856,
10071 0x4a02641a, 0x0000000b, 0x4a02621a, 0x00000000,
10072 0x0401f7f8, 0x4c080000, 0x0201f800, 0x001048ec,
10073 0x04000026, 0x0201f800, 0x001048c1, 0x0201f800,
10074 0x0010a601, 0x0402001e, 0x59a80026, 0x82000540,
10075 0x00000003, 0x48035026, 0x59a8001d, 0x800000d0,
10076 0x59a80810, 0x82040d00, 0x000000ff, 0x80041540,
10077 0x480b5010, 0x42000800, 0x00000003, 0x0201f800,
10078 0x00106c78, 0x497b5028, 0x0201f800, 0x00103b25,
10079 0x04000003, 0x4a032804, 0x000007d0, 0x8c00050a,
10080 0x0402000a, 0x0201f800, 0x0002077d, 0x0201f800,
10081 0x00101e45, 0x5c001000, 0x1c01f000, 0x0201f800,
10082 0x0010a623, 0x0401f7fc, 0x5c001000, 0x0201f000,
10083 0x0002077d, 0x0201f800, 0x0010210a, 0x0402004c,
10084 0x0201f800, 0x0010a628, 0x4a026403, 0x00000047,
10085 0x4a026203, 0x00000001, 0x0201f000, 0x0010672b,
10086 0x0201f800, 0x0010210a, 0x04020041, 0x0201f800,
10087 0x0010a628, 0x4a026403, 0x00000047, 0x4a026203,
10088 0x00000001, 0x0201f000, 0x0010672b, 0x0201f800,
10089 0x0010210a, 0x04020036, 0x0201f800, 0x0010a628,
10090 0x0201f000, 0x0002077d, 0x0401f834, 0x04000030,
10091 0x4a026403, 0x0000004e, 0x4a026203, 0x00000001,
10092 0x0201f000, 0x0010672b, 0x4a026403, 0x0000004f,
10093 0x497a601c, 0x59cc0a06, 0x82040d00, 0x000000ff,
10094 0x800409c0, 0x0400065f, 0x82040580, 0x00000001,
10095 0x04020005, 0x59cc0808, 0x59a80005, 0x80040580,
10096 0x04000658, 0x82040580, 0x00000002, 0x0402000a,
10097 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
10098 0x83341c00, 0x00000006, 0x0201f800, 0x0010855a,
10099 0x0400064c, 0x4a02601c, 0x00000001, 0x0401f649,
10100 0x4a026403, 0x00000050, 0x59cc0207, 0x4802601c,
10101 0x0401f644, 0x4a026203, 0x00000001, 0x42000800,
10102 0x80000040, 0x0201f000, 0x00020721, 0x4803c857,
10103 0x0201f000, 0x0002077d, 0x4d2c0000, 0x4c500000,
10104 0x4c580000, 0x4c540000, 0x59a80016, 0x82000c80,
10105 0x00000829, 0x04021029, 0x0201f800, 0x001007d3,
10106 0x04000026, 0x492e6008, 0x59a80016, 0x80000104,
10107 0x48025802, 0x83cca400, 0x00000006, 0x82000c80,
10108 0x0000000b, 0x04001013, 0x4a025811, 0x0000000b,
10109 0x4200b000, 0x0000000b, 0x832c0400, 0x00000005,
10110 0x4000a800, 0x0201f800, 0x0010ab17, 0x412c7000,
10111 0x0201f800, 0x001007d3, 0x04000010, 0x492c7001,
10112 0x40040000, 0x800409c0, 0x04000009, 0x0401f7ec,
10113 0x48025811, 0x4000b000, 0x832c0400, 0x00000005,
10114 0x4000a800, 0x0201f800, 0x0010ab17, 0x82000540,
10115 0x00000001, 0x0401f006, 0x497b5016, 0x59325808,
10116 0x0201f800, 0x001007fd, 0x80000580, 0x5c00a800,
10117 0x5c00b000, 0x5c00a000, 0x5c025800, 0x1c01f000,
10118 0x4d340000, 0x59326809, 0x59343400, 0x4933c857,
10119 0x4937c857, 0x481bc857, 0x0201f800, 0x001049f3,
10120 0x5c026800, 0x1c01f000, 0x4933c857, 0x4c5c0000,
10121 0x4d3c0000, 0x0401f840, 0x0402002c, 0x59cc0207,
10122 0x82000d00, 0x0000ff00, 0x900411c0, 0x59cc000a,
10123 0x82000500, 0x00ffffff, 0x80081540, 0x480a601c,
10124 0x8c040d18, 0x0400000e, 0x42003000, 0x00000008,
10125 0x0201f800, 0x0010a932, 0x42000000, 0x0010b863,
10126 0x0201f800, 0x0010aa47, 0x4200b800, 0x00000002,
10127 0x42027800, 0x00000001, 0x0401f011, 0x4178b800,
10128 0x8c040d1a, 0x04000011, 0x59cc000a, 0x0201f800,
10129 0x00105c9a, 0x0402000d, 0x42003000, 0x00000009,
10130 0x0201f800, 0x0010a93a, 0x42000000, 0x0010b863,
10131 0x0201f800, 0x0010aa47, 0x417a7800, 0x0201f800,
10132 0x001020a1, 0x0401f004, 0x82000540, 0x00000001,
10133 0x0401f002, 0x80000580, 0x5c027800, 0x5c00b800,
10134 0x1c01f000, 0x4933c857, 0x59cc0206, 0x82000480,
10135 0x00000010, 0x04021006, 0x4a02621a, 0x00000000,
10136 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
10137 0x1c01f000, 0x4933c857, 0x4a02621a, 0x00000000,
10138 0x59cc0407, 0x82000500, 0x0000ff00, 0x82000580,
10139 0x00000800, 0x04020009, 0x59cc0006, 0x82000500,
10140 0x00ff0000, 0x82000d80, 0x00140000, 0x04000003,
10141 0x82000d80, 0x00100000, 0x1c01f000, 0x4933c857,
10142 0x59300403, 0x82003480, 0x00000051, 0x02021800,
10143 0x001005d8, 0x83383580, 0x00000013, 0x04020003,
10144 0x4803c857, 0x0c01f012, 0x83383580, 0x00000027,
10145 0x04000005, 0x83383580, 0x00000014, 0x02020800,
10146 0x001005d8, 0x0201f800, 0x001048c1, 0x42000800,
10147 0x00000007, 0x0201f800, 0x00104571, 0x0201f800,
10148 0x00106bbf, 0x0201f000, 0x00107911, 0x00109e3c,
10149 0x00109e45, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10150 0x00109e45, 0x00109e50, 0x00109ecd, 0x00109e95,
10151 0x00109ecd, 0x00109ead, 0x00109ecd, 0x00109ebe,
10152 0x00109ecd, 0x00109ec6, 0x00109ecd, 0x00109ec6,
10153 0x00109ecd, 0x00109ecd, 0x00109e3c, 0x00109e3c,
10154 0x00109e3c, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10155 0x00109e3c, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10156 0x00109e3c, 0x00109e45, 0x00109e3c, 0x00109ecd,
10157 0x00109e3c, 0x00109e3c, 0x00109ecd, 0x00109e3c,
10158 0x00109eca, 0x00109ecd, 0x00109e3c, 0x00109e3c,
10159 0x00109e3c, 0x00109e3c, 0x00109ecd, 0x00109ecd,
10160 0x00109e3c, 0x00109ec3, 0x00109ecd, 0x00109e3c,
10161 0x00109e4a, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10162 0x00109e3c, 0x00109ec9, 0x00109ecd, 0x00109e3c,
10163 0x00109e3c, 0x00109ecd, 0x00109ecd, 0x00109e3c,
10164 0x00109e3c, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10165 0x00109e3c, 0x00109e3c, 0x00109e3c, 0x00109e3c,
10166 0x00109e3e, 0x00109e3c, 0x00109e3e, 0x00109e3c,
10167 0x00109e3c, 0x00109e3e, 0x00109e3c, 0x00109e3c,
10168 0x00109e3c, 0x00109e3e, 0x00109e3e, 0x00109e3e,
10169 0x0201f800, 0x001005d8, 0x4d2c0000, 0x59325808,
10170 0x0201f800, 0x001007fd, 0x5c025800, 0x0201f000,
10171 0x0002077d, 0x59a80037, 0x48026206, 0x4a026203,
10172 0x00000002, 0x1c01f000, 0x4d3c0000, 0x417a7800,
10173 0x0201f800, 0x00104567, 0x5c027800, 0x0401f07e,
10174 0x42000800, 0x00000007, 0x0201f800, 0x00104571,
10175 0x59a80026, 0x8c000508, 0x04000012, 0x59326809,
10176 0x4c580000, 0x4200b000, 0x00000002, 0x83a81c00,
10177 0x00000002, 0x83341400, 0x00000006, 0x0201f800,
10178 0x0010855a, 0x80000540, 0x5c00b000, 0x0402006a,
10179 0x59340200, 0x8400051a, 0x48026a00, 0x0401f01b,
10180 0x599c0017, 0x8c00050a, 0x04020063, 0x4d3c0000,
10181 0x417a7800, 0x0201f800, 0x00104567, 0x5c027800,
10182 0x42000800, 0x00000007, 0x0201f800, 0x00104571,
10183 0x59340212, 0x82000500, 0x0000ff00, 0x04000056,
10184 0x599c0019, 0x8c00050e, 0x04020053, 0x416c0000,
10185 0x82000580, 0x00000002, 0x04020004, 0x59a8001b,
10186 0x80000000, 0x4803501b, 0x42000800, 0x00000003,
10187 0x0201f800, 0x00104571, 0x4a026406, 0x00000001,
10188 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
10189 0x0201f800, 0x0010672b, 0x4ce80000, 0x4201d000,
10190 0x00000001, 0x0201f800, 0x00105fae, 0x5c01d000,
10191 0x1c01f000, 0x0201f800, 0x001049f3, 0x04000036,
10192 0x0201f800, 0x0010645e, 0x42000800, 0x00000004,
10193 0x0201f800, 0x00104571, 0x0201f800, 0x0010a96a,
10194 0x0402002d, 0x42000800, 0x00000005, 0x0201f800,
10195 0x00104571, 0x4a026406, 0x00000001, 0x4a026203,
10196 0x00000001, 0x4a026403, 0x00000003, 0x0201f000,
10197 0x0010672b, 0x42000800, 0x00000006, 0x0401f820,
10198 0x59303009, 0x599c0017, 0x8c00050a, 0x0402001a,
10199 0x59a80026, 0x8c000508, 0x04000017, 0x0201f800,
10200 0x001049e7, 0x04000014, 0x59a8001b, 0x80000000,
10201 0x4803501b, 0x0401f7c5, 0x42000800, 0x00000004,
10202 0x0201f800, 0x00104571, 0x0401f792, 0x42000800,
10203 0x00000004, 0x0401f006, 0x0201f800, 0x001048c1,
10204 0x0401f005, 0x0401f004, 0x0401f003, 0x0201f800,
10205 0x00104571, 0x0201f000, 0x0002077d, 0x4933c857,
10206 0x4807c857, 0x0201f800, 0x00104571, 0x4d3c0000,
10207 0x417a7800, 0x0201f800, 0x00104567, 0x5c027800,
10208 0x0201f800, 0x00102074, 0x1c01f000, 0x4933c857,
10209 0x59340400, 0x80000110, 0x82003480, 0x0000000c,
10210 0x02021800, 0x001005d8, 0x83383580, 0x00000015,
10211 0x04020002, 0x0c01f006, 0x83383580, 0x00000016,
10212 0x02020800, 0x001005d8, 0x0c01f00d, 0x001080b8,
10213 0x001080b8, 0x001080b8, 0x001080b8, 0x001080b8,
10214 0x001080b8, 0x00109f30, 0x00109f03, 0x001080b8,
10215 0x001080b8, 0x001080b8, 0x001080b8, 0x001080b8,
10216 0x001080b8, 0x001080b8, 0x001080b8, 0x001080b8,
10217 0x001080b8, 0x00109f30, 0x00109f37, 0x001080b8,
10218 0x001080b8, 0x001080b8, 0x001080b8, 0x4933c857,
10219 0x599c0017, 0x8c00050a, 0x0402001b, 0x813669c0,
10220 0x04000019, 0x59340212, 0x82000500, 0x0000ff00,
10221 0x04000015, 0x599c0019, 0x8c00050e, 0x04020012,
10222 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00104567,
10223 0x5c027800, 0x42000800, 0x00000003, 0x0201f800,
10224 0x00104571, 0x4a026406, 0x00000001, 0x4a026203,
10225 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
10226 0x0010672b, 0x59cc0001, 0x0201f800, 0x00105c9a,
10227 0x0402000b, 0x0201f800, 0x00020245, 0x02020000,
10228 0x0002077d, 0x59345002, 0x0201f800, 0x001042b4,
10229 0x482a6802, 0x0201f000, 0x0002077d, 0x1c01f000,
10230 0x4933c857, 0x59303403, 0x82183580, 0x0000001e,
10231 0x02000000, 0x0002077d, 0x1c01f000, 0x4933c857,
10232 0x0201f800, 0x001083df, 0x02020000, 0x0002077d,
10233 0x4a026203, 0x00000001, 0x4a026403, 0x00000001,
10234 0x0201f000, 0x0010672b, 0x493bc857, 0x83380580,
10235 0x00000051, 0x0402000b, 0x0201f800, 0x00106f60,
10236 0x02020000, 0x00107974, 0x59300203, 0x82000580,
10237 0x00000002, 0x0400006d, 0x0201f800, 0x001005d8,
10238 0x83380580, 0x00000027, 0x04000014, 0x83380580,
10239 0x00000048, 0x04000006, 0x83380580, 0x00000014,
10240 0x0400000e, 0x02020800, 0x001005d8, 0x0201f800,
10241 0x00106f60, 0x02020000, 0x00107974, 0x59300203,
10242 0x82000580, 0x00000004, 0x02000000, 0x0002086e,
10243 0x0201f800, 0x001005d8, 0x59300403, 0x82000c80,
10244 0x00000044, 0x02021800, 0x001005d8, 0x82000480,
10245 0x00000040, 0x02001800, 0x001005d8, 0x40027000,
10246 0x4803c857, 0x0c01f001, 0x00109f76, 0x00109f78,
10247 0x00109f78, 0x00109f93, 0x0201f800, 0x001005d8,
10248 0x0201f800, 0x00106bbf, 0x59325808, 0x812e59c0,
10249 0x04000016, 0x832c0500, 0x00ff0000, 0x04000013,
10250 0x4a026203, 0x00000002, 0x59326809, 0x59340200,
10251 0x8c00050e, 0x0402000d, 0x42028000, 0x00000004,
10252 0x0201f800, 0x0010a3ef, 0x497a6008, 0x59300206,
10253 0x80000540, 0x04020003, 0x59a80038, 0x48026206,
10254 0x4a026203, 0x00000007, 0x1c01f000, 0x0201f800,
10255 0x00106bbf, 0x0201f800, 0x00109037, 0x02000000,
10256 0x00107911, 0x59325808, 0x0201f800, 0x001007f4,
10257 0x0201f000, 0x00107911, 0x0201f800, 0x001005d8,
10258 0x59325808, 0x592c040a, 0x8c000502, 0x04000007,
10259 0x4a026203, 0x00000007, 0x42027000, 0x00000043,
10260 0x0201f000, 0x000207a1, 0x4a026203, 0x00000004,
10261 0x1c01f000, 0x0201f800, 0x0010a597, 0x02000000,
10262 0x0002086c, 0x1c01f000, 0x4a026203, 0x00000001,
10263 0x4a026403, 0x00000041, 0x42027800, 0x80002042,
10264 0x0201f000, 0x00020721, 0x83380580, 0x00000051,
10265 0x04000006, 0x83380580, 0x00000041, 0x02020800,
10266 0x001005d8, 0x1c01f000, 0x0201f800, 0x000206fd,
10267 0x0201f800, 0x0010a5df, 0x0201f000, 0x0002077d,
10268 0x83380480, 0x00000050, 0x02021800, 0x001005d8,
10269 0x83380480, 0x00000049, 0x02001800, 0x001005d8,
10270 0x0c01f001, 0x00109fda, 0x00109ffb, 0x00109fd8,
10271 0x00109fd8, 0x00109fd8, 0x00109fd8, 0x00109ffb,
10272 0x0201f800, 0x001005d8, 0x59325808, 0x592c040a,
10273 0x8c00051e, 0x0400000d, 0x82000d00, 0x000000c0,
10274 0x82040d80, 0x00000080, 0x0400000d, 0x59300804,
10275 0x8c040d18, 0x0402000a, 0x42027000, 0x00000041,
10276 0x0201f000, 0x0002088d, 0x4a026203, 0x00000007,
10277 0x497a6206, 0x0201f000, 0x000206fd, 0x59325808,
10278 0x592c0c0a, 0x8c040d1a, 0x04020005, 0x0201f800,
10279 0x000206fd, 0x0201f000, 0x0002077d, 0x0201f800,
10280 0x0010a597, 0x040007fa, 0x1c01f000, 0x0201f800,
10281 0x00106b8a, 0x59325808, 0x59326809, 0x59340200,
10282 0x8c00050e, 0x0400000e, 0x592c040a, 0x82000500,
10283 0x000000c0, 0x82000580, 0x00000080, 0x04000005,
10284 0x592c000f, 0x59301815, 0x800c1c80, 0x480e6015,
10285 0x4a026203, 0x00000002, 0x0401f00d, 0x42028000,
10286 0x00000004, 0x0401fbde, 0x59300206, 0x80000540,
10287 0x04020004, 0x59a80038, 0x800000c2, 0x48026206,
10288 0x497a6008, 0x4a026203, 0x00000007, 0x1c01f000,
10289 0x4a026203, 0x00000007, 0x497a6206, 0x0201f000,
10290 0x000206fd, 0x4a026203, 0x00000007, 0x497a6206,
10291 0x0201f000, 0x000206f8, 0x59300414, 0x8c00051c,
10292 0x02020000, 0x0002087e, 0x59325808, 0x592c200f,
10293 0x40080000, 0x80102480, 0x59300015, 0x80102400,
10294 0x48126015, 0x0201f000, 0x0002087e, 0x8c040d0e,
10295 0x0402000a, 0x4a026203, 0x00000006, 0x0401f823,
10296 0x5930001f, 0x80000540, 0x02020800, 0x00100d7c,
10297 0x0201f000, 0x000206f8, 0x4a026203, 0x00000002,
10298 0x1c01f000, 0x42000800, 0x00000001, 0x0201f800,
10299 0x00100d7c, 0x82040580, 0x00000001, 0x02000000,
10300 0x00020885, 0x0401f7d8, 0x59300414, 0x8c00051c,
10301 0x04000006, 0x0201f800, 0x00100b63, 0x02000000,
10302 0x00020877, 0x1c01f000, 0x59300011, 0x80000540,
10303 0x04020005, 0x0201f800, 0x00100b63, 0x02000000,
10304 0x00020877, 0x1c01f000, 0x492fc857, 0x480bc857,
10305 0x8c08153e, 0x04000006, 0x80081080, 0x80081000,
10306 0x42000800, 0x00000009, 0x0401f003, 0x42000800,
10307 0x00000015, 0x480a580b, 0x1c01f000, 0x83380580,
10308 0x00000013, 0x04000005, 0x83380580, 0x00000014,
10309 0x02020800, 0x001005d8, 0x59300414, 0x8c000516,
10310 0x02000800, 0x001005d8, 0x1c01f000, 0x0201f800,
10311 0x001005d8, 0x59300008, 0x80000540, 0x02020800,
10312 0x001005d8, 0x1c01f000, 0x59300414, 0x8c000516,
10313 0x02000800, 0x001005d8, 0x1c01f000, 0x4a026203,
10314 0x00000004, 0x493a6403, 0x42000800, 0x80002001,
10315 0x0201f000, 0x00020721, 0x4a026203, 0x00000003,
10316 0x493a6403, 0x0201f800, 0x000200c9, 0x59325808,
10317 0x592c040a, 0x8c00051e, 0x04000012, 0x82000500,
10318 0x000000c0, 0x82000580, 0x00000080, 0x04000011,
10319 0x59300414, 0x8c000512, 0x0402000a, 0x8c000510,
10320 0x04020008, 0x592c040c, 0x80000540, 0x04020005,
10321 0x82080d40, 0x80003065, 0x0201f000, 0x00106721,
10322 0x82080d40, 0x80002065, 0x0201f000, 0x00106721,
10323 0x82080d40, 0x80002042, 0x0201f000, 0x00106721,
10324 0x4933c857, 0x493bc857, 0x83380480, 0x00000044,
10325 0x02021800, 0x001005d8, 0x83380480, 0x00000041,
10326 0x02001800, 0x001005d8, 0x0c01f001, 0x0010a0b6,
10327 0x0010a0c6, 0x0010a0db, 0x59325808, 0x592c040a,
10328 0x8c00051e, 0x0400001d, 0x82001d00, 0x000000c0,
10329 0x820c1d80, 0x000000c0, 0x04000018, 0x4a026203,
10330 0x00000001, 0x493a6403, 0x42000800, 0x80002042,
10331 0x0201f000, 0x00020721, 0x59325808, 0x592c040a,
10332 0x8c00051e, 0x0400000d, 0x82001d00, 0x000000c0,
10333 0x820c1d80, 0x000000c0, 0x04000008, 0x4a026203,
10334 0x00000001, 0x493a6403, 0x42000800, 0x80002001,
10335 0x0201f000, 0x00020721, 0x497a6008, 0x497a6206,
10336 0x42028000, 0x00000004, 0x0401f315, 0x59325808,
10337 0x592c040a, 0x8c00051e, 0x040007f8, 0x82001d00,
10338 0x000000c0, 0x820c1d80, 0x000000c0, 0x040007f3,
10339 0x4a026203, 0x00000003, 0x493a6403, 0x0201f800,
10340 0x000200c9, 0x82080d40, 0x80002065, 0x0201f000,
10341 0x00106721, 0x4933c857, 0x493bc857, 0x83380580,
10342 0x00000085, 0x04000006, 0x83380580, 0x00000088,
10343 0x0400000a, 0x0201f800, 0x001005d8, 0x4a026203,
10344 0x00000009, 0x493a6403, 0x42000800, 0x8000004b,
10345 0x0201f000, 0x00020721, 0x4d1c0000, 0x813669c0,
10346 0x04000004, 0x0201f800, 0x0010a592, 0x04020044,
10347 0x59cc1404, 0x0401f846, 0x04000018, 0x591c0406,
10348 0x82000500, 0x0000001f, 0x82002580, 0x00000006,
10349 0x04000007, 0x82002580, 0x00000004, 0x0400002e,
10350 0x82002580, 0x00000011, 0x0402000c, 0x497a3a05,
10351 0x42002000, 0x00000054, 0x0201f800, 0x00107a4a,
10352 0x4a026203, 0x00000007, 0x493a6403, 0x0201f800,
10353 0x0010a974, 0x0401f02c, 0x0201f800, 0x00103b25,
10354 0x04000004, 0x42023800, 0xffffffff, 0x0401f7f1,
10355 0x813669c0, 0x04020009, 0x59cc0001, 0x0201f800,
10356 0x00105c9a, 0x0402001e, 0x0201f800, 0x001045a6,
10357 0x0402001b, 0x49366009, 0x4a026403, 0x00000087,
10358 0x59cc1204, 0x82081580, 0x0000ffff, 0x04020003,
10359 0x4a026403, 0x00000086, 0x4a026203, 0x00000001,
10360 0x42000800, 0x80000040, 0x0201f800, 0x00020721,
10361 0x0401f00d, 0x591c0203, 0x82000580, 0x00000007,
10362 0x040207de, 0x4d300000, 0x411e6000, 0x0201f800,
10363 0x00107911, 0x5c026000, 0x0401f7d8, 0x0201f800,
10364 0x00107911, 0x5c023800, 0x1c01f000, 0x4933c857,
10365 0x480bc857, 0x42002800, 0x0010d1c0, 0x41300000,
10366 0x80140580, 0x04000017, 0x58140203, 0x82000580,
10367 0x00000000, 0x04000013, 0x58140202, 0x80080580,
10368 0x04020010, 0x58141c06, 0x820c0580, 0x00000005,
10369 0x0400000c, 0x820c0580, 0x00000009, 0x0400001d,
10370 0x59302009, 0x58140009, 0x800001c0, 0x0400000b,
10371 0x801021c0, 0x04000003, 0x80100580, 0x04000010,
10372 0x82142c00, 0x00000024, 0x41540000, 0x80140480,
10373 0x0402100e, 0x0401f7e2, 0x5814001e, 0x801021c0,
10374 0x04000005, 0x58102002, 0x82102500, 0x00ffffff,
10375 0x0401f7f2, 0x5810201e, 0x0401f7f0, 0x40163800,
10376 0x81300540, 0x0401f002, 0x80000580, 0x1c01f000,
10377 0x58141807, 0x8c0c1d10, 0x040207ea, 0x0401f7e1,
10378 0x4933c857, 0x493bc857, 0x83380580, 0x00000013,
10379 0x0402000e, 0x59300403, 0x82000c80, 0x00000085,
10380 0x02001800, 0x001005d8, 0x82000c80, 0x00000093,
10381 0x02021800, 0x001005d8, 0x82000480, 0x00000085,
10382 0x4803c857, 0x0c01f018, 0x83380580, 0x00000027,
10383 0x04000005, 0x83380580, 0x00000014, 0x02020000,
10384 0x00107974, 0x0201f800, 0x00106bbf, 0x59325808,
10385 0x812e59c0, 0x02000000, 0x00107911, 0x4a025a06,
10386 0x00000031, 0x4a025811, 0x00000004, 0x4a025812,
10387 0x000000ff, 0x0201f800, 0x000202da, 0x0201f000,
10388 0x00107911, 0x0010a1b7, 0x0010a1be, 0x0010a1be,
10389 0x0010a1b7, 0x0010a1b7, 0x0010a1b7, 0x0010a1b7,
10390 0x0010a1b7, 0x0010a1b7, 0x0010a1b7, 0x0010a1b7,
10391 0x0010a1b7, 0x0010a1b7, 0x0010a1b9, 0x0201f800,
10392 0x001005d8, 0x59325808, 0x4a025a06, 0x00000000,
10393 0x0201f800, 0x000202da, 0x0201f000, 0x00107911,
10394 0x4933c857, 0x42000000, 0x0010b873, 0x0201f800,
10395 0x0010aa47, 0x0201f800, 0x0010a5df, 0x497a6205,
10396 0x42028000, 0x0000000b, 0x0401f807, 0x4a026406,
10397 0x00000006, 0x4a026203, 0x00000007, 0x497a6206,
10398 0x1c01f000, 0x4933c857, 0x4943c857, 0x59300406,
10399 0x82000580, 0x00000007, 0x04020002, 0x1c01f000,
10400 0x0201f800, 0x00106c55, 0x4df00000, 0x0201f800,
10401 0x00108ce5, 0x82000c80, 0x0000000e, 0x02021800,
10402 0x001005d8, 0x0c01f001, 0x0010a205, 0x0010a209,
10403 0x0010a1f0, 0x0010a217, 0x0010a22a, 0x0010a1f0,
10404 0x0010a1f0, 0x0010a1f0, 0x0010a1f0, 0x0010a1f0,
10405 0x0010a1f0, 0x0010a1f0, 0x0010a1f0, 0x0010a1f0,
10406 0x4d400000, 0x5930001f, 0x80000540, 0x04000005,
10407 0x41400800, 0x0201f800, 0x00100d7c, 0x40068000,
10408 0x4d2c0000, 0x59325808, 0x0201f800, 0x00109037,
10409 0x040209f3, 0x4c5c0000, 0x5930b809, 0x0201f800,
10410 0x00107911, 0x485e6009, 0x5c00b800, 0x5c025800,
10411 0x5c028000, 0x5c03e000, 0x02000000, 0x00106c4b,
10412 0x1c01f000, 0x598c000d, 0x81300580, 0x04020004,
10413 0x0201f800, 0x00106e8e, 0x04020016, 0x0201f800,
10414 0x001068d3, 0x040007df, 0x0201f800, 0x00106b6c,
10415 0x04000010, 0x0201f800, 0x001005d8, 0x0201f800,
10416 0x00108cd6, 0x04020004, 0x0201f800, 0x00106e62,
10417 0x04020008, 0x0201f800, 0x001067ae, 0x040007d1,
10418 0x0201f800, 0x00106b6c, 0x02020800, 0x001005d8,
10419 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
10420 0x001005d8, 0x0c01f7b9, 0x0201f800, 0x00100e99,
10421 0x0401f7c4, 0x4933c857, 0x4d440000, 0x4d340000,
10422 0x59cc0007, 0x0201f800, 0x00105c9a, 0x02000800,
10423 0x00020245, 0x0402001a, 0x59300009, 0x4c000000,
10424 0x49366009, 0x42003000, 0x0000000b, 0x0201f800,
10425 0x0010a942, 0x42000000, 0x0010b861, 0x0201f800,
10426 0x0010aa47, 0x4d3c0000, 0x4d400000, 0x42028000,
10427 0x00000029, 0x417a7800, 0x0201f800, 0x0010203c,
10428 0x5c028000, 0x5c027800, 0x5c000000, 0x48026009,
10429 0x59cc0007, 0x48026802, 0x80000580, 0x5c026800,
10430 0x5c028800, 0x1c01f000, 0x4933c857, 0x4c040000,
10431 0x59a80016, 0x82000580, 0x00000074, 0x04020040,
10432 0x59cc0a08, 0x82040480, 0x00000100, 0x04001033,
10433 0x59cc0c08, 0x82040500, 0x00008000, 0x04000035,
10434 0x59a80032, 0x80000540, 0x04020009, 0x59301009,
10435 0x58080212, 0x82000500, 0x0000ff00, 0x04000004,
10436 0x82040500, 0x00000800, 0x0400002a, 0x59cc0c09,
10437 0x80040840, 0x04001024, 0x59a80826, 0x8c040d06,
10438 0x04000004, 0x59cc0c0f, 0x8c040d1e, 0x04020012,
10439 0x59cc0a17, 0x800409c0, 0x04020012, 0x59cc0a18,
10440 0x82040480, 0x00000100, 0x04001014, 0x59cc0c18,
10441 0x800409c0, 0x0402000e, 0x59cc0c19, 0x80040840,
10442 0x04001011, 0x59cc0c1a, 0x80040840, 0x04001011,
10443 0x0401f018, 0x4a02621a, 0x00000100, 0x0401f012,
10444 0x4a02621a, 0x00000300, 0x0401f00f, 0x4a02621a,
10445 0x00000500, 0x0401f00c, 0x4a02621a, 0x00000700,
10446 0x0401f009, 0x4a02621a, 0x00000900, 0x0401f006,
10447 0x4a02621a, 0x00000f00, 0x0401f003, 0x4a02621a,
10448 0x00002d00, 0x82000540, 0x00000001, 0x0401f002,
10449 0x80000580, 0x5c000800, 0x1c01f000, 0x59cc0407,
10450 0x4803c857, 0x82000580, 0x00000800, 0x04000003,
10451 0x4a02621a, 0x00000000, 0x1c01f000, 0x4933c857,
10452 0x4c040000, 0x4c080000, 0x4c0c0000, 0x4c580000,
10453 0x59cc000c, 0x0201f800, 0x00105c9a, 0x02000800,
10454 0x00020245, 0x04020012, 0x83cc1400, 0x00000008,
10455 0x4200b000, 0x00000002, 0x83341c00, 0x00000006,
10456 0x0201f800, 0x0010855a, 0x04020009, 0x83cc1400,
10457 0x0000000a, 0x4200b000, 0x00000002, 0x83341c00,
10458 0x00000008, 0x0201f800, 0x0010855a, 0x5c00b000,
10459 0x5c001800, 0x5c001000, 0x5c000800, 0x1c01f000,
10460 0x4933c857, 0x4c000000, 0x4c040000, 0x4c080000,
10461 0x4c0c0000, 0x4c580000, 0x59cc0001, 0x0201f800,
10462 0x00105c9a, 0x02000800, 0x00020245, 0x04020014,
10463 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
10464 0x83341c00, 0x00000006, 0x0201f800, 0x0010855a,
10465 0x0402000c, 0x83cc1400, 0x0000000d, 0x4200b000,
10466 0x00000002, 0x83341c00, 0x00000008, 0x0201f800,
10467 0x0010855a, 0x04000014, 0x4933c856, 0x4933c856,
10468 0x4933c857, 0x59340009, 0x4803c857, 0x5934000e,
10469 0x4803c857, 0x59340008, 0x4803c857, 0x5934000d,
10470 0x4803c857, 0x59340007, 0x4803c857, 0x5934000c,
10471 0x4803c857, 0x59340006, 0x4803c857, 0x5934000b,
10472 0x4803c857, 0x5c00b000, 0x5c001800, 0x5c001000,
10473 0x5c000800, 0x5c000000, 0x1c01f000, 0x4933c857,
10474 0x4947c857, 0x4943c857, 0x4c600000, 0x0201f800,
10475 0x00106c55, 0x4df00000, 0x4d2c0000, 0x4d300000,
10476 0x4d340000, 0x4130c000, 0x42026000, 0x0010d1c0,
10477 0x59a8000e, 0x8060c1c0, 0x04000005, 0x82601580,
10478 0x0010bde9, 0x04000002, 0x80000040, 0x81640480,
10479 0x040210be, 0x40600000, 0x81300580, 0x040000b6,
10480 0x0401f97a, 0x040200b4, 0x59326809, 0x59300406,
10481 0x82000c80, 0x00000012, 0x02021800, 0x001005d8,
10482 0x0c01f001, 0x0010a3cd, 0x0010a338, 0x0010a351,
10483 0x0010a35c, 0x0010a335, 0x0010a34c, 0x0010a387,
10484 0x0010a3cd, 0x0010a333, 0x0010a39a, 0x0010a3ae,
10485 0x0010a333, 0x0010a333, 0x0010a333, 0x0010a333,
10486 0x0010a3cd, 0x0010a3c4, 0x0010a3bc, 0x0201f800,
10487 0x001005d8, 0x59300420, 0x8c000500, 0x04020096,
10488 0x59300403, 0x82000580, 0x00000043, 0x04000092,
10489 0x0201f800, 0x00109134, 0x04000007, 0x0201f800,
10490 0x0010914e, 0x0402008a, 0x0201f800, 0x0010801c,
10491 0x0401f087, 0x0201f800, 0x00102074, 0x0201f800,
10492 0x0010914e, 0x02000800, 0x0010801c, 0x0401f080,
10493 0x8d3e7d18, 0x04000004, 0x59300420, 0x8c000500,
10494 0x0402007d, 0x59325808, 0x0201f800, 0x00109037,
10495 0x04000077, 0x49425a06, 0x497a5c09, 0x0201f800,
10496 0x000202da, 0x0201f800, 0x0010912a, 0x0401f070,
10497 0x8d3e7d00, 0x04000007, 0x59300017, 0x81480580,
10498 0x0402006d, 0x59300018, 0x814c0580, 0x0402006a,
10499 0x59300203, 0x82000580, 0x00000004, 0x02000800,
10500 0x00100e99, 0x59325808, 0x0201f800, 0x00109037,
10501 0x0400005f, 0x4a025a04, 0x00000103, 0x59300004,
10502 0x8400055c, 0x48026004, 0x592c0408, 0x8c000512,
10503 0x04000007, 0x4d2c0000, 0x592c0009, 0x40025800,
10504 0x0201f800, 0x001007fd, 0x5c025800, 0x49425a06,
10505 0x497a5c09, 0x0401fb16, 0x0201f800, 0x0010959c,
10506 0x0201f800, 0x001091c6, 0x0201f800, 0x000202da,
10507 0x0201f800, 0x0010912a, 0x0401f045, 0x8d3e7d18,
10508 0x04000045, 0x59300203, 0x82000580, 0x00000004,
10509 0x02000800, 0x00100e99, 0x59325808, 0x0201f800,
10510 0x00109037, 0x0400003a, 0x49425a06, 0x497a5c09,
10511 0x0401faff, 0x0201f800, 0x0010959c, 0x0201f800,
10512 0x000202da, 0x0401f032, 0x0201f800, 0x001062d5,
10513 0x04000031, 0x59300203, 0x82000580, 0x00000004,
10514 0x0400002d, 0x59300203, 0x82000580, 0x00000003,
10515 0x04020029, 0x0201f800, 0x00106b8a, 0x59325808,
10516 0x0201f800, 0x00109037, 0x04000021, 0x0201f800,
10517 0x000202da, 0x0401f01e, 0x59300203, 0x82000580,
10518 0x00000004, 0x02000800, 0x00100e99, 0x59325808,
10519 0x0201f800, 0x00109037, 0x04000015, 0x49425a06,
10520 0x497a5c09, 0x0201f800, 0x000202da, 0x0401f010,
10521 0x833c0500, 0x00001800, 0x0400000f, 0x8d3e7d16,
10522 0x0402000d, 0x59325817, 0x0201f800, 0x001007fd,
10523 0x59325808, 0x0201f800, 0x00109037, 0x04000004,
10524 0x49425a06, 0x0201f800, 0x000202da, 0x0201f800,
10525 0x00107911, 0x83326400, 0x00000024, 0x41580000,
10526 0x81300480, 0x0400173b, 0x5c026800, 0x5c026000,
10527 0x5c025800, 0x5c03e000, 0x02000800, 0x00106c4b,
10528 0x5c00c000, 0x1c01f000, 0x5c000000, 0x4c000000,
10529 0x4803c857, 0x4d3c0000, 0x42027800, 0x00000001,
10530 0x0201f800, 0x00104567, 0x5c027800, 0x4c580000,
10531 0x4200b000, 0x00000002, 0x83a81c00, 0x00000002,
10532 0x83cc1400, 0x0000000b, 0x0201f800, 0x0010855a,
10533 0x5c00b000, 0x80000540, 0x1c01f000, 0x492fc857,
10534 0x4943c857, 0x59a8000c, 0x812c0480, 0x04001011,
10535 0x59a8000d, 0x812c0480, 0x0402100e, 0x592c0000,
10536 0x80005d40, 0x04000008, 0x497a5800, 0x49425a06,
10537 0x4c2c0000, 0x0201f800, 0x000202da, 0x5c025800,
10538 0x0401f7f7, 0x49425a06, 0x0201f000, 0x000202da,
10539 0x1c01f000, 0x493fc857, 0x4933c857, 0x480bc857,
10540 0x0201f800, 0x00103b25, 0x0400002e, 0x41502800,
10541 0x813e79c0, 0x04020006, 0x59a80066, 0x80000000,
10542 0x59a8086a, 0x80040580, 0x04000026, 0x41300000,
10543 0x80140580, 0x0400001a, 0x58140203, 0x82000580,
10544 0x00000000, 0x04000016, 0x58140202, 0x80080580,
10545 0x04020013, 0x58141c06, 0x820c0580, 0x00000005,
10546 0x0400000f, 0x820c0580, 0x00000009, 0x04000017,
10547 0x59300009, 0x58142009, 0x801021c0, 0x04020006,
10548 0x5814201e, 0x59301809, 0x580c0002, 0x82000500,
10549 0x00ffffff, 0x80100580, 0x04000007, 0x82142c00,
10550 0x00000024, 0x41540000, 0x80140480, 0x04021005,
10551 0x0401f7df, 0x40163800, 0x81300540, 0x0401f002,
10552 0x80000580, 0x1c01f000, 0x58141807, 0x8c0c1d10,
10553 0x040207f3, 0x0401f7e7, 0x42002000, 0x0000ffff,
10554 0x59301009, 0x800811c0, 0x04000002, 0x58082403,
10555 0x41301000, 0x0401f007, 0x41781000, 0x41442000,
10556 0x0401f004, 0x41781000, 0x42002000, 0x0000ffff,
10557 0x5c000000, 0x4c000000, 0x4803c857, 0x480bc857,
10558 0x4813c857, 0x492fc857, 0x4943c857, 0x4d2c0000,
10559 0x0201f800, 0x001007e4, 0x02000800, 0x001005d8,
10560 0x4a025a04, 0x0000010d, 0x800811c0, 0x04000017,
10561 0x83400580, 0x00000029, 0x04020010, 0x82180580,
10562 0x00000002, 0x0400000a, 0x82180580, 0x00000003,
10563 0x04000007, 0x82180580, 0x00000008, 0x04000004,
10564 0x82180580, 0x00000009, 0x04020004, 0x4a025809,
10565 0xffffffff, 0x0401f002, 0x480a5809, 0x58080202,
10566 0x48025c13, 0x0401f005, 0x4a025809, 0xffffffff,
10567 0x4a025c13, 0x0000ffff, 0x49425a08, 0x48125a06,
10568 0x82100580, 0x0000ffff, 0x0400000e, 0x4d440000,
10569 0x4d340000, 0x40128800, 0x0201f800, 0x00020245,
10570 0x02020800, 0x001005d8, 0x59340002, 0x82000500,
10571 0x00ffffff, 0x48025812, 0x5c026800, 0x5c028800,
10572 0x497a5800, 0x497a5c04, 0x83400580, 0x00000046,
10573 0x04020002, 0x48165a07, 0x481a5c08, 0x0401fbed,
10574 0x5c025800, 0x1c01f000, 0x59300809, 0x800409c0,
10575 0x04000004, 0x58040403, 0x81440580, 0x1c01f000,
10576 0x82000540, 0x00000001, 0x0401f7fd, 0x4933c857,
10577 0x4c040000, 0x59300403, 0x82000d80, 0x0000001e,
10578 0x04020016, 0x800000d0, 0x59300a16, 0x82040d00,
10579 0x000000ff, 0x80040540, 0x4803c857, 0x48026416,
10580 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
10581 0x4a026406, 0x00000005, 0x4a02621d, 0x00000004,
10582 0x59a80038, 0x48026206, 0x42000800, 0x8000004b,
10583 0x0201f800, 0x00020721, 0x5c000800, 0x1c01f000,
10584 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
10585 0x59300414, 0x4933c857, 0x4803c857, 0x8c000518,
10586 0x04000009, 0x8c000512, 0x02020000, 0x0010921e,
10587 0x0401f91b, 0x0201f800, 0x000206fd, 0x0201f800,
10588 0x0002077d, 0x1c01f000, 0x591c0406, 0x4803c857,
10589 0x82000c80, 0x00000009, 0x0402100b, 0x0c01f001,
10590 0x0010a4d9, 0x0010a4d9, 0x0010a4d9, 0x0010a4db,
10591 0x0010a4d9, 0x0010a4db, 0x0010a4db, 0x0010a4d9,
10592 0x0010a4db, 0x80000580, 0x1c01f000, 0x82000540,
10593 0x00000001, 0x1c01f000, 0x591c0406, 0x82000500,
10594 0x0000001f, 0x82000580, 0x00000006, 0x0400000e,
10595 0x4803c857, 0x4a026403, 0x0000003b, 0x4a02641a,
10596 0x00000009, 0x4a02621a, 0x00002a00, 0x4a026203,
10597 0x00000001, 0x42000800, 0x80000040, 0x0201f000,
10598 0x00020721, 0x4803c856, 0x4c040000, 0x4c140000,
10599 0x4d300000, 0x411e6000, 0x0401f8e9, 0x497a6205,
10600 0x59300414, 0x4803c857, 0x82000500, 0xffffadff,
10601 0x48026414, 0x497a6405, 0x5c026000, 0x0201f800,
10602 0x001007e4, 0x02000800, 0x001005d8, 0x5c002800,
10603 0x5c000800, 0x4a025a04, 0x0000010d, 0x497a5800,
10604 0x497a5c04, 0x4a025a08, 0x00000045, 0x491e5809,
10605 0x59300402, 0x48025c07, 0x59300419, 0x48025c0b,
10606 0x591c0414, 0x84000556, 0x48023c14, 0x591c1809,
10607 0x580c0403, 0x48025a06, 0x4816580a, 0x48065a0b,
10608 0x0401f99d, 0x4d400000, 0x42028000, 0x00000045,
10609 0x591c0202, 0x4c000000, 0x4d300000, 0x411e6000,
10610 0x0401fcb1, 0x5c026000, 0x5c000000, 0x48023a02,
10611 0x5c028000, 0x4a023c06, 0x00000006, 0x4a023a03,
10612 0x00000007, 0x497a3a06, 0x497a3a05, 0x1c01f000,
10613 0x4933c857, 0x83380580, 0x00000013, 0x0402000b,
10614 0x59300403, 0x4803c857, 0x82000d80, 0x00000085,
10615 0x0400002b, 0x82000d80, 0x0000008b, 0x04000028,
10616 0x0201f800, 0x001005d8, 0x83380580, 0x00000027,
10617 0x0402000c, 0x0201f800, 0x00106bbf, 0x4d2c0000,
10618 0x4d400000, 0x59325808, 0x42028000, 0x00000004,
10619 0x0401feab, 0x5c028000, 0x5c025800, 0x1c01f000,
10620 0x83380580, 0x00000014, 0x040007f3, 0x83380580,
10621 0x00000089, 0x04000005, 0x83380580, 0x0000008a,
10622 0x02020000, 0x00107974, 0x0201f800, 0x00106f60,
10623 0x02020000, 0x00107974, 0x59300a03, 0x82040580,
10624 0x0000000a, 0x04000009, 0x82040580, 0x0000000c,
10625 0x04000006, 0x0201f800, 0x001005d8, 0x4a026203,
10626 0x0000000a, 0x1c01f000, 0x83380480, 0x00000093,
10627 0x0402100c, 0x83380480, 0x00000085, 0x04001009,
10628 0x83380580, 0x00000089, 0x0400000a, 0x83380580,
10629 0x0000008a, 0x04000022, 0x0201f800, 0x001005d8,
10630 0x493bc857, 0x4933c857, 0x0201f000, 0x00107974,
10631 0x4933c857, 0x4c340000, 0x41306800, 0x0201f800,
10632 0x0002075a, 0x04000011, 0x4a026203, 0x00000001,
10633 0x4a026403, 0x0000001e, 0x59cc0c07, 0x48066419,
10634 0x59cc0a07, 0x48066219, 0x58340809, 0x48066009,
10635 0x4a026406, 0x00000004, 0x42000800, 0x80000040,
10636 0x0201f800, 0x00020721, 0x40366000, 0x0201f800,
10637 0x0002077d, 0x5c006800, 0x1c01f000, 0x4933c857,
10638 0x0201f000, 0x0002077d, 0x4933c857, 0x59300809,
10639 0x58040200, 0x8c00051a, 0x1c01f000, 0x0201f800,
10640 0x001048df, 0x0400001e, 0x4a026203, 0x00000002,
10641 0x59300414, 0x84000558, 0x48026414, 0x8c000512,
10642 0x04000004, 0x59a80039, 0x48026205, 0x0401f007,
10643 0x59a80839, 0x59a80037, 0x80040400, 0x82000400,
10644 0x0000000a, 0x48026205, 0x59300009, 0x82000c00,
10645 0x00000011, 0x50040000, 0x80000540, 0x04000004,
10646 0x82000c00, 0x00000000, 0x0401f7fb, 0x45300800,
10647 0x497a6000, 0x82000540, 0x00000001, 0x1c01f000,
10648 0x82100500, 0xfffffeef, 0x04020020, 0x4d2c0000,
10649 0x4937c857, 0x59340811, 0x83341400, 0x00000011,
10650 0x800409c0, 0x0400000e, 0x40040000, 0x81300580,
10651 0x04000005, 0x58040800, 0x82041400, 0x00000000,
10652 0x0401f7f8, 0x59300800, 0x497a6000, 0x44041000,
10653 0x0201f800, 0x000206fd, 0x0401f002, 0x4933c857,
10654 0x592c0000, 0x80000540, 0x02020800, 0x001005d8,
10655 0x5c025800, 0x492e6008, 0x0201f800, 0x000206fd,
10656 0x0201f000, 0x0002077d, 0x492fc857, 0x4a025a06,
10657 0x00000006, 0x0201f000, 0x000202da, 0x4c340000,
10658 0x59300009, 0x800001c0, 0x04000010, 0x82006c00,
10659 0x00000011, 0x50340000, 0x80000540, 0x04000009,
10660 0x81300580, 0x04000005, 0x50340000, 0x82006c00,
10661 0x00000000, 0x0401f7f8, 0x59300000, 0x44006800,
10662 0x5c006800, 0x1c01f000, 0x59300c06, 0x82040580,
10663 0x00000005, 0x040007fb, 0x82040580, 0x00000011,
10664 0x040007f8, 0x82040580, 0x00000006, 0x040007f5,
10665 0x82040580, 0x00000001, 0x040007f2, 0x0201f800,
10666 0x001005d8, 0x4933c857, 0x4c080000, 0x4c0c0000,
10667 0x4c580000, 0x59a8101d, 0x59cc1807, 0x820c1d00,
10668 0x00ffffff, 0x800c0110, 0x80083580, 0x04020014,
10669 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
10670 0x59300009, 0x82001c00, 0x00000006, 0x0201f800,
10671 0x0010855a, 0x0402000a, 0x83cc1400, 0x0000000a,
10672 0x4200b000, 0x00000002, 0x59300009, 0x82001c00,
10673 0x00000008, 0x0201f800, 0x0010855a, 0x5c00b000,
10674 0x5c001800, 0x5c001000, 0x1c01f000, 0x4933c856,
10675 0x0201f800, 0x0010421b, 0x0201f000, 0x00101e45,
10676 0x493bc857, 0x4d2c0000, 0x0201f800, 0x001007e4,
10677 0x02000800, 0x001005d8, 0x832cac00, 0x00000005,
10678 0x4c580000, 0x4c540000, 0x4200b000, 0x00000006,
10679 0x4578a800, 0x8054a800, 0x8058b040, 0x040207fd,
10680 0x83380580, 0x00000046, 0x04020004, 0x4a025a04,
10681 0x00000144, 0x0401f008, 0x4a025a04, 0x00000146,
10682 0x83380580, 0x00000041, 0x04000003, 0x4a025a06,
10683 0x00000001, 0x59cc0007, 0x82000500, 0xff000000,
10684 0x80000110, 0x59cc1008, 0x82081500, 0xff000000,
10685 0x80081540, 0x480a580a, 0x83380580, 0x00000046,
10686 0x04020006, 0x59cc0007, 0x82000500, 0x00ffffff,
10687 0x4802580b, 0x0401f005, 0x59cc0008, 0x82000500,
10688 0x00ffffff, 0x4802580b, 0x83380580, 0x00000046,
10689 0x04020004, 0x83cc1400, 0x00000009, 0x0401f003,
10690 0x83cc1400, 0x0000000d, 0x50080000, 0x9c0001c0,
10691 0x4802580c, 0x80081000, 0x50080000, 0x9c0001c0,
10692 0x4802580d, 0x83380580, 0x00000046, 0x04020008,
10693 0x59cc000b, 0x9c0001c0, 0x4802580e, 0x59cc000c,
10694 0x9c0001c0, 0x4802580f, 0x0401f007, 0x59cc000f,
10695 0x9c0001c0, 0x4802580e, 0x59cc0010, 0x9c0001c0,
10696 0x4802580f, 0x83380580, 0x00000046, 0x04020004,
10697 0x83cc1400, 0x00000011, 0x0401f003, 0x83cc1400,
10698 0x00000015, 0x412c3000, 0x82183400, 0x00000010,
10699 0x4200b000, 0x00000004, 0x50080000, 0x9c0001c0,
10700 0x44003000, 0x80081000, 0x80183000, 0x8058b040,
10701 0x040207fa, 0x5c00a800, 0x5c00b000, 0x0201f800,
10702 0x000202da, 0x5c025800, 0x1c01f000, 0x4933c857,
10703 0x492fc857, 0x59300809, 0x58040200, 0x8c00051e,
10704 0x04000004, 0x592c0208, 0x84000558, 0x48025a08,
10705 0x1c01f000, 0x59e0180f, 0x599c0413, 0x800c1000,
10706 0x80080580, 0x04020002, 0x41781000, 0x59e00010,
10707 0x59e00810, 0x80040d80, 0x040207fd, 0x80080580,
10708 0x0400000b, 0x4c080000, 0x599c0814, 0x599c1015,
10709 0x800c00cc, 0x80040c00, 0x82081440, 0x00000000,
10710 0x5c001800, 0x82000540, 0x00000001, 0x4803c857,
10711 0x1c01f000, 0x492fc857, 0x42007000, 0x0010b7f8,
10712 0x58380807, 0x800409c0, 0x04020005, 0x492c7008,
10713 0x492c7007, 0x0201f000, 0x00100875, 0x492c0800,
10714 0x492c7007, 0x1c01f000, 0x59300203, 0x4933c857,
10715 0x4937c857, 0x493bc857, 0x4803c857, 0x82003480,
10716 0x0000000e, 0x02021800, 0x001005d8, 0x0c01f001,
10717 0x0010a6da, 0x0010a82c, 0x0010a6da, 0x0010a6da,
10718 0x0010a6da, 0x0010a6da, 0x0010a6da, 0x0010a791,
10719 0x0010a6dc, 0x0010a6da, 0x0010a6da, 0x0010a6da,
10720 0x0010a6da, 0x0010a6da, 0x0201f800, 0x001005d8,
10721 0x83380580, 0x0000004c, 0x02020800, 0x001005d8,
10722 0x0201f800, 0x001048ec, 0x04020020, 0x59a80826,
10723 0x82040500, 0x00000009, 0x82000580, 0x00000008,
10724 0x0400001a, 0x8c040d12, 0x0400003d, 0x59cc0806,
10725 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
10726 0x0400001f, 0x82040580, 0x50000000, 0x04000005,
10727 0x82040580, 0x52000000, 0x02020000, 0x0002077d,
10728 0x813669c0, 0x04000006, 0x4d3c0000, 0x417a7800,
10729 0x0201f800, 0x0010203c, 0x5c027800, 0x4a026403,
10730 0x00000001, 0x0401f014, 0x59cc0806, 0x82040d00,
10731 0xff000000, 0x82040580, 0x03000000, 0x04000008,
10732 0x82040580, 0x50000000, 0x04000005, 0x82040580,
10733 0x52000000, 0x02020000, 0x0002077d, 0x4a026403,
10734 0x00000009, 0x4a02641a, 0x00000009, 0x4a02621a,
10735 0x00000000, 0x813669c0, 0x0402000b, 0x59cc0001,
10736 0x0201f800, 0x00105c9a, 0x02020000, 0x0002077d,
10737 0x0201f800, 0x001045a6, 0x02020000, 0x0002077d,
10738 0x49366009, 0x4a026406, 0x00000004, 0x4a026203,
10739 0x00000001, 0x0201f000, 0x0010672b, 0x0201f800,
10740 0x00103b25, 0x04000023, 0x59cc0806, 0x4807c857,
10741 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
10742 0x04000033, 0x82040580, 0x20000000, 0x04000041,
10743 0x82040580, 0x21000000, 0x04000052, 0x82040580,
10744 0x24000000, 0x0400004f, 0x82040580, 0x50000000,
10745 0x0400004c, 0x82040580, 0x52000000, 0x04000049,
10746 0x82040580, 0x05000000, 0x0402000d, 0x59cc0806,
10747 0x82040d00, 0xff000000, 0x9c0431c0, 0x42028000,
10748 0x00000046, 0x42002800, 0x00000001, 0x0401fcf3,
10749 0x0401f93c, 0x02000800, 0x001005d8, 0x42002000,
10750 0x00000051, 0x0201f800, 0x00107a4a, 0x59cc0000,
10751 0x82000500, 0x00ffffff, 0x82000580, 0x00ffffff,
10752 0x04000005, 0x4a026203, 0x00000007, 0x493a6403,
10753 0x1c01f000, 0x59325817, 0x812e59c0, 0x02020800,
10754 0x001007fd, 0x0201f000, 0x0002077d, 0x813669c0,
10755 0x040007df, 0x59340400, 0x82000500, 0x000000ff,
10756 0x82000580, 0x00000003, 0x040207d9, 0x0401fc6f,
10757 0x040207d7, 0x4a026403, 0x00000009, 0x4a02641a,
10758 0x0000000e, 0x4a02621a, 0x00001900, 0x0401f7a2,
10759 0x813669c0, 0x0400000c, 0x59340c00, 0x82040500,
10760 0x000000ff, 0x82000580, 0x00000009, 0x04000794,
10761 0x82040500, 0x0000ff00, 0x82000580, 0x00000700,
10762 0x040207c3, 0x4a026403, 0x00000009, 0x4a02641a,
10763 0x00000009, 0x4a02621a, 0x00001e00, 0x0401f78e,
10764 0x813669c0, 0x040007f8, 0x59340c00, 0x82040500,
10765 0x0000ff00, 0x82000580, 0x00000700, 0x040007f2,
10766 0x0401f7b3, 0x4d2c0000, 0x4c580000, 0x4c500000,
10767 0x4c540000, 0x41385000, 0x83380580, 0x00000054,
10768 0x02020800, 0x001005d8, 0x59325808, 0x592c0c0b,
10769 0x82040d00, 0x0000e000, 0x82040580, 0x00002000,
10770 0x04020076, 0x59300817, 0x800409c0, 0x04000014,
10771 0x58041404, 0x41cca800, 0x8204a400, 0x00000005,
10772 0x82080480, 0x00000010, 0x04021004, 0x4008b000,
10773 0x0401fb6b, 0x0401f00a, 0x40001000, 0x4200b000,
10774 0x0000000f, 0x0401fb66, 0x58040801, 0x800409c0,
10775 0x040207f2, 0x0201f800, 0x001005d8, 0x813669c0,
10776 0x0400005e, 0x59344c00, 0x592c0c09, 0x4807c857,
10777 0x4827c857, 0x82040d00, 0x000000ff, 0x82040580,
10778 0x00000003, 0x0400002a, 0x82040580, 0x00000005,
10779 0x04000032, 0x82040580, 0x00000020, 0x04000036,
10780 0x82040580, 0x00000052, 0x04000042, 0x82040580,
10781 0x00000050, 0x04000042, 0x82040580, 0x00000021,
10782 0x04000004, 0x82040580, 0x00000024, 0x04020043,
10783 0x82240500, 0x0000ff00, 0x82000580, 0x00000007,
10784 0x04000008, 0x42000800, 0x00000009, 0x0201f800,
10785 0x00104571, 0x42005000, 0x0000000c, 0x0401f037,
10786 0x4a025a06, 0x00000031, 0x4a02580d, 0x00000009,
10787 0x59340400, 0x4802580e, 0x0201f800, 0x000202da,
10788 0x0201f800, 0x00107911, 0x0401f03d, 0x0201f800,
10789 0x001042b4, 0x0201f800, 0x0010462a, 0x42000800,
10790 0x00000003, 0x0201f800, 0x00104571, 0x42005000,
10791 0x00000008, 0x0401f021, 0x59cc0007, 0x0201f800,
10792 0x00105eec, 0x0402001d, 0x0201f800, 0x001042b4,
10793 0x0401f01a, 0x82240500, 0x0000ff00, 0x82000580,
10794 0x00000007, 0x040007df, 0x82240500, 0x000000ff,
10795 0x82000580, 0x00000009, 0x040007da, 0x0201f800,
10796 0x0010468d, 0x42005000, 0x0000000a, 0x0401f00b,
10797 0x42005000, 0x0000000e, 0x0401f003, 0x42005000,
10798 0x00000010, 0x82240500, 0x0000ff00, 0x82000580,
10799 0x00000007, 0x040007cb, 0x482a6403, 0x4a026203,
10800 0x00000001, 0x592c000d, 0x48026011, 0x497a6013,
10801 0x59a80038, 0x48026206, 0x417a7800, 0x0201f800,
10802 0x0010672b, 0x59325817, 0x812e59c0, 0x04000004,
10803 0x0201f800, 0x001007fd, 0x497a6017, 0x5c00a800,
10804 0x5c00a000, 0x5c00b000, 0x5c025800, 0x1c01f000,
10805 0x4d2c0000, 0x59325808, 0x83380580, 0x00000013,
10806 0x04020029, 0x59300c03, 0x82040580, 0x00000054,
10807 0x0400001e, 0x82040580, 0x00000010, 0x04000018,
10808 0x82040580, 0x0000000e, 0x04000015, 0x82040580,
10809 0x00000008, 0x0400000d, 0x82040580, 0x0000000c,
10810 0x0400000a, 0x82040580, 0x0000000a, 0x02020800,
10811 0x001005d8, 0x42000800, 0x00000006, 0x0201f800,
10812 0x00104571, 0x0401f009, 0x42000800, 0x00000004,
10813 0x0201f800, 0x00104571, 0x0401f004, 0x59340200,
10814 0x8400051a, 0x48026a00, 0x4a025a06, 0x00000000,
10815 0x0201f800, 0x000202da, 0x0201f800, 0x0002077d,
10816 0x0401f022, 0x83380580, 0x00000027, 0x0400000e,
10817 0x83380580, 0x00000014, 0x02020800, 0x001005d8,
10818 0x0201f800, 0x00106bbf, 0x42028000, 0x00000031,
10819 0x42000800, 0x00000004, 0x42001000, 0x000000ff,
10820 0x0401f009, 0x0201f800, 0x00106bbf, 0x42028000,
10821 0x00000031, 0x42000800, 0x00000004, 0x42001000,
10822 0x00000010, 0x49425a06, 0x4806580d, 0x480a580e,
10823 0x0201f800, 0x000202da, 0x0201f800, 0x00104c19,
10824 0x0201f800, 0x00107911, 0x5c025800, 0x1c01f000,
10825 0x42007000, 0x0010b7f8, 0x58380807, 0x800409c0,
10826 0x04020005, 0x492c7008, 0x492c7007, 0x0201f000,
10827 0x00100875, 0x492c0800, 0x492c7007, 0x1c01f000,
10828 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000,
10829 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857,
10830 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
10831 0x0400000d, 0x82040580, 0x05000000, 0x0400000a,
10832 0x82040580, 0x21000000, 0x04000030, 0x82040580,
10833 0x24000000, 0x0400002d, 0x82040580, 0x20000000,
10834 0x0402002f, 0x0201f800, 0x001007e4, 0x0400002c,
10835 0x492fc857, 0x492e6017, 0x59a8b016, 0x8258b400,
10836 0x0000001b, 0x8258b500, 0xfffffffc, 0x8058b104,
10837 0x485a5c04, 0x412c7800, 0x41cca000, 0x82580480,
10838 0x00000010, 0x04021005, 0x832cac00, 0x00000005,
10839 0x0401fa63, 0x0401f015, 0x40580800, 0x4200b000,
10840 0x0000000f, 0x832cac00, 0x00000005, 0x0401fa5c,
10841 0x8204b480, 0x0000000f, 0x0201f800, 0x001007e4,
10842 0x04000004, 0x492c7801, 0x412c7800, 0x0401f7ec,
10843 0x59325817, 0x0201f800, 0x001007fd, 0x497a6017,
10844 0x80000580, 0x0401f006, 0x59340200, 0x84000554,
10845 0x48026a00, 0x82000540, 0x00000001, 0x5c00a800,
10846 0x5c00a000, 0x5c00b000, 0x5c025800, 0x1c01f000,
10847 0x4933c857, 0x492fc857, 0x4d2c0000, 0x59300a03,
10848 0x82040580, 0x00000007, 0x04000036, 0x82040580,
10849 0x00000001, 0x02020800, 0x001005d8, 0x0201f800,
10850 0x00106c55, 0x4df00000, 0x598c000d, 0x81300580,
10851 0x04020016, 0x59300004, 0x8c000520, 0x04000004,
10852 0x84000520, 0x48026004, 0x0401f016, 0x42001000,
10853 0x0010b7f6, 0x50081000, 0x58080002, 0x82000580,
10854 0x00000100, 0x04000006, 0x5808000c, 0x81300580,
10855 0x02020800, 0x001005d8, 0x0401f00a, 0x0201f800,
10856 0x00106e8e, 0x04020020, 0x59300004, 0x8c000520,
10857 0x04000004, 0x84000520, 0x48026004, 0x0401f003,
10858 0x0201f800, 0x001068d3, 0x5c03e000, 0x02000800,
10859 0x00106c4b, 0x0201f800, 0x00109037, 0x02000800,
10860 0x001005d8, 0x59325808, 0x4a025a06, 0x00000005,
10861 0x0201f800, 0x000202da, 0x0201f800, 0x00104c19,
10862 0x59325817, 0x812e59c0, 0x02020800, 0x001007fd,
10863 0x0201f800, 0x00107911, 0x80000580, 0x5c025800,
10864 0x1c01f000, 0x5c03e000, 0x02000800, 0x00106c4b,
10865 0x59300406, 0x82000580, 0x00000011, 0x040007b8,
10866 0x0401f7f7, 0x4c040000, 0x59340200, 0x4803c857,
10867 0x8c00051c, 0x04000009, 0x59cc0805, 0x591c0019,
10868 0x4803c857, 0x80040580, 0x04000004, 0x80000580,
10869 0x4803c856, 0x0401f003, 0x82000540, 0x00000001,
10870 0x5c000800, 0x1c01f000, 0x4c000000, 0x4c0c0000,
10871 0x4c100000, 0x42001800, 0x0000ffff, 0x42002000,
10872 0x00000004, 0x0401f010, 0x4c000000, 0x4c0c0000,
10873 0x4c100000, 0x59302009, 0x58101c03, 0x42002000,
10874 0x00000004, 0x0401f008, 0x4c000000, 0x4c0c0000,
10875 0x4c100000, 0x59302009, 0x58101c03, 0x42002000,
10876 0x00000007, 0x480fc857, 0x4813c857, 0x481bc857,
10877 0x0201f800, 0x00103aae, 0x5c002000, 0x5c001800,
10878 0x5c000000, 0x1c01f000, 0x83380580, 0x00000092,
10879 0x02020800, 0x001005d8, 0x42000800, 0x80000040,
10880 0x4a026203, 0x00000001, 0x493a6403, 0x0201f000,
10881 0x00020721, 0x4d400000, 0x0201f800, 0x00103b25,
10882 0x04000008, 0x59a80005, 0x84000544, 0x48035005,
10883 0x42028000, 0x0000002a, 0x0201f800, 0x0010a449,
10884 0x5c028000, 0x1c01f000, 0x59a80026, 0x8c000508,
10885 0x04000005, 0x599c0017, 0x8c00050a, 0x04020002,
10886 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
10887 0x59300420, 0x84000540, 0x48026420, 0x1c01f000,
10888 0x4817c857, 0x4c000000, 0x4c040000, 0x8c142d2a,
10889 0x04000004, 0x598800b8, 0x80000000, 0x480310b8,
10890 0x8c142d2e, 0x04000004, 0x598800b9, 0x80000000,
10891 0x480310b9, 0x8c142d2c, 0x04000013, 0x40140000,
10892 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
10893 0x0400000d, 0x82000d80, 0x00040000, 0x0400000a,
10894 0x82000d80, 0x00050000, 0x04000007, 0x59880005,
10895 0x80000000, 0x48031005, 0x598800ba, 0x80000000,
10896 0x480310ba, 0x5c000800, 0x5c000000, 0x1c01f000,
10897 0x4817c857, 0x4c000000, 0x4c040000, 0x8c142d2a,
10898 0x04000004, 0x598800bb, 0x80000000, 0x480310bb,
10899 0x8c142d2e, 0x04000004, 0x598800bc, 0x80000000,
10900 0x480310bc, 0x8c142d2c, 0x04000013, 0x40140000,
10901 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
10902 0x0400000d, 0x82000d80, 0x00040000, 0x0400000a,
10903 0x82000d80, 0x00050000, 0x04000007, 0x59880005,
10904 0x80000000, 0x48031005, 0x598800bd, 0x80000000,
10905 0x480310bd, 0x5c000800, 0x5c000000, 0x1c01f000,
10906 0x4c000000, 0x59880001, 0x80000000, 0x4803c857,
10907 0x48031001, 0x5c000000, 0x1c01f000, 0x4c000000,
10908 0x59880000, 0x80000000, 0x4803c857, 0x48031000,
10909 0x5c000000, 0x1c01f000, 0x4c000000, 0x59880002,
10910 0x80000000, 0x4803c857, 0x48031002, 0x5c000000,
10911 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d2c,
10912 0x04000004, 0x598800a6, 0x80000000, 0x480310a6,
10913 0x8c040d2a, 0x04000004, 0x598800a7, 0x80000000,
10914 0x480310a7, 0x8c040d28, 0x04000004, 0x598800a8,
10915 0x80000000, 0x480310a8, 0x8c040d26, 0x04000004,
10916 0x598800a9, 0x80000000, 0x480310a9, 0x8c040d24,
10917 0x04000004, 0x598800aa, 0x80000000, 0x480310aa,
10918 0x8c040d22, 0x04000004, 0x598800ab, 0x80000000,
10919 0x480310ab, 0x8c040d20, 0x04000004, 0x598800ac,
10920 0x80000000, 0x480310ac, 0x5c000000, 0x1c01f000,
10921 0x4807c857, 0x4c000000, 0x598800ad, 0x80000000,
10922 0x480310ad, 0x5c000000, 0x1c01f000, 0x4807c857,
10923 0x4c000000, 0x8c040d1c, 0x04000004, 0x598800ae,
10924 0x80000000, 0x480310ae, 0x8c040d1a, 0x04000004,
10925 0x598800af, 0x80000000, 0x480310af, 0x5c000000,
10926 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d18,
10927 0x04000004, 0x598800b0, 0x80000000, 0x480310b0,
10928 0x8c040d16, 0x04000004, 0x598800b1, 0x80000000,
10929 0x480310b1, 0x8c040d14, 0x04000004, 0x598800b2,
10930 0x80000000, 0x480310b2, 0x5c000000, 0x1c01f000,
10931 0x4807c857, 0x4c000000, 0x8c040d10, 0x04000004,
10932 0x598800b3, 0x80000000, 0x480310b3, 0x8c040d0c,
10933 0x04000004, 0x598800b4, 0x80000000, 0x480310b4,
10934 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
10935 0x8c040d08, 0x04000004, 0x598800b5, 0x80000000,
10936 0x480310b5, 0x8c040d04, 0x04000004, 0x598800b6,
10937 0x80000000, 0x480310b6, 0x5c000000, 0x1c01f000,
10938 0x4807c856, 0x4c000000, 0x5988007f, 0x80000000,
10939 0x4803107f, 0x5c000000, 0x1c01f000, 0x4803c857,
10940 0x4c040000, 0x50000800, 0x80040800, 0x4807c857,
10941 0x44040000, 0x5c000800, 0x1c01f000, 0x480fc857,
10942 0x4c000000, 0x820c0580, 0x00000000, 0x04020004,
10943 0x42000000, 0x0010b819, 0x0401f014, 0x820c0580,
10944 0x00001001, 0x04020004, 0x42000000, 0x0010b81a,
10945 0x0401f00e, 0x820c0580, 0x00001002, 0x04020004,
10946 0x42000000, 0x0010b81b, 0x0401f008, 0x820c0c80,
10947 0x0000201c, 0x02021800, 0x001005d8, 0x820c0500,
10948 0x0000001f, 0x0c01f804, 0x0401ffdd, 0x5c000000,
10949 0x1c01f000, 0x0010aa89, 0x0010aa8c, 0x0010aa8f,
10950 0x0010aa92, 0x0010aa95, 0x0010aa98, 0x0010aa9b,
10951 0x0010aa9e, 0x0010aaa1, 0x0010aaa4, 0x0010aaa7,
10952 0x0010aaaa, 0x0010aaad, 0x0010aab0, 0x0010aab3,
10953 0x0010aab6, 0x0010aab9, 0x0010aabc, 0x0010aabf,
10954 0x0010aac2, 0x0010aac5, 0x0010aac8, 0x0010aacb,
10955 0x0010aace, 0x0010aad1, 0x0010aad4, 0x0010aad7,
10956 0x0010aada, 0x42000000, 0x0010b81c, 0x1c01f000,
10957 0x42000000, 0x0010b81d, 0x1c01f000, 0x42000000,
10958 0x0010b81e, 0x1c01f000, 0x42000000, 0x0010b81f,
10959 0x1c01f000, 0x42000000, 0x0010b820, 0x1c01f000,
10960 0x42000000, 0x0010b821, 0x1c01f000, 0x42000000,
10961 0x0010b822, 0x1c01f000, 0x42000000, 0x0010b823,
10962 0x1c01f000, 0x42000000, 0x0010b824, 0x1c01f000,
10963 0x42000000, 0x0010b825, 0x1c01f000, 0x42000000,
10964 0x0010b826, 0x1c01f000, 0x42000000, 0x0010b827,
10965 0x1c01f000, 0x42000000, 0x0010b828, 0x1c01f000,
10966 0x42000000, 0x0010b829, 0x1c01f000, 0x42000000,
10967 0x0010b82a, 0x1c01f000, 0x42000000, 0x0010b82b,
10968 0x1c01f000, 0x42000000, 0x0010b82c, 0x1c01f000,
10969 0x42000000, 0x0010b82d, 0x1c01f000, 0x42000000,
10970 0x0010b82e, 0x1c01f000, 0x42000000, 0x0010b82f,
10971 0x1c01f000, 0x42000000, 0x0010b830, 0x1c01f000,
10972 0x42000000, 0x0010b831, 0x1c01f000, 0x42000000,
10973 0x0010b832, 0x1c01f000, 0x42000000, 0x0010b833,
10974 0x1c01f000, 0x42000000, 0x0010b834, 0x1c01f000,
10975 0x42000000, 0x0010b835, 0x1c01f000, 0x42000000,
10976 0x0010b836, 0x1c01f000, 0x42000000, 0x0010b837,
10977 0x1c01f000, 0x480fc857, 0x4c000000, 0x820c0580,
10978 0x00000001, 0x04020004, 0x42000000, 0x0010b80e,
10979 0x0401f012, 0x820c0580, 0x00000002, 0x04020004,
10980 0x42000000, 0x0010b80f, 0x0401f00c, 0x820c0580,
10981 0x00000003, 0x04020004, 0x42000000, 0x0010b810,
10982 0x0401f006, 0x820c0580, 0x00000004, 0x04020004,
10983 0x42000000, 0x0010b811, 0x0401ff51, 0x5c000000,
10984 0x1c01f000, 0x4c000000, 0x59a80026, 0x4803c857,
10985 0x8c000502, 0x04000010, 0x8c000506, 0x04000004,
10986 0x42000000, 0x0010b841, 0x0401f012, 0x8c00050a,
10987 0x04000004, 0x42000000, 0x0010b840, 0x0401f00d,
10988 0x8c000508, 0x04000004, 0x42000000, 0x0010b843,
10989 0x0401f008, 0x0201f800, 0x0010513b, 0x04000006,
10990 0x8c000506, 0x04020004, 0x42000000, 0x0010b842,
10991 0x0401ff33, 0x5c000000, 0x1c01f000, 0x8058b1c0,
10992 0x02000800, 0x001005d8, 0x5450a800, 0x8050a000,
10993 0x8054a800, 0x8058b040, 0x040207fc, 0x1c01f000,
10994 0x8058b1c0, 0x02000800, 0x001005d8, 0x4450a800,
10995 0x8054a800, 0x8058b040, 0x040207fd, 0x1c01f000,
10996 0x8058b1c0, 0x02000800, 0x001005d8, 0x50500000,
10997 0x9c0001c0, 0x4400a800, 0x8050a000, 0x8054a800,
10998 0x8058b040, 0x040207fa, 0x1c01f000, 0x4c000000,
10999 0x59a80008, 0x8c00051c, 0x5c000000, 0x1c01f000,
11000 0x00000001, 0x00000002, 0x00000004, 0x00000008,
11001 0x00000010, 0x00000020, 0x00000040, 0x00000080,
11002 0x00000100, 0x00000200, 0x00000400, 0x00000800,
11003 0x00001000, 0x00002000, 0x00004000, 0x00008000,
11004 0x00010000, 0xa5f2b3ac
11005};
11006
11007#ifdef UNIQUE_FW_NAME
11008uint32_t fw2400_length01 = 0x0000ab4a ;
11009#else
11010uint32_t risc_code_length01 = 0x0000ab4a ;
11011#endif
11012
11013
11014#ifdef UNIQUE_FW_NAME
11015uint32_t fw2400_addr02 = 0x0010e000 ;
11016#else
11017uint32_t risc_code_addr02 = 0x0010e000 ;
11018#endif
11019
11020#ifdef UNIQUE_FW_NAME
11021uint32_t fw2400_code02[] = {
11022#else
11023uint32_t risc_code02[] = {
11024#endif
11025 0x00000000, 0x00000000, 0x0010e000, 0x000014ff,
11026 0x00000000, 0x00000000, 0x00020000, 0x000008c0,
11027 0x836c0580, 0x00000003, 0x02020000, 0x001002e3,
11028 0x42000000, 0x0010b4bb, 0x50000000, 0x800001c0,
11029 0x04020956, 0x0401f923, 0x0401fbe3, 0x0401fb5c,
11030 0x0201f800, 0x00020718, 0x0201f800, 0x0002057b,
11031 0x0401f7f0, 0x59b800ea, 0x82000d00, 0xf0000038,
11032 0x02020000, 0x00100a7a, 0x8c000510, 0x02000000,
11033 0x00100a79, 0x59ba60e0, 0x81300182, 0x0402104e,
11034 0x04002030, 0x8532653e, 0x59300406, 0x82000580,
11035 0x00000003, 0x04020028, 0x59300203, 0x82000580,
11036 0x00000004, 0x04020024, 0x59325808, 0x59300402,
11037 0x4a025a04, 0x00000103, 0x900001c0, 0x48025806,
11038 0x497a5807, 0x497a5c09, 0x5930001f, 0x80000540,
11039 0x02020800, 0x00100d56, 0x59300004, 0x8c00053e,
11040 0x04020010, 0x0401fa88, 0x59326809, 0x0201f800,
11041 0x0002077d, 0x5934000f, 0x5934140b, 0x80081040,
11042 0x04001002, 0x480a6c0b, 0x80000540, 0x04020a10,
11043 0x59b800ea, 0x8c000510, 0x040207d7, 0x1c01f000,
11044 0x0201f800, 0x00106f60, 0x040007ef, 0x0201f000,
11045 0x00100a65, 0x42027000, 0x00000055, 0x0401f027,
11046 0x83326500, 0x3fffffff, 0x59300406, 0x82000580,
11047 0x00000003, 0x04020015, 0x59325808, 0x59326809,
11048 0x59301402, 0x4a025a04, 0x00000103, 0x900811c0,
11049 0x480a5806, 0x497a5c09, 0x497a5807, 0x0401fa62,
11050 0x0201f800, 0x0002077d, 0x5934000f, 0x5934140b,
11051 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
11052 0x040209eb, 0x0401f7db, 0x42027000, 0x00000054,
11053 0x0401f00a, 0x83300500, 0x60000000, 0x02000000,
11054 0x00100a68, 0x81326580, 0x8000013a, 0x82000400,
11055 0x00100a80, 0x50027000, 0x59300c06, 0x82040580,
11056 0x00000002, 0x02000000, 0x00100a65, 0x59300004,
11057 0x8c00053e, 0x04020004, 0x0201f800, 0x000207a1,
11058 0x0401f7c4, 0x0201f800, 0x00106f60, 0x040007fb,
11059 0x0201f000, 0x00100a65, 0x59325808, 0x412c7000,
11060 0x58380a04, 0x82040500, 0x0000000f, 0x82000c00,
11061 0x001010bd, 0x50044000, 0x0c01f001, 0x00100dd9,
11062 0x00100dd9, 0x0002009f, 0x00100dd9, 0x00100dd9,
11063 0x00100dd9, 0x00100dd9, 0x00100dd9, 0x000200af,
11064 0x00100ded, 0x00100dd9, 0x00100dd9, 0x00100ddb,
11065 0x00100dd9, 0x00100dd9, 0x00100dd9, 0x5838040a,
11066 0x8c000500, 0x02000800, 0x001005d8, 0x50200000,
11067 0x80387c00, 0x583c1002, 0x583c2800, 0x583c2001,
11068 0x58380a07, 0x5838300f, 0x59303807, 0x58384c08,
11069 0x5838000d, 0x48026012, 0x0401f010, 0x5838020a,
11070 0x8c000502, 0x02000000, 0x00100dd9, 0x50200000,
11071 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002,
11072 0x592c0a07, 0x592c4c08, 0x592c300f, 0x59303807,
11073 0x497a6012, 0x497a6013, 0x4816600e, 0x4812600f,
11074 0x480a6010, 0x481a6011, 0x80040840, 0x4806600d,
11075 0x02020000, 0x00100e1a, 0x841c3d40, 0x481e6007,
11076 0x1c01f000, 0x41787800, 0x59325808, 0x592c0c0a,
11077 0x8c040d02, 0x02000000, 0x00100f8c, 0x592c000d,
11078 0x592c100f, 0x592c0a04, 0x480a6011, 0x48026012,
11079 0x48026013, 0x412c3000, 0x82040500, 0x0000000f,
11080 0x82000400, 0x001010bd, 0x50003800, 0x501c0000,
11081 0x401c1000, 0x592c1a07, 0x4802600a, 0x481a600b,
11082 0x480a600c, 0x480e600d, 0x843c7d4a, 0x403c1000,
11083 0x1c01f000, 0x41787800, 0x497a6012, 0x592c0a04,
11084 0x412c3000, 0x592c1a07, 0x82040500, 0x0000000f,
11085 0x82000400, 0x001010bd, 0x50004000, 0x50200000,
11086 0x40201000, 0x4802600a, 0x481a600b, 0x480a600c,
11087 0x480e600d, 0x80000580, 0x483e6004, 0x1c01f000,
11088 0x4c000000, 0x4df00000, 0x0201f800, 0x00020729,
11089 0x0401f005, 0x4c000000, 0x4df00000, 0x0401ff16,
11090 0x0401f001, 0x5c03e000, 0x5c000000, 0x1801f000,
11091 0x4203e000, 0xb0100000, 0x41fc0000, 0x82000500,
11092 0x00000011, 0x0c01f001, 0x0002012a, 0x00020697,
11093 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11094 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11095 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11096 0x0002012a, 0x0002012a, 0x0010115a, 0x0002012c,
11097 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11098 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11099 0x0002012a, 0x0002012a, 0x0002012a, 0x0002012a,
11100 0x0002012a, 0x0002012a, 0x0201f800, 0x001005d8,
11101 0x0201f800, 0x00020697, 0x0201f000, 0x0010115a,
11102 0x42000000, 0x0010b4c1, 0x50000000, 0x8c000504,
11103 0x04000014, 0x42000000, 0x0010b4c1, 0x50000000,
11104 0x8c000502, 0x04020002, 0x1c01f000, 0x4df00000,
11105 0x4203e000, 0x50000000, 0x42034000, 0x0010b4a4,
11106 0x59a0001d, 0x59a1d81e, 0x84000502, 0x4803401d,
11107 0x58ec0009, 0x0801f800, 0x5c03e000, 0x1c01f000,
11108 0x04027002, 0x04026002, 0x1c01f000, 0x4df00000,
11109 0x4203e000, 0x50000000, 0x0201f800, 0x001007e4,
11110 0x04000010, 0x412dd800, 0x48efc857, 0x0201f800,
11111 0x00103b28, 0x42034000, 0x0010b4a4, 0x49a1d80b,
11112 0x48ef401e, 0x59a0001d, 0x84000544, 0x4803401d,
11113 0x0201f800, 0x00102214, 0x0201f800, 0x00102233,
11114 0x5c03e000, 0x1c01f000, 0x4da00000, 0x4df00000,
11115 0x4203e000, 0x50000000, 0x04006051, 0x40001000,
11116 0x42034000, 0x0010b4a4, 0x59a01818, 0x800c19c0,
11117 0x04020008, 0x59a0381b, 0x801c39c0, 0x02000800,
11118 0x001005d8, 0x59a0041c, 0x801c3c00, 0x0401f00c,
11119 0x59a00419, 0x82000400, 0x00000002, 0x48034419,
11120 0x82000c80, 0x00000013, 0x04001003, 0x497b4419,
11121 0x41780000, 0x59a03816, 0x801c3c00, 0x80081040,
11122 0x480b4017, 0x581c0200, 0x4803c021, 0x581c0401,
11123 0x4803c022, 0x581c0201, 0x4803c023, 0x581c0400,
11124 0x4803c020, 0x900001c0, 0x82000540, 0x00000012,
11125 0x4803c011, 0x59e00017, 0x8c000508, 0x04000003,
11126 0x4a03c017, 0x00000002, 0x4203e000, 0x30000001,
11127 0x800c19c0, 0x04000007, 0x800c1840, 0x480f4018,
11128 0x0402001f, 0x497b4419, 0x497b4219, 0x0401f01c,
11129 0x800811c0, 0x0402000b, 0x4d2c0000, 0x59a2581b,
11130 0x0201f800, 0x001007f4, 0x5c025800, 0x497b401b,
11131 0x497b401a, 0x497b441c, 0x497b421c, 0x0401f010,
11132 0x59a0041c, 0x82000400, 0x00000002, 0x82000c80,
11133 0x00000012, 0x4803441c, 0x04001009, 0x4d2c0000,
11134 0x59a2581b, 0x592c3813, 0x481f401b, 0x497b441c,
11135 0x0201f800, 0x001007f4, 0x5c025800, 0x5c03e000,
11136 0x5c034000, 0x1c01f000, 0x59a80005, 0x82000500,
11137 0x00000003, 0x02020000, 0x00104315, 0x59340400,
11138 0x82000580, 0x00000606, 0x02020000, 0x001042e6,
11139 0x5934000d, 0x80027d40, 0x02020000, 0x00104321,
11140 0x0401f803, 0x80000580, 0x1c01f000, 0x5934000f,
11141 0x59341203, 0x80080540, 0x0402006f, 0x5934020b,
11142 0x5934140b, 0x80080480, 0x0402106b, 0x0201f800,
11143 0x0002075a, 0x04000064, 0x80081000, 0x592c0406,
11144 0x480a6c0b, 0x49366009, 0x492e6008, 0x4a026406,
11145 0x00000003, 0x4a026403, 0x00000040, 0x800000c2,
11146 0x800018c4, 0x800c0400, 0x48026206, 0x592c0808,
11147 0x592c1809, 0x592c020a, 0x48066017, 0x480e6018,
11148 0x8c000502, 0x04000030, 0x4a026203, 0x00000004,
11149 0x592c0207, 0x80000040, 0x04020020, 0x59a80005,
11150 0x8c000514, 0x42000000, 0x00000055, 0x04020003,
11151 0x42000000, 0x00000033, 0x80000040, 0x040207ff,
11152 0x592c0204, 0x82000500, 0x000000ff, 0x82000580,
11153 0x00000018, 0x04020011, 0x592c180f, 0x59300007,
11154 0x82000540, 0x00000091, 0x480e6011, 0x48026007,
11155 0x42000000, 0x80000004, 0x48026004, 0x59bc00ea,
11156 0x8c000516, 0x040207fe, 0x83300400, 0x20000000,
11157 0x480378e1, 0x1c01f000, 0x0401fe78, 0x59300007,
11158 0x8400054e, 0x48026007, 0x592c1a04, 0x820c1d00,
11159 0x000000ff, 0x820c0580, 0x00000048, 0x04000017,
11160 0x0401f7ec, 0x8c000500, 0x04020ecb, 0x4a026203,
11161 0x00000002, 0x59a80805, 0x82040500, 0x00000600,
11162 0x04020012, 0x42000000, 0x00000030, 0x80000040,
11163 0x040207ff, 0x592c1a04, 0x820c1d00, 0x000000ff,
11164 0x820c0580, 0x00000018, 0x040007da, 0x820c0580,
11165 0x00000048, 0x040207d7, 0x42000800, 0x80000804,
11166 0x0201f000, 0x00106721, 0x8c040d12, 0x42000000,
11167 0x00000010, 0x040207ee, 0x42000000, 0x00000051,
11168 0x0401f7eb, 0x800811c0, 0x04020003, 0x4a026a03,
11169 0x00000001, 0x59340010, 0x492e6810, 0x80000d40,
11170 0x04020003, 0x492e680f, 0x1c01f000, 0x492c0800,
11171 0x1c01f000, 0x83440c80, 0x00000800, 0x04021009,
11172 0x83440400, 0x0010ac00, 0x50000000, 0x80000540,
11173 0x04000004, 0x40026800, 0x80000580, 0x1c01f000,
11174 0x82000540, 0x00000001, 0x1c01f000, 0x59340203,
11175 0x80000540, 0x0402004b, 0x4d300000, 0x4d2c0000,
11176 0x5934000f, 0x80025d40, 0x04000044, 0x0201f800,
11177 0x0002075a, 0x0400003f, 0x592c0000, 0x4802680f,
11178 0x80000540, 0x04020002, 0x48026810, 0x592c2a04,
11179 0x80081000, 0x480a6c0b, 0x49366009, 0x492e6008,
11180 0x82142d00, 0x000000ff, 0x82140580, 0x00000012,
11181 0x04000035, 0x4a026406, 0x00000003, 0x4a026403,
11182 0x00000040, 0x592c0406, 0x800000c2, 0x800018c4,
11183 0x800c0400, 0x48026206, 0x592c0808, 0x592c1809,
11184 0x592c020a, 0x48066017, 0x480e6018, 0x8c000502,
11185 0x02000000, 0x0010474d, 0x4a026203, 0x00000004,
11186 0x592c0207, 0x80000040, 0x02020000, 0x00104740,
11187 0x82140580, 0x00000018, 0x02020000, 0x00104740,
11188 0x592c180f, 0x59300007, 0x82000540, 0x00000091,
11189 0x480e6011, 0x48026007, 0x42000000, 0x80000004,
11190 0x48026004, 0x59bc00ea, 0x8c000516, 0x040207fe,
11191 0x83300400, 0x20000000, 0x480378e1, 0x5934020b,
11192 0x5934140b, 0x80080480, 0x040017be, 0x0401f003,
11193 0x4a026a03, 0x00000001, 0x5c025800, 0x5c026000,
11194 0x1c01f000, 0x497a5800, 0x49325809, 0x4a026406,
11195 0x00000006, 0x4a026203, 0x00000007, 0x0401f802,
11196 0x0401f7ef, 0x59a80021, 0x800001c0, 0x02020000,
11197 0x0010476f, 0x59a80005, 0x8c000504, 0x02020000,
11198 0x0010476b, 0x59340200, 0x8c000518, 0x02020000,
11199 0x00104767, 0x592c0a0c, 0x48066202, 0x4a025a06,
11200 0x00000000, 0x8c000508, 0x02020000, 0x00104763,
11201 0x4d3c0000, 0x417a7800, 0x0401fbdf, 0x5c027800,
11202 0x1c01f000, 0x592c0404, 0x8c00051e, 0x02020000,
11203 0x00104ce4, 0x59980022, 0x80000540, 0x04000017,
11204 0x592c0a06, 0x592c0409, 0x80040540, 0x04020013,
11205 0x0201f000, 0x00104cfa, 0x592c0404, 0x8c00051e,
11206 0x02020000, 0x00104cf3, 0x59980022, 0x80000540,
11207 0x0400000a, 0x82040580, 0x00000001, 0x04020007,
11208 0x0201f000, 0x00104cfa, 0x592c0404, 0x8c00051e,
11209 0x02020000, 0x00104dca, 0x59980026, 0x497a5800,
11210 0x80000540, 0x02020000, 0x00104e1d, 0x59d80105,
11211 0x82000d00, 0x00018780, 0x02020000, 0x00104edb,
11212 0x80000106, 0x82000500, 0x00000003, 0x0c01f001,
11213 0x000202f0, 0x00104e1d, 0x000202f6, 0x00020341,
11214 0x592c0001, 0x492fb107, 0x80000d40, 0x02020000,
11215 0x00104ddb, 0x1c01f000, 0x592c0001, 0x492fb107,
11216 0x80000d40, 0x02020000, 0x00104de8, 0x59da5908,
11217 0x835c0480, 0x00000020, 0x0400102c, 0x0402b034,
11218 0x492fb007, 0x0400e7fa, 0x59d80105, 0x82000500,
11219 0x00018780, 0x02020000, 0x00104edb, 0x0400601f,
11220 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
11221 0x800408e0, 0x599c1017, 0x8c081508, 0x04020028,
11222 0x82040d40, 0x00000013, 0x5998002b, 0x4807c011,
11223 0x84000500, 0x4803302b, 0x59e00017, 0x8c000508,
11224 0x04020004, 0x4203e000, 0x30000001, 0x1c01f000,
11225 0x4a03c017, 0x00000003, 0x82040500, 0x000000ff,
11226 0x82000580, 0x0000001d, 0x040207f7, 0x4a03c017,
11227 0x0000000d, 0x0401f7f4, 0x5998082b, 0x84040d40,
11228 0x4807302b, 0x1c01f000, 0x496a5800, 0x412ed000,
11229 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
11230 0x48039000, 0x0400e7ca, 0x0401f7d0, 0x0402f7f7,
11231 0x492fa807, 0x0400e7c6, 0x0401f7cc, 0x59e0000f,
11232 0x59e0100f, 0x80081580, 0x040207fd, 0x81281580,
11233 0x040007d4, 0x40025000, 0x82040d40, 0x0000001d,
11234 0x0401f7d2, 0x59d80908, 0x45680800, 0x4006d000,
11235 0x815eb800, 0x0400e7fc, 0x59c80000, 0x82000540,
11236 0x00001200, 0x48039000, 0x02006000, 0x00104df8,
11237 0x59d8010a, 0x59d8090a, 0x80040d80, 0x040207fd,
11238 0x900001c0, 0x82000540, 0x00000013, 0x4803c011,
11239 0x5998002b, 0x84000500, 0x4803302b, 0x59e00017,
11240 0x8c000508, 0x04000003, 0x4a03c017, 0x00000003,
11241 0x4203e000, 0x30000001, 0x59d80105, 0x82000500,
11242 0x00018780, 0x02020000, 0x00104edb, 0x0202d000,
11243 0x00104dfd, 0x592c0001, 0x492fb107, 0x80000d40,
11244 0x02020000, 0x00104e10, 0x1c01f000, 0x59980020,
11245 0x0c01f001, 0x00020370, 0x00020371, 0x00104e88,
11246 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
11247 0x0402681e, 0x04006004, 0x599c0017, 0x8c000508,
11248 0x04020865, 0x59980029, 0x80025d40, 0x0400000a,
11249 0x0402d00b, 0x59980026, 0x80000040, 0x48033026,
11250 0x592c0000, 0x492fb107, 0x48033029, 0x04020002,
11251 0x48033028, 0x5c03e000, 0x1c01f000, 0x59d80105,
11252 0x82000500, 0x00018780, 0x02020000, 0x00104edb,
11253 0x42000000, 0x0010b855, 0x0201f800, 0x0010aa47,
11254 0x5c03e000, 0x1c01f000, 0x5998002b, 0x8c000500,
11255 0x0402003b, 0x0400e007, 0x59d80105, 0x82000500,
11256 0x00018780, 0x02020000, 0x00104edb, 0x1c01f000,
11257 0x59da5908, 0x835c0c80, 0x00000020, 0x04001003,
11258 0x0400b029, 0x0400f02b, 0x496a5800, 0x412ed000,
11259 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
11260 0x48039000, 0x0400e7f3, 0x59d8010a, 0x59d8090a,
11261 0x80040580, 0x040207fd, 0x800408e0, 0x599c1017,
11262 0x8c081508, 0x04020022, 0x82040d40, 0x00000013,
11263 0x4807c011, 0x59e00017, 0x8c000508, 0x0400000a,
11264 0x4a03c017, 0x00000003, 0x82040500, 0x000000ff,
11265 0x82000580, 0x0000001d, 0x04020003, 0x4a03c017,
11266 0x0000000d, 0x4203e000, 0x30000001, 0x59d80105,
11267 0x82000500, 0x00018780, 0x02020000, 0x00104edb,
11268 0x1c01f000, 0x492fb007, 0x0400e7d2, 0x0401f7df,
11269 0x492fa807, 0x0400e7cf, 0x0401f7dc, 0x84000500,
11270 0x4803302b, 0x0400e7cb, 0x0401f7d8, 0x59e0000f,
11271 0x59e0100f, 0x80081580, 0x040207fd, 0x81281580,
11272 0x040007da, 0x40025000, 0x82040d40, 0x0000001d,
11273 0x0401f7d8, 0x59e0000f, 0x59e0100f, 0x80080d80,
11274 0x040207fd, 0x81280580, 0x04020002, 0x1c01f000,
11275 0x400a5000, 0x900811c0, 0x82081540, 0x0000001c,
11276 0x480bc011, 0x59e00017, 0x8c000508, 0x04000003,
11277 0x4a03c017, 0x0000000c, 0x4203e000, 0x30000001,
11278 0x1c01f000, 0x41700000, 0x0c01f001, 0x00105420,
11279 0x000203fc, 0x00105420, 0x00105421, 0x0010541e,
11280 0x0010541e, 0x0010541e, 0x0010541e, 0x001058b0,
11281 0x04010037, 0x59980006, 0x80000540, 0x0402003c,
11282 0x0402c01c, 0x4202f800, 0x00000010, 0x4df00000,
11283 0x4203e000, 0x50000000, 0x49db3005, 0x59da5808,
11284 0x592c0204, 0x497a5800, 0x497a5801, 0x82000500,
11285 0x000000ff, 0x82000c80, 0x00000079, 0x04021036,
11286 0x0c01f839, 0x5c03e000, 0x817ef840, 0x04000009,
11287 0x836c0580, 0x00000003, 0x04020006, 0x83700580,
11288 0x00000001, 0x04020010, 0x0401001b, 0x0400c7e8,
11289 0x0400f94a, 0x0400b134, 0x59d40005, 0x82000500,
11290 0x43018780, 0x02020000, 0x0010583f, 0x59d80005,
11291 0x82000500, 0x43018780, 0x02020000, 0x00105846,
11292 0x1c01f000, 0x83700580, 0x00000003, 0x02000800,
11293 0x00105421, 0x83700580, 0x00000001, 0x040207ed,
11294 0x04010005, 0x0400c7d2, 0x0401f7ea, 0x4202f800,
11295 0x00000010, 0x4df00000, 0x4203e000, 0x50000000,
11296 0x49d73005, 0x59d65808, 0x0401f7ce, 0x4df00000,
11297 0x4203e000, 0x50000000, 0x40025800, 0x592c0204,
11298 0x497b3005, 0x497b3006, 0x4202f800, 0x00000010,
11299 0x0401f7c7, 0x0201f800, 0x00105491, 0x5c03e000,
11300 0x0401f7d4, 0x00105491, 0x00105491, 0x00105491,
11301 0x00105491, 0x00105527, 0x00105491, 0x00105491,
11302 0x00105491, 0x00105491, 0x00105491, 0x001054a1,
11303 0x00105491, 0x00105491, 0x00105491, 0x00105551,
11304 0x00105491, 0x00105491, 0x00105491, 0x000204ef,
11305 0x00105491, 0x001056b4, 0x00105491, 0x00105491,
11306 0x00105491, 0x000204c2, 0x00105491, 0x00105491,
11307 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11308 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11309 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11310 0x00105491, 0x00105491, 0x001054c9, 0x00105491,
11311 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11312 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11313 0x001057d3, 0x00105491, 0x00105491, 0x00105491,
11314 0x00105491, 0x00105491, 0x0010581e, 0x00105491,
11315 0x001054bb, 0x00105491, 0x00105797, 0x00105491,
11316 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11317 0x00105491, 0x00105491, 0x00105765, 0x00105491,
11318 0x00105765, 0x00105872, 0x00105491, 0x00105491,
11319 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11320 0x00105491, 0x00105491, 0x00105491, 0x00105725,
11321 0x00105855, 0x00105491, 0x00105865, 0x00105491,
11322 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11323 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11324 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11325 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11326 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11327 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11328 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11329 0x00105491, 0x00105491, 0x00105491, 0x00105491,
11330 0x00105491, 0x00105491, 0x592c0204, 0x80000110,
11331 0x02000000, 0x00105499, 0x80000040, 0x04000009,
11332 0x48033002, 0x492f3003, 0x492f3004, 0x4a033008,
11333 0x000204d0, 0x4202e000, 0x00000003, 0x1c01f000,
11334 0x592c0406, 0x82000c80, 0x0000199a, 0x02021000,
11335 0x001054a9, 0x59a80021, 0x80000540, 0x02020000,
11336 0x001054d7, 0x592e8a06, 0x83440c80, 0x000007f0,
11337 0x02021000, 0x001054a9, 0x83440400, 0x0010ac00,
11338 0x50000000, 0x80026d40, 0x02000000, 0x001054db,
11339 0x59340002, 0x592c0810, 0x80040580, 0x82000500,
11340 0x00ffffff, 0x02020000, 0x001054a9, 0x0401fccf,
11341 0x02020000, 0x001054de, 0x1c01f000, 0x592c0204,
11342 0x80000110, 0x02000000, 0x00105499, 0x80000040,
11343 0x0402000b, 0x592c040a, 0x8c000504, 0x04000010,
11344 0x592c0207, 0x82000c80, 0x00001001, 0x02021000,
11345 0x001054a9, 0x0201f000, 0x0010588a, 0x48033002,
11346 0x492f3003, 0x492f3004, 0x4a033008, 0x00020507,
11347 0x4202e000, 0x00000003, 0x1c01f000, 0x592c0406,
11348 0x82000c80, 0x0000199a, 0x02021000, 0x001054a9,
11349 0x592e8a06, 0x417a7800, 0x0401fd37, 0x02020000,
11350 0x00105658, 0x59340002, 0x592c0808, 0x80040580,
11351 0x82000500, 0x00ffffff, 0x02020000, 0x001054a9,
11352 0x497a5808, 0x592e6009, 0x83300580, 0xffffffff,
11353 0x02000000, 0x00105618, 0x83300480, 0x0010d1c0,
11354 0x02001000, 0x00105675, 0x59a8000b, 0x81300480,
11355 0x02021000, 0x00105675, 0x592c240a, 0x49366009,
11356 0x8c10251c, 0x02020000, 0x00105606, 0x59a80068,
11357 0x8c000510, 0x02020000, 0x0010568e, 0x59a80821,
11358 0x800409c0, 0x02020000, 0x001055ec, 0x59a80805,
11359 0x8c040d04, 0x02020000, 0x0010567f, 0x59340200,
11360 0x8c000518, 0x02020000, 0x00105670, 0x59300c06,
11361 0x82040580, 0x00000006, 0x02020000, 0x00105610,
11362 0x59300414, 0x8c000516, 0x02020000, 0x0010567a,
11363 0x8c102508, 0x02020000, 0x0010a5b8, 0x59300808,
11364 0x4a025a06, 0x00000000, 0x800409c0, 0x02020000,
11365 0x001055e7, 0x592c0a0c, 0x48066202, 0x492e6008,
11366 0x0401f14d, 0x4df00000, 0x4203e000, 0x50000000,
11367 0x0402b00b, 0x835c0480, 0x00000020, 0x0400100d,
11368 0x815eb840, 0x416a5800, 0x592ed000, 0x492fb007,
11369 0x497a5800, 0x497a5801, 0x0400b7f7, 0x59d80005,
11370 0x82000500, 0x43018780, 0x02020000, 0x00105846,
11371 0x5c03e000, 0x1c01f000, 0x4df00000, 0x4203e000,
11372 0x50000000, 0x0402f00b, 0x835c0480, 0x00000020,
11373 0x0400100d, 0x815eb840, 0x416a5800, 0x592ed000,
11374 0x492fa807, 0x497a5800, 0x497a5801, 0x0400f7f7,
11375 0x59d40005, 0x82000500, 0x43018780, 0x02020000,
11376 0x0010583f, 0x5c03e000, 0x1c01f000, 0x4df00000,
11377 0x4203e000, 0x50000000, 0x59940024, 0x80000540,
11378 0x04000112, 0x4c000000, 0x42000000, 0x00001000,
11379 0x50000000, 0x82000480, 0x24320001, 0x04020015,
11380 0x42000800, 0x00000064, 0x80040840, 0x04000007,
11381 0x4a030000, 0x00000001, 0x40000000, 0x59800000,
11382 0x8c000500, 0x040007f9, 0x04000008, 0x42000800,
11383 0x00007a01, 0x50040000, 0x8c000510, 0x04000003,
11384 0x84000510, 0x44000800, 0x4a030000, 0x00000000,
11385 0x59e00002, 0x8c00051e, 0x0402001b, 0x42000000,
11386 0x00001000, 0x50000000, 0x82000480, 0x24320002,
11387 0x04020015, 0x42000800, 0x00000064, 0x80040840,
11388 0x04000007, 0x4a030000, 0x00000001, 0x40000000,
11389 0x59800000, 0x8c000500, 0x040007f9, 0x04000008,
11390 0x42000800, 0x00007a17, 0x50040000, 0x8c00050e,
11391 0x04020003, 0x8400054e, 0x44000800, 0x4a030000,
11392 0x00000000, 0x5c000000, 0x5994781a, 0x48032825,
11393 0x803c0480, 0x04001004, 0x04000003, 0x4803281a,
11394 0x0401f022, 0x41787800, 0x803c7800, 0x82000400,
11395 0x000003e8, 0x040027fd, 0x4803281a, 0x59a80024,
11396 0x803c1400, 0x480b5024, 0x803c0040, 0x04000002,
11397 0x483fc857, 0x59e40852, 0x59a80025, 0x80040580,
11398 0x04000004, 0x480bc857, 0x59e40052, 0x48035025,
11399 0x59940026, 0x803c0400, 0x48032826, 0x0201f800,
11400 0x00106021, 0x59940000, 0x82000580, 0x00000000,
11401 0x04020006, 0x59940026, 0x48032827, 0x497b2826,
11402 0x4a032800, 0x00000001, 0x4c0c0000, 0x59940007,
11403 0x80000d40, 0x0400001d, 0x59941006, 0x59940025,
11404 0x80081c80, 0x04001004, 0x04000003, 0x480f2806,
11405 0x0401f016, 0x80040840, 0x48072807, 0x82040580,
11406 0x000003e8, 0x04020007, 0x4c040000, 0x4c0c0000,
11407 0x59940008, 0x0801f800, 0x5c001800, 0x5c000800,
11408 0x800409c0, 0x04020004, 0x59940008, 0x0801f800,
11409 0x0401f006, 0x400c0000, 0x820c1c00, 0x0000000a,
11410 0x040027ed, 0x480f2806, 0x5c001800, 0x4d180000,
11411 0x59c40008, 0x8c000534, 0x04020025, 0x417a3000,
11412 0x83947c00, 0x00000009, 0x583c0001, 0x80000d40,
11413 0x04020008, 0x823c7c00, 0x00000003, 0x811a3000,
11414 0x83180580, 0x00000005, 0x040207f8, 0x0401f018,
11415 0x583c1000, 0x59940025, 0x80080480, 0x04001005,
11416 0x04000004, 0x48007800, 0x80000040, 0x04021010,
11417 0x80040840, 0x48047801, 0x04000008, 0x82000400,
11418 0x0000000a, 0x48007800, 0x040027fa, 0x82040500,
11419 0x0000007f, 0x0401f7e8, 0x583c0002, 0x4c3c0000,
11420 0x0801f800, 0x5c007800, 0x0401f7e3, 0x5c023000,
11421 0x59940019, 0x80001540, 0x04000008, 0x04002007,
11422 0x59940025, 0x80080480, 0x497b2819, 0x04001003,
11423 0x04000002, 0x48032819, 0x59940004, 0x80000d40,
11424 0x0400002a, 0x4c040000, 0x5994001c, 0x80000d40,
11425 0x04000013, 0x5994101b, 0x59940025, 0x80080480,
11426 0x04001005, 0x04000004, 0x4803281b, 0x80000040,
11427 0x0402100b, 0x80040840, 0x4807281c, 0x04020004,
11428 0x5994001d, 0x0801f800, 0x0401f005, 0x82000400,
11429 0x0000000a, 0x4803281b, 0x040027f7, 0x5c000800,
11430 0x59941003, 0x59940025, 0x80080480, 0x04001005,
11431 0x04000004, 0x48032803, 0x80000040, 0x0402100b,
11432 0x80040840, 0x48072804, 0x04020004, 0x59940005,
11433 0x0801f800, 0x0401f005, 0x82000400, 0x0000000a,
11434 0x48032803, 0x040027f7, 0x5994001f, 0x80000d40,
11435 0x04000013, 0x5994101e, 0x59940025, 0x80080480,
11436 0x04001005, 0x04000004, 0x4803281e, 0x80000040,
11437 0x0402100b, 0x80040840, 0x4807281f, 0x04020004,
11438 0x59940020, 0x0801f800, 0x0401f005, 0x82000400,
11439 0x00000001, 0x4803281e, 0x040027f7, 0x59940022,
11440 0x80000d40, 0x04000013, 0x59941021, 0x59940025,
11441 0x80080480, 0x04001005, 0x04000004, 0x48032821,
11442 0x80000040, 0x0402100b, 0x80040840, 0x48072822,
11443 0x04020004, 0x59940023, 0x0801f800, 0x0401f005,
11444 0x82000400, 0x0000000a, 0x48032821, 0x040027f7,
11445 0x59940824, 0x59940025, 0x80040480, 0x02001800,
11446 0x001005d8, 0x48032824, 0x59940000, 0x0c01f001,
11447 0x00105fb5, 0x00105fb7, 0x00105fdd, 0x59940024,
11448 0x80000000, 0x48032824, 0x4203e000, 0x70000000,
11449 0x1c01f000, 0x592c0406, 0x800000c2, 0x800008c4,
11450 0x80040c00, 0x592c040a, 0x48066206, 0x82000d00,
11451 0x00000003, 0x02000000, 0x0010615e, 0x8c000500,
11452 0x04020029, 0x8c00051e, 0x02000000, 0x00106139,
11453 0x82000d00, 0x000000c0, 0x02020000, 0x0010612f,
11454 0x82000d00, 0x00002020, 0x02020000, 0x0010612c,
11455 0x813e79c0, 0x02020000, 0x0010612c, 0x592c0c0c,
11456 0x800409c0, 0x02020000, 0x0010612c, 0x59300a03,
11457 0x82040d80, 0x00000007, 0x02020000, 0x0010612c,
11458 0x4a026203, 0x00000003, 0x4a026403, 0x00000043,
11459 0x0201f800, 0x000200c9, 0x82080d40, 0x80003465,
11460 0x48066004, 0x497a6000, 0x59bc00ea, 0x8c000516,
11461 0x040207fe, 0x83300400, 0xa0000000, 0x480378e1,
11462 0x1c01f000, 0x8c000502, 0x02020000, 0x00106181,
11463 0x8c00051e, 0x0400000e, 0x82000d00, 0x000000c0,
11464 0x04000005, 0x82040d80, 0x000000c0, 0x02020000,
11465 0x00106186, 0x82000d00, 0x00002020, 0x82040d80,
11466 0x00002020, 0x02000000, 0x0010614d, 0x592c0207,
11467 0x80000040, 0x02020000, 0x00106157, 0x592c180d,
11468 0x800c19c0, 0x02020000, 0x00106157, 0x592c180f,
11469 0x59300007, 0x82000540, 0x00000011, 0x480e6011,
11470 0x48026007, 0x4a026203, 0x00000004, 0x4a026403,
11471 0x00000042, 0x42000800, 0x80002001, 0x0401f02a,
11472 0x5c000000, 0x4c000000, 0x4803c857, 0x4807c857,
11473 0x0401f003, 0x42000800, 0x00000001, 0x59325808,
11474 0x832c0500, 0x00ff0000, 0x0400000d, 0x592c0000,
11475 0x48065a06, 0x48026008, 0x592c040a, 0x8c000510,
11476 0x04020008, 0x0201f800, 0x000202ce, 0x417a7800,
11477 0x59300008, 0x80025d40, 0x0402078f, 0x1c01f000,
11478 0x456a5800, 0x412ed000, 0x815eb800, 0x59c80000,
11479 0x82000540, 0x00001200, 0x48039000, 0x0401f7f4,
11480 0x59840000, 0x80000540, 0x04020002, 0x1c01f000,
11481 0x59840003, 0x80000540, 0x02020000, 0x001061fe,
11482 0x1c01f000, 0x48066004, 0x59bc00ea, 0x8c000516,
11483 0x040207fe, 0x83300400, 0x40000000, 0x480378e1,
11484 0x1c01f000, 0x59bc00ea, 0x82001500, 0xb0000018,
11485 0x02020000, 0x00106c81, 0x8c000510, 0x0400002a,
11486 0x59bc10e0, 0x82080500, 0xfffff000, 0x0402000a,
11487 0x80080108, 0x820a3500, 0x0000000f, 0x4803c857,
11488 0x1201f000, 0x00106c87, 0x84000510, 0x48026004,
11489 0x0401f016, 0x840a653e, 0x59300004, 0x8c000520,
11490 0x040007fa, 0x82000500, 0xfffefeff, 0x48026004,
11491 0x8c08153e, 0x04020005, 0x42027000, 0x00000013,
11492 0x0401f859, 0x0401f009, 0x59300004, 0x8c000514,
11493 0x04000003, 0x0401ffb0, 0x0401f02f, 0x42027000,
11494 0x00000049, 0x0401f850, 0x59bc00ea, 0x82001500,
11495 0xb0000018, 0x02020000, 0x00106c81, 0x8c000510,
11496 0x040207d8, 0x1c01f000, 0x83640480, 0x00000010,
11497 0x0400101a, 0x41626000, 0x41580000, 0x59300a03,
11498 0x82040d80, 0x00000000, 0x04000008, 0x83326400,
11499 0x00000024, 0x81300c80, 0x040017f9, 0x42026000,
11500 0x0010d1c0, 0x0401f7f6, 0x8166c840, 0x83300c00,
11501 0x00000024, 0x80040480, 0x04021005, 0x4006c000,
11502 0x4a026203, 0x00000008, 0x1c01f000, 0x837ac540,
11503 0x0010d1c0, 0x0401f7fb, 0x42000000, 0x0010b854,
11504 0x0201f800, 0x0010aa47, 0x4967c857, 0x80026580,
11505 0x1c01f000, 0x83300480, 0x0010d1c0, 0x02001800,
11506 0x001005d8, 0x41580000, 0x81300480, 0x0402100c,
11507 0x04011000, 0x457a6000, 0x4a026202, 0x0000ffff,
11508 0x83300400, 0x00000003, 0x4803c840, 0x4a03c842,
11509 0x00000021, 0x8166c800, 0x1c01f000, 0x41540000,
11510 0x81300480, 0x02021800, 0x001005d8, 0x04011000,
11511 0x457a6000, 0x4a026202, 0x0000ffff, 0x83300400,
11512 0x00000003, 0x4803c840, 0x4a03c842, 0x00000021,
11513 0x59a80066, 0x49335065, 0x80000000, 0x48035066,
11514 0x1c01f000, 0x4d340000, 0x59326809, 0x59300406,
11515 0x82000500, 0x0000001f, 0x0c01f803, 0x5c026800,
11516 0x1c01f000, 0x00107966, 0x00107979, 0x00107993,
11517 0x000207c9, 0x001098f1, 0x0010990c, 0x0002083e,
11518 0x00107966, 0x00107979, 0x001064ee, 0x001079ac,
11519 0x00107966, 0x00107966, 0x00107966, 0x00107966,
11520 0x00107966, 0x001095a1, 0x0010a6c2, 0x00107966,
11521 0x00107966, 0x00107966, 0x00107966, 0x00107966,
11522 0x00107966, 0x00107966, 0x00107966, 0x00107966,
11523 0x00107966, 0x00107966, 0x00107966, 0x00107966,
11524 0x00107966, 0x59300203, 0x82000c80, 0x0000000e,
11525 0x02021800, 0x001005d8, 0x0c01f001, 0x001079aa,
11526 0x00108592, 0x000207dd, 0x00108720, 0x001087b9,
11527 0x001079aa, 0x001079aa, 0x001079aa, 0x00108577,
11528 0x001079aa, 0x001079aa, 0x001079aa, 0x001079aa,
11529 0x00108985, 0x83380480, 0x00000058, 0x04021007,
11530 0x83380480, 0x00000040, 0x04001004, 0x4d2c0000,
11531 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010861b,
11532 0x0010861b, 0x0010861b, 0x0010861b, 0x0010861b,
11533 0x0010861d, 0x001086bd, 0x0010861b, 0x0010861b,
11534 0x0010861b, 0x0010861b, 0x0010861b, 0x0010861b,
11535 0x0010861b, 0x0010861b, 0x0010861b, 0x0010861b,
11536 0x0010861b, 0x0010861b, 0x001086c1, 0x000207ff,
11537 0x0010861b, 0x001086c0, 0x001086c2, 0x59325808,
11538 0x59300811, 0x59301402, 0x59340200, 0x8c00050e,
11539 0x0402001c, 0x0401f826, 0x04000005, 0x4a025a04,
11540 0x00000103, 0x497a5c09, 0x0401f009, 0x4a025a04,
11541 0x00000103, 0x4a025a06, 0x00000000, 0x497a5c09,
11542 0x800409c0, 0x02020800, 0x00108785, 0x48065807,
11543 0x480a5c06, 0x0201f800, 0x000202c1, 0x5934000f,
11544 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
11545 0x80000540, 0x02020800, 0x00020253, 0x0401f75e,
11546 0x592c020a, 0x8c000502, 0x040007e9, 0x800409c0,
11547 0x040007e7, 0x592c0208, 0x8c00050e, 0x040207e4,
11548 0x4933c857, 0x0201f000, 0x0010920f, 0x592c020a,
11549 0x8c000500, 0x04000010, 0x59300015, 0x592c380f,
11550 0x801c3c80, 0x0400000c, 0x4a025a06, 0x00000015,
11551 0x8c1c3d3e, 0x04000005, 0x4a025a06, 0x00000007,
11552 0x801c3880, 0x801c3800, 0x481fc857, 0x821c0d40,
11553 0x00000000, 0x1c01f000, 0x59300203, 0x82003480,
11554 0x0000000e, 0x02021800, 0x001005d8, 0x0c01f001,
11555 0x0010992b, 0x00020852, 0x00109fba, 0x00109fc8,
11556 0x0002086e, 0x0010992b, 0x0010a0a8, 0x0002088d,
11557 0x0010992b, 0x0010992b, 0x0010992b, 0x0010992b,
11558 0x0010992b, 0x0010992b, 0x83380580, 0x00000013,
11559 0x02020000, 0x00109f42, 0x59300403, 0x82027480,
11560 0x00000044, 0x02021800, 0x001005d8, 0x82000480,
11561 0x00000040, 0x02001800, 0x001005d8, 0x0c01f001,
11562 0x00109f9e, 0x00020864, 0x00109fa0, 0x00109fb2,
11563 0x59325808, 0x832c0500, 0x00ff0000, 0x04000005,
11564 0x592c0c0a, 0x8c040d1a, 0x02020000, 0x00109fad,
11565 0x0401fe91, 0x0401f710, 0x83380580, 0x00000048,
11566 0x04000007, 0x83380580, 0x00000053, 0x02000000,
11567 0x0010a04a, 0x0201f800, 0x001005d8, 0x5930001f,
11568 0x59301011, 0x59300809, 0x58040a00, 0x8c040d0e,
11569 0x02020000, 0x0010a026, 0x800811c0, 0x02020000,
11570 0x0010a033, 0x5930001f, 0x80000540, 0x02020000,
11571 0x0010a041, 0x59325808, 0x592c040a, 0x8c00051e,
11572 0x02000000, 0x0010a01c, 0x42027000, 0x00000041,
11573 0x0401f001, 0x83380480, 0x00000054, 0x02021800,
11574 0x001005d8, 0x83380480, 0x00000040, 0x02001000,
11575 0x0010a067, 0x0c01f001, 0x0010a073, 0x000208aa,
11576 0x0010a07f, 0x0010a086, 0x0010a073, 0x0010a073,
11577 0x0010a073, 0x0010a073, 0x0010a075, 0x0010a07a,
11578 0x0010a07a, 0x0010a073, 0x0010a073, 0x0010a073,
11579 0x0010a073, 0x0010a07a, 0x0010a073, 0x0010a07a,
11580 0x0010a073, 0x0010a075, 0x4a026203, 0x00000001,
11581 0x493a6403, 0x42000800, 0x80002042, 0x0401f672,
11582 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11583 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11584 0x00000000, 0x00000000, 0x00000000, 0x00000000,
11585 0x00000000, 0x00000000, 0x00000000, 0x14aa62b1,
11586 0x00000000, 0x00000000, 0x00000000, 0x00000005,
11587 0xfffffffb, 0x02800004, 0x00000000, 0x0000c000,
11588 0x0000071d, 0x073fca5a, 0x0705a5a5, 0x01928009,
11589 0x070ff0e1, 0x03800006, 0x04958010, 0x05308000,
11590 0x05008000, 0x0600902f, 0x04a004dc, 0x0202f051,
11591 0x042e4020, 0x018f021b, 0x033e5000, 0x03020000,
11592 0x078d0018, 0x0493041a, 0x0092041c, 0x038a0305,
11593 0x078b0303, 0x048e8010, 0x0678aae5, 0x06000001,
11594 0x07818174, 0x040010e6, 0x0448e0e6, 0x04818010,
11595 0x002fb008, 0x0448e0e6, 0x04818010, 0x060ff0e6,
11596 0x00580401, 0x054880ff, 0x04818010, 0x022a5001,
11597 0x030430d4, 0x06780043, 0x030e0000, 0x030450ff,
11598 0x06780043, 0x03019000, 0x058185c6, 0x027c0045,
11599 0x03020000, 0x06810037, 0x027c0045, 0x03040000,
11600 0x068100c7, 0x027c0045, 0x03080000, 0x0781061e,
11601 0x04908037, 0x029105c4, 0x010410a6, 0x0379ff41,
11602 0x037fffff, 0x072d6000, 0x07601241, 0x050f80ff,
11603 0x032fa009, 0x05600400, 0x050f80ff, 0x056c04ff,
11604 0x068105dc, 0x073fa009, 0x06000001, 0x0279ff02,
11605 0x0700ffff, 0x070ff0d1, 0x0179feff, 0x0700ffff,
11606 0x045c0402, 0x048185dc, 0x060ff0d0, 0x0179feff,
11607 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x078105be,
11608 0x05600e41, 0x050f80ff, 0x032fa069, 0x07480000,
11609 0x068105d0, 0x06780043, 0x070000f0, 0x0781005f,
11610 0x037c00ff, 0x06000010, 0x0781005f, 0x038005cc,
11611 0x0379ff00, 0x070fffff, 0x06780043, 0x07f00000,
11612 0x075a0000, 0x020ef001, 0x028605ce, 0x05484000,
11613 0x02a1819e, 0x062d6001, 0x002fb001, 0x070ff069,
11614 0x01868072, 0x060ff079, 0x055c0441, 0x06810010,
11615 0x012fb000, 0x060560fb, 0x03800078, 0x060ff079,
11616 0x02868198, 0x070ff069, 0x055c0441, 0x06810010,
11617 0x060560fb, 0x0400d0d0, 0x062d6002, 0x0648300d,
11618 0x06810086, 0x070ff0d1, 0x062d6001, 0x045c040b,
11619 0x06810089, 0x05488000, 0x04818086, 0x072e500c,
11620 0x00208001, 0x05a004e1, 0x02800010, 0x062d6001,
11621 0x07f00000, 0x07f00000, 0x070ff0d1, 0x0179feff,
11622 0x070000ff, 0x055c040c, 0x058180bb, 0x0007b001,
11623 0x03079041, 0x0307a000, 0x06600a79, 0x050f80ff,
11624 0x053fa80a, 0x06000010, 0x072d5003, 0x078d0096,
11625 0x0307c003, 0x0007d004, 0x0107e005, 0x0307f006,
11626 0x02080007, 0x00081008, 0x01082009, 0x0308300a,
11627 0x0008400b, 0x0308500c, 0x068d00a1, 0x0678007a,
11628 0x07f00000, 0x010880ff, 0x03386000, 0x03010000,
11629 0x072e6300, 0x020ef07f, 0x02860010, 0x070ff07d,
11630 0x0450047c, 0x050f80ff, 0x002fa819, 0x068d00ae,
11631 0x02080001, 0x00081002, 0x0448807a, 0x068100b5,
11632 0x0379ff03, 0x070000ff, 0x01082003, 0x068d00b6,
11633 0x02386004, 0x03010000, 0x072e6c00, 0x02800010,
11634 0x06780043, 0x070000f0, 0x078105d7, 0x050020ff,
11635 0x027c0002, 0x06000010, 0x078100c3, 0x038005d7,
11636 0x0700c0d1, 0x0379ff0c, 0x070000ff, 0x0380008e,
11637 0x0204a051, 0x06780043, 0x070000f0, 0x037c00ff,
11638 0x06000010, 0x0781816a, 0x072d6000, 0x019485c0,
11639 0x050fb056, 0x044880e6, 0x04818010, 0x060ff0d0,
11640 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
11641 0x078105be, 0x05a00212, 0x0349c0e4, 0x0781811d,
11642 0x070ff093, 0x050010ff, 0x070ff093, 0x045c0401,
11643 0x058180db, 0x02046092, 0x04002046, 0x04600202,
11644 0x00540401, 0x048280e6, 0x04500425, 0x070060ff,
11645 0x0730ffff, 0x0700000f, 0x0742000f, 0x05810190,
11646 0x07a005a6, 0x0648a002, 0x048180e9, 0x00047089,
11647 0x070ff047, 0x045c0443, 0x077800ff, 0x07f00000,
11648 0x0781818e, 0x07780047, 0x0500e000, 0x048185ad,
11649 0x070ff006, 0x01860117, 0x0179fe47, 0x0700000f,
11650 0x010480ff, 0x056c7048, 0x06818102, 0x007a0d4a,
11651 0x04003801, 0x0220f001, 0x0180010f, 0x07608e48,
11652 0x034a60ff, 0x0700f0ff, 0x074b88ff, 0x037000ff,
11653 0x07000600, 0x05500448, 0x074d00ff, 0x045a044a,
11654 0x0304a0ff, 0x070ff00f, 0x01540406, 0x05820117,
11655 0x04950120, 0x05a001bd, 0x02868123, 0x0134bfff,
11656 0x070fffff, 0x0104102e, 0x050fd041, 0x00800126,
11657 0x0595011d, 0x05a001bd, 0x0186011d, 0x0202f00e,
11658 0x052e4030, 0x040fd02f, 0x070fc0ff, 0x05a00218,
11659 0x02800010, 0x0400e02f, 0x042e4020, 0x0202f051,
11660 0x0004100e, 0x0004b00e, 0x050fd041, 0x024a6c46,
11661 0x04500423, 0x050070ff, 0x03620024, 0x050080ff,
11662 0x04004046, 0x0700500f, 0x03206000, 0x05601048,
11663 0x0700a0ff, 0x0700900a, 0x070ff005, 0x04500446,
11664 0x00540425, 0x04820157, 0x05601622, 0x050f80ff,
11665 0x063fa032, 0x06000002, 0x03203000, 0x01204000,
11666 0x03205000, 0x0120b000, 0x0320c000, 0x07601441,
11667 0x050f80ff, 0x043fa852, 0x06000001, 0x070ff056,
11668 0x056c02ff, 0x050fb0ff, 0x070560ff, 0x03079041,
11669 0x05600e41, 0x050f80ff, 0x073fa011, 0x0600003d,
11670 0x06780043, 0x07f00000, 0x065a007a, 0x010880ff,
11671 0x04a001b6, 0x058d0150, 0x0208a04a, 0x0108b04b,
11672 0x02386001, 0x03010000, 0x072e6300, 0x028000a8,
11673 0x0500d00a, 0x05500405, 0x014a68ff, 0x070090ff,
11674 0x0154040a, 0x0700c0ff, 0x0600a023, 0x0500b024,
11675 0x02206001, 0x05601622, 0x050f80ff, 0x063fa04a,
11676 0x06000002, 0x05601022, 0x050f80ff, 0x043fa819,
11677 0x06000001, 0x0600a00d, 0x0180013c, 0x06780043,
11678 0x070000f0, 0x050010ff, 0x027c0001, 0x07000030,
11679 0x078105b4, 0x027c0001, 0x06000020, 0x078105b4,
11680 0x038005cc, 0x054880ff, 0x06810010, 0x070ff056,
11681 0x050fb0ff, 0x044880e5, 0x0581017d, 0x044880e6,
11682 0x04818010, 0x00800183, 0x056c02ff, 0x050fb0ff,
11683 0x070560ff, 0x072e5300, 0x044880e6, 0x04818010,
11684 0x072d5003, 0x06780043, 0x07f00000, 0x010880ff,
11685 0x058d0187, 0x03386005, 0x03010000, 0x033e6000,
11686 0x0700000c, 0x052e5200, 0x02800010, 0x0120918e,
11687 0x018004e4, 0x01209190, 0x018004e4, 0x00209192,
11688 0x018004e4, 0x03209000, 0x018004e4, 0x01209196,
11689 0x018004e4, 0x00209198, 0x018004e4, 0x02493075,
11690 0x06810510, 0x0120919a, 0x018004e4, 0x06601e01,
11691 0x050f80ff, 0x063fa029, 0x06000008, 0x02015010,
11692 0x02016051, 0x00017051, 0x00011051, 0x05601a41,
11693 0x050f80ff, 0x053fa83a, 0x06000008, 0x05600e41,
11694 0x050f80ff, 0x01464000, 0x032fa00a, 0x07006011,
11695 0x05007012, 0x04008013, 0x07009014, 0x0600a015,
11696 0x0400b016, 0x0700c017, 0x07c00000, 0x072d5003,
11697 0x06601479, 0x050f80ff, 0x048d01b9, 0x063fa051,
11698 0x0600003e, 0x07c00000, 0x06005051, 0x0400e02c,
11699 0x0660060e, 0x050f80ff, 0x032fa009, 0x0379ff00,
11700 0x070000ff, 0x076c0000, 0x058101dd, 0x0660480e,
11701 0x0500e0ff, 0x034000ff, 0x01540427, 0x0582020a,
11702 0x03400005, 0x070ff005, 0x055c0428, 0x0481020e,
11703 0x01680e05, 0x056c0405, 0x068181bf, 0x040f8029,
11704 0x053fa809, 0x07000024, 0x06600649, 0x050f80ff,
11705 0x032fa009, 0x0379ff00, 0x070000ff, 0x076c0000,
11706 0x068181bf, 0x0400e049, 0x0340002d, 0x050f802b,
11707 0x053fa80a, 0x06000016, 0x0660480e, 0x0302c0ff,
11708 0x034000ff, 0x01540427, 0x0582020c, 0x072d6000,
11709 0x0460040e, 0x050f80ff, 0x0104e0d1, 0x0379ff4e,
11710 0x0700ffff, 0x062d6002, 0x032fa009, 0x0004d0d0,
11711 0x074b004d, 0x07780000, 0x07ffff00, 0x055a044d,
11712 0x070000ff, 0x00201008, 0x04002051, 0x06003051,
11713 0x05304000, 0x07000060, 0x03205009, 0x07006022,
11714 0x0460040e, 0x050f80ff, 0x032fa03a, 0x06603c0e,
11715 0x050f80ff, 0x073fa00a, 0x07000027, 0x050010d1,
11716 0x0460320e, 0x050f80ff, 0x012fa80a, 0x060ff00e,
11717 0x055c042e, 0x04810210, 0x07c00000, 0x0400e026,
11718 0x008001cb, 0x0202c026, 0x008001e6, 0x0500e02e,
11719 0x008001e6, 0x0400e051, 0x01800209, 0x0349c0e4,
11720 0x04810215, 0x07c00000, 0x013e4000, 0x070c0000,
11721 0x07c00000, 0x013e4000, 0x03080000, 0x07c00000,
11722 0x009702f4, 0x022a5002, 0x0790821d, 0x00910291,
11723 0x030400a6, 0x0678aae5, 0x06000001, 0x00a1860e,
11724 0x06600c40, 0x050f80ff, 0x032fa021, 0x074b0000,
11725 0x076c0600, 0x07818293, 0x05600403, 0x050f80ff,
11726 0x073fa009, 0x06000002, 0x0279ff04, 0x0700ffff,
11727 0x010440d7, 0x0179fe44, 0x0700ffff, 0x045c0404,
11728 0x07818295, 0x0349f044, 0x0681829e, 0x02495001,
11729 0x06818297, 0x060ff079, 0x045c0440, 0x0781823c,
11730 0x0644f07a, 0x002fb008, 0x060ff079, 0x045c0440,
11731 0x07818241, 0x0644f07a, 0x002fb008, 0x0648f001,
11732 0x07818288, 0x04600e40, 0x050f80ff, 0x06480001,
11733 0x04810257, 0x0448e001, 0x04810273, 0x02460001,
11734 0x0644f001, 0x012fa80a, 0x04008040, 0x05a004ee,
11735 0x0286828c, 0x05a004d8, 0x062da001, 0x013e4000,
11736 0x06000080, 0x06930013, 0x02920013, 0x02800010,
11737 0x0644f001, 0x012fa80a, 0x020ef002, 0x00860275,
11738 0x04600840, 0x050f80ff, 0x053fa809, 0x06000002,
11739 0x05780105, 0x00800440, 0x017c0105, 0x05000400,
11740 0x06818275, 0x06601e02, 0x050f80ff, 0x053fa809,
11741 0x06000002, 0x04602a40, 0x050f80ff, 0x070ff005,
11742 0x053fa809, 0x06000002, 0x055c0405, 0x06818275,
11743 0x04008040, 0x0045e008, 0x05a004d8, 0x00800251,
11744 0x0644f001, 0x012fa80a, 0x050020d8, 0x04600440,
11745 0x050f80ff, 0x073fa00a, 0x06000001, 0x06480001,
11746 0x07818281, 0x05308000, 0x03040000, 0x06009040,
11747 0x04a004dc, 0x00800251, 0x06a0060e, 0x054b0800,
11748 0x056a0700, 0x06600c40, 0x050f80ff, 0x032fa00a,
11749 0x00800251, 0x013e4000, 0x06000080, 0x01209288,
11750 0x018004e4, 0x06009008, 0x05308000, 0x05004000,
11751 0x04a004dc, 0x00800251, 0x02209002, 0x008002e5,
11752 0x03209000, 0x008002e5, 0x02209004, 0x008002e5,
11753 0x04a002fd, 0x062da001, 0x05308000, 0x05002000,
11754 0x06009040, 0x04a004dc, 0x02800013, 0x013e4000,
11755 0x06000080, 0x02495001, 0x078182db, 0x04600840,
11756 0x050f80ff, 0x053fa809, 0x06000001, 0x0721f000,
11757 0x0349f003, 0x058102aa, 0x0245f01f, 0x06000002,
11758 0x018602db, 0x07601400, 0x050f80ff, 0x012fa809,
11759 0x06480001, 0x058102db, 0x06602440, 0x050f80ff,
11760 0x012fa809, 0x020ef001, 0x038682db, 0x019b02db,
11761 0x050020d8, 0x062da001, 0x06303002, 0x05000430,
11762 0x04600440, 0x050f80ff, 0x073fa012, 0x06000001,
11763 0x028f82bf, 0x050040d8, 0x062da001, 0x07601e00,
11764 0x050f80ff, 0x073fa009, 0x06000001, 0x060ff004,
11765 0x00540402, 0x048202d9, 0x06005051, 0x06006051,
11766 0x06602240, 0x050f80ff, 0x063fa01a, 0x06000002,
11767 0x06600a40, 0x050f80ff, 0x073fa00a, 0x07000003,
11768 0x060ff040, 0x045a041f, 0x010eb0ff, 0x06930013,
11769 0x02920013, 0x02800010, 0x04004002, 0x018002c9,
11770 0x04a002fd, 0x062da001, 0x05308000, 0x07005000,
11771 0x06009040, 0x04a004dc, 0x050080d8, 0x05a004e1,
11772 0x062da001, 0x02800013, 0x050fd009, 0x050fd041,
11773 0x013e4000, 0x06000080, 0x05308000, 0x03013000,
11774 0x04a004dc, 0x010440d7, 0x0349f044, 0x048102f2,
11775 0x062da001, 0x008f02f2, 0x03e00000, 0x062da001,
11776 0x02800013, 0x0249c0e5, 0x06810013, 0x062da001,
11777 0x07f00000, 0x07f00000, 0x033e5000, 0x070c0000,
11778 0x018f02f6, 0x03800011, 0x050020d8, 0x04600440,
11779 0x050f80ff, 0x073fa00a, 0x06000001, 0x07c00000,
11780 0x002fb001, 0x03800306, 0x012fb000, 0x03075087,
11781 0x068d0307, 0x03386000, 0x03020000, 0x04482075,
11782 0x06810352, 0x0648a0e6, 0x07810347, 0x0642007f,
11783 0x06810345, 0x0340007e, 0x060ff038, 0x0154047e,
11784 0x02d00334, 0x0560027d, 0x050f80ff, 0x032fa009,
11785 0x030ef000, 0x02860504, 0x0107d000, 0x05600800,
11786 0x050f80ff, 0x032fa009, 0x03681e00, 0x04500420,
11787 0x050f80ff, 0x073fa009, 0x0700003f, 0x03800311,
11788 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
11789 0x078d0327, 0x02080001, 0x00081002, 0x0448807a,
11790 0x0781032e, 0x0379ff03, 0x070000ff, 0x01082003,
11791 0x068d032f, 0x02386004, 0x03010000, 0x072e6c00,
11792 0x02800352, 0x0380033a, 0x0380033c, 0x0280033e,
11793 0x02800340, 0x03800342, 0x03800344, 0x0727c005,
11794 0x02800323, 0x0627c008, 0x02800323, 0x0627c00b,
11795 0x02800323, 0x0627c00e, 0x02800323, 0x0727c011,
11796 0x02800323, 0x03800314, 0x052e6800, 0x02800352,
11797 0x044880e6, 0x07810533, 0x052e6200, 0x070ff088,
11798 0x0179feff, 0x070fffff, 0x04818501, 0x060ff083,
11799 0x0086836d, 0x033e6000, 0x07000003, 0x068d0352,
11800 0x07286000, 0x07f00000, 0x078d0355, 0x038c0306,
11801 0x0648c0e6, 0x05818372, 0x0448e0e6, 0x0781036a,
11802 0x004920e6, 0x07810365, 0x07a0056f, 0x05001088,
11803 0x00700101, 0x03100000, 0x00088001, 0x033e6000,
11804 0x07000088, 0x03800560, 0x02386001, 0x07030000,
11805 0x033e6000, 0x06000008, 0x028003f1, 0x02799075,
11806 0x0500040f, 0x06810010, 0x06601479, 0x050080ff,
11807 0x06309052, 0x0600003e, 0x02800376, 0x06602279,
11808 0x050080ff, 0x05309812, 0x07000041, 0x0648007a,
11809 0x0781037e, 0x04488075, 0x0581837e, 0x040f8008,
11810 0x070fa009, 0x0049107a, 0x01a183f3, 0x00798075,
11811 0x06000507, 0x05818521, 0x0448b075, 0x06810385,
11812 0x02493075, 0x0681050e, 0x0249c0e6, 0x048183e0,
11813 0x0648c0e6, 0x0581839a, 0x068d0389, 0x02386001,
11814 0x07030000, 0x0049107a, 0x07810390, 0x020ef083,
11815 0x0386039a, 0x06483075, 0x068103ef, 0x0678007a,
11816 0x07000035, 0x03a184cf, 0x05308000, 0x07060000,
11817 0x06009079, 0x04a004dc, 0x028003ef, 0x0448807a,
11818 0x0681039e, 0x06483075, 0x058104f9, 0x0448d07a,
11819 0x068103a2, 0x06483075, 0x058104f9, 0x068d03a2,
11820 0x02386001, 0x07030000, 0x0444e07a, 0x0648307a,
11821 0x048183c7, 0x0448707a, 0x068103ea, 0x0648f07a,
11822 0x078103b2, 0x05a004cf, 0x04008079, 0x05a004ee,
11823 0x008683c2, 0x05a004d8, 0x028003ef, 0x0560107b,
11824 0x050f80ff, 0x032fa009, 0x0349c000, 0x058183c0,
11825 0x04600e79, 0x050f80ff, 0x073fa00a, 0x0600003d,
11826 0x06600a79, 0x050f80ff, 0x053fa80a, 0x06000010,
11827 0x028003ef, 0x0046e07a, 0x028003ea, 0x06009008,
11828 0x05308000, 0x05004000, 0x04a004dc, 0x028003ef,
11829 0x0560167b, 0x050f80ff, 0x032fa011, 0x070ff000,
11830 0x04500401, 0x030460ff, 0x060ff025, 0x00540446,
11831 0x078203d1, 0x030460ff, 0x04092046, 0x05a00218,
11832 0x06600679, 0x050f80ff, 0x00201007, 0x012fa80a,
11833 0x0046047a, 0x034630ff, 0x050020ff, 0x06003051,
11834 0x04600e79, 0x050f80ff, 0x073fa012, 0x06000001,
11835 0x028003ef, 0x033e6a00, 0x0202000e, 0x02079051,
11836 0x07000088, 0x078d03e4, 0x0744c000, 0x01088000,
11837 0x03386006, 0x03010000, 0x02800010, 0x05a004cf,
11838 0x05308000, 0x03020000, 0x06009079, 0x04a004dc,
11839 0x033e6a00, 0x0302000a, 0x02079051, 0x02800010,
11840 0x04603e79, 0x050f80ff, 0x032fa009, 0x070ff000,
11841 0x0186040c, 0x057dfeff, 0x07ffffff, 0x0581040c,
11842 0x050f8000, 0x012fa811, 0x0079fe02, 0x070000ff,
11843 0x077d66ff, 0x060000dc, 0x0781840c, 0x060ff001,
11844 0x0286840d, 0x064b0002, 0x06420002, 0x060ff002,
11845 0x05500400, 0x050f80ff, 0x05004084, 0x073fa00a,
11846 0x06000002, 0x07c00000, 0x04600201, 0x050f80ff,
11847 0x073fa009, 0x06000001, 0x0079fe02, 0x070000ff,
11848 0x077d72ff, 0x070000dd, 0x0781840c, 0x064b0002,
11849 0x06420002, 0x06000001, 0x01800406, 0x0605004c,
11850 0x0180041e, 0x0493041a, 0x04a004d5, 0x054bc450,
11851 0x05810421, 0x01d00422, 0x01800421, 0x00800432,
11852 0x00800434, 0x00800432, 0x008004a7, 0x0180043f,
11853 0x00800434, 0x01800471, 0x00800432, 0x00800432,
11854 0x008004ab, 0x00800432, 0x018004af, 0x008004c4,
11855 0x01800488, 0x00800432, 0x00800432, 0x00209432,
11856 0x018004e4, 0x0379ff50, 0x070fffff, 0x060ff079,
11857 0x055c0450, 0x048104a4, 0x002fb008, 0x060ff079,
11858 0x055c0450, 0x058104a3, 0x04a004c7, 0x0180049c,
11859 0x0179fe50, 0x070fffff, 0x070050ff, 0x060ff079,
11860 0x055c0405, 0x04810449, 0x002fb008, 0x060ff079,
11861 0x055c0405, 0x078184a0, 0x070ff087, 0x017980ff,
11862 0x06000507, 0x06818451, 0x02203040, 0x05002087,
11863 0x0049d002, 0x0481046b, 0x04930458, 0x01257000,
11864 0x073c3fff, 0x0700000f, 0x052e4003, 0x072e5030,
11865 0x0304c050, 0x02400057, 0x06740057, 0x06000002,
11866 0x06820016, 0x04002083, 0x07003084, 0x04004085,
11867 0x06602279, 0x050f80ff, 0x063fa01a, 0x06000001,
11868 0x05a004cf, 0x07a00578, 0x033e6a00, 0x0302000a,
11869 0x062e5020, 0x003e4002, 0x07000a00, 0x028003f1,
11870 0x07420003, 0x0781844e, 0x00798002, 0x06000507,
11871 0x06818451, 0x0180045c, 0x05930478, 0x01257000,
11872 0x073c3fff, 0x0700000f, 0x052e4003, 0x072e5030,
11873 0x0304c050, 0x067800e6, 0x07000041, 0x0581047d,
11874 0x07a00581, 0x04818016, 0x002fb008, 0x067800e6,
11875 0x07000041, 0x04810483, 0x07a00581, 0x04818016,
11876 0x062e5020, 0x003e4002, 0x07000a00, 0x03e00000,
11877 0x02800010, 0x0379ff50, 0x070fffff, 0x060ff079,
11878 0x055c0450, 0x0781848e, 0x0245507a, 0x002fb008,
11879 0x060ff079, 0x055c0450, 0x07818493, 0x0245507a,
11880 0x002fb008, 0x05600e50, 0x050f80ff, 0x012fa809,
11881 0x02455001, 0x05600e50, 0x050f80ff, 0x012fa80a,
11882 0x0080049d, 0x002fb008, 0x003e4002, 0x07000a00,
11883 0x02800016, 0x079384a3, 0x062e5020, 0x042e4002,
11884 0x002fb008, 0x013e4000, 0x05000e00, 0x02800016,
11885 0x0179fe50, 0x070fffff, 0x010210ff, 0x02800016,
11886 0x0179fe50, 0x070fffff, 0x050340ff, 0x0080049d,
11887 0x0179fe50, 0x070fffff, 0x0102e0ff, 0x0760282e,
11888 0x050f80ff, 0x05222000, 0x07223000, 0x05224000,
11889 0x07225000, 0x07226000, 0x05227000, 0x05228000,
11890 0x07229000, 0x0722a000, 0x0522b000, 0x063fa051,
11891 0x07000011, 0x0202c026, 0x0522d000, 0x052e400c,
11892 0x02800016, 0x030430d4, 0x062e5008, 0x00800176,
11893 0x05600e50, 0x050f80ff, 0x032fa009, 0x03460000,
11894 0x018004d2, 0x0246007a, 0x0045207a, 0x008004d0,
11895 0x0246007a, 0x0600007a, 0x04600e79, 0x050f80ff,
11896 0x032fa00a, 0x07c00000, 0x029284d5, 0x070500e1,
11897 0x07c00000, 0x0245f008, 0x048404d9, 0x020e0008,
11898 0x07c00000, 0x070ff009, 0x065a0008, 0x058404de,
11899 0x020e0008, 0x07c00000, 0x058404e1, 0x020e0008,
11900 0x07c00000, 0x05308000, 0x0500d000, 0x04a004dc,
11901 0x04a004e9, 0x02800010, 0x052e4300, 0x072e500c,
11902 0x073c3fff, 0x0700000f, 0x07c00000, 0x06602208,
11903 0x050f80ff, 0x032fa011, 0x076a0000, 0x068184f7,
11904 0x066a0001, 0x048104f7, 0x04002051, 0x07c00000,
11905 0x00202001, 0x07c00000, 0x0648307a, 0x00a18608,
11906 0x05a004cc, 0x05308000, 0x05001000, 0x06009079,
11907 0x04a004dc, 0x03800560, 0x0249c0e6, 0x058104f9,
11908 0x0280036d, 0x0648307a, 0x07818196, 0x05a004cf,
11909 0x05308000, 0x03013000, 0x03209006, 0x04a004dc,
11910 0x033e6000, 0x07030000, 0x02800345, 0x02490075,
11911 0x0781051e, 0x04002089, 0x04780102, 0x07f00000,
11912 0x05001088, 0x07a0056f, 0x04740101, 0x03100000,
11913 0x060ff002, 0x045c0401, 0x0481851f, 0x00088001,
11914 0x033e6000, 0x070000c0, 0x0380055c, 0x07f00000,
11915 0x0220951f, 0x018004e4, 0x0648307a, 0x07810527,
11916 0x06780075, 0x06000007, 0x0581852e, 0x06a00608,
11917 0x06486075, 0x06818194, 0x02490075, 0x0781819a,
11918 0x04487075, 0x05818536, 0x0280053d, 0x05308000,
11919 0x03010000, 0x06009079, 0x04a004dc, 0x02800010,
11920 0x0448e0e6, 0x04818352, 0x00800192, 0x05308000,
11921 0x0500e000, 0x06009079, 0x04a004dc, 0x04008089,
11922 0x05a004e1, 0x0380055c, 0x05a004cc, 0x05308000,
11923 0x0700f000, 0x06009079, 0x07000088, 0x06a00545,
11924 0x04a004dc, 0x02800010, 0x03386000, 0x07030000,
11925 0x07f00000, 0x078d0548, 0x033e6a00, 0x0202000e,
11926 0x02079051, 0x0448b075, 0x07810553, 0x02493075,
11927 0x07810553, 0x05301005, 0x03010000, 0x03800555,
11928 0x05301006, 0x03010000, 0x05002087, 0x06485002,
11929 0x05818555, 0x0744c000, 0x01088000, 0x02086001,
11930 0x07c00000, 0x05001088, 0x07a0056f, 0x0644c001,
11931 0x00088001, 0x033e6a00, 0x0202000e, 0x004920e6,
11932 0x05818565, 0x02079051, 0x078d0565, 0x060ff089,
11933 0x034990ff, 0x0781056c, 0x03386005, 0x03010000,
11934 0x02800010, 0x03386006, 0x03010000, 0x02800010,
11935 0x078d056f, 0x03386000, 0x07030000, 0x07f00000,
11936 0x068d0573, 0x070ff087, 0x074850ff, 0x05818574,
11937 0x07c00000, 0x078d0578, 0x02386001, 0x07030000,
11938 0x07f00000, 0x068d057c, 0x070ff087, 0x074850ff,
11939 0x0581857d, 0x07c00000, 0x05002087, 0x0049d002,
11940 0x05818590, 0x002fb008, 0x067800e6, 0x07000041,
11941 0x002fb008, 0x05818590, 0x07a005a6, 0x0448e002,
11942 0x07810593, 0x0648a002, 0x0481859d, 0x06486002,
11943 0x06810597, 0x02400057, 0x056a02ff, 0x07c00000,
11944 0x07a005a6, 0x06788102, 0x06000004, 0x05818590,
11945 0x04002089, 0x070ff0d4, 0x045c0402, 0x077800ff,
11946 0x07f00000, 0x05818590, 0x00202010, 0x038c0590,
11947 0x07f00000, 0x06420002, 0x0481859e, 0x07a00578,
11948 0x033e6a00, 0x0302000a, 0x07c00000, 0x07f00000,
11949 0x060ff0a2, 0x050020ff, 0x060ff0a2, 0x045c0402,
11950 0x048185a7, 0x07c00000, 0x05a00218, 0x03495047,
11951 0x078105b2, 0x0320901d, 0x02800604, 0x0220901f,
11952 0x02800604, 0x014980e4, 0x04818010, 0x013e4000,
11953 0x07003000, 0x05600e35, 0x050f80ff, 0x07a006fc,
11954 0x01208003, 0x05a004e1, 0x038005cc, 0x03209009,
11955 0x02800604, 0x03209011, 0x02800604, 0x02209007,
11956 0x02800604, 0x03209003, 0x02800604, 0x00498043,
11957 0x058185be, 0x00497043, 0x048185c2, 0x02209001,
11958 0x02800604, 0x0220900d, 0x02800604, 0x0320900f,
11959 0x02800604, 0x03493000, 0x068105d5, 0x027c0045,
11960 0x070a0000, 0x078105de, 0x0220900b, 0x02800604,
11961 0x02209013, 0x05308000, 0x01012000, 0x04a004dc,
11962 0x00800183, 0x03209005, 0x02800604, 0x072e500c,
11963 0x00208002, 0x05a004e1, 0x02800010, 0x02209015,
11964 0x02800604, 0x072d6000, 0x05308000, 0x05007000,
11965 0x07f00000, 0x070090d1, 0x0379ff09, 0x0700ffff,
11966 0x04a004dc, 0x03209017, 0x02800604, 0x033e5000,
11967 0x06000080, 0x02209019, 0x02800604, 0x072d6000,
11968 0x033e5000, 0x06000080, 0x07f00000, 0x060ff0d0,
11969 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
11970 0x04818010, 0x02400058, 0x00642058, 0x06820010,
11971 0x033e5000, 0x06000080, 0x04058051, 0x0320901b,
11972 0x02800604, 0x05308000, 0x01012000, 0x04a004dc,
11973 0x00800176, 0x05a00218, 0x05308000, 0x05008000,
11974 0x06009079, 0x04a004dc, 0x07c00000, 0x034900e4,
11975 0x05818618, 0x013e4000, 0x070000c0, 0x07f00000,
11976 0x034900e4, 0x04818616, 0x07c00000, 0x013e4000,
11977 0x06000080, 0x07f00000, 0x07f00000, 0x07f00000,
11978 0x034900e4, 0x06810610, 0x03800618, 0x072d6000,
11979 0x00498043, 0x06810632, 0x060ff0d0, 0x0179feff,
11980 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x058185e2,
11981 0x050f8030, 0x032fa009, 0x0379ff00, 0x0700ffff,
11982 0x070ff0d1, 0x0179feff, 0x0700ffff, 0x055c0400,
11983 0x078105e2, 0x04004051, 0x0280067a, 0x06a006dc,
11984 0x062d6001, 0x020ef004, 0x038605e4, 0x06600004,
11985 0x050f80ff, 0x032fa009, 0x074b0000, 0x05002000,
11986 0x0769ff00, 0x01640800, 0x078205e4, 0x01640e00,
11987 0x058285e4, 0x070ff036, 0x045c0404, 0x0581864d,
11988 0x072d6000, 0x050f8030, 0x032fa009, 0x0379ff00,
11989 0x0700ffff, 0x070ff0d1, 0x0179feff, 0x0700ffff,
11990 0x055c0400, 0x078105e2, 0x04482034, 0x078105ff,
11991 0x06483034, 0x058185ff, 0x070ff0d4, 0x077800ff,
11992 0x070000f0, 0x037c00ff, 0x06000010, 0x0681067a,
11993 0x06a006d6, 0x024900e5, 0x0681065d, 0x033e5000,
11994 0x06000080, 0x02800010, 0x04601c04, 0x050f80ff,
11995 0x053fa809, 0x06000020, 0x030ef041, 0x038605ee,
11996 0x062d6002, 0x05602a41, 0x050f80ff, 0x012fa809,
11997 0x060ff0d0, 0x074b00ff, 0x045c0401, 0x05818678,
11998 0x062d6001, 0x07602841, 0x050f80ff, 0x053fa809,
11999 0x06000001, 0x070ff0d1, 0x054b80ff, 0x074b0003,
12000 0x055c0403, 0x05818678, 0x033e5000, 0x06000080,
12001 0x0080070e, 0x07600041, 0x0280065e, 0x06a006d6,
12002 0x024900e5, 0x06810680, 0x033e5000, 0x06000080,
12003 0x02800010, 0x06a006c2, 0x030ef041, 0x028605f2,
12004 0x04058051, 0x072d6000, 0x05601041, 0x050f80ff,
12005 0x012fa809, 0x0600a0d0, 0x0500b0d1, 0x062d6001,
12006 0x07f00000, 0x07f00000, 0x0600c0d0, 0x0500d0d1,
12007 0x062d6002, 0x0279ff0d, 0x07ff0000, 0x044d800d,
12008 0x060ff0d0, 0x074b00ff, 0x065a000d, 0x06601201,
12009 0x050f80ff, 0x073fa022, 0x07000005, 0x0079fe0d,
12010 0x070000ff, 0x050020ff, 0x05602a41, 0x050f80ff,
12011 0x073fa00a, 0x06000001, 0x020ef004, 0x028606bf,
12012 0x04601c04, 0x050f80ff, 0x053fa809, 0x06000001,
12013 0x050f80ff, 0x053fa80a, 0x06000020, 0x07602841,
12014 0x050f80ff, 0x073fa009, 0x06000001, 0x0279ff02,
12015 0x070000ff, 0x0678000d, 0x0700ff00, 0x065a0002,
12016 0x07602841, 0x050f80ff, 0x073fa00a, 0x06000001,
12017 0x07600041, 0x050f80ff, 0x053fa80a, 0x06000001,
12018 0x07601241, 0x050f80ff, 0x073fa00a, 0x06000002,
12019 0x033e5000, 0x06000080, 0x0080070e, 0x040f8032,
12020 0x073fa011, 0x06000001, 0x060ff002, 0x055c0403,
12021 0x058186ca, 0x00041051, 0x07c00000, 0x04600402,
12022 0x04500432, 0x050f80ff, 0x053fa809, 0x06000020,
12023 0x00400402, 0x01680eff, 0x070030ff, 0x040f8032,
12024 0x053fa80a, 0x06000001, 0x07c00000, 0x024900e5,
12025 0x068106d9, 0x07c00000, 0x033e5000, 0x070000c0,
12026 0x07c00000, 0x05004036, 0x060000d0, 0x0179fe00,
12027 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x068106fb,
12028 0x070000d1, 0x0379ff00, 0x0700ffff, 0x06005051,
12029 0x060ff031, 0x05500405, 0x050f80ff, 0x073fa009,
12030 0x06000002, 0x020ef004, 0x038606f5, 0x04600404,
12031 0x050f80ff, 0x012fa809, 0x0079fe01, 0x0700ffff,
12032 0x055c0400, 0x068106fb, 0x01400405, 0x070050ff,
12033 0x057de0ff, 0x06000007, 0x058186e7, 0x04004051,
12034 0x07c00000, 0x072d6000, 0x07f00000, 0x07f00000,
12035 0x000110d0, 0x010120d1, 0x062d6001, 0x07f00000,
12036 0x07f00000, 0x020130d0, 0x010140d1, 0x062d6002,
12037 0x010170d4, 0x07f00000, 0x020150d0, 0x030160d1,
12038 0x053fa83a, 0x06000008, 0x07c00000, 0x07600c41,
12039 0x050f80ff, 0x073fa009, 0x06000001, 0x04780102,
12040 0x07ffff00, 0x046a0702, 0x050f80ff, 0x073fa00a,
12041 0x06000001, 0x05600e41, 0x050f80ff, 0x032fa069,
12042 0x03800053, 0xba6b4e34, 0x02800004, 0x00000000,
12043 0x00008000, 0x00000518, 0x040f801f, 0x012fa8c9,
12044 0x040f801f, 0x073fa081, 0x06000010, 0x03200005,
12045 0x07420000, 0x050fb000, 0x040f801f, 0x073fa011,
12046 0x06000038, 0x040f801f, 0x053fa859, 0x0700003a,
12047 0x050fe000, 0x0581800a, 0x0684003d, 0x04958019,
12048 0x030e0011, 0x072e4200, 0x03800014, 0x0291001f,
12049 0x050010c0, 0x04482001, 0x058180e8, 0x06483001,
12050 0x0781814b, 0x02920029, 0x068b0029, 0x018a0150,
12051 0x050010c0, 0x06780001, 0x050007c0, 0x06818223,
12052 0x06780001, 0x0500f800, 0x07818263, 0x03910030,
12053 0x040fe029, 0x03860030, 0x076c001d, 0x04810294,
12054 0x076c0a1d, 0x048102b9, 0x0292003d, 0x040fe02f,
12055 0x0286003d, 0x06000013, 0x050fb000, 0x066c0073,
12056 0x068103c2, 0x0297003d, 0x014920e4, 0x0481803d,
12057 0x03400000, 0x076c0a00, 0x04818034, 0x0796003f,
12058 0x03b900b8, 0x05908014, 0x010170e1, 0x07780017,
12059 0x03e00000, 0x06810092, 0x050010ff, 0x0179fe17,
12060 0x031fffff, 0x070000ff, 0x05600800, 0x050f80ff,
12061 0x073fa009, 0x06000001, 0x06780002, 0x02800040,
12062 0x037c00ff, 0x03800000, 0x0681005e, 0x0249f002,
12063 0x068100ab, 0x0448e002, 0x0681005e, 0x07600c00,
12064 0x050f80ff, 0x073fa009, 0x06000001, 0x06780002,
12065 0x07ffff00, 0x037c00ff, 0x05000200, 0x048180ab,
12066 0x064bd401, 0x03d00060, 0x038000a9, 0x02800068,
12067 0x03800072, 0x0280007c, 0x02800086, 0x03800090,
12068 0x038000a9, 0x038000a9, 0x050fe027, 0x0186806c,
12069 0x01028000, 0x0380006f, 0x07600027, 0x050f80ff,
12070 0x032fa00a, 0x01027000, 0x02400029, 0x028000ab,
12071 0x040fe025, 0x00868076, 0x03026000, 0x02800079,
12072 0x06600025, 0x050f80ff, 0x032fa00a, 0x03025000,
12073 0x02400029, 0x028000ab, 0x050fe021, 0x00868080,
12074 0x01022000, 0x02800083, 0x07600021, 0x050f80ff,
12075 0x032fa00a, 0x01021000, 0x02400029, 0x028000ab,
12076 0x040fe023, 0x0086808a, 0x01024000, 0x0380008d,
12077 0x06600023, 0x050f80ff, 0x032fa00a, 0x03023000,
12078 0x02400029, 0x028000ab, 0x06a000c8, 0x028000ab,
12079 0x01640817, 0x058280a9, 0x070ff017, 0x03d00096,
12080 0x0280009e, 0x038000a0, 0x038000a3, 0x038000a6,
12081 0x038000a9, 0x038000a9, 0x038000a9, 0x038000a9,
12082 0x03e00000, 0x03800014, 0x059080a0, 0x030160e1,
12083 0x028000ab, 0x059080a3, 0x030150e1, 0x028000ab,
12084 0x059080a6, 0x010140e1, 0x028000ab, 0x060fc013,
12085 0x06a00510, 0x03800014, 0x072e4800, 0x07000012,
12086 0x038000bb, 0x0747f000, 0x05600800, 0x050f80ff,
12087 0x012fa809, 0x0249f001, 0x078100bb, 0x01012000,
12088 0x052e4c00, 0x07c00000, 0x070000eb, 0x0349f000,
12089 0x058180af, 0x05600800, 0x050f80ff, 0x012fa809,
12090 0x0448e001, 0x068100c1, 0x07c00000, 0x0079c101,
12091 0x07ffffff, 0x027a4b01, 0x03800000, 0x05600800,
12092 0x050f80ff, 0x012fa80a, 0x07600c00, 0x050f80ff,
12093 0x012fa821, 0x06780001, 0x07ffff00, 0x037c00ff,
12094 0x05000700, 0x078100dd, 0x06601804, 0x070030ff,
12095 0x050f80ff, 0x012fa809, 0x05002000, 0x050f8003,
12096 0x073fa00a, 0x06000001, 0x040fe001, 0x038600de,
12097 0x04600201, 0x050f80ff, 0x032fa00a, 0x07c00000,
12098 0x050fe02e, 0x008680e3, 0x0102e000, 0x0302f000,
12099 0x038000e7, 0x0760002e, 0x050f80ff, 0x032fa00a,
12100 0x0102e000, 0x07c00000, 0x022c0004, 0x056c041d,
12101 0x078100fc, 0x056c021d, 0x04810113, 0x056c081d,
12102 0x04810125, 0x076c061d, 0x0581013f, 0x0521d000,
12103 0x0202c013, 0x0202a013, 0x02020013, 0x0460021a,
12104 0x050f80ff, 0x053fa80a, 0x07000009, 0x03b600ac,
12105 0x0484801f, 0x0280003d, 0x040fe02a, 0x028600f2,
12106 0x06000013, 0x04001013, 0x0560102b, 0x050f80ff,
12107 0x032fa012, 0x06420029, 0x0660002a, 0x050f80ff,
12108 0x053fa809, 0x06000001, 0x050fe003, 0x00860110,
12109 0x01028003, 0x0660002a, 0x050f80ff, 0x053fa80a,
12110 0x07000009, 0x00800140, 0x00028013, 0x00027013,
12111 0x00800140, 0x040fe02a, 0x028600f1, 0x06420029,
12112 0x0660002a, 0x050f80ff, 0x053fa809, 0x06000001,
12113 0x050fe003, 0x01860122, 0x03026003, 0x0660002a,
12114 0x050f80ff, 0x053fa80a, 0x07000009, 0x00800140,
12115 0x02026013, 0x02025013, 0x00800140, 0x040fe02a,
12116 0x028600f1, 0x06420029, 0x0660002a, 0x050f80ff,
12117 0x053fa809, 0x06000001, 0x050fe003, 0x00860134,
12118 0x01022003, 0x0660002a, 0x050f80ff, 0x053fa80a,
12119 0x07000009, 0x01800136, 0x00022013, 0x00021013,
12120 0x0647f020, 0x007a0120, 0x04000101, 0x04a00285,
12121 0x0400802a, 0x05a004f5, 0x009480f1, 0x0521d005,
12122 0x028000f2, 0x038000fa, 0x0647f020, 0x06486020,
12123 0x06818145, 0x04a00285, 0x028000f1, 0x007a0120,
12124 0x04000101, 0x04a00285, 0x0400802a, 0x05a004f5,
12125 0x028000f1, 0x040fd02a, 0x052e4003, 0x00208010,
12126 0x05a004f5, 0x038000fa, 0x00018098, 0x07480018,
12127 0x06818161, 0x05481018, 0x0781815f, 0x05482018,
12128 0x0681815d, 0x07483018, 0x0681815b, 0x002fb004,
12129 0x00800162, 0x012fb003, 0x00800162, 0x002fb002,
12130 0x00800162, 0x002fb001, 0x00800162, 0x012fb000,
12131 0x0179fe78, 0x070000ff, 0x030190ff, 0x00017086,
12132 0x058b0166, 0x03385000, 0x03020000, 0x07780017,
12133 0x00430407, 0x078181ee, 0x046c0419, 0x048101a2,
12134 0x046c0219, 0x05810172, 0x07219000, 0x00800186,
12135 0x07219000, 0x07483017, 0x0481018c, 0x05482017,
12136 0x05810193, 0x0448b075, 0x06818186, 0x06601476,
12137 0x050f80ff, 0x073fa022, 0x0600003e, 0x06000080,
12138 0x05001081, 0x05002082, 0x06003083, 0x05004084,
12139 0x04601c76, 0x050f80ff, 0x022fa02a, 0x07219000,
12140 0x07780078, 0x07ffff00, 0x045a0419, 0x010780ff,
12141 0x0484801f, 0x0280003d, 0x040fe07f, 0x0086019b,
12142 0x05a001bb, 0x00920186, 0x040fe07f, 0x07a681bb,
12143 0x00800186, 0x0560107b, 0x050f80ff, 0x032fa009,
12144 0x0744f000, 0x0560107b, 0x050f80ff, 0x032fa00a,
12145 0x00800179, 0x052e400c, 0x040080fb, 0x046aa108,
12146 0x06009076, 0x04002075, 0x05a004fc, 0x00800186,
12147 0x06219001, 0x05482017, 0x058101af, 0x058b01a5,
12148 0x060ff086, 0x0349f0ff, 0x07818165, 0x07483017,
12149 0x058101ac, 0x050fd0ff, 0x040fe07f, 0x07a681bb,
12150 0x00800186, 0x05004084, 0x05a00205, 0x00920186,
12151 0x070ff07d, 0x0450047c, 0x056004ff, 0x050f80ff,
12152 0x032fa009, 0x070ff000, 0x00540479, 0x030790ff,
12153 0x01800193, 0x060ff079, 0x0054047a, 0x058201e7,
12154 0x058101e7, 0x070ff07d, 0x0450047c, 0x050f80ff,
12155 0x002fa819, 0x058b01c3, 0x02080001, 0x00081002,
12156 0x01082003, 0x048b01c7, 0x03385000, 0x03010000,
12157 0x02400019, 0x070ff003, 0x04500479, 0x030790ff,
12158 0x0340007e, 0x0642007f, 0x058101e7, 0x070ff07e,
12159 0x050f80ff, 0x032fa009, 0x050fe000, 0x028681e6,
12160 0x070ff07d, 0x056002ff, 0x050f80ff, 0x032fa009,
12161 0x0107d000, 0x018601e8, 0x0560087d, 0x050f80ff,
12162 0x032fa009, 0x0569fe00, 0x0550041b, 0x050f80ff,
12163 0x032fa009, 0x0107e000, 0x070ff07e, 0x018001d2,
12164 0x0307c000, 0x07c00000, 0x052e400c, 0x040080fb,
12165 0x046aa108, 0x06009076, 0x04002075, 0x018004fc,
12166 0x040fd076, 0x050fd017, 0x060ff086, 0x077800ff,
12167 0x07000060, 0x037c00ff, 0x07000060, 0x078181f0,
12168 0x07780078, 0x07ffff00, 0x045a0419, 0x010780ff,
12169 0x06601476, 0x050f80ff, 0x073fa022, 0x0600003e,
12170 0x052e400c, 0x040080fb, 0x066a8108, 0x06009076,
12171 0x04002075, 0x05a004fc, 0x02800029, 0x0240007f,
12172 0x0742007e, 0x050f807e, 0x032fa009, 0x050fe000,
12173 0x0286821f, 0x070ff07d, 0x055c047b, 0x05810214,
12174 0x0760007d, 0x050f80ff, 0x032fa009, 0x050fe000,
12175 0x03868214, 0x070ff07b, 0x0107d0ff, 0x0560087d,
12176 0x050f80ff, 0x032fa009, 0x03681e00, 0x0450041c,
12177 0x0107e0ff, 0x050f80ff, 0x032fa009, 0x050fe000,
12178 0x01860221, 0x0307c000, 0x07c00000, 0x040fd076,
12179 0x02800510, 0x010180c0, 0x0548e018, 0x0781823c,
12180 0x0748f018, 0x06818238, 0x03490018, 0x06818234,
12181 0x01491018, 0x07818230, 0x073c0000, 0x06000040,
12182 0x02200004, 0x0180023f, 0x073c0000, 0x06000020,
12183 0x03200003, 0x0180023f, 0x073c0000, 0x06000010,
12184 0x02200002, 0x0180023f, 0x073c0000, 0x06000008,
12185 0x02200001, 0x0180023f, 0x073c0000, 0x06000004,
12186 0x06000013, 0x050fb000, 0x040fe076, 0x00860258,
12187 0x046c0273, 0x04810268, 0x066c0073, 0x04810249,
12188 0x040fd076, 0x06a00510, 0x03800014, 0x040fd076,
12189 0x0080024c, 0x00452075, 0x00077013, 0x0647f075,
12190 0x06486075, 0x06818252, 0x05a0028b, 0x00800258,
12191 0x007a0175, 0x04000101, 0x05a0028b, 0x04008076,
12192 0x0245f008, 0x05a004f5, 0x07273000, 0x05600272,
12193 0x050f80ff, 0x053fa80a, 0x07000009, 0x0379ff78,
12194 0x070000ff, 0x02076013, 0x02075013, 0x0484801f,
12195 0x0280003d, 0x070fc0ff, 0x052e400c, 0x00208020,
12196 0x05a004f5, 0x00800261, 0x04600276, 0x050010ff,
12197 0x040f8001, 0x032fa009, 0x040f8001, 0x053fa80a,
12198 0x07000009, 0x070ff000, 0x0286827a, 0x06601276,
12199 0x050f80ff, 0x073fa009, 0x0700000c, 0x07601818,
12200 0x050f80ff, 0x053fa80a, 0x07000009, 0x0180027b,
12201 0x07a000de, 0x0448b075, 0x0581024b, 0x06000013,
12202 0x04001013, 0x0560107b, 0x050f80ff, 0x032fa012,
12203 0x0046b075, 0x03b600ac, 0x0080024c, 0x06000020,
12204 0x04001016, 0x0460082a, 0x050f80ff, 0x032fa012,
12205 0x07c00000, 0x06000075, 0x040010a2, 0x044b0801,
12206 0x060ff016, 0x065a0001, 0x04600876, 0x050f80ff,
12207 0x032fa012, 0x07c00000, 0x050fe022, 0x0186029a,
12208 0x0421d004, 0x0302a022, 0x04a002c1, 0x018002b1,
12209 0x040fe026, 0x008602b3, 0x0421d001, 0x0202a026,
12210 0x04a002c1, 0x0202c013, 0x00683e20, 0x070060ff,
12211 0x056c0206, 0x048102f4, 0x056c0406, 0x0781030a,
12212 0x076c0606, 0x06810379, 0x056c1606, 0x078182b1,
12213 0x04488020, 0x07810387, 0x040fd02a, 0x0521d000,
12214 0x0202a013, 0x02020013, 0x008002b3, 0x04a004ec,
12215 0x008002bf, 0x050fe028, 0x008602bf, 0x0302a028,
12216 0x0421d002, 0x04a002c1, 0x008002c8, 0x050fe022,
12217 0x008602bf, 0x0421d004, 0x0302a022, 0x04a002c1,
12218 0x04a004ec, 0x05848030, 0x0280003d, 0x0460082a,
12219 0x050f80ff, 0x022fa031, 0x03020000, 0x0002b004,
12220 0x01018005, 0x07c00000, 0x0400702a, 0x06a003ba,
12221 0x007a0101, 0x07060000, 0x07303000, 0x07008290,
12222 0x07600018, 0x050f80ff, 0x053fa809, 0x07000003,
12223 0x0448e007, 0x068182d6, 0x06006013, 0x018002dd,
12224 0x02400010, 0x048102d6, 0x06006010, 0x0460322a,
12225 0x050f80ff, 0x073fa00a, 0x07000003, 0x050f801e,
12226 0x032fa03a, 0x063aa020, 0x06000002, 0x013e4000,
12227 0x07000030, 0x009802e3, 0x070ff0f6, 0x036830ff,
12228 0x078182e4, 0x070f001e, 0x0560102b, 0x050f10ff,
12229 0x063f3c08, 0x0600000d, 0x013e4000, 0x06000020,
12230 0x040f801a, 0x0320000a, 0x022017d0, 0x032fa012,
12231 0x0202c013, 0x008002bf, 0x04007013, 0x06a003ba,
12232 0x007a0101, 0x07050000, 0x07303000, 0x07008890,
12233 0x074d0005, 0x06006013, 0x050f801e, 0x032fa03a,
12234 0x05601a2b, 0x050f80ff, 0x022fa019, 0x04001002,
12235 0x04002013, 0x040f801f, 0x022fa01a, 0x073aa00c,
12236 0x06000002, 0x07300c03, 0x0600000d, 0x028003a7,
12237 0x04007013, 0x06a003ba, 0x007a0101, 0x03070000,
12238 0x0660282a, 0x050f80ff, 0x073fa009, 0x06000004,
12239 0x02499008, 0x07810317, 0x07303000, 0x07008890,
12240 0x02800319, 0x07303000, 0x04008980, 0x05007003,
12241 0x074d0005, 0x06006013, 0x050f801e, 0x032fa03a,
12242 0x0760142b, 0x050f80ff, 0x032fa021, 0x064b0002,
12243 0x02499008, 0x06810325, 0x0644c002, 0x054b0400,
12244 0x050040ff, 0x06698104, 0x0581833a, 0x06000013,
12245 0x04001013, 0x04780102, 0x06000010, 0x06003013,
12246 0x04004013, 0x06005013, 0x06006013, 0x04007013,
12247 0x00644015, 0x07820336, 0x04448002, 0x02205008,
12248 0x040f801f, 0x032fa042, 0x04008015, 0x03800371,
12249 0x046c8004, 0x05818348, 0x01208018, 0x06780002,
12250 0x07000003, 0x0581834b, 0x06003001, 0x06000013,
12251 0x04001013, 0x04004013, 0x06005013, 0x040f801f,
12252 0x022fa032, 0x03800371, 0x040fd02a, 0x06a00510,
12253 0x03800014, 0x04488002, 0x07810350, 0x070ff003,
12254 0x04500408, 0x050080ff, 0x06489002, 0x06810357,
12255 0x0379ff00, 0x070000ff, 0x070ff000, 0x04500408,
12256 0x050080ff, 0x07005003, 0x05004000, 0x06003001,
12257 0x06000013, 0x04001013, 0x040f801f, 0x022fa032,
12258 0x05601c2b, 0x050f80ff, 0x022fa031, 0x06600c1f,
12259 0x050f80ff, 0x022fa032, 0x02680608, 0x07810371,
12260 0x016408ff, 0x057dfeff, 0x07ffffff, 0x034000ff,
12261 0x045a0407, 0x070000ff, 0x0760061e, 0x050f80ff,
12262 0x032fa00a, 0x06600908, 0x0669f908, 0x027a0008,
12263 0x06000020, 0x070aa0ff, 0x014a20ff, 0x037a00ff,
12264 0x060000dc, 0x070000ff, 0x028003a7, 0x04007013,
12265 0x06a003ba, 0x007a0101, 0x07030000, 0x07303000,
12266 0x07008190, 0x06006013, 0x050f801e, 0x032fa03a,
12267 0x073aa000, 0x06000002, 0x07300c00, 0x07000005,
12268 0x028003a7, 0x04007013, 0x06a003ba, 0x007a0101,
12269 0x07810000, 0x07303000, 0x07000090, 0x06006013,
12270 0x06600c2a, 0x050f80ff, 0x053fa809, 0x07000003,
12271 0x04780107, 0x07ffff00, 0x007c0107, 0x07000500,
12272 0x0581839a, 0x07303000, 0x05000890, 0x074d0005,
12273 0x0660282a, 0x050f80ff, 0x053fa809, 0x07000003,
12274 0x0049d007, 0x068103a1, 0x02206001, 0x050f801e,
12275 0x032fa03a, 0x073aa000, 0x06000002, 0x07300c00,
12276 0x07000005, 0x013e4000, 0x07000030, 0x039803a9,
12277 0x070ff0f6, 0x036830ff, 0x058183aa, 0x070f001e,
12278 0x040f101f, 0x070f3000, 0x013e4000, 0x06000020,
12279 0x040f801a, 0x0320000a, 0x022017d0, 0x032fa012,
12280 0x008002bf, 0x03200000, 0x06006076, 0x028003bc,
12281 0x03200011, 0x0600602a, 0x05a00441, 0x05600406,
12282 0x050f80ff, 0x053fa809, 0x06000002, 0x07c00000,
12283 0x0207602f, 0x04600876, 0x050f80ff, 0x022fa031,
12284 0x03075000, 0x0007b004, 0x01018005, 0x06600076,
12285 0x050020ff, 0x050f80ff, 0x012fa809, 0x0202f001,
12286 0x008683d0, 0x0002e013, 0x040f8002, 0x053fa80a,
12287 0x07000009, 0x06273001, 0x0448b075, 0x048183da,
12288 0x04602076, 0x050f80ff, 0x053fa811, 0x0700003c,
12289 0x0179fe78, 0x070000ff, 0x030190ff, 0x018683e2,
12290 0x07a003f6, 0x00078019, 0x039203f5, 0x0180043a,
12291 0x040fd076, 0x040fd019, 0x04600276, 0x050020ff,
12292 0x050f80ff, 0x032fa009, 0x040f8002, 0x053fa80a,
12293 0x07000009, 0x050fe000, 0x008683f2, 0x07601818,
12294 0x050f80ff, 0x053fa80a, 0x07000009, 0x038003f3,
12295 0x07a000de, 0x07273000, 0x02076013, 0x0280003d,
12296 0x078b03f6, 0x03385000, 0x07030000, 0x05600818,
12297 0x050f80ff, 0x032fa009, 0x054b0400, 0x0308a0ff,
12298 0x0179fe00, 0x070000ff, 0x010880ff, 0x0448b075,
12299 0x04810410, 0x0760147b, 0x050f80ff, 0x002fa819,
12300 0x064b0001, 0x02080002, 0x01081003, 0x00082001,
12301 0x02083001, 0x02079001, 0x0207a001, 0x00084013,
12302 0x0207f013, 0x00800432, 0x06485075, 0x05810428,
12303 0x02465075, 0x06601476, 0x050f80ff, 0x073fa021,
12304 0x0600003e, 0x070ff07d, 0x0450047c, 0x050f80ff,
12305 0x002fa819, 0x058b041b, 0x02080001, 0x00081002,
12306 0x01082003, 0x03079003, 0x0208307a, 0x0340007e,
12307 0x0642007f, 0x0581042d, 0x070ff07e, 0x05a001d2,
12308 0x0392842d, 0x01800439, 0x058b0428, 0x06601476,
12309 0x050f80ff, 0x073fa041, 0x0600003e, 0x06602476,
12310 0x050f80ff, 0x073fa009, 0x06000007, 0x0008400e,
12311 0x048b0432, 0x03385000, 0x03010000, 0x06219001,
12312 0x040fe07f, 0x01860439, 0x018001bb, 0x07c00000,
12313 0x00683e75, 0x0581043f, 0x0448d075, 0x05810465,
12314 0x01800493, 0x05a004f0, 0x038003f5, 0x0297844c,
12315 0x07602418, 0x050f80ff, 0x012fa809, 0x06780001,
12316 0x070000ff, 0x075a0000, 0x070ff014, 0x0569feff,
12317 0x054b08ff, 0x075a0000, 0x05600418, 0x050f80ff,
12318 0x012fa809, 0x040fe007, 0x03868453, 0x01204000,
12319 0x00800461, 0x00700101, 0x03010000, 0x06780001,
12320 0x07ff0000, 0x076c00ff, 0x0681845b, 0x00700101,
12321 0x03010000, 0x05600418, 0x050f80ff, 0x012fa80a,
12322 0x06780001, 0x07ff0000, 0x050040ff, 0x0279ff01,
12323 0x0700ffff, 0x05002014, 0x07c00000, 0x04007076,
12324 0x0448b075, 0x0481047f, 0x03200011, 0x06006076,
12325 0x06a003bc, 0x007a0101, 0x07060000, 0x07303000,
12326 0x07008290, 0x07600018, 0x050f80ff, 0x053fa809,
12327 0x07000003, 0x0448e007, 0x07818477, 0x06006013,
12328 0x0180048e, 0x02400010, 0x05810477, 0x06006010,
12329 0x04603276, 0x050f80ff, 0x073fa00a, 0x07000003,
12330 0x0180048e, 0x04602a76, 0x050f80ff, 0x032fa009,
12331 0x060ff07a, 0x05500400, 0x070000ff, 0x04602a76,
12332 0x050f80ff, 0x032fa00a, 0x07a003b7, 0x007a0101,
12333 0x03010000, 0x06303008, 0x05008000, 0x0600600e,
12334 0x050f8074, 0x032fa03a, 0x053079a0, 0x0700000c,
12335 0x008004d3, 0x00683e75, 0x076c0aff, 0x058104b2,
12336 0x04007013, 0x03200011, 0x06006076, 0x06a003bc,
12337 0x007a0101, 0x03070000, 0x06602876, 0x050f80ff,
12338 0x053fa809, 0x06000001, 0x03499003, 0x048104a7,
12339 0x07303000, 0x07008890, 0x053079a0, 0x0700000c,
12340 0x008004ab, 0x07303000, 0x04008980, 0x04307920,
12341 0x0700000c, 0x074d0005, 0x06006013, 0x050f8074,
12342 0x032fa03a, 0x04307920, 0x0700000c, 0x008004d3,
12343 0x04602a76, 0x050f80ff, 0x032fa009, 0x060ff07a,
12344 0x05500400, 0x070000ff, 0x04602a76, 0x050f80ff,
12345 0x032fa00a, 0x04007076, 0x07a003b7, 0x007a0101,
12346 0x03010000, 0x06303008, 0x07008800, 0x074d0005,
12347 0x06600a76, 0x050f80ff, 0x073fa009, 0x07000003,
12348 0x054b0406, 0x045a0404, 0x050040ff, 0x0600600e,
12349 0x050f8074, 0x032fa03a, 0x0648c075, 0x058104d1,
12350 0x06307d20, 0x0700000c, 0x008004d3, 0x04307920,
12351 0x0700000c, 0x013e4000, 0x07000030, 0x009804d5,
12352 0x070ff0f6, 0x074850ff, 0x068184d6, 0x050f2074,
12353 0x060a0007, 0x040070fb, 0x046a7007, 0x050f40ff,
12354 0x013e4000, 0x06000020, 0x0678007a, 0x07fff000,
12355 0x068184e6, 0x0320000a, 0x022017d0, 0x008004e9,
12356 0x0320000a, 0x06301b58, 0x06000001, 0x050f8072,
12357 0x032fa012, 0x038003f5, 0x01208060, 0x0600902a,
12358 0x04002020, 0x018004fc, 0x040080fb, 0x066ae108,
12359 0x06009076, 0x04002075, 0x018004fc, 0x03201100,
12360 0x078484fa, 0x06420001, 0x078184f6, 0x02800513,
12361 0x020e0008, 0x07c00000, 0x050fd009, 0x040fd008,
12362 0x03201100, 0x05848503, 0x06420001, 0x078184ff,
12363 0x02800513, 0x007a0102, 0x04000101, 0x05600809,
12364 0x050f80ff, 0x073fa00a, 0x06000001, 0x020e0008,
12365 0x0684050d, 0x030e0009, 0x07c00000, 0x01011009,
12366 0x052e4300, 0x07c00000, 0x052e400f, 0x01208090,
12367 0x018004f5, 0x070fc0ff, 0x040f8013, 0x032fa009,
12368 0x02800516, 0x15416ea9, 0xffef0b01
12369};
12370
12371#ifdef UNIQUE_FW_NAME
12372uint32_t fw2400_length02 = 0x000014ff ;
12373#else
12374uint32_t risc_code_length02 = 0x000014ff ;
12375#endif
12376
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
index 48e460eef05a..b17ee62dd1a9 100644
--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -232,7 +232,7 @@ static ssize_t
232qla2x00_isp_name_show(struct class_device *cdev, char *buf) 232qla2x00_isp_name_show(struct class_device *cdev, char *buf)
233{ 233{
234 scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev)); 234 scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
235 return snprintf(buf, PAGE_SIZE, "%s\n", ha->brd_info->isp_name); 235 return snprintf(buf, PAGE_SIZE, "ISP%04X\n", ha->pdev->device);
236} 236}
237 237
238static ssize_t 238static ssize_t
@@ -541,7 +541,7 @@ struct fc_function_template qla2xxx_transport_functions = {
541void 541void
542qla2x00_init_host_attr(scsi_qla_host_t *ha) 542qla2x00_init_host_attr(scsi_qla_host_t *ha)
543{ 543{
544 fc_host_node_name(ha->host) = wwn_to_u64(ha->init_cb->node_name); 544 fc_host_node_name(ha->host) = wwn_to_u64(ha->node_name);
545 fc_host_port_name(ha->host) = wwn_to_u64(ha->init_cb->port_name); 545 fc_host_port_name(ha->host) = wwn_to_u64(ha->port_name);
546 fc_host_supported_classes(ha->host) = FC_COS_CLASS3; 546 fc_host_supported_classes(ha->host) = FC_COS_CLASS3;
547} 547}
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 5c5d2315cfab..2d9b12ffe09c 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -1003,10 +1003,10 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
1003 fw = (struct qla24xx_fw_dump *) ha->fw_dump24; 1003 fw = (struct qla24xx_fw_dump *) ha->fw_dump24;
1004 1004
1005 rval = QLA_SUCCESS; 1005 rval = QLA_SUCCESS;
1006 fw->hccr = RD_REG_DWORD(&reg->hccr); 1006 fw->host_status = RD_REG_DWORD(&reg->host_status);
1007 1007
1008 /* Pause RISC. */ 1008 /* Pause RISC. */
1009 if ((fw->hccr & HCCRX_RISC_PAUSE) == 0) { 1009 if ((RD_REG_DWORD(&reg->hccr) & HCCRX_RISC_PAUSE) == 0) {
1010 WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_RESET | 1010 WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_RESET |
1011 HCCRX_CLR_HOST_INT); 1011 HCCRX_CLR_HOST_INT);
1012 RD_REG_DWORD(&reg->hccr); /* PCI Posting. */ 1012 RD_REG_DWORD(&reg->hccr); /* PCI Posting. */
@@ -1021,16 +1021,54 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
1021 } 1021 }
1022 } 1022 }
1023 1023
1024 /* Disable interrupts. */
1025 WRT_REG_DWORD(&reg->ictrl, 0);
1026 RD_REG_DWORD(&reg->ictrl);
1027
1028 if (rval == QLA_SUCCESS) { 1024 if (rval == QLA_SUCCESS) {
1029 /* Host interface registers. */ 1025 /* Host interface registers. */
1030 dmp_reg = (uint32_t __iomem *)(reg + 0); 1026 dmp_reg = (uint32_t __iomem *)(reg + 0);
1031 for (cnt = 0; cnt < sizeof(fw->host_reg) / 4; cnt++) 1027 for (cnt = 0; cnt < sizeof(fw->host_reg) / 4; cnt++)
1032 fw->host_reg[cnt] = RD_REG_DWORD(dmp_reg++); 1028 fw->host_reg[cnt] = RD_REG_DWORD(dmp_reg++);
1033 1029
1030 /* Disable interrupts. */
1031 WRT_REG_DWORD(&reg->ictrl, 0);
1032 RD_REG_DWORD(&reg->ictrl);
1033
1034 /* Shadow registers. */
1035 WRT_REG_DWORD(&reg->iobase_addr, 0x0F70);
1036 RD_REG_DWORD(&reg->iobase_addr);
1037 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1038 WRT_REG_DWORD(dmp_reg, 0xB0000000);
1039 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1040 fw->shadow_reg[0] = RD_REG_DWORD(dmp_reg);
1041
1042 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1043 WRT_REG_DWORD(dmp_reg, 0xB0100000);
1044 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1045 fw->shadow_reg[1] = RD_REG_DWORD(dmp_reg);
1046
1047 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1048 WRT_REG_DWORD(dmp_reg, 0xB0200000);
1049 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1050 fw->shadow_reg[2] = RD_REG_DWORD(dmp_reg);
1051
1052 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1053 WRT_REG_DWORD(dmp_reg, 0xB0300000);
1054 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1055 fw->shadow_reg[3] = RD_REG_DWORD(dmp_reg);
1056
1057 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1058 WRT_REG_DWORD(dmp_reg, 0xB0400000);
1059 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1060 fw->shadow_reg[4] = RD_REG_DWORD(dmp_reg);
1061
1062 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1063 WRT_REG_DWORD(dmp_reg, 0xB0500000);
1064 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1065 fw->shadow_reg[5] = RD_REG_DWORD(dmp_reg);
1066
1067 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1068 WRT_REG_DWORD(dmp_reg, 0xB0600000);
1069 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1070 fw->shadow_reg[6] = RD_REG_DWORD(dmp_reg);
1071
1034 /* Mailbox registers. */ 1072 /* Mailbox registers. */
1035 mbx_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80); 1073 mbx_reg = (uint16_t __iomem *)((uint8_t __iomem *)reg + 0x80);
1036 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++) 1074 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++)
@@ -1308,43 +1346,6 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
1308 for (cnt = 0; cnt < 16; cnt++) 1346 for (cnt = 0; cnt < 16; cnt++)
1309 *iter_reg++ = RD_REG_DWORD(dmp_reg++); 1347 *iter_reg++ = RD_REG_DWORD(dmp_reg++);
1310 1348
1311 WRT_REG_DWORD(&reg->iobase_addr, 0x0F70);
1312 RD_REG_DWORD(&reg->iobase_addr);
1313 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1314 WRT_REG_DWORD(dmp_reg, 0xB0000000);
1315 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1316 fw->shadow_reg[0] = RD_REG_DWORD(dmp_reg);
1317
1318 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1319 WRT_REG_DWORD(dmp_reg, 0xB0100000);
1320 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1321 fw->shadow_reg[1] = RD_REG_DWORD(dmp_reg);
1322
1323 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1324 WRT_REG_DWORD(dmp_reg, 0xB0200000);
1325 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1326 fw->shadow_reg[2] = RD_REG_DWORD(dmp_reg);
1327
1328 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1329 WRT_REG_DWORD(dmp_reg, 0xB0300000);
1330 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1331 fw->shadow_reg[3] = RD_REG_DWORD(dmp_reg);
1332
1333 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1334 WRT_REG_DWORD(dmp_reg, 0xB0400000);
1335 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1336 fw->shadow_reg[4] = RD_REG_DWORD(dmp_reg);
1337
1338 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1339 WRT_REG_DWORD(dmp_reg, 0xB0500000);
1340 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1341 fw->shadow_reg[5] = RD_REG_DWORD(dmp_reg);
1342
1343 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xF0);
1344 WRT_REG_DWORD(dmp_reg, 0xB0600000);
1345 dmp_reg = (uint32_t __iomem *)((uint8_t __iomem *)reg + 0xFC);
1346 fw->shadow_reg[6] = RD_REG_DWORD(dmp_reg);
1347
1348 /* Local memory controller registers. */ 1349 /* Local memory controller registers. */
1349 iter_reg = fw->lmc_reg; 1350 iter_reg = fw->lmc_reg;
1350 WRT_REG_DWORD(&reg->iobase_addr, 0x3000); 1351 WRT_REG_DWORD(&reg->iobase_addr, 0x3000);
@@ -1677,7 +1678,7 @@ qla24xx_ascii_fw_dump(scsi_qla_host_t *ha)
1677 ha->fw_major_version, ha->fw_minor_version, 1678 ha->fw_major_version, ha->fw_minor_version,
1678 ha->fw_subminor_version, ha->fw_attributes); 1679 ha->fw_subminor_version, ha->fw_attributes);
1679 1680
1680 qla_uprintf(&uiter, "\nHCCR Register\n%04x\n", fw->hccr); 1681 qla_uprintf(&uiter, "\nR2H Status Register\n%04x\n", fw->host_status);
1681 1682
1682 qla_uprintf(&uiter, "\nHost Interface Registers"); 1683 qla_uprintf(&uiter, "\nHost Interface Registers");
1683 for (cnt = 0; cnt < sizeof(fw->host_reg) / 4; cnt++) { 1684 for (cnt = 0; cnt < sizeof(fw->host_reg) / 4; cnt++) {
@@ -1687,6 +1688,14 @@ qla24xx_ascii_fw_dump(scsi_qla_host_t *ha)
1687 qla_uprintf(&uiter, "%08x ", fw->host_reg[cnt]); 1688 qla_uprintf(&uiter, "%08x ", fw->host_reg[cnt]);
1688 } 1689 }
1689 1690
1691 qla_uprintf(&uiter, "\n\nShadow Registers");
1692 for (cnt = 0; cnt < sizeof(fw->shadow_reg) / 4; cnt++) {
1693 if (cnt % 8 == 0)
1694 qla_uprintf(&uiter, "\n");
1695
1696 qla_uprintf(&uiter, "%08x ", fw->shadow_reg[cnt]);
1697 }
1698
1690 qla_uprintf(&uiter, "\n\nMailbox Registers"); 1699 qla_uprintf(&uiter, "\n\nMailbox Registers");
1691 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++) { 1700 for (cnt = 0; cnt < sizeof(fw->mailbox_reg) / 2; cnt++) {
1692 if (cnt % 8 == 0) 1701 if (cnt % 8 == 0)
@@ -1855,14 +1864,6 @@ qla24xx_ascii_fw_dump(scsi_qla_host_t *ha)
1855 qla_uprintf(&uiter, "%08x ", fw->risc_gp_reg[cnt]); 1864 qla_uprintf(&uiter, "%08x ", fw->risc_gp_reg[cnt]);
1856 } 1865 }
1857 1866
1858 qla_uprintf(&uiter, "\n\nShadow Registers");
1859 for (cnt = 0; cnt < sizeof(fw->shadow_reg) / 4; cnt++) {
1860 if (cnt % 8 == 0)
1861 qla_uprintf(&uiter, "\n");
1862
1863 qla_uprintf(&uiter, "%08x ", fw->shadow_reg[cnt]);
1864 }
1865
1866 qla_uprintf(&uiter, "\n\nLMC Registers"); 1867 qla_uprintf(&uiter, "\n\nLMC Registers");
1867 for (cnt = 0; cnt < sizeof(fw->lmc_reg) / 4; cnt++) { 1868 for (cnt = 0; cnt < sizeof(fw->lmc_reg) / 4; cnt++) {
1868 if (cnt % 8 == 0) 1869 if (cnt % 8 == 0)
diff --git a/drivers/scsi/qla2xxx/qla_dbg.h b/drivers/scsi/qla2xxx/qla_dbg.h
index 935a59a8c054..ab6afeaa2f2c 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.h
+++ b/drivers/scsi/qla2xxx/qla_dbg.h
@@ -227,8 +227,9 @@ struct qla2100_fw_dump {
227#define FW_DUMP_SIZE_24XX 0x2B0000 227#define FW_DUMP_SIZE_24XX 0x2B0000
228 228
229struct qla24xx_fw_dump { 229struct qla24xx_fw_dump {
230 uint32_t hccr; 230 uint32_t host_status;
231 uint32_t host_reg[32]; 231 uint32_t host_reg[32];
232 uint32_t shadow_reg[7];
232 uint16_t mailbox_reg[32]; 233 uint16_t mailbox_reg[32];
233 uint32_t xseq_gp_reg[128]; 234 uint32_t xseq_gp_reg[128];
234 uint32_t xseq_0_reg[16]; 235 uint32_t xseq_0_reg[16];
@@ -250,7 +251,6 @@ struct qla24xx_fw_dump {
250 uint32_t rcvt0_data_dma_reg[32]; 251 uint32_t rcvt0_data_dma_reg[32];
251 uint32_t rcvt1_data_dma_reg[32]; 252 uint32_t rcvt1_data_dma_reg[32];
252 uint32_t risc_gp_reg[128]; 253 uint32_t risc_gp_reg[128];
253 uint32_t shadow_reg[7];
254 uint32_t lmc_reg[112]; 254 uint32_t lmc_reg[112];
255 uint32_t fpm_hdw_reg[192]; 255 uint32_t fpm_hdw_reg[192];
256 uint32_t fb_hdw_reg[176]; 256 uint32_t fb_hdw_reg[176];
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 7b3efd531297..79d8a914f9d0 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -22,6 +22,7 @@
22#include <linux/completion.h> 22#include <linux/completion.h>
23#include <linux/interrupt.h> 23#include <linux/interrupt.h>
24#include <linux/workqueue.h> 24#include <linux/workqueue.h>
25#include <linux/firmware.h>
25#include <asm/semaphore.h> 26#include <asm/semaphore.h>
26 27
27#include <scsi/scsi.h> 28#include <scsi/scsi.h>
@@ -29,6 +30,7 @@
29#include <scsi/scsi_device.h> 30#include <scsi/scsi_device.h>
30#include <scsi/scsi_cmnd.h> 31#include <scsi/scsi_cmnd.h>
31 32
33#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
32#if defined(CONFIG_SCSI_QLA21XX) || defined(CONFIG_SCSI_QLA21XX_MODULE) 34#if defined(CONFIG_SCSI_QLA21XX) || defined(CONFIG_SCSI_QLA21XX_MODULE)
33#define IS_QLA2100(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2100) 35#define IS_QLA2100(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2100)
34#else 36#else
@@ -79,9 +81,23 @@
79#define IS_QLA2522(ha) 0 81#define IS_QLA2522(ha) 0
80#endif 82#endif
81 83
84#else /* !defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE) */
85
86#define IS_QLA2100(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2100)
87#define IS_QLA2200(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2200)
88#define IS_QLA2300(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2300)
89#define IS_QLA2312(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2312)
90#define IS_QLA2322(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2322)
91#define IS_QLA6312(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP6312)
92#define IS_QLA6322(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP6322)
93#define IS_QLA2422(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422)
94#define IS_QLA2432(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432)
95#define IS_QLA2512(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2512)
96#define IS_QLA2522(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2522)
97#endif
98
82#define IS_QLA23XX(ha) (IS_QLA2300(ha) || IS_QLA2312(ha) || IS_QLA2322(ha) || \ 99#define IS_QLA23XX(ha) (IS_QLA2300(ha) || IS_QLA2312(ha) || IS_QLA2322(ha) || \
83 IS_QLA6312(ha) || IS_QLA6322(ha)) 100 IS_QLA6312(ha) || IS_QLA6322(ha))
84
85#define IS_QLA24XX(ha) (IS_QLA2422(ha) || IS_QLA2432(ha)) 101#define IS_QLA24XX(ha) (IS_QLA2422(ha) || IS_QLA2432(ha))
86#define IS_QLA25XX(ha) (IS_QLA2512(ha) || IS_QLA2522(ha)) 102#define IS_QLA25XX(ha) (IS_QLA2512(ha) || IS_QLA2522(ha))
87 103
@@ -2124,6 +2140,12 @@ struct qla_board_info {
2124 struct scsi_host_template *sht; 2140 struct scsi_host_template *sht;
2125}; 2141};
2126 2142
2143struct fw_blob {
2144 char *name;
2145 uint32_t segs[4];
2146 const struct firmware *fw;
2147};
2148
2127/* Return data from MBC_GET_ID_LIST call. */ 2149/* Return data from MBC_GET_ID_LIST call. */
2128struct gid_list_info { 2150struct gid_list_info {
2129 uint8_t al_pa; 2151 uint8_t al_pa;
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index fedcb0d3fc72..32be4c14cccb 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -33,8 +33,8 @@ extern int qla24xx_nvram_config(struct scsi_qla_host *);
33extern void qla2x00_update_fw_options(struct scsi_qla_host *); 33extern void qla2x00_update_fw_options(struct scsi_qla_host *);
34extern void qla24xx_update_fw_options(scsi_qla_host_t *); 34extern void qla24xx_update_fw_options(scsi_qla_host_t *);
35extern int qla2x00_load_risc(struct scsi_qla_host *, uint32_t *); 35extern int qla2x00_load_risc(struct scsi_qla_host *, uint32_t *);
36extern int qla24xx_load_risc(scsi_qla_host_t *, uint32_t *);
36extern int qla24xx_load_risc_flash(scsi_qla_host_t *, uint32_t *); 37extern int qla24xx_load_risc_flash(scsi_qla_host_t *, uint32_t *);
37extern int qla24xx_load_risc_hotplug(scsi_qla_host_t *, uint32_t *);
38 38
39extern fc_port_t *qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t); 39extern fc_port_t *qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t);
40 40
@@ -62,6 +62,7 @@ extern int qlport_down_retry;
62extern int ql2xplogiabsentdevice; 62extern int ql2xplogiabsentdevice;
63extern int ql2xloginretrycount; 63extern int ql2xloginretrycount;
64extern int ql2xfdmienable; 64extern int ql2xfdmienable;
65extern int ql2xprocessrscn;
65 66
66extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *); 67extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *);
67 68
@@ -76,6 +77,8 @@ extern void qla2x00_blink_led(scsi_qla_host_t *);
76 77
77extern int qla2x00_down_timeout(struct semaphore *, unsigned long); 78extern int qla2x00_down_timeout(struct semaphore *, unsigned long);
78 79
80extern struct fw_blob *qla2x00_request_firmware(scsi_qla_host_t *);
81
79/* 82/*
80 * Global Function Prototypes in qla_iocb.c source file. 83 * Global Function Prototypes in qla_iocb.c source file.
81 */ 84 */
@@ -94,10 +97,7 @@ int __qla2x00_marker(scsi_qla_host_t *, uint16_t, uint16_t, uint8_t);
94 * Global Function Prototypes in qla_mbx.c source file. 97 * Global Function Prototypes in qla_mbx.c source file.
95 */ 98 */
96extern int 99extern int
97qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint16_t, uint16_t); 100qla2x00_load_ram(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
98
99extern int
100qla2x00_load_ram_ext(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
101 101
102extern int 102extern int
103qla2x00_execute_fw(scsi_qla_host_t *, uint32_t); 103qla2x00_execute_fw(scsi_qla_host_t *, uint32_t);
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index cd6f7c3cfe68..d620a8e8a614 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -538,6 +538,7 @@ qla2x00_rff_id(scsi_qla_host_t *ha)
538 ct_req->req.rff_id.port_id[1] = ha->d_id.b.area; 538 ct_req->req.rff_id.port_id[1] = ha->d_id.b.area;
539 ct_req->req.rff_id.port_id[2] = ha->d_id.b.al_pa; 539 ct_req->req.rff_id.port_id[2] = ha->d_id.b.al_pa;
540 540
541 ct_req->req.rff_id.fc4_feature = BIT_1;
541 ct_req->req.rff_id.fc4_type = 0x08; /* SCSI - FCP */ 542 ct_req->req.rff_id.fc4_type = 0x08; /* SCSI - FCP */
542 543
543 /* Execute MS IOCB */ 544 /* Execute MS IOCB */
@@ -1529,9 +1530,9 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha)
1529 eiter->type = __constant_cpu_to_be16(FDMI_PORT_SUPPORT_SPEED); 1530 eiter->type = __constant_cpu_to_be16(FDMI_PORT_SUPPORT_SPEED);
1530 eiter->len = __constant_cpu_to_be16(4 + 4); 1531 eiter->len = __constant_cpu_to_be16(4 + 4);
1531 if (IS_QLA25XX(ha)) 1532 if (IS_QLA25XX(ha))
1532 eiter->a.sup_speed = __constant_cpu_to_be32(4);
1533 else if (IS_QLA24XX(ha))
1534 eiter->a.sup_speed = __constant_cpu_to_be32(8); 1533 eiter->a.sup_speed = __constant_cpu_to_be32(8);
1534 else if (IS_QLA24XX(ha))
1535 eiter->a.sup_speed = __constant_cpu_to_be32(4);
1535 else if (IS_QLA23XX(ha)) 1536 else if (IS_QLA23XX(ha))
1536 eiter->a.sup_speed = __constant_cpu_to_be32(2); 1537 eiter->a.sup_speed = __constant_cpu_to_be32(2);
1537 else 1538 else
@@ -1553,9 +1554,6 @@ qla2x00_fdmi_rpa(scsi_qla_host_t *ha)
1553 eiter->a.cur_speed = __constant_cpu_to_be32(2); 1554 eiter->a.cur_speed = __constant_cpu_to_be32(2);
1554 break; 1555 break;
1555 case 3: 1556 case 3:
1556 eiter->a.cur_speed = __constant_cpu_to_be32(8);
1557 break;
1558 case 4:
1559 eiter->a.cur_speed = __constant_cpu_to_be32(4); 1557 eiter->a.cur_speed = __constant_cpu_to_be32(4);
1560 break; 1558 break;
1561 } 1559 }
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index c46d2469b85f..a91fea69ad63 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -8,7 +8,6 @@
8 8
9#include <linux/delay.h> 9#include <linux/delay.h>
10#include <linux/vmalloc.h> 10#include <linux/vmalloc.h>
11#include <linux/firmware.h>
12#include <scsi/scsi_transport_fc.h> 11#include <scsi/scsi_transport_fc.h>
13 12
14#include "qla_devtbl.h" 13#include "qla_devtbl.h"
@@ -1015,11 +1014,13 @@ qla24xx_update_fw_options(scsi_qla_host_t *ha)
1015 int rval; 1014 int rval;
1016 1015
1017 /* Update Serial Link options. */ 1016 /* Update Serial Link options. */
1018 if ((ha->fw_seriallink_options24[0] & BIT_0) == 0) 1017 if ((le16_to_cpu(ha->fw_seriallink_options24[0]) & BIT_0) == 0)
1019 return; 1018 return;
1020 1019
1021 rval = qla2x00_set_serdes_params(ha, ha->fw_seriallink_options24[1], 1020 rval = qla2x00_set_serdes_params(ha,
1022 ha->fw_seriallink_options24[2], ha->fw_seriallink_options24[3]); 1021 le16_to_cpu(ha->fw_seriallink_options24[1]),
1022 le16_to_cpu(ha->fw_seriallink_options24[2]),
1023 le16_to_cpu(ha->fw_seriallink_options24[3]));
1023 if (rval != QLA_SUCCESS) { 1024 if (rval != QLA_SUCCESS) {
1024 qla_printk(KERN_WARNING, ha, 1025 qla_printk(KERN_WARNING, ha,
1025 "Unable to update Serial Link options (%x).\n", rval); 1026 "Unable to update Serial Link options (%x).\n", rval);
@@ -1940,6 +1941,9 @@ qla2x00_configure_local_loop(scsi_qla_host_t *ha)
1940 "information -- get_port_database=%x, " 1941 "information -- get_port_database=%x, "
1941 "loop_id=0x%04x\n", 1942 "loop_id=0x%04x\n",
1942 ha->host_no, rval2, new_fcport->loop_id)); 1943 ha->host_no, rval2, new_fcport->loop_id));
1944 DEBUG2(printk("scsi(%ld): Scheduling resync...\n",
1945 ha->host_no));
1946 set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
1943 continue; 1947 continue;
1944 } 1948 }
1945 1949
@@ -2649,7 +2653,8 @@ qla2x00_device_resync(scsi_qla_host_t *ha)
2649 2653
2650 switch (format) { 2654 switch (format) {
2651 case 0: 2655 case 0:
2652 if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && 2656 if (ql2xprocessrscn &&
2657 !IS_QLA2100(ha) && !IS_QLA2200(ha) &&
2653 !IS_QLA6312(ha) && !IS_QLA6322(ha) && 2658 !IS_QLA6312(ha) && !IS_QLA6322(ha) &&
2654 !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 2659 !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
2655 ha->flags.init_done) { 2660 ha->flags.init_done) {
@@ -3403,6 +3408,8 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
3403 ha->node_name = icb->node_name; 3408 ha->node_name = icb->node_name;
3404 ha->port_name = icb->port_name; 3409 ha->port_name = icb->port_name;
3405 3410
3411 icb->execution_throttle = __constant_cpu_to_le16(0xFFFF);
3412
3406 ha->retry_count = le16_to_cpu(nv->login_retry_count); 3413 ha->retry_count = le16_to_cpu(nv->login_retry_count);
3407 3414
3408 /* Set minimum login_timeout to 4 seconds. */ 3415 /* Set minimum login_timeout to 4 seconds. */
@@ -3484,17 +3491,16 @@ qla24xx_nvram_config(scsi_qla_host_t *ha)
3484 return (rval); 3491 return (rval);
3485} 3492}
3486 3493
3494#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
3495
3487int 3496int
3488qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr) 3497qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3489{ 3498{
3490 int rval; 3499 int rval, num, i;
3491 uint16_t cnt; 3500 uint32_t cnt;
3492 uint16_t *risc_code; 3501 uint16_t *risc_code;
3493 unsigned long risc_address; 3502 uint32_t risc_addr, risc_size;
3494 unsigned long risc_code_size; 3503 uint16_t *req_ring;
3495 int num;
3496 int i;
3497 uint16_t *req_ring;
3498 struct qla_fw_info *fw_iter; 3504 struct qla_fw_info *fw_iter;
3499 3505
3500 rval = QLA_SUCCESS; 3506 rval = QLA_SUCCESS;
@@ -3504,37 +3510,29 @@ qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3504 *srisc_addr = *ha->brd_info->fw_info->fwstart; 3510 *srisc_addr = *ha->brd_info->fw_info->fwstart;
3505 while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) { 3511 while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
3506 risc_code = fw_iter->fwcode; 3512 risc_code = fw_iter->fwcode;
3507 risc_code_size = *fw_iter->fwlen; 3513 risc_size = *fw_iter->fwlen;
3508 3514 if (fw_iter->addressing == FW_INFO_ADDR_NORMAL)
3509 if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) { 3515 risc_addr = *fw_iter->fwstart;
3510 risc_address = *fw_iter->fwstart; 3516 else
3511 } else { 3517 risc_addr = *fw_iter->lfwstart;
3512 /* Extended address */
3513 risc_address = *fw_iter->lfwstart;
3514 }
3515 3518
3516 num = 0; 3519 num = 0;
3517 rval = 0; 3520 rval = 0;
3518 while (risc_code_size > 0 && !rval) { 3521 while (risc_size > 0 && !rval) {
3519 cnt = (uint16_t)(ha->fw_transfer_size >> 1); 3522 cnt = (uint16_t)(ha->fw_transfer_size >> 1);
3520 if (cnt > risc_code_size) 3523 if (cnt > risc_size)
3521 cnt = risc_code_size; 3524 cnt = risc_size;
3522 3525
3523 DEBUG7(printk("scsi(%ld): Loading risc segment@ " 3526 DEBUG7(printk("scsi(%ld): Loading risc segment@ "
3524 "addr %p, number of bytes 0x%x, offset 0x%lx.\n", 3527 "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
3525 ha->host_no, risc_code, cnt, risc_address)); 3528 ha->host_no, risc_code, cnt, risc_addr));
3526 3529
3527 req_ring = (uint16_t *)ha->request_ring; 3530 req_ring = (uint16_t *)ha->request_ring;
3528 for (i = 0; i < cnt; i++) 3531 for (i = 0; i < cnt; i++)
3529 req_ring[i] = cpu_to_le16(risc_code[i]); 3532 req_ring[i] = cpu_to_le16(risc_code[i]);
3530 3533
3531 if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) { 3534 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3532 rval = qla2x00_load_ram(ha, ha->request_dma, 3535 cnt);
3533 risc_address, cnt);
3534 } else {
3535 rval = qla2x00_load_ram_ext(ha,
3536 ha->request_dma, risc_address, cnt);
3537 }
3538 if (rval) { 3536 if (rval) {
3539 DEBUG(printk("scsi(%ld): [ERROR] Failed to " 3537 DEBUG(printk("scsi(%ld): [ERROR] Failed to "
3540 "load segment %d of firmware\n", 3538 "load segment %d of firmware\n",
@@ -3548,16 +3546,76 @@ qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3548 } 3546 }
3549 3547
3550 risc_code += cnt; 3548 risc_code += cnt;
3551 risc_address += cnt; 3549 risc_addr += cnt;
3552 risc_code_size -= cnt; 3550 risc_size -= cnt;
3553 num++; 3551 num++;
3554 } 3552 }
3555 3553
3556 /* Next firmware sequence */ 3554 /* Next firmware sequence */
3557 fw_iter++; 3555 fw_iter++;
3558 } 3556 }
3557 return rval;
3558}
3559 3559
3560 return (rval); 3560int
3561qla24xx_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3562{
3563 int rval, num, i;
3564 uint32_t cnt;
3565 uint32_t *risc_code;
3566 uint32_t risc_addr, risc_size;
3567 uint32_t *req_ring;
3568 struct qla_fw_info *fw_iter;
3569
3570 rval = QLA_SUCCESS;
3571
3572 /* Load firmware sequences */
3573 fw_iter = ha->brd_info->fw_info;
3574 *srisc_addr = *((uint32_t *)fw_iter->lfwstart);
3575 while (fw_iter->addressing != FW_INFO_ADDR_NOMORE) {
3576 risc_code = (uint32_t *)fw_iter->fwcode;
3577 risc_size = *((uint32_t *)fw_iter->fwlen);
3578 risc_addr = *((uint32_t *)fw_iter->lfwstart);
3579
3580 num = 0;
3581 rval = 0;
3582 while (risc_size > 0 && !rval) {
3583 cnt = (uint32_t)(ha->fw_transfer_size >> 2);
3584 if (cnt > risc_size)
3585 cnt = risc_size;
3586
3587 DEBUG7(printk("scsi(%ld): Loading risc segment@ "
3588 "addr %p, number of bytes 0x%x, offset 0x%lx.\n",
3589 ha->host_no, risc_code, cnt, risc_addr));
3590
3591 req_ring = (uint32_t *)ha->request_ring;
3592 for (i = 0; i < cnt; i++)
3593 req_ring[i] = cpu_to_le32(risc_code[i]);
3594
3595 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3596 cnt);
3597 if (rval) {
3598 DEBUG(printk("scsi(%ld): [ERROR] Failed to "
3599 "load segment %d of firmware\n",
3600 ha->host_no, num));
3601 qla_printk(KERN_WARNING, ha,
3602 "[ERROR] Failed to load segment %d of "
3603 "firmware\n", num);
3604
3605 qla2x00_dump_regs(ha);
3606 break;
3607 }
3608
3609 risc_code += cnt;
3610 risc_addr += cnt;
3611 risc_size -= cnt;
3612 num++;
3613 }
3614
3615 /* Next firmware sequence */
3616 fw_iter++;
3617 }
3618 return rval;
3561} 3619}
3562 3620
3563int 3621int
@@ -3617,8 +3675,8 @@ qla24xx_load_risc_flash(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3617 for (i = 0; i < dlen; i++) 3675 for (i = 0; i < dlen; i++)
3618 dcode[i] = swab32(dcode[i]); 3676 dcode[i] = swab32(dcode[i]);
3619 3677
3620 rval = qla2x00_load_ram_ext(ha, ha->request_dma, 3678 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3621 risc_addr, dlen); 3679 dlen);
3622 if (rval) { 3680 if (rval) {
3623 DEBUG(printk("scsi(%ld):[ERROR] Failed to load " 3681 DEBUG(printk("scsi(%ld):[ERROR] Failed to load "
3624 "segment %d of firmware\n", ha->host_no, 3682 "segment %d of firmware\n", ha->host_no,
@@ -3642,8 +3700,108 @@ qla24xx_load_risc_flash(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3642 return rval; 3700 return rval;
3643} 3701}
3644 3702
3703#else /* !defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE) */
3704
3705int
3706qla2x00_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3707{
3708 int rval;
3709 int i, fragment;
3710 uint16_t *wcode, *fwcode;
3711 uint32_t risc_addr, risc_size, fwclen, wlen, *seg;
3712 struct fw_blob *blob;
3713
3714 /* Load firmware blob. */
3715 blob = qla2x00_request_firmware(ha);
3716 if (!blob) {
3717 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n");
3718 return QLA_FUNCTION_FAILED;
3719 }
3720
3721 rval = QLA_SUCCESS;
3722
3723 wcode = (uint16_t *)ha->request_ring;
3724 *srisc_addr = 0;
3725 fwcode = (uint16_t *)blob->fw->data;
3726 fwclen = 0;
3727
3728 /* Validate firmware image by checking version. */
3729 if (blob->fw->size < 8 * sizeof(uint16_t)) {
3730 qla_printk(KERN_WARNING, ha,
3731 "Unable to verify integrity of firmware image (%Zd)!\n",
3732 blob->fw->size);
3733 goto fail_fw_integrity;
3734 }
3735 for (i = 0; i < 4; i++)
3736 wcode[i] = be16_to_cpu(fwcode[i + 4]);
3737 if ((wcode[0] == 0xffff && wcode[1] == 0xffff && wcode[2] == 0xffff &&
3738 wcode[3] == 0xffff) || (wcode[0] == 0 && wcode[1] == 0 &&
3739 wcode[2] == 0 && wcode[3] == 0)) {
3740 qla_printk(KERN_WARNING, ha,
3741 "Unable to verify integrity of firmware image!\n");
3742 qla_printk(KERN_WARNING, ha,
3743 "Firmware data: %04x %04x %04x %04x!\n", wcode[0],
3744 wcode[1], wcode[2], wcode[3]);
3745 goto fail_fw_integrity;
3746 }
3747
3748 seg = blob->segs;
3749 while (*seg && rval == QLA_SUCCESS) {
3750 risc_addr = *seg;
3751 *srisc_addr = *srisc_addr == 0 ? *seg : *srisc_addr;
3752 risc_size = be16_to_cpu(fwcode[3]);
3753
3754 /* Validate firmware image size. */
3755 fwclen += risc_size * sizeof(uint16_t);
3756 if (blob->fw->size < fwclen) {
3757 qla_printk(KERN_WARNING, ha,
3758 "Unable to verify integrity of firmware image "
3759 "(%Zd)!\n", blob->fw->size);
3760 goto fail_fw_integrity;
3761 }
3762
3763 fragment = 0;
3764 while (risc_size > 0 && rval == QLA_SUCCESS) {
3765 wlen = (uint16_t)(ha->fw_transfer_size >> 1);
3766 if (wlen > risc_size)
3767 wlen = risc_size;
3768
3769 DEBUG7(printk("scsi(%ld): Loading risc segment@ risc "
3770 "addr %x, number of words 0x%x.\n", ha->host_no,
3771 risc_addr, wlen));
3772
3773 for (i = 0; i < wlen; i++)
3774 wcode[i] = swab16(fwcode[i]);
3775
3776 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3777 wlen);
3778 if (rval) {
3779 DEBUG(printk("scsi(%ld):[ERROR] Failed to load "
3780 "segment %d of firmware\n", ha->host_no,
3781 fragment));
3782 qla_printk(KERN_WARNING, ha,
3783 "[ERROR] Failed to load segment %d of "
3784 "firmware\n", fragment);
3785 break;
3786 }
3787
3788 fwcode += wlen;
3789 risc_addr += wlen;
3790 risc_size -= wlen;
3791 fragment++;
3792 }
3793
3794 /* Next segment. */
3795 seg++;
3796 }
3797 return rval;
3798
3799fail_fw_integrity:
3800 return QLA_FUNCTION_FAILED;
3801}
3802
3645int 3803int
3646qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr) 3804qla24xx_load_risc(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3647{ 3805{
3648 int rval; 3806 int rval;
3649 int segments, fragment; 3807 int segments, fragment;
@@ -3651,14 +3809,13 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3651 uint32_t risc_addr; 3809 uint32_t risc_addr;
3652 uint32_t risc_size; 3810 uint32_t risc_size;
3653 uint32_t i; 3811 uint32_t i;
3654 const struct firmware *fw_entry; 3812 struct fw_blob *blob;
3655 uint32_t *fwcode, fwclen; 3813 uint32_t *fwcode, fwclen;
3656 3814
3657 if (request_firmware(&fw_entry, ha->brd_info->fw_fname, 3815 /* Load firmware blob. */
3658 &ha->pdev->dev)) { 3816 blob = qla2x00_request_firmware(ha);
3659 qla_printk(KERN_ERR, ha, 3817 if (!blob) {
3660 "Firmware image file not available: '%s'\n", 3818 qla_printk(KERN_ERR, ha, "Firmware image unavailable.\n");
3661 ha->brd_info->fw_fname);
3662 return QLA_FUNCTION_FAILED; 3819 return QLA_FUNCTION_FAILED;
3663 } 3820 }
3664 3821
@@ -3667,14 +3824,14 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3667 segments = FA_RISC_CODE_SEGMENTS; 3824 segments = FA_RISC_CODE_SEGMENTS;
3668 dcode = (uint32_t *)ha->request_ring; 3825 dcode = (uint32_t *)ha->request_ring;
3669 *srisc_addr = 0; 3826 *srisc_addr = 0;
3670 fwcode = (uint32_t *)fw_entry->data; 3827 fwcode = (uint32_t *)blob->fw->data;
3671 fwclen = 0; 3828 fwclen = 0;
3672 3829
3673 /* Validate firmware image by checking version. */ 3830 /* Validate firmware image by checking version. */
3674 if (fw_entry->size < 8 * sizeof(uint32_t)) { 3831 if (blob->fw->size < 8 * sizeof(uint32_t)) {
3675 qla_printk(KERN_WARNING, ha, 3832 qla_printk(KERN_WARNING, ha,
3676 "Unable to verify integrity of flash firmware image " 3833 "Unable to verify integrity of firmware image (%Zd)!\n",
3677 "(%Zd)!\n", fw_entry->size); 3834 blob->fw->size);
3678 goto fail_fw_integrity; 3835 goto fail_fw_integrity;
3679 } 3836 }
3680 for (i = 0; i < 4; i++) 3837 for (i = 0; i < 4; i++)
@@ -3684,7 +3841,7 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3684 (dcode[0] == 0 && dcode[1] == 0 && dcode[2] == 0 && 3841 (dcode[0] == 0 && dcode[1] == 0 && dcode[2] == 0 &&
3685 dcode[3] == 0)) { 3842 dcode[3] == 0)) {
3686 qla_printk(KERN_WARNING, ha, 3843 qla_printk(KERN_WARNING, ha,
3687 "Unable to verify integrity of flash firmware image!\n"); 3844 "Unable to verify integrity of firmware image!\n");
3688 qla_printk(KERN_WARNING, ha, 3845 qla_printk(KERN_WARNING, ha,
3689 "Firmware data: %08x %08x %08x %08x!\n", dcode[0], 3846 "Firmware data: %08x %08x %08x %08x!\n", dcode[0],
3690 dcode[1], dcode[2], dcode[3]); 3847 dcode[1], dcode[2], dcode[3]);
@@ -3698,10 +3855,11 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3698 3855
3699 /* Validate firmware image size. */ 3856 /* Validate firmware image size. */
3700 fwclen += risc_size * sizeof(uint32_t); 3857 fwclen += risc_size * sizeof(uint32_t);
3701 if (fw_entry->size < fwclen) { 3858 if (blob->fw->size < fwclen) {
3702 qla_printk(KERN_WARNING, ha, 3859 qla_printk(KERN_WARNING, ha,
3703 "Unable to verify integrity of flash firmware " 3860 "Unable to verify integrity of firmware image "
3704 "image (%Zd)!\n", fw_entry->size); 3861 "(%Zd)!\n", blob->fw->size);
3862
3705 goto fail_fw_integrity; 3863 goto fail_fw_integrity;
3706 } 3864 }
3707 3865
@@ -3718,8 +3876,8 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3718 for (i = 0; i < dlen; i++) 3876 for (i = 0; i < dlen; i++)
3719 dcode[i] = swab32(fwcode[i]); 3877 dcode[i] = swab32(fwcode[i]);
3720 3878
3721 rval = qla2x00_load_ram_ext(ha, ha->request_dma, 3879 rval = qla2x00_load_ram(ha, ha->request_dma, risc_addr,
3722 risc_addr, dlen); 3880 dlen);
3723 if (rval) { 3881 if (rval) {
3724 DEBUG(printk("scsi(%ld):[ERROR] Failed to load " 3882 DEBUG(printk("scsi(%ld):[ERROR] Failed to load "
3725 "segment %d of firmware\n", ha->host_no, 3883 "segment %d of firmware\n", ha->host_no,
@@ -3739,13 +3897,9 @@ qla24xx_load_risc_hotplug(scsi_qla_host_t *ha, uint32_t *srisc_addr)
3739 /* Next segment. */ 3897 /* Next segment. */
3740 segments--; 3898 segments--;
3741 } 3899 }
3742
3743 release_firmware(fw_entry);
3744 return rval; 3900 return rval;
3745 3901
3746fail_fw_integrity: 3902fail_fw_integrity:
3747
3748 release_firmware(fw_entry);
3749 return QLA_FUNCTION_FAILED; 3903 return QLA_FUNCTION_FAILED;
3750
3751} 3904}
3905#endif
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 5181d966fecb..f63af081d4ff 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -519,7 +519,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
519 * us, create a new entry in our rscn fcports list and handle 519 * us, create a new entry in our rscn fcports list and handle
520 * the event like an RSCN. 520 * the event like an RSCN.
521 */ 521 */
522 if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) && 522 if (ql2xprocessrscn &&
523 !IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) &&
523 !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) && 524 !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
524 ha->flags.init_done && mb[1] != 0xffff && 525 ha->flags.init_done && mb[1] != 0xffff &&
525 ((ha->operating_mode == P2P && mb[1] != 0) || 526 ((ha->operating_mode == P2P && mb[1] != 0) ||
@@ -963,15 +964,16 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
963 break; 964 break;
964 965
965 case CS_DATA_UNDERRUN: 966 case CS_DATA_UNDERRUN:
966 DEBUG2(printk(KERN_INFO
967 "scsi(%ld:%d:%d) UNDERRUN status detected 0x%x-0x%x.\n",
968 ha->host_no, cp->device->id, cp->device->lun, comp_status,
969 scsi_status));
970
971 resid = resid_len; 967 resid = resid_len;
972 if (scsi_status & SS_RESIDUAL_UNDER) { 968 if (scsi_status & SS_RESIDUAL_UNDER) {
973 cp->resid = resid; 969 cp->resid = resid;
974 CMD_RESID_LEN(cp) = resid; 970 CMD_RESID_LEN(cp) = resid;
971 } else {
972 DEBUG2(printk(KERN_INFO
973 "scsi(%ld:%d:%d) UNDERRUN status detected "
974 "0x%x-0x%x.\n", ha->host_no, cp->device->id,
975 cp->device->lun, comp_status, scsi_status));
976
975 } 977 }
976 978
977 /* 979 /*
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index 9746cd1e664b..3099b379de9d 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -196,7 +196,9 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp)
196 /* Check for pending interrupts. */ 196 /* Check for pending interrupts. */
197 qla2x00_poll(ha); 197 qla2x00_poll(ha);
198 198
199 udelay(10); /* v4.27 */ 199 if (command != MBC_LOAD_RISC_RAM_EXTENDED &&
200 !ha->flags.mbox_int)
201 msleep(10);
200 } /* while */ 202 } /* while */
201 } 203 }
202 204
@@ -325,113 +327,30 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp)
325 return rval; 327 return rval;
326} 328}
327 329
328/*
329 * qla2x00_load_ram
330 * Load adapter RAM using DMA.
331 *
332 * Input:
333 * ha = adapter block pointer.
334 *
335 * Returns:
336 * qla2x00 local function return status code.
337 *
338 * Context:
339 * Kernel context.
340 */
341int 330int
342qla2x00_load_ram(scsi_qla_host_t *ha, dma_addr_t req_dma, uint16_t risc_addr, 331qla2x00_load_ram(scsi_qla_host_t *ha, dma_addr_t req_dma, uint32_t risc_addr,
343 uint16_t risc_code_size) 332 uint32_t risc_code_size)
344{ 333{
345 int rval; 334 int rval;
346 mbx_cmd_t mc; 335 mbx_cmd_t mc;
347 mbx_cmd_t *mcp = &mc; 336 mbx_cmd_t *mcp = &mc;
348 uint32_t req_len;
349 dma_addr_t nml_dma;
350 uint32_t nml_len;
351 uint32_t normalized;
352
353 DEBUG11(printk("qla2x00_load_ram(%ld): entered.\n",
354 ha->host_no);)
355 337
356 req_len = risc_code_size; 338 DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
357 nml_dma = 0;
358 nml_len = 0;
359
360 normalized = qla2x00_normalize_dma_addr(&req_dma, &req_len, &nml_dma,
361 &nml_len);
362
363 /* Load first segment */
364 mcp->mb[0] = MBC_LOAD_RISC_RAM;
365 mcp->mb[1] = risc_addr;
366 mcp->mb[2] = MSW(req_dma);
367 mcp->mb[3] = LSW(req_dma);
368 mcp->mb[4] = (uint16_t)req_len;
369 mcp->mb[6] = MSW(MSD(req_dma));
370 mcp->mb[7] = LSW(MSD(req_dma));
371 mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
372 mcp->in_mb = MBX_0;
373 mcp->tov = 30;
374 mcp->flags = 0;
375 rval = qla2x00_mailbox_command(ha, mcp);
376
377 /* Load second segment - if necessary */
378 if (normalized && (rval == QLA_SUCCESS)) {
379 mcp->mb[0] = MBC_LOAD_RISC_RAM;
380 mcp->mb[1] = risc_addr + (uint16_t)req_len;
381 mcp->mb[2] = MSW(nml_dma);
382 mcp->mb[3] = LSW(nml_dma);
383 mcp->mb[4] = (uint16_t)nml_len;
384 mcp->mb[6] = MSW(MSD(nml_dma));
385 mcp->mb[7] = LSW(MSD(nml_dma));
386 mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
387 mcp->in_mb = MBX_0;
388 mcp->tov = 30;
389 mcp->flags = 0;
390 rval = qla2x00_mailbox_command(ha, mcp);
391 }
392 339
393 if (rval == QLA_SUCCESS) { 340 if (MSW(risc_addr) || IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
394 /* Empty */ 341 mcp->mb[0] = MBC_LOAD_RISC_RAM_EXTENDED;
395 DEBUG11(printk("qla2x00_load_ram(%ld): done.\n", ha->host_no);) 342 mcp->mb[8] = MSW(risc_addr);
343 mcp->out_mb = MBX_8|MBX_0;
396 } else { 344 } else {
397 /* Empty */ 345 mcp->mb[0] = MBC_LOAD_RISC_RAM;
398 DEBUG2_3_11(printk("qla2x00_load_ram(%ld): failed. rval=%x " 346 mcp->out_mb = MBX_0;
399 "mb[0]=%x.\n", ha->host_no, rval, mcp->mb[0]);)
400 } 347 }
401 return rval;
402}
403
404/*
405 * qla2x00_load_ram_ext
406 * Load adapter extended RAM using DMA.
407 *
408 * Input:
409 * ha = adapter block pointer.
410 *
411 * Returns:
412 * qla2x00 local function return status code.
413 *
414 * Context:
415 * Kernel context.
416 */
417int
418qla2x00_load_ram_ext(scsi_qla_host_t *ha, dma_addr_t req_dma,
419 uint32_t risc_addr, uint32_t risc_code_size)
420{
421 int rval;
422 mbx_cmd_t mc;
423 mbx_cmd_t *mcp = &mc;
424
425 DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
426
427 mcp->mb[0] = MBC_LOAD_RISC_RAM_EXTENDED;
428 mcp->mb[1] = LSW(risc_addr); 348 mcp->mb[1] = LSW(risc_addr);
429 mcp->mb[2] = MSW(req_dma); 349 mcp->mb[2] = MSW(req_dma);
430 mcp->mb[3] = LSW(req_dma); 350 mcp->mb[3] = LSW(req_dma);
431 mcp->mb[6] = MSW(MSD(req_dma)); 351 mcp->mb[6] = MSW(MSD(req_dma));
432 mcp->mb[7] = LSW(MSD(req_dma)); 352 mcp->mb[7] = LSW(MSD(req_dma));
433 mcp->mb[8] = MSW(risc_addr); 353 mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
434 mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
435 if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) { 354 if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
436 mcp->mb[4] = MSW(risc_code_size); 355 mcp->mb[4] = MSW(risc_code_size);
437 mcp->mb[5] = LSW(risc_code_size); 356 mcp->mb[5] = LSW(risc_code_size);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index c58c9d97b041..4916847d84ec 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -54,10 +54,12 @@ module_param(ql2xloginretrycount, int, S_IRUGO|S_IRUSR);
54MODULE_PARM_DESC(ql2xloginretrycount, 54MODULE_PARM_DESC(ql2xloginretrycount,
55 "Specify an alternate value for the NVRAM login retry count."); 55 "Specify an alternate value for the NVRAM login retry count.");
56 56
57int ql2xfwloadbin=1; 57#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
58module_param(ql2xfwloadbin, int, S_IRUGO|S_IRUSR); 58int ql2xfwloadflash;
59MODULE_PARM_DESC(ql2xfwloadbin, 59module_param(ql2xfwloadflash, int, S_IRUGO|S_IRUSR);
60 "Load ISP2xxx firmware image via hotplug."); 60MODULE_PARM_DESC(ql2xfwloadflash,
61 "Load ISP24xx firmware image from FLASH (onboard memory).");
62#endif
61 63
62static void qla2x00_free_device(scsi_qla_host_t *); 64static void qla2x00_free_device(scsi_qla_host_t *);
63 65
@@ -69,6 +71,12 @@ MODULE_PARM_DESC(ql2xfdmienable,
69 "Enables FDMI registratons " 71 "Enables FDMI registratons "
70 "Default is 0 - no FDMI. 1 - perfom FDMI."); 72 "Default is 0 - no FDMI. 1 - perfom FDMI.");
71 73
74int ql2xprocessrscn;
75module_param(ql2xprocessrscn, int, S_IRUGO|S_IRUSR);
76MODULE_PARM_DESC(ql2xprocessrscn,
77 "Option to enable port RSCN handling via a series of less"
78 "fabric intrusive ADISCs and PLOGIs.");
79
72/* 80/*
73 * SCSI host template entry points 81 * SCSI host template entry points
74 */ 82 */
@@ -1261,12 +1269,16 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1261 char pci_info[20]; 1269 char pci_info[20];
1262 char fw_str[30]; 1270 char fw_str[30];
1263 fc_port_t *fcport; 1271 fc_port_t *fcport;
1272 struct scsi_host_template *sht;
1264 1273
1265 if (pci_enable_device(pdev)) 1274 if (pci_enable_device(pdev))
1266 goto probe_out; 1275 goto probe_out;
1267 1276
1268 host = scsi_host_alloc(brd_info->sht ? brd_info->sht: 1277 sht = &qla2x00_driver_template;
1269 &qla2x00_driver_template, sizeof(scsi_qla_host_t)); 1278 if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
1279 pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432)
1280 sht = &qla24xx_driver_template;
1281 host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
1270 if (host == NULL) { 1282 if (host == NULL) {
1271 printk(KERN_WARNING 1283 printk(KERN_WARNING
1272 "qla2xxx: Couldn't allocate host from scsi layer!\n"); 1284 "qla2xxx: Couldn't allocate host from scsi layer!\n");
@@ -1291,8 +1303,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1291 goto probe_failed; 1303 goto probe_failed;
1292 1304
1293 qla_printk(KERN_INFO, ha, 1305 qla_printk(KERN_INFO, ha,
1294 "Found an %s, irq %d, iobase 0x%p\n", ha->brd_info->isp_name, 1306 "Found an ISP%04X, irq %d, iobase 0x%p\n", pdev->device, pdev->irq,
1295 pdev->irq, ha->iobase); 1307 ha->iobase);
1296 1308
1297 spin_lock_init(&ha->hardware_lock); 1309 spin_lock_init(&ha->hardware_lock);
1298 1310
@@ -1368,9 +1380,11 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1368 ha->isp_ops.reset_adapter = qla24xx_reset_adapter; 1380 ha->isp_ops.reset_adapter = qla24xx_reset_adapter;
1369 ha->isp_ops.nvram_config = qla24xx_nvram_config; 1381 ha->isp_ops.nvram_config = qla24xx_nvram_config;
1370 ha->isp_ops.update_fw_options = qla24xx_update_fw_options; 1382 ha->isp_ops.update_fw_options = qla24xx_update_fw_options;
1371 ha->isp_ops.load_risc = qla24xx_load_risc_flash; 1383 ha->isp_ops.load_risc = qla24xx_load_risc;
1372 if (ql2xfwloadbin) 1384#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
1373 ha->isp_ops.load_risc = qla24xx_load_risc_hotplug; 1385 if (ql2xfwloadflash)
1386 ha->isp_ops.load_risc = qla24xx_load_risc_flash;
1387#endif
1374 ha->isp_ops.pci_info_str = qla24xx_pci_info_str; 1388 ha->isp_ops.pci_info_str = qla24xx_pci_info_str;
1375 ha->isp_ops.fw_version_str = qla24xx_fw_version_str; 1389 ha->isp_ops.fw_version_str = qla24xx_fw_version_str;
1376 ha->isp_ops.intr_handler = qla24xx_intr_handler; 1390 ha->isp_ops.intr_handler = qla24xx_intr_handler;
@@ -1531,11 +1545,12 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1531 qla_printk(KERN_INFO, ha, "\n" 1545 qla_printk(KERN_INFO, ha, "\n"
1532 " QLogic Fibre Channel HBA Driver: %s\n" 1546 " QLogic Fibre Channel HBA Driver: %s\n"
1533 " QLogic %s - %s\n" 1547 " QLogic %s - %s\n"
1534 " %s: %s @ %s hdma%c, host#=%ld, fw=%s\n", qla2x00_version_str, 1548 " ISP%04X: %s @ %s hdma%c, host#=%ld, fw=%s\n",
1535 ha->model_number, ha->model_desc ? ha->model_desc: "", 1549 qla2x00_version_str, ha->model_number,
1536 ha->brd_info->isp_name, ha->isp_ops.pci_info_str(ha, pci_info), 1550 ha->model_desc ? ha->model_desc: "", pdev->device,
1537 pci_name(pdev), ha->flags.enable_64bit_addressing ? '+': '-', 1551 ha->isp_ops.pci_info_str(ha, pci_info), pci_name(pdev),
1538 ha->host_no, ha->isp_ops.fw_version_str(ha, fw_str)); 1552 ha->flags.enable_64bit_addressing ? '+': '-', ha->host_no,
1553 ha->isp_ops.fw_version_str(ha, fw_str));
1539 1554
1540 /* Go with fc_rport registration. */ 1555 /* Go with fc_rport registration. */
1541 list_for_each_entry(fcport, &ha->fcports, list) 1556 list_for_each_entry(fcport, &ha->fcports, list)
@@ -2483,45 +2498,115 @@ qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
2483 return -ETIMEDOUT; 2498 return -ETIMEDOUT;
2484} 2499}
2485 2500
2486static struct qla_board_info qla_board_tbl[] = { 2501#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
2487 { 2502
2488 .drv_name = "qla2400", 2503#define qla2x00_release_firmware() do { } while (0)
2489 .isp_name = "ISP2422", 2504#define qla2x00_pci_module_init() (0)
2490 .fw_fname = "ql2400_fw.bin", 2505#define qla2x00_pci_module_exit() do { } while (0)
2491 .sht = &qla24xx_driver_template, 2506
2492 }, 2507#else /* !defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE) */
2493 { 2508
2494 .drv_name = "qla2400", 2509/* Firmware interface routines. */
2495 .isp_name = "ISP2432", 2510
2496 .fw_fname = "ql2400_fw.bin", 2511#define FW_BLOBS 6
2497 .sht = &qla24xx_driver_template, 2512#define FW_ISP21XX 0
2498 }, 2513#define FW_ISP22XX 1
2514#define FW_ISP2300 2
2515#define FW_ISP2322 3
2516#define FW_ISP63XX 4
2517#define FW_ISP24XX 5
2518
2519static DECLARE_MUTEX(qla_fw_lock);
2520
2521static struct fw_blob qla_fw_blobs[FW_BLOBS] = {
2522 { .name = "ql2100_fw.bin", .segs = { 0x1000, 0 }, },
2523 { .name = "ql2200_fw.bin", .segs = { 0x1000, 0 }, },
2524 { .name = "ql2300_fw.bin", .segs = { 0x800, 0 }, },
2525 { .name = "ql2322_fw.bin", .segs = { 0x800, 0x1c000, 0x1e000, 0 }, },
2526 { .name = "ql6312_fw.bin", .segs = { 0x800, 0 }, },
2527 { .name = "ql2400_fw.bin", },
2528};
2529
2530struct fw_blob *
2531qla2x00_request_firmware(scsi_qla_host_t *ha)
2532{
2533 struct fw_blob *blob;
2534
2535 blob = NULL;
2536 if (IS_QLA2100(ha)) {
2537 blob = &qla_fw_blobs[FW_ISP21XX];
2538 } else if (IS_QLA2200(ha)) {
2539 blob = &qla_fw_blobs[FW_ISP22XX];
2540 } else if (IS_QLA2300(ha) || IS_QLA2312(ha)) {
2541 blob = &qla_fw_blobs[FW_ISP2300];
2542 } else if (IS_QLA2322(ha)) {
2543 blob = &qla_fw_blobs[FW_ISP2322];
2544 } else if (IS_QLA6312(ha) || IS_QLA6322(ha)) {
2545 blob = &qla_fw_blobs[FW_ISP63XX];
2546 } else if (IS_QLA24XX(ha)) {
2547 blob = &qla_fw_blobs[FW_ISP24XX];
2548 }
2549
2550 down(&qla_fw_lock);
2551 if (blob->fw)
2552 goto out;
2553
2554 if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
2555 DEBUG2(printk("scsi(%ld): Failed to load firmware image "
2556 "(%s).\n", ha->host_no, blob->name));
2557 blob->fw = NULL;
2558 blob = NULL;
2559 goto out;
2560 }
2561
2562out:
2563 up(&qla_fw_lock);
2564 return blob;
2565}
2566
2567static void
2568qla2x00_release_firmware(void)
2569{
2570 int idx;
2571
2572 down(&qla_fw_lock);
2573 for (idx = 0; idx < FW_BLOBS; idx++)
2574 if (qla_fw_blobs[idx].fw)
2575 release_firmware(qla_fw_blobs[idx].fw);
2576 up(&qla_fw_lock);
2577}
2578
2579static struct qla_board_info qla_board_tbl = {
2580 .drv_name = "qla2xxx",
2499}; 2581};
2500 2582
2501static struct pci_device_id qla2xxx_pci_tbl[] = { 2583static struct pci_device_id qla2xxx_pci_tbl[] = {
2502 { 2584 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100,
2503 .vendor = PCI_VENDOR_ID_QLOGIC, 2585 PCI_ANY_ID, PCI_ANY_ID, },
2504 .device = PCI_DEVICE_ID_QLOGIC_ISP2422, 2586 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200,
2505 .subvendor = PCI_ANY_ID, 2587 PCI_ANY_ID, PCI_ANY_ID, },
2506 .subdevice = PCI_ANY_ID, 2588 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300,
2507 .driver_data = (unsigned long)&qla_board_tbl[0], 2589 PCI_ANY_ID, PCI_ANY_ID, },
2508 }, 2590 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2312,
2509 { 2591 PCI_ANY_ID, PCI_ANY_ID, },
2510 .vendor = PCI_VENDOR_ID_QLOGIC, 2592 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2322,
2511 .device = PCI_DEVICE_ID_QLOGIC_ISP2432, 2593 PCI_ANY_ID, PCI_ANY_ID, },
2512 .subvendor = PCI_ANY_ID, 2594 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6312,
2513 .subdevice = PCI_ANY_ID, 2595 PCI_ANY_ID, PCI_ANY_ID, },
2514 .driver_data = (unsigned long)&qla_board_tbl[1], 2596 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6322,
2515 }, 2597 PCI_ANY_ID, PCI_ANY_ID, },
2516 {0, 0}, 2598 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2422,
2599 PCI_ANY_ID, PCI_ANY_ID, },
2600 { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2432,
2601 PCI_ANY_ID, PCI_ANY_ID, },
2602 { 0 },
2517}; 2603};
2518MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl); 2604MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl);
2519 2605
2520static int __devinit 2606static int __devinit
2521qla2xxx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) 2607qla2xxx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
2522{ 2608{
2523 return qla2x00_probe_one(pdev, 2609 return qla2x00_probe_one(pdev, &qla_board_tbl);
2524 (struct qla_board_info *)id->driver_data);
2525} 2610}
2526 2611
2527static void __devexit 2612static void __devexit
@@ -2532,11 +2617,28 @@ qla2xxx_remove_one(struct pci_dev *pdev)
2532 2617
2533static struct pci_driver qla2xxx_pci_driver = { 2618static struct pci_driver qla2xxx_pci_driver = {
2534 .name = "qla2xxx", 2619 .name = "qla2xxx",
2620 .driver = {
2621 .owner = THIS_MODULE,
2622 },
2535 .id_table = qla2xxx_pci_tbl, 2623 .id_table = qla2xxx_pci_tbl,
2536 .probe = qla2xxx_probe_one, 2624 .probe = qla2xxx_probe_one,
2537 .remove = __devexit_p(qla2xxx_remove_one), 2625 .remove = __devexit_p(qla2xxx_remove_one),
2538}; 2626};
2539 2627
2628static inline int
2629qla2x00_pci_module_init(void)
2630{
2631 return pci_module_init(&qla2xxx_pci_driver);
2632}
2633
2634static inline void
2635qla2x00_pci_module_exit(void)
2636{
2637 pci_unregister_driver(&qla2xxx_pci_driver);
2638}
2639
2640#endif
2641
2540/** 2642/**
2541 * qla2x00_module_init - Module initialization. 2643 * qla2x00_module_init - Module initialization.
2542 **/ 2644 **/
@@ -2556,6 +2658,9 @@ qla2x00_module_init(void)
2556 2658
2557 /* Derive version string. */ 2659 /* Derive version string. */
2558 strcpy(qla2x00_version_str, QLA2XXX_VERSION); 2660 strcpy(qla2x00_version_str, QLA2XXX_VERSION);
2661#if defined(CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE)
2662 strcat(qla2x00_version_str, "-fw");
2663#endif
2559#if DEBUG_QLA2100 2664#if DEBUG_QLA2100
2560 strcat(qla2x00_version_str, "-debug"); 2665 strcat(qla2x00_version_str, "-debug");
2561#endif 2666#endif
@@ -2565,7 +2670,7 @@ qla2x00_module_init(void)
2565 return -ENODEV; 2670 return -ENODEV;
2566 2671
2567 printk(KERN_INFO "QLogic Fibre Channel HBA Driver\n"); 2672 printk(KERN_INFO "QLogic Fibre Channel HBA Driver\n");
2568 ret = pci_module_init(&qla2xxx_pci_driver); 2673 ret = qla2x00_pci_module_init();
2569 if (ret) { 2674 if (ret) {
2570 kmem_cache_destroy(srb_cachep); 2675 kmem_cache_destroy(srb_cachep);
2571 fc_release_transport(qla2xxx_transport_template); 2676 fc_release_transport(qla2xxx_transport_template);
@@ -2579,7 +2684,8 @@ qla2x00_module_init(void)
2579static void __exit 2684static void __exit
2580qla2x00_module_exit(void) 2685qla2x00_module_exit(void)
2581{ 2686{
2582 pci_unregister_driver(&qla2xxx_pci_driver); 2687 qla2x00_pci_module_exit();
2688 qla2x00_release_firmware();
2583 kmem_cache_destroy(srb_cachep); 2689 kmem_cache_destroy(srb_cachep);
2584 fc_release_transport(qla2xxx_transport_template); 2690 fc_release_transport(qla2xxx_transport_template);
2585} 2691}
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
index d54d2a99c3d3..f4d755a643e4 100644
--- a/drivers/scsi/qla2xxx/qla_sup.c
+++ b/drivers/scsi/qla2xxx/qla_sup.c
@@ -573,6 +573,9 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
573 } 573 }
574 } while (0); 574 } while (0);
575 575
576 /* Enable flash write-protection. */
577 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0x9c);
578
576 /* Disable flash write. */ 579 /* Disable flash write. */
577 WRT_REG_DWORD(&reg->ctrl_status, 580 WRT_REG_DWORD(&reg->ctrl_status,
578 RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE); 581 RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE);
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
index f7937f7f9c68..d537192a1edb 100644
--- a/drivers/scsi/qla2xxx/qla_version.h
+++ b/drivers/scsi/qla2xxx/qla_version.h
@@ -7,9 +7,9 @@
7/* 7/*
8 * Driver version 8 * Driver version
9 */ 9 */
10#define QLA2XXX_VERSION "8.01.03-k" 10#define QLA2XXX_VERSION "8.01.04-k"
11 11
12#define QLA_DRIVER_MAJOR_VER 8 12#define QLA_DRIVER_MAJOR_VER 8
13#define QLA_DRIVER_MINOR_VER 1 13#define QLA_DRIVER_MINOR_VER 1
14#define QLA_DRIVER_PATCH_VER 3 14#define QLA_DRIVER_PATCH_VER 4
15#define QLA_DRIVER_BETA_VER 0 15#define QLA_DRIVER_BETA_VER 0
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
index 5b1c12041a4f..50c398aab557 100644
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -115,7 +115,7 @@ static DECLARE_TRANSPORT_CLASS(raid_class,
115 raid_remove, 115 raid_remove,
116 NULL); 116 NULL);
117 117
118static struct { 118static const struct {
119 enum raid_state value; 119 enum raid_state value;
120 char *name; 120 char *name;
121} raid_states[] = { 121} raid_states[] = {
@@ -148,9 +148,11 @@ static struct {
148 { RAID_LEVEL_LINEAR, "linear" }, 148 { RAID_LEVEL_LINEAR, "linear" },
149 { RAID_LEVEL_0, "raid0" }, 149 { RAID_LEVEL_0, "raid0" },
150 { RAID_LEVEL_1, "raid1" }, 150 { RAID_LEVEL_1, "raid1" },
151 { RAID_LEVEL_10, "raid10" },
151 { RAID_LEVEL_3, "raid3" }, 152 { RAID_LEVEL_3, "raid3" },
152 { RAID_LEVEL_4, "raid4" }, 153 { RAID_LEVEL_4, "raid4" },
153 { RAID_LEVEL_5, "raid5" }, 154 { RAID_LEVEL_5, "raid5" },
155 { RAID_LEVEL_50, "raid50" },
154 { RAID_LEVEL_6, "raid6" }, 156 { RAID_LEVEL_6, "raid6" },
155}; 157};
156 158
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c
index 17044168ebfe..e9bee1210c23 100644
--- a/drivers/scsi/sata_mv.c
+++ b/drivers/scsi/sata_mv.c
@@ -374,7 +374,6 @@ static struct scsi_host_template mv_sht = {
374 .dma_boundary = MV_DMA_BOUNDARY, 374 .dma_boundary = MV_DMA_BOUNDARY,
375 .slave_configure = ata_scsi_slave_config, 375 .slave_configure = ata_scsi_slave_config,
376 .bios_param = ata_std_bios_param, 376 .bios_param = ata_std_bios_param,
377 .ordered_flush = 1,
378}; 377};
379 378
380static const struct ata_port_operations mv5_ops = { 379static const struct ata_port_operations mv5_ops = {
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c
index 8fdb2336f6f3..945194b76998 100644
--- a/drivers/scsi/sata_nv.c
+++ b/drivers/scsi/sata_nv.c
@@ -29,6 +29,12 @@
29 * NV-specific details such as register offsets, SATA phy location, 29 * NV-specific details such as register offsets, SATA phy location,
30 * hotplug info, etc. 30 * hotplug info, etc.
31 * 31 *
32 * 0.10
33 * - Fixed spurious interrupts issue seen with the Maxtor 6H500F0 500GB
34 * drive. Also made the check_hotplug() callbacks return whether there
35 * was a hotplug interrupt or not. This was not the source of the
36 * spurious interrupts, but is the right thing to do anyway.
37 *
32 * 0.09 38 * 0.09
33 * - Fixed bug introduced by 0.08's MCP51 and MCP55 support. 39 * - Fixed bug introduced by 0.08's MCP51 and MCP55 support.
34 * 40 *
@@ -124,10 +130,10 @@ static void nv_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
124static void nv_host_stop (struct ata_host_set *host_set); 130static void nv_host_stop (struct ata_host_set *host_set);
125static void nv_enable_hotplug(struct ata_probe_ent *probe_ent); 131static void nv_enable_hotplug(struct ata_probe_ent *probe_ent);
126static void nv_disable_hotplug(struct ata_host_set *host_set); 132static void nv_disable_hotplug(struct ata_host_set *host_set);
127static void nv_check_hotplug(struct ata_host_set *host_set); 133static int nv_check_hotplug(struct ata_host_set *host_set);
128static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent); 134static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent);
129static void nv_disable_hotplug_ck804(struct ata_host_set *host_set); 135static void nv_disable_hotplug_ck804(struct ata_host_set *host_set);
130static void nv_check_hotplug_ck804(struct ata_host_set *host_set); 136static int nv_check_hotplug_ck804(struct ata_host_set *host_set);
131 137
132enum nv_host_type 138enum nv_host_type
133{ 139{
@@ -176,7 +182,7 @@ struct nv_host_desc
176 enum nv_host_type host_type; 182 enum nv_host_type host_type;
177 void (*enable_hotplug)(struct ata_probe_ent *probe_ent); 183 void (*enable_hotplug)(struct ata_probe_ent *probe_ent);
178 void (*disable_hotplug)(struct ata_host_set *host_set); 184 void (*disable_hotplug)(struct ata_host_set *host_set);
179 void (*check_hotplug)(struct ata_host_set *host_set); 185 int (*check_hotplug)(struct ata_host_set *host_set);
180 186
181}; 187};
182static struct nv_host_desc nv_device_tbl[] = { 188static struct nv_host_desc nv_device_tbl[] = {
@@ -235,7 +241,6 @@ static struct scsi_host_template nv_sht = {
235 .dma_boundary = ATA_DMA_BOUNDARY, 241 .dma_boundary = ATA_DMA_BOUNDARY,
236 .slave_configure = ata_scsi_slave_config, 242 .slave_configure = ata_scsi_slave_config,
237 .bios_param = ata_std_bios_param, 243 .bios_param = ata_std_bios_param,
238 .ordered_flush = 1,
239}; 244};
240 245
241static const struct ata_port_operations nv_ops = { 246static const struct ata_port_operations nv_ops = {
@@ -310,12 +315,16 @@ static irqreturn_t nv_interrupt (int irq, void *dev_instance,
310 qc = ata_qc_from_tag(ap, ap->active_tag); 315 qc = ata_qc_from_tag(ap, ap->active_tag);
311 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) 316 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)))
312 handled += ata_host_intr(ap, qc); 317 handled += ata_host_intr(ap, qc);
318 else
319 // No request pending? Clear interrupt status
320 // anyway, in case there's one pending.
321 ap->ops->check_status(ap);
313 } 322 }
314 323
315 } 324 }
316 325
317 if (host->host_desc->check_hotplug) 326 if (host->host_desc->check_hotplug)
318 host->host_desc->check_hotplug(host_set); 327 handled += host->host_desc->check_hotplug(host_set);
319 328
320 spin_unlock_irqrestore(&host_set->lock, flags); 329 spin_unlock_irqrestore(&host_set->lock, flags);
321 330
@@ -498,7 +507,7 @@ static void nv_disable_hotplug(struct ata_host_set *host_set)
498 outb(intr_mask, host_set->ports[0]->ioaddr.scr_addr + NV_INT_ENABLE); 507 outb(intr_mask, host_set->ports[0]->ioaddr.scr_addr + NV_INT_ENABLE);
499} 508}
500 509
501static void nv_check_hotplug(struct ata_host_set *host_set) 510static int nv_check_hotplug(struct ata_host_set *host_set)
502{ 511{
503 u8 intr_status; 512 u8 intr_status;
504 513
@@ -523,7 +532,11 @@ static void nv_check_hotplug(struct ata_host_set *host_set)
523 if (intr_status & NV_INT_STATUS_SDEV_REMOVED) 532 if (intr_status & NV_INT_STATUS_SDEV_REMOVED)
524 printk(KERN_WARNING "nv_sata: " 533 printk(KERN_WARNING "nv_sata: "
525 "Secondary device removed\n"); 534 "Secondary device removed\n");
535
536 return 1;
526 } 537 }
538
539 return 0;
527} 540}
528 541
529static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent) 542static void nv_enable_hotplug_ck804(struct ata_probe_ent *probe_ent)
@@ -561,7 +574,7 @@ static void nv_disable_hotplug_ck804(struct ata_host_set *host_set)
561 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval); 574 pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
562} 575}
563 576
564static void nv_check_hotplug_ck804(struct ata_host_set *host_set) 577static int nv_check_hotplug_ck804(struct ata_host_set *host_set)
565{ 578{
566 u8 intr_status; 579 u8 intr_status;
567 580
@@ -586,7 +599,11 @@ static void nv_check_hotplug_ck804(struct ata_host_set *host_set)
586 if (intr_status & NV_INT_STATUS_SDEV_REMOVED) 599 if (intr_status & NV_INT_STATUS_SDEV_REMOVED)
587 printk(KERN_WARNING "nv_sata: " 600 printk(KERN_WARNING "nv_sata: "
588 "Secondary device removed\n"); 601 "Secondary device removed\n");
602
603 return 1;
589 } 604 }
605
606 return 0;
590} 607}
591 608
592static int __init nv_init(void) 609static int __init nv_init(void)
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c
index e35838043b56..02b14a870f52 100644
--- a/drivers/scsi/sata_promise.c
+++ b/drivers/scsi/sata_promise.c
@@ -66,6 +66,7 @@ enum {
66 board_2037x = 0, /* FastTrak S150 TX2plus */ 66 board_2037x = 0, /* FastTrak S150 TX2plus */
67 board_20319 = 1, /* FastTrak S150 TX4 */ 67 board_20319 = 1, /* FastTrak S150 TX4 */
68 board_20619 = 2, /* FastTrak TX4000 */ 68 board_20619 = 2, /* FastTrak TX4000 */
69 board_20771 = 3, /* FastTrak TX2300 */
69 70
70 PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */ 71 PDC_HAS_PATA = (1 << 1), /* PDC20375 has PATA */
71 72
@@ -115,7 +116,6 @@ static struct scsi_host_template pdc_ata_sht = {
115 .dma_boundary = ATA_DMA_BOUNDARY, 116 .dma_boundary = ATA_DMA_BOUNDARY,
116 .slave_configure = ata_scsi_slave_config, 117 .slave_configure = ata_scsi_slave_config,
117 .bios_param = ata_std_bios_param, 118 .bios_param = ata_std_bios_param,
118 .ordered_flush = 1,
119}; 119};
120 120
121static const struct ata_port_operations pdc_sata_ops = { 121static const struct ata_port_operations pdc_sata_ops = {
@@ -192,6 +192,16 @@ static const struct ata_port_info pdc_port_info[] = {
192 .udma_mask = 0x7f, /* udma0-6 ; FIXME */ 192 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
193 .port_ops = &pdc_pata_ops, 193 .port_ops = &pdc_pata_ops,
194 }, 194 },
195
196 /* board_20771 */
197 {
198 .sht = &pdc_ata_sht,
199 .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA,
200 .pio_mask = 0x1f, /* pio0-4 */
201 .mwdma_mask = 0x07, /* mwdma0-2 */
202 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
203 .port_ops = &pdc_sata_ops,
204 },
195}; 205};
196 206
197static const struct pci_device_id pdc_ata_pci_tbl[] = { 207static const struct pci_device_id pdc_ata_pci_tbl[] = {
@@ -228,6 +238,8 @@ static const struct pci_device_id pdc_ata_pci_tbl[] = {
228 { PCI_VENDOR_ID_PROMISE, 0x6629, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 238 { PCI_VENDOR_ID_PROMISE, 0x6629, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
229 board_20619 }, 239 board_20619 },
230 240
241 { PCI_VENDOR_ID_PROMISE, 0x3570, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
242 board_20771 },
231 { } /* terminate list */ 243 { } /* terminate list */
232}; 244};
233 245
@@ -708,6 +720,9 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
708 case board_2037x: 720 case board_2037x:
709 probe_ent->n_ports = 2; 721 probe_ent->n_ports = 2;
710 break; 722 break;
723 case board_20771:
724 probe_ent->n_ports = 2;
725 break;
711 case board_20619: 726 case board_20619:
712 probe_ent->n_ports = 4; 727 probe_ent->n_ports = 4;
713 728
diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
index d2053487c73b..b017f85e6d6a 100644
--- a/drivers/scsi/sata_sil.c
+++ b/drivers/scsi/sata_sil.c
@@ -147,7 +147,6 @@ static struct scsi_host_template sil_sht = {
147 .dma_boundary = ATA_DMA_BOUNDARY, 147 .dma_boundary = ATA_DMA_BOUNDARY,
148 .slave_configure = ata_scsi_slave_config, 148 .slave_configure = ata_scsi_slave_config,
149 .bios_param = ata_std_bios_param, 149 .bios_param = ata_std_bios_param,
150 .ordered_flush = 1,
151}; 150};
152 151
153static const struct ata_port_operations sil_ops = { 152static const struct ata_port_operations sil_ops = {
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c
index a0ad3ed2200a..923130185a9e 100644
--- a/drivers/scsi/sata_sil24.c
+++ b/drivers/scsi/sata_sil24.c
@@ -292,7 +292,6 @@ static struct scsi_host_template sil24_sht = {
292 .dma_boundary = ATA_DMA_BOUNDARY, 292 .dma_boundary = ATA_DMA_BOUNDARY,
293 .slave_configure = ata_scsi_slave_config, 293 .slave_configure = ata_scsi_slave_config,
294 .bios_param = ata_std_bios_param, 294 .bios_param = ata_std_bios_param,
295 .ordered_flush = 1, /* NCQ not supported yet */
296}; 295};
297 296
298static const struct ata_port_operations sil24_ops = { 297static const struct ata_port_operations sil24_ops = {
diff --git a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c
index 32e12620b162..2df8c5632ac3 100644
--- a/drivers/scsi/sata_sis.c
+++ b/drivers/scsi/sata_sis.c
@@ -99,7 +99,6 @@ static struct scsi_host_template sis_sht = {
99 .dma_boundary = ATA_DMA_BOUNDARY, 99 .dma_boundary = ATA_DMA_BOUNDARY,
100 .slave_configure = ata_scsi_slave_config, 100 .slave_configure = ata_scsi_slave_config,
101 .bios_param = ata_std_bios_param, 101 .bios_param = ata_std_bios_param,
102 .ordered_flush = 1,
103}; 102};
104 103
105static const struct ata_port_operations sis_ops = { 104static const struct ata_port_operations sis_ops = {
diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
index 6e7f7c83a75a..d8472563fde8 100644
--- a/drivers/scsi/sata_svw.c
+++ b/drivers/scsi/sata_svw.c
@@ -303,7 +303,6 @@ static struct scsi_host_template k2_sata_sht = {
303 .proc_info = k2_sata_proc_info, 303 .proc_info = k2_sata_proc_info,
304#endif 304#endif
305 .bios_param = ata_std_bios_param, 305 .bios_param = ata_std_bios_param,
306 .ordered_flush = 1,
307}; 306};
308 307
309 308
@@ -471,6 +470,7 @@ static const struct pci_device_id k2_sata_pci_tbl[] = {
471 { 0x1166, 0x0241, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, 470 { 0x1166, 0x0241, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
472 { 0x1166, 0x0242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 }, 471 { 0x1166, 0x0242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
473 { 0x1166, 0x024a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, 472 { 0x1166, 0x024a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
473 { 0x1166, 0x024b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
474 { } 474 { }
475}; 475};
476 476
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c
index a33862d2b630..9d8e4226c25c 100644
--- a/drivers/scsi/sata_sx4.c
+++ b/drivers/scsi/sata_sx4.c
@@ -194,7 +194,6 @@ static struct scsi_host_template pdc_sata_sht = {
194 .dma_boundary = ATA_DMA_BOUNDARY, 194 .dma_boundary = ATA_DMA_BOUNDARY,
195 .slave_configure = ata_scsi_slave_config, 195 .slave_configure = ata_scsi_slave_config,
196 .bios_param = ata_std_bios_param, 196 .bios_param = ata_std_bios_param,
197 .ordered_flush = 1,
198}; 197};
199 198
200static const struct ata_port_operations pdc_20621_ops = { 199static const struct ata_port_operations pdc_20621_ops = {
diff --git a/drivers/scsi/sata_uli.c b/drivers/scsi/sata_uli.c
index b2422a0f25c8..9635ca700977 100644
--- a/drivers/scsi/sata_uli.c
+++ b/drivers/scsi/sata_uli.c
@@ -87,7 +87,6 @@ static struct scsi_host_template uli_sht = {
87 .dma_boundary = ATA_DMA_BOUNDARY, 87 .dma_boundary = ATA_DMA_BOUNDARY,
88 .slave_configure = ata_scsi_slave_config, 88 .slave_configure = ata_scsi_slave_config,
89 .bios_param = ata_std_bios_param, 89 .bios_param = ata_std_bios_param,
90 .ordered_flush = 1,
91}; 90};
92 91
93static const struct ata_port_operations uli_ops = { 92static const struct ata_port_operations uli_ops = {
diff --git a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c
index c76215692da2..6d5b0a794cfd 100644
--- a/drivers/scsi/sata_via.c
+++ b/drivers/scsi/sata_via.c
@@ -106,7 +106,6 @@ static struct scsi_host_template svia_sht = {
106 .dma_boundary = ATA_DMA_BOUNDARY, 106 .dma_boundary = ATA_DMA_BOUNDARY,
107 .slave_configure = ata_scsi_slave_config, 107 .slave_configure = ata_scsi_slave_config,
108 .bios_param = ata_std_bios_param, 108 .bios_param = ata_std_bios_param,
109 .ordered_flush = 1,
110}; 109};
111 110
112static const struct ata_port_operations svia_sata_ops = { 111static const struct ata_port_operations svia_sata_ops = {
diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c
index f566e17246f0..3e34fedd2104 100644
--- a/drivers/scsi/sata_vsc.c
+++ b/drivers/scsi/sata_vsc.c
@@ -235,7 +235,6 @@ static struct scsi_host_template vsc_sata_sht = {
235 .dma_boundary = ATA_DMA_BOUNDARY, 235 .dma_boundary = ATA_DMA_BOUNDARY,
236 .slave_configure = ata_scsi_slave_config, 236 .slave_configure = ata_scsi_slave_config,
237 .bios_param = ata_std_bios_param, 237 .bios_param = ata_std_bios_param,
238 .ordered_flush = 1,
239}; 238};
240 239
241 240
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 180676d7115a..245ca99a641e 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -55,6 +55,7 @@
55#include <linux/interrupt.h> 55#include <linux/interrupt.h>
56#include <linux/notifier.h> 56#include <linux/notifier.h>
57#include <linux/cpu.h> 57#include <linux/cpu.h>
58#include <linux/mutex.h>
58 59
59#include <scsi/scsi.h> 60#include <scsi/scsi.h>
60#include <scsi/scsi_cmnd.h> 61#include <scsi/scsi_cmnd.h>
@@ -69,7 +70,6 @@
69#include "scsi_logging.h" 70#include "scsi_logging.h"
70 71
71static void scsi_done(struct scsi_cmnd *cmd); 72static void scsi_done(struct scsi_cmnd *cmd);
72static int scsi_retry_command(struct scsi_cmnd *cmd);
73 73
74/* 74/*
75 * Definitions and constants. 75 * Definitions and constants.
@@ -210,7 +210,7 @@ static struct scsi_host_cmd_pool scsi_cmd_dma_pool = {
210 .gfp_mask = __GFP_DMA, 210 .gfp_mask = __GFP_DMA,
211}; 211};
212 212
213static DECLARE_MUTEX(host_cmd_pool_mutex); 213static DEFINE_MUTEX(host_cmd_pool_mutex);
214 214
215static struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost, 215static struct scsi_cmnd *__scsi_get_command(struct Scsi_Host *shost,
216 gfp_t gfp_mask) 216 gfp_t gfp_mask)
@@ -331,7 +331,7 @@ int scsi_setup_command_freelist(struct Scsi_Host *shost)
331 * Select a command slab for this host and create it if not 331 * Select a command slab for this host and create it if not
332 * yet existant. 332 * yet existant.
333 */ 333 */
334 down(&host_cmd_pool_mutex); 334 mutex_lock(&host_cmd_pool_mutex);
335 pool = (shost->unchecked_isa_dma ? &scsi_cmd_dma_pool : &scsi_cmd_pool); 335 pool = (shost->unchecked_isa_dma ? &scsi_cmd_dma_pool : &scsi_cmd_pool);
336 if (!pool->users) { 336 if (!pool->users) {
337 pool->slab = kmem_cache_create(pool->name, 337 pool->slab = kmem_cache_create(pool->name,
@@ -343,7 +343,7 @@ int scsi_setup_command_freelist(struct Scsi_Host *shost)
343 343
344 pool->users++; 344 pool->users++;
345 shost->cmd_pool = pool; 345 shost->cmd_pool = pool;
346 up(&host_cmd_pool_mutex); 346 mutex_unlock(&host_cmd_pool_mutex);
347 347
348 /* 348 /*
349 * Get one backup command for this host. 349 * Get one backup command for this host.
@@ -360,7 +360,7 @@ int scsi_setup_command_freelist(struct Scsi_Host *shost)
360 kmem_cache_destroy(pool->slab); 360 kmem_cache_destroy(pool->slab);
361 return -ENOMEM; 361 return -ENOMEM;
362 fail: 362 fail:
363 up(&host_cmd_pool_mutex); 363 mutex_unlock(&host_cmd_pool_mutex);
364 return -ENOMEM; 364 return -ENOMEM;
365 365
366} 366}
@@ -382,10 +382,10 @@ void scsi_destroy_command_freelist(struct Scsi_Host *shost)
382 kmem_cache_free(shost->cmd_pool->slab, cmd); 382 kmem_cache_free(shost->cmd_pool->slab, cmd);
383 } 383 }
384 384
385 down(&host_cmd_pool_mutex); 385 mutex_lock(&host_cmd_pool_mutex);
386 if (!--shost->cmd_pool->users) 386 if (!--shost->cmd_pool->users)
387 kmem_cache_destroy(shost->cmd_pool->slab); 387 kmem_cache_destroy(shost->cmd_pool->slab);
388 up(&host_cmd_pool_mutex); 388 mutex_unlock(&host_cmd_pool_mutex);
389} 389}
390 390
391#ifdef CONFIG_SCSI_LOGGING 391#ifdef CONFIG_SCSI_LOGGING
@@ -752,7 +752,7 @@ static void scsi_done(struct scsi_cmnd *cmd)
752 * isn't running --- used by scsi_times_out */ 752 * isn't running --- used by scsi_times_out */
753void __scsi_done(struct scsi_cmnd *cmd) 753void __scsi_done(struct scsi_cmnd *cmd)
754{ 754{
755 unsigned long flags; 755 struct request *rq = cmd->request;
756 756
757 /* 757 /*
758 * Set the serial numbers back to zero 758 * Set the serial numbers back to zero
@@ -763,71 +763,14 @@ void __scsi_done(struct scsi_cmnd *cmd)
763 if (cmd->result) 763 if (cmd->result)
764 atomic_inc(&cmd->device->ioerr_cnt); 764 atomic_inc(&cmd->device->ioerr_cnt);
765 765
766 BUG_ON(!rq);
767
766 /* 768 /*
767 * Next, enqueue the command into the done queue. 769 * The uptodate/nbytes values don't matter, as we allow partial
768 * It is a per-CPU queue, so we just disable local interrupts 770 * completes and thus will check this in the softirq callback
769 * and need no spinlock.
770 */ 771 */
771 local_irq_save(flags); 772 rq->completion_data = cmd;
772 list_add_tail(&cmd->eh_entry, &__get_cpu_var(scsi_done_q)); 773 blk_complete_request(rq);
773 raise_softirq_irqoff(SCSI_SOFTIRQ);
774 local_irq_restore(flags);
775}
776
777/**
778 * scsi_softirq - Perform post-interrupt processing of finished SCSI commands.
779 *
780 * This is the consumer of the done queue.
781 *
782 * This is called with all interrupts enabled. This should reduce
783 * interrupt latency, stack depth, and reentrancy of the low-level
784 * drivers.
785 */
786static void scsi_softirq(struct softirq_action *h)
787{
788 int disposition;
789 LIST_HEAD(local_q);
790
791 local_irq_disable();
792 list_splice_init(&__get_cpu_var(scsi_done_q), &local_q);
793 local_irq_enable();
794
795 while (!list_empty(&local_q)) {
796 struct scsi_cmnd *cmd = list_entry(local_q.next,
797 struct scsi_cmnd, eh_entry);
798 /* The longest time any command should be outstanding is the
799 * per command timeout multiplied by the number of retries.
800 *
801 * For a typical command, this is 2.5 minutes */
802 unsigned long wait_for
803 = cmd->allowed * cmd->timeout_per_command;
804 list_del_init(&cmd->eh_entry);
805
806 disposition = scsi_decide_disposition(cmd);
807 if (disposition != SUCCESS &&
808 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) {
809 sdev_printk(KERN_ERR, cmd->device,
810 "timing out command, waited %lus\n",
811 wait_for/HZ);
812 disposition = SUCCESS;
813 }
814
815 scsi_log_completion(cmd, disposition);
816 switch (disposition) {
817 case SUCCESS:
818 scsi_finish_command(cmd);
819 break;
820 case NEEDS_RETRY:
821 scsi_retry_command(cmd);
822 break;
823 case ADD_TO_MLQUEUE:
824 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
825 break;
826 default:
827 if (!scsi_eh_scmd_add(cmd, 0))
828 scsi_finish_command(cmd);
829 }
830 }
831} 774}
832 775
833/* 776/*
@@ -840,7 +783,7 @@ static void scsi_softirq(struct softirq_action *h)
840 * level drivers should not become re-entrant as a result of 783 * level drivers should not become re-entrant as a result of
841 * this. 784 * this.
842 */ 785 */
843static int scsi_retry_command(struct scsi_cmnd *cmd) 786int scsi_retry_command(struct scsi_cmnd *cmd)
844{ 787{
845 /* 788 /*
846 * Restore the SCSI command state. 789 * Restore the SCSI command state.
@@ -1273,38 +1216,6 @@ int scsi_device_cancel(struct scsi_device *sdev, int recovery)
1273} 1216}
1274EXPORT_SYMBOL(scsi_device_cancel); 1217EXPORT_SYMBOL(scsi_device_cancel);
1275 1218
1276#ifdef CONFIG_HOTPLUG_CPU
1277static int scsi_cpu_notify(struct notifier_block *self,
1278 unsigned long action, void *hcpu)
1279{
1280 int cpu = (unsigned long)hcpu;
1281
1282 switch(action) {
1283 case CPU_DEAD:
1284 /* Drain scsi_done_q. */
1285 local_irq_disable();
1286 list_splice_init(&per_cpu(scsi_done_q, cpu),
1287 &__get_cpu_var(scsi_done_q));
1288 raise_softirq_irqoff(SCSI_SOFTIRQ);
1289 local_irq_enable();
1290 break;
1291 default:
1292 break;
1293 }
1294 return NOTIFY_OK;
1295}
1296
1297static struct notifier_block __devinitdata scsi_cpu_nb = {
1298 .notifier_call = scsi_cpu_notify,
1299};
1300
1301#define register_scsi_cpu() register_cpu_notifier(&scsi_cpu_nb)
1302#define unregister_scsi_cpu() unregister_cpu_notifier(&scsi_cpu_nb)
1303#else
1304#define register_scsi_cpu()
1305#define unregister_scsi_cpu()
1306#endif /* CONFIG_HOTPLUG_CPU */
1307
1308MODULE_DESCRIPTION("SCSI core"); 1219MODULE_DESCRIPTION("SCSI core");
1309MODULE_LICENSE("GPL"); 1220MODULE_LICENSE("GPL");
1310 1221
@@ -1338,8 +1249,6 @@ static int __init init_scsi(void)
1338 INIT_LIST_HEAD(&per_cpu(scsi_done_q, i)); 1249 INIT_LIST_HEAD(&per_cpu(scsi_done_q, i));
1339 1250
1340 devfs_mk_dir("scsi"); 1251 devfs_mk_dir("scsi");
1341 open_softirq(SCSI_SOFTIRQ, scsi_softirq, NULL);
1342 register_scsi_cpu();
1343 printk(KERN_NOTICE "SCSI subsystem initialized\n"); 1252 printk(KERN_NOTICE "SCSI subsystem initialized\n");
1344 return 0; 1253 return 0;
1345 1254
@@ -1367,7 +1276,6 @@ static void __exit exit_scsi(void)
1367 devfs_remove("scsi"); 1276 devfs_remove("scsi");
1368 scsi_exit_procfs(); 1277 scsi_exit_procfs();
1369 scsi_exit_queue(); 1278 scsi_exit_queue();
1370 unregister_scsi_cpu();
1371} 1279}
1372 1280
1373subsys_initcall(init_scsi); 1281subsys_initcall(init_scsi);
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 3ded9daaf4a0..0e529f8171c4 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -221,8 +221,6 @@ static struct bus_type pseudo_lld_bus;
221static struct device_driver sdebug_driverfs_driver = { 221static struct device_driver sdebug_driverfs_driver = {
222 .name = sdebug_proc_name, 222 .name = sdebug_proc_name,
223 .bus = &pseudo_lld_bus, 223 .bus = &pseudo_lld_bus,
224 .probe = sdebug_driver_probe,
225 .remove = sdebug_driver_remove,
226}; 224};
227 225
228static const int check_condition_result = 226static const int check_condition_result =
@@ -1796,6 +1794,8 @@ static int pseudo_lld_bus_match(struct device *dev,
1796static struct bus_type pseudo_lld_bus = { 1794static struct bus_type pseudo_lld_bus = {
1797 .name = "pseudo", 1795 .name = "pseudo",
1798 .match = pseudo_lld_bus_match, 1796 .match = pseudo_lld_bus_match,
1797 .probe = sdebug_driver_probe,
1798 .remove = sdebug_driver_remove,
1799}; 1799};
1800 1800
1801static void sdebug_release_adapter(struct device * dev) 1801static void sdebug_release_adapter(struct device * dev)
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index e69477d1889b..f01ec0a7c506 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -354,8 +354,9 @@ static int scsi_dev_info_list_add_str(char *dev_list)
354 * @model, if found, return the matching flags value, else return 354 * @model, if found, return the matching flags value, else return
355 * the host or global default settings. 355 * the host or global default settings.
356 **/ 356 **/
357int scsi_get_device_flags(struct scsi_device *sdev, unsigned char *vendor, 357int scsi_get_device_flags(struct scsi_device *sdev,
358 unsigned char *model) 358 const unsigned char *vendor,
359 const unsigned char *model)
359{ 360{
360 struct scsi_dev_info_list *devinfo; 361 struct scsi_dev_info_list *devinfo;
361 unsigned int bflags; 362 unsigned int bflags;
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index c0ae9e965f6f..a2333d2c7af0 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1320,23 +1320,6 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
1320} 1320}
1321 1321
1322/** 1322/**
1323 * scsi_eh_lock_done - done function for eh door lock request
1324 * @scmd: SCSI command block for the door lock request
1325 *
1326 * Notes:
1327 * We completed the asynchronous door lock request, and it has either
1328 * locked the door or failed. We must free the command structures
1329 * associated with this request.
1330 **/
1331static void scsi_eh_lock_done(struct scsi_cmnd *scmd)
1332{
1333 struct scsi_request *sreq = scmd->sc_request;
1334
1335 scsi_release_request(sreq);
1336}
1337
1338
1339/**
1340 * scsi_eh_lock_door - Prevent medium removal for the specified device 1323 * scsi_eh_lock_door - Prevent medium removal for the specified device
1341 * @sdev: SCSI device to prevent medium removal 1324 * @sdev: SCSI device to prevent medium removal
1342 * 1325 *
@@ -1358,29 +1341,17 @@ static void scsi_eh_lock_done(struct scsi_cmnd *scmd)
1358 **/ 1341 **/
1359static void scsi_eh_lock_door(struct scsi_device *sdev) 1342static void scsi_eh_lock_door(struct scsi_device *sdev)
1360{ 1343{
1361 struct scsi_request *sreq = scsi_allocate_request(sdev, GFP_KERNEL); 1344 unsigned char cmnd[MAX_COMMAND_SIZE];
1362 1345
1363 if (unlikely(!sreq)) { 1346 cmnd[0] = ALLOW_MEDIUM_REMOVAL;
1364 printk(KERN_ERR "%s: request allocate failed," 1347 cmnd[1] = 0;
1365 "prevent media removal cmd not sent\n", __FUNCTION__); 1348 cmnd[2] = 0;
1366 return; 1349 cmnd[3] = 0;
1367 } 1350 cmnd[4] = SCSI_REMOVAL_PREVENT;
1351 cmnd[5] = 0;
1368 1352
1369 sreq->sr_cmnd[0] = ALLOW_MEDIUM_REMOVAL; 1353 scsi_execute_async(sdev, cmnd, DMA_NONE, NULL, 0, 0, 10 * HZ,
1370 sreq->sr_cmnd[1] = 0; 1354 5, NULL, NULL, GFP_KERNEL);
1371 sreq->sr_cmnd[2] = 0;
1372 sreq->sr_cmnd[3] = 0;
1373 sreq->sr_cmnd[4] = SCSI_REMOVAL_PREVENT;
1374 sreq->sr_cmnd[5] = 0;
1375 sreq->sr_data_direction = DMA_NONE;
1376 sreq->sr_bufflen = 0;
1377 sreq->sr_buffer = NULL;
1378 sreq->sr_allowed = 5;
1379 sreq->sr_done = scsi_eh_lock_done;
1380 sreq->sr_timeout_per_command = 10 * HZ;
1381 sreq->sr_cmd_len = COMMAND_SIZE(sreq->sr_cmnd[0]);
1382
1383 scsi_insert_special_req(sreq, 1);
1384} 1355}
1385 1356
1386 1357
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index dc249cb970ea..3574ba935af8 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -63,39 +63,6 @@ static struct scsi_host_sg_pool scsi_sg_pools[] = {
63}; 63};
64#undef SP 64#undef SP
65 65
66
67/*
68 * Function: scsi_insert_special_req()
69 *
70 * Purpose: Insert pre-formed request into request queue.
71 *
72 * Arguments: sreq - request that is ready to be queued.
73 * at_head - boolean. True if we should insert at head
74 * of queue, false if we should insert at tail.
75 *
76 * Lock status: Assumed that lock is not held upon entry.
77 *
78 * Returns: Nothing
79 *
80 * Notes: This function is called from character device and from
81 * ioctl types of functions where the caller knows exactly
82 * what SCSI command needs to be issued. The idea is that
83 * we merely inject the command into the queue (at the head
84 * for now), and then call the queue request function to actually
85 * process it.
86 */
87int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
88{
89 /*
90 * Because users of this function are apt to reuse requests with no
91 * modification, we have to sanitise the request flags here
92 */
93 sreq->sr_request->flags &= ~REQ_DONTPREP;
94 blk_insert_request(sreq->sr_device->request_queue, sreq->sr_request,
95 at_head, sreq);
96 return 0;
97}
98
99static void scsi_run_queue(struct request_queue *q); 66static void scsi_run_queue(struct request_queue *q);
100 67
101/* 68/*
@@ -249,8 +216,13 @@ void scsi_do_req(struct scsi_request *sreq, const void *cmnd,
249 216
250 /* 217 /*
251 * head injection *required* here otherwise quiesce won't work 218 * head injection *required* here otherwise quiesce won't work
219 *
220 * Because users of this function are apt to reuse requests with no
221 * modification, we have to sanitise the request flags here
252 */ 222 */
253 scsi_insert_special_req(sreq, 1); 223 sreq->sr_request->flags &= ~REQ_DONTPREP;
224 blk_insert_request(sreq->sr_device->request_queue, sreq->sr_request,
225 1, sreq);
254} 226}
255EXPORT_SYMBOL(scsi_do_req); 227EXPORT_SYMBOL(scsi_do_req);
256 228
@@ -287,6 +259,7 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
287 memcpy(req->cmd, cmd, req->cmd_len); 259 memcpy(req->cmd, cmd, req->cmd_len);
288 req->sense = sense; 260 req->sense = sense;
289 req->sense_len = 0; 261 req->sense_len = 0;
262 req->retries = retries;
290 req->timeout = timeout; 263 req->timeout = timeout;
291 req->flags |= flags | REQ_BLOCK_PC | REQ_SPECIAL | REQ_QUIET; 264 req->flags |= flags | REQ_BLOCK_PC | REQ_SPECIAL | REQ_QUIET;
292 265
@@ -327,6 +300,200 @@ int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
327} 300}
328EXPORT_SYMBOL(scsi_execute_req); 301EXPORT_SYMBOL(scsi_execute_req);
329 302
303struct scsi_io_context {
304 void *data;
305 void (*done)(void *data, char *sense, int result, int resid);
306 char sense[SCSI_SENSE_BUFFERSIZE];
307};
308
309static kmem_cache_t *scsi_io_context_cache;
310
311static void scsi_end_async(struct request *req, int uptodate)
312{
313 struct scsi_io_context *sioc = req->end_io_data;
314
315 if (sioc->done)
316 sioc->done(sioc->data, sioc->sense, req->errors, req->data_len);
317
318 kmem_cache_free(scsi_io_context_cache, sioc);
319 __blk_put_request(req->q, req);
320}
321
322static int scsi_merge_bio(struct request *rq, struct bio *bio)
323{
324 struct request_queue *q = rq->q;
325
326 bio->bi_flags &= ~(1 << BIO_SEG_VALID);
327 if (rq_data_dir(rq) == WRITE)
328 bio->bi_rw |= (1 << BIO_RW);
329 blk_queue_bounce(q, &bio);
330
331 if (!rq->bio)
332 blk_rq_bio_prep(q, rq, bio);
333 else if (!q->back_merge_fn(q, rq, bio))
334 return -EINVAL;
335 else {
336 rq->biotail->bi_next = bio;
337 rq->biotail = bio;
338 rq->hard_nr_sectors += bio_sectors(bio);
339 rq->nr_sectors = rq->hard_nr_sectors;
340 }
341
342 return 0;
343}
344
345static int scsi_bi_endio(struct bio *bio, unsigned int bytes_done, int error)
346{
347 if (bio->bi_size)
348 return 1;
349
350 bio_put(bio);
351 return 0;
352}
353
354/**
355 * scsi_req_map_sg - map a scatterlist into a request
356 * @rq: request to fill
357 * @sg: scatterlist
358 * @nsegs: number of elements
359 * @bufflen: len of buffer
360 * @gfp: memory allocation flags
361 *
362 * scsi_req_map_sg maps a scatterlist into a request so that the
363 * request can be sent to the block layer. We do not trust the scatterlist
364 * sent to use, as some ULDs use that struct to only organize the pages.
365 */
366static int scsi_req_map_sg(struct request *rq, struct scatterlist *sgl,
367 int nsegs, unsigned bufflen, gfp_t gfp)
368{
369 struct request_queue *q = rq->q;
370 int nr_pages = (bufflen + PAGE_SIZE - 1) >> PAGE_SHIFT;
371 unsigned int data_len = 0, len, bytes, off;
372 struct page *page;
373 struct bio *bio = NULL;
374 int i, err, nr_vecs = 0;
375
376 for (i = 0; i < nsegs; i++) {
377 page = sgl[i].page;
378 off = sgl[i].offset;
379 len = sgl[i].length;
380 data_len += len;
381
382 while (len > 0) {
383 bytes = min_t(unsigned int, len, PAGE_SIZE - off);
384
385 if (!bio) {
386 nr_vecs = min_t(int, BIO_MAX_PAGES, nr_pages);
387 nr_pages -= nr_vecs;
388
389 bio = bio_alloc(gfp, nr_vecs);
390 if (!bio) {
391 err = -ENOMEM;
392 goto free_bios;
393 }
394 bio->bi_end_io = scsi_bi_endio;
395 }
396
397 if (bio_add_pc_page(q, bio, page, bytes, off) !=
398 bytes) {
399 bio_put(bio);
400 err = -EINVAL;
401 goto free_bios;
402 }
403
404 if (bio->bi_vcnt >= nr_vecs) {
405 err = scsi_merge_bio(rq, bio);
406 if (err) {
407 bio_endio(bio, bio->bi_size, 0);
408 goto free_bios;
409 }
410 bio = NULL;
411 }
412
413 page++;
414 len -= bytes;
415 off = 0;
416 }
417 }
418
419 rq->buffer = rq->data = NULL;
420 rq->data_len = data_len;
421 return 0;
422
423free_bios:
424 while ((bio = rq->bio) != NULL) {
425 rq->bio = bio->bi_next;
426 /*
427 * call endio instead of bio_put incase it was bounced
428 */
429 bio_endio(bio, bio->bi_size, 0);
430 }
431
432 return err;
433}
434
435/**
436 * scsi_execute_async - insert request
437 * @sdev: scsi device
438 * @cmd: scsi command
439 * @data_direction: data direction
440 * @buffer: data buffer (this can be a kernel buffer or scatterlist)
441 * @bufflen: len of buffer
442 * @use_sg: if buffer is a scatterlist this is the number of elements
443 * @timeout: request timeout in seconds
444 * @retries: number of times to retry request
445 * @flags: or into request flags
446 **/
447int scsi_execute_async(struct scsi_device *sdev, const unsigned char *cmd,
448 int data_direction, void *buffer, unsigned bufflen,
449 int use_sg, int timeout, int retries, void *privdata,
450 void (*done)(void *, char *, int, int), gfp_t gfp)
451{
452 struct request *req;
453 struct scsi_io_context *sioc;
454 int err = 0;
455 int write = (data_direction == DMA_TO_DEVICE);
456
457 sioc = kmem_cache_alloc(scsi_io_context_cache, gfp);
458 if (!sioc)
459 return DRIVER_ERROR << 24;
460 memset(sioc, 0, sizeof(*sioc));
461
462 req = blk_get_request(sdev->request_queue, write, gfp);
463 if (!req)
464 goto free_sense;
465 req->flags |= REQ_BLOCK_PC | REQ_QUIET;
466
467 if (use_sg)
468 err = scsi_req_map_sg(req, buffer, use_sg, bufflen, gfp);
469 else if (bufflen)
470 err = blk_rq_map_kern(req->q, req, buffer, bufflen, gfp);
471
472 if (err)
473 goto free_req;
474
475 req->cmd_len = COMMAND_SIZE(cmd[0]);
476 memcpy(req->cmd, cmd, req->cmd_len);
477 req->sense = sioc->sense;
478 req->sense_len = 0;
479 req->timeout = timeout;
480 req->retries = retries;
481 req->end_io_data = sioc;
482
483 sioc->data = privdata;
484 sioc->done = done;
485
486 blk_execute_rq_nowait(req->q, NULL, req, 1, scsi_end_async);
487 return 0;
488
489free_req:
490 blk_put_request(req);
491free_sense:
492 kfree(sioc);
493 return DRIVER_ERROR << 24;
494}
495EXPORT_SYMBOL_GPL(scsi_execute_async);
496
330/* 497/*
331 * Function: scsi_init_cmd_errh() 498 * Function: scsi_init_cmd_errh()
332 * 499 *
@@ -624,7 +791,7 @@ static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd *cmd, int uptodate,
624 spin_lock_irqsave(q->queue_lock, flags); 791 spin_lock_irqsave(q->queue_lock, flags);
625 if (blk_rq_tagged(req)) 792 if (blk_rq_tagged(req))
626 blk_queue_end_tag(q, req); 793 blk_queue_end_tag(q, req);
627 end_that_request_last(req); 794 end_that_request_last(req, uptodate);
628 spin_unlock_irqrestore(q->queue_lock, flags); 795 spin_unlock_irqrestore(q->queue_lock, flags);
629 796
630 /* 797 /*
@@ -765,9 +932,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes,
765 int sense_valid = 0; 932 int sense_valid = 0;
766 int sense_deferred = 0; 933 int sense_deferred = 0;
767 934
768 if (blk_complete_barrier_rq(q, req, good_bytes >> 9))
769 return;
770
771 /* 935 /*
772 * Free up any indirection buffers we allocated for DMA purposes. 936 * Free up any indirection buffers we allocated for DMA purposes.
773 * For the case of a READ, we need to copy the data out of the 937 * For the case of a READ, we need to copy the data out of the
@@ -884,7 +1048,8 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes,
884 * system where READ CAPACITY failed, we may have read 1048 * system where READ CAPACITY failed, we may have read
885 * past the end of the disk. 1049 * past the end of the disk.
886 */ 1050 */
887 if (cmd->device->use_10_for_rw && 1051 if ((cmd->device->use_10_for_rw &&
1052 sshdr.asc == 0x20 && sshdr.ascq == 0x00) &&
888 (cmd->cmnd[0] == READ_10 || 1053 (cmd->cmnd[0] == READ_10 ||
889 cmd->cmnd[0] == WRITE_10)) { 1054 cmd->cmnd[0] == WRITE_10)) {
890 cmd->device->use_10_for_rw = 0; 1055 cmd->device->use_10_for_rw = 0;
@@ -1031,38 +1196,6 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
1031 return BLKPREP_KILL; 1196 return BLKPREP_KILL;
1032} 1197}
1033 1198
1034static int scsi_prepare_flush_fn(request_queue_t *q, struct request *rq)
1035{
1036 struct scsi_device *sdev = q->queuedata;
1037 struct scsi_driver *drv;
1038
1039 if (sdev->sdev_state == SDEV_RUNNING) {
1040 drv = *(struct scsi_driver **) rq->rq_disk->private_data;
1041
1042 if (drv->prepare_flush)
1043 return drv->prepare_flush(q, rq);
1044 }
1045
1046 return 0;
1047}
1048
1049static void scsi_end_flush_fn(request_queue_t *q, struct request *rq)
1050{
1051 struct scsi_device *sdev = q->queuedata;
1052 struct request *flush_rq = rq->end_io_data;
1053 struct scsi_driver *drv;
1054
1055 if (flush_rq->errors) {
1056 printk("scsi: barrier error, disabling flush support\n");
1057 blk_queue_ordered(q, QUEUE_ORDERED_NONE);
1058 }
1059
1060 if (sdev->sdev_state == SDEV_RUNNING) {
1061 drv = *(struct scsi_driver **) rq->rq_disk->private_data;
1062 drv->end_flush(q, rq);
1063 }
1064}
1065
1066static int scsi_issue_flush_fn(request_queue_t *q, struct gendisk *disk, 1199static int scsi_issue_flush_fn(request_queue_t *q, struct gendisk *disk,
1067 sector_t *error_sector) 1200 sector_t *error_sector)
1068{ 1201{
@@ -1079,13 +1212,19 @@ static int scsi_issue_flush_fn(request_queue_t *q, struct gendisk *disk,
1079 return -EOPNOTSUPP; 1212 return -EOPNOTSUPP;
1080} 1213}
1081 1214
1082static void scsi_generic_done(struct scsi_cmnd *cmd) 1215static void scsi_blk_pc_done(struct scsi_cmnd *cmd)
1083{ 1216{
1084 BUG_ON(!blk_pc_request(cmd->request)); 1217 BUG_ON(!blk_pc_request(cmd->request));
1085 scsi_io_completion(cmd, cmd->result == 0 ? cmd->bufflen : 0, 0); 1218 /*
1219 * This will complete the whole command with uptodate=1 so
1220 * as far as the block layer is concerned the command completed
1221 * successfully. Since this is a REQ_BLOCK_PC command the
1222 * caller should check the request's errors value
1223 */
1224 scsi_io_completion(cmd, cmd->bufflen, 0);
1086} 1225}
1087 1226
1088void scsi_setup_blk_pc_cmnd(struct scsi_cmnd *cmd, int retries) 1227static void scsi_setup_blk_pc_cmnd(struct scsi_cmnd *cmd)
1089{ 1228{
1090 struct request *req = cmd->request; 1229 struct request *req = cmd->request;
1091 1230
@@ -1100,10 +1239,10 @@ void scsi_setup_blk_pc_cmnd(struct scsi_cmnd *cmd, int retries)
1100 cmd->sc_data_direction = DMA_FROM_DEVICE; 1239 cmd->sc_data_direction = DMA_FROM_DEVICE;
1101 1240
1102 cmd->transfersize = req->data_len; 1241 cmd->transfersize = req->data_len;
1103 cmd->allowed = retries; 1242 cmd->allowed = req->retries;
1104 cmd->timeout_per_command = req->timeout; 1243 cmd->timeout_per_command = req->timeout;
1244 cmd->done = scsi_blk_pc_done;
1105} 1245}
1106EXPORT_SYMBOL_GPL(scsi_setup_blk_pc_cmnd);
1107 1246
1108static int scsi_prep_fn(struct request_queue *q, struct request *req) 1247static int scsi_prep_fn(struct request_queue *q, struct request *req)
1109{ 1248{
@@ -1200,7 +1339,6 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
1200 * happening now. 1339 * happening now.
1201 */ 1340 */
1202 if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) { 1341 if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) {
1203 struct scsi_driver *drv;
1204 int ret; 1342 int ret;
1205 1343
1206 /* 1344 /*
@@ -1232,16 +1370,17 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
1232 /* 1370 /*
1233 * Initialize the actual SCSI command for this request. 1371 * Initialize the actual SCSI command for this request.
1234 */ 1372 */
1235 if (req->rq_disk) { 1373 if (req->flags & REQ_BLOCK_PC) {
1374 scsi_setup_blk_pc_cmnd(cmd);
1375 } else if (req->rq_disk) {
1376 struct scsi_driver *drv;
1377
1236 drv = *(struct scsi_driver **)req->rq_disk->private_data; 1378 drv = *(struct scsi_driver **)req->rq_disk->private_data;
1237 if (unlikely(!drv->init_command(cmd))) { 1379 if (unlikely(!drv->init_command(cmd))) {
1238 scsi_release_buffers(cmd); 1380 scsi_release_buffers(cmd);
1239 scsi_put_command(cmd); 1381 scsi_put_command(cmd);
1240 goto kill; 1382 goto kill;
1241 } 1383 }
1242 } else {
1243 scsi_setup_blk_pc_cmnd(cmd, 3);
1244 cmd->done = scsi_generic_done;
1245 } 1384 }
1246 } 1385 }
1247 1386
@@ -1354,6 +1493,41 @@ static void scsi_kill_request(struct request *req, request_queue_t *q)
1354 __scsi_done(cmd); 1493 __scsi_done(cmd);
1355} 1494}
1356 1495
1496static void scsi_softirq_done(struct request *rq)
1497{
1498 struct scsi_cmnd *cmd = rq->completion_data;
1499 unsigned long wait_for = cmd->allowed * cmd->timeout_per_command;
1500 int disposition;
1501
1502 INIT_LIST_HEAD(&cmd->eh_entry);
1503
1504 disposition = scsi_decide_disposition(cmd);
1505 if (disposition != SUCCESS &&
1506 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) {
1507 sdev_printk(KERN_ERR, cmd->device,
1508 "timing out command, waited %lus\n",
1509 wait_for/HZ);
1510 disposition = SUCCESS;
1511 }
1512
1513 scsi_log_completion(cmd, disposition);
1514
1515 switch (disposition) {
1516 case SUCCESS:
1517 scsi_finish_command(cmd);
1518 break;
1519 case NEEDS_RETRY:
1520 scsi_retry_command(cmd);
1521 break;
1522 case ADD_TO_MLQUEUE:
1523 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
1524 break;
1525 default:
1526 if (!scsi_eh_scmd_add(cmd, 0))
1527 scsi_finish_command(cmd);
1528 }
1529}
1530
1357/* 1531/*
1358 * Function: scsi_request_fn() 1532 * Function: scsi_request_fn()
1359 * 1533 *
@@ -1528,17 +1702,7 @@ struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)
1528 blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost)); 1702 blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost));
1529 blk_queue_segment_boundary(q, shost->dma_boundary); 1703 blk_queue_segment_boundary(q, shost->dma_boundary);
1530 blk_queue_issue_flush_fn(q, scsi_issue_flush_fn); 1704 blk_queue_issue_flush_fn(q, scsi_issue_flush_fn);
1531 1705 blk_queue_softirq_done(q, scsi_softirq_done);
1532 /*
1533 * ordered tags are superior to flush ordering
1534 */
1535 if (shost->ordered_tag)
1536 blk_queue_ordered(q, QUEUE_ORDERED_TAG);
1537 else if (shost->ordered_flush) {
1538 blk_queue_ordered(q, QUEUE_ORDERED_FLUSH);
1539 q->prepare_flush_fn = scsi_prepare_flush_fn;
1540 q->end_flush_fn = scsi_end_flush_fn;
1541 }
1542 1706
1543 if (!shost->use_clustering) 1707 if (!shost->use_clustering)
1544 clear_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags); 1708 clear_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags);
@@ -1603,6 +1767,14 @@ int __init scsi_init_queue(void)
1603{ 1767{
1604 int i; 1768 int i;
1605 1769
1770 scsi_io_context_cache = kmem_cache_create("scsi_io_context",
1771 sizeof(struct scsi_io_context),
1772 0, 0, NULL, NULL);
1773 if (!scsi_io_context_cache) {
1774 printk(KERN_ERR "SCSI: can't init scsi io context cache\n");
1775 return -ENOMEM;
1776 }
1777
1606 for (i = 0; i < SG_MEMPOOL_NR; i++) { 1778 for (i = 0; i < SG_MEMPOOL_NR; i++) {
1607 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i; 1779 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i;
1608 int size = sgp->size * sizeof(struct scatterlist); 1780 int size = sgp->size * sizeof(struct scatterlist);
@@ -1630,6 +1802,8 @@ void scsi_exit_queue(void)
1630{ 1802{
1631 int i; 1803 int i;
1632 1804
1805 kmem_cache_destroy(scsi_io_context_cache);
1806
1633 for (i = 0; i < SG_MEMPOOL_NR; i++) { 1807 for (i = 0; i < SG_MEMPOOL_NR; i++) {
1634 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i; 1808 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i;
1635 mempool_destroy(sgp->pool); 1809 mempool_destroy(sgp->pool);
diff --git a/drivers/scsi/scsi_priv.h b/drivers/scsi/scsi_priv.h
index d632d9e1493c..27c48274e8cb 100644
--- a/drivers/scsi/scsi_priv.h
+++ b/drivers/scsi/scsi_priv.h
@@ -26,12 +26,6 @@ struct Scsi_Host;
26#define SCSI_SENSE_VALID(scmd) \ 26#define SCSI_SENSE_VALID(scmd) \
27 (((scmd)->sense_buffer[0] & 0x70) == 0x70) 27 (((scmd)->sense_buffer[0] & 0x70) == 0x70)
28 28
29/*
30 * Special value for scanning to specify scanning or rescanning of all
31 * possible channels, (target) ids, or luns on a given shost.
32 */
33#define SCAN_WILD_CARD ~0
34
35/* hosts.c */ 29/* hosts.c */
36extern int scsi_init_hosts(void); 30extern int scsi_init_hosts(void);
37extern void scsi_exit_hosts(void); 31extern void scsi_exit_hosts(void);
@@ -40,11 +34,11 @@ extern void scsi_exit_hosts(void);
40extern int scsi_dispatch_cmd(struct scsi_cmnd *cmd); 34extern int scsi_dispatch_cmd(struct scsi_cmnd *cmd);
41extern int scsi_setup_command_freelist(struct Scsi_Host *shost); 35extern int scsi_setup_command_freelist(struct Scsi_Host *shost);
42extern void scsi_destroy_command_freelist(struct Scsi_Host *shost); 36extern void scsi_destroy_command_freelist(struct Scsi_Host *shost);
43extern int scsi_insert_special_req(struct scsi_request *sreq, int);
44extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd, 37extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
45 struct scsi_request *sreq); 38 struct scsi_request *sreq);
46extern void __scsi_release_request(struct scsi_request *sreq); 39extern void __scsi_release_request(struct scsi_request *sreq);
47extern void __scsi_done(struct scsi_cmnd *cmd); 40extern void __scsi_done(struct scsi_cmnd *cmd);
41extern int scsi_retry_command(struct scsi_cmnd *cmd);
48#ifdef CONFIG_SCSI_LOGGING 42#ifdef CONFIG_SCSI_LOGGING
49void scsi_log_send(struct scsi_cmnd *cmd); 43void scsi_log_send(struct scsi_cmnd *cmd);
50void scsi_log_completion(struct scsi_cmnd *cmd, int disposition); 44void scsi_log_completion(struct scsi_cmnd *cmd, int disposition);
@@ -57,7 +51,8 @@ static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
57 51
58/* scsi_devinfo.c */ 52/* scsi_devinfo.c */
59extern int scsi_get_device_flags(struct scsi_device *sdev, 53extern int scsi_get_device_flags(struct scsi_device *sdev,
60 unsigned char *vendor, unsigned char *model); 54 const unsigned char *vendor,
55 const unsigned char *model);
61extern int __init scsi_init_devinfo(void); 56extern int __init scsi_init_devinfo(void);
62extern void scsi_exit_devinfo(void); 57extern void scsi_exit_devinfo(void);
63 58
diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
index a50958b1b6ee..07be62bbaaea 100644
--- a/drivers/scsi/scsi_proc.c
+++ b/drivers/scsi/scsi_proc.c
@@ -25,11 +25,13 @@
25#include <linux/errno.h> 25#include <linux/errno.h>
26#include <linux/blkdev.h> 26#include <linux/blkdev.h>
27#include <linux/seq_file.h> 27#include <linux/seq_file.h>
28#include <linux/mutex.h>
28#include <asm/uaccess.h> 29#include <asm/uaccess.h>
29 30
30#include <scsi/scsi.h> 31#include <scsi/scsi.h>
31#include <scsi/scsi_device.h> 32#include <scsi/scsi_device.h>
32#include <scsi/scsi_host.h> 33#include <scsi/scsi_host.h>
34#include <scsi/scsi_transport.h>
33 35
34#include "scsi_priv.h" 36#include "scsi_priv.h"
35#include "scsi_logging.h" 37#include "scsi_logging.h"
@@ -41,7 +43,7 @@
41static struct proc_dir_entry *proc_scsi; 43static struct proc_dir_entry *proc_scsi;
42 44
43/* Protect sht->present and sht->proc_dir */ 45/* Protect sht->present and sht->proc_dir */
44static DECLARE_MUTEX(global_host_template_sem); 46static DEFINE_MUTEX(global_host_template_mutex);
45 47
46static int proc_scsi_read(char *buffer, char **start, off_t offset, 48static int proc_scsi_read(char *buffer, char **start, off_t offset,
47 int length, int *eof, void *data) 49 int length, int *eof, void *data)
@@ -83,7 +85,7 @@ void scsi_proc_hostdir_add(struct scsi_host_template *sht)
83 if (!sht->proc_info) 85 if (!sht->proc_info)
84 return; 86 return;
85 87
86 down(&global_host_template_sem); 88 mutex_lock(&global_host_template_mutex);
87 if (!sht->present++) { 89 if (!sht->present++) {
88 sht->proc_dir = proc_mkdir(sht->proc_name, proc_scsi); 90 sht->proc_dir = proc_mkdir(sht->proc_name, proc_scsi);
89 if (!sht->proc_dir) 91 if (!sht->proc_dir)
@@ -92,7 +94,7 @@ void scsi_proc_hostdir_add(struct scsi_host_template *sht)
92 else 94 else
93 sht->proc_dir->owner = sht->module; 95 sht->proc_dir->owner = sht->module;
94 } 96 }
95 up(&global_host_template_sem); 97 mutex_unlock(&global_host_template_mutex);
96} 98}
97 99
98void scsi_proc_hostdir_rm(struct scsi_host_template *sht) 100void scsi_proc_hostdir_rm(struct scsi_host_template *sht)
@@ -100,12 +102,12 @@ void scsi_proc_hostdir_rm(struct scsi_host_template *sht)
100 if (!sht->proc_info) 102 if (!sht->proc_info)
101 return; 103 return;
102 104
103 down(&global_host_template_sem); 105 mutex_lock(&global_host_template_mutex);
104 if (!--sht->present && sht->proc_dir) { 106 if (!--sht->present && sht->proc_dir) {
105 remove_proc_entry(sht->proc_name, proc_scsi); 107 remove_proc_entry(sht->proc_name, proc_scsi);
106 sht->proc_dir = NULL; 108 sht->proc_dir = NULL;
107 } 109 }
108 up(&global_host_template_sem); 110 mutex_unlock(&global_host_template_mutex);
109} 111}
110 112
111void scsi_proc_host_add(struct Scsi_Host *shost) 113void scsi_proc_host_add(struct Scsi_Host *shost)
@@ -199,7 +201,10 @@ static int scsi_add_single_device(uint host, uint channel, uint id, uint lun)
199 if (IS_ERR(shost)) 201 if (IS_ERR(shost))
200 return PTR_ERR(shost); 202 return PTR_ERR(shost);
201 203
202 error = scsi_scan_host_selected(shost, channel, id, lun, 1); 204 if (shost->transportt->user_scan)
205 error = shost->transportt->user_scan(shost, channel, id, lun);
206 else
207 error = scsi_scan_host_selected(shost, channel, id, lun, 1);
203 scsi_host_put(shost); 208 scsi_host_put(shost);
204 return error; 209 return error;
205} 210}
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 4e6709f448e1..752fb5da3de4 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -74,7 +74,7 @@
74#define SCSI_SCAN_TARGET_PRESENT 1 74#define SCSI_SCAN_TARGET_PRESENT 1
75#define SCSI_SCAN_LUN_PRESENT 2 75#define SCSI_SCAN_LUN_PRESENT 2
76 76
77static char *scsi_null_device_strs = "nullnullnullnull"; 77static const char *scsi_null_device_strs = "nullnullnullnull";
78 78
79#define MAX_SCSI_LUNS 512 79#define MAX_SCSI_LUNS 512
80 80
@@ -334,19 +334,6 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
334 struct scsi_target *starget; 334 struct scsi_target *starget;
335 struct scsi_target *found_target; 335 struct scsi_target *found_target;
336 336
337 /*
338 * Obtain the real parent from the transport. The transport
339 * is allowed to fail (no error) if there is nothing at that
340 * target id.
341 */
342 if (shost->transportt->target_parent) {
343 spin_lock_irqsave(shost->host_lock, flags);
344 parent = shost->transportt->target_parent(shost, channel, id);
345 spin_unlock_irqrestore(shost->host_lock, flags);
346 if (!parent)
347 return NULL;
348 }
349
350 starget = kmalloc(size, GFP_KERNEL); 337 starget = kmalloc(size, GFP_KERNEL);
351 if (!starget) { 338 if (!starget) {
352 printk(KERN_ERR "%s: allocation failure\n", __FUNCTION__); 339 printk(KERN_ERR "%s: allocation failure\n", __FUNCTION__);
@@ -1283,20 +1270,21 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel,
1283 struct scsi_device *sdev; 1270 struct scsi_device *sdev;
1284 struct device *parent = &shost->shost_gendev; 1271 struct device *parent = &shost->shost_gendev;
1285 int res; 1272 int res;
1286 struct scsi_target *starget = scsi_alloc_target(parent, channel, id); 1273 struct scsi_target *starget;
1287 1274
1275 starget = scsi_alloc_target(parent, channel, id);
1288 if (!starget) 1276 if (!starget)
1289 return ERR_PTR(-ENOMEM); 1277 return ERR_PTR(-ENOMEM);
1290 1278
1291 get_device(&starget->dev); 1279 get_device(&starget->dev);
1292 down(&shost->scan_mutex); 1280 mutex_lock(&shost->scan_mutex);
1293 if (scsi_host_scan_allowed(shost)) { 1281 if (scsi_host_scan_allowed(shost)) {
1294 res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, 1282 res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1,
1295 hostdata); 1283 hostdata);
1296 if (res != SCSI_SCAN_LUN_PRESENT) 1284 if (res != SCSI_SCAN_LUN_PRESENT)
1297 sdev = ERR_PTR(-ENODEV); 1285 sdev = ERR_PTR(-ENODEV);
1298 } 1286 }
1299 up(&shost->scan_mutex); 1287 mutex_unlock(&shost->scan_mutex);
1300 scsi_target_reap(starget); 1288 scsi_target_reap(starget);
1301 put_device(&starget->dev); 1289 put_device(&starget->dev);
1302 1290
@@ -1404,10 +1392,10 @@ void scsi_scan_target(struct device *parent, unsigned int channel,
1404{ 1392{
1405 struct Scsi_Host *shost = dev_to_shost(parent); 1393 struct Scsi_Host *shost = dev_to_shost(parent);
1406 1394
1407 down(&shost->scan_mutex); 1395 mutex_lock(&shost->scan_mutex);
1408 if (scsi_host_scan_allowed(shost)) 1396 if (scsi_host_scan_allowed(shost))
1409 __scsi_scan_target(parent, channel, id, lun, rescan); 1397 __scsi_scan_target(parent, channel, id, lun, rescan);
1410 up(&shost->scan_mutex); 1398 mutex_unlock(&shost->scan_mutex);
1411} 1399}
1412EXPORT_SYMBOL(scsi_scan_target); 1400EXPORT_SYMBOL(scsi_scan_target);
1413 1401
@@ -1454,7 +1442,7 @@ int scsi_scan_host_selected(struct Scsi_Host *shost, unsigned int channel,
1454 ((lun != SCAN_WILD_CARD) && (lun > shost->max_lun))) 1442 ((lun != SCAN_WILD_CARD) && (lun > shost->max_lun)))
1455 return -EINVAL; 1443 return -EINVAL;
1456 1444
1457 down(&shost->scan_mutex); 1445 mutex_lock(&shost->scan_mutex);
1458 if (scsi_host_scan_allowed(shost)) { 1446 if (scsi_host_scan_allowed(shost)) {
1459 if (channel == SCAN_WILD_CARD) 1447 if (channel == SCAN_WILD_CARD)
1460 for (channel = 0; channel <= shost->max_channel; 1448 for (channel = 0; channel <= shost->max_channel;
@@ -1464,7 +1452,7 @@ int scsi_scan_host_selected(struct Scsi_Host *shost, unsigned int channel,
1464 else 1452 else
1465 scsi_scan_channel(shost, channel, id, lun, rescan); 1453 scsi_scan_channel(shost, channel, id, lun, rescan);
1466 } 1454 }
1467 up(&shost->scan_mutex); 1455 mutex_unlock(&shost->scan_mutex);
1468 1456
1469 return 0; 1457 return 0;
1470} 1458}
@@ -1522,7 +1510,7 @@ struct scsi_device *scsi_get_host_dev(struct Scsi_Host *shost)
1522 struct scsi_device *sdev = NULL; 1510 struct scsi_device *sdev = NULL;
1523 struct scsi_target *starget; 1511 struct scsi_target *starget;
1524 1512
1525 down(&shost->scan_mutex); 1513 mutex_lock(&shost->scan_mutex);
1526 if (!scsi_host_scan_allowed(shost)) 1514 if (!scsi_host_scan_allowed(shost))
1527 goto out; 1515 goto out;
1528 starget = scsi_alloc_target(&shost->shost_gendev, 0, shost->this_id); 1516 starget = scsi_alloc_target(&shost->shost_gendev, 0, shost->this_id);
@@ -1536,7 +1524,7 @@ struct scsi_device *scsi_get_host_dev(struct Scsi_Host *shost)
1536 } 1524 }
1537 put_device(&starget->dev); 1525 put_device(&starget->dev);
1538 out: 1526 out:
1539 up(&shost->scan_mutex); 1527 mutex_unlock(&shost->scan_mutex);
1540 return sdev; 1528 return sdev;
1541} 1529}
1542EXPORT_SYMBOL(scsi_get_host_dev); 1530EXPORT_SYMBOL(scsi_get_host_dev);
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 46349293de08..a77b32deaf8f 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -21,7 +21,7 @@
21#include "scsi_priv.h" 21#include "scsi_priv.h"
22#include "scsi_logging.h" 22#include "scsi_logging.h"
23 23
24static struct { 24static const struct {
25 enum scsi_device_state value; 25 enum scsi_device_state value;
26 char *name; 26 char *name;
27} sdev_states[] = { 27} sdev_states[] = {
@@ -48,7 +48,7 @@ const char *scsi_device_state_name(enum scsi_device_state state)
48 return name; 48 return name;
49} 49}
50 50
51static struct { 51static const struct {
52 enum scsi_host_state value; 52 enum scsi_host_state value;
53 char *name; 53 char *name;
54} shost_states[] = { 54} shost_states[] = {
@@ -106,7 +106,10 @@ static int scsi_scan(struct Scsi_Host *shost, const char *str)
106 return -EINVAL; 106 return -EINVAL;
107 if (check_set(&lun, s3)) 107 if (check_set(&lun, s3))
108 return -EINVAL; 108 return -EINVAL;
109 res = scsi_scan_host_selected(shost, channel, id, lun, 1); 109 if (shost->transportt->user_scan)
110 res = shost->transportt->user_scan(shost, channel, id, lun);
111 else
112 res = scsi_scan_host_selected(shost, channel, id, lun, 1);
110 return res; 113 return res;
111} 114}
112 115
@@ -263,9 +266,40 @@ static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
263 return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0; 266 return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
264} 267}
265 268
269static int scsi_bus_suspend(struct device * dev, pm_message_t state)
270{
271 struct scsi_device *sdev = to_scsi_device(dev);
272 struct scsi_host_template *sht = sdev->host->hostt;
273 int err;
274
275 err = scsi_device_quiesce(sdev);
276 if (err)
277 return err;
278
279 if (sht->suspend)
280 err = sht->suspend(sdev);
281
282 return err;
283}
284
285static int scsi_bus_resume(struct device * dev)
286{
287 struct scsi_device *sdev = to_scsi_device(dev);
288 struct scsi_host_template *sht = sdev->host->hostt;
289 int err = 0;
290
291 if (sht->resume)
292 err = sht->resume(sdev);
293
294 scsi_device_resume(sdev);
295 return err;
296}
297
266struct bus_type scsi_bus_type = { 298struct bus_type scsi_bus_type = {
267 .name = "scsi", 299 .name = "scsi",
268 .match = scsi_bus_match, 300 .match = scsi_bus_match,
301 .suspend = scsi_bus_suspend,
302 .resume = scsi_bus_resume,
269}; 303};
270 304
271int scsi_sysfs_register(void) 305int scsi_sysfs_register(void)
@@ -714,9 +748,9 @@ void scsi_remove_device(struct scsi_device *sdev)
714{ 748{
715 struct Scsi_Host *shost = sdev->host; 749 struct Scsi_Host *shost = sdev->host;
716 750
717 down(&shost->scan_mutex); 751 mutex_lock(&shost->scan_mutex);
718 __scsi_remove_device(sdev); 752 __scsi_remove_device(sdev);
719 up(&shost->scan_mutex); 753 mutex_unlock(&shost->scan_mutex);
720} 754}
721EXPORT_SYMBOL(scsi_remove_device); 755EXPORT_SYMBOL(scsi_remove_device);
722 756
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 2a1a99a2ef56..f2c9acf11bd0 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -112,7 +112,7 @@ fc_enum_name_search(port_state, fc_port_state, fc_port_state_names)
112 112
113 113
114/* Convert fc_tgtid_binding_type values to ascii string name */ 114/* Convert fc_tgtid_binding_type values to ascii string name */
115static struct { 115static const struct {
116 enum fc_tgtid_binding_type value; 116 enum fc_tgtid_binding_type value;
117 char *name; 117 char *name;
118 int matchlen; 118 int matchlen;
@@ -150,7 +150,7 @@ get_fc_##title##_names(u32 table_key, char *buf) \
150 150
151 151
152/* Convert FC_COS bit values to ascii string name */ 152/* Convert FC_COS bit values to ascii string name */
153static struct { 153static const struct {
154 u32 value; 154 u32 value;
155 char *name; 155 char *name;
156} fc_cos_names[] = { 156} fc_cos_names[] = {
@@ -164,7 +164,7 @@ fc_bitfield_name_search(cos, fc_cos_names)
164 164
165 165
166/* Convert FC_PORTSPEED bit values to ascii string name */ 166/* Convert FC_PORTSPEED bit values to ascii string name */
167static struct { 167static const struct {
168 u32 value; 168 u32 value;
169 char *name; 169 char *name;
170} fc_port_speed_names[] = { 170} fc_port_speed_names[] = {
@@ -190,7 +190,7 @@ show_fc_fc4s (char *buf, u8 *fc4_list)
190 190
191 191
192/* Convert FC_RPORT_ROLE bit values to ascii string name */ 192/* Convert FC_RPORT_ROLE bit values to ascii string name */
193static struct { 193static const struct {
194 u32 value; 194 u32 value;
195 char *name; 195 char *name;
196} fc_remote_port_role_names[] = { 196} fc_remote_port_role_names[] = {
@@ -295,6 +295,7 @@ static int fc_host_setup(struct transport_container *tc, struct device *dev,
295 */ 295 */
296 fc_host_node_name(shost) = -1; 296 fc_host_node_name(shost) = -1;
297 fc_host_port_name(shost) = -1; 297 fc_host_port_name(shost) = -1;
298 fc_host_permanent_port_name(shost) = -1;
298 fc_host_supported_classes(shost) = FC_COS_UNSPECIFIED; 299 fc_host_supported_classes(shost) = FC_COS_UNSPECIFIED;
299 memset(fc_host_supported_fc4s(shost), 0, 300 memset(fc_host_supported_fc4s(shost), 0,
300 sizeof(fc_host_supported_fc4s(shost))); 301 sizeof(fc_host_supported_fc4s(shost)));
@@ -795,6 +796,8 @@ static FC_CLASS_DEVICE_ATTR(host, supported_speeds, S_IRUGO,
795 796
796fc_private_host_rd_attr_cast(node_name, "0x%llx\n", 20, unsigned long long); 797fc_private_host_rd_attr_cast(node_name, "0x%llx\n", 20, unsigned long long);
797fc_private_host_rd_attr_cast(port_name, "0x%llx\n", 20, unsigned long long); 798fc_private_host_rd_attr_cast(port_name, "0x%llx\n", 20, unsigned long long);
799fc_private_host_rd_attr_cast(permanent_port_name, "0x%llx\n", 20,
800 unsigned long long);
798fc_private_host_rd_attr(symbolic_name, "%s\n", (FC_SYMBOLIC_NAME_SIZE +1)); 801fc_private_host_rd_attr(symbolic_name, "%s\n", (FC_SYMBOLIC_NAME_SIZE +1));
799fc_private_host_rd_attr(maxframe_size, "%u bytes\n", 20); 802fc_private_host_rd_attr(maxframe_size, "%u bytes\n", 20);
800fc_private_host_rd_attr(serial_number, "%s\n", (FC_SERIAL_NUMBER_SIZE +1)); 803fc_private_host_rd_attr(serial_number, "%s\n", (FC_SERIAL_NUMBER_SIZE +1));
@@ -1090,17 +1093,23 @@ static int fc_rport_match(struct attribute_container *cont,
1090/* 1093/*
1091 * Must be called with shost->host_lock held 1094 * Must be called with shost->host_lock held
1092 */ 1095 */
1093static struct device *fc_target_parent(struct Scsi_Host *shost, 1096static int fc_user_scan(struct Scsi_Host *shost, uint channel,
1094 int channel, uint id) 1097 uint id, uint lun)
1095{ 1098{
1096 struct fc_rport *rport; 1099 struct fc_rport *rport;
1097 1100
1098 list_for_each_entry(rport, &fc_host_rports(shost), peers) 1101 list_for_each_entry(rport, &fc_host_rports(shost), peers) {
1099 if ((rport->channel == channel) && 1102 if (rport->scsi_target_id == -1)
1100 (rport->scsi_target_id == id)) 1103 continue;
1101 return &rport->dev; 1104
1105 if ((channel == SCAN_WILD_CARD || channel == rport->channel) &&
1106 (id == SCAN_WILD_CARD || id == rport->scsi_target_id)) {
1107 scsi_scan_target(&rport->dev, rport->channel,
1108 rport->scsi_target_id, lun, 1);
1109 }
1110 }
1102 1111
1103 return NULL; 1112 return 0;
1104} 1113}
1105 1114
1106struct scsi_transport_template * 1115struct scsi_transport_template *
@@ -1139,7 +1148,7 @@ fc_attach_transport(struct fc_function_template *ft)
1139 /* Transport uses the shost workq for scsi scanning */ 1148 /* Transport uses the shost workq for scsi scanning */
1140 i->t.create_work_queue = 1; 1149 i->t.create_work_queue = 1;
1141 1150
1142 i->t.target_parent = fc_target_parent; 1151 i->t.user_scan = fc_user_scan;
1143 1152
1144 /* 1153 /*
1145 * Setup SCSI Target Attributes. 1154 * Setup SCSI Target Attributes.
@@ -1160,6 +1169,7 @@ fc_attach_transport(struct fc_function_template *ft)
1160 count=0; 1169 count=0;
1161 SETUP_HOST_ATTRIBUTE_RD(node_name); 1170 SETUP_HOST_ATTRIBUTE_RD(node_name);
1162 SETUP_HOST_ATTRIBUTE_RD(port_name); 1171 SETUP_HOST_ATTRIBUTE_RD(port_name);
1172 SETUP_HOST_ATTRIBUTE_RD(permanent_port_name);
1163 SETUP_HOST_ATTRIBUTE_RD(supported_classes); 1173 SETUP_HOST_ATTRIBUTE_RD(supported_classes);
1164 SETUP_HOST_ATTRIBUTE_RD(supported_fc4s); 1174 SETUP_HOST_ATTRIBUTE_RD(supported_fc4s);
1165 SETUP_HOST_ATTRIBUTE_RD(symbolic_name); 1175 SETUP_HOST_ATTRIBUTE_RD(symbolic_name);
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index e08462d50c97..59a1c9d9d3bd 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -21,11 +21,9 @@
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 */ 22 */
23#include <linux/module.h> 23#include <linux/module.h>
24#include <linux/string.h>
25#include <linux/slab.h>
26#include <linux/mempool.h> 24#include <linux/mempool.h>
25#include <linux/mutex.h>
27#include <net/tcp.h> 26#include <net/tcp.h>
28
29#include <scsi/scsi.h> 27#include <scsi/scsi.h>
30#include <scsi/scsi_host.h> 28#include <scsi/scsi_host.h>
31#include <scsi/scsi_device.h> 29#include <scsi/scsi_device.h>
@@ -45,11 +43,6 @@ struct iscsi_internal {
45 */ 43 */
46 struct list_head sessions; 44 struct list_head sessions;
47 /* 45 /*
48 * lock to serialize access to the sessions list which must
49 * be taken after the rx_queue_sema
50 */
51 spinlock_t session_lock;
52 /*
53 * based on transport capabilities, at register time we set these 46 * based on transport capabilities, at register time we set these
54 * bits to tell the transport class it wants attributes displayed 47 * bits to tell the transport class it wants attributes displayed
55 * in sysfs or that it can support different iSCSI Data-Path 48 * in sysfs or that it can support different iSCSI Data-Path
@@ -70,7 +63,7 @@ struct iscsi_internal {
70/* 63/*
71 * list of registered transports and lock that must 64 * list of registered transports and lock that must
72 * be held while accessing list. The iscsi_transport_lock must 65 * be held while accessing list. The iscsi_transport_lock must
73 * be acquired after the rx_queue_sema. 66 * be acquired after the rx_queue_mutex.
74 */ 67 */
75static LIST_HEAD(iscsi_transports); 68static LIST_HEAD(iscsi_transports);
76static DEFINE_SPINLOCK(iscsi_transport_lock); 69static DEFINE_SPINLOCK(iscsi_transport_lock);
@@ -145,7 +138,7 @@ static DECLARE_TRANSPORT_CLASS(iscsi_connection_class,
145 138
146static struct sock *nls; 139static struct sock *nls;
147static int daemon_pid; 140static int daemon_pid;
148static DECLARE_MUTEX(rx_queue_sema); 141static DEFINE_MUTEX(rx_queue_mutex);
149 142
150struct mempool_zone { 143struct mempool_zone {
151 mempool_t *pool; 144 mempool_t *pool;
@@ -156,7 +149,7 @@ struct mempool_zone {
156 spinlock_t freelock; 149 spinlock_t freelock;
157}; 150};
158 151
159static struct mempool_zone z_reply; 152static struct mempool_zone *z_reply;
160 153
161/* 154/*
162 * Z_MAX_* - actual mempool size allocated at the mempool_zone_init() time 155 * Z_MAX_* - actual mempool size allocated at the mempool_zone_init() time
@@ -171,50 +164,271 @@ static struct mempool_zone z_reply;
171#define Z_MAX_ERROR 16 164#define Z_MAX_ERROR 16
172#define Z_HIWAT_ERROR 12 165#define Z_HIWAT_ERROR 12
173 166
174struct iscsi_if_conn { 167static LIST_HEAD(connlist);
175 struct list_head conn_list; /* item in connlist */ 168static DEFINE_SPINLOCK(connlock);
176 struct list_head session_list; /* item in session->connections */
177 iscsi_connh_t connh;
178 int active; /* must be accessed with the connlock */
179 struct Scsi_Host *host; /* originated shost */
180 struct device dev; /* sysfs transport/container device */
181 struct iscsi_transport *transport;
182 struct mempool_zone z_error;
183 struct mempool_zone z_pdu;
184 struct list_head freequeue;
185};
186 169
187#define iscsi_dev_to_if_conn(_dev) \ 170/*
188 container_of(_dev, struct iscsi_if_conn, dev) 171 * The following functions can be used by LLDs that allocate
172 * their own scsi_hosts or by software iscsi LLDs
173 */
174static void iscsi_session_release(struct device *dev)
175{
176 struct iscsi_cls_session *session = iscsi_dev_to_session(dev);
177 struct iscsi_transport *transport = session->transport;
178 struct Scsi_Host *shost;
189 179
190#define iscsi_cdev_to_if_conn(_cdev) \ 180 shost = iscsi_session_to_shost(session);
191 iscsi_dev_to_if_conn(_cdev->dev) 181 scsi_host_put(shost);
182 kfree(session);
183 module_put(transport->owner);
184}
192 185
193static LIST_HEAD(connlist); 186static int iscsi_is_session_dev(const struct device *dev)
194static DEFINE_SPINLOCK(connlock); 187{
188 return dev->release == iscsi_session_release;
189}
195 190
196struct iscsi_if_session { 191/**
197 struct list_head list; /* item in session_list */ 192 * iscsi_create_session - create iscsi class session
198 struct list_head connections; 193 * @shost: scsi host
199 iscsi_sessionh_t sessionh; 194 * @transport: iscsi transport
200 struct iscsi_transport *transport; 195 *
201 struct device dev; /* sysfs transport/container device */ 196 * This can be called from a LLD or iscsi_transport
202}; 197 **/
198struct iscsi_cls_session *
199iscsi_create_session(struct Scsi_Host *shost, struct iscsi_transport *transport)
200{
201 struct iscsi_cls_session *session;
202 int err;
203
204 if (!try_module_get(transport->owner))
205 return NULL;
206
207 session = kzalloc(sizeof(*session), GFP_KERNEL);
208 if (!session)
209 goto module_put;
210 session->transport = transport;
211
212 /* this is released in the dev's release function */
213 scsi_host_get(shost);
214 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u", shost->host_no);
215 session->dev.parent = &shost->shost_gendev;
216 session->dev.release = iscsi_session_release;
217 err = device_register(&session->dev);
218 if (err) {
219 dev_printk(KERN_ERR, &session->dev, "iscsi: could not "
220 "register session's dev\n");
221 goto free_session;
222 }
223 transport_register_device(&session->dev);
224
225 return session;
226
227free_session:
228 kfree(session);
229module_put:
230 module_put(transport->owner);
231 return NULL;
232}
233
234EXPORT_SYMBOL_GPL(iscsi_create_session);
235
236/**
237 * iscsi_destroy_session - destroy iscsi session
238 * @session: iscsi_session
239 *
240 * Can be called by a LLD or iscsi_transport. There must not be
241 * any running connections.
242 **/
243int iscsi_destroy_session(struct iscsi_cls_session *session)
244{
245 transport_unregister_device(&session->dev);
246 device_unregister(&session->dev);
247 return 0;
248}
249
250EXPORT_SYMBOL_GPL(iscsi_destroy_session);
251
252static void iscsi_conn_release(struct device *dev)
253{
254 struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev);
255 struct device *parent = conn->dev.parent;
256
257 kfree(conn);
258 put_device(parent);
259}
260
261static int iscsi_is_conn_dev(const struct device *dev)
262{
263 return dev->release == iscsi_conn_release;
264}
265
266/**
267 * iscsi_create_conn - create iscsi class connection
268 * @session: iscsi cls session
269 * @cid: connection id
270 *
271 * This can be called from a LLD or iscsi_transport. The connection
272 * is child of the session so cid must be unique for all connections
273 * on the session.
274 **/
275struct iscsi_cls_conn *
276iscsi_create_conn(struct iscsi_cls_session *session, uint32_t cid)
277{
278 struct iscsi_transport *transport = session->transport;
279 struct Scsi_Host *shost = iscsi_session_to_shost(session);
280 struct iscsi_cls_conn *conn;
281 int err;
282
283 conn = kzalloc(sizeof(*conn) + transport->conndata_size, GFP_KERNEL);
284 if (!conn)
285 return NULL;
286
287 if (transport->conndata_size)
288 conn->dd_data = &conn[1];
289
290 INIT_LIST_HEAD(&conn->conn_list);
291 conn->transport = transport;
292
293 /* this is released in the dev's release function */
294 if (!get_device(&session->dev))
295 goto free_conn;
296 snprintf(conn->dev.bus_id, BUS_ID_SIZE, "connection%d:%u",
297 shost->host_no, cid);
298 conn->dev.parent = &session->dev;
299 conn->dev.release = iscsi_conn_release;
300 err = device_register(&conn->dev);
301 if (err) {
302 dev_printk(KERN_ERR, &conn->dev, "iscsi: could not register "
303 "connection's dev\n");
304 goto release_parent_ref;
305 }
306 transport_register_device(&conn->dev);
307 return conn;
308
309release_parent_ref:
310 put_device(&session->dev);
311free_conn:
312 kfree(conn);
313 return NULL;
314}
315
316EXPORT_SYMBOL_GPL(iscsi_create_conn);
317
318/**
319 * iscsi_destroy_conn - destroy iscsi class connection
320 * @session: iscsi cls session
321 *
322 * This can be called from a LLD or iscsi_transport.
323 **/
324int iscsi_destroy_conn(struct iscsi_cls_conn *conn)
325{
326 transport_unregister_device(&conn->dev);
327 device_unregister(&conn->dev);
328 return 0;
329}
330
331EXPORT_SYMBOL_GPL(iscsi_destroy_conn);
332
333/*
334 * These functions are used only by software iscsi_transports
335 * which do not allocate and more their scsi_hosts since this
336 * is initiated from userspace.
337 */
338
339/*
340 * iSCSI Session's hostdata organization:
341 *
342 * *------------------* <== hostdata_session(host->hostdata)
343 * | ptr to class sess|
344 * |------------------| <== iscsi_hostdata(host->hostdata)
345 * | transport's data |
346 * *------------------*
347 */
348
349#define hostdata_privsize(_t) (sizeof(unsigned long) + _t->hostdata_size + \
350 _t->hostdata_size % sizeof(unsigned long))
351
352#define hostdata_session(_hostdata) (iscsi_ptr(*(unsigned long *)_hostdata))
353
354/**
355 * iscsi_transport_create_session - create iscsi cls session and host
356 * scsit: scsi transport template
357 * transport: iscsi transport template
358 *
359 * This can be used by software iscsi_transports that allocate
360 * a session per scsi host.
361 **/
362struct Scsi_Host *
363iscsi_transport_create_session(struct scsi_transport_template *scsit,
364 struct iscsi_transport *transport)
365{
366 struct iscsi_cls_session *session;
367 struct Scsi_Host *shost;
368
369 shost = scsi_host_alloc(transport->host_template,
370 hostdata_privsize(transport));
371 if (!shost) {
372 printk(KERN_ERR "iscsi: can not allocate SCSI host for "
373 "session\n");
374 return NULL;
375 }
376
377 shost->max_id = 1;
378 shost->max_channel = 0;
379 shost->max_lun = transport->max_lun;
380 shost->max_cmd_len = transport->max_cmd_len;
381 shost->transportt = scsit;
382 shost->transportt->create_work_queue = 1;
383
384 if (scsi_add_host(shost, NULL))
385 goto free_host;
386
387 session = iscsi_create_session(shost, transport);
388 if (!session)
389 goto remove_host;
203 390
204#define iscsi_dev_to_if_session(_dev) \ 391 *(unsigned long*)shost->hostdata = (unsigned long)session;
205 container_of(_dev, struct iscsi_if_session, dev) 392 return shost;
393
394remove_host:
395 scsi_remove_host(shost);
396free_host:
397 scsi_host_put(shost);
398 return NULL;
399}
206 400
207#define iscsi_cdev_to_if_session(_cdev) \ 401EXPORT_SYMBOL_GPL(iscsi_transport_create_session);
208 iscsi_dev_to_if_session(_cdev->dev)
209 402
210#define iscsi_if_session_to_shost(_session) \ 403/**
211 dev_to_shost(_session->dev.parent) 404 * iscsi_transport_destroy_session - destroy session and scsi host
405 * shost: scsi host
406 *
407 * This can be used by software iscsi_transports that allocate
408 * a session per scsi host.
409 **/
410int iscsi_transport_destroy_session(struct Scsi_Host *shost)
411{
412 struct iscsi_cls_session *session;
212 413
213static struct iscsi_if_conn* 414 scsi_remove_host(shost);
415 session = hostdata_session(shost->hostdata);
416 iscsi_destroy_session(session);
417 /* ref from host alloc */
418 scsi_host_put(shost);
419 return 0;
420}
421
422EXPORT_SYMBOL_GPL(iscsi_transport_destroy_session);
423
424/*
425 * iscsi interface functions
426 */
427static struct iscsi_cls_conn*
214iscsi_if_find_conn(uint64_t key) 428iscsi_if_find_conn(uint64_t key)
215{ 429{
216 unsigned long flags; 430 unsigned long flags;
217 struct iscsi_if_conn *conn; 431 struct iscsi_cls_conn *conn;
218 432
219 spin_lock_irqsave(&connlock, flags); 433 spin_lock_irqsave(&connlock, flags);
220 list_for_each_entry(conn, &connlist, conn_list) 434 list_for_each_entry(conn, &connlist, conn_list)
@@ -249,7 +463,7 @@ static inline struct list_head *skb_to_lh(struct sk_buff *skb)
249} 463}
250 464
251static void* 465static void*
252mempool_zone_alloc_skb(gfp_t gfp_mask, void *pool_data) 466mempool_zone_alloc_skb(unsigned int gfp_mask, void *pool_data)
253{ 467{
254 struct mempool_zone *zone = pool_data; 468 struct mempool_zone *zone = pool_data;
255 469
@@ -281,14 +495,21 @@ mempool_zone_complete(struct mempool_zone *zone)
281 spin_unlock_irqrestore(&zone->freelock, flags); 495 spin_unlock_irqrestore(&zone->freelock, flags);
282} 496}
283 497
284static int 498static struct mempool_zone *
285mempool_zone_init(struct mempool_zone *zp, unsigned max, unsigned size, 499mempool_zone_init(unsigned max, unsigned size, unsigned hiwat)
286 unsigned hiwat)
287{ 500{
501 struct mempool_zone *zp;
502
503 zp = kzalloc(sizeof(*zp), GFP_KERNEL);
504 if (!zp)
505 return NULL;
506
288 zp->pool = mempool_create(max, mempool_zone_alloc_skb, 507 zp->pool = mempool_create(max, mempool_zone_alloc_skb,
289 mempool_zone_free_skb, zp); 508 mempool_zone_free_skb, zp);
290 if (!zp->pool) 509 if (!zp->pool) {
291 return -ENOMEM; 510 kfree(zp);
511 return NULL;
512 }
292 513
293 zp->size = size; 514 zp->size = size;
294 zp->hiwat = hiwat; 515 zp->hiwat = hiwat;
@@ -297,9 +518,14 @@ mempool_zone_init(struct mempool_zone *zp, unsigned max, unsigned size,
297 spin_lock_init(&zp->freelock); 518 spin_lock_init(&zp->freelock);
298 atomic_set(&zp->allocated, 0); 519 atomic_set(&zp->allocated, 0);
299 520
300 return 0; 521 return zp;
301} 522}
302 523
524static void mempool_zone_destroy(struct mempool_zone *zp)
525{
526 mempool_destroy(zp->pool);
527 kfree(zp);
528}
303 529
304static struct sk_buff* 530static struct sk_buff*
305mempool_zone_get_skb(struct mempool_zone *zone) 531mempool_zone_get_skb(struct mempool_zone *zone)
@@ -339,7 +565,7 @@ int iscsi_recv_pdu(iscsi_connh_t connh, struct iscsi_hdr *hdr,
339 struct nlmsghdr *nlh; 565 struct nlmsghdr *nlh;
340 struct sk_buff *skb; 566 struct sk_buff *skb;
341 struct iscsi_uevent *ev; 567 struct iscsi_uevent *ev;
342 struct iscsi_if_conn *conn; 568 struct iscsi_cls_conn *conn;
343 char *pdu; 569 char *pdu;
344 int len = NLMSG_SPACE(sizeof(*ev) + sizeof(struct iscsi_hdr) + 570 int len = NLMSG_SPACE(sizeof(*ev) + sizeof(struct iscsi_hdr) +
345 data_size); 571 data_size);
@@ -347,13 +573,13 @@ int iscsi_recv_pdu(iscsi_connh_t connh, struct iscsi_hdr *hdr,
347 conn = iscsi_if_find_conn(connh); 573 conn = iscsi_if_find_conn(connh);
348 BUG_ON(!conn); 574 BUG_ON(!conn);
349 575
350 mempool_zone_complete(&conn->z_pdu); 576 mempool_zone_complete(conn->z_pdu);
351 577
352 skb = mempool_zone_get_skb(&conn->z_pdu); 578 skb = mempool_zone_get_skb(conn->z_pdu);
353 if (!skb) { 579 if (!skb) {
354 iscsi_conn_error(connh, ISCSI_ERR_CONN_FAILED); 580 iscsi_conn_error(connh, ISCSI_ERR_CONN_FAILED);
355 printk(KERN_ERR "iscsi%d: can not deliver control PDU: OOM\n", 581 dev_printk(KERN_ERR, &conn->dev, "iscsi: can not deliver "
356 conn->host->host_no); 582 "control PDU: OOM\n");
357 return -ENOMEM; 583 return -ENOMEM;
358 } 584 }
359 585
@@ -362,14 +588,14 @@ int iscsi_recv_pdu(iscsi_connh_t connh, struct iscsi_hdr *hdr,
362 memset(ev, 0, sizeof(*ev)); 588 memset(ev, 0, sizeof(*ev));
363 ev->transport_handle = iscsi_handle(conn->transport); 589 ev->transport_handle = iscsi_handle(conn->transport);
364 ev->type = ISCSI_KEVENT_RECV_PDU; 590 ev->type = ISCSI_KEVENT_RECV_PDU;
365 if (atomic_read(&conn->z_pdu.allocated) >= conn->z_pdu.hiwat) 591 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat)
366 ev->iferror = -ENOMEM; 592 ev->iferror = -ENOMEM;
367 ev->r.recv_req.conn_handle = connh; 593 ev->r.recv_req.conn_handle = connh;
368 pdu = (char*)ev + sizeof(*ev); 594 pdu = (char*)ev + sizeof(*ev);
369 memcpy(pdu, hdr, sizeof(struct iscsi_hdr)); 595 memcpy(pdu, hdr, sizeof(struct iscsi_hdr));
370 memcpy(pdu + sizeof(struct iscsi_hdr), data, data_size); 596 memcpy(pdu + sizeof(struct iscsi_hdr), data, data_size);
371 597
372 return iscsi_unicast_skb(&conn->z_pdu, skb); 598 return iscsi_unicast_skb(conn->z_pdu, skb);
373} 599}
374EXPORT_SYMBOL_GPL(iscsi_recv_pdu); 600EXPORT_SYMBOL_GPL(iscsi_recv_pdu);
375 601
@@ -378,18 +604,18 @@ void iscsi_conn_error(iscsi_connh_t connh, enum iscsi_err error)
378 struct nlmsghdr *nlh; 604 struct nlmsghdr *nlh;
379 struct sk_buff *skb; 605 struct sk_buff *skb;
380 struct iscsi_uevent *ev; 606 struct iscsi_uevent *ev;
381 struct iscsi_if_conn *conn; 607 struct iscsi_cls_conn *conn;
382 int len = NLMSG_SPACE(sizeof(*ev)); 608 int len = NLMSG_SPACE(sizeof(*ev));
383 609
384 conn = iscsi_if_find_conn(connh); 610 conn = iscsi_if_find_conn(connh);
385 BUG_ON(!conn); 611 BUG_ON(!conn);
386 612
387 mempool_zone_complete(&conn->z_error); 613 mempool_zone_complete(conn->z_error);
388 614
389 skb = mempool_zone_get_skb(&conn->z_error); 615 skb = mempool_zone_get_skb(conn->z_error);
390 if (!skb) { 616 if (!skb) {
391 printk(KERN_ERR "iscsi%d: gracefully ignored conn error (%d)\n", 617 dev_printk(KERN_ERR, &conn->dev, "iscsi: gracefully ignored "
392 conn->host->host_no, error); 618 "conn error (%d)\n", error);
393 return; 619 return;
394 } 620 }
395 621
@@ -397,15 +623,15 @@ void iscsi_conn_error(iscsi_connh_t connh, enum iscsi_err error)
397 ev = NLMSG_DATA(nlh); 623 ev = NLMSG_DATA(nlh);
398 ev->transport_handle = iscsi_handle(conn->transport); 624 ev->transport_handle = iscsi_handle(conn->transport);
399 ev->type = ISCSI_KEVENT_CONN_ERROR; 625 ev->type = ISCSI_KEVENT_CONN_ERROR;
400 if (atomic_read(&conn->z_error.allocated) >= conn->z_error.hiwat) 626 if (atomic_read(&conn->z_error->allocated) >= conn->z_error->hiwat)
401 ev->iferror = -ENOMEM; 627 ev->iferror = -ENOMEM;
402 ev->r.connerror.error = error; 628 ev->r.connerror.error = error;
403 ev->r.connerror.conn_handle = connh; 629 ev->r.connerror.conn_handle = connh;
404 630
405 iscsi_unicast_skb(&conn->z_error, skb); 631 iscsi_unicast_skb(conn->z_error, skb);
406 632
407 printk(KERN_INFO "iscsi%d: detected conn error (%d)\n", 633 dev_printk(KERN_INFO, &conn->dev, "iscsi: detected conn error (%d)\n",
408 conn->host->host_no, error); 634 error);
409} 635}
410EXPORT_SYMBOL_GPL(iscsi_conn_error); 636EXPORT_SYMBOL_GPL(iscsi_conn_error);
411 637
@@ -419,9 +645,9 @@ iscsi_if_send_reply(int pid, int seq, int type, int done, int multi,
419 int flags = multi ? NLM_F_MULTI : 0; 645 int flags = multi ? NLM_F_MULTI : 0;
420 int t = done ? NLMSG_DONE : type; 646 int t = done ? NLMSG_DONE : type;
421 647
422 mempool_zone_complete(&z_reply); 648 mempool_zone_complete(z_reply);
423 649
424 skb = mempool_zone_get_skb(&z_reply); 650 skb = mempool_zone_get_skb(z_reply);
425 /* 651 /*
426 * FIXME: 652 * FIXME:
427 * user is supposed to react on iferror == -ENOMEM; 653 * user is supposed to react on iferror == -ENOMEM;
@@ -432,366 +658,197 @@ iscsi_if_send_reply(int pid, int seq, int type, int done, int multi,
432 nlh = __nlmsg_put(skb, pid, seq, t, (len - sizeof(*nlh)), 0); 658 nlh = __nlmsg_put(skb, pid, seq, t, (len - sizeof(*nlh)), 0);
433 nlh->nlmsg_flags = flags; 659 nlh->nlmsg_flags = flags;
434 memcpy(NLMSG_DATA(nlh), payload, size); 660 memcpy(NLMSG_DATA(nlh), payload, size);
435 return iscsi_unicast_skb(&z_reply, skb); 661 return iscsi_unicast_skb(z_reply, skb);
436} 662}
437 663
438/* 664static int
439 * iSCSI Session's hostdata organization: 665iscsi_if_get_stats(struct iscsi_transport *transport, struct sk_buff *skb,
440 * 666 struct nlmsghdr *nlh)
441 * *------------------* <== host->hostdata 667{
442 * | transport | 668 struct iscsi_uevent *ev = NLMSG_DATA(nlh);
443 * |------------------| <== iscsi_hostdata(host->hostdata) 669 struct iscsi_stats *stats;
444 * | transport's data | 670 struct sk_buff *skbstat;
445 * |------------------| <== hostdata_session(host->hostdata) 671 struct iscsi_cls_conn *conn;
446 * | interface's data | 672 struct nlmsghdr *nlhstat;
447 * *------------------* 673 struct iscsi_uevent *evstat;
448 */ 674 int len = NLMSG_SPACE(sizeof(*ev) +
675 sizeof(struct iscsi_stats) +
676 sizeof(struct iscsi_stats_custom) *
677 ISCSI_STATS_CUSTOM_MAX);
678 int err = 0;
449 679
450#define hostdata_privsize(_t) (sizeof(unsigned long) + _t->hostdata_size + \ 680 conn = iscsi_if_find_conn(ev->u.get_stats.conn_handle);
451 _t->hostdata_size % sizeof(unsigned long) + \ 681 if (!conn)
452 sizeof(struct iscsi_if_session)) 682 return -EEXIST;
453 683
454#define hostdata_session(_hostdata) ((void*)_hostdata + sizeof(unsigned long) + \ 684 do {
455 ((struct iscsi_transport *) \ 685 int actual_size;
456 iscsi_ptr(*(uint64_t *)_hostdata))->hostdata_size)
457 686
458static void iscsi_if_session_dev_release(struct device *dev) 687 mempool_zone_complete(conn->z_pdu);
459{
460 struct iscsi_if_session *session = iscsi_dev_to_if_session(dev);
461 struct iscsi_transport *transport = session->transport;
462 struct Scsi_Host *shost = iscsi_if_session_to_shost(session);
463 struct iscsi_if_conn *conn, *tmp;
464 unsigned long flags;
465 688
466 /* now free connections */ 689 skbstat = mempool_zone_get_skb(conn->z_pdu);
467 spin_lock_irqsave(&connlock, flags); 690 if (!skbstat) {
468 list_for_each_entry_safe(conn, tmp, &session->connections, 691 dev_printk(KERN_ERR, &conn->dev, "iscsi: can not "
469 session_list) { 692 "deliver stats: OOM\n");
470 list_del(&conn->session_list); 693 return -ENOMEM;
471 mempool_destroy(conn->z_pdu.pool); 694 }
472 mempool_destroy(conn->z_error.pool); 695
473 kfree(conn); 696 nlhstat = __nlmsg_put(skbstat, daemon_pid, 0, 0,
474 } 697 (len - sizeof(*nlhstat)), 0);
475 spin_unlock_irqrestore(&connlock, flags); 698 evstat = NLMSG_DATA(nlhstat);
476 scsi_host_put(shost); 699 memset(evstat, 0, sizeof(*evstat));
477 module_put(transport->owner); 700 evstat->transport_handle = iscsi_handle(conn->transport);
701 evstat->type = nlh->nlmsg_type;
702 if (atomic_read(&conn->z_pdu->allocated) >= conn->z_pdu->hiwat)
703 evstat->iferror = -ENOMEM;
704 evstat->u.get_stats.conn_handle =
705 ev->u.get_stats.conn_handle;
706 stats = (struct iscsi_stats *)
707 ((char*)evstat + sizeof(*evstat));
708 memset(stats, 0, sizeof(*stats));
709
710 transport->get_stats(ev->u.get_stats.conn_handle, stats);
711 actual_size = NLMSG_SPACE(sizeof(struct iscsi_uevent) +
712 sizeof(struct iscsi_stats) +
713 sizeof(struct iscsi_stats_custom) *
714 stats->custom_length);
715 actual_size -= sizeof(*nlhstat);
716 actual_size = NLMSG_LENGTH(actual_size);
717 skb_trim(skb, NLMSG_ALIGN(actual_size));
718 nlhstat->nlmsg_len = actual_size;
719
720 err = iscsi_unicast_skb(conn->z_pdu, skbstat);
721 } while (err < 0 && err != -ECONNREFUSED);
722
723 return err;
478} 724}
479 725
480static int 726static int
481iscsi_if_create_session(struct iscsi_internal *priv, struct iscsi_uevent *ev) 727iscsi_if_create_session(struct iscsi_internal *priv, struct iscsi_uevent *ev)
482{ 728{
483 struct iscsi_transport *transport = priv->iscsi_transport; 729 struct iscsi_transport *transport = priv->iscsi_transport;
484 struct iscsi_if_session *session;
485 struct Scsi_Host *shost; 730 struct Scsi_Host *shost;
486 unsigned long flags;
487 int error;
488
489 if (!try_module_get(transport->owner))
490 return -EPERM;
491 731
492 shost = scsi_host_alloc(transport->host_template, 732 if (!transport->create_session)
493 hostdata_privsize(transport)); 733 return -EINVAL;
494 if (!shost) {
495 ev->r.c_session_ret.session_handle = iscsi_handle(NULL);
496 printk(KERN_ERR "iscsi: can not allocate SCSI host for "
497 "session\n");
498 error = -ENOMEM;
499 goto out_module_put;
500 }
501 shost->max_id = 1;
502 shost->max_channel = 0;
503 shost->max_lun = transport->max_lun;
504 shost->max_cmd_len = transport->max_cmd_len;
505 shost->transportt = &priv->t;
506
507 /* store struct iscsi_transport in hostdata */
508 *(uint64_t*)shost->hostdata = ev->transport_handle;
509 734
510 ev->r.c_session_ret.session_handle = transport->create_session( 735 shost = transport->create_session(&priv->t,
511 ev->u.c_session.initial_cmdsn, shost); 736 ev->u.c_session.initial_cmdsn);
512 if (ev->r.c_session_ret.session_handle == iscsi_handle(NULL)) { 737 if (!shost)
513 error = 0; 738 return -ENOMEM;
514 goto out_host_put;
515 }
516 739
517 /* host_no becomes assigned SID */ 740 ev->r.c_session_ret.session_handle = iscsi_handle(iscsi_hostdata(shost->hostdata));
518 ev->r.c_session_ret.sid = shost->host_no; 741 ev->r.c_session_ret.sid = shost->host_no;
519 /* initialize session */
520 session = hostdata_session(shost->hostdata);
521 INIT_LIST_HEAD(&session->connections);
522 INIT_LIST_HEAD(&session->list);
523 session->sessionh = ev->r.c_session_ret.session_handle;
524 session->transport = transport;
525
526 error = scsi_add_host(shost, NULL);
527 if (error)
528 goto out_destroy_session;
529
530 /*
531 * this is released in the dev's release function)
532 */
533 scsi_host_get(shost);
534 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u", shost->host_no);
535 session->dev.parent = &shost->shost_gendev;
536 session->dev.release = iscsi_if_session_dev_release;
537 error = device_register(&session->dev);
538 if (error) {
539 printk(KERN_ERR "iscsi: could not register session%d's dev\n",
540 shost->host_no);
541 goto out_remove_host;
542 }
543 transport_register_device(&session->dev);
544
545 /* add this session to the list of active sessions */
546 spin_lock_irqsave(&priv->session_lock, flags);
547 list_add(&session->list, &priv->sessions);
548 spin_unlock_irqrestore(&priv->session_lock, flags);
549
550 return 0; 742 return 0;
551
552out_remove_host:
553 scsi_remove_host(shost);
554out_destroy_session:
555 transport->destroy_session(ev->r.c_session_ret.session_handle);
556 ev->r.c_session_ret.session_handle = iscsi_handle(NULL);
557out_host_put:
558 scsi_host_put(shost);
559out_module_put:
560 module_put(transport->owner);
561 return error;
562} 743}
563 744
564static int 745static int
565iscsi_if_destroy_session(struct iscsi_internal *priv, struct iscsi_uevent *ev) 746iscsi_if_destroy_session(struct iscsi_internal *priv, struct iscsi_uevent *ev)
566{ 747{
567 struct iscsi_transport *transport = priv->iscsi_transport; 748 struct iscsi_transport *transport = priv->iscsi_transport;
749
568 struct Scsi_Host *shost; 750 struct Scsi_Host *shost;
569 struct iscsi_if_session *session; 751
570 unsigned long flags; 752 if (!transport->destroy_session)
571 struct iscsi_if_conn *conn; 753 return -EINVAL;
572 int error = 0;
573 754
574 shost = scsi_host_lookup(ev->u.d_session.sid); 755 shost = scsi_host_lookup(ev->u.d_session.sid);
575 if (shost == ERR_PTR(-ENXIO)) 756 if (shost == ERR_PTR(-ENXIO))
576 return -EEXIST; 757 return -EEXIST;
577 session = hostdata_session(shost->hostdata);
578 758
579 /* check if we have active connections */ 759 if (transport->destroy_session)
580 spin_lock_irqsave(&connlock, flags); 760 transport->destroy_session(shost);
581 list_for_each_entry(conn, &session->connections, session_list) { 761 /* ref from host lookup */
582 if (conn->active) { 762 scsi_host_put(shost);
583 printk(KERN_ERR "iscsi%d: can not destroy session: " 763 return 0;
584 "has active connection (%p)\n",
585 shost->host_no, iscsi_ptr(conn->connh));
586 spin_unlock_irqrestore(&connlock, flags);
587 error = EIO;
588 goto out_release_ref;
589 }
590 }
591 spin_unlock_irqrestore(&connlock, flags);
592
593 scsi_remove_host(shost);
594 transport->destroy_session(ev->u.d_session.session_handle);
595 transport_unregister_device(&session->dev);
596 device_unregister(&session->dev);
597
598 /* remove this session from the list of active sessions */
599 spin_lock_irqsave(&priv->session_lock, flags);
600 list_del(&session->list);
601 spin_unlock_irqrestore(&priv->session_lock, flags);
602
603 /* ref from host alloc */
604 scsi_host_put(shost);
605out_release_ref:
606 /* ref from host lookup */
607 scsi_host_put(shost);
608 return error;
609}
610
611static void iscsi_if_conn_dev_release(struct device *dev)
612{
613 struct iscsi_if_conn *conn = iscsi_dev_to_if_conn(dev);
614 struct Scsi_Host *shost = conn->host;
615
616 scsi_host_put(shost);
617} 764}
618 765
619static int 766static int
620iscsi_if_create_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev) 767iscsi_if_create_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev){
621{
622 struct iscsi_if_session *session;
623 struct Scsi_Host *shost; 768 struct Scsi_Host *shost;
624 struct iscsi_if_conn *conn; 769 struct iscsi_cls_conn *conn;
625 unsigned long flags; 770 unsigned long flags;
626 int error; 771
772 if (!transport->create_conn)
773 return -EINVAL;
627 774
628 shost = scsi_host_lookup(ev->u.c_conn.sid); 775 shost = scsi_host_lookup(ev->u.c_conn.sid);
629 if (shost == ERR_PTR(-ENXIO)) 776 if (shost == ERR_PTR(-ENXIO))
630 return -EEXIST; 777 return -EEXIST;
631 session = hostdata_session(shost->hostdata);
632 778
633 conn = kmalloc(sizeof(struct iscsi_if_conn), GFP_KERNEL); 779 conn = transport->create_conn(shost, ev->u.c_conn.cid);
634 if (!conn) { 780 if (!conn)
635 error = -ENOMEM; 781 goto release_ref;
636 goto out_release_ref;
637 }
638 memset(conn, 0, sizeof(struct iscsi_if_conn));
639 INIT_LIST_HEAD(&conn->session_list);
640 INIT_LIST_HEAD(&conn->conn_list);
641 conn->host = shost;
642 conn->transport = transport;
643 782
644 error = mempool_zone_init(&conn->z_pdu, Z_MAX_PDU, 783 conn->z_pdu = mempool_zone_init(Z_MAX_PDU,
645 NLMSG_SPACE(sizeof(struct iscsi_uevent) + 784 NLMSG_SPACE(sizeof(struct iscsi_uevent) +
646 sizeof(struct iscsi_hdr) + 785 sizeof(struct iscsi_hdr) +
647 DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH), 786 DEFAULT_MAX_RECV_DATA_SEGMENT_LENGTH),
648 Z_HIWAT_PDU); 787 Z_HIWAT_PDU);
649 if (error) { 788 if (!conn->z_pdu) {
650 printk(KERN_ERR "iscsi%d: can not allocate pdu zone for new " 789 dev_printk(KERN_ERR, &conn->dev, "iscsi: can not allocate "
651 "conn\n", shost->host_no); 790 "pdu zone for new conn\n");
652 goto out_free_conn; 791 goto destroy_conn;
653 } 792 }
654 error = mempool_zone_init(&conn->z_error, Z_MAX_ERROR, 793
794 conn->z_error = mempool_zone_init(Z_MAX_ERROR,
655 NLMSG_SPACE(sizeof(struct iscsi_uevent)), 795 NLMSG_SPACE(sizeof(struct iscsi_uevent)),
656 Z_HIWAT_ERROR); 796 Z_HIWAT_ERROR);
657 if (error) { 797 if (!conn->z_error) {
658 printk(KERN_ERR "iscsi%d: can not allocate error zone for " 798 dev_printk(KERN_ERR, &conn->dev, "iscsi: can not allocate "
659 "new conn\n", shost->host_no); 799 "error zone for new conn\n");
660 goto out_free_pdu_pool; 800 goto free_pdu_pool;
661 }
662
663 ev->r.handle = transport->create_conn(ev->u.c_conn.session_handle,
664 ev->u.c_conn.cid);
665 if (!ev->r.handle) {
666 error = -ENODEV;
667 goto out_free_error_pool;
668 } 801 }
669 802
670 conn->connh = ev->r.handle; 803 ev->r.handle = conn->connh = iscsi_handle(conn->dd_data);
671
672 /*
673 * this is released in the dev's release function
674 */
675 if (!scsi_host_get(shost))
676 goto out_destroy_conn;
677 snprintf(conn->dev.bus_id, BUS_ID_SIZE, "connection%d:%u",
678 shost->host_no, ev->u.c_conn.cid);
679 conn->dev.parent = &session->dev;
680 conn->dev.release = iscsi_if_conn_dev_release;
681 error = device_register(&conn->dev);
682 if (error) {
683 printk(KERN_ERR "iscsi%d: could not register connections%u "
684 "dev\n", shost->host_no, ev->u.c_conn.cid);
685 goto out_release_parent_ref;
686 }
687 transport_register_device(&conn->dev);
688 804
689 spin_lock_irqsave(&connlock, flags); 805 spin_lock_irqsave(&connlock, flags);
690 list_add(&conn->conn_list, &connlist); 806 list_add(&conn->conn_list, &connlist);
691 list_add(&conn->session_list, &session->connections);
692 conn->active = 1; 807 conn->active = 1;
693 spin_unlock_irqrestore(&connlock, flags); 808 spin_unlock_irqrestore(&connlock, flags);
694 809
695 scsi_host_put(shost); 810 scsi_host_put(shost);
696 return 0; 811 return 0;
697 812
698out_release_parent_ref: 813free_pdu_pool:
814 mempool_zone_destroy(conn->z_pdu);
815destroy_conn:
816 if (transport->destroy_conn)
817 transport->destroy_conn(conn->dd_data);
818release_ref:
699 scsi_host_put(shost); 819 scsi_host_put(shost);
700out_destroy_conn: 820 return -ENOMEM;
701 transport->destroy_conn(ev->r.handle);
702out_free_error_pool:
703 mempool_destroy(conn->z_error.pool);
704out_free_pdu_pool:
705 mempool_destroy(conn->z_pdu.pool);
706out_free_conn:
707 kfree(conn);
708out_release_ref:
709 scsi_host_put(shost);
710 return error;
711} 821}
712 822
713static int 823static int
714iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev) 824iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent *ev)
715{ 825{
716 unsigned long flags; 826 unsigned long flags;
717 struct iscsi_if_conn *conn; 827 struct iscsi_cls_conn *conn;
828 struct mempool_zone *z_error, *z_pdu;
718 829
719 conn = iscsi_if_find_conn(ev->u.d_conn.conn_handle); 830 conn = iscsi_if_find_conn(ev->u.d_conn.conn_handle);
720 if (!conn) 831 if (!conn)
721 return -EEXIST; 832 return -EEXIST;
722 833
723 transport->destroy_conn(ev->u.d_conn.conn_handle); 834 if (!transport->destroy_conn)
835 return -EINVAL;
724 836
725 spin_lock_irqsave(&connlock, flags); 837 spin_lock_irqsave(&connlock, flags);
726 conn->active = 0; 838 conn->active = 0;
727 list_del(&conn->conn_list); 839 list_del(&conn->conn_list);
728 spin_unlock_irqrestore(&connlock, flags); 840 spin_unlock_irqrestore(&connlock, flags);
729 841
730 transport_unregister_device(&conn->dev); 842 z_pdu = conn->z_pdu;
731 device_unregister(&conn->dev); 843 z_error = conn->z_error;
732 return 0;
733}
734
735static int
736iscsi_if_get_stats(struct iscsi_transport *transport, struct sk_buff *skb,
737 struct nlmsghdr *nlh)
738{
739 struct iscsi_uevent *ev = NLMSG_DATA(nlh);
740 struct iscsi_stats *stats;
741 struct sk_buff *skbstat;
742 struct iscsi_if_conn *conn;
743 struct nlmsghdr *nlhstat;
744 struct iscsi_uevent *evstat;
745 int len = NLMSG_SPACE(sizeof(*ev) +
746 sizeof(struct iscsi_stats) +
747 sizeof(struct iscsi_stats_custom) *
748 ISCSI_STATS_CUSTOM_MAX);
749 int err = 0;
750
751 conn = iscsi_if_find_conn(ev->u.get_stats.conn_handle);
752 if (!conn)
753 return -EEXIST;
754
755 do {
756 int actual_size;
757
758 mempool_zone_complete(&conn->z_pdu);
759
760 skbstat = mempool_zone_get_skb(&conn->z_pdu);
761 if (!skbstat) {
762 printk(KERN_ERR "iscsi%d: can not deliver stats: OOM\n",
763 conn->host->host_no);
764 return -ENOMEM;
765 }
766
767 nlhstat = __nlmsg_put(skbstat, daemon_pid, 0, 0,
768 (len - sizeof(*nlhstat)), 0);
769 evstat = NLMSG_DATA(nlhstat);
770 memset(evstat, 0, sizeof(*evstat));
771 evstat->transport_handle = iscsi_handle(conn->transport);
772 evstat->type = nlh->nlmsg_type;
773 if (atomic_read(&conn->z_pdu.allocated) >= conn->z_pdu.hiwat)
774 evstat->iferror = -ENOMEM;
775 evstat->u.get_stats.conn_handle =
776 ev->u.get_stats.conn_handle;
777 stats = (struct iscsi_stats *)
778 ((char*)evstat + sizeof(*evstat));
779 memset(stats, 0, sizeof(*stats));
780 844
781 transport->get_stats(ev->u.get_stats.conn_handle, stats); 845 if (transport->destroy_conn)
782 actual_size = NLMSG_SPACE(sizeof(struct iscsi_uevent) + 846 transport->destroy_conn(conn);
783 sizeof(struct iscsi_stats) +
784 sizeof(struct iscsi_stats_custom) *
785 stats->custom_length);
786 actual_size -= sizeof(*nlhstat);
787 actual_size = NLMSG_LENGTH(actual_size);
788 skb_trim(skb, NLMSG_ALIGN(actual_size));
789 nlhstat->nlmsg_len = actual_size;
790 847
791 err = iscsi_unicast_skb(&conn->z_pdu, skbstat); 848 mempool_zone_destroy(z_pdu);
792 } while (err < 0 && err != -ECONNREFUSED); 849 mempool_zone_destroy(z_error);
793 850
794 return err; 851 return 0;
795} 852}
796 853
797static int 854static int
@@ -881,7 +938,7 @@ iscsi_if_rx(struct sock *sk, int len)
881{ 938{
882 struct sk_buff *skb; 939 struct sk_buff *skb;
883 940
884 down(&rx_queue_sema); 941 mutex_lock(&rx_queue_mutex);
885 while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) { 942 while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
886 while (skb->len >= NLMSG_SPACE(0)) { 943 while (skb->len >= NLMSG_SPACE(0)) {
887 int err; 944 int err;
@@ -915,17 +972,20 @@ iscsi_if_rx(struct sock *sk, int len)
915 err = iscsi_if_send_reply( 972 err = iscsi_if_send_reply(
916 NETLINK_CREDS(skb)->pid, nlh->nlmsg_seq, 973 NETLINK_CREDS(skb)->pid, nlh->nlmsg_seq,
917 nlh->nlmsg_type, 0, 0, ev, sizeof(*ev)); 974 nlh->nlmsg_type, 0, 0, ev, sizeof(*ev));
918 if (atomic_read(&z_reply.allocated) >= 975 if (atomic_read(&z_reply->allocated) >=
919 z_reply.hiwat) 976 z_reply->hiwat)
920 ev->iferror = -ENOMEM; 977 ev->iferror = -ENOMEM;
921 } while (err < 0 && err != -ECONNREFUSED); 978 } while (err < 0 && err != -ECONNREFUSED);
922 skb_pull(skb, rlen); 979 skb_pull(skb, rlen);
923 } 980 }
924 kfree_skb(skb); 981 kfree_skb(skb);
925 } 982 }
926 up(&rx_queue_sema); 983 mutex_unlock(&rx_queue_mutex);
927} 984}
928 985
986#define iscsi_cdev_to_conn(_cdev) \
987 iscsi_dev_to_conn(_cdev->dev)
988
929/* 989/*
930 * iSCSI connection attrs 990 * iSCSI connection attrs
931 */ 991 */
@@ -934,12 +994,10 @@ static ssize_t \
934show_conn_int_param_##param(struct class_device *cdev, char *buf) \ 994show_conn_int_param_##param(struct class_device *cdev, char *buf) \
935{ \ 995{ \
936 uint32_t value = 0; \ 996 uint32_t value = 0; \
937 struct iscsi_if_conn *conn = iscsi_cdev_to_if_conn(cdev); \ 997 struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \
938 struct iscsi_internal *priv; \ 998 struct iscsi_transport *t = conn->transport; \
939 \ 999 \
940 priv = to_iscsi_internal(conn->host->transportt); \ 1000 t->get_conn_param(conn->dd_data, param, &value); \
941 if (priv->param_mask & (1 << param)) \
942 priv->iscsi_transport->get_param(conn->connh, param, &value); \
943 return snprintf(buf, 20, format"\n", value); \ 1001 return snprintf(buf, 20, format"\n", value); \
944} 1002}
945 1003
@@ -954,6 +1012,9 @@ iscsi_conn_int_attr(data_digest, ISCSI_PARAM_DATADGST_EN, "%d");
954iscsi_conn_int_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN, "%d"); 1012iscsi_conn_int_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN, "%d");
955iscsi_conn_int_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN, "%d"); 1013iscsi_conn_int_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN, "%d");
956 1014
1015#define iscsi_cdev_to_session(_cdev) \
1016 iscsi_dev_to_session(_cdev->dev)
1017
957/* 1018/*
958 * iSCSI session attrs 1019 * iSCSI session attrs
959 */ 1020 */
@@ -962,20 +1023,11 @@ static ssize_t \
962show_session_int_param_##param(struct class_device *cdev, char *buf) \ 1023show_session_int_param_##param(struct class_device *cdev, char *buf) \
963{ \ 1024{ \
964 uint32_t value = 0; \ 1025 uint32_t value = 0; \
965 struct iscsi_if_session *session = iscsi_cdev_to_if_session(cdev); \ 1026 struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \
966 struct Scsi_Host *shost = iscsi_if_session_to_shost(session); \ 1027 struct Scsi_Host *shost = iscsi_session_to_shost(session); \
967 struct iscsi_internal *priv = to_iscsi_internal(shost->transportt); \ 1028 struct iscsi_transport *t = session->transport; \
968 struct iscsi_if_conn *conn = NULL; \
969 unsigned long flags; \
970 \
971 spin_lock_irqsave(&connlock, flags); \
972 if (!list_empty(&session->connections)) \
973 conn = list_entry(session->connections.next, \
974 struct iscsi_if_conn, session_list); \
975 spin_unlock_irqrestore(&connlock, flags); \
976 \ 1029 \
977 if (conn && (priv->param_mask & (1 << param))) \ 1030 t->get_session_param(shost, param, &value); \
978 priv->iscsi_transport->get_param(conn->connh, param, &value);\
979 return snprintf(buf, 20, format"\n", value); \ 1031 return snprintf(buf, 20, format"\n", value); \
980} 1032}
981 1033
@@ -1004,23 +1056,18 @@ iscsi_session_int_attr(erl, ISCSI_PARAM_ERL, "%d");
1004 count++; \ 1056 count++; \
1005 } 1057 }
1006 1058
1007static int iscsi_is_session_dev(const struct device *dev)
1008{
1009 return dev->release == iscsi_if_session_dev_release;
1010}
1011
1012static int iscsi_session_match(struct attribute_container *cont, 1059static int iscsi_session_match(struct attribute_container *cont,
1013 struct device *dev) 1060 struct device *dev)
1014{ 1061{
1015 struct iscsi_if_session *session; 1062 struct iscsi_cls_session *session;
1016 struct Scsi_Host *shost; 1063 struct Scsi_Host *shost;
1017 struct iscsi_internal *priv; 1064 struct iscsi_internal *priv;
1018 1065
1019 if (!iscsi_is_session_dev(dev)) 1066 if (!iscsi_is_session_dev(dev))
1020 return 0; 1067 return 0;
1021 1068
1022 session = iscsi_dev_to_if_session(dev); 1069 session = iscsi_dev_to_session(dev);
1023 shost = iscsi_if_session_to_shost(session); 1070 shost = iscsi_session_to_shost(session);
1024 if (!shost->transportt) 1071 if (!shost->transportt)
1025 return 0; 1072 return 0;
1026 1073
@@ -1031,23 +1078,21 @@ static int iscsi_session_match(struct attribute_container *cont,
1031 return &priv->session_cont.ac == cont; 1078 return &priv->session_cont.ac == cont;
1032} 1079}
1033 1080
1034static int iscsi_is_conn_dev(const struct device *dev)
1035{
1036 return dev->release == iscsi_if_conn_dev_release;
1037}
1038
1039static int iscsi_conn_match(struct attribute_container *cont, 1081static int iscsi_conn_match(struct attribute_container *cont,
1040 struct device *dev) 1082 struct device *dev)
1041{ 1083{
1042 struct iscsi_if_conn *conn; 1084 struct iscsi_cls_session *session;
1085 struct iscsi_cls_conn *conn;
1043 struct Scsi_Host *shost; 1086 struct Scsi_Host *shost;
1044 struct iscsi_internal *priv; 1087 struct iscsi_internal *priv;
1045 1088
1046 if (!iscsi_is_conn_dev(dev)) 1089 if (!iscsi_is_conn_dev(dev))
1047 return 0; 1090 return 0;
1048 1091
1049 conn = iscsi_dev_to_if_conn(dev); 1092 conn = iscsi_dev_to_conn(dev);
1050 shost = conn->host; 1093 session = iscsi_dev_to_session(conn->dev.parent);
1094 shost = iscsi_session_to_shost(session);
1095
1051 if (!shost->transportt) 1096 if (!shost->transportt)
1052 return 0; 1097 return 0;
1053 1098
@@ -1058,7 +1103,8 @@ static int iscsi_conn_match(struct attribute_container *cont,
1058 return &priv->conn_cont.ac == cont; 1103 return &priv->conn_cont.ac == cont;
1059} 1104}
1060 1105
1061int iscsi_register_transport(struct iscsi_transport *tt) 1106struct scsi_transport_template *
1107iscsi_register_transport(struct iscsi_transport *tt)
1062{ 1108{
1063 struct iscsi_internal *priv; 1109 struct iscsi_internal *priv;
1064 unsigned long flags; 1110 unsigned long flags;
@@ -1068,15 +1114,14 @@ int iscsi_register_transport(struct iscsi_transport *tt)
1068 1114
1069 priv = iscsi_if_transport_lookup(tt); 1115 priv = iscsi_if_transport_lookup(tt);
1070 if (priv) 1116 if (priv)
1071 return -EEXIST; 1117 return NULL;
1072 1118
1073 priv = kmalloc(sizeof(*priv), GFP_KERNEL); 1119 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
1074 if (!priv) 1120 if (!priv)
1075 return -ENOMEM; 1121 return NULL;
1076 memset(priv, 0, sizeof(*priv)); 1122 memset(priv, 0, sizeof(*priv));
1077 INIT_LIST_HEAD(&priv->list); 1123 INIT_LIST_HEAD(&priv->list);
1078 INIT_LIST_HEAD(&priv->sessions); 1124 INIT_LIST_HEAD(&priv->sessions);
1079 spin_lock_init(&priv->session_lock);
1080 priv->iscsi_transport = tt; 1125 priv->iscsi_transport = tt;
1081 1126
1082 priv->cdev.class = &iscsi_transport_class; 1127 priv->cdev.class = &iscsi_transport_class;
@@ -1142,13 +1187,13 @@ int iscsi_register_transport(struct iscsi_transport *tt)
1142 spin_unlock_irqrestore(&iscsi_transport_lock, flags); 1187 spin_unlock_irqrestore(&iscsi_transport_lock, flags);
1143 1188
1144 printk(KERN_NOTICE "iscsi: registered transport (%s)\n", tt->name); 1189 printk(KERN_NOTICE "iscsi: registered transport (%s)\n", tt->name);
1145 return 0; 1190 return &priv->t;
1146 1191
1147unregister_cdev: 1192unregister_cdev:
1148 class_device_unregister(&priv->cdev); 1193 class_device_unregister(&priv->cdev);
1149free_priv: 1194free_priv:
1150 kfree(priv); 1195 kfree(priv);
1151 return err; 1196 return NULL;
1152} 1197}
1153EXPORT_SYMBOL_GPL(iscsi_register_transport); 1198EXPORT_SYMBOL_GPL(iscsi_register_transport);
1154 1199
@@ -1159,19 +1204,11 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
1159 1204
1160 BUG_ON(!tt); 1205 BUG_ON(!tt);
1161 1206
1162 down(&rx_queue_sema); 1207 mutex_lock(&rx_queue_mutex);
1163 1208
1164 priv = iscsi_if_transport_lookup(tt); 1209 priv = iscsi_if_transport_lookup(tt);
1165 BUG_ON (!priv); 1210 BUG_ON (!priv);
1166 1211
1167 spin_lock_irqsave(&priv->session_lock, flags);
1168 if (!list_empty(&priv->sessions)) {
1169 spin_unlock_irqrestore(&priv->session_lock, flags);
1170 up(&rx_queue_sema);
1171 return -EPERM;
1172 }
1173 spin_unlock_irqrestore(&priv->session_lock, flags);
1174
1175 spin_lock_irqsave(&iscsi_transport_lock, flags); 1212 spin_lock_irqsave(&iscsi_transport_lock, flags);
1176 list_del(&priv->list); 1213 list_del(&priv->list);
1177 spin_unlock_irqrestore(&iscsi_transport_lock, flags); 1214 spin_unlock_irqrestore(&iscsi_transport_lock, flags);
@@ -1181,7 +1218,7 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
1181 1218
1182 sysfs_remove_group(&priv->cdev.kobj, &iscsi_transport_group); 1219 sysfs_remove_group(&priv->cdev.kobj, &iscsi_transport_group);
1183 class_device_unregister(&priv->cdev); 1220 class_device_unregister(&priv->cdev);
1184 up(&rx_queue_sema); 1221 mutex_unlock(&rx_queue_mutex);
1185 1222
1186 return 0; 1223 return 0;
1187} 1224}
@@ -1194,14 +1231,14 @@ iscsi_rcv_nl_event(struct notifier_block *this, unsigned long event, void *ptr)
1194 1231
1195 if (event == NETLINK_URELEASE && 1232 if (event == NETLINK_URELEASE &&
1196 n->protocol == NETLINK_ISCSI && n->pid) { 1233 n->protocol == NETLINK_ISCSI && n->pid) {
1197 struct iscsi_if_conn *conn; 1234 struct iscsi_cls_conn *conn;
1198 unsigned long flags; 1235 unsigned long flags;
1199 1236
1200 mempool_zone_complete(&z_reply); 1237 mempool_zone_complete(z_reply);
1201 spin_lock_irqsave(&connlock, flags); 1238 spin_lock_irqsave(&connlock, flags);
1202 list_for_each_entry(conn, &connlist, conn_list) { 1239 list_for_each_entry(conn, &connlist, conn_list) {
1203 mempool_zone_complete(&conn->z_error); 1240 mempool_zone_complete(conn->z_error);
1204 mempool_zone_complete(&conn->z_pdu); 1241 mempool_zone_complete(conn->z_pdu);
1205 } 1242 }
1206 spin_unlock_irqrestore(&connlock, flags); 1243 spin_unlock_irqrestore(&connlock, flags);
1207 } 1244 }
@@ -1234,15 +1271,15 @@ static __init int iscsi_transport_init(void)
1234 goto unregister_session_class; 1271 goto unregister_session_class;
1235 1272
1236 nls = netlink_kernel_create(NETLINK_ISCSI, 1, iscsi_if_rx, 1273 nls = netlink_kernel_create(NETLINK_ISCSI, 1, iscsi_if_rx,
1237 THIS_MODULE); 1274 THIS_MODULE);
1238 if (!nls) { 1275 if (!nls) {
1239 err = -ENOBUFS; 1276 err = -ENOBUFS;
1240 goto unregister_notifier; 1277 goto unregister_notifier;
1241 } 1278 }
1242 1279
1243 err = mempool_zone_init(&z_reply, Z_MAX_REPLY, 1280 z_reply = mempool_zone_init(Z_MAX_REPLY,
1244 NLMSG_SPACE(sizeof(struct iscsi_uevent)), Z_HIWAT_REPLY); 1281 NLMSG_SPACE(sizeof(struct iscsi_uevent)), Z_HIWAT_REPLY);
1245 if (!err) 1282 if (z_reply)
1246 return 0; 1283 return 0;
1247 1284
1248 sock_release(nls->sk_socket); 1285 sock_release(nls->sk_socket);
@@ -1259,7 +1296,7 @@ unregister_transport_class:
1259 1296
1260static void __exit iscsi_transport_exit(void) 1297static void __exit iscsi_transport_exit(void)
1261{ 1298{
1262 mempool_destroy(z_reply.pool); 1299 mempool_zone_destroy(z_reply);
1263 sock_release(nls->sk_socket); 1300 sock_release(nls->sk_socket);
1264 netlink_unregister_notifier(&iscsi_nl_notifier); 1301 netlink_unregister_notifier(&iscsi_nl_notifier);
1265 transport_class_unregister(&iscsi_connection_class); 1302 transport_class_unregister(&iscsi_connection_class);
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
index edabbd05d258..a3e0b7bc2d7b 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -29,6 +29,7 @@
29#include <linux/slab.h> 29#include <linux/slab.h>
30#include <linux/string.h> 30#include <linux/string.h>
31 31
32#include <scsi/scsi.h>
32#include <scsi/scsi_device.h> 33#include <scsi/scsi_device.h>
33#include <scsi/scsi_host.h> 34#include <scsi/scsi_host.h>
34#include <scsi/scsi_transport.h> 35#include <scsi/scsi_transport.h>
@@ -62,7 +63,7 @@ struct sas_internal {
62 63
63struct sas_host_attrs { 64struct sas_host_attrs {
64 struct list_head rphy_list; 65 struct list_head rphy_list;
65 spinlock_t lock; 66 struct mutex lock;
66 u32 next_target_id; 67 u32 next_target_id;
67}; 68};
68#define to_sas_host_attrs(host) ((struct sas_host_attrs *)(host)->shost_data) 69#define to_sas_host_attrs(host) ((struct sas_host_attrs *)(host)->shost_data)
@@ -165,7 +166,7 @@ static int sas_host_setup(struct transport_container *tc, struct device *dev,
165 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); 166 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
166 167
167 INIT_LIST_HEAD(&sas_host->rphy_list); 168 INIT_LIST_HEAD(&sas_host->rphy_list);
168 spin_lock_init(&sas_host->lock); 169 mutex_init(&sas_host->lock);
169 sas_host->next_target_id = 0; 170 sas_host->next_target_id = 0;
170 return 0; 171 return 0;
171} 172}
@@ -626,7 +627,7 @@ int sas_rphy_add(struct sas_rphy *rphy)
626 transport_add_device(&rphy->dev); 627 transport_add_device(&rphy->dev);
627 transport_configure_device(&rphy->dev); 628 transport_configure_device(&rphy->dev);
628 629
629 spin_lock(&sas_host->lock); 630 mutex_lock(&sas_host->lock);
630 list_add_tail(&rphy->list, &sas_host->rphy_list); 631 list_add_tail(&rphy->list, &sas_host->rphy_list);
631 if (identify->device_type == SAS_END_DEVICE && 632 if (identify->device_type == SAS_END_DEVICE &&
632 (identify->target_port_protocols & 633 (identify->target_port_protocols &
@@ -634,10 +635,10 @@ int sas_rphy_add(struct sas_rphy *rphy)
634 rphy->scsi_target_id = sas_host->next_target_id++; 635 rphy->scsi_target_id = sas_host->next_target_id++;
635 else 636 else
636 rphy->scsi_target_id = -1; 637 rphy->scsi_target_id = -1;
637 spin_unlock(&sas_host->lock); 638 mutex_unlock(&sas_host->lock);
638 639
639 if (rphy->scsi_target_id != -1) { 640 if (rphy->scsi_target_id != -1) {
640 scsi_scan_target(&rphy->dev, parent->number, 641 scsi_scan_target(&rphy->dev, parent->port_identifier,
641 rphy->scsi_target_id, ~0, 0); 642 rphy->scsi_target_id, ~0, 0);
642 } 643 }
643 644
@@ -661,9 +662,9 @@ void sas_rphy_free(struct sas_rphy *rphy)
661 struct Scsi_Host *shost = dev_to_shost(rphy->dev.parent->parent); 662 struct Scsi_Host *shost = dev_to_shost(rphy->dev.parent->parent);
662 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); 663 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
663 664
664 spin_lock(&sas_host->lock); 665 mutex_lock(&sas_host->lock);
665 list_del(&rphy->list); 666 list_del(&rphy->list);
666 spin_unlock(&sas_host->lock); 667 mutex_unlock(&sas_host->lock);
667 668
668 transport_destroy_device(&rphy->dev); 669 transport_destroy_device(&rphy->dev);
669 put_device(rphy->dev.parent); 670 put_device(rphy->dev.parent);
@@ -687,15 +688,27 @@ sas_rphy_delete(struct sas_rphy *rphy)
687 struct Scsi_Host *shost = dev_to_shost(parent->dev.parent); 688 struct Scsi_Host *shost = dev_to_shost(parent->dev.parent);
688 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); 689 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
689 690
690 scsi_remove_target(dev); 691 switch (rphy->identify.device_type) {
692 case SAS_END_DEVICE:
693 scsi_remove_target(dev);
694 break;
695 case SAS_EDGE_EXPANDER_DEVICE:
696 case SAS_FANOUT_EXPANDER_DEVICE:
697 device_for_each_child(dev, NULL, do_sas_phy_delete);
698 break;
699 default:
700 break;
701 }
691 702
692 transport_remove_device(dev); 703 transport_remove_device(dev);
693 device_del(dev); 704 device_del(dev);
694 transport_destroy_device(dev); 705 transport_destroy_device(dev);
695 706
696 spin_lock(&sas_host->lock); 707 mutex_lock(&sas_host->lock);
697 list_del(&rphy->list); 708 list_del(&rphy->list);
698 spin_unlock(&sas_host->lock); 709 mutex_unlock(&sas_host->lock);
710
711 parent->rphy = NULL;
699 712
700 put_device(&parent->dev); 713 put_device(&parent->dev);
701} 714}
@@ -719,23 +732,28 @@ EXPORT_SYMBOL(scsi_is_sas_rphy);
719 * SCSI scan helper 732 * SCSI scan helper
720 */ 733 */
721 734
722static struct device *sas_target_parent(struct Scsi_Host *shost, 735static int sas_user_scan(struct Scsi_Host *shost, uint channel,
723 int channel, uint id) 736 uint id, uint lun)
724{ 737{
725 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); 738 struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
726 struct sas_rphy *rphy; 739 struct sas_rphy *rphy;
727 struct device *dev = NULL;
728 740
729 spin_lock(&sas_host->lock); 741 mutex_lock(&sas_host->lock);
730 list_for_each_entry(rphy, &sas_host->rphy_list, list) { 742 list_for_each_entry(rphy, &sas_host->rphy_list, list) {
731 struct sas_phy *parent = dev_to_phy(rphy->dev.parent); 743 struct sas_phy *parent = dev_to_phy(rphy->dev.parent);
732 if (parent->number == channel && 744
733 rphy->scsi_target_id == id) 745 if (rphy->scsi_target_id == -1)
734 dev = &rphy->dev; 746 continue;
747
748 if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&
749 (id == SCAN_WILD_CARD || id == rphy->scsi_target_id)) {
750 scsi_scan_target(&rphy->dev, parent->port_identifier,
751 rphy->scsi_target_id, lun, 1);
752 }
735 } 753 }
736 spin_unlock(&sas_host->lock); 754 mutex_unlock(&sas_host->lock);
737 755
738 return dev; 756 return 0;
739} 757}
740 758
741 759
@@ -780,7 +798,7 @@ sas_attach_transport(struct sas_function_template *ft)
780 return NULL; 798 return NULL;
781 memset(i, 0, sizeof(struct sas_internal)); 799 memset(i, 0, sizeof(struct sas_internal));
782 800
783 i->t.target_parent = sas_target_parent; 801 i->t.user_scan = sas_user_scan;
784 802
785 i->t.host_attrs.ac.attrs = &i->host_attrs[0]; 803 i->t.host_attrs.ac.attrs = &i->host_attrs[0];
786 i->t.host_attrs.ac.class = &sas_host_class.class; 804 i->t.host_attrs.ac.class = &sas_host_class.class;
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index 38a53b5f9e9a..7ee95eb83dda 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -18,12 +18,13 @@
18 * along with this program; if not, write to the Free Software 18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */ 20 */
21#include <linux/config.h>
21#include <linux/ctype.h> 22#include <linux/ctype.h>
22#include <linux/init.h> 23#include <linux/init.h>
23#include <linux/module.h> 24#include <linux/module.h>
24#include <linux/workqueue.h> 25#include <linux/workqueue.h>
25#include <linux/blkdev.h> 26#include <linux/blkdev.h>
26#include <asm/semaphore.h> 27#include <linux/mutex.h>
27#include <scsi/scsi.h> 28#include <scsi/scsi.h>
28#include "scsi_priv.h" 29#include "scsi_priv.h"
29#include <scsi/scsi_device.h> 30#include <scsi/scsi_device.h>
@@ -47,7 +48,7 @@
47 48
48/* Private data accessors (keep these out of the header file) */ 49/* Private data accessors (keep these out of the header file) */
49#define spi_dv_pending(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_pending) 50#define spi_dv_pending(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_pending)
50#define spi_dv_sem(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_sem) 51#define spi_dv_mutex(x) (((struct spi_transport_attrs *)&(x)->starget_data)->dv_mutex)
51 52
52struct spi_internal { 53struct spi_internal {
53 struct scsi_transport_template t; 54 struct scsi_transport_template t;
@@ -241,7 +242,7 @@ static int spi_setup_transport_attrs(struct transport_container *tc,
241 spi_hold_mcs(starget) = 0; 242 spi_hold_mcs(starget) = 0;
242 spi_dv_pending(starget) = 0; 243 spi_dv_pending(starget) = 0;
243 spi_initial_dv(starget) = 0; 244 spi_initial_dv(starget) = 0;
244 init_MUTEX(&spi_dv_sem(starget)); 245 mutex_init(&spi_dv_mutex(starget));
245 246
246 return 0; 247 return 0;
247} 248}
@@ -378,9 +379,7 @@ static CLASS_DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate);
378 379
379/* Translate the period into ns according to the current spec 380/* Translate the period into ns according to the current spec
380 * for SDTR/PPR messages */ 381 * for SDTR/PPR messages */
381static ssize_t 382static int period_to_str(char *buf, int period)
382show_spi_transport_period_helper(struct class_device *cdev, char *buf,
383 int period)
384{ 383{
385 int len, picosec; 384 int len, picosec;
386 385
@@ -398,6 +397,14 @@ show_spi_transport_period_helper(struct class_device *cdev, char *buf,
398 len = sprint_frac(buf, picosec, 1000); 397 len = sprint_frac(buf, picosec, 1000);
399 } 398 }
400 399
400 return len;
401}
402
403static ssize_t
404show_spi_transport_period_helper(struct class_device *cdev, char *buf,
405 int period)
406{
407 int len = period_to_str(buf, period);
401 buf[len++] = '\n'; 408 buf[len++] = '\n';
402 buf[len] = '\0'; 409 buf[len] = '\0';
403 return len; 410 return len;
@@ -908,7 +915,7 @@ spi_dv_device(struct scsi_device *sdev)
908 scsi_target_quiesce(starget); 915 scsi_target_quiesce(starget);
909 916
910 spi_dv_pending(starget) = 1; 917 spi_dv_pending(starget) = 1;
911 down(&spi_dv_sem(starget)); 918 mutex_lock(&spi_dv_mutex(starget));
912 919
913 starget_printk(KERN_INFO, starget, "Beginning Domain Validation\n"); 920 starget_printk(KERN_INFO, starget, "Beginning Domain Validation\n");
914 921
@@ -916,7 +923,7 @@ spi_dv_device(struct scsi_device *sdev)
916 923
917 starget_printk(KERN_INFO, starget, "Ending Domain Validation\n"); 924 starget_printk(KERN_INFO, starget, "Ending Domain Validation\n");
918 925
919 up(&spi_dv_sem(starget)); 926 mutex_unlock(&spi_dv_mutex(starget));
920 spi_dv_pending(starget) = 0; 927 spi_dv_pending(starget) = 0;
921 928
922 scsi_target_resume(starget); 929 scsi_target_resume(starget);
@@ -1041,12 +1048,133 @@ void spi_display_xfer_agreement(struct scsi_target *starget)
1041 tp->hold_mcs ? " HMCS" : "", 1048 tp->hold_mcs ? " HMCS" : "",
1042 tmp, tp->offset); 1049 tmp, tp->offset);
1043 } else { 1050 } else {
1044 dev_info(&starget->dev, "%sasynchronous.\n", 1051 dev_info(&starget->dev, "%sasynchronous\n",
1045 tp->width ? "wide " : ""); 1052 tp->width ? "wide " : "");
1046 } 1053 }
1047} 1054}
1048EXPORT_SYMBOL(spi_display_xfer_agreement); 1055EXPORT_SYMBOL(spi_display_xfer_agreement);
1049 1056
1057#ifdef CONFIG_SCSI_CONSTANTS
1058static const char * const one_byte_msgs[] = {
1059/* 0x00 */ "Command Complete", NULL, "Save Pointers",
1060/* 0x03 */ "Restore Pointers", "Disconnect", "Initiator Error",
1061/* 0x06 */ "Abort", "Message Reject", "Nop", "Message Parity Error",
1062/* 0x0a */ "Linked Command Complete", "Linked Command Complete w/flag",
1063/* 0x0c */ "Bus device reset", "Abort Tag", "Clear Queue",
1064/* 0x0f */ "Initiate Recovery", "Release Recovery"
1065};
1066
1067static const char * const two_byte_msgs[] = {
1068/* 0x20 */ "Simple Queue Tag", "Head of Queue Tag", "Ordered Queue Tag",
1069/* 0x23 */ "Ignore Wide Residue"
1070};
1071
1072static const char * const extended_msgs[] = {
1073/* 0x00 */ "Modify Data Pointer", "Synchronous Data Transfer Request",
1074/* 0x02 */ "SCSI-I Extended Identify", "Wide Data Transfer Request",
1075/* 0x04 */ "Parallel Protocol Request"
1076};
1077
1078static void print_nego(const unsigned char *msg, int per, int off, int width)
1079{
1080 if (per) {
1081 char buf[20];
1082 period_to_str(buf, msg[per]);
1083 printk("period = %s ns ", buf);
1084 }
1085
1086 if (off)
1087 printk("offset = %d ", msg[off]);
1088 if (width)
1089 printk("width = %d ", 8 << msg[width]);
1090}
1091
1092int spi_print_msg(const unsigned char *msg)
1093{
1094 int len = 0, i;
1095 if (msg[0] == EXTENDED_MESSAGE) {
1096 len = 3 + msg[1];
1097 if (msg[2] < ARRAY_SIZE(extended_msgs))
1098 printk ("%s ", extended_msgs[msg[2]]);
1099 else
1100 printk ("Extended Message, reserved code (0x%02x) ",
1101 (int) msg[2]);
1102 switch (msg[2]) {
1103 case EXTENDED_MODIFY_DATA_POINTER:
1104 printk("pointer = %d", (int) (msg[3] << 24) |
1105 (msg[4] << 16) | (msg[5] << 8) | msg[6]);
1106 break;
1107 case EXTENDED_SDTR:
1108 print_nego(msg, 3, 4, 0);
1109 break;
1110 case EXTENDED_WDTR:
1111 print_nego(msg, 0, 0, 3);
1112 break;
1113 case EXTENDED_PPR:
1114 print_nego(msg, 3, 5, 6);
1115 break;
1116 default:
1117 for (i = 2; i < len; ++i)
1118 printk("%02x ", msg[i]);
1119 }
1120 /* Identify */
1121 } else if (msg[0] & 0x80) {
1122 printk("Identify disconnect %sallowed %s %d ",
1123 (msg[0] & 0x40) ? "" : "not ",
1124 (msg[0] & 0x20) ? "target routine" : "lun",
1125 msg[0] & 0x7);
1126 len = 1;
1127 /* Normal One byte */
1128 } else if (msg[0] < 0x1f) {
1129 if (msg[0] < ARRAY_SIZE(one_byte_msgs))
1130 printk(one_byte_msgs[msg[0]]);
1131 else
1132 printk("reserved (%02x) ", msg[0]);
1133 len = 1;
1134 /* Two byte */
1135 } else if (msg[0] <= 0x2f) {
1136 if ((msg[0] - 0x20) < ARRAY_SIZE(two_byte_msgs))
1137 printk("%s %02x ", two_byte_msgs[msg[0] - 0x20],
1138 msg[1]);
1139 else
1140 printk("reserved two byte (%02x %02x) ",
1141 msg[0], msg[1]);
1142 len = 2;
1143 } else
1144 printk("reserved");
1145 return len;
1146}
1147EXPORT_SYMBOL(spi_print_msg);
1148
1149#else /* ifndef CONFIG_SCSI_CONSTANTS */
1150
1151int spi_print_msg(const unsigned char *msg)
1152{
1153 int len = 0, i;
1154
1155 if (msg[0] == EXTENDED_MESSAGE) {
1156 len = 3 + msg[1];
1157 for (i = 0; i < len; ++i)
1158 printk("%02x ", msg[i]);
1159 /* Identify */
1160 } else if (msg[0] & 0x80) {
1161 printk("%02x ", msg[0]);
1162 len = 1;
1163 /* Normal One byte */
1164 } else if (msg[0] < 0x1f) {
1165 printk("%02x ", msg[0]);
1166 len = 1;
1167 /* Two byte */
1168 } else if (msg[0] <= 0x2f) {
1169 printk("%02x %02x", msg[0], msg[1]);
1170 len = 2;
1171 } else
1172 printk("%02x ", msg[0]);
1173 return len;
1174}
1175EXPORT_SYMBOL(spi_print_msg);
1176#endif /* ! CONFIG_SCSI_CONSTANTS */
1177
1050#define SETUP_ATTRIBUTE(field) \ 1178#define SETUP_ATTRIBUTE(field) \
1051 i->private_attrs[count] = class_device_attr_##field; \ 1179 i->private_attrs[count] = class_device_attr_##field; \
1052 if (!i->f->set_##field) { \ 1180 if (!i->f->set_##field) { \
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 03fcbab30033..930db398d107 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -49,6 +49,7 @@
49#include <linux/blkpg.h> 49#include <linux/blkpg.h>
50#include <linux/kref.h> 50#include <linux/kref.h>
51#include <linux/delay.h> 51#include <linux/delay.h>
52#include <linux/mutex.h>
52#include <asm/uaccess.h> 53#include <asm/uaccess.h>
53 54
54#include <scsi/scsi.h> 55#include <scsi/scsi.h>
@@ -102,6 +103,7 @@ struct scsi_disk {
102 u8 write_prot; 103 u8 write_prot;
103 unsigned WCE : 1; /* state of disk WCE bit */ 104 unsigned WCE : 1; /* state of disk WCE bit */
104 unsigned RCD : 1; /* state of disk RCD bit, unused */ 105 unsigned RCD : 1; /* state of disk RCD bit, unused */
106 unsigned DPOFUA : 1; /* state of disk DPOFUA bit */
105}; 107};
106 108
107static DEFINE_IDR(sd_index_idr); 109static DEFINE_IDR(sd_index_idr);
@@ -110,7 +112,7 @@ static DEFINE_SPINLOCK(sd_index_lock);
110/* This semaphore is used to mediate the 0->1 reference get in the 112/* This semaphore is used to mediate the 0->1 reference get in the
111 * face of object destruction (i.e. we can't allow a get on an 113 * face of object destruction (i.e. we can't allow a get on an
112 * object after last put) */ 114 * object after last put) */
113static DECLARE_MUTEX(sd_ref_sem); 115static DEFINE_MUTEX(sd_ref_mutex);
114 116
115static int sd_revalidate_disk(struct gendisk *disk); 117static int sd_revalidate_disk(struct gendisk *disk);
116static void sd_rw_intr(struct scsi_cmnd * SCpnt); 118static void sd_rw_intr(struct scsi_cmnd * SCpnt);
@@ -121,8 +123,7 @@ static void sd_shutdown(struct device *dev);
121static void sd_rescan(struct device *); 123static void sd_rescan(struct device *);
122static int sd_init_command(struct scsi_cmnd *); 124static int sd_init_command(struct scsi_cmnd *);
123static int sd_issue_flush(struct device *, sector_t *); 125static int sd_issue_flush(struct device *, sector_t *);
124static void sd_end_flush(request_queue_t *, struct request *); 126static void sd_prepare_flush(request_queue_t *, struct request *);
125static int sd_prepare_flush(request_queue_t *, struct request *);
126static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname, 127static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
127 unsigned char *buffer); 128 unsigned char *buffer);
128 129
@@ -137,8 +138,6 @@ static struct scsi_driver sd_template = {
137 .rescan = sd_rescan, 138 .rescan = sd_rescan,
138 .init_command = sd_init_command, 139 .init_command = sd_init_command,
139 .issue_flush = sd_issue_flush, 140 .issue_flush = sd_issue_flush,
140 .prepare_flush = sd_prepare_flush,
141 .end_flush = sd_end_flush,
142}; 141};
143 142
144/* 143/*
@@ -195,9 +194,9 @@ static struct scsi_disk *scsi_disk_get(struct gendisk *disk)
195{ 194{
196 struct scsi_disk *sdkp; 195 struct scsi_disk *sdkp;
197 196
198 down(&sd_ref_sem); 197 mutex_lock(&sd_ref_mutex);
199 sdkp = __scsi_disk_get(disk); 198 sdkp = __scsi_disk_get(disk);
200 up(&sd_ref_sem); 199 mutex_unlock(&sd_ref_mutex);
201 return sdkp; 200 return sdkp;
202} 201}
203 202
@@ -205,11 +204,11 @@ static struct scsi_disk *scsi_disk_get_from_dev(struct device *dev)
205{ 204{
206 struct scsi_disk *sdkp; 205 struct scsi_disk *sdkp;
207 206
208 down(&sd_ref_sem); 207 mutex_lock(&sd_ref_mutex);
209 sdkp = dev_get_drvdata(dev); 208 sdkp = dev_get_drvdata(dev);
210 if (sdkp) 209 if (sdkp)
211 sdkp = __scsi_disk_get(sdkp->disk); 210 sdkp = __scsi_disk_get(sdkp->disk);
212 up(&sd_ref_sem); 211 mutex_unlock(&sd_ref_mutex);
213 return sdkp; 212 return sdkp;
214} 213}
215 214
@@ -217,10 +216,10 @@ static void scsi_disk_put(struct scsi_disk *sdkp)
217{ 216{
218 struct scsi_device *sdev = sdkp->device; 217 struct scsi_device *sdev = sdkp->device;
219 218
220 down(&sd_ref_sem); 219 mutex_lock(&sd_ref_mutex);
221 kref_put(&sdkp->kref, scsi_disk_release); 220 kref_put(&sdkp->kref, scsi_disk_release);
222 scsi_device_put(sdev); 221 scsi_device_put(sdev);
223 up(&sd_ref_sem); 222 mutex_unlock(&sd_ref_mutex);
224} 223}
225 224
226/** 225/**
@@ -233,34 +232,12 @@ static void scsi_disk_put(struct scsi_disk *sdkp)
233 **/ 232 **/
234static int sd_init_command(struct scsi_cmnd * SCpnt) 233static int sd_init_command(struct scsi_cmnd * SCpnt)
235{ 234{
236 unsigned int this_count, timeout;
237 struct gendisk *disk;
238 sector_t block;
239 struct scsi_device *sdp = SCpnt->device; 235 struct scsi_device *sdp = SCpnt->device;
240 struct request *rq = SCpnt->request; 236 struct request *rq = SCpnt->request;
241 237 struct gendisk *disk = rq->rq_disk;
242 timeout = sdp->timeout; 238 sector_t block = rq->sector;
243 239 unsigned int this_count = SCpnt->request_bufflen >> 9;
244 /* 240 unsigned int timeout = sdp->timeout;
245 * SG_IO from block layer already setup, just copy cdb basically
246 */
247 if (blk_pc_request(rq)) {
248 scsi_setup_blk_pc_cmnd(SCpnt, SD_PASSTHROUGH_RETRIES);
249 if (rq->timeout)
250 timeout = rq->timeout;
251
252 goto queue;
253 }
254
255 /*
256 * we only do REQ_CMD and REQ_BLOCK_PC
257 */
258 if (!blk_fs_request(rq))
259 return 0;
260
261 disk = rq->rq_disk;
262 block = rq->sector;
263 this_count = SCpnt->request_bufflen >> 9;
264 241
265 SCSI_LOG_HLQUEUE(1, printk("sd_init_command: disk=%s, block=%llu, " 242 SCSI_LOG_HLQUEUE(1, printk("sd_init_command: disk=%s, block=%llu, "
266 "count=%d\n", disk->disk_name, 243 "count=%d\n", disk->disk_name,
@@ -346,6 +323,7 @@ static int sd_init_command(struct scsi_cmnd * SCpnt)
346 323
347 if (block > 0xffffffff) { 324 if (block > 0xffffffff) {
348 SCpnt->cmnd[0] += READ_16 - READ_6; 325 SCpnt->cmnd[0] += READ_16 - READ_6;
326 SCpnt->cmnd[1] |= blk_fua_rq(rq) ? 0x8 : 0;
349 SCpnt->cmnd[2] = sizeof(block) > 4 ? (unsigned char) (block >> 56) & 0xff : 0; 327 SCpnt->cmnd[2] = sizeof(block) > 4 ? (unsigned char) (block >> 56) & 0xff : 0;
350 SCpnt->cmnd[3] = sizeof(block) > 4 ? (unsigned char) (block >> 48) & 0xff : 0; 328 SCpnt->cmnd[3] = sizeof(block) > 4 ? (unsigned char) (block >> 48) & 0xff : 0;
351 SCpnt->cmnd[4] = sizeof(block) > 4 ? (unsigned char) (block >> 40) & 0xff : 0; 329 SCpnt->cmnd[4] = sizeof(block) > 4 ? (unsigned char) (block >> 40) & 0xff : 0;
@@ -365,6 +343,7 @@ static int sd_init_command(struct scsi_cmnd * SCpnt)
365 this_count = 0xffff; 343 this_count = 0xffff;
366 344
367 SCpnt->cmnd[0] += READ_10 - READ_6; 345 SCpnt->cmnd[0] += READ_10 - READ_6;
346 SCpnt->cmnd[1] |= blk_fua_rq(rq) ? 0x8 : 0;
368 SCpnt->cmnd[2] = (unsigned char) (block >> 24) & 0xff; 347 SCpnt->cmnd[2] = (unsigned char) (block >> 24) & 0xff;
369 SCpnt->cmnd[3] = (unsigned char) (block >> 16) & 0xff; 348 SCpnt->cmnd[3] = (unsigned char) (block >> 16) & 0xff;
370 SCpnt->cmnd[4] = (unsigned char) (block >> 8) & 0xff; 349 SCpnt->cmnd[4] = (unsigned char) (block >> 8) & 0xff;
@@ -373,6 +352,17 @@ static int sd_init_command(struct scsi_cmnd * SCpnt)
373 SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff; 352 SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff;
374 SCpnt->cmnd[8] = (unsigned char) this_count & 0xff; 353 SCpnt->cmnd[8] = (unsigned char) this_count & 0xff;
375 } else { 354 } else {
355 if (unlikely(blk_fua_rq(rq))) {
356 /*
357 * This happens only if this drive failed
358 * 10byte rw command with ILLEGAL_REQUEST
359 * during operation and thus turned off
360 * use_10_for_rw.
361 */
362 printk(KERN_ERR "sd: FUA write on READ/WRITE(6) drive\n");
363 return 0;
364 }
365
376 SCpnt->cmnd[1] |= (unsigned char) ((block >> 16) & 0x1f); 366 SCpnt->cmnd[1] |= (unsigned char) ((block >> 16) & 0x1f);
377 SCpnt->cmnd[2] = (unsigned char) ((block >> 8) & 0xff); 367 SCpnt->cmnd[2] = (unsigned char) ((block >> 8) & 0xff);
378 SCpnt->cmnd[3] = (unsigned char) block & 0xff; 368 SCpnt->cmnd[3] = (unsigned char) block & 0xff;
@@ -390,8 +380,6 @@ static int sd_init_command(struct scsi_cmnd * SCpnt)
390 SCpnt->transfersize = sdp->sector_size; 380 SCpnt->transfersize = sdp->sector_size;
391 SCpnt->underflow = this_count << 9; 381 SCpnt->underflow = this_count << 9;
392 SCpnt->allowed = SD_MAX_RETRIES; 382 SCpnt->allowed = SD_MAX_RETRIES;
393
394queue:
395 SCpnt->timeout_per_command = timeout; 383 SCpnt->timeout_per_command = timeout;
396 384
397 /* 385 /*
@@ -516,7 +504,7 @@ static int sd_release(struct inode *inode, struct file *filp)
516 return 0; 504 return 0;
517} 505}
518 506
519static int sd_hdio_getgeo(struct block_device *bdev, struct hd_geometry __user *loc) 507static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
520{ 508{
521 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk); 509 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
522 struct scsi_device *sdp = sdkp->device; 510 struct scsi_device *sdp = sdkp->device;
@@ -534,15 +522,9 @@ static int sd_hdio_getgeo(struct block_device *bdev, struct hd_geometry __user *
534 else 522 else
535 scsicam_bios_param(bdev, sdkp->capacity, diskinfo); 523 scsicam_bios_param(bdev, sdkp->capacity, diskinfo);
536 524
537 if (put_user(diskinfo[0], &loc->heads)) 525 geo->heads = diskinfo[0];
538 return -EFAULT; 526 geo->sectors = diskinfo[1];
539 if (put_user(diskinfo[1], &loc->sectors)) 527 geo->cylinders = diskinfo[2];
540 return -EFAULT;
541 if (put_user(diskinfo[2], &loc->cylinders))
542 return -EFAULT;
543 if (put_user((unsigned)get_start_sect(bdev),
544 (unsigned long __user *)&loc->start))
545 return -EFAULT;
546 return 0; 528 return 0;
547} 529}
548 530
@@ -582,12 +564,6 @@ static int sd_ioctl(struct inode * inode, struct file * filp,
582 if (!scsi_block_when_processing_errors(sdp) || !error) 564 if (!scsi_block_when_processing_errors(sdp) || !error)
583 return error; 565 return error;
584 566
585 if (cmd == HDIO_GETGEO) {
586 if (!arg)
587 return -EINVAL;
588 return sd_hdio_getgeo(bdev, p);
589 }
590
591 /* 567 /*
592 * Send SCSI addressing ioctls directly to mid level, send other 568 * Send SCSI addressing ioctls directly to mid level, send other
593 * ioctls to block level and then onto mid level if they can't be 569 * ioctls to block level and then onto mid level if they can't be
@@ -729,42 +705,13 @@ static int sd_issue_flush(struct device *dev, sector_t *error_sector)
729 return ret; 705 return ret;
730} 706}
731 707
732static void sd_end_flush(request_queue_t *q, struct request *flush_rq) 708static void sd_prepare_flush(request_queue_t *q, struct request *rq)
733{ 709{
734 struct request *rq = flush_rq->end_io_data;
735 struct scsi_cmnd *cmd = rq->special;
736 unsigned int bytes = rq->hard_nr_sectors << 9;
737
738 if (!flush_rq->errors) {
739 spin_unlock(q->queue_lock);
740 scsi_io_completion(cmd, bytes, 0);
741 spin_lock(q->queue_lock);
742 } else if (blk_barrier_postflush(rq)) {
743 spin_unlock(q->queue_lock);
744 scsi_io_completion(cmd, 0, bytes);
745 spin_lock(q->queue_lock);
746 } else {
747 /*
748 * force journal abort of barriers
749 */
750 end_that_request_first(rq, -EOPNOTSUPP, rq->hard_nr_sectors);
751 end_that_request_last(rq);
752 }
753}
754
755static int sd_prepare_flush(request_queue_t *q, struct request *rq)
756{
757 struct scsi_device *sdev = q->queuedata;
758 struct scsi_disk *sdkp = dev_get_drvdata(&sdev->sdev_gendev);
759
760 if (!sdkp || !sdkp->WCE)
761 return 0;
762
763 memset(rq->cmd, 0, sizeof(rq->cmd)); 710 memset(rq->cmd, 0, sizeof(rq->cmd));
764 rq->flags |= REQ_BLOCK_PC | REQ_SOFTBARRIER; 711 rq->flags |= REQ_BLOCK_PC;
765 rq->timeout = SD_TIMEOUT; 712 rq->timeout = SD_TIMEOUT;
766 rq->cmd[0] = SYNCHRONIZE_CACHE; 713 rq->cmd[0] = SYNCHRONIZE_CACHE;
767 return 1; 714 rq->cmd_len = 10;
768} 715}
769 716
770static void sd_rescan(struct device *dev) 717static void sd_rescan(struct device *dev)
@@ -818,6 +765,7 @@ static struct block_device_operations sd_fops = {
818 .open = sd_open, 765 .open = sd_open,
819 .release = sd_release, 766 .release = sd_release,
820 .ioctl = sd_ioctl, 767 .ioctl = sd_ioctl,
768 .getgeo = sd_getgeo,
821#ifdef CONFIG_COMPAT 769#ifdef CONFIG_COMPAT
822 .compat_ioctl = sd_compat_ioctl, 770 .compat_ioctl = sd_compat_ioctl,
823#endif 771#endif
@@ -865,15 +813,7 @@ static void sd_rw_intr(struct scsi_cmnd * SCpnt)
865 relatively rare error condition, no care is taken to avoid 813 relatively rare error condition, no care is taken to avoid
866 unnecessary additional work such as memcpy's that could be avoided. 814 unnecessary additional work such as memcpy's that could be avoided.
867 */ 815 */
868 816 if (driver_byte(result) != 0 &&
869 /*
870 * If SG_IO from block layer then set good_bytes to stop retries;
871 * else if errors, check them, and if necessary prepare for
872 * (partial) retries.
873 */
874 if (blk_pc_request(SCpnt->request))
875 good_bytes = this_count;
876 else if (driver_byte(result) != 0 &&
877 sense_valid && !sense_deferred) { 817 sense_valid && !sense_deferred) {
878 switch (sshdr.sense_key) { 818 switch (sshdr.sense_key) {
879 case MEDIUM_ERROR: 819 case MEDIUM_ERROR:
@@ -1427,10 +1367,18 @@ sd_read_cache_type(struct scsi_disk *sdkp, char *diskname,
1427 sdkp->RCD = 0; 1367 sdkp->RCD = 0;
1428 } 1368 }
1429 1369
1370 sdkp->DPOFUA = (data.device_specific & 0x10) != 0;
1371 if (sdkp->DPOFUA && !sdkp->device->use_10_for_rw) {
1372 printk(KERN_NOTICE "SCSI device %s: uses "
1373 "READ/WRITE(6), disabling FUA\n", diskname);
1374 sdkp->DPOFUA = 0;
1375 }
1376
1430 ct = sdkp->RCD + 2*sdkp->WCE; 1377 ct = sdkp->RCD + 2*sdkp->WCE;
1431 1378
1432 printk(KERN_NOTICE "SCSI device %s: drive cache: %s\n", 1379 printk(KERN_NOTICE "SCSI device %s: drive cache: %s%s\n",
1433 diskname, types[ct]); 1380 diskname, types[ct],
1381 sdkp->DPOFUA ? " w/ FUA" : "");
1434 1382
1435 return; 1383 return;
1436 } 1384 }
@@ -1462,6 +1410,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
1462 struct scsi_disk *sdkp = scsi_disk(disk); 1410 struct scsi_disk *sdkp = scsi_disk(disk);
1463 struct scsi_device *sdp = sdkp->device; 1411 struct scsi_device *sdp = sdkp->device;
1464 unsigned char *buffer; 1412 unsigned char *buffer;
1413 unsigned ordered;
1465 1414
1466 SCSI_LOG_HLQUEUE(3, printk("sd_revalidate_disk: disk=%s\n", disk->disk_name)); 1415 SCSI_LOG_HLQUEUE(3, printk("sd_revalidate_disk: disk=%s\n", disk->disk_name));
1467 1416
@@ -1495,12 +1444,24 @@ static int sd_revalidate_disk(struct gendisk *disk)
1495 */ 1444 */
1496 if (sdkp->media_present) { 1445 if (sdkp->media_present) {
1497 sd_read_capacity(sdkp, disk->disk_name, buffer); 1446 sd_read_capacity(sdkp, disk->disk_name, buffer);
1498 if (sdp->removable) 1447 sd_read_write_protect_flag(sdkp, disk->disk_name, buffer);
1499 sd_read_write_protect_flag(sdkp, disk->disk_name,
1500 buffer);
1501 sd_read_cache_type(sdkp, disk->disk_name, buffer); 1448 sd_read_cache_type(sdkp, disk->disk_name, buffer);
1502 } 1449 }
1503 1450
1451 /*
1452 * We now have all cache related info, determine how we deal
1453 * with ordered requests. Note that as the current SCSI
1454 * dispatch function can alter request order, we cannot use
1455 * QUEUE_ORDERED_TAG_* even when ordered tag is supported.
1456 */
1457 if (sdkp->WCE)
1458 ordered = sdkp->DPOFUA
1459 ? QUEUE_ORDERED_DRAIN_FUA : QUEUE_ORDERED_DRAIN_FLUSH;
1460 else
1461 ordered = QUEUE_ORDERED_DRAIN;
1462
1463 blk_queue_ordered(sdkp->disk->queue, ordered, sd_prepare_flush);
1464
1504 set_capacity(disk, sdkp->capacity); 1465 set_capacity(disk, sdkp->capacity);
1505 kfree(buffer); 1466 kfree(buffer);
1506 1467
@@ -1600,6 +1561,7 @@ static int sd_probe(struct device *dev)
1600 strcpy(gd->devfs_name, sdp->devfs_name); 1561 strcpy(gd->devfs_name, sdp->devfs_name);
1601 1562
1602 gd->private_data = &sdkp->driver; 1563 gd->private_data = &sdkp->driver;
1564 gd->queue = sdkp->device->request_queue;
1603 1565
1604 sd_revalidate_disk(gd); 1566 sd_revalidate_disk(gd);
1605 1567
@@ -1607,7 +1569,6 @@ static int sd_probe(struct device *dev)
1607 gd->flags = GENHD_FL_DRIVERFS; 1569 gd->flags = GENHD_FL_DRIVERFS;
1608 if (sdp->removable) 1570 if (sdp->removable)
1609 gd->flags |= GENHD_FL_REMOVABLE; 1571 gd->flags |= GENHD_FL_REMOVABLE;
1610 gd->queue = sdkp->device->request_queue;
1611 1572
1612 dev_set_drvdata(dev, sdkp); 1573 dev_set_drvdata(dev, sdkp);
1613 add_disk(gd); 1574 add_disk(gd);
@@ -1643,10 +1604,10 @@ static int sd_remove(struct device *dev)
1643 del_gendisk(sdkp->disk); 1604 del_gendisk(sdkp->disk);
1644 sd_shutdown(dev); 1605 sd_shutdown(dev);
1645 1606
1646 down(&sd_ref_sem); 1607 mutex_lock(&sd_ref_mutex);
1647 dev_set_drvdata(dev, NULL); 1608 dev_set_drvdata(dev, NULL);
1648 kref_put(&sdkp->kref, scsi_disk_release); 1609 kref_put(&sdkp->kref, scsi_disk_release);
1649 up(&sd_ref_sem); 1610 mutex_unlock(&sd_ref_mutex);
1650 1611
1651 return 0; 1612 return 0;
1652} 1613}
@@ -1655,7 +1616,7 @@ static int sd_remove(struct device *dev)
1655 * scsi_disk_release - Called to free the scsi_disk structure 1616 * scsi_disk_release - Called to free the scsi_disk structure
1656 * @kref: pointer to embedded kref 1617 * @kref: pointer to embedded kref
1657 * 1618 *
1658 * sd_ref_sem must be held entering this routine. Because it is 1619 * sd_ref_mutex must be held entering this routine. Because it is
1659 * called on last put, you should always use the scsi_disk_get() 1620 * called on last put, you should always use the scsi_disk_get()
1660 * scsi_disk_put() helpers which manipulate the semaphore directly 1621 * scsi_disk_put() helpers which manipulate the semaphore directly
1661 * and never do a direct kref_put(). 1622 * and never do a direct kref_put().
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index b55c2a8a547c..78aad9582bcf 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -104,8 +104,6 @@ static int sg_allow_dio = SG_ALLOW_DIO_DEF;
104static int sg_add(struct class_device *, struct class_interface *); 104static int sg_add(struct class_device *, struct class_interface *);
105static void sg_remove(struct class_device *, struct class_interface *); 105static void sg_remove(struct class_device *, struct class_interface *);
106 106
107static Scsi_Request *dummy_cmdp; /* only used for sizeof */
108
109static DEFINE_RWLOCK(sg_dev_arr_lock); /* Also used to lock 107static DEFINE_RWLOCK(sg_dev_arr_lock); /* Also used to lock
110 file descriptor list for device */ 108 file descriptor list for device */
111 109
@@ -119,7 +117,7 @@ typedef struct sg_scatter_hold { /* holding area for scsi scatter gather info */
119 unsigned short sglist_len; /* size of malloc'd scatter-gather list ++ */ 117 unsigned short sglist_len; /* size of malloc'd scatter-gather list ++ */
120 unsigned bufflen; /* Size of (aggregate) data buffer */ 118 unsigned bufflen; /* Size of (aggregate) data buffer */
121 unsigned b_malloc_len; /* actual len malloc'ed in buffer */ 119 unsigned b_malloc_len; /* actual len malloc'ed in buffer */
122 void *buffer; /* Data buffer or scatter list (k_use_sg>0) */ 120 struct scatterlist *buffer;/* scatter list */
123 char dio_in_use; /* 0->indirect IO (or mmap), 1->dio */ 121 char dio_in_use; /* 0->indirect IO (or mmap), 1->dio */
124 unsigned char cmd_opcode; /* first byte of command */ 122 unsigned char cmd_opcode; /* first byte of command */
125} Sg_scatter_hold; 123} Sg_scatter_hold;
@@ -128,12 +126,11 @@ struct sg_device; /* forward declarations */
128struct sg_fd; 126struct sg_fd;
129 127
130typedef struct sg_request { /* SG_MAX_QUEUE requests outstanding per file */ 128typedef struct sg_request { /* SG_MAX_QUEUE requests outstanding per file */
131 Scsi_Request *my_cmdp; /* != 0 when request with lower levels */
132 struct sg_request *nextrp; /* NULL -> tail request (slist) */ 129 struct sg_request *nextrp; /* NULL -> tail request (slist) */
133 struct sg_fd *parentfp; /* NULL -> not in use */ 130 struct sg_fd *parentfp; /* NULL -> not in use */
134 Sg_scatter_hold data; /* hold buffer, perhaps scatter list */ 131 Sg_scatter_hold data; /* hold buffer, perhaps scatter list */
135 sg_io_hdr_t header; /* scsi command+info, see <scsi/sg.h> */ 132 sg_io_hdr_t header; /* scsi command+info, see <scsi/sg.h> */
136 unsigned char sense_b[sizeof (dummy_cmdp->sr_sense_buffer)]; 133 unsigned char sense_b[SCSI_SENSE_BUFFERSIZE];
137 char res_used; /* 1 -> using reserve buffer, 0 -> not ... */ 134 char res_used; /* 1 -> using reserve buffer, 0 -> not ... */
138 char orphan; /* 1 -> drop on sight, 0 -> normal */ 135 char orphan; /* 1 -> drop on sight, 0 -> normal */
139 char sg_io_owned; /* 1 -> packet belongs to SG_IO */ 136 char sg_io_owned; /* 1 -> packet belongs to SG_IO */
@@ -174,7 +171,8 @@ typedef struct sg_device { /* holds the state of each scsi generic device */
174} Sg_device; 171} Sg_device;
175 172
176static int sg_fasync(int fd, struct file *filp, int mode); 173static int sg_fasync(int fd, struct file *filp, int mode);
177static void sg_cmd_done(Scsi_Cmnd * SCpnt); /* tasklet or soft irq callback */ 174/* tasklet or soft irq callback */
175static void sg_cmd_done(void *data, char *sense, int result, int resid);
178static int sg_start_req(Sg_request * srp); 176static int sg_start_req(Sg_request * srp);
179static void sg_finish_rem_req(Sg_request * srp); 177static void sg_finish_rem_req(Sg_request * srp);
180static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size); 178static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size);
@@ -195,8 +193,8 @@ static void sg_remove_scat(Sg_scatter_hold * schp);
195static void sg_build_reserve(Sg_fd * sfp, int req_size); 193static void sg_build_reserve(Sg_fd * sfp, int req_size);
196static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size); 194static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
197static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp); 195static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
198static char *sg_page_malloc(int rqSz, int lowDma, int *retSzp); 196static struct page *sg_page_malloc(int rqSz, int lowDma, int *retSzp);
199static void sg_page_free(char *buff, int size); 197static void sg_page_free(struct page *page, int size);
200static Sg_fd *sg_add_sfp(Sg_device * sdp, int dev); 198static Sg_fd *sg_add_sfp(Sg_device * sdp, int dev);
201static int sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp); 199static int sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp);
202static void __sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp); 200static void __sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp);
@@ -207,7 +205,6 @@ static int sg_res_in_use(Sg_fd * sfp);
207static int sg_allow_access(unsigned char opcode, char dev_type); 205static int sg_allow_access(unsigned char opcode, char dev_type);
208static int sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len); 206static int sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len);
209static Sg_device *sg_get_dev(int dev); 207static Sg_device *sg_get_dev(int dev);
210static inline unsigned char *sg_scatg2virt(const struct scatterlist *sclp);
211#ifdef CONFIG_SCSI_PROC_FS 208#ifdef CONFIG_SCSI_PROC_FS
212static int sg_last_dev(void); 209static int sg_last_dev(void);
213#endif 210#endif
@@ -226,6 +223,7 @@ sg_open(struct inode *inode, struct file *filp)
226{ 223{
227 int dev = iminor(inode); 224 int dev = iminor(inode);
228 int flags = filp->f_flags; 225 int flags = filp->f_flags;
226 struct request_queue *q;
229 Sg_device *sdp; 227 Sg_device *sdp;
230 Sg_fd *sfp; 228 Sg_fd *sfp;
231 int res; 229 int res;
@@ -287,7 +285,9 @@ sg_open(struct inode *inode, struct file *filp)
287 } 285 }
288 if (!sdp->headfp) { /* no existing opens on this device */ 286 if (!sdp->headfp) { /* no existing opens on this device */
289 sdp->sgdebug = 0; 287 sdp->sgdebug = 0;
290 sdp->sg_tablesize = sdp->device->host->sg_tablesize; 288 q = sdp->device->request_queue;
289 sdp->sg_tablesize = min(q->max_hw_segments,
290 q->max_phys_segments);
291 } 291 }
292 if ((sfp = sg_add_sfp(sdp, dev))) 292 if ((sfp = sg_add_sfp(sdp, dev)))
293 filp->private_data = sfp; 293 filp->private_data = sfp;
@@ -340,6 +340,7 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
340 return -ENXIO; 340 return -ENXIO;
341 SCSI_LOG_TIMEOUT(3, printk("sg_read: %s, count=%d\n", 341 SCSI_LOG_TIMEOUT(3, printk("sg_read: %s, count=%d\n",
342 sdp->disk->disk_name, (int) count)); 342 sdp->disk->disk_name, (int) count));
343
343 if (!access_ok(VERIFY_WRITE, buf, count)) 344 if (!access_ok(VERIFY_WRITE, buf, count))
344 return -EFAULT; 345 return -EFAULT;
345 if (sfp->force_packid && (count >= SZ_SG_HEADER)) { 346 if (sfp->force_packid && (count >= SZ_SG_HEADER)) {
@@ -491,7 +492,7 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
491 if ((hp->mx_sb_len > 0) && hp->sbp) { 492 if ((hp->mx_sb_len > 0) && hp->sbp) {
492 if ((CHECK_CONDITION & hp->masked_status) || 493 if ((CHECK_CONDITION & hp->masked_status) ||
493 (DRIVER_SENSE & hp->driver_status)) { 494 (DRIVER_SENSE & hp->driver_status)) {
494 int sb_len = sizeof (dummy_cmdp->sr_sense_buffer); 495 int sb_len = SCSI_SENSE_BUFFERSIZE;
495 sb_len = (hp->mx_sb_len > sb_len) ? sb_len : hp->mx_sb_len; 496 sb_len = (hp->mx_sb_len > sb_len) ? sb_len : hp->mx_sb_len;
496 len = 8 + (int) srp->sense_b[7]; /* Additional sense length field */ 497 len = 8 + (int) srp->sense_b[7]; /* Additional sense length field */
497 len = (len > sb_len) ? sb_len : len; 498 len = (len > sb_len) ? sb_len : len;
@@ -525,7 +526,7 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
525 Sg_request *srp; 526 Sg_request *srp;
526 struct sg_header old_hdr; 527 struct sg_header old_hdr;
527 sg_io_hdr_t *hp; 528 sg_io_hdr_t *hp;
528 unsigned char cmnd[sizeof (dummy_cmdp->sr_cmnd)]; 529 unsigned char cmnd[MAX_COMMAND_SIZE];
529 530
530 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) 531 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
531 return -ENXIO; 532 return -ENXIO;
@@ -624,7 +625,7 @@ sg_new_write(Sg_fd * sfp, const char __user *buf, size_t count,
624 int k; 625 int k;
625 Sg_request *srp; 626 Sg_request *srp;
626 sg_io_hdr_t *hp; 627 sg_io_hdr_t *hp;
627 unsigned char cmnd[sizeof (dummy_cmdp->sr_cmnd)]; 628 unsigned char cmnd[MAX_COMMAND_SIZE];
628 int timeout; 629 int timeout;
629 unsigned long ul_timeout; 630 unsigned long ul_timeout;
630 631
@@ -692,11 +693,9 @@ static int
692sg_common_write(Sg_fd * sfp, Sg_request * srp, 693sg_common_write(Sg_fd * sfp, Sg_request * srp,
693 unsigned char *cmnd, int timeout, int blocking) 694 unsigned char *cmnd, int timeout, int blocking)
694{ 695{
695 int k; 696 int k, data_dir;
696 Scsi_Request *SRpnt;
697 Sg_device *sdp = sfp->parentdp; 697 Sg_device *sdp = sfp->parentdp;
698 sg_io_hdr_t *hp = &srp->header; 698 sg_io_hdr_t *hp = &srp->header;
699 request_queue_t *q;
700 699
701 srp->data.cmd_opcode = cmnd[0]; /* hold opcode of command */ 700 srp->data.cmd_opcode = cmnd[0]; /* hold opcode of command */
702 hp->status = 0; 701 hp->status = 0;
@@ -723,51 +722,36 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
723 sg_finish_rem_req(srp); 722 sg_finish_rem_req(srp);
724 return -ENODEV; 723 return -ENODEV;
725 } 724 }
726 SRpnt = scsi_allocate_request(sdp->device, GFP_ATOMIC);
727 if (SRpnt == NULL) {
728 SCSI_LOG_TIMEOUT(1, printk("sg_write: no mem\n"));
729 sg_finish_rem_req(srp);
730 return -ENOMEM;
731 }
732 725
733 srp->my_cmdp = SRpnt;
734 q = SRpnt->sr_device->request_queue;
735 SRpnt->sr_request->rq_disk = sdp->disk;
736 SRpnt->sr_sense_buffer[0] = 0;
737 SRpnt->sr_cmd_len = hp->cmd_len;
738 SRpnt->sr_use_sg = srp->data.k_use_sg;
739 SRpnt->sr_sglist_len = srp->data.sglist_len;
740 SRpnt->sr_bufflen = srp->data.bufflen;
741 SRpnt->sr_underflow = 0;
742 SRpnt->sr_buffer = srp->data.buffer;
743 switch (hp->dxfer_direction) { 726 switch (hp->dxfer_direction) {
744 case SG_DXFER_TO_FROM_DEV: 727 case SG_DXFER_TO_FROM_DEV:
745 case SG_DXFER_FROM_DEV: 728 case SG_DXFER_FROM_DEV:
746 SRpnt->sr_data_direction = DMA_FROM_DEVICE; 729 data_dir = DMA_FROM_DEVICE;
747 break; 730 break;
748 case SG_DXFER_TO_DEV: 731 case SG_DXFER_TO_DEV:
749 SRpnt->sr_data_direction = DMA_TO_DEVICE; 732 data_dir = DMA_TO_DEVICE;
750 break; 733 break;
751 case SG_DXFER_UNKNOWN: 734 case SG_DXFER_UNKNOWN:
752 SRpnt->sr_data_direction = DMA_BIDIRECTIONAL; 735 data_dir = DMA_BIDIRECTIONAL;
753 break; 736 break;
754 default: 737 default:
755 SRpnt->sr_data_direction = DMA_NONE; 738 data_dir = DMA_NONE;
756 break; 739 break;
757 } 740 }
758 SRpnt->upper_private_data = srp;
759 srp->data.k_use_sg = 0;
760 srp->data.sglist_len = 0;
761 srp->data.bufflen = 0;
762 srp->data.buffer = NULL;
763 hp->duration = jiffies_to_msecs(jiffies); 741 hp->duration = jiffies_to_msecs(jiffies);
764/* Now send everything of to mid-level. The next time we hear about this 742/* Now send everything of to mid-level. The next time we hear about this
765 packet is when sg_cmd_done() is called (i.e. a callback). */ 743 packet is when sg_cmd_done() is called (i.e. a callback). */
766 scsi_do_req(SRpnt, (void *) cmnd, 744 if (scsi_execute_async(sdp->device, cmnd, data_dir, srp->data.buffer,
767 (void *) SRpnt->sr_buffer, hp->dxfer_len, 745 hp->dxfer_len, srp->data.k_use_sg, timeout,
768 sg_cmd_done, timeout, SG_DEFAULT_RETRIES); 746 SG_DEFAULT_RETRIES, srp, sg_cmd_done,
769 /* dxfer_len overwrites SRpnt->sr_bufflen, hence need for b_malloc_len */ 747 GFP_ATOMIC)) {
770 return 0; 748 SCSI_LOG_TIMEOUT(1, printk("sg_write: scsi_execute_async failed\n"));
749 /*
750 * most likely out of mem, but could also be a bad map
751 */
752 return -ENOMEM;
753 } else
754 return 0;
771} 755}
772 756
773static int 757static int
@@ -1156,45 +1140,22 @@ sg_fasync(int fd, struct file *filp, int mode)
1156 return (retval < 0) ? retval : 0; 1140 return (retval < 0) ? retval : 0;
1157} 1141}
1158 1142
1159static inline unsigned char *
1160sg_scatg2virt(const struct scatterlist *sclp)
1161{
1162 return (sclp && sclp->page) ?
1163 (unsigned char *) page_address(sclp->page) + sclp->offset : NULL;
1164}
1165
1166/* When startFinish==1 increments page counts for pages other than the 1143/* When startFinish==1 increments page counts for pages other than the
1167 first of scatter gather elements obtained from __get_free_pages(). 1144 first of scatter gather elements obtained from alloc_pages().
1168 When startFinish==0 decrements ... */ 1145 When startFinish==0 decrements ... */
1169static void 1146static void
1170sg_rb_correct4mmap(Sg_scatter_hold * rsv_schp, int startFinish) 1147sg_rb_correct4mmap(Sg_scatter_hold * rsv_schp, int startFinish)
1171{ 1148{
1172 void *page_ptr; 1149 struct scatterlist *sg = rsv_schp->buffer;
1173 struct page *page; 1150 struct page *page;
1174 int k, m; 1151 int k, m;
1175 1152
1176 SCSI_LOG_TIMEOUT(3, printk("sg_rb_correct4mmap: startFinish=%d, scatg=%d\n", 1153 SCSI_LOG_TIMEOUT(3, printk("sg_rb_correct4mmap: startFinish=%d, scatg=%d\n",
1177 startFinish, rsv_schp->k_use_sg)); 1154 startFinish, rsv_schp->k_use_sg));
1178 /* N.B. correction _not_ applied to base page of each allocation */ 1155 /* N.B. correction _not_ applied to base page of each allocation */
1179 if (rsv_schp->k_use_sg) { /* reserve buffer is a scatter gather list */ 1156 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) {
1180 struct scatterlist *sclp = rsv_schp->buffer; 1157 for (m = PAGE_SIZE; m < sg->length; m += PAGE_SIZE) {
1181 1158 page = sg->page;
1182 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sclp) {
1183 for (m = PAGE_SIZE; m < sclp->length; m += PAGE_SIZE) {
1184 page_ptr = sg_scatg2virt(sclp) + m;
1185 page = virt_to_page(page_ptr);
1186 if (startFinish)
1187 get_page(page);
1188 else {
1189 if (page_count(page) > 0)
1190 __put_page(page);
1191 }
1192 }
1193 }
1194 } else { /* reserve buffer is just a single allocation */
1195 for (m = PAGE_SIZE; m < rsv_schp->bufflen; m += PAGE_SIZE) {
1196 page_ptr = (unsigned char *) rsv_schp->buffer + m;
1197 page = virt_to_page(page_ptr);
1198 if (startFinish) 1159 if (startFinish)
1199 get_page(page); 1160 get_page(page);
1200 else { 1161 else {
@@ -1210,9 +1171,10 @@ sg_vma_nopage(struct vm_area_struct *vma, unsigned long addr, int *type)
1210{ 1171{
1211 Sg_fd *sfp; 1172 Sg_fd *sfp;
1212 struct page *page = NOPAGE_SIGBUS; 1173 struct page *page = NOPAGE_SIGBUS;
1213 void *page_ptr = NULL; 1174 unsigned long offset, len, sa;
1214 unsigned long offset;
1215 Sg_scatter_hold *rsv_schp; 1175 Sg_scatter_hold *rsv_schp;
1176 struct scatterlist *sg;
1177 int k;
1216 1178
1217 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data))) 1179 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data)))
1218 return page; 1180 return page;
@@ -1222,30 +1184,21 @@ sg_vma_nopage(struct vm_area_struct *vma, unsigned long addr, int *type)
1222 return page; 1184 return page;
1223 SCSI_LOG_TIMEOUT(3, printk("sg_vma_nopage: offset=%lu, scatg=%d\n", 1185 SCSI_LOG_TIMEOUT(3, printk("sg_vma_nopage: offset=%lu, scatg=%d\n",
1224 offset, rsv_schp->k_use_sg)); 1186 offset, rsv_schp->k_use_sg));
1225 if (rsv_schp->k_use_sg) { /* reserve buffer is a scatter gather list */ 1187 sg = rsv_schp->buffer;
1226 int k; 1188 sa = vma->vm_start;
1227 unsigned long sa = vma->vm_start; 1189 for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end);
1228 unsigned long len; 1190 ++k, ++sg) {
1229 struct scatterlist *sclp = rsv_schp->buffer; 1191 len = vma->vm_end - sa;
1230 1192 len = (len < sg->length) ? len : sg->length;
1231 for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end); 1193 if (offset < len) {
1232 ++k, ++sclp) { 1194 page = sg->page;
1233 len = vma->vm_end - sa; 1195 get_page(page); /* increment page count */
1234 len = (len < sclp->length) ? len : sclp->length; 1196 break;
1235 if (offset < len) {
1236 page_ptr = sg_scatg2virt(sclp) + offset;
1237 page = virt_to_page(page_ptr);
1238 get_page(page); /* increment page count */
1239 break;
1240 }
1241 sa += len;
1242 offset -= len;
1243 } 1197 }
1244 } else { /* reserve buffer is just a single allocation */ 1198 sa += len;
1245 page_ptr = (unsigned char *) rsv_schp->buffer + offset; 1199 offset -= len;
1246 page = virt_to_page(page_ptr);
1247 get_page(page); /* increment page count */
1248 } 1200 }
1201
1249 if (type) 1202 if (type)
1250 *type = VM_FAULT_MINOR; 1203 *type = VM_FAULT_MINOR;
1251 return page; 1204 return page;
@@ -1259,8 +1212,10 @@ static int
1259sg_mmap(struct file *filp, struct vm_area_struct *vma) 1212sg_mmap(struct file *filp, struct vm_area_struct *vma)
1260{ 1213{
1261 Sg_fd *sfp; 1214 Sg_fd *sfp;
1262 unsigned long req_sz; 1215 unsigned long req_sz, len, sa;
1263 Sg_scatter_hold *rsv_schp; 1216 Sg_scatter_hold *rsv_schp;
1217 int k;
1218 struct scatterlist *sg;
1264 1219
1265 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data))) 1220 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data)))
1266 return -ENXIO; 1221 return -ENXIO;
@@ -1273,24 +1228,15 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
1273 if (req_sz > rsv_schp->bufflen) 1228 if (req_sz > rsv_schp->bufflen)
1274 return -ENOMEM; /* cannot map more than reserved buffer */ 1229 return -ENOMEM; /* cannot map more than reserved buffer */
1275 1230
1276 if (rsv_schp->k_use_sg) { /* reserve buffer is a scatter gather list */ 1231 sa = vma->vm_start;
1277 int k; 1232 sg = rsv_schp->buffer;
1278 unsigned long sa = vma->vm_start; 1233 for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end);
1279 unsigned long len; 1234 ++k, ++sg) {
1280 struct scatterlist *sclp = rsv_schp->buffer; 1235 len = vma->vm_end - sa;
1281 1236 len = (len < sg->length) ? len : sg->length;
1282 for (k = 0; (k < rsv_schp->k_use_sg) && (sa < vma->vm_end); 1237 sa += len;
1283 ++k, ++sclp) {
1284 if (0 != sclp->offset)
1285 return -EFAULT; /* non page aligned memory ?? */
1286 len = vma->vm_end - sa;
1287 len = (len < sclp->length) ? len : sclp->length;
1288 sa += len;
1289 }
1290 } else { /* reserve buffer is just a single allocation */
1291 if ((unsigned long) rsv_schp->buffer & (PAGE_SIZE - 1))
1292 return -EFAULT; /* non page aligned memory ?? */
1293 } 1238 }
1239
1294 if (0 == sfp->mmap_called) { 1240 if (0 == sfp->mmap_called) {
1295 sg_rb_correct4mmap(rsv_schp, 1); /* do only once per fd lifetime */ 1241 sg_rb_correct4mmap(rsv_schp, 1); /* do only once per fd lifetime */
1296 sfp->mmap_called = 1; 1242 sfp->mmap_called = 1;
@@ -1304,21 +1250,16 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
1304/* This function is a "bottom half" handler that is called by the 1250/* This function is a "bottom half" handler that is called by the
1305 * mid level when a command is completed (or has failed). */ 1251 * mid level when a command is completed (or has failed). */
1306static void 1252static void
1307sg_cmd_done(Scsi_Cmnd * SCpnt) 1253sg_cmd_done(void *data, char *sense, int result, int resid)
1308{ 1254{
1309 Scsi_Request *SRpnt = NULL; 1255 Sg_request *srp = data;
1310 Sg_device *sdp = NULL; 1256 Sg_device *sdp = NULL;
1311 Sg_fd *sfp; 1257 Sg_fd *sfp;
1312 Sg_request *srp = NULL;
1313 unsigned long iflags; 1258 unsigned long iflags;
1314 unsigned int ms; 1259 unsigned int ms;
1315 1260
1316 if (SCpnt && (SRpnt = SCpnt->sc_request))
1317 srp = (Sg_request *) SRpnt->upper_private_data;
1318 if (NULL == srp) { 1261 if (NULL == srp) {
1319 printk(KERN_ERR "sg_cmd_done: NULL request\n"); 1262 printk(KERN_ERR "sg_cmd_done: NULL request\n");
1320 if (SRpnt)
1321 scsi_release_request(SRpnt);
1322 return; 1263 return;
1323 } 1264 }
1324 sfp = srp->parentfp; 1265 sfp = srp->parentfp;
@@ -1326,49 +1267,34 @@ sg_cmd_done(Scsi_Cmnd * SCpnt)
1326 sdp = sfp->parentdp; 1267 sdp = sfp->parentdp;
1327 if ((NULL == sdp) || sdp->detached) { 1268 if ((NULL == sdp) || sdp->detached) {
1328 printk(KERN_INFO "sg_cmd_done: device detached\n"); 1269 printk(KERN_INFO "sg_cmd_done: device detached\n");
1329 scsi_release_request(SRpnt);
1330 return; 1270 return;
1331 } 1271 }
1332 1272
1333 /* First transfer ownership of data buffers to sg_device object. */
1334 srp->data.k_use_sg = SRpnt->sr_use_sg;
1335 srp->data.sglist_len = SRpnt->sr_sglist_len;
1336 srp->data.bufflen = SRpnt->sr_bufflen;
1337 srp->data.buffer = SRpnt->sr_buffer;
1338 /* now clear out request structure */
1339 SRpnt->sr_use_sg = 0;
1340 SRpnt->sr_sglist_len = 0;
1341 SRpnt->sr_bufflen = 0;
1342 SRpnt->sr_buffer = NULL;
1343 SRpnt->sr_underflow = 0;
1344 SRpnt->sr_request->rq_disk = NULL; /* "sg" _disowns_ request blk */
1345
1346 srp->my_cmdp = NULL;
1347 1273
1348 SCSI_LOG_TIMEOUT(4, printk("sg_cmd_done: %s, pack_id=%d, res=0x%x\n", 1274 SCSI_LOG_TIMEOUT(4, printk("sg_cmd_done: %s, pack_id=%d, res=0x%x\n",
1349 sdp->disk->disk_name, srp->header.pack_id, (int) SRpnt->sr_result)); 1275 sdp->disk->disk_name, srp->header.pack_id, result));
1350 srp->header.resid = SCpnt->resid; 1276 srp->header.resid = resid;
1351 ms = jiffies_to_msecs(jiffies); 1277 ms = jiffies_to_msecs(jiffies);
1352 srp->header.duration = (ms > srp->header.duration) ? 1278 srp->header.duration = (ms > srp->header.duration) ?
1353 (ms - srp->header.duration) : 0; 1279 (ms - srp->header.duration) : 0;
1354 if (0 != SRpnt->sr_result) { 1280 if (0 != result) {
1355 struct scsi_sense_hdr sshdr; 1281 struct scsi_sense_hdr sshdr;
1356 1282
1357 memcpy(srp->sense_b, SRpnt->sr_sense_buffer, 1283 memcpy(srp->sense_b, sense, sizeof (srp->sense_b));
1358 sizeof (srp->sense_b)); 1284 srp->header.status = 0xff & result;
1359 srp->header.status = 0xff & SRpnt->sr_result; 1285 srp->header.masked_status = status_byte(result);
1360 srp->header.masked_status = status_byte(SRpnt->sr_result); 1286 srp->header.msg_status = msg_byte(result);
1361 srp->header.msg_status = msg_byte(SRpnt->sr_result); 1287 srp->header.host_status = host_byte(result);
1362 srp->header.host_status = host_byte(SRpnt->sr_result); 1288 srp->header.driver_status = driver_byte(result);
1363 srp->header.driver_status = driver_byte(SRpnt->sr_result);
1364 if ((sdp->sgdebug > 0) && 1289 if ((sdp->sgdebug > 0) &&
1365 ((CHECK_CONDITION == srp->header.masked_status) || 1290 ((CHECK_CONDITION == srp->header.masked_status) ||
1366 (COMMAND_TERMINATED == srp->header.masked_status))) 1291 (COMMAND_TERMINATED == srp->header.masked_status)))
1367 scsi_print_req_sense("sg_cmd_done", SRpnt); 1292 __scsi_print_sense("sg_cmd_done", sense,
1293 SCSI_SENSE_BUFFERSIZE);
1368 1294
1369 /* Following if statement is a patch supplied by Eric Youngdale */ 1295 /* Following if statement is a patch supplied by Eric Youngdale */
1370 if (driver_byte(SRpnt->sr_result) != 0 1296 if (driver_byte(result) != 0
1371 && scsi_command_normalize_sense(SCpnt, &sshdr) 1297 && scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE, &sshdr)
1372 && !scsi_sense_is_deferred(&sshdr) 1298 && !scsi_sense_is_deferred(&sshdr)
1373 && sshdr.sense_key == UNIT_ATTENTION 1299 && sshdr.sense_key == UNIT_ATTENTION
1374 && sdp->device->removable) { 1300 && sdp->device->removable) {
@@ -1379,8 +1305,6 @@ sg_cmd_done(Scsi_Cmnd * SCpnt)
1379 } 1305 }
1380 /* Rely on write phase to clean out srp status values, so no "else" */ 1306 /* Rely on write phase to clean out srp status values, so no "else" */
1381 1307
1382 scsi_release_request(SRpnt);
1383 SRpnt = NULL;
1384 if (sfp->closed) { /* whoops this fd already released, cleanup */ 1308 if (sfp->closed) { /* whoops this fd already released, cleanup */
1385 SCSI_LOG_TIMEOUT(1, printk("sg_cmd_done: already closed, freeing ...\n")); 1309 SCSI_LOG_TIMEOUT(1, printk("sg_cmd_done: already closed, freeing ...\n"));
1386 sg_finish_rem_req(srp); 1310 sg_finish_rem_req(srp);
@@ -1431,6 +1355,7 @@ static int sg_sysfs_valid = 0;
1431 1355
1432static int sg_alloc(struct gendisk *disk, struct scsi_device *scsidp) 1356static int sg_alloc(struct gendisk *disk, struct scsi_device *scsidp)
1433{ 1357{
1358 struct request_queue *q = scsidp->request_queue;
1434 Sg_device *sdp; 1359 Sg_device *sdp;
1435 unsigned long iflags; 1360 unsigned long iflags;
1436 void *old_sg_dev_arr = NULL; 1361 void *old_sg_dev_arr = NULL;
@@ -1473,7 +1398,7 @@ static int sg_alloc(struct gendisk *disk, struct scsi_device *scsidp)
1473 sdp->disk = disk; 1398 sdp->disk = disk;
1474 sdp->device = scsidp; 1399 sdp->device = scsidp;
1475 init_waitqueue_head(&sdp->o_excl_wait); 1400 init_waitqueue_head(&sdp->o_excl_wait);
1476 sdp->sg_tablesize = scsidp->host ? scsidp->host->sg_tablesize : 0; 1401 sdp->sg_tablesize = min(q->max_hw_segments, q->max_phys_segments);
1477 1402
1478 sg_nr_dev++; 1403 sg_nr_dev++;
1479 sg_dev_arr[k] = sdp; 1404 sg_dev_arr[k] = sdp;
@@ -1753,36 +1678,35 @@ sg_finish_rem_req(Sg_request * srp)
1753static int 1678static int
1754sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize) 1679sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
1755{ 1680{
1756 int ret_sz; 1681 int sg_bufflen = tablesize * sizeof(struct scatterlist);
1757 int elem_sz = sizeof (struct scatterlist); 1682 unsigned int gfp_flags = GFP_ATOMIC | __GFP_NOWARN;
1758 int sg_bufflen = tablesize * elem_sz;
1759 int mx_sc_elems = tablesize;
1760 1683
1761 schp->buffer = sg_page_malloc(sg_bufflen, sfp->low_dma, &ret_sz); 1684 /*
1685 * TODO: test without low_dma, we should not need it since
1686 * the block layer will bounce the buffer for us
1687 *
1688 * XXX(hch): we shouldn't need GFP_DMA for the actual S/G list.
1689 */
1690 if (sfp->low_dma)
1691 gfp_flags |= GFP_DMA;
1692 schp->buffer = kzalloc(sg_bufflen, gfp_flags);
1762 if (!schp->buffer) 1693 if (!schp->buffer)
1763 return -ENOMEM; 1694 return -ENOMEM;
1764 else if (ret_sz != sg_bufflen) {
1765 sg_bufflen = ret_sz;
1766 mx_sc_elems = sg_bufflen / elem_sz;
1767 }
1768 schp->sglist_len = sg_bufflen; 1695 schp->sglist_len = sg_bufflen;
1769 memset(schp->buffer, 0, sg_bufflen); 1696 return tablesize; /* number of scat_gath elements allocated */
1770 return mx_sc_elems; /* number of scat_gath elements allocated */
1771} 1697}
1772 1698
1773#ifdef SG_ALLOW_DIO_CODE 1699#ifdef SG_ALLOW_DIO_CODE
1774/* vvvvvvvv following code borrowed from st driver's direct IO vvvvvvvvv */ 1700/* vvvvvvvv following code borrowed from st driver's direct IO vvvvvvvvv */
1775 /* hopefully this generic code will moved to a library */ 1701 /* TODO: hopefully we can use the generic block layer code */
1776 1702
1777/* Pin down user pages and put them into a scatter gather list. Returns <= 0 if 1703/* Pin down user pages and put them into a scatter gather list. Returns <= 0 if
1778 - mapping of all pages not successful 1704 - mapping of all pages not successful
1779 - any page is above max_pfn
1780 (i.e., either completely successful or fails) 1705 (i.e., either completely successful or fails)
1781*/ 1706*/
1782static int 1707static int
1783st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages, 1708st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
1784 unsigned long uaddr, size_t count, int rw, 1709 unsigned long uaddr, size_t count, int rw)
1785 unsigned long max_pfn)
1786{ 1710{
1787 unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT; 1711 unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
1788 unsigned long start = uaddr >> PAGE_SHIFT; 1712 unsigned long start = uaddr >> PAGE_SHIFT;
@@ -1828,21 +1752,17 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
1828 * probably wrong function for rw==WRITE 1752 * probably wrong function for rw==WRITE
1829 */ 1753 */
1830 flush_dcache_page(pages[i]); 1754 flush_dcache_page(pages[i]);
1831 if (page_to_pfn(pages[i]) > max_pfn)
1832 goto out_unlock;
1833 /* ?? Is locking needed? I don't think so */ 1755 /* ?? Is locking needed? I don't think so */
1834 /* if (TestSetPageLocked(pages[i])) 1756 /* if (TestSetPageLocked(pages[i]))
1835 goto out_unlock; */ 1757 goto out_unlock; */
1836 } 1758 }
1837 1759
1838 /* Populate the scatter/gather list */ 1760 sgl[0].page = pages[0];
1839 sgl[0].page = pages[0];
1840 sgl[0].offset = uaddr & ~PAGE_MASK; 1761 sgl[0].offset = uaddr & ~PAGE_MASK;
1841 if (nr_pages > 1) { 1762 if (nr_pages > 1) {
1842 sgl[0].length = PAGE_SIZE - sgl[0].offset; 1763 sgl[0].length = PAGE_SIZE - sgl[0].offset;
1843 count -= sgl[0].length; 1764 count -= sgl[0].length;
1844 for (i=1; i < nr_pages ; i++) { 1765 for (i=1; i < nr_pages ; i++) {
1845 sgl[i].offset = 0;
1846 sgl[i].page = pages[i]; 1766 sgl[i].page = pages[i];
1847 sgl[i].length = count < PAGE_SIZE ? count : PAGE_SIZE; 1767 sgl[i].length = count < PAGE_SIZE ? count : PAGE_SIZE;
1848 count -= PAGE_SIZE; 1768 count -= PAGE_SIZE;
@@ -1855,10 +1775,6 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
1855 kfree(pages); 1775 kfree(pages);
1856 return nr_pages; 1776 return nr_pages;
1857 1777
1858 out_unlock:
1859 /* for (j=0; j < i; j++)
1860 unlock_page(pages[j]); */
1861 res = 0;
1862 out_unmap: 1778 out_unmap:
1863 if (res > 0) { 1779 if (res > 0) {
1864 for (j=0; j < res; j++) 1780 for (j=0; j < res; j++)
@@ -1904,20 +1820,20 @@ sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len)
1904 sg_io_hdr_t *hp = &srp->header; 1820 sg_io_hdr_t *hp = &srp->header;
1905 Sg_scatter_hold *schp = &srp->data; 1821 Sg_scatter_hold *schp = &srp->data;
1906 int sg_tablesize = sfp->parentdp->sg_tablesize; 1822 int sg_tablesize = sfp->parentdp->sg_tablesize;
1907 struct scatterlist *sgl;
1908 int mx_sc_elems, res; 1823 int mx_sc_elems, res;
1909 struct scsi_device *sdev = sfp->parentdp->device; 1824 struct scsi_device *sdev = sfp->parentdp->device;
1910 1825
1911 if (((unsigned long)hp->dxferp & 1826 if (((unsigned long)hp->dxferp &
1912 queue_dma_alignment(sdev->request_queue)) != 0) 1827 queue_dma_alignment(sdev->request_queue)) != 0)
1913 return 1; 1828 return 1;
1829
1914 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize); 1830 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize);
1915 if (mx_sc_elems <= 0) { 1831 if (mx_sc_elems <= 0) {
1916 return 1; 1832 return 1;
1917 } 1833 }
1918 sgl = (struct scatterlist *)schp->buffer; 1834 res = st_map_user_pages(schp->buffer, mx_sc_elems,
1919 res = st_map_user_pages(sgl, mx_sc_elems, (unsigned long)hp->dxferp, dxfer_len, 1835 (unsigned long)hp->dxferp, dxfer_len,
1920 (SG_DXFER_TO_DEV == hp->dxfer_direction) ? 1 : 0, ULONG_MAX); 1836 (SG_DXFER_TO_DEV == hp->dxfer_direction) ? 1 : 0);
1921 if (res <= 0) 1837 if (res <= 0)
1922 return 1; 1838 return 1;
1923 schp->k_use_sg = res; 1839 schp->k_use_sg = res;
@@ -1932,9 +1848,11 @@ sg_build_direct(Sg_request * srp, Sg_fd * sfp, int dxfer_len)
1932static int 1848static int
1933sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size) 1849sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1934{ 1850{
1935 int ret_sz; 1851 struct scatterlist *sg;
1852 int ret_sz = 0, k, rem_sz, num, mx_sc_elems;
1853 int sg_tablesize = sfp->parentdp->sg_tablesize;
1936 int blk_size = buff_size; 1854 int blk_size = buff_size;
1937 unsigned char *p = NULL; 1855 struct page *p = NULL;
1938 1856
1939 if ((blk_size < 0) || (!sfp)) 1857 if ((blk_size < 0) || (!sfp))
1940 return -EFAULT; 1858 return -EFAULT;
@@ -1944,59 +1862,35 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1944 blk_size = (blk_size + SG_SECTOR_MSK) & (~SG_SECTOR_MSK); 1862 blk_size = (blk_size + SG_SECTOR_MSK) & (~SG_SECTOR_MSK);
1945 SCSI_LOG_TIMEOUT(4, printk("sg_build_indirect: buff_size=%d, blk_size=%d\n", 1863 SCSI_LOG_TIMEOUT(4, printk("sg_build_indirect: buff_size=%d, blk_size=%d\n",
1946 buff_size, blk_size)); 1864 buff_size, blk_size));
1947 if (blk_size <= SG_SCATTER_SZ) { 1865
1948 p = sg_page_malloc(blk_size, sfp->low_dma, &ret_sz); 1866 /* N.B. ret_sz carried into this block ... */
1949 if (!p) 1867 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize);
1950 return -ENOMEM; 1868 if (mx_sc_elems < 0)
1951 if (blk_size == ret_sz) { /* got it on the first attempt */ 1869 return mx_sc_elems; /* most likely -ENOMEM */
1952 schp->k_use_sg = 0; 1870
1953 schp->buffer = p; 1871 for (k = 0, sg = schp->buffer, rem_sz = blk_size;
1954 schp->bufflen = blk_size; 1872 (rem_sz > 0) && (k < mx_sc_elems);
1955 schp->b_malloc_len = blk_size; 1873 ++k, rem_sz -= ret_sz, ++sg) {
1956 return 0; 1874
1957 } 1875 num = (rem_sz > SG_SCATTER_SZ) ? SG_SCATTER_SZ : rem_sz;
1958 } else { 1876 p = sg_page_malloc(num, sfp->low_dma, &ret_sz);
1959 p = sg_page_malloc(SG_SCATTER_SZ, sfp->low_dma, &ret_sz);
1960 if (!p) 1877 if (!p)
1961 return -ENOMEM; 1878 return -ENOMEM;
1962 } 1879
1963/* Want some local declarations, so start new block ... */ 1880 sg->page = p;
1964 { /* lets try and build a scatter gather list */ 1881 sg->length = ret_sz;
1965 struct scatterlist *sclp; 1882
1966 int k, rem_sz, num; 1883 SCSI_LOG_TIMEOUT(5, printk("sg_build_build: k=%d, a=0x%p, len=%d\n",
1967 int mx_sc_elems; 1884 k, p, ret_sz));
1968 int sg_tablesize = sfp->parentdp->sg_tablesize; 1885 } /* end of for loop */
1969 int first = 1; 1886
1970 1887 schp->k_use_sg = k;
1971 /* N.B. ret_sz carried into this block ... */ 1888 SCSI_LOG_TIMEOUT(5, printk("sg_build_indirect: k_use_sg=%d, rem_sz=%d\n", k, rem_sz));
1972 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize); 1889
1973 if (mx_sc_elems < 0) 1890 schp->bufflen = blk_size;
1974 return mx_sc_elems; /* most likely -ENOMEM */ 1891 if (rem_sz > 0) /* must have failed */
1975 1892 return -ENOMEM;
1976 for (k = 0, sclp = schp->buffer, rem_sz = blk_size; 1893
1977 (rem_sz > 0) && (k < mx_sc_elems);
1978 ++k, rem_sz -= ret_sz, ++sclp) {
1979 if (first)
1980 first = 0;
1981 else {
1982 num =
1983 (rem_sz >
1984 SG_SCATTER_SZ) ? SG_SCATTER_SZ : rem_sz;
1985 p = sg_page_malloc(num, sfp->low_dma, &ret_sz);
1986 if (!p)
1987 break;
1988 }
1989 sg_set_buf(sclp, p, ret_sz);
1990
1991 SCSI_LOG_TIMEOUT(5, printk("sg_build_build: k=%d, a=0x%p, len=%d\n",
1992 k, sg_scatg2virt(sclp), ret_sz));
1993 } /* end of for loop */
1994 schp->k_use_sg = k;
1995 SCSI_LOG_TIMEOUT(5, printk("sg_build_indirect: k_use_sg=%d, rem_sz=%d\n", k, rem_sz));
1996 schp->bufflen = blk_size;
1997 if (rem_sz > 0) /* must have failed */
1998 return -ENOMEM;
1999 }
2000 return 0; 1894 return 0;
2001} 1895}
2002 1896
@@ -2005,6 +1899,7 @@ sg_write_xfer(Sg_request * srp)
2005{ 1899{
2006 sg_io_hdr_t *hp = &srp->header; 1900 sg_io_hdr_t *hp = &srp->header;
2007 Sg_scatter_hold *schp = &srp->data; 1901 Sg_scatter_hold *schp = &srp->data;
1902 struct scatterlist *sg = schp->buffer;
2008 int num_xfer = 0; 1903 int num_xfer = 0;
2009 int j, k, onum, usglen, ksglen, res; 1904 int j, k, onum, usglen, ksglen, res;
2010 int iovec_count = (int) hp->iovec_count; 1905 int iovec_count = (int) hp->iovec_count;
@@ -2033,63 +1928,45 @@ sg_write_xfer(Sg_request * srp)
2033 } else 1928 } else
2034 onum = 1; 1929 onum = 1;
2035 1930
2036 if (0 == schp->k_use_sg) { /* kernel has single buffer */ 1931 ksglen = sg->length;
2037 for (j = 0, p = schp->buffer; j < onum; ++j) { 1932 p = page_address(sg->page);
2038 res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up); 1933 for (j = 0, k = 0; j < onum; ++j) {
2039 if (res) 1934 res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up);
2040 return res; 1935 if (res)
2041 usglen = (num_xfer > usglen) ? usglen : num_xfer; 1936 return res;
2042 if (__copy_from_user(p, up, usglen)) 1937
2043 return -EFAULT; 1938 for (; p; ++sg, ksglen = sg->length,
2044 p += usglen; 1939 p = page_address(sg->page)) {
2045 num_xfer -= usglen; 1940 if (usglen <= 0)
2046 if (num_xfer <= 0) 1941 break;
2047 return 0; 1942 if (ksglen > usglen) {
2048 } 1943 if (usglen >= num_xfer) {
2049 } else { /* kernel using scatter gather list */ 1944 if (__copy_from_user(p, up, num_xfer))
2050 struct scatterlist *sclp = (struct scatterlist *) schp->buffer;
2051
2052 ksglen = (int) sclp->length;
2053 p = sg_scatg2virt(sclp);
2054 for (j = 0, k = 0; j < onum; ++j) {
2055 res = sg_u_iovec(hp, iovec_count, j, 1, &usglen, &up);
2056 if (res)
2057 return res;
2058
2059 for (; p; ++sclp, ksglen = (int) sclp->length,
2060 p = sg_scatg2virt(sclp)) {
2061 if (usglen <= 0)
2062 break;
2063 if (ksglen > usglen) {
2064 if (usglen >= num_xfer) {
2065 if (__copy_from_user
2066 (p, up, num_xfer))
2067 return -EFAULT;
2068 return 0;
2069 }
2070 if (__copy_from_user(p, up, usglen))
2071 return -EFAULT;
2072 p += usglen;
2073 ksglen -= usglen;
2074 break;
2075 } else {
2076 if (ksglen >= num_xfer) {
2077 if (__copy_from_user
2078 (p, up, num_xfer))
2079 return -EFAULT;
2080 return 0;
2081 }
2082 if (__copy_from_user(p, up, ksglen))
2083 return -EFAULT; 1945 return -EFAULT;
2084 up += ksglen; 1946 return 0;
2085 usglen -= ksglen;
2086 } 1947 }
2087 ++k; 1948 if (__copy_from_user(p, up, usglen))
2088 if (k >= schp->k_use_sg) 1949 return -EFAULT;
1950 p += usglen;
1951 ksglen -= usglen;
1952 break;
1953 } else {
1954 if (ksglen >= num_xfer) {
1955 if (__copy_from_user(p, up, num_xfer))
1956 return -EFAULT;
2089 return 0; 1957 return 0;
1958 }
1959 if (__copy_from_user(p, up, ksglen))
1960 return -EFAULT;
1961 up += ksglen;
1962 usglen -= ksglen;
2090 } 1963 }
1964 ++k;
1965 if (k >= schp->k_use_sg)
1966 return 0;
2091 } 1967 }
2092 } 1968 }
1969
2093 return 0; 1970 return 0;
2094} 1971}
2095 1972
@@ -2127,29 +2004,25 @@ sg_remove_scat(Sg_scatter_hold * schp)
2127{ 2004{
2128 SCSI_LOG_TIMEOUT(4, printk("sg_remove_scat: k_use_sg=%d\n", schp->k_use_sg)); 2005 SCSI_LOG_TIMEOUT(4, printk("sg_remove_scat: k_use_sg=%d\n", schp->k_use_sg));
2129 if (schp->buffer && (schp->sglist_len > 0)) { 2006 if (schp->buffer && (schp->sglist_len > 0)) {
2130 struct scatterlist *sclp = (struct scatterlist *) schp->buffer; 2007 struct scatterlist *sg = schp->buffer;
2131 2008
2132 if (schp->dio_in_use) { 2009 if (schp->dio_in_use) {
2133#ifdef SG_ALLOW_DIO_CODE 2010#ifdef SG_ALLOW_DIO_CODE
2134 st_unmap_user_pages(sclp, schp->k_use_sg, TRUE); 2011 st_unmap_user_pages(sg, schp->k_use_sg, TRUE);
2135#endif 2012#endif
2136 } else { 2013 } else {
2137 int k; 2014 int k;
2138 2015
2139 for (k = 0; (k < schp->k_use_sg) && sg_scatg2virt(sclp); 2016 for (k = 0; (k < schp->k_use_sg) && sg->page;
2140 ++k, ++sclp) { 2017 ++k, ++sg) {
2141 SCSI_LOG_TIMEOUT(5, printk( 2018 SCSI_LOG_TIMEOUT(5, printk(
2142 "sg_remove_scat: k=%d, a=0x%p, len=%d\n", 2019 "sg_remove_scat: k=%d, a=0x%p, len=%d\n",
2143 k, sg_scatg2virt(sclp), sclp->length)); 2020 k, sg->page, sg->length));
2144 sg_page_free(sg_scatg2virt(sclp), sclp->length); 2021 sg_page_free(sg->page, sg->length);
2145 sclp->page = NULL;
2146 sclp->offset = 0;
2147 sclp->length = 0;
2148 } 2022 }
2149 } 2023 }
2150 sg_page_free(schp->buffer, schp->sglist_len); 2024 kfree(schp->buffer);
2151 } else if (schp->buffer) 2025 }
2152 sg_page_free(schp->buffer, schp->b_malloc_len);
2153 memset(schp, 0, sizeof (*schp)); 2026 memset(schp, 0, sizeof (*schp));
2154} 2027}
2155 2028
@@ -2158,6 +2031,7 @@ sg_read_xfer(Sg_request * srp)
2158{ 2031{
2159 sg_io_hdr_t *hp = &srp->header; 2032 sg_io_hdr_t *hp = &srp->header;
2160 Sg_scatter_hold *schp = &srp->data; 2033 Sg_scatter_hold *schp = &srp->data;
2034 struct scatterlist *sg = schp->buffer;
2161 int num_xfer = 0; 2035 int num_xfer = 0;
2162 int j, k, onum, usglen, ksglen, res; 2036 int j, k, onum, usglen, ksglen, res;
2163 int iovec_count = (int) hp->iovec_count; 2037 int iovec_count = (int) hp->iovec_count;
@@ -2186,63 +2060,45 @@ sg_read_xfer(Sg_request * srp)
2186 } else 2060 } else
2187 onum = 1; 2061 onum = 1;
2188 2062
2189 if (0 == schp->k_use_sg) { /* kernel has single buffer */ 2063 p = page_address(sg->page);
2190 for (j = 0, p = schp->buffer; j < onum; ++j) { 2064 ksglen = sg->length;
2191 res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up); 2065 for (j = 0, k = 0; j < onum; ++j) {
2192 if (res) 2066 res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up);
2193 return res; 2067 if (res)
2194 usglen = (num_xfer > usglen) ? usglen : num_xfer; 2068 return res;
2195 if (__copy_to_user(up, p, usglen)) 2069
2196 return -EFAULT; 2070 for (; p; ++sg, ksglen = sg->length,
2197 p += usglen; 2071 p = page_address(sg->page)) {
2198 num_xfer -= usglen; 2072 if (usglen <= 0)
2199 if (num_xfer <= 0) 2073 break;
2200 return 0; 2074 if (ksglen > usglen) {
2201 } 2075 if (usglen >= num_xfer) {
2202 } else { /* kernel using scatter gather list */ 2076 if (__copy_to_user(up, p, num_xfer))
2203 struct scatterlist *sclp = (struct scatterlist *) schp->buffer;
2204
2205 ksglen = (int) sclp->length;
2206 p = sg_scatg2virt(sclp);
2207 for (j = 0, k = 0; j < onum; ++j) {
2208 res = sg_u_iovec(hp, iovec_count, j, 0, &usglen, &up);
2209 if (res)
2210 return res;
2211
2212 for (; p; ++sclp, ksglen = (int) sclp->length,
2213 p = sg_scatg2virt(sclp)) {
2214 if (usglen <= 0)
2215 break;
2216 if (ksglen > usglen) {
2217 if (usglen >= num_xfer) {
2218 if (__copy_to_user
2219 (up, p, num_xfer))
2220 return -EFAULT;
2221 return 0;
2222 }
2223 if (__copy_to_user(up, p, usglen))
2224 return -EFAULT;
2225 p += usglen;
2226 ksglen -= usglen;
2227 break;
2228 } else {
2229 if (ksglen >= num_xfer) {
2230 if (__copy_to_user
2231 (up, p, num_xfer))
2232 return -EFAULT;
2233 return 0;
2234 }
2235 if (__copy_to_user(up, p, ksglen))
2236 return -EFAULT; 2077 return -EFAULT;
2237 up += ksglen; 2078 return 0;
2238 usglen -= ksglen;
2239 } 2079 }
2240 ++k; 2080 if (__copy_to_user(up, p, usglen))
2241 if (k >= schp->k_use_sg) 2081 return -EFAULT;
2082 p += usglen;
2083 ksglen -= usglen;
2084 break;
2085 } else {
2086 if (ksglen >= num_xfer) {
2087 if (__copy_to_user(up, p, num_xfer))
2088 return -EFAULT;
2242 return 0; 2089 return 0;
2090 }
2091 if (__copy_to_user(up, p, ksglen))
2092 return -EFAULT;
2093 up += ksglen;
2094 usglen -= ksglen;
2243 } 2095 }
2096 ++k;
2097 if (k >= schp->k_use_sg)
2098 return 0;
2244 } 2099 }
2245 } 2100 }
2101
2246 return 0; 2102 return 0;
2247} 2103}
2248 2104
@@ -2250,37 +2106,32 @@ static int
2250sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer) 2106sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer)
2251{ 2107{
2252 Sg_scatter_hold *schp = &srp->data; 2108 Sg_scatter_hold *schp = &srp->data;
2109 struct scatterlist *sg = schp->buffer;
2110 int k, num;
2253 2111
2254 SCSI_LOG_TIMEOUT(4, printk("sg_read_oxfer: num_read_xfer=%d\n", 2112 SCSI_LOG_TIMEOUT(4, printk("sg_read_oxfer: num_read_xfer=%d\n",
2255 num_read_xfer)); 2113 num_read_xfer));
2256 if ((!outp) || (num_read_xfer <= 0)) 2114 if ((!outp) || (num_read_xfer <= 0))
2257 return 0; 2115 return 0;
2258 if (schp->k_use_sg > 0) { 2116
2259 int k, num; 2117 for (k = 0; (k < schp->k_use_sg) && sg->page; ++k, ++sg) {
2260 struct scatterlist *sclp = (struct scatterlist *) schp->buffer; 2118 num = sg->length;
2261 2119 if (num > num_read_xfer) {
2262 for (k = 0; (k < schp->k_use_sg) && sg_scatg2virt(sclp); 2120 if (__copy_to_user(outp, page_address(sg->page),
2263 ++k, ++sclp) { 2121 num_read_xfer))
2264 num = (int) sclp->length; 2122 return -EFAULT;
2265 if (num > num_read_xfer) { 2123 break;
2266 if (__copy_to_user 2124 } else {
2267 (outp, sg_scatg2virt(sclp), num_read_xfer)) 2125 if (__copy_to_user(outp, page_address(sg->page),
2268 return -EFAULT; 2126 num))
2127 return -EFAULT;
2128 num_read_xfer -= num;
2129 if (num_read_xfer <= 0)
2269 break; 2130 break;
2270 } else { 2131 outp += num;
2271 if (__copy_to_user
2272 (outp, sg_scatg2virt(sclp), num))
2273 return -EFAULT;
2274 num_read_xfer -= num;
2275 if (num_read_xfer <= 0)
2276 break;
2277 outp += num;
2278 }
2279 } 2132 }
2280 } else {
2281 if (__copy_to_user(outp, schp->buffer, num_read_xfer))
2282 return -EFAULT;
2283 } 2133 }
2134
2284 return 0; 2135 return 0;
2285} 2136}
2286 2137
@@ -2306,44 +2157,31 @@ sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
2306{ 2157{
2307 Sg_scatter_hold *req_schp = &srp->data; 2158 Sg_scatter_hold *req_schp = &srp->data;
2308 Sg_scatter_hold *rsv_schp = &sfp->reserve; 2159 Sg_scatter_hold *rsv_schp = &sfp->reserve;
2160 struct scatterlist *sg = rsv_schp->buffer;
2161 int k, num, rem;
2309 2162
2310 srp->res_used = 1; 2163 srp->res_used = 1;
2311 SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size)); 2164 SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size));
2312 size = (size + 1) & (~1); /* round to even for aha1542 */ 2165 rem = size = (size + 1) & (~1); /* round to even for aha1542 */
2313 if (rsv_schp->k_use_sg > 0) { 2166
2314 int k, num; 2167 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) {
2315 int rem = size; 2168 num = sg->length;
2316 struct scatterlist *sclp = 2169 if (rem <= num) {
2317 (struct scatterlist *) rsv_schp->buffer; 2170 sfp->save_scat_len = num;
2318 2171 sg->length = rem;
2319 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sclp) { 2172 req_schp->k_use_sg = k + 1;
2320 num = (int) sclp->length; 2173 req_schp->sglist_len = rsv_schp->sglist_len;
2321 if (rem <= num) { 2174 req_schp->buffer = rsv_schp->buffer;
2322 if (0 == k) { 2175
2323 req_schp->k_use_sg = 0; 2176 req_schp->bufflen = size;
2324 req_schp->buffer = sg_scatg2virt(sclp); 2177 req_schp->b_malloc_len = rsv_schp->b_malloc_len;
2325 } else { 2178 break;
2326 sfp->save_scat_len = num; 2179 } else
2327 sclp->length = (unsigned) rem; 2180 rem -= num;
2328 req_schp->k_use_sg = k + 1;
2329 req_schp->sglist_len =
2330 rsv_schp->sglist_len;
2331 req_schp->buffer = rsv_schp->buffer;
2332 }
2333 req_schp->bufflen = size;
2334 req_schp->b_malloc_len = rsv_schp->b_malloc_len;
2335 break;
2336 } else
2337 rem -= num;
2338 }
2339 if (k >= rsv_schp->k_use_sg)
2340 SCSI_LOG_TIMEOUT(1, printk("sg_link_reserve: BAD size\n"));
2341 } else {
2342 req_schp->k_use_sg = 0;
2343 req_schp->bufflen = size;
2344 req_schp->buffer = rsv_schp->buffer;
2345 req_schp->b_malloc_len = rsv_schp->b_malloc_len;
2346 } 2181 }
2182
2183 if (k >= rsv_schp->k_use_sg)
2184 SCSI_LOG_TIMEOUT(1, printk("sg_link_reserve: BAD size\n"));
2347} 2185}
2348 2186
2349static void 2187static void
@@ -2355,11 +2193,10 @@ sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp)
2355 SCSI_LOG_TIMEOUT(4, printk("sg_unlink_reserve: req->k_use_sg=%d\n", 2193 SCSI_LOG_TIMEOUT(4, printk("sg_unlink_reserve: req->k_use_sg=%d\n",
2356 (int) req_schp->k_use_sg)); 2194 (int) req_schp->k_use_sg));
2357 if ((rsv_schp->k_use_sg > 0) && (req_schp->k_use_sg > 0)) { 2195 if ((rsv_schp->k_use_sg > 0) && (req_schp->k_use_sg > 0)) {
2358 struct scatterlist *sclp = 2196 struct scatterlist *sg = rsv_schp->buffer;
2359 (struct scatterlist *) rsv_schp->buffer;
2360 2197
2361 if (sfp->save_scat_len > 0) 2198 if (sfp->save_scat_len > 0)
2362 (sclp + (req_schp->k_use_sg - 1))->length = 2199 (sg + (req_schp->k_use_sg - 1))->length =
2363 (unsigned) sfp->save_scat_len; 2200 (unsigned) sfp->save_scat_len;
2364 else 2201 else
2365 SCSI_LOG_TIMEOUT(1, printk ("sg_unlink_reserve: BAD save_scat_len\n")); 2202 SCSI_LOG_TIMEOUT(1, printk ("sg_unlink_reserve: BAD save_scat_len\n"));
@@ -2445,7 +2282,6 @@ sg_add_request(Sg_fd * sfp)
2445 if (resp) { 2282 if (resp) {
2446 resp->nextrp = NULL; 2283 resp->nextrp = NULL;
2447 resp->header.duration = jiffies_to_msecs(jiffies); 2284 resp->header.duration = jiffies_to_msecs(jiffies);
2448 resp->my_cmdp = NULL;
2449 } 2285 }
2450 write_unlock_irqrestore(&sfp->rq_list_lock, iflags); 2286 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2451 return resp; 2287 return resp;
@@ -2463,8 +2299,6 @@ sg_remove_request(Sg_fd * sfp, Sg_request * srp)
2463 if ((!sfp) || (!srp) || (!sfp->headrp)) 2299 if ((!sfp) || (!srp) || (!sfp->headrp))
2464 return res; 2300 return res;
2465 write_lock_irqsave(&sfp->rq_list_lock, iflags); 2301 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2466 if (srp->my_cmdp)
2467 srp->my_cmdp->upper_private_data = NULL;
2468 prev_rp = sfp->headrp; 2302 prev_rp = sfp->headrp;
2469 if (srp == prev_rp) { 2303 if (srp == prev_rp) {
2470 sfp->headrp = prev_rp->nextrp; 2304 sfp->headrp = prev_rp->nextrp;
@@ -2507,10 +2341,10 @@ sg_add_sfp(Sg_device * sdp, int dev)
2507 Sg_fd *sfp; 2341 Sg_fd *sfp;
2508 unsigned long iflags; 2342 unsigned long iflags;
2509 2343
2510 sfp = (Sg_fd *) sg_page_malloc(sizeof (Sg_fd), 0, NULL); 2344 sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
2511 if (!sfp) 2345 if (!sfp)
2512 return NULL; 2346 return NULL;
2513 memset(sfp, 0, sizeof (Sg_fd)); 2347
2514 init_waitqueue_head(&sfp->read_wait); 2348 init_waitqueue_head(&sfp->read_wait);
2515 rwlock_init(&sfp->rq_list_lock); 2349 rwlock_init(&sfp->rq_list_lock);
2516 2350
@@ -2567,7 +2401,7 @@ __sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp)
2567 } 2401 }
2568 sfp->parentdp = NULL; 2402 sfp->parentdp = NULL;
2569 SCSI_LOG_TIMEOUT(6, printk("__sg_remove_sfp: sfp=0x%p\n", sfp)); 2403 SCSI_LOG_TIMEOUT(6, printk("__sg_remove_sfp: sfp=0x%p\n", sfp));
2570 sg_page_free((char *) sfp, sizeof (Sg_fd)); 2404 kfree(sfp);
2571} 2405}
2572 2406
2573/* Returns 0 in normal case, 1 when detached and sdp object removed */ 2407/* Returns 0 in normal case, 1 when detached and sdp object removed */
@@ -2632,10 +2466,10 @@ sg_res_in_use(Sg_fd * sfp)
2632} 2466}
2633 2467
2634/* If retSzp==NULL want exact size or fail */ 2468/* If retSzp==NULL want exact size or fail */
2635static char * 2469static struct page *
2636sg_page_malloc(int rqSz, int lowDma, int *retSzp) 2470sg_page_malloc(int rqSz, int lowDma, int *retSzp)
2637{ 2471{
2638 char *resp = NULL; 2472 struct page *resp = NULL;
2639 gfp_t page_mask; 2473 gfp_t page_mask;
2640 int order, a_size; 2474 int order, a_size;
2641 int resSz = rqSz; 2475 int resSz = rqSz;
@@ -2650,16 +2484,16 @@ sg_page_malloc(int rqSz, int lowDma, int *retSzp)
2650 2484
2651 for (order = 0, a_size = PAGE_SIZE; a_size < rqSz; 2485 for (order = 0, a_size = PAGE_SIZE; a_size < rqSz;
2652 order++, a_size <<= 1) ; 2486 order++, a_size <<= 1) ;
2653 resp = (char *) __get_free_pages(page_mask, order); 2487 resp = alloc_pages(page_mask, order);
2654 while ((!resp) && order && retSzp) { 2488 while ((!resp) && order && retSzp) {
2655 --order; 2489 --order;
2656 a_size >>= 1; /* divide by 2, until PAGE_SIZE */ 2490 a_size >>= 1; /* divide by 2, until PAGE_SIZE */
2657 resp = (char *) __get_free_pages(page_mask, order); /* try half */ 2491 resp = alloc_pages(page_mask, order); /* try half */
2658 resSz = a_size; 2492 resSz = a_size;
2659 } 2493 }
2660 if (resp) { 2494 if (resp) {
2661 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO)) 2495 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
2662 memset(resp, 0, resSz); 2496 memset(page_address(resp), 0, resSz);
2663 if (retSzp) 2497 if (retSzp)
2664 *retSzp = resSz; 2498 *retSzp = resSz;
2665 } 2499 }
@@ -2667,15 +2501,15 @@ sg_page_malloc(int rqSz, int lowDma, int *retSzp)
2667} 2501}
2668 2502
2669static void 2503static void
2670sg_page_free(char *buff, int size) 2504sg_page_free(struct page *page, int size)
2671{ 2505{
2672 int order, a_size; 2506 int order, a_size;
2673 2507
2674 if (!buff) 2508 if (!page)
2675 return; 2509 return;
2676 for (order = 0, a_size = PAGE_SIZE; a_size < size; 2510 for (order = 0, a_size = PAGE_SIZE; a_size < size;
2677 order++, a_size <<= 1) ; 2511 order++, a_size <<= 1) ;
2678 free_pages((unsigned long) buff, order); 2512 __free_pages(page, order);
2679} 2513}
2680 2514
2681#ifndef MAINTENANCE_IN_CMD 2515#ifndef MAINTENANCE_IN_CMD
@@ -3067,13 +2901,11 @@ static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp)
3067 cp = " "; 2901 cp = " ";
3068 } 2902 }
3069 seq_printf(s, cp); 2903 seq_printf(s, cp);
3070 blen = srp->my_cmdp ? 2904 blen = srp->data.bufflen;
3071 srp->my_cmdp->sr_bufflen : srp->data.bufflen; 2905 usg = srp->data.k_use_sg;
3072 usg = srp->my_cmdp ?
3073 srp->my_cmdp->sr_use_sg : srp->data.k_use_sg;
3074 seq_printf(s, srp->done ? 2906 seq_printf(s, srp->done ?
3075 ((1 == srp->done) ? "rcv:" : "fin:") 2907 ((1 == srp->done) ? "rcv:" : "fin:")
3076 : (srp->my_cmdp ? "act:" : "prior:")); 2908 : "act:");
3077 seq_printf(s, " id=%d blen=%d", 2909 seq_printf(s, " id=%d blen=%d",
3078 srp->header.pack_id, blen); 2910 srp->header.pack_id, blen);
3079 if (srp->done) 2911 if (srp->done)
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index fb4012b5c188..997f8e30509b 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -44,6 +44,7 @@
44#include <linux/interrupt.h> 44#include <linux/interrupt.h>
45#include <linux/init.h> 45#include <linux/init.h>
46#include <linux/blkdev.h> 46#include <linux/blkdev.h>
47#include <linux/mutex.h>
47#include <asm/uaccess.h> 48#include <asm/uaccess.h>
48 49
49#include <scsi/scsi.h> 50#include <scsi/scsi.h>
@@ -90,7 +91,7 @@ static DEFINE_SPINLOCK(sr_index_lock);
90/* This semaphore is used to mediate the 0->1 reference get in the 91/* This semaphore is used to mediate the 0->1 reference get in the
91 * face of object destruction (i.e. we can't allow a get on an 92 * face of object destruction (i.e. we can't allow a get on an
92 * object after last put) */ 93 * object after last put) */
93static DECLARE_MUTEX(sr_ref_sem); 94static DEFINE_MUTEX(sr_ref_mutex);
94 95
95static int sr_open(struct cdrom_device_info *, int); 96static int sr_open(struct cdrom_device_info *, int);
96static void sr_release(struct cdrom_device_info *); 97static void sr_release(struct cdrom_device_info *);
@@ -133,7 +134,7 @@ static inline struct scsi_cd *scsi_cd_get(struct gendisk *disk)
133{ 134{
134 struct scsi_cd *cd = NULL; 135 struct scsi_cd *cd = NULL;
135 136
136 down(&sr_ref_sem); 137 mutex_lock(&sr_ref_mutex);
137 if (disk->private_data == NULL) 138 if (disk->private_data == NULL)
138 goto out; 139 goto out;
139 cd = scsi_cd(disk); 140 cd = scsi_cd(disk);
@@ -146,18 +147,18 @@ static inline struct scsi_cd *scsi_cd_get(struct gendisk *disk)
146 kref_put(&cd->kref, sr_kref_release); 147 kref_put(&cd->kref, sr_kref_release);
147 cd = NULL; 148 cd = NULL;
148 out: 149 out:
149 up(&sr_ref_sem); 150 mutex_unlock(&sr_ref_mutex);
150 return cd; 151 return cd;
151} 152}
152 153
153static inline void scsi_cd_put(struct scsi_cd *cd) 154static void scsi_cd_put(struct scsi_cd *cd)
154{ 155{
155 struct scsi_device *sdev = cd->device; 156 struct scsi_device *sdev = cd->device;
156 157
157 down(&sr_ref_sem); 158 mutex_lock(&sr_ref_mutex);
158 kref_put(&cd->kref, sr_kref_release); 159 kref_put(&cd->kref, sr_kref_release);
159 scsi_device_put(sdev); 160 scsi_device_put(sdev);
160 up(&sr_ref_sem); 161 mutex_unlock(&sr_ref_mutex);
161} 162}
162 163
163/* 164/*
@@ -237,8 +238,6 @@ static void rw_intr(struct scsi_cmnd * SCpnt)
237 case ILLEGAL_REQUEST: 238 case ILLEGAL_REQUEST:
238 if (!(SCpnt->sense_buffer[0] & 0x90)) 239 if (!(SCpnt->sense_buffer[0] & 0x90))
239 break; 240 break;
240 if (!blk_fs_request(SCpnt->request))
241 break;
242 error_sector = (SCpnt->sense_buffer[3] << 24) | 241 error_sector = (SCpnt->sense_buffer[3] << 24) |
243 (SCpnt->sense_buffer[4] << 16) | 242 (SCpnt->sense_buffer[4] << 16) |
244 (SCpnt->sense_buffer[5] << 8) | 243 (SCpnt->sense_buffer[5] << 8) |
@@ -317,23 +316,6 @@ static int sr_init_command(struct scsi_cmnd * SCpnt)
317 } 316 }
318 317
319 /* 318 /*
320 * these are already setup, just copy cdb basically
321 */
322 if (SCpnt->request->flags & REQ_BLOCK_PC) {
323 scsi_setup_blk_pc_cmnd(SCpnt, MAX_RETRIES);
324
325 if (SCpnt->timeout_per_command)
326 timeout = SCpnt->timeout_per_command;
327
328 goto queue;
329 }
330
331 if (!(SCpnt->request->flags & REQ_CMD)) {
332 blk_dump_rq_flags(SCpnt->request, "sr unsup command");
333 return 0;
334 }
335
336 /*
337 * we do lazy blocksize switching (when reading XA sectors, 319 * we do lazy blocksize switching (when reading XA sectors,
338 * see CDROMREADMODE2 ioctl) 320 * see CDROMREADMODE2 ioctl)
339 */ 321 */
@@ -421,8 +403,6 @@ static int sr_init_command(struct scsi_cmnd * SCpnt)
421 */ 403 */
422 SCpnt->transfersize = cd->device->sector_size; 404 SCpnt->transfersize = cd->device->sector_size;
423 SCpnt->underflow = this_count << 9; 405 SCpnt->underflow = this_count << 9;
424
425queue:
426 SCpnt->allowed = MAX_RETRIES; 406 SCpnt->allowed = MAX_RETRIES;
427 SCpnt->timeout_per_command = timeout; 407 SCpnt->timeout_per_command = timeout;
428 408
@@ -716,7 +696,7 @@ static void get_capabilities(struct scsi_cd *cd)
716 unsigned int the_result; 696 unsigned int the_result;
717 int retries, rc, n; 697 int retries, rc, n;
718 698
719 static char *loadmech[] = 699 static const char *loadmech[] =
720 { 700 {
721 "caddy", 701 "caddy",
722 "tray", 702 "tray",
@@ -762,8 +742,9 @@ static void get_capabilities(struct scsi_cd *cd)
762 /* failed, drive doesn't have capabilities mode page */ 742 /* failed, drive doesn't have capabilities mode page */
763 cd->cdi.speed = 1; 743 cd->cdi.speed = 1;
764 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R | 744 cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R |
765 CDC_DVD | CDC_DVD_RAM | 745 CDC_DVD | CDC_DVD_RAM |
766 CDC_SELECT_DISC | CDC_SELECT_SPEED); 746 CDC_SELECT_DISC | CDC_SELECT_SPEED |
747 CDC_MRW | CDC_MRW_W | CDC_RAM);
767 kfree(buffer); 748 kfree(buffer);
768 printk("%s: scsi-1 drive\n", cd->cdi.name); 749 printk("%s: scsi-1 drive\n", cd->cdi.name);
769 return; 750 return;
@@ -845,7 +826,7 @@ static int sr_packet(struct cdrom_device_info *cdi,
845 * sr_kref_release - Called to free the scsi_cd structure 826 * sr_kref_release - Called to free the scsi_cd structure
846 * @kref: pointer to embedded kref 827 * @kref: pointer to embedded kref
847 * 828 *
848 * sr_ref_sem must be held entering this routine. Because it is 829 * sr_ref_mutex must be held entering this routine. Because it is
849 * called on last put, you should always use the scsi_cd_get() 830 * called on last put, you should always use the scsi_cd_get()
850 * scsi_cd_put() helpers which manipulate the semaphore directly 831 * scsi_cd_put() helpers which manipulate the semaphore directly
851 * and never do a direct kref_put(). 832 * and never do a direct kref_put().
@@ -874,9 +855,9 @@ static int sr_remove(struct device *dev)
874 855
875 del_gendisk(cd->disk); 856 del_gendisk(cd->disk);
876 857
877 down(&sr_ref_sem); 858 mutex_lock(&sr_ref_mutex);
878 kref_put(&cd->kref, sr_kref_release); 859 kref_put(&cd->kref, sr_kref_release);
879 up(&sr_ref_sem); 860 mutex_unlock(&sr_ref_mutex);
880 861
881 return 0; 862 return 0;
882} 863}
diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c
index 6e45ac3c43c5..5d02ff4db6cc 100644
--- a/drivers/scsi/sr_ioctl.c
+++ b/drivers/scsi/sr_ioctl.c
@@ -31,6 +31,79 @@ static int xa_test = 0;
31 31
32module_param(xa_test, int, S_IRUGO | S_IWUSR); 32module_param(xa_test, int, S_IRUGO | S_IWUSR);
33 33
34/* primitive to determine whether we need to have GFP_DMA set based on
35 * the status of the unchecked_isa_dma flag in the host structure */
36#define SR_GFP_DMA(cd) (((cd)->device->host->unchecked_isa_dma) ? GFP_DMA : 0)
37
38
39static int sr_read_tochdr(struct cdrom_device_info *cdi,
40 struct cdrom_tochdr *tochdr)
41{
42 struct scsi_cd *cd = cdi->handle;
43 struct packet_command cgc;
44 int result;
45 unsigned char *buffer;
46
47 buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd));
48 if (!buffer)
49 return -ENOMEM;
50
51 memset(&cgc, 0, sizeof(struct packet_command));
52 cgc.timeout = IOCTL_TIMEOUT;
53 cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
54 cgc.cmd[8] = 12; /* LSB of length */
55 cgc.buffer = buffer;
56 cgc.buflen = 12;
57 cgc.quiet = 1;
58 cgc.data_direction = DMA_FROM_DEVICE;
59
60 result = sr_do_ioctl(cd, &cgc);
61
62 tochdr->cdth_trk0 = buffer[2];
63 tochdr->cdth_trk1 = buffer[3];
64
65 kfree(buffer);
66 return result;
67}
68
69static int sr_read_tocentry(struct cdrom_device_info *cdi,
70 struct cdrom_tocentry *tocentry)
71{
72 struct scsi_cd *cd = cdi->handle;
73 struct packet_command cgc;
74 int result;
75 unsigned char *buffer;
76
77 buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd));
78 if (!buffer)
79 return -ENOMEM;
80
81 memset(&cgc, 0, sizeof(struct packet_command));
82 cgc.timeout = IOCTL_TIMEOUT;
83 cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
84 cgc.cmd[1] |= (tocentry->cdte_format == CDROM_MSF) ? 0x02 : 0;
85 cgc.cmd[6] = tocentry->cdte_track;
86 cgc.cmd[8] = 12; /* LSB of length */
87 cgc.buffer = buffer;
88 cgc.buflen = 12;
89 cgc.data_direction = DMA_FROM_DEVICE;
90
91 result = sr_do_ioctl(cd, &cgc);
92
93 tocentry->cdte_ctrl = buffer[5] & 0xf;
94 tocentry->cdte_adr = buffer[5] >> 4;
95 tocentry->cdte_datamode = (tocentry->cdte_ctrl & 0x04) ? 1 : 0;
96 if (tocentry->cdte_format == CDROM_MSF) {
97 tocentry->cdte_addr.msf.minute = buffer[9];
98 tocentry->cdte_addr.msf.second = buffer[10];
99 tocentry->cdte_addr.msf.frame = buffer[11];
100 } else
101 tocentry->cdte_addr.lba = (((((buffer[8] << 8) + buffer[9]) << 8)
102 + buffer[10]) << 8) + buffer[11];
103
104 kfree(buffer);
105 return result;
106}
34 107
35#define IOCTL_RETRIES 3 108#define IOCTL_RETRIES 3
36 109
@@ -45,7 +118,8 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti
45 struct packet_command cgc; 118 struct packet_command cgc;
46 int ntracks, ret; 119 int ntracks, ret;
47 120
48 if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCHDR, &tochdr))) 121 ret = sr_read_tochdr(cdi, &tochdr);
122 if (ret)
49 return ret; 123 return ret;
50 124
51 ntracks = tochdr.cdth_trk1 - tochdr.cdth_trk0 + 1; 125 ntracks = tochdr.cdth_trk1 - tochdr.cdth_trk0 + 1;
@@ -60,9 +134,11 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti
60 trk1_te.cdte_track = ti->cdti_trk1; 134 trk1_te.cdte_track = ti->cdti_trk1;
61 trk1_te.cdte_format = CDROM_MSF; 135 trk1_te.cdte_format = CDROM_MSF;
62 136
63 if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCENTRY, &trk0_te))) 137 ret = sr_read_tocentry(cdi, &trk0_te);
138 if (ret)
64 return ret; 139 return ret;
65 if ((ret = sr_audio_ioctl(cdi, CDROMREADTOCENTRY, &trk1_te))) 140 ret = sr_read_tocentry(cdi, &trk1_te);
141 if (ret)
66 return ret; 142 return ret;
67 143
68 memset(&cgc, 0, sizeof(struct packet_command)); 144 memset(&cgc, 0, sizeof(struct packet_command));
@@ -78,6 +154,30 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti
78 return sr_do_ioctl(cdi->handle, &cgc); 154 return sr_do_ioctl(cdi->handle, &cgc);
79} 155}
80 156
157static int sr_play_trkind(struct cdrom_device_info *cdi,
158 struct cdrom_ti *ti)
159
160{
161 struct scsi_cd *cd = cdi->handle;
162 struct packet_command cgc;
163 int result;
164
165 memset(&cgc, 0, sizeof(struct packet_command));
166 cgc.timeout = IOCTL_TIMEOUT;
167 cgc.cmd[0] = GPCMD_PLAYAUDIO_TI;
168 cgc.cmd[4] = ti->cdti_trk0;
169 cgc.cmd[5] = ti->cdti_ind0;
170 cgc.cmd[7] = ti->cdti_trk1;
171 cgc.cmd[8] = ti->cdti_ind1;
172 cgc.data_direction = DMA_NONE;
173
174 result = sr_do_ioctl(cd, &cgc);
175 if (result == -EDRIVE_CANT_DO_THIS)
176 result = sr_fake_playtrkind(cdi, ti);
177
178 return result;
179}
180
81/* We do our own retries because we want to know what the specific 181/* We do our own retries because we want to know what the specific
82 error code is. Normally the UNIT_ATTENTION code will automatically 182 error code is. Normally the UNIT_ATTENTION code will automatically
83 clear after one error */ 183 clear after one error */
@@ -229,13 +329,14 @@ int sr_disk_status(struct cdrom_device_info *cdi)
229 int i, rc, have_datatracks = 0; 329 int i, rc, have_datatracks = 0;
230 330
231 /* look for data tracks */ 331 /* look for data tracks */
232 if (0 != (rc = sr_audio_ioctl(cdi, CDROMREADTOCHDR, &toc_h))) 332 rc = sr_read_tochdr(cdi, &toc_h);
333 if (rc)
233 return (rc == -ENOMEDIUM) ? CDS_NO_DISC : CDS_NO_INFO; 334 return (rc == -ENOMEDIUM) ? CDS_NO_DISC : CDS_NO_INFO;
234 335
235 for (i = toc_h.cdth_trk0; i <= toc_h.cdth_trk1; i++) { 336 for (i = toc_h.cdth_trk0; i <= toc_h.cdth_trk1; i++) {
236 toc_e.cdte_track = i; 337 toc_e.cdte_track = i;
237 toc_e.cdte_format = CDROM_LBA; 338 toc_e.cdte_format = CDROM_LBA;
238 if (sr_audio_ioctl(cdi, CDROMREADTOCENTRY, &toc_e)) 339 if (sr_read_tocentry(cdi, &toc_e))
239 return CDS_NO_INFO; 340 return CDS_NO_INFO;
240 if (toc_e.cdte_ctrl & CDROM_DATA_TRACK) { 341 if (toc_e.cdte_ctrl & CDROM_DATA_TRACK) {
241 have_datatracks = 1; 342 have_datatracks = 1;
@@ -262,10 +363,6 @@ int sr_get_last_session(struct cdrom_device_info *cdi,
262 return 0; 363 return 0;
263} 364}
264 365
265/* primitive to determine whether we need to have GFP_DMA set based on
266 * the status of the unchecked_isa_dma flag in the host structure */
267#define SR_GFP_DMA(cd) (((cd)->device->host->unchecked_isa_dma) ? GFP_DMA : 0)
268
269int sr_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) 366int sr_get_mcn(struct cdrom_device_info *cdi, struct cdrom_mcn *mcn)
270{ 367{
271 Scsi_CD *cd = cdi->handle; 368 Scsi_CD *cd = cdi->handle;
@@ -329,93 +426,16 @@ int sr_select_speed(struct cdrom_device_info *cdi, int speed)
329 426
330int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg) 427int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg)
331{ 428{
332 Scsi_CD *cd = cdi->handle;
333 struct packet_command cgc;
334 int result;
335 unsigned char *buffer = kmalloc(32, GFP_KERNEL | SR_GFP_DMA(cd));
336
337 if (!buffer)
338 return -ENOMEM;
339
340 memset(&cgc, 0, sizeof(struct packet_command));
341 cgc.timeout = IOCTL_TIMEOUT;
342
343 switch (cmd) { 429 switch (cmd) {
344 case CDROMREADTOCHDR: 430 case CDROMREADTOCHDR:
345 { 431 return sr_read_tochdr(cdi, arg);
346 struct cdrom_tochdr *tochdr = (struct cdrom_tochdr *) arg;
347
348 cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
349 cgc.cmd[8] = 12; /* LSB of length */
350 cgc.buffer = buffer;
351 cgc.buflen = 12;
352 cgc.quiet = 1;
353 cgc.data_direction = DMA_FROM_DEVICE;
354
355 result = sr_do_ioctl(cd, &cgc);
356
357 tochdr->cdth_trk0 = buffer[2];
358 tochdr->cdth_trk1 = buffer[3];
359
360 break;
361 }
362
363 case CDROMREADTOCENTRY: 432 case CDROMREADTOCENTRY:
364 { 433 return sr_read_tocentry(cdi, arg);
365 struct cdrom_tocentry *tocentry = (struct cdrom_tocentry *) arg; 434 case CDROMPLAYTRKIND:
366 435 return sr_play_trkind(cdi, arg);
367 cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
368 cgc.cmd[1] |= (tocentry->cdte_format == CDROM_MSF) ? 0x02 : 0;
369 cgc.cmd[6] = tocentry->cdte_track;
370 cgc.cmd[8] = 12; /* LSB of length */
371 cgc.buffer = buffer;
372 cgc.buflen = 12;
373 cgc.data_direction = DMA_FROM_DEVICE;
374
375 result = sr_do_ioctl(cd, &cgc);
376
377 tocentry->cdte_ctrl = buffer[5] & 0xf;
378 tocentry->cdte_adr = buffer[5] >> 4;
379 tocentry->cdte_datamode = (tocentry->cdte_ctrl & 0x04) ? 1 : 0;
380 if (tocentry->cdte_format == CDROM_MSF) {
381 tocentry->cdte_addr.msf.minute = buffer[9];
382 tocentry->cdte_addr.msf.second = buffer[10];
383 tocentry->cdte_addr.msf.frame = buffer[11];
384 } else
385 tocentry->cdte_addr.lba = (((((buffer[8] << 8) + buffer[9]) << 8)
386 + buffer[10]) << 8) + buffer[11];
387
388 break;
389 }
390
391 case CDROMPLAYTRKIND: {
392 struct cdrom_ti* ti = (struct cdrom_ti*)arg;
393
394 cgc.cmd[0] = GPCMD_PLAYAUDIO_TI;
395 cgc.cmd[4] = ti->cdti_trk0;
396 cgc.cmd[5] = ti->cdti_ind0;
397 cgc.cmd[7] = ti->cdti_trk1;
398 cgc.cmd[8] = ti->cdti_ind1;
399 cgc.data_direction = DMA_NONE;
400
401 result = sr_do_ioctl(cd, &cgc);
402 if (result == -EDRIVE_CANT_DO_THIS)
403 result = sr_fake_playtrkind(cdi, ti);
404
405 break;
406 }
407
408 default: 436 default:
409 result = -EINVAL; 437 return -EINVAL;
410 } 438 }
411
412#if 0
413 if (result)
414 printk("DEBUG: sr_audio: result for ioctl %x: %x\n", cmd, result);
415#endif
416
417 kfree(buffer);
418 return result;
419} 439}
420 440
421/* ----------------------------------------------------------------------- 441/* -----------------------------------------------------------------------
diff --git a/drivers/scsi/sr_vendor.c b/drivers/scsi/sr_vendor.c
index 78274dc91f5c..9dde8df2f5c9 100644
--- a/drivers/scsi/sr_vendor.c
+++ b/drivers/scsi/sr_vendor.c
@@ -68,8 +68,8 @@ void sr_vendor_init(Scsi_CD *cd)
68#ifndef CONFIG_BLK_DEV_SR_VENDOR 68#ifndef CONFIG_BLK_DEV_SR_VENDOR
69 cd->vendor = VENDOR_SCSI3; 69 cd->vendor = VENDOR_SCSI3;
70#else 70#else
71 char *vendor = cd->device->vendor; 71 const char *vendor = cd->device->vendor;
72 char *model = cd->device->model; 72 const char *model = cd->device->model;
73 73
74 /* default */ 74 /* default */
75 cd->vendor = VENDOR_SCSI3; 75 cd->vendor = VENDOR_SCSI3;
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index dd592f6a2529..13b1d3aac265 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -17,7 +17,7 @@
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support 17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
18 */ 18 */
19 19
20static char *verstr = "20050830"; 20static const char *verstr = "20050830";
21 21
22#include <linux/module.h> 22#include <linux/module.h>
23 23
@@ -38,6 +38,7 @@ static char *verstr = "20050830";
38#include <linux/devfs_fs_kernel.h> 38#include <linux/devfs_fs_kernel.h>
39#include <linux/cdev.h> 39#include <linux/cdev.h>
40#include <linux/delay.h> 40#include <linux/delay.h>
41#include <linux/mutex.h>
41 42
42#include <asm/uaccess.h> 43#include <asm/uaccess.h>
43#include <asm/dma.h> 44#include <asm/dma.h>
@@ -50,7 +51,6 @@ static char *verstr = "20050830";
50#include <scsi/scsi_eh.h> 51#include <scsi/scsi_eh.h>
51#include <scsi/scsi_host.h> 52#include <scsi/scsi_host.h>
52#include <scsi/scsi_ioctl.h> 53#include <scsi/scsi_ioctl.h>
53#include <scsi/scsi_request.h>
54#include <scsi/sg.h> 54#include <scsi/sg.h>
55 55
56 56
@@ -134,7 +134,7 @@ static struct st_dev_parm {
134#endif 134#endif
135/* Bit reversed order to get same names for same minors with all 135/* Bit reversed order to get same names for same minors with all
136 mode counts */ 136 mode counts */
137static char *st_formats[] = { 137static const char *st_formats[] = {
138 "", "r", "k", "s", "l", "t", "o", "u", 138 "", "r", "k", "s", "l", "t", "o", "u",
139 "m", "v", "p", "x", "a", "y", "q", "z"}; 139 "m", "v", "p", "x", "a", "y", "q", "z"};
140 140
@@ -188,15 +188,12 @@ static int from_buffer(struct st_buffer *, char __user *, int);
188static void move_buffer_data(struct st_buffer *, int); 188static void move_buffer_data(struct st_buffer *, int);
189static void buf_to_sg(struct st_buffer *, unsigned int); 189static void buf_to_sg(struct st_buffer *, unsigned int);
190 190
191static int st_map_user_pages(struct scatterlist *, const unsigned int,
192 unsigned long, size_t, int, unsigned long);
193static int sgl_map_user_pages(struct scatterlist *, const unsigned int, 191static int sgl_map_user_pages(struct scatterlist *, const unsigned int,
194 unsigned long, size_t, int); 192 unsigned long, size_t, int);
195static int sgl_unmap_user_pages(struct scatterlist *, const unsigned int, int); 193static int sgl_unmap_user_pages(struct scatterlist *, const unsigned int, int);
196 194
197static int st_probe(struct device *); 195static int st_probe(struct device *);
198static int st_remove(struct device *); 196static int st_remove(struct device *);
199static int st_init_command(struct scsi_cmnd *);
200 197
201static void do_create_driverfs_files(void); 198static void do_create_driverfs_files(void);
202static void do_remove_driverfs_files(void); 199static void do_remove_driverfs_files(void);
@@ -209,7 +206,6 @@ static struct scsi_driver st_template = {
209 .probe = st_probe, 206 .probe = st_probe,
210 .remove = st_remove, 207 .remove = st_remove,
211 }, 208 },
212 .init_command = st_init_command,
213}; 209};
214 210
215static int st_compression(struct scsi_tape *, int); 211static int st_compression(struct scsi_tape *, int);
@@ -223,7 +219,7 @@ static void scsi_tape_release(struct kref *);
223 219
224#define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref) 220#define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
225 221
226static DECLARE_MUTEX(st_ref_sem); 222static DEFINE_MUTEX(st_ref_mutex);
227 223
228 224
229#include "osst_detect.h" 225#include "osst_detect.h"
@@ -240,7 +236,7 @@ static struct scsi_tape *scsi_tape_get(int dev)
240{ 236{
241 struct scsi_tape *STp = NULL; 237 struct scsi_tape *STp = NULL;
242 238
243 down(&st_ref_sem); 239 mutex_lock(&st_ref_mutex);
244 write_lock(&st_dev_arr_lock); 240 write_lock(&st_dev_arr_lock);
245 241
246 if (dev < st_dev_max && scsi_tapes != NULL) 242 if (dev < st_dev_max && scsi_tapes != NULL)
@@ -262,7 +258,7 @@ out_put:
262 STp = NULL; 258 STp = NULL;
263out: 259out:
264 write_unlock(&st_dev_arr_lock); 260 write_unlock(&st_dev_arr_lock);
265 up(&st_ref_sem); 261 mutex_unlock(&st_ref_mutex);
266 return STp; 262 return STp;
267} 263}
268 264
@@ -270,10 +266,10 @@ static void scsi_tape_put(struct scsi_tape *STp)
270{ 266{
271 struct scsi_device *sdev = STp->device; 267 struct scsi_device *sdev = STp->device;
272 268
273 down(&st_ref_sem); 269 mutex_lock(&st_ref_mutex);
274 kref_put(&STp->kref, scsi_tape_release); 270 kref_put(&STp->kref, scsi_tape_release);
275 scsi_device_put(sdev); 271 scsi_device_put(sdev);
276 up(&st_ref_sem); 272 mutex_unlock(&st_ref_mutex);
277} 273}
278 274
279struct st_reject_data { 275struct st_reject_data {
@@ -313,12 +309,13 @@ static inline char *tape_name(struct scsi_tape *tape)
313} 309}
314 310
315 311
316static void st_analyze_sense(struct scsi_request *SRpnt, struct st_cmdstatus *s) 312static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s)
317{ 313{
318 const u8 *ucp; 314 const u8 *ucp;
319 const u8 *sense = SRpnt->sr_sense_buffer; 315 const u8 *sense = SRpnt->sense;
320 316
321 s->have_sense = scsi_request_normalize_sense(SRpnt, &s->sense_hdr); 317 s->have_sense = scsi_normalize_sense(SRpnt->sense,
318 SCSI_SENSE_BUFFERSIZE, &s->sense_hdr);
322 s->flags = 0; 319 s->flags = 0;
323 320
324 if (s->have_sense) { 321 if (s->have_sense) {
@@ -345,9 +342,9 @@ static void st_analyze_sense(struct scsi_request *SRpnt, struct st_cmdstatus *s)
345 342
346 343
347/* Convert the result to success code */ 344/* Convert the result to success code */
348static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt) 345static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
349{ 346{
350 int result = SRpnt->sr_result; 347 int result = SRpnt->result;
351 u8 scode; 348 u8 scode;
352 DEB(const char *stp;) 349 DEB(const char *stp;)
353 char *name = tape_name(STp); 350 char *name = tape_name(STp);
@@ -366,13 +363,12 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
366 363
367 DEB( 364 DEB(
368 if (debugging) { 365 if (debugging) {
369 printk(ST_DEB_MSG "%s: Error: %x, cmd: %x %x %x %x %x %x Len: %d\n", 366 printk(ST_DEB_MSG "%s: Error: %x, cmd: %x %x %x %x %x %x\n",
370 name, result, 367 name, result,
371 SRpnt->sr_cmnd[0], SRpnt->sr_cmnd[1], SRpnt->sr_cmnd[2], 368 SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2],
372 SRpnt->sr_cmnd[3], SRpnt->sr_cmnd[4], SRpnt->sr_cmnd[5], 369 SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]);
373 SRpnt->sr_bufflen);
374 if (cmdstatp->have_sense) 370 if (cmdstatp->have_sense)
375 scsi_print_req_sense("st", SRpnt); 371 __scsi_print_sense("st", SRpnt->sense, SCSI_SENSE_BUFFERSIZE);
376 } ) /* end DEB */ 372 } ) /* end DEB */
377 if (!debugging) { /* Abnormal conditions for tape */ 373 if (!debugging) { /* Abnormal conditions for tape */
378 if (!cmdstatp->have_sense) 374 if (!cmdstatp->have_sense)
@@ -386,20 +382,21 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
386 /* scode != UNIT_ATTENTION && */ 382 /* scode != UNIT_ATTENTION && */
387 scode != BLANK_CHECK && 383 scode != BLANK_CHECK &&
388 scode != VOLUME_OVERFLOW && 384 scode != VOLUME_OVERFLOW &&
389 SRpnt->sr_cmnd[0] != MODE_SENSE && 385 SRpnt->cmd[0] != MODE_SENSE &&
390 SRpnt->sr_cmnd[0] != TEST_UNIT_READY) { 386 SRpnt->cmd[0] != TEST_UNIT_READY) {
391 printk(KERN_WARNING "%s: Error with sense data: ", name); 387 printk(KERN_WARNING "%s: Error with sense data: ", name);
392 scsi_print_req_sense("st", SRpnt); 388 __scsi_print_sense("st", SRpnt->sense,
389 SCSI_SENSE_BUFFERSIZE);
393 } 390 }
394 } 391 }
395 392
396 if (cmdstatp->fixed_format && 393 if (cmdstatp->fixed_format &&
397 STp->cln_mode >= EXTENDED_SENSE_START) { /* Only fixed format sense */ 394 STp->cln_mode >= EXTENDED_SENSE_START) { /* Only fixed format sense */
398 if (STp->cln_sense_value) 395 if (STp->cln_sense_value)
399 STp->cleaning_req |= ((SRpnt->sr_sense_buffer[STp->cln_mode] & 396 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
400 STp->cln_sense_mask) == STp->cln_sense_value); 397 STp->cln_sense_mask) == STp->cln_sense_value);
401 else 398 else
402 STp->cleaning_req |= ((SRpnt->sr_sense_buffer[STp->cln_mode] & 399 STp->cleaning_req |= ((SRpnt->sense[STp->cln_mode] &
403 STp->cln_sense_mask) != 0); 400 STp->cln_sense_mask) != 0);
404 } 401 }
405 if (cmdstatp->have_sense && 402 if (cmdstatp->have_sense &&
@@ -411,8 +408,8 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
411 if (cmdstatp->have_sense && 408 if (cmdstatp->have_sense &&
412 scode == RECOVERED_ERROR 409 scode == RECOVERED_ERROR
413#if ST_RECOVERED_WRITE_FATAL 410#if ST_RECOVERED_WRITE_FATAL
414 && SRpnt->sr_cmnd[0] != WRITE_6 411 && SRpnt->cmd[0] != WRITE_6
415 && SRpnt->sr_cmnd[0] != WRITE_FILEMARKS 412 && SRpnt->cmd[0] != WRITE_FILEMARKS
416#endif 413#endif
417 ) { 414 ) {
418 STp->recover_count++; 415 STp->recover_count++;
@@ -420,9 +417,9 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
420 417
421 DEB( 418 DEB(
422 if (debugging) { 419 if (debugging) {
423 if (SRpnt->sr_cmnd[0] == READ_6) 420 if (SRpnt->cmd[0] == READ_6)
424 stp = "read"; 421 stp = "read";
425 else if (SRpnt->sr_cmnd[0] == WRITE_6) 422 else if (SRpnt->cmd[0] == WRITE_6)
426 stp = "write"; 423 stp = "write";
427 else 424 else
428 stp = "ioctl"; 425 stp = "ioctl";
@@ -438,28 +435,37 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
438 435
439 436
440/* Wakeup from interrupt */ 437/* Wakeup from interrupt */
441static void st_sleep_done(struct scsi_cmnd * SCpnt) 438static void st_sleep_done(void *data, char *sense, int result, int resid)
442{ 439{
443 struct scsi_tape *STp = container_of(SCpnt->request->rq_disk->private_data, 440 struct st_request *SRpnt = data;
444 struct scsi_tape, driver); 441 struct scsi_tape *STp = SRpnt->stp;
445 442
446 (STp->buffer)->cmdstat.midlevel_result = SCpnt->result; 443 memcpy(SRpnt->sense, sense, SCSI_SENSE_BUFFERSIZE);
447 SCpnt->request->rq_status = RQ_SCSI_DONE; 444 (STp->buffer)->cmdstat.midlevel_result = SRpnt->result = result;
448 DEB( STp->write_pending = 0; ) 445 DEB( STp->write_pending = 0; )
449 446
450 if (SCpnt->request->waiting) 447 if (SRpnt->waiting)
451 complete(SCpnt->request->waiting); 448 complete(SRpnt->waiting);
449}
450
451static struct st_request *st_allocate_request(void)
452{
453 return kzalloc(sizeof(struct st_request), GFP_KERNEL);
454}
455
456static void st_release_request(struct st_request *streq)
457{
458 kfree(streq);
452} 459}
453 460
454/* Do the scsi command. Waits until command performed if do_wait is true. 461/* Do the scsi command. Waits until command performed if do_wait is true.
455 Otherwise write_behind_check() is used to check that the command 462 Otherwise write_behind_check() is used to check that the command
456 has finished. */ 463 has finished. */
457static struct scsi_request * 464static struct st_request *
458st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd, 465st_do_scsi(struct st_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
459 int bytes, int direction, int timeout, int retries, int do_wait) 466 int bytes, int direction, int timeout, int retries, int do_wait)
460{ 467{
461 struct completion *waiting; 468 struct completion *waiting;
462 unsigned char *bp;
463 469
464 /* if async, make sure there's no command outstanding */ 470 /* if async, make sure there's no command outstanding */
465 if (!do_wait && ((STp->buffer)->last_SRpnt)) { 471 if (!do_wait && ((STp->buffer)->last_SRpnt)) {
@@ -473,7 +479,7 @@ st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *c
473 } 479 }
474 480
475 if (SRpnt == NULL) { 481 if (SRpnt == NULL) {
476 SRpnt = scsi_allocate_request(STp->device, GFP_ATOMIC); 482 SRpnt = st_allocate_request();
477 if (SRpnt == NULL) { 483 if (SRpnt == NULL) {
478 DEBC( printk(KERN_ERR "%s: Can't get SCSI request.\n", 484 DEBC( printk(KERN_ERR "%s: Can't get SCSI request.\n",
479 tape_name(STp)); ); 485 tape_name(STp)); );
@@ -483,6 +489,7 @@ st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *c
483 (STp->buffer)->syscall_result = (-EBUSY); 489 (STp->buffer)->syscall_result = (-EBUSY);
484 return NULL; 490 return NULL;
485 } 491 }
492 SRpnt->stp = STp;
486 } 493 }
487 494
488 /* If async IO, set last_SRpnt. This ptr tells write_behind_check 495 /* If async IO, set last_SRpnt. This ptr tells write_behind_check
@@ -492,32 +499,28 @@ st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *c
492 499
493 waiting = &STp->wait; 500 waiting = &STp->wait;
494 init_completion(waiting); 501 init_completion(waiting);
495 SRpnt->sr_use_sg = STp->buffer->do_dio || (bytes > (STp->buffer)->frp[0].length); 502 SRpnt->waiting = waiting;
496 if (SRpnt->sr_use_sg) {
497 if (!STp->buffer->do_dio)
498 buf_to_sg(STp->buffer, bytes);
499 SRpnt->sr_use_sg = (STp->buffer)->sg_segs;
500 bp = (char *) &((STp->buffer)->sg[0]);
501 } else
502 bp = (STp->buffer)->b_data;
503 SRpnt->sr_data_direction = direction;
504 SRpnt->sr_cmd_len = 0;
505 SRpnt->sr_request->waiting = waiting;
506 SRpnt->sr_request->rq_status = RQ_SCSI_BUSY;
507 SRpnt->sr_request->rq_disk = STp->disk;
508 SRpnt->sr_request->end_io = blk_end_sync_rq;
509 STp->buffer->cmdstat.have_sense = 0;
510 503
511 scsi_do_req(SRpnt, (void *) cmd, bp, bytes, 504 if (!STp->buffer->do_dio)
512 st_sleep_done, timeout, retries); 505 buf_to_sg(STp->buffer, bytes);
513 506
514 if (do_wait) { 507 memcpy(SRpnt->cmd, cmd, sizeof(SRpnt->cmd));
508 STp->buffer->cmdstat.have_sense = 0;
509 STp->buffer->syscall_result = 0;
510
511 if (scsi_execute_async(STp->device, cmd, direction,
512 &((STp->buffer)->sg[0]), bytes, (STp->buffer)->sg_segs,
513 timeout, retries, SRpnt, st_sleep_done, GFP_KERNEL)) {
514 /* could not allocate the buffer or request was too large */
515 (STp->buffer)->syscall_result = (-EBUSY);
516 (STp->buffer)->last_SRpnt = NULL;
517 }
518 else if (do_wait) {
515 wait_for_completion(waiting); 519 wait_for_completion(waiting);
516 SRpnt->sr_request->waiting = NULL; 520 SRpnt->waiting = NULL;
517 if (SRpnt->sr_request->rq_status != RQ_SCSI_DONE)
518 SRpnt->sr_result |= (DRIVER_ERROR << 24);
519 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt); 521 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
520 } 522 }
523
521 return SRpnt; 524 return SRpnt;
522} 525}
523 526
@@ -532,7 +535,7 @@ static int write_behind_check(struct scsi_tape * STp)
532 struct st_buffer *STbuffer; 535 struct st_buffer *STbuffer;
533 struct st_partstat *STps; 536 struct st_partstat *STps;
534 struct st_cmdstatus *cmdstatp; 537 struct st_cmdstatus *cmdstatp;
535 struct scsi_request *SRpnt; 538 struct st_request *SRpnt;
536 539
537 STbuffer = STp->buffer; 540 STbuffer = STp->buffer;
538 if (!STbuffer->writing) 541 if (!STbuffer->writing)
@@ -548,12 +551,10 @@ static int write_behind_check(struct scsi_tape * STp)
548 wait_for_completion(&(STp->wait)); 551 wait_for_completion(&(STp->wait));
549 SRpnt = STbuffer->last_SRpnt; 552 SRpnt = STbuffer->last_SRpnt;
550 STbuffer->last_SRpnt = NULL; 553 STbuffer->last_SRpnt = NULL;
551 SRpnt->sr_request->waiting = NULL; 554 SRpnt->waiting = NULL;
552 if (SRpnt->sr_request->rq_status != RQ_SCSI_DONE)
553 SRpnt->sr_result |= (DRIVER_ERROR << 24);
554 555
555 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt); 556 (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
556 scsi_release_request(SRpnt); 557 st_release_request(SRpnt);
557 558
558 STbuffer->buffer_bytes -= STbuffer->writing; 559 STbuffer->buffer_bytes -= STbuffer->writing;
559 STps = &(STp->ps[STp->partition]); 560 STps = &(STp->ps[STp->partition]);
@@ -593,7 +594,7 @@ static int write_behind_check(struct scsi_tape * STp)
593 it messes up the block number). */ 594 it messes up the block number). */
594static int cross_eof(struct scsi_tape * STp, int forward) 595static int cross_eof(struct scsi_tape * STp, int forward)
595{ 596{
596 struct scsi_request *SRpnt; 597 struct st_request *SRpnt;
597 unsigned char cmd[MAX_COMMAND_SIZE]; 598 unsigned char cmd[MAX_COMMAND_SIZE];
598 599
599 cmd[0] = SPACE; 600 cmd[0] = SPACE;
@@ -613,7 +614,7 @@ static int cross_eof(struct scsi_tape * STp, int forward)
613 if (!SRpnt) 614 if (!SRpnt)
614 return (STp->buffer)->syscall_result; 615 return (STp->buffer)->syscall_result;
615 616
616 scsi_release_request(SRpnt); 617 st_release_request(SRpnt);
617 SRpnt = NULL; 618 SRpnt = NULL;
618 619
619 if ((STp->buffer)->cmdstat.midlevel_result != 0) 620 if ((STp->buffer)->cmdstat.midlevel_result != 0)
@@ -630,7 +631,7 @@ static int flush_write_buffer(struct scsi_tape * STp)
630 int offset, transfer, blks; 631 int offset, transfer, blks;
631 int result; 632 int result;
632 unsigned char cmd[MAX_COMMAND_SIZE]; 633 unsigned char cmd[MAX_COMMAND_SIZE];
633 struct scsi_request *SRpnt; 634 struct st_request *SRpnt;
634 struct st_partstat *STps; 635 struct st_partstat *STps;
635 636
636 result = write_behind_check(STp); 637 result = write_behind_check(STp);
@@ -688,7 +689,7 @@ static int flush_write_buffer(struct scsi_tape * STp)
688 STp->dirty = 0; 689 STp->dirty = 0;
689 (STp->buffer)->buffer_bytes = 0; 690 (STp->buffer)->buffer_bytes = 0;
690 } 691 }
691 scsi_release_request(SRpnt); 692 st_release_request(SRpnt);
692 SRpnt = NULL; 693 SRpnt = NULL;
693 } 694 }
694 return result; 695 return result;
@@ -785,7 +786,7 @@ static int set_mode_densblk(struct scsi_tape * STp, struct st_modedef * STm)
785} 786}
786 787
787 788
788/* Lock or unlock the drive door. Don't use when scsi_request allocated. */ 789/* Lock or unlock the drive door. Don't use when st_request allocated. */
789static int do_door_lock(struct scsi_tape * STp, int do_lock) 790static int do_door_lock(struct scsi_tape * STp, int do_lock)
790{ 791{
791 int retval, cmd; 792 int retval, cmd;
@@ -844,7 +845,7 @@ static int test_ready(struct scsi_tape *STp, int do_wait)
844 int attentions, waits, max_wait, scode; 845 int attentions, waits, max_wait, scode;
845 int retval = CHKRES_READY, new_session = 0; 846 int retval = CHKRES_READY, new_session = 0;
846 unsigned char cmd[MAX_COMMAND_SIZE]; 847 unsigned char cmd[MAX_COMMAND_SIZE];
847 struct scsi_request *SRpnt = NULL; 848 struct st_request *SRpnt = NULL;
848 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat; 849 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
849 850
850 max_wait = do_wait ? ST_BLOCK_SECONDS : 0; 851 max_wait = do_wait ? ST_BLOCK_SECONDS : 0;
@@ -903,7 +904,7 @@ static int test_ready(struct scsi_tape *STp, int do_wait)
903 } 904 }
904 905
905 if (SRpnt != NULL) 906 if (SRpnt != NULL)
906 scsi_release_request(SRpnt); 907 st_release_request(SRpnt);
907 return retval; 908 return retval;
908} 909}
909 910
@@ -918,7 +919,7 @@ static int check_tape(struct scsi_tape *STp, struct file *filp)
918 int i, retval, new_session = 0, do_wait; 919 int i, retval, new_session = 0, do_wait;
919 unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning; 920 unsigned char cmd[MAX_COMMAND_SIZE], saved_cleaning;
920 unsigned short st_flags = filp->f_flags; 921 unsigned short st_flags = filp->f_flags;
921 struct scsi_request *SRpnt = NULL; 922 struct st_request *SRpnt = NULL;
922 struct st_modedef *STm; 923 struct st_modedef *STm;
923 struct st_partstat *STps; 924 struct st_partstat *STps;
924 char *name = tape_name(STp); 925 char *name = tape_name(STp);
@@ -993,7 +994,7 @@ static int check_tape(struct scsi_tape *STp, struct file *filp)
993 goto err_out; 994 goto err_out;
994 } 995 }
995 996
996 if (!SRpnt->sr_result && !STp->buffer->cmdstat.have_sense) { 997 if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) {
997 STp->max_block = ((STp->buffer)->b_data[1] << 16) | 998 STp->max_block = ((STp->buffer)->b_data[1] << 16) |
998 ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3]; 999 ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3];
999 STp->min_block = ((STp->buffer)->b_data[4] << 8) | 1000 STp->min_block = ((STp->buffer)->b_data[4] << 8) |
@@ -1045,7 +1046,7 @@ static int check_tape(struct scsi_tape *STp, struct file *filp)
1045 } 1046 }
1046 STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0; 1047 STp->drv_write_prot = ((STp->buffer)->b_data[2] & 0x80) != 0;
1047 } 1048 }
1048 scsi_release_request(SRpnt); 1049 st_release_request(SRpnt);
1049 SRpnt = NULL; 1050 SRpnt = NULL;
1050 STp->inited = 1; 1051 STp->inited = 1;
1051 1052
@@ -1196,7 +1197,7 @@ static int st_flush(struct file *filp)
1196{ 1197{
1197 int result = 0, result2; 1198 int result = 0, result2;
1198 unsigned char cmd[MAX_COMMAND_SIZE]; 1199 unsigned char cmd[MAX_COMMAND_SIZE];
1199 struct scsi_request *SRpnt; 1200 struct st_request *SRpnt;
1200 struct scsi_tape *STp = filp->private_data; 1201 struct scsi_tape *STp = filp->private_data;
1201 struct st_modedef *STm = &(STp->modes[STp->current_mode]); 1202 struct st_modedef *STm = &(STp->modes[STp->current_mode]);
1202 struct st_partstat *STps = &(STp->ps[STp->partition]); 1203 struct st_partstat *STps = &(STp->ps[STp->partition]);
@@ -1249,7 +1250,7 @@ static int st_flush(struct file *filp)
1249 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) && 1250 cmdstatp->sense_hdr.sense_key == RECOVERED_ERROR) &&
1250 (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) { 1251 (!cmdstatp->remainder_valid || cmdstatp->uremainder64 == 0))) {
1251 /* Write successful at EOM */ 1252 /* Write successful at EOM */
1252 scsi_release_request(SRpnt); 1253 st_release_request(SRpnt);
1253 SRpnt = NULL; 1254 SRpnt = NULL;
1254 if (STps->drv_file >= 0) 1255 if (STps->drv_file >= 0)
1255 STps->drv_file++; 1256 STps->drv_file++;
@@ -1259,7 +1260,7 @@ static int st_flush(struct file *filp)
1259 STps->eof = ST_FM; 1260 STps->eof = ST_FM;
1260 } 1261 }
1261 else { /* Write error */ 1262 else { /* Write error */
1262 scsi_release_request(SRpnt); 1263 st_release_request(SRpnt);
1263 SRpnt = NULL; 1264 SRpnt = NULL;
1264 printk(KERN_ERR "%s: Error on write filemark.\n", name); 1265 printk(KERN_ERR "%s: Error on write filemark.\n", name);
1265 if (result == 0) 1266 if (result == 0)
@@ -1400,11 +1401,11 @@ static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1400 i = STp->try_dio && try_rdio; 1401 i = STp->try_dio && try_rdio;
1401 else 1402 else
1402 i = STp->try_dio && try_wdio; 1403 i = STp->try_dio && try_wdio;
1404
1403 if (i && ((unsigned long)buf & queue_dma_alignment( 1405 if (i && ((unsigned long)buf & queue_dma_alignment(
1404 STp->device->request_queue)) == 0) { 1406 STp->device->request_queue)) == 0) {
1405 i = st_map_user_pages(&(STbp->sg[0]), STbp->use_sg, 1407 i = sgl_map_user_pages(&(STbp->sg[0]), STbp->use_sg,
1406 (unsigned long)buf, count, (is_read ? READ : WRITE), 1408 (unsigned long)buf, count, (is_read ? READ : WRITE));
1407 STp->max_pfn);
1408 if (i > 0) { 1409 if (i > 0) {
1409 STbp->do_dio = i; 1410 STbp->do_dio = i;
1410 STbp->buffer_bytes = 0; /* can be used as transfer counter */ 1411 STbp->buffer_bytes = 0; /* can be used as transfer counter */
@@ -1449,14 +1450,15 @@ static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1449 1450
1450 1451
1451/* Can be called more than once after each setup_buffer() */ 1452/* Can be called more than once after each setup_buffer() */
1452static void release_buffering(struct scsi_tape *STp) 1453static void release_buffering(struct scsi_tape *STp, int is_read)
1453{ 1454{
1454 struct st_buffer *STbp; 1455 struct st_buffer *STbp;
1455 1456
1456 STbp = STp->buffer; 1457 STbp = STp->buffer;
1457 if (STbp->do_dio) { 1458 if (STbp->do_dio) {
1458 sgl_unmap_user_pages(&(STbp->sg[0]), STbp->do_dio, 0); 1459 sgl_unmap_user_pages(&(STbp->sg[0]), STbp->do_dio, is_read);
1459 STbp->do_dio = 0; 1460 STbp->do_dio = 0;
1461 STbp->sg_segs = 0;
1460 } 1462 }
1461} 1463}
1462 1464
@@ -1472,7 +1474,7 @@ st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1472 int async_write; 1474 int async_write;
1473 unsigned char cmd[MAX_COMMAND_SIZE]; 1475 unsigned char cmd[MAX_COMMAND_SIZE];
1474 const char __user *b_point; 1476 const char __user *b_point;
1475 struct scsi_request *SRpnt = NULL; 1477 struct st_request *SRpnt = NULL;
1476 struct scsi_tape *STp = filp->private_data; 1478 struct scsi_tape *STp = filp->private_data;
1477 struct st_modedef *STm; 1479 struct st_modedef *STm;
1478 struct st_partstat *STps; 1480 struct st_partstat *STps;
@@ -1624,7 +1626,7 @@ st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1624 retval = STbp->syscall_result; 1626 retval = STbp->syscall_result;
1625 goto out; 1627 goto out;
1626 } 1628 }
1627 if (async_write) { 1629 if (async_write && !STbp->syscall_result) {
1628 STbp->writing = transfer; 1630 STbp->writing = transfer;
1629 STp->dirty = !(STbp->writing == 1631 STp->dirty = !(STbp->writing ==
1630 STbp->buffer_bytes); 1632 STbp->buffer_bytes);
@@ -1698,7 +1700,7 @@ st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1698 } else { 1700 } else {
1699 count += do_count; 1701 count += do_count;
1700 STps->drv_block = (-1); /* Too cautious? */ 1702 STps->drv_block = (-1); /* Too cautious? */
1701 retval = (-EIO); 1703 retval = STbp->syscall_result;
1702 } 1704 }
1703 1705
1704 } 1706 }
@@ -1728,8 +1730,8 @@ st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1728 1730
1729 out: 1731 out:
1730 if (SRpnt != NULL) 1732 if (SRpnt != NULL)
1731 scsi_release_request(SRpnt); 1733 st_release_request(SRpnt);
1732 release_buffering(STp); 1734 release_buffering(STp, 0);
1733 up(&STp->lock); 1735 up(&STp->lock);
1734 1736
1735 return retval; 1737 return retval;
@@ -1742,11 +1744,11 @@ st_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1742 Does release user buffer mapping if it is set. 1744 Does release user buffer mapping if it is set.
1743*/ 1745*/
1744static long read_tape(struct scsi_tape *STp, long count, 1746static long read_tape(struct scsi_tape *STp, long count,
1745 struct scsi_request ** aSRpnt) 1747 struct st_request ** aSRpnt)
1746{ 1748{
1747 int transfer, blks, bytes; 1749 int transfer, blks, bytes;
1748 unsigned char cmd[MAX_COMMAND_SIZE]; 1750 unsigned char cmd[MAX_COMMAND_SIZE];
1749 struct scsi_request *SRpnt; 1751 struct st_request *SRpnt;
1750 struct st_modedef *STm; 1752 struct st_modedef *STm;
1751 struct st_partstat *STps; 1753 struct st_partstat *STps;
1752 struct st_buffer *STbp; 1754 struct st_buffer *STbp;
@@ -1787,7 +1789,7 @@ static long read_tape(struct scsi_tape *STp, long count,
1787 SRpnt = *aSRpnt; 1789 SRpnt = *aSRpnt;
1788 SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE, 1790 SRpnt = st_do_scsi(SRpnt, STp, cmd, bytes, DMA_FROM_DEVICE,
1789 STp->device->timeout, MAX_RETRIES, 1); 1791 STp->device->timeout, MAX_RETRIES, 1);
1790 release_buffering(STp); 1792 release_buffering(STp, 1);
1791 *aSRpnt = SRpnt; 1793 *aSRpnt = SRpnt;
1792 if (!SRpnt) 1794 if (!SRpnt)
1793 return STbp->syscall_result; 1795 return STbp->syscall_result;
@@ -1802,10 +1804,10 @@ static long read_tape(struct scsi_tape *STp, long count,
1802 retval = 1; 1804 retval = 1;
1803 DEBC(printk(ST_DEB_MSG "%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n", 1805 DEBC(printk(ST_DEB_MSG "%s: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n",
1804 name, 1806 name,
1805 SRpnt->sr_sense_buffer[0], SRpnt->sr_sense_buffer[1], 1807 SRpnt->sense[0], SRpnt->sense[1],
1806 SRpnt->sr_sense_buffer[2], SRpnt->sr_sense_buffer[3], 1808 SRpnt->sense[2], SRpnt->sense[3],
1807 SRpnt->sr_sense_buffer[4], SRpnt->sr_sense_buffer[5], 1809 SRpnt->sense[4], SRpnt->sense[5],
1808 SRpnt->sr_sense_buffer[6], SRpnt->sr_sense_buffer[7])); 1810 SRpnt->sense[6], SRpnt->sense[7]));
1809 if (cmdstatp->have_sense) { 1811 if (cmdstatp->have_sense) {
1810 1812
1811 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK) 1813 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
@@ -1835,7 +1837,7 @@ static long read_tape(struct scsi_tape *STp, long count,
1835 } 1837 }
1836 STbp->buffer_bytes = bytes - transfer; 1838 STbp->buffer_bytes = bytes - transfer;
1837 } else { 1839 } else {
1838 scsi_release_request(SRpnt); 1840 st_release_request(SRpnt);
1839 SRpnt = *aSRpnt = NULL; 1841 SRpnt = *aSRpnt = NULL;
1840 if (transfer == blks) { /* We did not get anything, error */ 1842 if (transfer == blks) { /* We did not get anything, error */
1841 printk(KERN_NOTICE "%s: Incorrect block size.\n", name); 1843 printk(KERN_NOTICE "%s: Incorrect block size.\n", name);
@@ -1929,7 +1931,7 @@ st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
1929 ssize_t retval = 0; 1931 ssize_t retval = 0;
1930 ssize_t i, transfer; 1932 ssize_t i, transfer;
1931 int special, do_dio = 0; 1933 int special, do_dio = 0;
1932 struct scsi_request *SRpnt = NULL; 1934 struct st_request *SRpnt = NULL;
1933 struct scsi_tape *STp = filp->private_data; 1935 struct scsi_tape *STp = filp->private_data;
1934 struct st_modedef *STm; 1936 struct st_modedef *STm;
1935 struct st_partstat *STps; 1937 struct st_partstat *STps;
@@ -2054,11 +2056,11 @@ st_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
2054 2056
2055 out: 2057 out:
2056 if (SRpnt != NULL) { 2058 if (SRpnt != NULL) {
2057 scsi_release_request(SRpnt); 2059 st_release_request(SRpnt);
2058 SRpnt = NULL; 2060 SRpnt = NULL;
2059 } 2061 }
2060 if (do_dio) { 2062 if (do_dio) {
2061 release_buffering(STp); 2063 release_buffering(STp, 1);
2062 STbp->buffer_bytes = 0; 2064 STbp->buffer_bytes = 0;
2063 } 2065 }
2064 up(&STp->lock); 2066 up(&STp->lock);
@@ -2284,7 +2286,7 @@ static int st_set_options(struct scsi_tape *STp, long options)
2284static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs) 2286static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2285{ 2287{
2286 unsigned char cmd[MAX_COMMAND_SIZE]; 2288 unsigned char cmd[MAX_COMMAND_SIZE];
2287 struct scsi_request *SRpnt = NULL; 2289 struct st_request *SRpnt = NULL;
2288 2290
2289 memset(cmd, 0, MAX_COMMAND_SIZE); 2291 memset(cmd, 0, MAX_COMMAND_SIZE);
2290 cmd[0] = MODE_SENSE; 2292 cmd[0] = MODE_SENSE;
@@ -2298,7 +2300,7 @@ static int read_mode_page(struct scsi_tape *STp, int page, int omit_block_descs)
2298 if (SRpnt == NULL) 2300 if (SRpnt == NULL)
2299 return (STp->buffer)->syscall_result; 2301 return (STp->buffer)->syscall_result;
2300 2302
2301 scsi_release_request(SRpnt); 2303 st_release_request(SRpnt);
2302 2304
2303 return (STp->buffer)->syscall_result; 2305 return (STp->buffer)->syscall_result;
2304} 2306}
@@ -2310,7 +2312,7 @@ static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2310{ 2312{
2311 int pgo; 2313 int pgo;
2312 unsigned char cmd[MAX_COMMAND_SIZE]; 2314 unsigned char cmd[MAX_COMMAND_SIZE];
2313 struct scsi_request *SRpnt = NULL; 2315 struct st_request *SRpnt = NULL;
2314 2316
2315 memset(cmd, 0, MAX_COMMAND_SIZE); 2317 memset(cmd, 0, MAX_COMMAND_SIZE);
2316 cmd[0] = MODE_SELECT; 2318 cmd[0] = MODE_SELECT;
@@ -2329,7 +2331,7 @@ static int write_mode_page(struct scsi_tape *STp, int page, int slow)
2329 if (SRpnt == NULL) 2331 if (SRpnt == NULL)
2330 return (STp->buffer)->syscall_result; 2332 return (STp->buffer)->syscall_result;
2331 2333
2332 scsi_release_request(SRpnt); 2334 st_release_request(SRpnt);
2333 2335
2334 return (STp->buffer)->syscall_result; 2336 return (STp->buffer)->syscall_result;
2335} 2337}
@@ -2412,7 +2414,7 @@ static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_cod
2412 DEB( char *name = tape_name(STp); ) 2414 DEB( char *name = tape_name(STp); )
2413 unsigned char cmd[MAX_COMMAND_SIZE]; 2415 unsigned char cmd[MAX_COMMAND_SIZE];
2414 struct st_partstat *STps; 2416 struct st_partstat *STps;
2415 struct scsi_request *SRpnt; 2417 struct st_request *SRpnt;
2416 2418
2417 if (STp->ready != ST_READY && !load_code) { 2419 if (STp->ready != ST_READY && !load_code) {
2418 if (STp->ready == ST_NO_TAPE) 2420 if (STp->ready == ST_NO_TAPE)
@@ -2455,7 +2457,7 @@ static int do_load_unload(struct scsi_tape *STp, struct file *filp, int load_cod
2455 return (STp->buffer)->syscall_result; 2457 return (STp->buffer)->syscall_result;
2456 2458
2457 retval = (STp->buffer)->syscall_result; 2459 retval = (STp->buffer)->syscall_result;
2458 scsi_release_request(SRpnt); 2460 st_release_request(SRpnt);
2459 2461
2460 if (!retval) { /* SCSI command successful */ 2462 if (!retval) { /* SCSI command successful */
2461 2463
@@ -2503,7 +2505,7 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
2503 int ioctl_result; 2505 int ioctl_result;
2504 int chg_eof = 1; 2506 int chg_eof = 1;
2505 unsigned char cmd[MAX_COMMAND_SIZE]; 2507 unsigned char cmd[MAX_COMMAND_SIZE];
2506 struct scsi_request *SRpnt; 2508 struct st_request *SRpnt;
2507 struct st_partstat *STps; 2509 struct st_partstat *STps;
2508 int fileno, blkno, at_sm, undone; 2510 int fileno, blkno, at_sm, undone;
2509 int datalen = 0, direction = DMA_NONE; 2511 int datalen = 0, direction = DMA_NONE;
@@ -2757,7 +2759,7 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
2757 ioctl_result = (STp->buffer)->syscall_result; 2759 ioctl_result = (STp->buffer)->syscall_result;
2758 2760
2759 if (!ioctl_result) { /* SCSI command successful */ 2761 if (!ioctl_result) { /* SCSI command successful */
2760 scsi_release_request(SRpnt); 2762 st_release_request(SRpnt);
2761 SRpnt = NULL; 2763 SRpnt = NULL;
2762 STps->drv_block = blkno; 2764 STps->drv_block = blkno;
2763 STps->drv_file = fileno; 2765 STps->drv_file = fileno;
@@ -2872,7 +2874,7 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
2872 /* Try the other possible state of Page Format if not 2874 /* Try the other possible state of Page Format if not
2873 already tried */ 2875 already tried */
2874 STp->use_pf = !STp->use_pf | PF_TESTED; 2876 STp->use_pf = !STp->use_pf | PF_TESTED;
2875 scsi_release_request(SRpnt); 2877 st_release_request(SRpnt);
2876 SRpnt = NULL; 2878 SRpnt = NULL;
2877 return st_int_ioctl(STp, cmd_in, arg); 2879 return st_int_ioctl(STp, cmd_in, arg);
2878 } 2880 }
@@ -2882,7 +2884,7 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
2882 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK) 2884 if (cmdstatp->sense_hdr.sense_key == BLANK_CHECK)
2883 STps->eof = ST_EOD; 2885 STps->eof = ST_EOD;
2884 2886
2885 scsi_release_request(SRpnt); 2887 st_release_request(SRpnt);
2886 SRpnt = NULL; 2888 SRpnt = NULL;
2887 } 2889 }
2888 2890
@@ -2898,7 +2900,7 @@ static int get_location(struct scsi_tape *STp, unsigned int *block, int *partiti
2898{ 2900{
2899 int result; 2901 int result;
2900 unsigned char scmd[MAX_COMMAND_SIZE]; 2902 unsigned char scmd[MAX_COMMAND_SIZE];
2901 struct scsi_request *SRpnt; 2903 struct st_request *SRpnt;
2902 DEB( char *name = tape_name(STp); ) 2904 DEB( char *name = tape_name(STp); )
2903 2905
2904 if (STp->ready != ST_READY) 2906 if (STp->ready != ST_READY)
@@ -2944,7 +2946,7 @@ static int get_location(struct scsi_tape *STp, unsigned int *block, int *partiti
2944 DEBC(printk(ST_DEB_MSG "%s: Got tape pos. blk %d part %d.\n", name, 2946 DEBC(printk(ST_DEB_MSG "%s: Got tape pos. blk %d part %d.\n", name,
2945 *block, *partition)); 2947 *block, *partition));
2946 } 2948 }
2947 scsi_release_request(SRpnt); 2949 st_release_request(SRpnt);
2948 SRpnt = NULL; 2950 SRpnt = NULL;
2949 2951
2950 return result; 2952 return result;
@@ -2961,7 +2963,7 @@ static int set_location(struct scsi_tape *STp, unsigned int block, int partition
2961 unsigned int blk; 2963 unsigned int blk;
2962 int timeout; 2964 int timeout;
2963 unsigned char scmd[MAX_COMMAND_SIZE]; 2965 unsigned char scmd[MAX_COMMAND_SIZE];
2964 struct scsi_request *SRpnt; 2966 struct st_request *SRpnt;
2965 DEB( char *name = tape_name(STp); ) 2967 DEB( char *name = tape_name(STp); )
2966 2968
2967 if (STp->ready != ST_READY) 2969 if (STp->ready != ST_READY)
@@ -3047,7 +3049,7 @@ static int set_location(struct scsi_tape *STp, unsigned int block, int partition
3047 result = 0; 3049 result = 0;
3048 } 3050 }
3049 3051
3050 scsi_release_request(SRpnt); 3052 st_release_request(SRpnt);
3051 SRpnt = NULL; 3053 SRpnt = NULL;
3052 3054
3053 return result; 3055 return result;
@@ -3577,7 +3579,7 @@ static long st_compat_ioctl(struct file *file, unsigned int cmd, unsigned long a
3577static struct st_buffer * 3579static struct st_buffer *
3578 new_tape_buffer(int from_initialization, int need_dma, int max_sg) 3580 new_tape_buffer(int from_initialization, int need_dma, int max_sg)
3579{ 3581{
3580 int i, got = 0, segs = 0; 3582 int i, got = 0;
3581 gfp_t priority; 3583 gfp_t priority;
3582 struct st_buffer *tb; 3584 struct st_buffer *tb;
3583 3585
@@ -3594,10 +3596,8 @@ static struct st_buffer *
3594 return NULL; 3596 return NULL;
3595 } 3597 }
3596 memset(tb, 0, i); 3598 memset(tb, 0, i);
3597 tb->frp_segs = tb->orig_frp_segs = segs; 3599 tb->frp_segs = tb->orig_frp_segs = 0;
3598 tb->use_sg = max_sg; 3600 tb->use_sg = max_sg;
3599 if (segs > 0)
3600 tb->b_data = page_address(tb->sg[0].page);
3601 tb->frp = (struct st_buf_fragment *)(&(tb->sg[0]) + max_sg); 3601 tb->frp = (struct st_buf_fragment *)(&(tb->sg[0]) + max_sg);
3602 3602
3603 tb->in_use = 1; 3603 tb->in_use = 1;
@@ -3628,7 +3628,7 @@ static int enlarge_buffer(struct st_buffer * STbuffer, int new_size, int need_dm
3628 priority = GFP_KERNEL | __GFP_NOWARN; 3628 priority = GFP_KERNEL | __GFP_NOWARN;
3629 if (need_dma) 3629 if (need_dma)
3630 priority |= GFP_DMA; 3630 priority |= GFP_DMA;
3631 for (b_size = PAGE_SIZE, order=0; 3631 for (b_size = PAGE_SIZE, order=0; order <= 6 &&
3632 b_size < new_size - STbuffer->buffer_size; 3632 b_size < new_size - STbuffer->buffer_size;
3633 order++, b_size *= 2) 3633 order++, b_size *= 2)
3634 ; /* empty */ 3634 ; /* empty */
@@ -3670,6 +3670,7 @@ static void normalize_buffer(struct st_buffer * STbuffer)
3670 } 3670 }
3671 STbuffer->frp_segs = STbuffer->orig_frp_segs; 3671 STbuffer->frp_segs = STbuffer->orig_frp_segs;
3672 STbuffer->frp_sg_current = 0; 3672 STbuffer->frp_sg_current = 0;
3673 STbuffer->sg_segs = 0;
3673} 3674}
3674 3675
3675 3676
@@ -3882,7 +3883,6 @@ static int st_probe(struct device *dev)
3882 struct st_buffer *buffer; 3883 struct st_buffer *buffer;
3883 int i, j, mode, dev_num, error; 3884 int i, j, mode, dev_num, error;
3884 char *stp; 3885 char *stp;
3885 u64 bounce_limit;
3886 3886
3887 if (SDp->type != TYPE_TAPE) 3887 if (SDp->type != TYPE_TAPE)
3888 return -ENODEV; 3888 return -ENODEV;
@@ -3892,7 +3892,8 @@ static int st_probe(struct device *dev)
3892 return -ENODEV; 3892 return -ENODEV;
3893 } 3893 }
3894 3894
3895 i = SDp->host->sg_tablesize; 3895 i = min(SDp->request_queue->max_hw_segments,
3896 SDp->request_queue->max_phys_segments);
3896 if (st_max_sg_segs < i) 3897 if (st_max_sg_segs < i)
3897 i = st_max_sg_segs; 3898 i = st_max_sg_segs;
3898 buffer = new_tape_buffer(1, (SDp->host)->unchecked_isa_dma, i); 3899 buffer = new_tape_buffer(1, (SDp->host)->unchecked_isa_dma, i);
@@ -3994,11 +3995,6 @@ static int st_probe(struct device *dev)
3994 tpnt->long_timeout = ST_LONG_TIMEOUT; 3995 tpnt->long_timeout = ST_LONG_TIMEOUT;
3995 tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma; 3996 tpnt->try_dio = try_direct_io && !SDp->host->unchecked_isa_dma;
3996 3997
3997 bounce_limit = scsi_calculate_bounce_limit(SDp->host) >> PAGE_SHIFT;
3998 if (bounce_limit > ULONG_MAX)
3999 bounce_limit = ULONG_MAX;
4000 tpnt->max_pfn = bounce_limit;
4001
4002 for (i = 0; i < ST_NBR_MODES; i++) { 3998 for (i = 0; i < ST_NBR_MODES; i++) {
4003 STm = &(tpnt->modes[i]); 3999 STm = &(tpnt->modes[i]);
4004 STm->defined = 0; 4000 STm->defined = 0;
@@ -4077,9 +4073,9 @@ static int st_probe(struct device *dev)
4077 4073
4078 sdev_printk(KERN_WARNING, SDp, 4074 sdev_printk(KERN_WARNING, SDp,
4079 "Attached scsi tape %s", tape_name(tpnt)); 4075 "Attached scsi tape %s", tape_name(tpnt));
4080 printk(KERN_WARNING "%s: try direct i/o: %s (alignment %d B), max page reachable by HBA %lu\n", 4076 printk(KERN_WARNING "%s: try direct i/o: %s (alignment %d B)\n",
4081 tape_name(tpnt), tpnt->try_dio ? "yes" : "no", 4077 tape_name(tpnt), tpnt->try_dio ? "yes" : "no",
4082 queue_dma_alignment(SDp->request_queue) + 1, tpnt->max_pfn); 4078 queue_dma_alignment(SDp->request_queue) + 1);
4083 4079
4084 return 0; 4080 return 0;
4085 4081
@@ -4144,9 +4140,9 @@ static int st_remove(struct device *dev)
4144 } 4140 }
4145 } 4141 }
4146 4142
4147 down(&st_ref_sem); 4143 mutex_lock(&st_ref_mutex);
4148 kref_put(&tpnt->kref, scsi_tape_release); 4144 kref_put(&tpnt->kref, scsi_tape_release);
4149 up(&st_ref_sem); 4145 mutex_unlock(&st_ref_mutex);
4150 return 0; 4146 return 0;
4151 } 4147 }
4152 } 4148 }
@@ -4159,7 +4155,7 @@ static int st_remove(struct device *dev)
4159 * scsi_tape_release - Called to free the Scsi_Tape structure 4155 * scsi_tape_release - Called to free the Scsi_Tape structure
4160 * @kref: pointer to embedded kref 4156 * @kref: pointer to embedded kref
4161 * 4157 *
4162 * st_ref_sem must be held entering this routine. Because it is 4158 * st_ref_mutex must be held entering this routine. Because it is
4163 * called on last put, you should always use the scsi_tape_get() 4159 * called on last put, you should always use the scsi_tape_get()
4164 * scsi_tape_put() helpers which manipulate the semaphore directly 4160 * scsi_tape_put() helpers which manipulate the semaphore directly
4165 * and never do a direct kref_put(). 4161 * and never do a direct kref_put().
@@ -4183,25 +4179,6 @@ static void scsi_tape_release(struct kref *kref)
4183 return; 4179 return;
4184} 4180}
4185 4181
4186static void st_intr(struct scsi_cmnd *SCpnt)
4187{
4188 scsi_io_completion(SCpnt, (SCpnt->result ? 0: SCpnt->bufflen), 1);
4189}
4190
4191/*
4192 * st_init_command: only called via the scsi_cmd_ioctl (block SG_IO)
4193 * interface for REQ_BLOCK_PC commands.
4194 */
4195static int st_init_command(struct scsi_cmnd *SCpnt)
4196{
4197 if (!(SCpnt->request->flags & REQ_BLOCK_PC))
4198 return 0;
4199
4200 scsi_setup_blk_pc_cmnd(SCpnt, 0);
4201 SCpnt->done = st_intr;
4202 return 1;
4203}
4204
4205static int __init init_st(void) 4182static int __init init_st(void)
4206{ 4183{
4207 validate_options(); 4184 validate_options();
@@ -4390,34 +4367,6 @@ static void do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
4390 return; 4367 return;
4391} 4368}
4392 4369
4393
4394/* Pin down user pages and put them into a scatter gather list. Returns <= 0 if
4395 - mapping of all pages not successful
4396 - any page is above max_pfn
4397 (i.e., either completely successful or fails)
4398*/
4399static int st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
4400 unsigned long uaddr, size_t count, int rw,
4401 unsigned long max_pfn)
4402{
4403 int i, nr_pages;
4404
4405 nr_pages = sgl_map_user_pages(sgl, max_pages, uaddr, count, rw);
4406 if (nr_pages <= 0)
4407 return nr_pages;
4408
4409 for (i=0; i < nr_pages; i++) {
4410 if (page_to_pfn(sgl[i].page) > max_pfn)
4411 goto out_unmap;
4412 }
4413 return nr_pages;
4414
4415 out_unmap:
4416 sgl_unmap_user_pages(sgl, nr_pages, 0);
4417 return 0;
4418}
4419
4420
4421/* The following functions may be useful for a larger audience. */ 4370/* The following functions may be useful for a larger audience. */
4422static int sgl_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages, 4371static int sgl_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
4423 unsigned long uaddr, size_t count, int rw) 4372 unsigned long uaddr, size_t count, int rw)
diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h
index 790acac160bc..411209048d74 100644
--- a/drivers/scsi/st.h
+++ b/drivers/scsi/st.h
@@ -4,6 +4,7 @@
4 4
5#include <linux/completion.h> 5#include <linux/completion.h>
6#include <linux/kref.h> 6#include <linux/kref.h>
7#include <scsi/scsi_cmnd.h>
7 8
8/* Descriptor for analyzed sense data */ 9/* Descriptor for analyzed sense data */
9struct st_cmdstatus { 10struct st_cmdstatus {
@@ -17,6 +18,17 @@ struct st_cmdstatus {
17 u8 deferred; 18 u8 deferred;
18}; 19};
19 20
21struct scsi_tape;
22
23/* scsi tape command */
24struct st_request {
25 unsigned char cmd[MAX_COMMAND_SIZE];
26 unsigned char sense[SCSI_SENSE_BUFFERSIZE];
27 int result;
28 struct scsi_tape *stp;
29 struct completion *waiting;
30};
31
20/* The tape buffer descriptor. */ 32/* The tape buffer descriptor. */
21struct st_buffer { 33struct st_buffer {
22 unsigned char in_use; 34 unsigned char in_use;
@@ -28,7 +40,7 @@ struct st_buffer {
28 int read_pointer; 40 int read_pointer;
29 int writing; 41 int writing;
30 int syscall_result; 42 int syscall_result;
31 struct scsi_request *last_SRpnt; 43 struct st_request *last_SRpnt;
32 struct st_cmdstatus cmdstat; 44 struct st_cmdstatus cmdstat;
33 unsigned char *b_data; 45 unsigned char *b_data;
34 unsigned short use_sg; /* zero or max number of s/g segments for this adapter */ 46 unsigned short use_sg; /* zero or max number of s/g segments for this adapter */
diff --git a/drivers/scsi/sun3_NCR5380.c b/drivers/scsi/sun3_NCR5380.c
index c041bfd56e12..25cced91c8a6 100644
--- a/drivers/scsi/sun3_NCR5380.c
+++ b/drivers/scsi/sun3_NCR5380.c
@@ -70,6 +70,7 @@
70 * 70 *
71 */ 71 */
72#include <scsi/scsi_dbg.h> 72#include <scsi/scsi_dbg.h>
73#include <scsi/scsi_transport_spi.h>
73 74
74/* 75/*
75 * Further development / testing that should be done : 76 * Further development / testing that should be done :
@@ -2378,7 +2379,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
2378 * 3..length+1 arguments 2379 * 3..length+1 arguments
2379 * 2380 *
2380 * Start the extended message buffer with the EXTENDED_MESSAGE 2381 * Start the extended message buffer with the EXTENDED_MESSAGE
2381 * byte, since scsi_print_msg() wants the whole thing. 2382 * byte, since spi_print_msg() wants the whole thing.
2382 */ 2383 */
2383 extended_msg[0] = EXTENDED_MESSAGE; 2384 extended_msg[0] = EXTENDED_MESSAGE;
2384 /* Accept first byte by clearing ACK */ 2385 /* Accept first byte by clearing ACK */
@@ -2431,7 +2432,7 @@ static void NCR5380_information_transfer (struct Scsi_Host *instance)
2431 default: 2432 default:
2432 if (!tmp) { 2433 if (!tmp) {
2433 printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO); 2434 printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO);
2434 scsi_print_msg (extended_msg); 2435 spi_print_msg(extended_msg);
2435 printk("\n"); 2436 printk("\n");
2436 } else if (tmp != EXTENDED_MESSAGE) 2437 } else if (tmp != EXTENDED_MESSAGE)
2437 printk(KERN_DEBUG "scsi%d: rejecting unknown " 2438 printk(KERN_DEBUG "scsi%d: rejecting unknown "
@@ -2566,7 +2567,7 @@ static void NCR5380_reselect (struct Scsi_Host *instance)
2566 2567
2567 if (!(msg[0] & 0x80)) { 2568 if (!(msg[0] & 0x80)) {
2568 printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO); 2569 printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO);
2569 scsi_print_msg(msg); 2570 spi_print_msg(msg);
2570 do_abort(instance); 2571 do_abort(instance);
2571 return; 2572 return;
2572 } 2573 }
diff --git a/drivers/scsi/sym53c8xx_2/sym_defs.h b/drivers/scsi/sym53c8xx_2/sym_defs.h
index 2d9437d7242b..3659dd7b9d76 100644
--- a/drivers/scsi/sym53c8xx_2/sym_defs.h
+++ b/drivers/scsi/sym53c8xx_2/sym_defs.h
@@ -40,7 +40,7 @@
40#ifndef SYM_DEFS_H 40#ifndef SYM_DEFS_H
41#define SYM_DEFS_H 41#define SYM_DEFS_H
42 42
43#define SYM_VERSION "2.2.1" 43#define SYM_VERSION "2.2.2"
44#define SYM_DRIVER_NAME "sym-" SYM_VERSION 44#define SYM_DRIVER_NAME "sym-" SYM_VERSION
45 45
46/* 46/*
diff --git a/drivers/scsi/sym53c8xx_2/sym_fw.c b/drivers/scsi/sym53c8xx_2/sym_fw.c
index fd36cf9858cb..9916a2a22558 100644
--- a/drivers/scsi/sym53c8xx_2/sym_fw.c
+++ b/drivers/scsi/sym53c8xx_2/sym_fw.c
@@ -37,11 +37,7 @@
37 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 37 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
38 */ 38 */
39 39
40#ifdef __FreeBSD__
41#include <dev/sym/sym_glue.h>
42#else
43#include "sym_glue.h" 40#include "sym_glue.h"
44#endif
45 41
46/* 42/*
47 * Macros used for all firmwares. 43 * Macros used for all firmwares.
@@ -60,19 +56,12 @@
60#define SYM_FWA_SCR sym_fw1a_scr 56#define SYM_FWA_SCR sym_fw1a_scr
61#define SYM_FWB_SCR sym_fw1b_scr 57#define SYM_FWB_SCR sym_fw1b_scr
62#define SYM_FWZ_SCR sym_fw1z_scr 58#define SYM_FWZ_SCR sym_fw1z_scr
63#ifdef __FreeBSD__
64#include <dev/sym/sym_fw1.h>
65#else
66#include "sym_fw1.h" 59#include "sym_fw1.h"
67#endif
68static struct sym_fwa_ofs sym_fw1a_ofs = { 60static struct sym_fwa_ofs sym_fw1a_ofs = {
69 SYM_GEN_FW_A(struct SYM_FWA_SCR) 61 SYM_GEN_FW_A(struct SYM_FWA_SCR)
70}; 62};
71static struct sym_fwb_ofs sym_fw1b_ofs = { 63static struct sym_fwb_ofs sym_fw1b_ofs = {
72 SYM_GEN_FW_B(struct SYM_FWB_SCR) 64 SYM_GEN_FW_B(struct SYM_FWB_SCR)
73#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
74 SYM_GEN_B(struct SYM_FWB_SCR, data_io)
75#endif
76}; 65};
77static struct sym_fwz_ofs sym_fw1z_ofs = { 66static struct sym_fwz_ofs sym_fw1z_ofs = {
78 SYM_GEN_FW_Z(struct SYM_FWZ_SCR) 67 SYM_GEN_FW_Z(struct SYM_FWZ_SCR)
@@ -88,19 +77,12 @@ static struct sym_fwz_ofs sym_fw1z_ofs = {
88#define SYM_FWA_SCR sym_fw2a_scr 77#define SYM_FWA_SCR sym_fw2a_scr
89#define SYM_FWB_SCR sym_fw2b_scr 78#define SYM_FWB_SCR sym_fw2b_scr
90#define SYM_FWZ_SCR sym_fw2z_scr 79#define SYM_FWZ_SCR sym_fw2z_scr
91#ifdef __FreeBSD__
92#include <dev/sym/sym_fw2.h>
93#else
94#include "sym_fw2.h" 80#include "sym_fw2.h"
95#endif
96static struct sym_fwa_ofs sym_fw2a_ofs = { 81static struct sym_fwa_ofs sym_fw2a_ofs = {
97 SYM_GEN_FW_A(struct SYM_FWA_SCR) 82 SYM_GEN_FW_A(struct SYM_FWA_SCR)
98}; 83};
99static struct sym_fwb_ofs sym_fw2b_ofs = { 84static struct sym_fwb_ofs sym_fw2b_ofs = {
100 SYM_GEN_FW_B(struct SYM_FWB_SCR) 85 SYM_GEN_FW_B(struct SYM_FWB_SCR)
101#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
102 SYM_GEN_B(struct SYM_FWB_SCR, data_io)
103#endif
104 SYM_GEN_B(struct SYM_FWB_SCR, start64) 86 SYM_GEN_B(struct SYM_FWB_SCR, start64)
105 SYM_GEN_B(struct SYM_FWB_SCR, pm_handle) 87 SYM_GEN_B(struct SYM_FWB_SCR, pm_handle)
106}; 88};
diff --git a/drivers/scsi/sym53c8xx_2/sym_fw.h b/drivers/scsi/sym53c8xx_2/sym_fw.h
index 43f6810a4045..66ec35beab5b 100644
--- a/drivers/scsi/sym53c8xx_2/sym_fw.h
+++ b/drivers/scsi/sym53c8xx_2/sym_fw.h
@@ -92,9 +92,6 @@ struct sym_fwa_ofs {
92}; 92};
93struct sym_fwb_ofs { 93struct sym_fwb_ofs {
94 SYM_GEN_FW_B(u_short) 94 SYM_GEN_FW_B(u_short)
95#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
96 SYM_GEN_B(u_short, data_io)
97#endif
98 SYM_GEN_B(u_short, start64) 95 SYM_GEN_B(u_short, start64)
99 SYM_GEN_B(u_short, pm_handle) 96 SYM_GEN_B(u_short, pm_handle)
100}; 97};
@@ -111,9 +108,6 @@ struct sym_fwa_ba {
111}; 108};
112struct sym_fwb_ba { 109struct sym_fwb_ba {
113 SYM_GEN_FW_B(u32) 110 SYM_GEN_FW_B(u32)
114#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
115 SYM_GEN_B(u32, data_io)
116#endif
117 SYM_GEN_B(u32, start64); 111 SYM_GEN_B(u32, start64);
118 SYM_GEN_B(u32, pm_handle); 112 SYM_GEN_B(u32, pm_handle);
119}; 113};
diff --git a/drivers/scsi/sym53c8xx_2/sym_fw1.h b/drivers/scsi/sym53c8xx_2/sym_fw1.h
index cdd92d82f4b2..7b39f4a35e98 100644
--- a/drivers/scsi/sym53c8xx_2/sym_fw1.h
+++ b/drivers/scsi/sym53c8xx_2/sym_fw1.h
@@ -197,12 +197,6 @@ struct SYM_FWB_SCR {
197 u32 bad_status [ 7]; 197 u32 bad_status [ 7];
198 u32 wsr_ma_helper [ 4]; 198 u32 wsr_ma_helper [ 4];
199 199
200#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
201 /* Unknown direction handling */
202 u32 data_io [ 2];
203 u32 data_io_com [ 8];
204 u32 data_io_out [ 7];
205#endif
206 /* Data area */ 200 /* Data area */
207 u32 zero [ 1]; 201 u32 zero [ 1];
208 u32 scratch [ 1]; 202 u32 scratch [ 1];
@@ -1747,48 +1741,6 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = {
1747 SCR_JUMP, 1741 SCR_JUMP,
1748 PADDR_A (dispatch), 1742 PADDR_A (dispatch),
1749 1743
1750#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1751}/*-------------------------< DATA_IO >--------------------------*/,{
1752 /*
1753 * We jump here if the data direction was unknown at the
1754 * time we had to queue the command to the scripts processor.
1755 * Pointers had been set as follow in this situation:
1756 * savep --> DATA_IO
1757 * lastp --> start pointer when DATA_IN
1758 * wlastp --> start pointer when DATA_OUT
1759 * This script sets savep and lastp according to the
1760 * direction chosen by the target.
1761 */
1762 SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
1763 PADDR_B (data_io_out),
1764}/*-------------------------< DATA_IO_COM >----------------------*/,{
1765 /*
1766 * Direction is DATA IN.
1767 */
1768 SCR_COPY (4),
1769 HADDR_1 (ccb_head.lastp),
1770 HADDR_1 (ccb_head.savep),
1771 /*
1772 * Jump to the SCRIPTS according to actual direction.
1773 */
1774 SCR_COPY (4),
1775 HADDR_1 (ccb_head.savep),
1776 RADDR_1 (temp),
1777 SCR_RETURN,
1778 0,
1779}/*-------------------------< DATA_IO_OUT >----------------------*/,{
1780 /*
1781 * Direction is DATA OUT.
1782 */
1783 SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
1784 0,
1785 SCR_COPY (4),
1786 HADDR_1 (ccb_head.wlastp),
1787 HADDR_1 (ccb_head.lastp),
1788 SCR_JUMP,
1789 PADDR_B(data_io_com),
1790#endif /* SYM_OPT_HANDLE_DIR_UNKNOWN */
1791
1792}/*-------------------------< ZERO >-----------------------------*/,{ 1744}/*-------------------------< ZERO >-----------------------------*/,{
1793 SCR_DATA_ZERO, 1745 SCR_DATA_ZERO,
1794}/*-------------------------< SCRATCH >--------------------------*/,{ 1746}/*-------------------------< SCRATCH >--------------------------*/,{
diff --git a/drivers/scsi/sym53c8xx_2/sym_fw2.h b/drivers/scsi/sym53c8xx_2/sym_fw2.h
index 7ea7151f5d1d..851f2706f220 100644
--- a/drivers/scsi/sym53c8xx_2/sym_fw2.h
+++ b/drivers/scsi/sym53c8xx_2/sym_fw2.h
@@ -191,13 +191,6 @@ struct SYM_FWB_SCR {
191 u32 pm_wsr_handle [ 38]; 191 u32 pm_wsr_handle [ 38];
192 u32 wsr_ma_helper [ 4]; 192 u32 wsr_ma_helper [ 4];
193 193
194#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
195 /* Unknown direction handling */
196 u32 data_io [ 2];
197 u32 data_io_in [ 2];
198 u32 data_io_com [ 6];
199 u32 data_io_out [ 8];
200#endif
201 /* Data area */ 194 /* Data area */
202 u32 zero [ 1]; 195 u32 zero [ 1];
203 u32 scratch [ 1]; 196 u32 scratch [ 1];
@@ -1838,51 +1831,6 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = {
1838 SCR_JUMP, 1831 SCR_JUMP,
1839 PADDR_A (dispatch), 1832 PADDR_A (dispatch),
1840 1833
1841#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1842}/*-------------------------< DATA_IO >--------------------------*/,{
1843 /*
1844 * We jump here if the data direction was unknown at the
1845 * time we had to queue the command to the scripts processor.
1846 * Pointers had been set as follow in this situation:
1847 * savep --> DATA_IO
1848 * lastp --> start pointer when DATA_IN
1849 * wlastp --> start pointer when DATA_OUT
1850 * This script sets savep and lastp according to the
1851 * direction chosen by the target.
1852 */
1853 SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
1854 PADDR_B (data_io_out),
1855}/*-------------------------< DATA_IO_IN >-----------------------*/,{
1856 /*
1857 * Direction is DATA IN.
1858 */
1859 SCR_LOAD_REL (scratcha, 4),
1860 offsetof (struct sym_ccb, phys.head.lastp),
1861}/*-------------------------< DATA_IO_COM >----------------------*/,{
1862 SCR_STORE_REL (scratcha, 4),
1863 offsetof (struct sym_ccb, phys.head.savep),
1864
1865 /*
1866 * Jump to the SCRIPTS according to actual direction.
1867 */
1868 SCR_LOAD_REL (temp, 4),
1869 offsetof (struct sym_ccb, phys.head.savep),
1870 SCR_RETURN,
1871 0,
1872}/*-------------------------< DATA_IO_OUT >----------------------*/,{
1873 /*
1874 * Direction is DATA OUT.
1875 */
1876 SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
1877 0,
1878 SCR_LOAD_REL (scratcha, 4),
1879 offsetof (struct sym_ccb, phys.head.wlastp),
1880 SCR_STORE_REL (scratcha, 4),
1881 offsetof (struct sym_ccb, phys.head.lastp),
1882 SCR_JUMP,
1883 PADDR_B(data_io_com),
1884#endif /* SYM_OPT_HANDLE_DIR_UNKNOWN */
1885
1886}/*-------------------------< ZERO >-----------------------------*/,{ 1834}/*-------------------------< ZERO >-----------------------------*/,{
1887 SCR_DATA_ZERO, 1835 SCR_DATA_ZERO,
1888}/*-------------------------< SCRATCH >--------------------------*/,{ 1836}/*-------------------------< SCRATCH >--------------------------*/,{
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 7fc0b97173e1..1fffd2b3c654 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -514,9 +514,10 @@ static inline int sym_setup_cdb(struct sym_hcb *np, struct scsi_cmnd *cmd, struc
514 */ 514 */
515int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp) 515int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp)
516{ 516{
517 int dir;
518 struct sym_tcb *tp = &np->target[cp->target]; 517 struct sym_tcb *tp = &np->target[cp->target];
519 struct sym_lcb *lp = sym_lp(tp, cp->lun); 518 struct sym_lcb *lp = sym_lp(tp, cp->lun);
519 u32 lastp, goalp;
520 int dir;
520 521
521 /* 522 /*
522 * Build the CDB. 523 * Build the CDB.
@@ -534,15 +535,47 @@ int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct s
534 sym_set_cam_status(cmd, DID_ERROR); 535 sym_set_cam_status(cmd, DID_ERROR);
535 goto out_abort; 536 goto out_abort;
536 } 537 }
538
539 /*
540 * No segments means no data.
541 */
542 if (!cp->segments)
543 dir = DMA_NONE;
537 } else { 544 } else {
538 cp->data_len = 0; 545 cp->data_len = 0;
539 cp->segments = 0; 546 cp->segments = 0;
540 } 547 }
541 548
542 /* 549 /*
543 * Set data pointers. 550 * Set the data pointer.
544 */ 551 */
545 sym_setup_data_pointers(np, cp, dir); 552 switch (dir) {
553 case DMA_BIDIRECTIONAL:
554 printk("%s: got DMA_BIDIRECTIONAL command", sym_name(np));
555 sym_set_cam_status(cmd, DID_ERROR);
556 goto out_abort;
557 case DMA_TO_DEVICE:
558 goalp = SCRIPTA_BA(np, data_out2) + 8;
559 lastp = goalp - 8 - (cp->segments * (2*4));
560 break;
561 case DMA_FROM_DEVICE:
562 cp->host_flags |= HF_DATA_IN;
563 goalp = SCRIPTA_BA(np, data_in2) + 8;
564 lastp = goalp - 8 - (cp->segments * (2*4));
565 break;
566 case DMA_NONE:
567 default:
568 lastp = goalp = SCRIPTB_BA(np, no_data);
569 break;
570 }
571
572 /*
573 * Set all pointers values needed by SCRIPTS.
574 */
575 cp->phys.head.lastp = cpu_to_scr(lastp);
576 cp->phys.head.savep = cpu_to_scr(lastp);
577 cp->startp = cp->phys.head.savep;
578 cp->goalp = cpu_to_scr(goalp);
546 579
547 /* 580 /*
548 * When `#ifed 1', the code below makes the driver 581 * When `#ifed 1', the code below makes the driver
@@ -563,10 +596,7 @@ int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct s
563 /* 596 /*
564 * activate this job. 597 * activate this job.
565 */ 598 */
566 if (lp) 599 sym_start_next_ccbs(np, lp, 2);
567 sym_start_next_ccbs(np, lp, 2);
568 else
569 sym_put_start_queue(np, cp);
570 return 0; 600 return 0;
571 601
572out_abort: 602out_abort:
@@ -981,15 +1011,14 @@ static int device_queue_depth(struct sym_hcb *np, int target, int lun)
981 1011
982static int sym53c8xx_slave_alloc(struct scsi_device *sdev) 1012static int sym53c8xx_slave_alloc(struct scsi_device *sdev)
983{ 1013{
984 struct sym_hcb *np; 1014 struct sym_hcb *np = sym_get_hcb(sdev->host);
985 struct sym_tcb *tp; 1015 struct sym_tcb *tp = &np->target[sdev->id];
1016 struct sym_lcb *lp;
986 1017
987 if (sdev->id >= SYM_CONF_MAX_TARGET || sdev->lun >= SYM_CONF_MAX_LUN) 1018 if (sdev->id >= SYM_CONF_MAX_TARGET || sdev->lun >= SYM_CONF_MAX_LUN)
988 return -ENXIO; 1019 return -ENXIO;
989 1020
990 np = sym_get_hcb(sdev->host); 1021 tp->starget = sdev->sdev_target;
991 tp = &np->target[sdev->id];
992
993 /* 1022 /*
994 * Fail the device init if the device is flagged NOSCAN at BOOT in 1023 * Fail the device init if the device is flagged NOSCAN at BOOT in
995 * the NVRAM. This may speed up boot and maintain coherency with 1024 * the NVRAM. This may speed up boot and maintain coherency with
@@ -999,35 +1028,41 @@ static int sym53c8xx_slave_alloc(struct scsi_device *sdev)
999 * lun devices behave badly when asked for a non zero LUN. 1028 * lun devices behave badly when asked for a non zero LUN.
1000 */ 1029 */
1001 1030
1002 if ((tp->usrflags & SYM_SCAN_BOOT_DISABLED) || 1031 if (tp->usrflags & SYM_SCAN_BOOT_DISABLED) {
1003 ((tp->usrflags & SYM_SCAN_LUNS_DISABLED) && sdev->lun != 0)) {
1004 tp->usrflags &= ~SYM_SCAN_BOOT_DISABLED; 1032 tp->usrflags &= ~SYM_SCAN_BOOT_DISABLED;
1033 starget_printk(KERN_INFO, tp->starget,
1034 "Scan at boot disabled in NVRAM\n");
1005 return -ENXIO; 1035 return -ENXIO;
1006 } 1036 }
1007 1037
1008 tp->starget = sdev->sdev_target; 1038 if (tp->usrflags & SYM_SCAN_LUNS_DISABLED) {
1039 if (sdev->lun != 0)
1040 return -ENXIO;
1041 starget_printk(KERN_INFO, tp->starget,
1042 "Multiple LUNs disabled in NVRAM\n");
1043 }
1044
1045 lp = sym_alloc_lcb(np, sdev->id, sdev->lun);
1046 if (!lp)
1047 return -ENOMEM;
1048
1049 spi_min_period(tp->starget) = tp->usr_period;
1050 spi_max_width(tp->starget) = tp->usr_width;
1051
1009 return 0; 1052 return 0;
1010} 1053}
1011 1054
1012/* 1055/*
1013 * Linux entry point for device queue sizing. 1056 * Linux entry point for device queue sizing.
1014 */ 1057 */
1015static int sym53c8xx_slave_configure(struct scsi_device *device) 1058static int sym53c8xx_slave_configure(struct scsi_device *sdev)
1016{ 1059{
1017 struct sym_hcb *np = sym_get_hcb(device->host); 1060 struct sym_hcb *np = sym_get_hcb(sdev->host);
1018 struct sym_tcb *tp = &np->target[device->id]; 1061 struct sym_tcb *tp = &np->target[sdev->id];
1019 struct sym_lcb *lp; 1062 struct sym_lcb *lp = sym_lp(tp, sdev->lun);
1020 int reqtags, depth_to_use; 1063 int reqtags, depth_to_use;
1021 1064
1022 /* 1065 /*
1023 * Allocate the LCB if not yet.
1024 * If it fail, we may well be in the sh*t. :)
1025 */
1026 lp = sym_alloc_lcb(np, device->id, device->lun);
1027 if (!lp)
1028 return -ENOMEM;
1029
1030 /*
1031 * Get user flags. 1066 * Get user flags.
1032 */ 1067 */
1033 lp->curr_flags = lp->user_flags; 1068 lp->curr_flags = lp->user_flags;
@@ -1038,10 +1073,10 @@ static int sym53c8xx_slave_configure(struct scsi_device *device)
1038 * Use at least 2. 1073 * Use at least 2.
1039 * Donnot use more than our maximum. 1074 * Donnot use more than our maximum.
1040 */ 1075 */
1041 reqtags = device_queue_depth(np, device->id, device->lun); 1076 reqtags = device_queue_depth(np, sdev->id, sdev->lun);
1042 if (reqtags > tp->usrtags) 1077 if (reqtags > tp->usrtags)
1043 reqtags = tp->usrtags; 1078 reqtags = tp->usrtags;
1044 if (!device->tagged_supported) 1079 if (!sdev->tagged_supported)
1045 reqtags = 0; 1080 reqtags = 0;
1046#if 1 /* Avoid to locally queue commands for no good reasons */ 1081#if 1 /* Avoid to locally queue commands for no good reasons */
1047 if (reqtags > SYM_CONF_MAX_TAG) 1082 if (reqtags > SYM_CONF_MAX_TAG)
@@ -1050,19 +1085,30 @@ static int sym53c8xx_slave_configure(struct scsi_device *device)
1050#else 1085#else
1051 depth_to_use = (reqtags ? SYM_CONF_MAX_TAG : 2); 1086 depth_to_use = (reqtags ? SYM_CONF_MAX_TAG : 2);
1052#endif 1087#endif
1053 scsi_adjust_queue_depth(device, 1088 scsi_adjust_queue_depth(sdev,
1054 (device->tagged_supported ? 1089 (sdev->tagged_supported ?
1055 MSG_SIMPLE_TAG : 0), 1090 MSG_SIMPLE_TAG : 0),
1056 depth_to_use); 1091 depth_to_use);
1057 lp->s.scdev_depth = depth_to_use; 1092 lp->s.scdev_depth = depth_to_use;
1058 sym_tune_dev_queuing(tp, device->lun, reqtags); 1093 sym_tune_dev_queuing(tp, sdev->lun, reqtags);
1059 1094
1060 if (!spi_initial_dv(device->sdev_target)) 1095 if (!spi_initial_dv(sdev->sdev_target))
1061 spi_dv_device(device); 1096 spi_dv_device(sdev);
1062 1097
1063 return 0; 1098 return 0;
1064} 1099}
1065 1100
1101static void sym53c8xx_slave_destroy(struct scsi_device *sdev)
1102{
1103 struct sym_hcb *np = sym_get_hcb(sdev->host);
1104 struct sym_lcb *lp = sym_lp(&np->target[sdev->id], sdev->lun);
1105
1106 if (lp->itlq_tbl)
1107 sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK * 4, "ITLQ_TBL");
1108 kfree(lp->cb_tags);
1109 sym_mfree_dma(lp, sizeof(*lp), "LCB");
1110}
1111
1066/* 1112/*
1067 * Linux entry point for info() function 1113 * Linux entry point for info() function
1068 */ 1114 */
@@ -1497,7 +1543,7 @@ static int sym_setup_bus_dma_mask(struct sym_hcb *np)
1497{ 1543{
1498#if SYM_CONF_DMA_ADDRESSING_MODE > 0 1544#if SYM_CONF_DMA_ADDRESSING_MODE > 0
1499#if SYM_CONF_DMA_ADDRESSING_MODE == 1 1545#if SYM_CONF_DMA_ADDRESSING_MODE == 1
1500#define DMA_DAC_MASK 0x000000ffffffffffULL /* 40-bit */ 1546#define DMA_DAC_MASK DMA_40BIT_MASK
1501#elif SYM_CONF_DMA_ADDRESSING_MODE == 2 1547#elif SYM_CONF_DMA_ADDRESSING_MODE == 2
1502#define DMA_DAC_MASK DMA_64BIT_MASK 1548#define DMA_DAC_MASK DMA_64BIT_MASK
1503#endif 1549#endif
@@ -1926,6 +1972,7 @@ static struct scsi_host_template sym2_template = {
1926 .queuecommand = sym53c8xx_queue_command, 1972 .queuecommand = sym53c8xx_queue_command,
1927 .slave_alloc = sym53c8xx_slave_alloc, 1973 .slave_alloc = sym53c8xx_slave_alloc,
1928 .slave_configure = sym53c8xx_slave_configure, 1974 .slave_configure = sym53c8xx_slave_configure,
1975 .slave_destroy = sym53c8xx_slave_destroy,
1929 .eh_abort_handler = sym53c8xx_eh_abort_handler, 1976 .eh_abort_handler = sym53c8xx_eh_abort_handler,
1930 .eh_device_reset_handler = sym53c8xx_eh_device_reset_handler, 1977 .eh_device_reset_handler = sym53c8xx_eh_device_reset_handler,
1931 .eh_bus_reset_handler = sym53c8xx_eh_bus_reset_handler, 1978 .eh_bus_reset_handler = sym53c8xx_eh_bus_reset_handler,
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.h b/drivers/scsi/sym53c8xx_2/sym_glue.h
index d3d52f14d7c0..cc92d0c70cd7 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.h
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.h
@@ -68,7 +68,6 @@
68 */ 68 */
69#define SYM_CONF_TIMER_INTERVAL ((HZ+1)/2) 69#define SYM_CONF_TIMER_INTERVAL ((HZ+1)/2)
70 70
71#define SYM_OPT_HANDLE_DIR_UNKNOWN
72#define SYM_OPT_HANDLE_DEVICE_QUEUEING 71#define SYM_OPT_HANDLE_DEVICE_QUEUEING
73#define SYM_OPT_LIMIT_COMMAND_REORDERING 72#define SYM_OPT_LIMIT_COMMAND_REORDERING
74 73
@@ -268,6 +267,5 @@ void sym_xpt_async_bus_reset(struct sym_hcb *np);
268void sym_xpt_async_sent_bdr(struct sym_hcb *np, int target); 267void sym_xpt_async_sent_bdr(struct sym_hcb *np, int target);
269int sym_setup_data_and_start (struct sym_hcb *np, struct scsi_cmnd *csio, struct sym_ccb *cp); 268int sym_setup_data_and_start (struct sym_hcb *np, struct scsi_cmnd *csio, struct sym_ccb *cp);
270void sym_log_bus_error(struct sym_hcb *np); 269void sym_log_bus_error(struct sym_hcb *np);
271void sym_sniff_inquiry(struct sym_hcb *np, struct scsi_cmnd *cmd, int resid);
272 270
273#endif /* SYM_GLUE_H */ 271#endif /* SYM_GLUE_H */
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index 1564ca203a3e..8260f040d39c 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -40,6 +40,7 @@
40 40
41#include <linux/slab.h> 41#include <linux/slab.h>
42#include <asm/param.h> /* for timeouts in units of HZ */ 42#include <asm/param.h> /* for timeouts in units of HZ */
43#include <scsi/scsi_dbg.h>
43 44
44#include "sym_glue.h" 45#include "sym_glue.h"
45#include "sym_nvram.h" 46#include "sym_nvram.h"
@@ -70,32 +71,12 @@ static void sym_printl_hex(u_char *p, int n)
70 printf (".\n"); 71 printf (".\n");
71} 72}
72 73
73/*
74 * Print out the content of a SCSI message.
75 */
76static int sym_show_msg (u_char * msg)
77{
78 u_char i;
79 printf ("%x",*msg);
80 if (*msg==M_EXTENDED) {
81 for (i=1;i<8;i++) {
82 if (i-1>msg[1]) break;
83 printf ("-%x",msg[i]);
84 }
85 return (i+1);
86 } else if ((*msg & 0xf0) == 0x20) {
87 printf ("-%x",msg[1]);
88 return (2);
89 }
90 return (1);
91}
92
93static void sym_print_msg(struct sym_ccb *cp, char *label, u_char *msg) 74static void sym_print_msg(struct sym_ccb *cp, char *label, u_char *msg)
94{ 75{
95 sym_print_addr(cp->cmd, "%s: ", label); 76 sym_print_addr(cp->cmd, "%s: ", label);
96 77
97 sym_show_msg(msg); 78 spi_print_msg(msg);
98 printf(".\n"); 79 printf("\n");
99} 80}
100 81
101static void sym_print_nego_msg(struct sym_hcb *np, int target, char *label, u_char *msg) 82static void sym_print_nego_msg(struct sym_hcb *np, int target, char *label, u_char *msg)
@@ -103,8 +84,8 @@ static void sym_print_nego_msg(struct sym_hcb *np, int target, char *label, u_ch
103 struct sym_tcb *tp = &np->target[target]; 84 struct sym_tcb *tp = &np->target[target];
104 dev_info(&tp->starget->dev, "%s: ", label); 85 dev_info(&tp->starget->dev, "%s: ", label);
105 86
106 sym_show_msg(msg); 87 spi_print_msg(msg);
107 printf(".\n"); 88 printf("\n");
108} 89}
109 90
110/* 91/*
@@ -635,29 +616,6 @@ static __inline void sym_init_burst(struct sym_hcb *np, u_char bc)
635 } 616 }
636} 617}
637 618
638
639/*
640 * Print out the list of targets that have some flag disabled by user.
641 */
642static void sym_print_targets_flag(struct sym_hcb *np, int mask, char *msg)
643{
644 int cnt;
645 int i;
646
647 for (cnt = 0, i = 0 ; i < SYM_CONF_MAX_TARGET ; i++) {
648 if (i == np->myaddr)
649 continue;
650 if (np->target[i].usrflags & mask) {
651 if (!cnt++)
652 printf("%s: %s disabled for targets",
653 sym_name(np), msg);
654 printf(" %d", i);
655 }
656 }
657 if (cnt)
658 printf(".\n");
659}
660
661/* 619/*
662 * Save initial settings of some IO registers. 620 * Save initial settings of some IO registers.
663 * Assumed to have been set by BIOS. 621 * Assumed to have been set by BIOS.
@@ -962,7 +920,7 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru
962 tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED); 920 tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED);
963 tp->usrtags = SYM_SETUP_MAX_TAG; 921 tp->usrtags = SYM_SETUP_MAX_TAG;
964 922
965 sym_nvram_setup_target(np, i, nvram); 923 sym_nvram_setup_target(tp, i, nvram);
966 924
967 if (!tp->usrtags) 925 if (!tp->usrtags)
968 tp->usrflags &= ~SYM_TAGS_ENABLED; 926 tp->usrflags &= ~SYM_TAGS_ENABLED;
@@ -1005,13 +963,6 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru
1005 sym_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl, 963 sym_name(np), np->rv_scntl3, np->rv_dmode, np->rv_dcntl,
1006 np->rv_ctest3, np->rv_ctest4, np->rv_ctest5); 964 np->rv_ctest3, np->rv_ctest4, np->rv_ctest5);
1007 } 965 }
1008 /*
1009 * Let user be aware of targets that have some disable flags set.
1010 */
1011 sym_print_targets_flag(np, SYM_SCAN_BOOT_DISABLED, "SCAN AT BOOT");
1012 if (sym_verbose)
1013 sym_print_targets_flag(np, SYM_SCAN_LUNS_DISABLED,
1014 "SCAN FOR LUNS");
1015 966
1016 return 0; 967 return 0;
1017} 968}
@@ -1523,7 +1474,7 @@ static int sym_prepare_nego(struct sym_hcb *np, struct sym_ccb *cp, u_char *msgp
1523/* 1474/*
1524 * Insert a job into the start queue. 1475 * Insert a job into the start queue.
1525 */ 1476 */
1526void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp) 1477static void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp)
1527{ 1478{
1528 u_short qidx; 1479 u_short qidx;
1529 1480
@@ -3654,7 +3605,7 @@ static int sym_evaluate_dp(struct sym_hcb *np, struct sym_ccb *cp, u32 scr, int
3654 * If result is dp_sg = SYM_CONF_MAX_SG, then we are at the 3605 * If result is dp_sg = SYM_CONF_MAX_SG, then we are at the
3655 * end of the data. 3606 * end of the data.
3656 */ 3607 */
3657 tmp = scr_to_cpu(sym_goalp(cp)); 3608 tmp = scr_to_cpu(cp->goalp);
3658 dp_sg = SYM_CONF_MAX_SG; 3609 dp_sg = SYM_CONF_MAX_SG;
3659 if (dp_scr != tmp) 3610 if (dp_scr != tmp)
3660 dp_sg -= (tmp - 8 - (int)dp_scr) / (2*4); 3611 dp_sg -= (tmp - 8 - (int)dp_scr) / (2*4);
@@ -3761,7 +3712,7 @@ static void sym_modify_dp(struct sym_hcb *np, struct sym_tcb *tp, struct sym_ccb
3761 * And our alchemy:) allows to easily calculate the data 3712 * And our alchemy:) allows to easily calculate the data
3762 * script address we want to return for the next data phase. 3713 * script address we want to return for the next data phase.
3763 */ 3714 */
3764 dp_ret = cpu_to_scr(sym_goalp(cp)); 3715 dp_ret = cpu_to_scr(cp->goalp);
3765 dp_ret = dp_ret - 8 - (SYM_CONF_MAX_SG - dp_sg) * (2*4); 3716 dp_ret = dp_ret - 8 - (SYM_CONF_MAX_SG - dp_sg) * (2*4);
3766 3717
3767 /* 3718 /*
@@ -3857,7 +3808,7 @@ int sym_compute_residual(struct sym_hcb *np, struct sym_ccb *cp)
3857 * If all data has been transferred, 3808 * If all data has been transferred,
3858 * there is no residual. 3809 * there is no residual.
3859 */ 3810 */
3860 if (cp->phys.head.lastp == sym_goalp(cp)) 3811 if (cp->phys.head.lastp == cp->goalp)
3861 return resid; 3812 return resid;
3862 3813
3863 /* 3814 /*
@@ -4664,30 +4615,7 @@ struct sym_ccb *sym_get_ccb (struct sym_hcb *np, struct scsi_cmnd *cmd, u_char t
4664 goto out; 4615 goto out;
4665 cp = sym_que_entry(qp, struct sym_ccb, link_ccbq); 4616 cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
4666 4617
4667#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING 4618 {
4668 /*
4669 * If the LCB is not yet available and the LUN
4670 * has been probed ok, try to allocate the LCB.
4671 */
4672 if (!lp && sym_is_bit(tp->lun_map, ln)) {
4673 lp = sym_alloc_lcb(np, tn, ln);
4674 if (!lp)
4675 goto out_free;
4676 }
4677#endif
4678
4679 /*
4680 * If the LCB is not available here, then the
4681 * logical unit is not yet discovered. For those
4682 * ones only accept 1 SCSI IO per logical unit,
4683 * since we cannot allow disconnections.
4684 */
4685 if (!lp) {
4686 if (!sym_is_bit(tp->busy0_map, ln))
4687 sym_set_bit(tp->busy0_map, ln);
4688 else
4689 goto out_free;
4690 } else {
4691 /* 4619 /*
4692 * If we have been asked for a tagged command. 4620 * If we have been asked for a tagged command.
4693 */ 4621 */
@@ -4840,12 +4768,6 @@ void sym_free_ccb (struct sym_hcb *np, struct sym_ccb *cp)
4840 lp->head.resel_sa = 4768 lp->head.resel_sa =
4841 cpu_to_scr(SCRIPTB_BA(np, resel_bad_lun)); 4769 cpu_to_scr(SCRIPTB_BA(np, resel_bad_lun));
4842 } 4770 }
4843 /*
4844 * Otherwise, we only accept 1 IO per LUN.
4845 * Clear the bit that keeps track of this IO.
4846 */
4847 else
4848 sym_clr_bit(tp->busy0_map, cp->lun);
4849 4771
4850 /* 4772 /*
4851 * We donnot queue more than 1 ccb per target 4773 * We donnot queue more than 1 ccb per target
@@ -4997,20 +4919,7 @@ static void sym_init_tcb (struct sym_hcb *np, u_char tn)
4997struct sym_lcb *sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln) 4919struct sym_lcb *sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln)
4998{ 4920{
4999 struct sym_tcb *tp = &np->target[tn]; 4921 struct sym_tcb *tp = &np->target[tn];
5000 struct sym_lcb *lp = sym_lp(tp, ln); 4922 struct sym_lcb *lp = NULL;
5001
5002 /*
5003 * Already done, just return.
5004 */
5005 if (lp)
5006 return lp;
5007
5008 /*
5009 * Donnot allow LUN control block
5010 * allocation for not probed LUNs.
5011 */
5012 if (!sym_is_bit(tp->lun_map, ln))
5013 return NULL;
5014 4923
5015 /* 4924 /*
5016 * Initialize the target control block if not yet. 4925 * Initialize the target control block if not yet.
@@ -5082,13 +4991,7 @@ struct sym_lcb *sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln)
5082 lp->started_max = SYM_CONF_MAX_TASK; 4991 lp->started_max = SYM_CONF_MAX_TASK;
5083 lp->started_limit = SYM_CONF_MAX_TASK; 4992 lp->started_limit = SYM_CONF_MAX_TASK;
5084#endif 4993#endif
5085 /* 4994
5086 * If we are busy, count the IO.
5087 */
5088 if (sym_is_bit(tp->busy0_map, ln)) {
5089 lp->busy_itl = 1;
5090 sym_clr_bit(tp->busy0_map, ln);
5091 }
5092fail: 4995fail:
5093 return lp; 4996 return lp;
5094} 4997}
@@ -5103,12 +5006,6 @@ static void sym_alloc_lcb_tags (struct sym_hcb *np, u_char tn, u_char ln)
5103 int i; 5006 int i;
5104 5007
5105 /* 5008 /*
5106 * If LCB not available, try to allocate it.
5107 */
5108 if (!lp && !(lp = sym_alloc_lcb(np, tn, ln)))
5109 goto fail;
5110
5111 /*
5112 * Allocate the task table and and the tag allocation 5009 * Allocate the task table and and the tag allocation
5113 * circular buffer. We want both or none. 5010 * circular buffer. We want both or none.
5114 */ 5011 */
@@ -5481,8 +5378,7 @@ finish:
5481 /* 5378 /*
5482 * Donnot start more than 1 command after an error. 5379 * Donnot start more than 1 command after an error.
5483 */ 5380 */
5484 if (lp) 5381 sym_start_next_ccbs(np, lp, 1);
5485 sym_start_next_ccbs(np, lp, 1);
5486#endif 5382#endif
5487} 5383}
5488 5384
@@ -5521,17 +5417,11 @@ void sym_complete_ok (struct sym_hcb *np, struct sym_ccb *cp)
5521 lp = sym_lp(tp, cp->lun); 5417 lp = sym_lp(tp, cp->lun);
5522 5418
5523 /* 5419 /*
5524 * Assume device discovered on first success.
5525 */
5526 if (!lp)
5527 sym_set_bit(tp->lun_map, cp->lun);
5528
5529 /*
5530 * If all data have been transferred, given than no 5420 * If all data have been transferred, given than no
5531 * extended error did occur, there is no residual. 5421 * extended error did occur, there is no residual.
5532 */ 5422 */
5533 resid = 0; 5423 resid = 0;
5534 if (cp->phys.head.lastp != sym_goalp(cp)) 5424 if (cp->phys.head.lastp != cp->goalp)
5535 resid = sym_compute_residual(np, cp); 5425 resid = sym_compute_residual(np, cp);
5536 5426
5537 /* 5427 /*
@@ -5551,15 +5441,6 @@ if (resid)
5551 */ 5441 */
5552 sym_set_cam_result_ok(cp, cmd, resid); 5442 sym_set_cam_result_ok(cp, cmd, resid);
5553 5443
5554#ifdef SYM_OPT_SNIFF_INQUIRY
5555 /*
5556 * On standard INQUIRY response (EVPD and CmDt
5557 * not set), sniff out device capabilities.
5558 */
5559 if (cp->cdb_buf[0] == INQUIRY && !(cp->cdb_buf[1] & 0x3))
5560 sym_sniff_inquiry(np, cmd, resid);
5561#endif
5562
5563#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING 5444#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
5564 /* 5445 /*
5565 * If max number of started ccbs had been reduced, 5446 * If max number of started ccbs had been reduced,
@@ -5587,7 +5468,7 @@ if (resid)
5587 /* 5468 /*
5588 * Requeue a couple of awaiting scsi commands. 5469 * Requeue a couple of awaiting scsi commands.
5589 */ 5470 */
5590 if (lp && !sym_que_empty(&lp->waiting_ccbq)) 5471 if (!sym_que_empty(&lp->waiting_ccbq))
5591 sym_start_next_ccbs(np, lp, 2); 5472 sym_start_next_ccbs(np, lp, 2);
5592#endif 5473#endif
5593 /* 5474 /*
@@ -5830,8 +5711,7 @@ void sym_hcb_free(struct sym_hcb *np)
5830 SYM_QUEHEAD *qp; 5711 SYM_QUEHEAD *qp;
5831 struct sym_ccb *cp; 5712 struct sym_ccb *cp;
5832 struct sym_tcb *tp; 5713 struct sym_tcb *tp;
5833 struct sym_lcb *lp; 5714 int target;
5834 int target, lun;
5835 5715
5836 if (np->scriptz0) 5716 if (np->scriptz0)
5837 sym_mfree_dma(np->scriptz0, np->scriptz_sz, "SCRIPTZ0"); 5717 sym_mfree_dma(np->scriptz0, np->scriptz_sz, "SCRIPTZ0");
@@ -5857,16 +5737,6 @@ void sym_hcb_free(struct sym_hcb *np)
5857 5737
5858 for (target = 0; target < SYM_CONF_MAX_TARGET ; target++) { 5738 for (target = 0; target < SYM_CONF_MAX_TARGET ; target++) {
5859 tp = &np->target[target]; 5739 tp = &np->target[target];
5860 for (lun = 0 ; lun < SYM_CONF_MAX_LUN ; lun++) {
5861 lp = sym_lp(tp, lun);
5862 if (!lp)
5863 continue;
5864 if (lp->itlq_tbl)
5865 sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK*4,
5866 "ITLQ_TBL");
5867 kfree(lp->cb_tags);
5868 sym_mfree_dma(lp, sizeof(*lp), "LCB");
5869 }
5870#if SYM_CONF_MAX_LUN > 1 5740#if SYM_CONF_MAX_LUN > 1
5871 kfree(tp->lunmp); 5741 kfree(tp->lunmp);
5872#endif 5742#endif
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.h b/drivers/scsi/sym53c8xx_2/sym_hipd.h
index 3a264a408216..2456090bb241 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.h
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.h
@@ -48,12 +48,6 @@
48 * They may be defined in platform specific headers, if they 48 * They may be defined in platform specific headers, if they
49 * are useful. 49 * are useful.
50 * 50 *
51 * SYM_OPT_HANDLE_DIR_UNKNOWN
52 * When this option is set, the SCRIPTS used by the driver
53 * are able to handle SCSI transfers with direction not
54 * supplied by user.
55 * (set for Linux-2.0.X)
56 *
57 * SYM_OPT_HANDLE_DEVICE_QUEUEING 51 * SYM_OPT_HANDLE_DEVICE_QUEUEING
58 * When this option is set, the driver will use a queue per 52 * When this option is set, the driver will use a queue per
59 * device and handle QUEUE FULL status requeuing internally. 53 * device and handle QUEUE FULL status requeuing internally.
@@ -64,7 +58,6 @@
64 * (set for Linux) 58 * (set for Linux)
65 */ 59 */
66#if 0 60#if 0
67#define SYM_OPT_HANDLE_DIR_UNKNOWN
68#define SYM_OPT_HANDLE_DEVICE_QUEUEING 61#define SYM_OPT_HANDLE_DEVICE_QUEUEING
69#define SYM_OPT_LIMIT_COMMAND_REORDERING 62#define SYM_OPT_LIMIT_COMMAND_REORDERING
70#endif 63#endif
@@ -416,19 +409,6 @@ struct sym_tcb {
416 struct sym_lcb **lunmp; /* Other LCBs [1..MAX_LUN] */ 409 struct sym_lcb **lunmp; /* Other LCBs [1..MAX_LUN] */
417#endif 410#endif
418 411
419 /*
420 * Bitmap that tells about LUNs that succeeded at least
421 * 1 IO and therefore assumed to be a real device.
422 * Avoid useless allocation of the LCB structure.
423 */
424 u32 lun_map[(SYM_CONF_MAX_LUN+31)/32];
425
426 /*
427 * Bitmap that tells about LUNs that haven't yet an LCB
428 * allocated (not discovered or LCB allocation failed).
429 */
430 u32 busy0_map[(SYM_CONF_MAX_LUN+31)/32];
431
432#ifdef SYM_HAVE_STCB 412#ifdef SYM_HAVE_STCB
433 /* 413 /*
434 * O/S specific data structure. 414 * O/S specific data structure.
@@ -454,8 +434,10 @@ struct sym_tcb {
454 * Other user settable limits and options. 434 * Other user settable limits and options.
455 * These limits are read from the NVRAM if present. 435 * These limits are read from the NVRAM if present.
456 */ 436 */
457 u_char usrflags; 437 unsigned char usrflags;
458 u_short usrtags; 438 unsigned char usr_period;
439 unsigned char usr_width;
440 unsigned short usrtags;
459 struct scsi_target *starget; 441 struct scsi_target *starget;
460}; 442};
461 443
@@ -672,9 +654,6 @@ struct sym_ccbh {
672 */ 654 */
673 u32 savep; /* Jump address to saved data pointer */ 655 u32 savep; /* Jump address to saved data pointer */
674 u32 lastp; /* SCRIPTS address at end of data */ 656 u32 lastp; /* SCRIPTS address at end of data */
675#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
676 u32 wlastp;
677#endif
678 657
679 /* 658 /*
680 * Status fields. 659 * Status fields.
@@ -804,9 +783,6 @@ struct sym_ccb {
804 SYM_QUEHEAD link_ccbq; /* Link to free/busy CCB queue */ 783 SYM_QUEHEAD link_ccbq; /* Link to free/busy CCB queue */
805 u32 startp; /* Initial data pointer */ 784 u32 startp; /* Initial data pointer */
806 u32 goalp; /* Expected last data pointer */ 785 u32 goalp; /* Expected last data pointer */
807#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
808 u32 wgoalp;
809#endif
810 int ext_sg; /* Extreme data pointer, used */ 786 int ext_sg; /* Extreme data pointer, used */
811 int ext_ofs; /* to calculate the residual. */ 787 int ext_ofs; /* to calculate the residual. */
812#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING 788#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
@@ -821,12 +797,6 @@ struct sym_ccb {
821 797
822#define CCB_BA(cp,lbl) cpu_to_scr(cp->ccb_ba + offsetof(struct sym_ccb, lbl)) 798#define CCB_BA(cp,lbl) cpu_to_scr(cp->ccb_ba + offsetof(struct sym_ccb, lbl))
823 799
824#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
825#define sym_goalp(cp) ((cp->host_flags & HF_DATA_IN) ? cp->goalp : cp->wgoalp)
826#else
827#define sym_goalp(cp) (cp->goalp)
828#endif
829
830typedef struct device *m_pool_ident_t; 800typedef struct device *m_pool_ident_t;
831 801
832/* 802/*
@@ -1077,7 +1047,6 @@ char *sym_driver_name(void);
1077void sym_print_xerr(struct scsi_cmnd *cmd, int x_status); 1047void sym_print_xerr(struct scsi_cmnd *cmd, int x_status);
1078int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int); 1048int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int);
1079struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision); 1049struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision);
1080void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp);
1081#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING 1050#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
1082void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn); 1051void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn);
1083#endif 1052#endif
@@ -1136,71 +1105,6 @@ bad:
1136#endif 1105#endif
1137 1106
1138/* 1107/*
1139 * Set up data pointers used by SCRIPTS.
1140 * Called from O/S specific code.
1141 */
1142static inline void sym_setup_data_pointers(struct sym_hcb *np,
1143 struct sym_ccb *cp, int dir)
1144{
1145 u32 lastp, goalp;
1146
1147 /*
1148 * No segments means no data.
1149 */
1150 if (!cp->segments)
1151 dir = DMA_NONE;
1152
1153 /*
1154 * Set the data pointer.
1155 */
1156 switch(dir) {
1157#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1158 case DMA_BIDIRECTIONAL:
1159#endif
1160 case DMA_TO_DEVICE:
1161 goalp = SCRIPTA_BA(np, data_out2) + 8;
1162 lastp = goalp - 8 - (cp->segments * (2*4));
1163#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1164 cp->wgoalp = cpu_to_scr(goalp);
1165 if (dir != DMA_BIDIRECTIONAL)
1166 break;
1167 cp->phys.head.wlastp = cpu_to_scr(lastp);
1168 /* fall through */
1169#else
1170 break;
1171#endif
1172 case DMA_FROM_DEVICE:
1173 cp->host_flags |= HF_DATA_IN;
1174 goalp = SCRIPTA_BA(np, data_in2) + 8;
1175 lastp = goalp - 8 - (cp->segments * (2*4));
1176 break;
1177 case DMA_NONE:
1178 default:
1179#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1180 cp->host_flags |= HF_DATA_IN;
1181#endif
1182 lastp = goalp = SCRIPTB_BA(np, no_data);
1183 break;
1184 }
1185
1186 /*
1187 * Set all pointers values needed by SCRIPTS.
1188 */
1189 cp->phys.head.lastp = cpu_to_scr(lastp);
1190 cp->phys.head.savep = cpu_to_scr(lastp);
1191 cp->startp = cp->phys.head.savep;
1192 cp->goalp = cpu_to_scr(goalp);
1193
1194#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
1195 /*
1196 * If direction is unknown, start at data_io.
1197 */
1198 if (dir == DMA_BIDIRECTIONAL)
1199 cp->phys.head.savep = cpu_to_scr(SCRIPTB_BA(np, data_io));
1200#endif
1201}
1202
1203/*
1204 * MEMORY ALLOCATOR. 1108 * MEMORY ALLOCATOR.
1205 */ 1109 */
1206 1110
diff --git a/drivers/scsi/sym53c8xx_2/sym_malloc.c b/drivers/scsi/sym53c8xx_2/sym_malloc.c
index a34d403ccc6c..92bf9b14a7a2 100644
--- a/drivers/scsi/sym53c8xx_2/sym_malloc.c
+++ b/drivers/scsi/sym53c8xx_2/sym_malloc.c
@@ -37,11 +37,7 @@
37 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 37 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
38 */ 38 */
39 39
40#ifdef __FreeBSD__
41#include <dev/sym/sym_glue.h>
42#else
43#include "sym_glue.h" 40#include "sym_glue.h"
44#endif
45 41
46/* 42/*
47 * Simple power of two buddy-like generic allocator. 43 * Simple power of two buddy-like generic allocator.
diff --git a/drivers/scsi/sym53c8xx_2/sym_nvram.c b/drivers/scsi/sym53c8xx_2/sym_nvram.c
index 994b7566bcac..15d69298ab6e 100644
--- a/drivers/scsi/sym53c8xx_2/sym_nvram.c
+++ b/drivers/scsi/sym53c8xx_2/sym_nvram.c
@@ -92,29 +92,32 @@ void sym_nvram_setup_host(struct Scsi_Host *shost, struct sym_hcb *np, struct sy
92 * Get target set-up from Symbios format NVRAM. 92 * Get target set-up from Symbios format NVRAM.
93 */ 93 */
94static void 94static void
95sym_Symbios_setup_target(struct sym_hcb *np, int target, Symbios_nvram *nvram) 95sym_Symbios_setup_target(struct sym_tcb *tp, int target, Symbios_nvram *nvram)
96{ 96{
97 struct sym_tcb *tp = &np->target[target];
98 Symbios_target *tn = &nvram->target[target]; 97 Symbios_target *tn = &nvram->target[target];
99 98
100 tp->usrtags = 99 if (!(tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED))
101 (tn->flags & SYMBIOS_QUEUE_TAGS_ENABLED)? SYM_SETUP_MAX_TAG : 0; 100 tp->usrtags = 0;
102
103 if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE)) 101 if (!(tn->flags & SYMBIOS_DISCONNECT_ENABLE))
104 tp->usrflags &= ~SYM_DISC_ENABLED; 102 tp->usrflags &= ~SYM_DISC_ENABLED;
105 if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME)) 103 if (!(tn->flags & SYMBIOS_SCAN_AT_BOOT_TIME))
106 tp->usrflags |= SYM_SCAN_BOOT_DISABLED; 104 tp->usrflags |= SYM_SCAN_BOOT_DISABLED;
107 if (!(tn->flags & SYMBIOS_SCAN_LUNS)) 105 if (!(tn->flags & SYMBIOS_SCAN_LUNS))
108 tp->usrflags |= SYM_SCAN_LUNS_DISABLED; 106 tp->usrflags |= SYM_SCAN_LUNS_DISABLED;
107 tp->usr_period = (tn->sync_period + 3) / 4;
108 tp->usr_width = (tn->bus_width == 0x8) ? 0 : 1;
109} 109}
110 110
111static const unsigned char Tekram_sync[16] = {
112 25, 31, 37, 43, 50, 62, 75, 125, 12, 15, 18, 21, 6, 7, 9, 10
113};
114
111/* 115/*
112 * Get target set-up from Tekram format NVRAM. 116 * Get target set-up from Tekram format NVRAM.
113 */ 117 */
114static void 118static void
115sym_Tekram_setup_target(struct sym_hcb *np, int target, Tekram_nvram *nvram) 119sym_Tekram_setup_target(struct sym_tcb *tp, int target, Tekram_nvram *nvram)
116{ 120{
117 struct sym_tcb *tp = &np->target[target];
118 struct Tekram_target *tn = &nvram->target[target]; 121 struct Tekram_target *tn = &nvram->target[target];
119 122
120 if (tn->flags & TEKRAM_TAGGED_COMMANDS) { 123 if (tn->flags & TEKRAM_TAGGED_COMMANDS) {
@@ -124,22 +127,22 @@ sym_Tekram_setup_target(struct sym_hcb *np, int target, Tekram_nvram *nvram)
124 if (tn->flags & TEKRAM_DISCONNECT_ENABLE) 127 if (tn->flags & TEKRAM_DISCONNECT_ENABLE)
125 tp->usrflags |= SYM_DISC_ENABLED; 128 tp->usrflags |= SYM_DISC_ENABLED;
126 129
127 /* If any device does not support parity, we will not use this option */ 130 if (tn->flags & TEKRAM_SYNC_NEGO)
128 if (!(tn->flags & TEKRAM_PARITY_CHECK)) 131 tp->usr_period = Tekram_sync[tn->sync_index & 0xf];
129 np->rv_scntl0 &= ~0x0a; /* SCSI parity checking disabled */ 132 tp->usr_width = (tn->flags & TEKRAM_WIDE_NEGO) ? 1 : 0;
130} 133}
131 134
132/* 135/*
133 * Get target setup from NVRAM. 136 * Get target setup from NVRAM.
134 */ 137 */
135void sym_nvram_setup_target(struct sym_hcb *np, int target, struct sym_nvram *nvp) 138void sym_nvram_setup_target(struct sym_tcb *tp, int target, struct sym_nvram *nvp)
136{ 139{
137 switch (nvp->type) { 140 switch (nvp->type) {
138 case SYM_SYMBIOS_NVRAM: 141 case SYM_SYMBIOS_NVRAM:
139 sym_Symbios_setup_target(np, target, &nvp->data.Symbios); 142 sym_Symbios_setup_target(tp, target, &nvp->data.Symbios);
140 break; 143 break;
141 case SYM_TEKRAM_NVRAM: 144 case SYM_TEKRAM_NVRAM:
142 sym_Tekram_setup_target(np, target, &nvp->data.Tekram); 145 sym_Tekram_setup_target(tp, target, &nvp->data.Tekram);
143 break; 146 break;
144 default: 147 default:
145 break; 148 break;
diff --git a/drivers/scsi/sym53c8xx_2/sym_nvram.h b/drivers/scsi/sym53c8xx_2/sym_nvram.h
index 1538bede5277..bdfbbb083b69 100644
--- a/drivers/scsi/sym53c8xx_2/sym_nvram.h
+++ b/drivers/scsi/sym53c8xx_2/sym_nvram.h
@@ -194,12 +194,12 @@ struct sym_nvram {
194 194
195#if SYM_CONF_NVRAM_SUPPORT 195#if SYM_CONF_NVRAM_SUPPORT
196void sym_nvram_setup_host(struct Scsi_Host *shost, struct sym_hcb *np, struct sym_nvram *nvram); 196void sym_nvram_setup_host(struct Scsi_Host *shost, struct sym_hcb *np, struct sym_nvram *nvram);
197void sym_nvram_setup_target (struct sym_hcb *np, int target, struct sym_nvram *nvp); 197void sym_nvram_setup_target (struct sym_tcb *tp, int target, struct sym_nvram *nvp);
198int sym_read_nvram (struct sym_device *np, struct sym_nvram *nvp); 198int sym_read_nvram (struct sym_device *np, struct sym_nvram *nvp);
199char *sym_nvram_type(struct sym_nvram *nvp); 199char *sym_nvram_type(struct sym_nvram *nvp);
200#else 200#else
201static inline void sym_nvram_setup_host(struct Scsi_Host *shost, struct sym_hcb *np, struct sym_nvram *nvram) { } 201static inline void sym_nvram_setup_host(struct Scsi_Host *shost, struct sym_hcb *np, struct sym_nvram *nvram) { }
202static inline void sym_nvram_setup_target(struct sym_hcb *np, struct sym_nvram *nvram) { } 202static inline void sym_nvram_setup_target(struct sym_tcb *tp, struct sym_nvram *nvram) { }
203static inline int sym_read_nvram(struct sym_device *np, struct sym_nvram *nvp) 203static inline int sym_read_nvram(struct sym_device *np, struct sym_nvram *nvp)
204{ 204{
205 nvp->type = 0; 205 nvp->type = 0;
diff --git a/drivers/scsi/sym53c8xx_comm.h b/drivers/scsi/sym53c8xx_comm.h
deleted file mode 100644
index 20ae2b17df58..000000000000
--- a/drivers/scsi/sym53c8xx_comm.h
+++ /dev/null
@@ -1,792 +0,0 @@
1/******************************************************************************
2** High Performance device driver for the Symbios 53C896 controller.
3**
4** Copyright (C) 1998-2001 Gerard Roudier <groudier@free.fr>
5**
6** This driver also supports all the Symbios 53C8XX controller family,
7** except 53C810 revisions < 16, 53C825 revisions < 16 and all
8** revisions of 53C815 controllers.
9**
10** This driver is based on the Linux port of the FreeBSD ncr driver.
11**
12** Copyright (C) 1994 Wolfgang Stanglmeier
13**
14**-----------------------------------------------------------------------------
15**
16** This program is free software; you can redistribute it and/or modify
17** it under the terms of the GNU General Public License as published by
18** the Free Software Foundation; either version 2 of the License, or
19** (at your option) any later version.
20**
21** This program is distributed in the hope that it will be useful,
22** but WITHOUT ANY WARRANTY; without even the implied warranty of
23** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24** GNU General Public License for more details.
25**
26** You should have received a copy of the GNU General Public License
27** along with this program; if not, write to the Free Software
28** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29**
30**-----------------------------------------------------------------------------
31**
32** The Linux port of the FreeBSD ncr driver has been achieved in
33** november 1995 by:
34**
35** Gerard Roudier <groudier@free.fr>
36**
37** Being given that this driver originates from the FreeBSD version, and
38** in order to keep synergy on both, any suggested enhancements and corrections
39** received on Linux are automatically a potential candidate for the FreeBSD
40** version.
41**
42** The original driver has been written for 386bsd and FreeBSD by
43** Wolfgang Stanglmeier <wolf@cologne.de>
44** Stefan Esser <se@mi.Uni-Koeln.de>
45**
46**-----------------------------------------------------------------------------
47**
48** Major contributions:
49** --------------------
50**
51** NVRAM detection and reading.
52** Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
53**
54*******************************************************************************
55*/
56
57/*==========================================================
58**
59** Debugging tags
60**
61**==========================================================
62*/
63
64#define DEBUG_ALLOC (0x0001)
65#define DEBUG_PHASE (0x0002)
66#define DEBUG_QUEUE (0x0008)
67#define DEBUG_RESULT (0x0010)
68#define DEBUG_POINTER (0x0020)
69#define DEBUG_SCRIPT (0x0040)
70#define DEBUG_TINY (0x0080)
71#define DEBUG_TIMING (0x0100)
72#define DEBUG_NEGO (0x0200)
73#define DEBUG_TAGS (0x0400)
74#define DEBUG_SCATTER (0x0800)
75#define DEBUG_IC (0x1000)
76
77/*
78** Enable/Disable debug messages.
79** Can be changed at runtime too.
80*/
81
82#ifdef SCSI_NCR_DEBUG_INFO_SUPPORT
83static int ncr_debug = SCSI_NCR_DEBUG_FLAGS;
84 #define DEBUG_FLAGS ncr_debug
85#else
86 #define DEBUG_FLAGS SCSI_NCR_DEBUG_FLAGS
87#endif
88
89static inline struct list_head *ncr_list_pop(struct list_head *head)
90{
91 if (!list_empty(head)) {
92 struct list_head *elem = head->next;
93
94 list_del(elem);
95 return elem;
96 }
97
98 return NULL;
99}
100
101#ifdef __sparc__
102#include <asm/irq.h>
103#endif
104
105/*==========================================================
106**
107** Simple power of two buddy-like allocator.
108**
109** This simple code is not intended to be fast, but to
110** provide power of 2 aligned memory allocations.
111** Since the SCRIPTS processor only supplies 8 bit
112** arithmetic, this allocator allows simple and fast
113** address calculations from the SCRIPTS code.
114** In addition, cache line alignment is guaranteed for
115** power of 2 cache line size.
116** Enhanced in linux-2.3.44 to provide a memory pool
117** per pcidev to support dynamic dma mapping. (I would
118** have preferred a real bus astraction, btw).
119**
120**==========================================================
121*/
122
123#define MEMO_SHIFT 4 /* 16 bytes minimum memory chunk */
124#if PAGE_SIZE >= 8192
125#define MEMO_PAGE_ORDER 0 /* 1 PAGE maximum */
126#else
127#define MEMO_PAGE_ORDER 1 /* 2 PAGES maximum */
128#endif
129#define MEMO_FREE_UNUSED /* Free unused pages immediately */
130#define MEMO_WARN 1
131#define MEMO_GFP_FLAGS GFP_ATOMIC
132#define MEMO_CLUSTER_SHIFT (PAGE_SHIFT+MEMO_PAGE_ORDER)
133#define MEMO_CLUSTER_SIZE (1UL << MEMO_CLUSTER_SHIFT)
134#define MEMO_CLUSTER_MASK (MEMO_CLUSTER_SIZE-1)
135
136typedef u_long m_addr_t; /* Enough bits to bit-hack addresses */
137typedef struct device *m_bush_t; /* Something that addresses DMAable */
138
139typedef struct m_link { /* Link between free memory chunks */
140 struct m_link *next;
141} m_link_s;
142
143typedef struct m_vtob { /* Virtual to Bus address translation */
144 struct m_vtob *next;
145 m_addr_t vaddr;
146 m_addr_t baddr;
147} m_vtob_s;
148#define VTOB_HASH_SHIFT 5
149#define VTOB_HASH_SIZE (1UL << VTOB_HASH_SHIFT)
150#define VTOB_HASH_MASK (VTOB_HASH_SIZE-1)
151#define VTOB_HASH_CODE(m) \
152 ((((m_addr_t) (m)) >> MEMO_CLUSTER_SHIFT) & VTOB_HASH_MASK)
153
154typedef struct m_pool { /* Memory pool of a given kind */
155 m_bush_t bush;
156 m_addr_t (*getp)(struct m_pool *);
157 void (*freep)(struct m_pool *, m_addr_t);
158 int nump;
159 m_vtob_s *(vtob[VTOB_HASH_SIZE]);
160 struct m_pool *next;
161 struct m_link h[PAGE_SHIFT-MEMO_SHIFT+MEMO_PAGE_ORDER+1];
162} m_pool_s;
163
164static void *___m_alloc(m_pool_s *mp, int size)
165{
166 int i = 0;
167 int s = (1 << MEMO_SHIFT);
168 int j;
169 m_addr_t a;
170 m_link_s *h = mp->h;
171
172 if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
173 return NULL;
174
175 while (size > s) {
176 s <<= 1;
177 ++i;
178 }
179
180 j = i;
181 while (!h[j].next) {
182 if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
183 h[j].next = (m_link_s *)mp->getp(mp);
184 if (h[j].next)
185 h[j].next->next = NULL;
186 break;
187 }
188 ++j;
189 s <<= 1;
190 }
191 a = (m_addr_t) h[j].next;
192 if (a) {
193 h[j].next = h[j].next->next;
194 while (j > i) {
195 j -= 1;
196 s >>= 1;
197 h[j].next = (m_link_s *) (a+s);
198 h[j].next->next = NULL;
199 }
200 }
201#ifdef DEBUG
202 printk("___m_alloc(%d) = %p\n", size, (void *) a);
203#endif
204 return (void *) a;
205}
206
207static void ___m_free(m_pool_s *mp, void *ptr, int size)
208{
209 int i = 0;
210 int s = (1 << MEMO_SHIFT);
211 m_link_s *q;
212 m_addr_t a, b;
213 m_link_s *h = mp->h;
214
215#ifdef DEBUG
216 printk("___m_free(%p, %d)\n", ptr, size);
217#endif
218
219 if (size > (PAGE_SIZE << MEMO_PAGE_ORDER))
220 return;
221
222 while (size > s) {
223 s <<= 1;
224 ++i;
225 }
226
227 a = (m_addr_t) ptr;
228
229 while (1) {
230#ifdef MEMO_FREE_UNUSED
231 if (s == (PAGE_SIZE << MEMO_PAGE_ORDER)) {
232 mp->freep(mp, a);
233 break;
234 }
235#endif
236 b = a ^ s;
237 q = &h[i];
238 while (q->next && q->next != (m_link_s *) b) {
239 q = q->next;
240 }
241 if (!q->next) {
242 ((m_link_s *) a)->next = h[i].next;
243 h[i].next = (m_link_s *) a;
244 break;
245 }
246 q->next = q->next->next;
247 a = a & b;
248 s <<= 1;
249 ++i;
250 }
251}
252
253static DEFINE_SPINLOCK(ncr53c8xx_lock);
254
255static void *__m_calloc2(m_pool_s *mp, int size, char *name, int uflags)
256{
257 void *p;
258
259 p = ___m_alloc(mp, size);
260
261 if (DEBUG_FLAGS & DEBUG_ALLOC)
262 printk ("new %-10s[%4d] @%p.\n", name, size, p);
263
264 if (p)
265 memset(p, 0, size);
266 else if (uflags & MEMO_WARN)
267 printk (NAME53C8XX ": failed to allocate %s[%d]\n", name, size);
268
269 return p;
270}
271
272#define __m_calloc(mp, s, n) __m_calloc2(mp, s, n, MEMO_WARN)
273
274static void __m_free(m_pool_s *mp, void *ptr, int size, char *name)
275{
276 if (DEBUG_FLAGS & DEBUG_ALLOC)
277 printk ("freeing %-10s[%4d] @%p.\n", name, size, ptr);
278
279 ___m_free(mp, ptr, size);
280
281}
282
283/*
284 * With pci bus iommu support, we use a default pool of unmapped memory
285 * for memory we donnot need to DMA from/to and one pool per pcidev for
286 * memory accessed by the PCI chip. `mp0' is the default not DMAable pool.
287 */
288
289static m_addr_t ___mp0_getp(m_pool_s *mp)
290{
291 m_addr_t m = __get_free_pages(MEMO_GFP_FLAGS, MEMO_PAGE_ORDER);
292 if (m)
293 ++mp->nump;
294 return m;
295}
296
297static void ___mp0_freep(m_pool_s *mp, m_addr_t m)
298{
299 free_pages(m, MEMO_PAGE_ORDER);
300 --mp->nump;
301}
302
303static m_pool_s mp0 = {NULL, ___mp0_getp, ___mp0_freep};
304
305/*
306 * DMAable pools.
307 */
308
309/*
310 * With pci bus iommu support, we maintain one pool per pcidev and a
311 * hashed reverse table for virtual to bus physical address translations.
312 */
313static m_addr_t ___dma_getp(m_pool_s *mp)
314{
315 m_addr_t vp;
316 m_vtob_s *vbp;
317
318 vbp = __m_calloc(&mp0, sizeof(*vbp), "VTOB");
319 if (vbp) {
320 dma_addr_t daddr;
321 vp = (m_addr_t) dma_alloc_coherent(mp->bush,
322 PAGE_SIZE<<MEMO_PAGE_ORDER,
323 &daddr, GFP_ATOMIC);
324 if (vp) {
325 int hc = VTOB_HASH_CODE(vp);
326 vbp->vaddr = vp;
327 vbp->baddr = daddr;
328 vbp->next = mp->vtob[hc];
329 mp->vtob[hc] = vbp;
330 ++mp->nump;
331 return vp;
332 }
333 }
334 if (vbp)
335 __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
336 return 0;
337}
338
339static void ___dma_freep(m_pool_s *mp, m_addr_t m)
340{
341 m_vtob_s **vbpp, *vbp;
342 int hc = VTOB_HASH_CODE(m);
343
344 vbpp = &mp->vtob[hc];
345 while (*vbpp && (*vbpp)->vaddr != m)
346 vbpp = &(*vbpp)->next;
347 if (*vbpp) {
348 vbp = *vbpp;
349 *vbpp = (*vbpp)->next;
350 dma_free_coherent(mp->bush, PAGE_SIZE<<MEMO_PAGE_ORDER,
351 (void *)vbp->vaddr, (dma_addr_t)vbp->baddr);
352 __m_free(&mp0, vbp, sizeof(*vbp), "VTOB");
353 --mp->nump;
354 }
355}
356
357static inline m_pool_s *___get_dma_pool(m_bush_t bush)
358{
359 m_pool_s *mp;
360 for (mp = mp0.next; mp && mp->bush != bush; mp = mp->next);
361 return mp;
362}
363
364static m_pool_s *___cre_dma_pool(m_bush_t bush)
365{
366 m_pool_s *mp;
367 mp = __m_calloc(&mp0, sizeof(*mp), "MPOOL");
368 if (mp) {
369 memset(mp, 0, sizeof(*mp));
370 mp->bush = bush;
371 mp->getp = ___dma_getp;
372 mp->freep = ___dma_freep;
373 mp->next = mp0.next;
374 mp0.next = mp;
375 }
376 return mp;
377}
378
379static void ___del_dma_pool(m_pool_s *p)
380{
381 struct m_pool **pp = &mp0.next;
382
383 while (*pp && *pp != p)
384 pp = &(*pp)->next;
385 if (*pp) {
386 *pp = (*pp)->next;
387 __m_free(&mp0, p, sizeof(*p), "MPOOL");
388 }
389}
390
391static void *__m_calloc_dma(m_bush_t bush, int size, char *name)
392{
393 u_long flags;
394 struct m_pool *mp;
395 void *m = NULL;
396
397 spin_lock_irqsave(&ncr53c8xx_lock, flags);
398 mp = ___get_dma_pool(bush);
399 if (!mp)
400 mp = ___cre_dma_pool(bush);
401 if (mp)
402 m = __m_calloc(mp, size, name);
403 if (mp && !mp->nump)
404 ___del_dma_pool(mp);
405 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
406
407 return m;
408}
409
410static void __m_free_dma(m_bush_t bush, void *m, int size, char *name)
411{
412 u_long flags;
413 struct m_pool *mp;
414
415 spin_lock_irqsave(&ncr53c8xx_lock, flags);
416 mp = ___get_dma_pool(bush);
417 if (mp)
418 __m_free(mp, m, size, name);
419 if (mp && !mp->nump)
420 ___del_dma_pool(mp);
421 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
422}
423
424static m_addr_t __vtobus(m_bush_t bush, void *m)
425{
426 u_long flags;
427 m_pool_s *mp;
428 int hc = VTOB_HASH_CODE(m);
429 m_vtob_s *vp = NULL;
430 m_addr_t a = ((m_addr_t) m) & ~MEMO_CLUSTER_MASK;
431
432 spin_lock_irqsave(&ncr53c8xx_lock, flags);
433 mp = ___get_dma_pool(bush);
434 if (mp) {
435 vp = mp->vtob[hc];
436 while (vp && (m_addr_t) vp->vaddr != a)
437 vp = vp->next;
438 }
439 spin_unlock_irqrestore(&ncr53c8xx_lock, flags);
440 return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
441}
442
443#define _m_calloc_dma(np, s, n) __m_calloc_dma(np->dev, s, n)
444#define _m_free_dma(np, p, s, n) __m_free_dma(np->dev, p, s, n)
445#define m_calloc_dma(s, n) _m_calloc_dma(np, s, n)
446#define m_free_dma(p, s, n) _m_free_dma(np, p, s, n)
447#define _vtobus(np, p) __vtobus(np->dev, p)
448#define vtobus(p) _vtobus(np, p)
449
450/*
451 * Deal with DMA mapping/unmapping.
452 */
453
454/* To keep track of the dma mapping (sg/single) that has been set */
455#define __data_mapped SCp.phase
456#define __data_mapping SCp.have_data_in
457
458static void __unmap_scsi_data(struct device *dev, struct scsi_cmnd *cmd)
459{
460 switch(cmd->__data_mapped) {
461 case 2:
462 dma_unmap_sg(dev, cmd->buffer, cmd->use_sg,
463 cmd->sc_data_direction);
464 break;
465 case 1:
466 dma_unmap_single(dev, cmd->__data_mapping,
467 cmd->request_bufflen,
468 cmd->sc_data_direction);
469 break;
470 }
471 cmd->__data_mapped = 0;
472}
473
474static u_long __map_scsi_single_data(struct device *dev, struct scsi_cmnd *cmd)
475{
476 dma_addr_t mapping;
477
478 if (cmd->request_bufflen == 0)
479 return 0;
480
481 mapping = dma_map_single(dev, cmd->request_buffer,
482 cmd->request_bufflen,
483 cmd->sc_data_direction);
484 cmd->__data_mapped = 1;
485 cmd->__data_mapping = mapping;
486
487 return mapping;
488}
489
490static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd)
491{
492 int use_sg;
493
494 if (cmd->use_sg == 0)
495 return 0;
496
497 use_sg = dma_map_sg(dev, cmd->buffer, cmd->use_sg,
498 cmd->sc_data_direction);
499 cmd->__data_mapped = 2;
500 cmd->__data_mapping = use_sg;
501
502 return use_sg;
503}
504
505#define unmap_scsi_data(np, cmd) __unmap_scsi_data(np->dev, cmd)
506#define map_scsi_single_data(np, cmd) __map_scsi_single_data(np->dev, cmd)
507#define map_scsi_sg_data(np, cmd) __map_scsi_sg_data(np->dev, cmd)
508
509/*==========================================================
510**
511** Driver setup.
512**
513** This structure is initialized from linux config
514** options. It can be overridden at boot-up by the boot
515** command line.
516**
517**==========================================================
518*/
519static struct ncr_driver_setup
520 driver_setup = SCSI_NCR_DRIVER_SETUP;
521
522#ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
523static struct ncr_driver_setup
524 driver_safe_setup __initdata = SCSI_NCR_DRIVER_SAFE_SETUP;
525#endif
526
527#define initverbose (driver_setup.verbose)
528#define bootverbose (np->verbose)
529
530
531/*===================================================================
532**
533** Driver setup from the boot command line
534**
535**===================================================================
536*/
537
538#ifdef MODULE
539#define ARG_SEP ' '
540#else
541#define ARG_SEP ','
542#endif
543
544#define OPT_TAGS 1
545#define OPT_MASTER_PARITY 2
546#define OPT_SCSI_PARITY 3
547#define OPT_DISCONNECTION 4
548#define OPT_SPECIAL_FEATURES 5
549#define OPT_UNUSED_1 6
550#define OPT_FORCE_SYNC_NEGO 7
551#define OPT_REVERSE_PROBE 8
552#define OPT_DEFAULT_SYNC 9
553#define OPT_VERBOSE 10
554#define OPT_DEBUG 11
555#define OPT_BURST_MAX 12
556#define OPT_LED_PIN 13
557#define OPT_MAX_WIDE 14
558#define OPT_SETTLE_DELAY 15
559#define OPT_DIFF_SUPPORT 16
560#define OPT_IRQM 17
561#define OPT_PCI_FIX_UP 18
562#define OPT_BUS_CHECK 19
563#define OPT_OPTIMIZE 20
564#define OPT_RECOVERY 21
565#define OPT_SAFE_SETUP 22
566#define OPT_USE_NVRAM 23
567#define OPT_EXCLUDE 24
568#define OPT_HOST_ID 25
569
570#ifdef SCSI_NCR_IARB_SUPPORT
571#define OPT_IARB 26
572#endif
573
574static char setup_token[] __initdata =
575 "tags:" "mpar:"
576 "spar:" "disc:"
577 "specf:" "ultra:"
578 "fsn:" "revprob:"
579 "sync:" "verb:"
580 "debug:" "burst:"
581 "led:" "wide:"
582 "settle:" "diff:"
583 "irqm:" "pcifix:"
584 "buschk:" "optim:"
585 "recovery:"
586 "safe:" "nvram:"
587 "excl:" "hostid:"
588#ifdef SCSI_NCR_IARB_SUPPORT
589 "iarb:"
590#endif
591 ; /* DONNOT REMOVE THIS ';' */
592
593#ifdef MODULE
594#define ARG_SEP ' '
595#else
596#define ARG_SEP ','
597#endif
598
599static int __init get_setup_token(char *p)
600{
601 char *cur = setup_token;
602 char *pc;
603 int i = 0;
604
605 while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
606 ++pc;
607 ++i;
608 if (!strncmp(p, cur, pc - cur))
609 return i;
610 cur = pc;
611 }
612 return 0;
613}
614
615
616static int __init sym53c8xx__setup(char *str)
617{
618#ifdef SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
619 char *cur = str;
620 char *pc, *pv;
621 int i, val, c;
622 int xi = 0;
623
624 while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
625 char *pe;
626
627 val = 0;
628 pv = pc;
629 c = *++pv;
630
631 if (c == 'n')
632 val = 0;
633 else if (c == 'y')
634 val = 1;
635 else
636 val = (int) simple_strtoul(pv, &pe, 0);
637
638 switch (get_setup_token(cur)) {
639 case OPT_TAGS:
640 driver_setup.default_tags = val;
641 if (pe && *pe == '/') {
642 i = 0;
643 while (*pe && *pe != ARG_SEP &&
644 i < sizeof(driver_setup.tag_ctrl)-1) {
645 driver_setup.tag_ctrl[i++] = *pe++;
646 }
647 driver_setup.tag_ctrl[i] = '\0';
648 }
649 break;
650 case OPT_MASTER_PARITY:
651 driver_setup.master_parity = val;
652 break;
653 case OPT_SCSI_PARITY:
654 driver_setup.scsi_parity = val;
655 break;
656 case OPT_DISCONNECTION:
657 driver_setup.disconnection = val;
658 break;
659 case OPT_SPECIAL_FEATURES:
660 driver_setup.special_features = val;
661 break;
662 case OPT_FORCE_SYNC_NEGO:
663 driver_setup.force_sync_nego = val;
664 break;
665 case OPT_REVERSE_PROBE:
666 driver_setup.reverse_probe = val;
667 break;
668 case OPT_DEFAULT_SYNC:
669 driver_setup.default_sync = val;
670 break;
671 case OPT_VERBOSE:
672 driver_setup.verbose = val;
673 break;
674 case OPT_DEBUG:
675 driver_setup.debug = val;
676 break;
677 case OPT_BURST_MAX:
678 driver_setup.burst_max = val;
679 break;
680 case OPT_LED_PIN:
681 driver_setup.led_pin = val;
682 break;
683 case OPT_MAX_WIDE:
684 driver_setup.max_wide = val? 1:0;
685 break;
686 case OPT_SETTLE_DELAY:
687 driver_setup.settle_delay = val;
688 break;
689 case OPT_DIFF_SUPPORT:
690 driver_setup.diff_support = val;
691 break;
692 case OPT_IRQM:
693 driver_setup.irqm = val;
694 break;
695 case OPT_PCI_FIX_UP:
696 driver_setup.pci_fix_up = val;
697 break;
698 case OPT_BUS_CHECK:
699 driver_setup.bus_check = val;
700 break;
701 case OPT_OPTIMIZE:
702 driver_setup.optimize = val;
703 break;
704 case OPT_RECOVERY:
705 driver_setup.recovery = val;
706 break;
707 case OPT_USE_NVRAM:
708 driver_setup.use_nvram = val;
709 break;
710 case OPT_SAFE_SETUP:
711 memcpy(&driver_setup, &driver_safe_setup,
712 sizeof(driver_setup));
713 break;
714 case OPT_EXCLUDE:
715 if (xi < SCSI_NCR_MAX_EXCLUDES)
716 driver_setup.excludes[xi++] = val;
717 break;
718 case OPT_HOST_ID:
719 driver_setup.host_id = val;
720 break;
721#ifdef SCSI_NCR_IARB_SUPPORT
722 case OPT_IARB:
723 driver_setup.iarb = val;
724 break;
725#endif
726 default:
727 printk("sym53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
728 break;
729 }
730
731 if ((cur = strchr(cur, ARG_SEP)) != NULL)
732 ++cur;
733 }
734#endif /* SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT */
735 return 1;
736}
737
738/*===================================================================
739**
740** Get device queue depth from boot command line.
741**
742**===================================================================
743*/
744#define DEF_DEPTH (driver_setup.default_tags)
745#define ALL_TARGETS -2
746#define NO_TARGET -1
747#define ALL_LUNS -2
748#define NO_LUN -1
749
750static int device_queue_depth(int unit, int target, int lun)
751{
752 int c, h, t, u, v;
753 char *p = driver_setup.tag_ctrl;
754 char *ep;
755
756 h = -1;
757 t = NO_TARGET;
758 u = NO_LUN;
759 while ((c = *p++) != 0) {
760 v = simple_strtoul(p, &ep, 0);
761 switch(c) {
762 case '/':
763 ++h;
764 t = ALL_TARGETS;
765 u = ALL_LUNS;
766 break;
767 case 't':
768 if (t != target)
769 t = (target == v) ? v : NO_TARGET;
770 u = ALL_LUNS;
771 break;
772 case 'u':
773 if (u != lun)
774 u = (lun == v) ? v : NO_LUN;
775 break;
776 case 'q':
777 if (h == unit &&
778 (t == ALL_TARGETS || t == target) &&
779 (u == ALL_LUNS || u == lun))
780 return v;
781 break;
782 case '-':
783 t = ALL_TARGETS;
784 u = ALL_LUNS;
785 break;
786 default:
787 break;
788 }
789 p = ep;
790 }
791 return DEF_DEPTH;
792}
diff --git a/drivers/scsi/sym53c8xx_defs.h b/drivers/scsi/sym53c8xx_defs.h
deleted file mode 100644
index 139cd0e12e62..000000000000
--- a/drivers/scsi/sym53c8xx_defs.h
+++ /dev/null
@@ -1,1320 +0,0 @@
1/******************************************************************************
2** High Performance device driver for the Symbios 53C896 controller.
3**
4** Copyright (C) 1998-2001 Gerard Roudier <groudier@free.fr>
5**
6** This driver also supports all the Symbios 53C8XX controller family,
7** except 53C810 revisions < 16, 53C825 revisions < 16 and all
8** revisions of 53C815 controllers.
9**
10** This driver is based on the Linux port of the FreeBSD ncr driver.
11**
12** Copyright (C) 1994 Wolfgang Stanglmeier
13**
14**-----------------------------------------------------------------------------
15**
16** This program is free software; you can redistribute it and/or modify
17** it under the terms of the GNU General Public License as published by
18** the Free Software Foundation; either version 2 of the License, or
19** (at your option) any later version.
20**
21** This program is distributed in the hope that it will be useful,
22** but WITHOUT ANY WARRANTY; without even the implied warranty of
23** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24** GNU General Public License for more details.
25**
26** You should have received a copy of the GNU General Public License
27** along with this program; if not, write to the Free Software
28** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29**
30**-----------------------------------------------------------------------------
31**
32** The Linux port of the FreeBSD ncr driver has been achieved in
33** november 1995 by:
34**
35** Gerard Roudier <groudier@free.fr>
36**
37** Being given that this driver originates from the FreeBSD version, and
38** in order to keep synergy on both, any suggested enhancements and corrections
39** received on Linux are automatically a potential candidate for the FreeBSD
40** version.
41**
42** The original driver has been written for 386bsd and FreeBSD by
43** Wolfgang Stanglmeier <wolf@cologne.de>
44** Stefan Esser <se@mi.Uni-Koeln.de>
45**
46**-----------------------------------------------------------------------------
47**
48** Major contributions:
49** --------------------
50**
51** NVRAM detection and reading.
52** Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
53**
54** Added support for MIPS big endian systems.
55** Carsten Langgaard, carstenl@mips.com
56** Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
57**
58** Added support for HP PARISC big endian systems.
59** Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
60**
61*******************************************************************************
62*/
63
64#ifndef SYM53C8XX_DEFS_H
65#define SYM53C8XX_DEFS_H
66
67#include <linux/config.h>
68
69/*
70** If you want a driver as small as possible, donnot define the
71** following options.
72*/
73#define SCSI_NCR_BOOT_COMMAND_LINE_SUPPORT
74#define SCSI_NCR_DEBUG_INFO_SUPPORT
75
76/*
77** To disable integrity checking, do not define the
78** following option.
79*/
80#ifdef CONFIG_SCSI_NCR53C8XX_INTEGRITY_CHECK
81# define SCSI_NCR_ENABLE_INTEGRITY_CHECK
82#endif
83
84/* ---------------------------------------------------------------------
85** Take into account kernel configured parameters.
86** Most of these options can be overridden at startup by a command line.
87** ---------------------------------------------------------------------
88*/
89
90/*
91 * For Ultra2 and Ultra3 SCSI support option, use special features.
92 *
93 * Value (default) means:
94 * bit 0 : all features enabled, except:
95 * bit 1 : PCI Write And Invalidate.
96 * bit 2 : Data Phase Mismatch handling from SCRIPTS.
97 *
98 * Use boot options ncr53c8xx=specf:1 if you want all chip features to be
99 * enabled by the driver.
100 */
101#define SCSI_NCR_SETUP_SPECIAL_FEATURES (3)
102
103#define SCSI_NCR_MAX_SYNC (80)
104
105/*
106 * Allow tags from 2 to 256, default 8
107 */
108#ifdef CONFIG_SCSI_NCR53C8XX_MAX_TAGS
109#if CONFIG_SCSI_NCR53C8XX_MAX_TAGS < 2
110#define SCSI_NCR_MAX_TAGS (2)
111#elif CONFIG_SCSI_NCR53C8XX_MAX_TAGS > 256
112#define SCSI_NCR_MAX_TAGS (256)
113#else
114#define SCSI_NCR_MAX_TAGS CONFIG_SCSI_NCR53C8XX_MAX_TAGS
115#endif
116#else
117#define SCSI_NCR_MAX_TAGS (8)
118#endif
119
120/*
121 * Allow tagged command queuing support if configured with default number
122 * of tags set to max (see above).
123 */
124#ifdef CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
125#define SCSI_NCR_SETUP_DEFAULT_TAGS CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
126#elif defined CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE
127#define SCSI_NCR_SETUP_DEFAULT_TAGS SCSI_NCR_MAX_TAGS
128#else
129#define SCSI_NCR_SETUP_DEFAULT_TAGS (0)
130#endif
131
132/*
133 * Immediate arbitration
134 */
135#if defined(CONFIG_SCSI_NCR53C8XX_IARB)
136#define SCSI_NCR_IARB_SUPPORT
137#endif
138
139/*
140 * Sync transfer frequency at startup.
141 * Allow from 5Mhz to 80Mhz default 20 Mhz.
142 */
143#ifndef CONFIG_SCSI_NCR53C8XX_SYNC
144#define CONFIG_SCSI_NCR53C8XX_SYNC (20)
145#elif CONFIG_SCSI_NCR53C8XX_SYNC > SCSI_NCR_MAX_SYNC
146#undef CONFIG_SCSI_NCR53C8XX_SYNC
147#define CONFIG_SCSI_NCR53C8XX_SYNC SCSI_NCR_MAX_SYNC
148#endif
149
150#if CONFIG_SCSI_NCR53C8XX_SYNC == 0
151#define SCSI_NCR_SETUP_DEFAULT_SYNC (255)
152#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 5
153#define SCSI_NCR_SETUP_DEFAULT_SYNC (50)
154#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 20
155#define SCSI_NCR_SETUP_DEFAULT_SYNC (250/(CONFIG_SCSI_NCR53C8XX_SYNC))
156#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 33
157#define SCSI_NCR_SETUP_DEFAULT_SYNC (11)
158#elif CONFIG_SCSI_NCR53C8XX_SYNC <= 40
159#define SCSI_NCR_SETUP_DEFAULT_SYNC (10)
160#else
161#define SCSI_NCR_SETUP_DEFAULT_SYNC (9)
162#endif
163
164/*
165 * Disallow disconnections at boot-up
166 */
167#ifdef CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
168#define SCSI_NCR_SETUP_DISCONNECTION (0)
169#else
170#define SCSI_NCR_SETUP_DISCONNECTION (1)
171#endif
172
173/*
174 * Force synchronous negotiation for all targets
175 */
176#ifdef CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO
177#define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (1)
178#else
179#define SCSI_NCR_SETUP_FORCE_SYNC_NEGO (0)
180#endif
181
182/*
183 * Disable master parity checking (flawed hardwares need that)
184 */
185#ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_MPARITY_CHECK
186#define SCSI_NCR_SETUP_MASTER_PARITY (0)
187#else
188#define SCSI_NCR_SETUP_MASTER_PARITY (1)
189#endif
190
191/*
192 * Disable scsi parity checking (flawed devices may need that)
193 */
194#ifdef CONFIG_SCSI_NCR53C8XX_DISABLE_PARITY_CHECK
195#define SCSI_NCR_SETUP_SCSI_PARITY (0)
196#else
197#define SCSI_NCR_SETUP_SCSI_PARITY (1)
198#endif
199
200/*
201 * Settle time after reset at boot-up
202 */
203#define SCSI_NCR_SETUP_SETTLE_TIME (2)
204
205/*
206** Bridge quirks work-around option defaulted to 1.
207*/
208#ifndef SCSI_NCR_PCIQ_WORK_AROUND_OPT
209#define SCSI_NCR_PCIQ_WORK_AROUND_OPT 1
210#endif
211
212/*
213** Work-around common bridge misbehaviour.
214**
215** - Do not flush posted writes in the opposite
216** direction on read.
217** - May reorder DMA writes to memory.
218**
219** This option should not affect performances
220** significantly, so it is the default.
221*/
222#if SCSI_NCR_PCIQ_WORK_AROUND_OPT == 1
223#define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
224#define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
225#define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
226
227/*
228** Same as option 1, but also deal with
229** misconfigured interrupts.
230**
231** - Edge triggerred instead of level sensitive.
232** - No interrupt line connected.
233** - IRQ number misconfigured.
234**
235** If no interrupt is delivered, the driver will
236** catch the interrupt conditions 10 times per
237** second. No need to say that this option is
238** not recommended.
239*/
240#elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 2
241#define SCSI_NCR_PCIQ_MAY_NOT_FLUSH_PW_UPSTREAM
242#define SCSI_NCR_PCIQ_MAY_REORDER_WRITES
243#define SCSI_NCR_PCIQ_MAY_MISS_COMPLETIONS
244#define SCSI_NCR_PCIQ_BROKEN_INTR
245
246/*
247** Some bridge designers decided to flush
248** everything prior to deliver the interrupt.
249** This option tries to deal with such a
250** behaviour.
251*/
252#elif SCSI_NCR_PCIQ_WORK_AROUND_OPT == 3
253#define SCSI_NCR_PCIQ_SYNC_ON_INTR
254#endif
255
256/*
257** Other parameters not configurable with "make config"
258** Avoid to change these constants, unless you know what you are doing.
259*/
260
261#define SCSI_NCR_ALWAYS_SIMPLE_TAG
262#define SCSI_NCR_MAX_SCATTER (127)
263#define SCSI_NCR_MAX_TARGET (16)
264
265/*
266** Compute some desirable value for CAN_QUEUE
267** and CMD_PER_LUN.
268** The driver will use lower values if these
269** ones appear to be too large.
270*/
271#define SCSI_NCR_CAN_QUEUE (8*SCSI_NCR_MAX_TAGS + 2*SCSI_NCR_MAX_TARGET)
272#define SCSI_NCR_CMD_PER_LUN (SCSI_NCR_MAX_TAGS)
273
274#define SCSI_NCR_SG_TABLESIZE (SCSI_NCR_MAX_SCATTER)
275#define SCSI_NCR_TIMER_INTERVAL (HZ)
276
277#if 1 /* defined CONFIG_SCSI_MULTI_LUN */
278#define SCSI_NCR_MAX_LUN (16)
279#else
280#define SCSI_NCR_MAX_LUN (1)
281#endif
282
283/*
284 * IO functions definition for big/little endian CPU support.
285 * For now, the NCR is only supported in little endian addressing mode,
286 */
287
288#ifdef __BIG_ENDIAN
289
290#define inw_l2b inw
291#define inl_l2b inl
292#define outw_b2l outw
293#define outl_b2l outl
294
295#define readb_raw readb
296#define writeb_raw writeb
297
298#if defined(SCSI_NCR_BIG_ENDIAN)
299#define readw_l2b __raw_readw
300#define readl_l2b __raw_readl
301#define writew_b2l __raw_writew
302#define writel_b2l __raw_writel
303#define readw_raw __raw_readw
304#define readl_raw __raw_readl
305#define writew_raw __raw_writew
306#define writel_raw __raw_writel
307#else /* Other big-endian */
308#define readw_l2b readw
309#define readl_l2b readl
310#define writew_b2l writew
311#define writel_b2l writel
312#define readw_raw readw
313#define readl_raw readl
314#define writew_raw writew
315#define writel_raw writel
316#endif
317
318#else /* little endian */
319
320#define inw_raw inw
321#define inl_raw inl
322#define outw_raw outw
323#define outl_raw outl
324
325#define readb_raw readb
326#define readw_raw readw
327#define readl_raw readl
328#define writeb_raw writeb
329#define writew_raw writew
330#define writel_raw writel
331
332#endif
333
334#if !defined(__hppa__) && !defined(__mips__)
335#ifdef SCSI_NCR_BIG_ENDIAN
336#error "The NCR in BIG ENDIAN addressing mode is not (yet) supported"
337#endif
338#endif
339
340#define MEMORY_BARRIER() mb()
341
342
343/*
344 * If the NCR uses big endian addressing mode over the
345 * PCI, actual io register addresses for byte and word
346 * accesses must be changed according to lane routing.
347 * Btw, ncr_offb() and ncr_offw() macros only apply to
348 * constants and so donnot generate bloated code.
349 */
350
351#if defined(SCSI_NCR_BIG_ENDIAN)
352
353#define ncr_offb(o) (((o)&~3)+((~((o)&3))&3))
354#define ncr_offw(o) (((o)&~3)+((~((o)&3))&2))
355
356#else
357
358#define ncr_offb(o) (o)
359#define ncr_offw(o) (o)
360
361#endif
362
363/*
364 * If the CPU and the NCR use same endian-ness addressing,
365 * no byte reordering is needed for script patching.
366 * Macro cpu_to_scr() is to be used for script patching.
367 * Macro scr_to_cpu() is to be used for getting a DWORD
368 * from the script.
369 */
370
371#if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
372
373#define cpu_to_scr(dw) cpu_to_le32(dw)
374#define scr_to_cpu(dw) le32_to_cpu(dw)
375
376#elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
377
378#define cpu_to_scr(dw) cpu_to_be32(dw)
379#define scr_to_cpu(dw) be32_to_cpu(dw)
380
381#else
382
383#define cpu_to_scr(dw) (dw)
384#define scr_to_cpu(dw) (dw)
385
386#endif
387
388/*
389 * Access to the controller chip.
390 *
391 * If the CPU and the NCR use same endian-ness addressing,
392 * no byte reordering is needed for accessing chip io
393 * registers. Functions suffixed by '_raw' are assumed
394 * to access the chip over the PCI without doing byte
395 * reordering. Functions suffixed by '_l2b' are
396 * assumed to perform little-endian to big-endian byte
397 * reordering, those suffixed by '_b2l' blah, blah,
398 * blah, ...
399 */
400
401/*
402 * MEMORY mapped IO input / output
403 */
404
405#define INB_OFF(o) readb_raw((char __iomem *)np->reg + ncr_offb(o))
406#define OUTB_OFF(o, val) writeb_raw((val), (char __iomem *)np->reg + ncr_offb(o))
407
408#if defined(__BIG_ENDIAN) && !defined(SCSI_NCR_BIG_ENDIAN)
409
410#define INW_OFF(o) readw_l2b((char __iomem *)np->reg + ncr_offw(o))
411#define INL_OFF(o) readl_l2b((char __iomem *)np->reg + (o))
412
413#define OUTW_OFF(o, val) writew_b2l((val), (char __iomem *)np->reg + ncr_offw(o))
414#define OUTL_OFF(o, val) writel_b2l((val), (char __iomem *)np->reg + (o))
415
416#elif defined(__LITTLE_ENDIAN) && defined(SCSI_NCR_BIG_ENDIAN)
417
418#define INW_OFF(o) readw_b2l((char __iomem *)np->reg + ncr_offw(o))
419#define INL_OFF(o) readl_b2l((char __iomem *)np->reg + (o))
420
421#define OUTW_OFF(o, val) writew_l2b((val), (char __iomem *)np->reg + ncr_offw(o))
422#define OUTL_OFF(o, val) writel_l2b((val), (char __iomem *)np->reg + (o))
423
424#else
425
426#ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
427/* Only 8 or 32 bit transfers allowed */
428#define INW_OFF(o) (readb((char __iomem *)np->reg + ncr_offw(o)) << 8 | readb((char __iomem *)np->reg + ncr_offw(o) + 1))
429#else
430#define INW_OFF(o) readw_raw((char __iomem *)np->reg + ncr_offw(o))
431#endif
432#define INL_OFF(o) readl_raw((char __iomem *)np->reg + (o))
433
434#ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
435/* Only 8 or 32 bit transfers allowed */
436#define OUTW_OFF(o, val) do { writeb((char)((val) >> 8), (char __iomem *)np->reg + ncr_offw(o)); writeb((char)(val), (char __iomem *)np->reg + ncr_offw(o) + 1); } while (0)
437#else
438#define OUTW_OFF(o, val) writew_raw((val), (char __iomem *)np->reg + ncr_offw(o))
439#endif
440#define OUTL_OFF(o, val) writel_raw((val), (char __iomem *)np->reg + (o))
441
442#endif
443
444#define INB(r) INB_OFF (offsetof(struct ncr_reg,r))
445#define INW(r) INW_OFF (offsetof(struct ncr_reg,r))
446#define INL(r) INL_OFF (offsetof(struct ncr_reg,r))
447
448#define OUTB(r, val) OUTB_OFF (offsetof(struct ncr_reg,r), (val))
449#define OUTW(r, val) OUTW_OFF (offsetof(struct ncr_reg,r), (val))
450#define OUTL(r, val) OUTL_OFF (offsetof(struct ncr_reg,r), (val))
451
452/*
453 * Set bit field ON, OFF
454 */
455
456#define OUTONB(r, m) OUTB(r, INB(r) | (m))
457#define OUTOFFB(r, m) OUTB(r, INB(r) & ~(m))
458#define OUTONW(r, m) OUTW(r, INW(r) | (m))
459#define OUTOFFW(r, m) OUTW(r, INW(r) & ~(m))
460#define OUTONL(r, m) OUTL(r, INL(r) | (m))
461#define OUTOFFL(r, m) OUTL(r, INL(r) & ~(m))
462
463/*
464 * We normally want the chip to have a consistent view
465 * of driver internal data structures when we restart it.
466 * Thus these macros.
467 */
468#define OUTL_DSP(v) \
469 do { \
470 MEMORY_BARRIER(); \
471 OUTL (nc_dsp, (v)); \
472 } while (0)
473
474#define OUTONB_STD() \
475 do { \
476 MEMORY_BARRIER(); \
477 OUTONB (nc_dcntl, (STD|NOCOM)); \
478 } while (0)
479
480
481/*
482** NCR53C8XX devices features table.
483*/
484struct ncr_chip {
485 unsigned short revision_id;
486 unsigned char burst_max; /* log-base-2 of max burst */
487 unsigned char offset_max;
488 unsigned char nr_divisor;
489 unsigned int features;
490#define FE_LED0 (1<<0)
491#define FE_WIDE (1<<1) /* Wide data transfers */
492#define FE_ULTRA (1<<2) /* Ultra speed 20Mtrans/sec */
493#define FE_DBLR (1<<4) /* Clock doubler present */
494#define FE_QUAD (1<<5) /* Clock quadrupler present */
495#define FE_ERL (1<<6) /* Enable read line */
496#define FE_CLSE (1<<7) /* Cache line size enable */
497#define FE_WRIE (1<<8) /* Write & Invalidate enable */
498#define FE_ERMP (1<<9) /* Enable read multiple */
499#define FE_BOF (1<<10) /* Burst opcode fetch */
500#define FE_DFS (1<<11) /* DMA fifo size */
501#define FE_PFEN (1<<12) /* Prefetch enable */
502#define FE_LDSTR (1<<13) /* Load/Store supported */
503#define FE_RAM (1<<14) /* On chip RAM present */
504#define FE_VARCLK (1<<15) /* SCSI clock may vary */
505#define FE_RAM8K (1<<16) /* On chip RAM sized 8Kb */
506#define FE_64BIT (1<<17) /* Have a 64-bit PCI interface */
507#define FE_IO256 (1<<18) /* Requires full 256 bytes in PCI space */
508#define FE_NOPM (1<<19) /* Scripts handles phase mismatch */
509#define FE_LEDC (1<<20) /* Hardware control of LED */
510#define FE_DIFF (1<<21) /* Support Differential SCSI */
511#define FE_66MHZ (1<<23) /* 66MHz PCI Support */
512#define FE_DAC (1<<24) /* Support DAC cycles (64 bit addressing) */
513#define FE_ISTAT1 (1<<25) /* Have ISTAT1, MBOX0, MBOX1 registers */
514#define FE_DAC_IN_USE (1<<26) /* Platform does DAC cycles */
515#define FE_EHP (1<<27) /* 720: Even host parity */
516#define FE_MUX (1<<28) /* 720: Multiplexed bus */
517#define FE_EA (1<<29) /* 720: Enable Ack */
518
519#define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP)
520#define FE_SCSI_SET (FE_WIDE|FE_ULTRA|FE_DBLR|FE_QUAD|F_CLK80)
521#define FE_SPECIAL_SET (FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM)
522};
523
524
525/*
526** Driver setup structure.
527**
528** This structure is initialized from linux config options.
529** It can be overridden at boot-up by the boot command line.
530*/
531#define SCSI_NCR_MAX_EXCLUDES 8
532struct ncr_driver_setup {
533 u8 master_parity;
534 u8 scsi_parity;
535 u8 disconnection;
536 u8 special_features;
537 u8 force_sync_nego;
538 u8 reverse_probe;
539 u8 pci_fix_up;
540 u8 use_nvram;
541 u8 verbose;
542 u8 default_tags;
543 u16 default_sync;
544 u16 debug;
545 u8 burst_max;
546 u8 led_pin;
547 u8 max_wide;
548 u8 settle_delay;
549 u8 diff_support;
550 u8 irqm;
551 u8 bus_check;
552 u8 optimize;
553 u8 recovery;
554 u8 host_id;
555 u16 iarb;
556 u32 excludes[SCSI_NCR_MAX_EXCLUDES];
557 char tag_ctrl[100];
558};
559
560/*
561** Initial setup.
562** Can be overriden at startup by a command line.
563*/
564#define SCSI_NCR_DRIVER_SETUP \
565{ \
566 SCSI_NCR_SETUP_MASTER_PARITY, \
567 SCSI_NCR_SETUP_SCSI_PARITY, \
568 SCSI_NCR_SETUP_DISCONNECTION, \
569 SCSI_NCR_SETUP_SPECIAL_FEATURES, \
570 SCSI_NCR_SETUP_FORCE_SYNC_NEGO, \
571 0, \
572 0, \
573 1, \
574 0, \
575 SCSI_NCR_SETUP_DEFAULT_TAGS, \
576 SCSI_NCR_SETUP_DEFAULT_SYNC, \
577 0x00, \
578 7, \
579 0, \
580 1, \
581 SCSI_NCR_SETUP_SETTLE_TIME, \
582 0, \
583 0, \
584 1, \
585 0, \
586 0, \
587 255, \
588 0x00 \
589}
590
591/*
592** Boot fail safe setup.
593** Override initial setup from boot command line:
594** ncr53c8xx=safe:y
595*/
596#define SCSI_NCR_DRIVER_SAFE_SETUP \
597{ \
598 0, \
599 1, \
600 0, \
601 0, \
602 0, \
603 0, \
604 0, \
605 1, \
606 2, \
607 0, \
608 255, \
609 0x00, \
610 255, \
611 0, \
612 0, \
613 10, \
614 1, \
615 1, \
616 1, \
617 0, \
618 0, \
619 255 \
620}
621
622/**************** ORIGINAL CONTENT of ncrreg.h from FreeBSD ******************/
623
624/*-----------------------------------------------------------------
625**
626** The ncr 53c810 register structure.
627**
628**-----------------------------------------------------------------
629*/
630
631struct ncr_reg {
632/*00*/ u8 nc_scntl0; /* full arb., ena parity, par->ATN */
633
634/*01*/ u8 nc_scntl1; /* no reset */
635 #define ISCON 0x10 /* connected to scsi */
636 #define CRST 0x08 /* force reset */
637 #define IARB 0x02 /* immediate arbitration */
638
639/*02*/ u8 nc_scntl2; /* no disconnect expected */
640 #define SDU 0x80 /* cmd: disconnect will raise error */
641 #define CHM 0x40 /* sta: chained mode */
642 #define WSS 0x08 /* sta: wide scsi send [W]*/
643 #define WSR 0x01 /* sta: wide scsi received [W]*/
644
645/*03*/ u8 nc_scntl3; /* cnf system clock dependent */
646 #define EWS 0x08 /* cmd: enable wide scsi [W]*/
647 #define ULTRA 0x80 /* cmd: ULTRA enable */
648 /* bits 0-2, 7 rsvd for C1010 */
649
650/*04*/ u8 nc_scid; /* cnf host adapter scsi address */
651 #define RRE 0x40 /* r/w:e enable response to resel. */
652 #define SRE 0x20 /* r/w:e enable response to select */
653
654/*05*/ u8 nc_sxfer; /* ### Sync speed and count */
655 /* bits 6-7 rsvd for C1010 */
656
657/*06*/ u8 nc_sdid; /* ### Destination-ID */
658
659/*07*/ u8 nc_gpreg; /* ??? IO-Pins */
660
661/*08*/ u8 nc_sfbr; /* ### First byte in phase */
662
663/*09*/ u8 nc_socl;
664 #define CREQ 0x80 /* r/w: SCSI-REQ */
665 #define CACK 0x40 /* r/w: SCSI-ACK */
666 #define CBSY 0x20 /* r/w: SCSI-BSY */
667 #define CSEL 0x10 /* r/w: SCSI-SEL */
668 #define CATN 0x08 /* r/w: SCSI-ATN */
669 #define CMSG 0x04 /* r/w: SCSI-MSG */
670 #define CC_D 0x02 /* r/w: SCSI-C_D */
671 #define CI_O 0x01 /* r/w: SCSI-I_O */
672
673/*0a*/ u8 nc_ssid;
674
675/*0b*/ u8 nc_sbcl;
676
677/*0c*/ u8 nc_dstat;
678 #define DFE 0x80 /* sta: dma fifo empty */
679 #define MDPE 0x40 /* int: master data parity error */
680 #define BF 0x20 /* int: script: bus fault */
681 #define ABRT 0x10 /* int: script: command aborted */
682 #define SSI 0x08 /* int: script: single step */
683 #define SIR 0x04 /* int: script: interrupt instruct. */
684 #define IID 0x01 /* int: script: illegal instruct. */
685
686/*0d*/ u8 nc_sstat0;
687 #define ILF 0x80 /* sta: data in SIDL register lsb */
688 #define ORF 0x40 /* sta: data in SODR register lsb */
689 #define OLF 0x20 /* sta: data in SODL register lsb */
690 #define AIP 0x10 /* sta: arbitration in progress */
691 #define LOA 0x08 /* sta: arbitration lost */
692 #define WOA 0x04 /* sta: arbitration won */
693 #define IRST 0x02 /* sta: scsi reset signal */
694 #define SDP 0x01 /* sta: scsi parity signal */
695
696/*0e*/ u8 nc_sstat1;
697 #define FF3210 0xf0 /* sta: bytes in the scsi fifo */
698
699/*0f*/ u8 nc_sstat2;
700 #define ILF1 0x80 /* sta: data in SIDL register msb[W]*/
701 #define ORF1 0x40 /* sta: data in SODR register msb[W]*/
702 #define OLF1 0x20 /* sta: data in SODL register msb[W]*/
703 #define DM 0x04 /* sta: DIFFSENS mismatch (895/6 only) */
704 #define LDSC 0x02 /* sta: disconnect & reconnect */
705
706/*10*/ u8 nc_dsa; /* --> Base page */
707/*11*/ u8 nc_dsa1;
708/*12*/ u8 nc_dsa2;
709/*13*/ u8 nc_dsa3;
710
711/*14*/ u8 nc_istat; /* --> Main Command and status */
712 #define CABRT 0x80 /* cmd: abort current operation */
713 #define SRST 0x40 /* mod: reset chip */
714 #define SIGP 0x20 /* r/w: message from host to ncr */
715 #define SEM 0x10 /* r/w: message between host + ncr */
716 #define CON 0x08 /* sta: connected to scsi */
717 #define INTF 0x04 /* sta: int on the fly (reset by wr)*/
718 #define SIP 0x02 /* sta: scsi-interrupt */
719 #define DIP 0x01 /* sta: host/script interrupt */
720
721/*15*/ u8 nc_istat1; /* 896 and later cores only */
722 #define FLSH 0x04 /* sta: chip is flushing */
723 #define SRUN 0x02 /* sta: scripts are running */
724 #define SIRQD 0x01 /* r/w: disable INT pin */
725
726/*16*/ u8 nc_mbox0; /* 896 and later cores only */
727/*17*/ u8 nc_mbox1; /* 896 and later cores only */
728
729/*18*/ u8 nc_ctest0;
730 #define EHP 0x04 /* 720 even host parity */
731/*19*/ u8 nc_ctest1;
732
733/*1a*/ u8 nc_ctest2;
734 #define CSIGP 0x40
735 /* bits 0-2,7 rsvd for C1010 */
736
737/*1b*/ u8 nc_ctest3;
738 #define FLF 0x08 /* cmd: flush dma fifo */
739 #define CLF 0x04 /* cmd: clear dma fifo */
740 #define FM 0x02 /* mod: fetch pin mode */
741 #define WRIE 0x01 /* mod: write and invalidate enable */
742 /* bits 4-7 rsvd for C1010 */
743
744/*1c*/ u32 nc_temp; /* ### Temporary stack */
745
746/*20*/ u8 nc_dfifo;
747/*21*/ u8 nc_ctest4;
748 #define MUX 0x80 /* 720 host bus multiplex mode */
749 #define BDIS 0x80 /* mod: burst disable */
750 #define MPEE 0x08 /* mod: master parity error enable */
751
752/*22*/ u8 nc_ctest5;
753 #define DFS 0x20 /* mod: dma fifo size */
754 /* bits 0-1, 3-7 rsvd for C1010 */
755/*23*/ u8 nc_ctest6;
756
757/*24*/ u32 nc_dbc; /* ### Byte count and command */
758/*28*/ u32 nc_dnad; /* ### Next command register */
759/*2c*/ u32 nc_dsp; /* --> Script Pointer */
760/*30*/ u32 nc_dsps; /* --> Script pointer save/opcode#2 */
761
762/*34*/ u8 nc_scratcha; /* Temporary register a */
763/*35*/ u8 nc_scratcha1;
764/*36*/ u8 nc_scratcha2;
765/*37*/ u8 nc_scratcha3;
766
767/*38*/ u8 nc_dmode;
768 #define BL_2 0x80 /* mod: burst length shift value +2 */
769 #define BL_1 0x40 /* mod: burst length shift value +1 */
770 #define ERL 0x08 /* mod: enable read line */
771 #define ERMP 0x04 /* mod: enable read multiple */
772 #define BOF 0x02 /* mod: burst op code fetch */
773
774/*39*/ u8 nc_dien;
775/*3a*/ u8 nc_sbr;
776
777/*3b*/ u8 nc_dcntl; /* --> Script execution control */
778 #define CLSE 0x80 /* mod: cache line size enable */
779 #define PFF 0x40 /* cmd: pre-fetch flush */
780 #define PFEN 0x20 /* mod: pre-fetch enable */
781 #define EA 0x20 /* mod: 720 enable-ack */
782 #define SSM 0x10 /* mod: single step mode */
783 #define IRQM 0x08 /* mod: irq mode (1 = totem pole !) */
784 #define STD 0x04 /* cmd: start dma mode */
785 #define IRQD 0x02 /* mod: irq disable */
786 #define NOCOM 0x01 /* cmd: protect sfbr while reselect */
787 /* bits 0-1 rsvd for C1010 */
788
789/*3c*/ u32 nc_adder;
790
791/*40*/ u16 nc_sien; /* -->: interrupt enable */
792/*42*/ u16 nc_sist; /* <--: interrupt status */
793 #define SBMC 0x1000/* sta: SCSI Bus Mode Change (895/6 only) */
794 #define STO 0x0400/* sta: timeout (select) */
795 #define GEN 0x0200/* sta: timeout (general) */
796 #define HTH 0x0100/* sta: timeout (handshake) */
797 #define MA 0x80 /* sta: phase mismatch */
798 #define CMP 0x40 /* sta: arbitration complete */
799 #define SEL 0x20 /* sta: selected by another device */
800 #define RSL 0x10 /* sta: reselected by another device*/
801 #define SGE 0x08 /* sta: gross error (over/underflow)*/
802 #define UDC 0x04 /* sta: unexpected disconnect */
803 #define RST 0x02 /* sta: scsi bus reset detected */
804 #define PAR 0x01 /* sta: scsi parity error */
805
806/*44*/ u8 nc_slpar;
807/*45*/ u8 nc_swide;
808/*46*/ u8 nc_macntl;
809/*47*/ u8 nc_gpcntl;
810/*48*/ u8 nc_stime0; /* cmd: timeout for select&handshake*/
811/*49*/ u8 nc_stime1; /* cmd: timeout user defined */
812/*4a*/ u16 nc_respid; /* sta: Reselect-IDs */
813
814/*4c*/ u8 nc_stest0;
815
816/*4d*/ u8 nc_stest1;
817 #define SCLK 0x80 /* Use the PCI clock as SCSI clock */
818 #define DBLEN 0x08 /* clock doubler running */
819 #define DBLSEL 0x04 /* clock doubler selected */
820
821
822/*4e*/ u8 nc_stest2;
823 #define ROF 0x40 /* reset scsi offset (after gross error!) */
824 #define DIF 0x20 /* 720 SCSI differential mode */
825 #define EXT 0x02 /* extended filtering */
826
827/*4f*/ u8 nc_stest3;
828 #define TE 0x80 /* c: tolerAnt enable */
829 #define HSC 0x20 /* c: Halt SCSI Clock */
830 #define CSF 0x02 /* c: clear scsi fifo */
831
832/*50*/ u16 nc_sidl; /* Lowlevel: latched from scsi data */
833/*52*/ u8 nc_stest4;
834 #define SMODE 0xc0 /* SCSI bus mode (895/6 only) */
835 #define SMODE_HVD 0x40 /* High Voltage Differential */
836 #define SMODE_SE 0x80 /* Single Ended */
837 #define SMODE_LVD 0xc0 /* Low Voltage Differential */
838 #define LCKFRQ 0x20 /* Frequency Lock (895/6 only) */
839 /* bits 0-5 rsvd for C1010 */
840
841/*53*/ u8 nc_53_;
842/*54*/ u16 nc_sodl; /* Lowlevel: data out to scsi data */
843/*56*/ u8 nc_ccntl0; /* Chip Control 0 (896) */
844 #define ENPMJ 0x80 /* Enable Phase Mismatch Jump */
845 #define PMJCTL 0x40 /* Phase Mismatch Jump Control */
846 #define ENNDJ 0x20 /* Enable Non Data PM Jump */
847 #define DISFC 0x10 /* Disable Auto FIFO Clear */
848 #define DILS 0x02 /* Disable Internal Load/Store */
849 #define DPR 0x01 /* Disable Pipe Req */
850
851/*57*/ u8 nc_ccntl1; /* Chip Control 1 (896) */
852 #define ZMOD 0x80 /* High Impedance Mode */
853 #define DIC 0x10 /* Disable Internal Cycles */
854 #define DDAC 0x08 /* Disable Dual Address Cycle */
855 #define XTIMOD 0x04 /* 64-bit Table Ind. Indexing Mode */
856 #define EXTIBMV 0x02 /* Enable 64-bit Table Ind. BMOV */
857 #define EXDBMV 0x01 /* Enable 64-bit Direct BMOV */
858
859/*58*/ u16 nc_sbdl; /* Lowlevel: data from scsi data */
860/*5a*/ u16 nc_5a_;
861
862/*5c*/ u8 nc_scr0; /* Working register B */
863/*5d*/ u8 nc_scr1; /* */
864/*5e*/ u8 nc_scr2; /* */
865/*5f*/ u8 nc_scr3; /* */
866
867/*60*/ u8 nc_scrx[64]; /* Working register C-R */
868/*a0*/ u32 nc_mmrs; /* Memory Move Read Selector */
869/*a4*/ u32 nc_mmws; /* Memory Move Write Selector */
870/*a8*/ u32 nc_sfs; /* Script Fetch Selector */
871/*ac*/ u32 nc_drs; /* DSA Relative Selector */
872/*b0*/ u32 nc_sbms; /* Static Block Move Selector */
873/*b4*/ u32 nc_dbms; /* Dynamic Block Move Selector */
874/*b8*/ u32 nc_dnad64; /* DMA Next Address 64 */
875/*bc*/ u16 nc_scntl4; /* C1010 only */
876 #define U3EN 0x80 /* Enable Ultra 3 */
877 #define AIPEN 0x40 /* Allow check upper byte lanes */
878 #define XCLKH_DT 0x08 /* Extra clock of data hold on DT
879 transfer edge */
880 #define XCLKH_ST 0x04 /* Extra clock of data hold on ST
881 transfer edge */
882
883/*be*/ u8 nc_aipcntl0; /* Epat Control 1 C1010 only */
884/*bf*/ u8 nc_aipcntl1; /* AIP Control C1010_66 Only */
885
886/*c0*/ u32 nc_pmjad1; /* Phase Mismatch Jump Address 1 */
887/*c4*/ u32 nc_pmjad2; /* Phase Mismatch Jump Address 2 */
888/*c8*/ u8 nc_rbc; /* Remaining Byte Count */
889/*c9*/ u8 nc_rbc1; /* */
890/*ca*/ u8 nc_rbc2; /* */
891/*cb*/ u8 nc_rbc3; /* */
892
893/*cc*/ u8 nc_ua; /* Updated Address */
894/*cd*/ u8 nc_ua1; /* */
895/*ce*/ u8 nc_ua2; /* */
896/*cf*/ u8 nc_ua3; /* */
897/*d0*/ u32 nc_esa; /* Entry Storage Address */
898/*d4*/ u8 nc_ia; /* Instruction Address */
899/*d5*/ u8 nc_ia1;
900/*d6*/ u8 nc_ia2;
901/*d7*/ u8 nc_ia3;
902/*d8*/ u32 nc_sbc; /* SCSI Byte Count (3 bytes only) */
903/*dc*/ u32 nc_csbc; /* Cumulative SCSI Byte Count */
904
905 /* Following for C1010 only */
906/*e0*/ u16 nc_crcpad; /* CRC Value */
907/*e2*/ u8 nc_crccntl0; /* CRC control register */
908 #define SNDCRC 0x10 /* Send CRC Request */
909/*e3*/ u8 nc_crccntl1; /* CRC control register */
910/*e4*/ u32 nc_crcdata; /* CRC data register */
911/*e8*/ u32 nc_e8_; /* rsvd */
912/*ec*/ u32 nc_ec_; /* rsvd */
913/*f0*/ u16 nc_dfbc; /* DMA FIFO byte count */
914
915};
916
917/*-----------------------------------------------------------
918**
919** Utility macros for the script.
920**
921**-----------------------------------------------------------
922*/
923
924#define REGJ(p,r) (offsetof(struct ncr_reg, p ## r))
925#define REG(r) REGJ (nc_, r)
926
927typedef u32 ncrcmd;
928
929/*-----------------------------------------------------------
930**
931** SCSI phases
932**
933** DT phases illegal for ncr driver.
934**
935**-----------------------------------------------------------
936*/
937
938#define SCR_DATA_OUT 0x00000000
939#define SCR_DATA_IN 0x01000000
940#define SCR_COMMAND 0x02000000
941#define SCR_STATUS 0x03000000
942#define SCR_DT_DATA_OUT 0x04000000
943#define SCR_DT_DATA_IN 0x05000000
944#define SCR_MSG_OUT 0x06000000
945#define SCR_MSG_IN 0x07000000
946
947#define SCR_ILG_OUT 0x04000000
948#define SCR_ILG_IN 0x05000000
949
950/*-----------------------------------------------------------
951**
952** Data transfer via SCSI.
953**
954**-----------------------------------------------------------
955**
956** MOVE_ABS (LEN)
957** <<start address>>
958**
959** MOVE_IND (LEN)
960** <<dnad_offset>>
961**
962** MOVE_TBL
963** <<dnad_offset>>
964**
965**-----------------------------------------------------------
966*/
967
968#define OPC_MOVE 0x08000000
969
970#define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l))
971#define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l))
972#define SCR_MOVE_TBL (0x10000000 | OPC_MOVE)
973
974#define SCR_CHMOV_ABS(l) ((0x00000000) | (l))
975#define SCR_CHMOV_IND(l) ((0x20000000) | (l))
976#define SCR_CHMOV_TBL (0x10000000)
977
978struct scr_tblmove {
979 u32 size;
980 u32 addr;
981};
982
983/*-----------------------------------------------------------
984**
985** Selection
986**
987**-----------------------------------------------------------
988**
989** SEL_ABS | SCR_ID (0..15) [ | REL_JMP]
990** <<alternate_address>>
991**
992** SEL_TBL | << dnad_offset>> [ | REL_JMP]
993** <<alternate_address>>
994**
995**-----------------------------------------------------------
996*/
997
998#define SCR_SEL_ABS 0x40000000
999#define SCR_SEL_ABS_ATN 0x41000000
1000#define SCR_SEL_TBL 0x42000000
1001#define SCR_SEL_TBL_ATN 0x43000000
1002
1003
1004#ifdef SCSI_NCR_BIG_ENDIAN
1005struct scr_tblsel {
1006 u8 sel_scntl3;
1007 u8 sel_id;
1008 u8 sel_sxfer;
1009 u8 sel_scntl4;
1010};
1011#else
1012struct scr_tblsel {
1013 u8 sel_scntl4;
1014 u8 sel_sxfer;
1015 u8 sel_id;
1016 u8 sel_scntl3;
1017};
1018#endif
1019
1020#define SCR_JMP_REL 0x04000000
1021#define SCR_ID(id) (((u32)(id)) << 16)
1022
1023/*-----------------------------------------------------------
1024**
1025** Waiting for Disconnect or Reselect
1026**
1027**-----------------------------------------------------------
1028**
1029** WAIT_DISC
1030** dummy: <<alternate_address>>
1031**
1032** WAIT_RESEL
1033** <<alternate_address>>
1034**
1035**-----------------------------------------------------------
1036*/
1037
1038#define SCR_WAIT_DISC 0x48000000
1039#define SCR_WAIT_RESEL 0x50000000
1040
1041/*-----------------------------------------------------------
1042**
1043** Bit Set / Reset
1044**
1045**-----------------------------------------------------------
1046**
1047** SET (flags {|.. })
1048**
1049** CLR (flags {|.. })
1050**
1051**-----------------------------------------------------------
1052*/
1053
1054#define SCR_SET(f) (0x58000000 | (f))
1055#define SCR_CLR(f) (0x60000000 | (f))
1056
1057#define SCR_CARRY 0x00000400
1058#define SCR_TRG 0x00000200
1059#define SCR_ACK 0x00000040
1060#define SCR_ATN 0x00000008
1061
1062
1063
1064
1065/*-----------------------------------------------------------
1066**
1067** Memory to memory move
1068**
1069**-----------------------------------------------------------
1070**
1071** COPY (bytecount)
1072** << source_address >>
1073** << destination_address >>
1074**
1075** SCR_COPY sets the NO FLUSH option by default.
1076** SCR_COPY_F does not set this option.
1077**
1078** For chips which do not support this option,
1079** ncr_copy_and_bind() will remove this bit.
1080**-----------------------------------------------------------
1081*/
1082
1083#define SCR_NO_FLUSH 0x01000000
1084
1085#define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n))
1086#define SCR_COPY_F(n) (0xc0000000 | (n))
1087
1088/*-----------------------------------------------------------
1089**
1090** Register move and binary operations
1091**
1092**-----------------------------------------------------------
1093**
1094** SFBR_REG (reg, op, data) reg = SFBR op data
1095** << 0 >>
1096**
1097** REG_SFBR (reg, op, data) SFBR = reg op data
1098** << 0 >>
1099**
1100** REG_REG (reg, op, data) reg = reg op data
1101** << 0 >>
1102**
1103**-----------------------------------------------------------
1104** On 810A, 860, 825A, 875, 895 and 896 chips the content
1105** of SFBR register can be used as data (SCR_SFBR_DATA).
1106** The 896 has additionnal IO registers starting at
1107** offset 0x80. Bit 7 of register offset is stored in
1108** bit 7 of the SCRIPTS instruction first DWORD.
1109**-----------------------------------------------------------
1110*/
1111
1112#define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80))
1113
1114#define SCR_SFBR_REG(reg,op,data) \
1115 (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1116
1117#define SCR_REG_SFBR(reg,op,data) \
1118 (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1119
1120#define SCR_REG_REG(reg,op,data) \
1121 (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul))
1122
1123
1124#define SCR_LOAD 0x00000000
1125#define SCR_SHL 0x01000000
1126#define SCR_OR 0x02000000
1127#define SCR_XOR 0x03000000
1128#define SCR_AND 0x04000000
1129#define SCR_SHR 0x05000000
1130#define SCR_ADD 0x06000000
1131#define SCR_ADDC 0x07000000
1132
1133#define SCR_SFBR_DATA (0x00800000>>8ul) /* Use SFBR as data */
1134
1135/*-----------------------------------------------------------
1136**
1137** FROM_REG (reg) SFBR = reg
1138** << 0 >>
1139**
1140** TO_REG (reg) reg = SFBR
1141** << 0 >>
1142**
1143** LOAD_REG (reg, data) reg = <data>
1144** << 0 >>
1145**
1146** LOAD_SFBR(data) SFBR = <data>
1147** << 0 >>
1148**
1149**-----------------------------------------------------------
1150*/
1151
1152#define SCR_FROM_REG(reg) \
1153 SCR_REG_SFBR(reg,SCR_OR,0)
1154
1155#define SCR_TO_REG(reg) \
1156 SCR_SFBR_REG(reg,SCR_OR,0)
1157
1158#define SCR_LOAD_REG(reg,data) \
1159 SCR_REG_REG(reg,SCR_LOAD,data)
1160
1161#define SCR_LOAD_SFBR(data) \
1162 (SCR_REG_SFBR (gpreg, SCR_LOAD, data))
1163
1164/*-----------------------------------------------------------
1165**
1166** LOAD from memory to register.
1167** STORE from register to memory.
1168**
1169** Only supported by 810A, 860, 825A, 875, 895 and 896.
1170**
1171**-----------------------------------------------------------
1172**
1173** LOAD_ABS (LEN)
1174** <<start address>>
1175**
1176** LOAD_REL (LEN) (DSA relative)
1177** <<dsa_offset>>
1178**
1179**-----------------------------------------------------------
1180*/
1181
1182#define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul)
1183#define SCR_NO_FLUSH2 0x02000000
1184#define SCR_DSA_REL2 0x10000000
1185
1186#define SCR_LOAD_R(reg, how, n) \
1187 (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1188
1189#define SCR_STORE_R(reg, how, n) \
1190 (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n))
1191
1192#define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n)
1193#define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n)
1194#define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n)
1195#define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n)
1196
1197#define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n)
1198#define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n)
1199#define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n)
1200#define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n)
1201
1202
1203/*-----------------------------------------------------------
1204**
1205** Waiting for Disconnect or Reselect
1206**
1207**-----------------------------------------------------------
1208**
1209** JUMP [ | IFTRUE/IFFALSE ( ... ) ]
1210** <<address>>
1211**
1212** JUMPR [ | IFTRUE/IFFALSE ( ... ) ]
1213** <<distance>>
1214**
1215** CALL [ | IFTRUE/IFFALSE ( ... ) ]
1216** <<address>>
1217**
1218** CALLR [ | IFTRUE/IFFALSE ( ... ) ]
1219** <<distance>>
1220**
1221** RETURN [ | IFTRUE/IFFALSE ( ... ) ]
1222** <<dummy>>
1223**
1224** INT [ | IFTRUE/IFFALSE ( ... ) ]
1225** <<ident>>
1226**
1227** INT_FLY [ | IFTRUE/IFFALSE ( ... ) ]
1228** <<ident>>
1229**
1230** Conditions:
1231** WHEN (phase)
1232** IF (phase)
1233** CARRYSET
1234** DATA (data, mask)
1235**
1236**-----------------------------------------------------------
1237*/
1238
1239#define SCR_NO_OP 0x80000000
1240#define SCR_JUMP 0x80080000
1241#define SCR_JUMP64 0x80480000
1242#define SCR_JUMPR 0x80880000
1243#define SCR_CALL 0x88080000
1244#define SCR_CALLR 0x88880000
1245#define SCR_RETURN 0x90080000
1246#define SCR_INT 0x98080000
1247#define SCR_INT_FLY 0x98180000
1248
1249#define IFFALSE(arg) (0x00080000 | (arg))
1250#define IFTRUE(arg) (0x00000000 | (arg))
1251
1252#define WHEN(phase) (0x00030000 | (phase))
1253#define IF(phase) (0x00020000 | (phase))
1254
1255#define DATA(D) (0x00040000 | ((D) & 0xff))
1256#define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff))
1257
1258#define CARRYSET (0x00200000)
1259
1260/*-----------------------------------------------------------
1261**
1262** SCSI constants.
1263**
1264**-----------------------------------------------------------
1265*/
1266
1267/*
1268** Messages
1269*/
1270
1271#define M_COMPLETE COMMAND_COMPLETE
1272#define M_EXTENDED EXTENDED_MESSAGE
1273#define M_SAVE_DP SAVE_POINTERS
1274#define M_RESTORE_DP RESTORE_POINTERS
1275#define M_DISCONNECT DISCONNECT
1276#define M_ID_ERROR INITIATOR_ERROR
1277#define M_ABORT ABORT_TASK_SET
1278#define M_REJECT MESSAGE_REJECT
1279#define M_NOOP NOP
1280#define M_PARITY MSG_PARITY_ERROR
1281#define M_LCOMPLETE LINKED_CMD_COMPLETE
1282#define M_FCOMPLETE LINKED_FLG_CMD_COMPLETE
1283#define M_RESET TARGET_RESET
1284#define M_ABORT_TAG ABORT_TASK
1285#define M_CLEAR_QUEUE CLEAR_TASK_SET
1286#define M_INIT_REC INITIATE_RECOVERY
1287#define M_REL_REC RELEASE_RECOVERY
1288#define M_TERMINATE (0x11)
1289#define M_SIMPLE_TAG SIMPLE_QUEUE_TAG
1290#define M_HEAD_TAG HEAD_OF_QUEUE_TAG
1291#define M_ORDERED_TAG ORDERED_QUEUE_TAG
1292#define M_IGN_RESIDUE IGNORE_WIDE_RESIDUE
1293#define M_IDENTIFY (0x80)
1294
1295#define M_X_MODIFY_DP EXTENDED_MODIFY_DATA_POINTER
1296#define M_X_SYNC_REQ EXTENDED_SDTR
1297#define M_X_WIDE_REQ EXTENDED_WDTR
1298#define M_X_PPR_REQ EXTENDED_PPR
1299
1300/*
1301** Status
1302*/
1303
1304#define S_GOOD (0x00)
1305#define S_CHECK_COND (0x02)
1306#define S_COND_MET (0x04)
1307#define S_BUSY (0x08)
1308#define S_INT (0x10)
1309#define S_INT_COND_MET (0x14)
1310#define S_CONFLICT (0x18)
1311#define S_TERMINATED (0x20)
1312#define S_QUEUE_FULL (0x28)
1313#define S_ILLEGAL (0xff)
1314#define S_SENSE (0x80)
1315
1316/*
1317 * End of ncrreg from FreeBSD
1318 */
1319
1320#endif /* defined SYM53C8XX_DEFS_H */
diff --git a/drivers/scsi/wd33c93.c b/drivers/scsi/wd33c93.c
index fd63add6a577..fb53eeaee617 100644
--- a/drivers/scsi/wd33c93.c
+++ b/drivers/scsi/wd33c93.c
@@ -465,7 +465,7 @@ wd33c93_execute(struct Scsi_Host *instance)
465 */ 465 */
466 466
467 cmd = (struct scsi_cmnd *) hostdata->input_Q; 467 cmd = (struct scsi_cmnd *) hostdata->input_Q;
468 prev = 0; 468 prev = NULL;
469 while (cmd) { 469 while (cmd) {
470 if (!(hostdata->busy[cmd->device->id] & (1 << cmd->device->lun))) 470 if (!(hostdata->busy[cmd->device->id] & (1 << cmd->device->lun)))
471 break; 471 break;
@@ -1569,7 +1569,7 @@ wd33c93_abort(struct scsi_cmnd * cmd)
1569 */ 1569 */
1570 1570
1571 tmp = (struct scsi_cmnd *) hostdata->input_Q; 1571 tmp = (struct scsi_cmnd *) hostdata->input_Q;
1572 prev = 0; 1572 prev = NULL;
1573 while (tmp) { 1573 while (tmp) {
1574 if (tmp == cmd) { 1574 if (tmp == cmd) {
1575 if (prev) 1575 if (prev)