Commit 798c67c3 authored by Rolf Eike Beer's avatar Rolf Eike Beer Committed by Linus Torvalds

[PATCH] improve NCR53c710 SCSI driver

parent 5f8c40c2
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
*---------------------------------------------------------------------------- *----------------------------------------------------------------------------
* *
* MCA card detection code by Trent McNair. * MCA card detection code by Trent McNair.
* Fixes to not explicitly nul bss data from Xavier Bestel.
* Some multiboard fixes from Rolf Eike Beer.
* Auto probing of EISA config space from Trevor Hemsley.
* *
* Various bits of code in this driver have been copied from 53c7,8xx,c, * Various bits of code in this driver have been copied from 53c7,8xx,c,
* which is coyright Drew Eckhardt. The scripts for the SCSI chip are * which is coyright Drew Eckhardt. The scripts for the SCSI chip are
...@@ -41,6 +44,16 @@ ...@@ -41,6 +44,16 @@
* and insmod parameters similar to * and insmod parameters similar to
* sim710="addr:0x9000 irq:15" * sim710="addr:0x9000 irq:15"
* *
* Multiple controllers can also be set up by command line, provided the
* addr: parameter is specified first for each controller. e.g.
* sim710="addr:0x9000 irq:15 addr:0x8000 irq:14"
*
* To seperate the different options, ' ', '+', and ',' can be used, except
* that ',' can not be used in module parameters. ' ' can be a pain, because
* it needs to be quoted, which causes problems with some installers.
* The command line above is completely equivalent to
* sim710="addr:0x9000+irq:15+addr:0x8000+irq:14"
*
* The complete list of options are: * The complete list of options are:
* *
* addr:0x9000 Specifies the base I/O port (or address) of the 53C710. * addr:0x9000 Specifies the base I/O port (or address) of the 53C710.
...@@ -49,12 +62,18 @@ ...@@ -49,12 +62,18 @@
* ignore:0x0a Makes the driver ignore SCSI IDs 0 and 2. * ignore:0x0a Makes the driver ignore SCSI IDs 0 and 2.
* nodisc:0x70 Prevents disconnects from IDs 6, 5 and 4. * nodisc:0x70 Prevents disconnects from IDs 6, 5 and 4.
* noneg:0x10 Prevents SDTR negotiation on ID 4. * noneg:0x10 Prevents SDTR negotiation on ID 4.
* disabled:1 Completely disables the driver. When present, overrides
* all other options.
*
* The driver will auto-probe chip addresses and IRQs now, so typically no
* parameters are needed. Auto-probing of addresses is disabled if any addr:
* parameters are specified.
* *
* Current limitations: * Current limitations:
* *
* o Async only * o Async only
* o Severely lacking in error recovery * o Severely lacking in error recovery
* o Auto detection of IRQs and chip addresses only on MCA architectures * o 'debug:' should be per host really.
* *
*/ */
...@@ -71,27 +90,20 @@ ...@@ -71,27 +90,20 @@
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/mca.h> #include <linux/mca.h>
#include <linux/interrupt.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/system.h> #include <asm/system.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,17)
#include <linux/spinlock.h> #include <linux/spinlock.h>
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,93)
#include <asm/spinlock.h>
#endif
#include <asm/io.h> #include <asm/io.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <linux/blk.h> #include <linux/blk.h>
#ifdef CONFIG_TP34V_SCSI /* All targets are I/O mapped at the moment */
#include <asm/tp34vhw.h>
#define MEM_MAPPED
#elif defined(CONFIG_MCA)
#define IO_MAPPED #define IO_MAPPED
#if defined(CONFIG_MCA)
/* /*
* For each known microchannel card using the 53c710 we need a list * For each known microchannel card using the 53c710 we need a list
* of possible IRQ and IO settings, as well as their corresponding * of possible IRQ and IO settings, as well as their corresponding
...@@ -116,12 +128,6 @@ ...@@ -116,12 +128,6 @@
#define MCA_004F_IRQS { 5, 9, 14 } #define MCA_004F_IRQS { 5, 9, 14 }
#else
/* Assume an Intel platform */
#define IO_MAPPED
#endif #endif
#include "scsi.h" #include "scsi.h"
...@@ -151,7 +157,7 @@ ...@@ -151,7 +157,7 @@
#ifdef DEBUG #ifdef DEBUG
#define DEB(m,x) if (sim710_debug & m) x #define DEB(m,x) if (sim710_debug & m) x
int sim710_debug = 0; int sim710_debug;
#else #else
#define DEB(m,x) #define DEB(m,x)
#endif #endif
...@@ -178,7 +184,7 @@ int sim710_debug = 0; ...@@ -178,7 +184,7 @@ int sim710_debug = 0;
#define STATE_BUSY 3 #define STATE_BUSY 3
#define STATE_DISABLED 4 #define STATE_DISABLED 4
#define MAXBOARDS 2 /* Increase this and the sizes of the #define MAXBOARDS 4 /* Increase this and the sizes of the
arrays below, if you need more.. */ arrays below, if you need more.. */
#ifdef MODULE #ifdef MODULE
...@@ -193,44 +199,15 @@ MODULE_PARM(sim710, "s"); ...@@ -193,44 +199,15 @@ MODULE_PARM(sim710, "s");
#endif #endif
static int sim710_errors = 0; /* Count of error interrupts */ static int sim710_errors; /* Count of error interrupts */
static int sim710_intrs = 0; /* Count of all interrupts */ static int sim710_intrs; /* Count of all interrupts */
static int ignore_ids = 0; /* Accept all SCSI IDs */ static int ignore_ids[MAXBOARDS]; /* Accept all SCSI IDs */
static int opt_nodisc = 0; /* Allow disconnect on all IDs */ static int opt_nodisc[MAXBOARDS]; /* Allow disconnect on all IDs */
static int opt_noneg = 0; /* Allow SDTR negotiation on all IDs */ static int opt_noneg[MAXBOARDS]; /* Allow SDTR negotiation on all IDs */
static int hostdata_order; /* Encoded size of hostdata for free_pages() */
#ifdef CONFIG_TP34V_SCSI static int no_of_boards; /* Actual number of boards/chips */
static unsigned int bases[MAXBOARDS]; /* Base addresses of chips */
/* Special hardwired case for Tadpole TP34V at the moment, otherwise static unsigned int irq_vectors[MAXBOARDS]; /* IRQ vectors used by chips */
* boot parameters 'sim710=addr:0x8000,irq:15' (for example) must be given.
*/
static int no_of_boards = 2;
static unsigned int bases[MAXBOARDS] = {
TP34V_SCSI0_BASE, TP34V_SCSI1_BASE
};
static unsigned int irq_vectors[MAXBOARDS] = {
TP34V_SCSI0_VECTOR, TP34V_SCSI1_VECTOR
};
static unsigned int irq_index[MAXBOARDS] = {
TP34V_SCSI0_IRQ_INDEX, TP34V_SCSI1_IRQ_INDEX
};
#else
/* All other cases use boot/module params, or auto-detect */
static int no_of_boards = 0;
static unsigned int bases[MAXBOARDS] = {
0
};
static unsigned int irq_vectors[MAXBOARDS] = {
0
};
#endif
/* The SCSI Script!!! */ /* The SCSI Script!!! */
...@@ -249,7 +226,6 @@ static unsigned int irq_vectors[MAXBOARDS] = { ...@@ -249,7 +226,6 @@ static unsigned int irq_vectors[MAXBOARDS] = {
#define MAX_SG 128 /* Scatter/Gather elements */ #define MAX_SG 128 /* Scatter/Gather elements */
#define MAX_MSGOUT 8 #define MAX_MSGOUT 8
#define MAX_MSGIN 8 #define MAX_MSGIN 8
#define MAX_CMND 12 #define MAX_CMND 12
...@@ -263,6 +239,9 @@ struct sim710_hostdata{ ...@@ -263,6 +239,9 @@ struct sim710_hostdata{
u8 negotiate; u8 negotiate;
u8 reselected_identify; u8 reselected_identify;
u8 msgin_buf[MAX_MSGIN]; u8 msgin_buf[MAX_MSGIN];
u8 msg_reject;
u32 test1_src __attribute__ ((aligned (4)));
u32 test1_dst;
struct sim710_target { struct sim710_target {
Scsi_Cmnd *cur_cmd; Scsi_Cmnd *cur_cmd;
...@@ -294,82 +273,127 @@ static int full_reset(struct Scsi_Host * host); ...@@ -294,82 +273,127 @@ static int full_reset(struct Scsi_Host * host);
/* /*
* Function: int param_setup(char *str) * Function : static void ncr_dump (struct Scsi_Host *host)
*
* Purpose : Dump (possibly) useful info
*
* Inputs : host - pointer to this host adapter's structure
*/ */
#ifdef MODULE static void
#define ARG_SEP ' ' ncr_dump (struct Scsi_Host *host)
#else {
#define ARG_SEP ',' unsigned long flags;
#endif struct sim710_hostdata *hostdata = (struct sim710_hostdata *)
host->hostdata[0];
static int save_flags(flags);
cli();
printk("scsi%d: Chip register contents:\n", host->host_no);
printk(" (script at virt %p, bus %lx)\n",
hostdata->script, virt_to_bus(hostdata->script));
printk(" 00 sien: %02x sdid: %02x scntl1:%02x scntl0:%02x\n"
" 04 socl: %02x sodl: %02x sxfer: %02x scid: %02x\n"
" 08 sbcl: %02x sbdl: %02x sidl: %02x sfbr: %02x\n"
" 0C sstat2:%02x sstat1:%02x sstat0:%02x dstat: %02x\n"
" 10 dsa: %08x\n"
" 14 ctest3:%02x ctest2:%02x ctest1:%02x ctest0:%02x\n"
" 18 ctest7:%02x ctest6:%02x ctest5:%02x ctest4:%02x\n"
" 1C temp: %08x\n"
" 20 lcrc: %02x ctest8:%02x istat: %02x dfifo: %02x\n"
" 24 dbc: %08x dnad: %08x dsp: %08x\n"
" 30 dsps: %08x scratch:%08x\n"
" 38 dcntl: %02x dwt: %02x dien: %02x dmode: %02x\n"
" 3C adder: %08x\n",
NCR_read8(SIEN_REG), NCR_read8(SDID_REG), NCR_read8(SCNTL1_REG),
NCR_read8(SCNTL0_REG), NCR_read8(SOCL_REG), NCR_read8(SODL_REG),
NCR_read8(SXFER_REG), NCR_read8(SCID_REG), NCR_read8(SBCL_REG),
NCR_read8(SBDL_REG), NCR_read8(SIDL_REG), NCR_read8(SFBR_REG),
NCR_read8(SSTAT2_REG), NCR_read8(SSTAT1_REG), NCR_read8(SSTAT0_REG),
NCR_read8(DSTAT_REG), NCR_read32(DSA_REG), NCR_read8(CTEST3_REG),
NCR_read8(CTEST2_REG), NCR_read8(CTEST1_REG), NCR_read8(CTEST0_REG),
NCR_read8(CTEST7_REG), NCR_read8(CTEST6_REG), NCR_read8(CTEST5_REG),
NCR_read8(CTEST4_REG), NCR_read8(TEMP_REG), NCR_read8(LCRC_REG),
NCR_read8(CTEST8_REG), NCR_read8(ISTAT_REG), NCR_read8(DFIFO_REG),
NCR_read32(DBC_REG), NCR_read32(DNAD_REG), NCR_read32(DSP_REG),
NCR_read32(DSPS_REG), NCR_read32(SCRATCH_REG), NCR_read8(DCNTL_REG),
NCR_read8(DWT_REG), NCR_read8(DIEN_REG), NCR_read8(DMODE_REG),
NCR_read32(ADDER_REG));
restore_flags(flags);
}
/*
* Function: int param_setup(char *str)
*/
__init int
param_setup(char *str) param_setup(char *str)
{ {
char *cur = str; char *cur = str;
char *pc, *pv; char *p, *pc, *pv;
int val; int val;
int base;
int c; int c;
no_of_boards = 0; no_of_boards = 0;
while (cur != NULL && (pc = strchr(cur, ':')) != NULL) { while (no_of_boards < MAXBOARDS && cur != NULL &&
(pc = strchr(cur, ':')) != NULL) {
char *pe; char *pe;
val = 0; val = 0;
pv = pc; pv = pc;
c = *++pv; c = *++pv;
if (c == 'n') val = (int) simple_strtoul(pv, &pe, 0);
val = 0;
else if (c == 'y')
val = 1;
else {
base = 0;
val = (int) simple_strtoul(pv, &pe, base);
}
if (!strncmp(cur, "addr:", 5)) { if (!strncmp(cur, "addr:", 5)) {
bases[0] = val; bases[no_of_boards++] = val;
no_of_boards = 1; }
#ifdef DEBUG
else if (!strncmp(cur, "debug:", 6)) {
sim710_debug = val;
}
#endif
else if (no_of_boards == 0) {
printk("sim710: Invalid parameters, addr: must come first\n");
no_of_boards = -1;
return 1;
} }
else if (!strncmp(cur, "irq:", 4)) else if (!strncmp(cur, "irq:", 4))
irq_vectors[0] = val; irq_vectors[no_of_boards-1] = val;
else if (!strncmp(cur, "ignore:", 7)) else if (!strncmp(cur, "ignore:", 7))
ignore_ids = val; ignore_ids[no_of_boards-1] = val;
else if (!strncmp(cur, "nodisc:", 7)) else if (!strncmp(cur, "nodisc:", 7))
opt_nodisc = val; opt_nodisc[no_of_boards-1] = val;
else if (!strncmp(cur, "noneg:", 6)) else if (!strncmp(cur, "noneg:", 6))
opt_noneg = val; opt_noneg[no_of_boards-1] = val;
else if (!strncmp(cur, "disabled:", 5)) { else if (!strncmp(cur, "disabled:", 9)) {
no_of_boards = -1; no_of_boards = -1;
return 1; return 1;
} }
#ifdef DEBUG else {
else if (!strncmp(cur, "debug:", 6)) { printk("sim710: unexpected boot option '%.*s'\n", (int)(pc-cur+1), cur);
sim710_debug = val; no_of_boards = -1;
return 1;
} }
#endif
else
printk("sim710: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
if ((cur = strchr(cur, ARG_SEP)) != NULL) /* Allow ',', ' ', or '+' seperators. Used to be ',' at boot and
++cur; * ' ' for module load, some installers crap out on the space and
* insmod doesn't like the comma.
*/
if ((p = strchr(cur, ',')) || (p = strchr(cur, ' ')) ||
(p = strchr(cur, '+')))
cur = p + 1;
else
break;
} }
return 1; return 1;
} }
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,13)
#ifndef MODULE #ifndef MODULE
__setup("sim710=", param_setup); __setup("sim710=", param_setup);
#endif #endif
#else
/* Old boot param syntax support */
void
sim710_setup(char *str, int *ints)
{
param_setup(str);
}
#endif
/* /*
...@@ -397,22 +421,6 @@ sbcl_to_phase (int sbcl) { ...@@ -397,22 +421,6 @@ sbcl_to_phase (int sbcl) {
} }
/*
* Function: static void disable (struct Scsi_Host *host)
*/
static void
disable (struct Scsi_Host *host)
{
struct sim710_hostdata *hostdata = (struct sim710_hostdata *)
host->hostdata[0];
hostdata->state = STATE_DISABLED;
printk (KERN_ALERT "scsi%d : disabled. Unload and reload\n",
host->host_no);
}
/* /*
* Function : static int ncr_halt (struct Scsi_Host *host) * Function : static int ncr_halt (struct Scsi_Host *host)
* *
...@@ -431,6 +439,8 @@ ncr_halt (struct Scsi_Host *host) ...@@ -431,6 +439,8 @@ ncr_halt (struct Scsi_Host *host)
struct sim710_hostdata *hostdata = (struct sim710_hostdata *) struct sim710_hostdata *hostdata = (struct sim710_hostdata *)
host->hostdata[0]; host->hostdata[0];
int stage; int stage;
int timeout;
int res = 0;
save_flags(flags); save_flags(flags);
cli(); cli();
...@@ -438,8 +448,10 @@ ncr_halt (struct Scsi_Host *host) ...@@ -438,8 +448,10 @@ ncr_halt (struct Scsi_Host *host)
Stage 1 : set ABORT Stage 1 : set ABORT
Stage 2 : eat all but abort interrupts Stage 2 : eat all but abort interrupts
Stage 3 : eat all interrupts Stage 3 : eat all interrupts
We loop for 50000 times with a delay of 10us which should give us
about half a second.
*/ */
for (stage = 0;;) { for (stage = 0, timeout = 50000; timeout; timeout--) {
if (stage == 1) { if (stage == 1) {
DEB(DEB_HALT, printk("ncr_halt: writing ISTAT_ABRT\n")); DEB(DEB_HALT, printk("ncr_halt: writing ISTAT_ABRT\n"));
NCR_write8(ISTAT_REG, ISTAT_ABRT); NCR_write8(ISTAT_REG, ISTAT_ABRT);
...@@ -460,9 +472,8 @@ ncr_halt (struct Scsi_Host *host) ...@@ -460,9 +472,8 @@ ncr_halt (struct Scsi_Host *host)
NCR_write8(ISTAT_REG, 0); NCR_write8(ISTAT_REG, 0);
++stage; ++stage;
} else { } else {
printk(KERN_ALERT "scsi%d : could not halt NCR chip\n", res = 1;
host->host_no); break;
disable (host);
} }
} }
} }
...@@ -472,10 +483,18 @@ ncr_halt (struct Scsi_Host *host) ...@@ -472,10 +483,18 @@ ncr_halt (struct Scsi_Host *host)
else if (stage == 3) else if (stage == 3)
break; break;
} }
udelay(10);
} }
hostdata->state = STATE_HALTED;
restore_flags(flags); restore_flags(flags);
return 0;
if (timeout == 0 || res) {
printk(KERN_ALERT "scsi%d: could not halt NCR chip\n", host->host_no);
return 1;
}
else {
hostdata->state = STATE_HALTED;
return 0;
}
} }
/* /*
...@@ -494,16 +513,9 @@ static void ...@@ -494,16 +513,9 @@ static void
sim710_soft_reset (struct Scsi_Host *host) sim710_soft_reset (struct Scsi_Host *host)
{ {
unsigned long flags; unsigned long flags;
#ifdef CONFIG_TP34V_SCSI
struct sim710_hostdata *hostdata = (struct sim710_hostdata *)
host->hostdata[0];
#endif
save_flags(flags); save_flags(flags);
cli(); cli();
#ifdef CONFIG_TP34V_SCSI
tpvic.loc_icr[irq_index[hostdata->chip]].icr = 0x80;
#endif
/* /*
* Do a soft reset of the chip so that everything is * Do a soft reset of the chip so that everything is
* reinitialized to the power-on state. * reinitialized to the power-on state.
...@@ -528,6 +540,7 @@ sim710_soft_reset (struct Scsi_Host *host) ...@@ -528,6 +540,7 @@ sim710_soft_reset (struct Scsi_Host *host)
mdelay(1000); /* Let devices recover */ mdelay(1000); /* Let devices recover */
NCR_write32(SCRATCH_REG, 0);
NCR_write8(DCNTL_REG, DCNTL_10_COM | DCNTL_700_CF_3); NCR_write8(DCNTL_REG, DCNTL_10_COM | DCNTL_700_CF_3);
NCR_write8(CTEST7_REG, CTEST7_10_CDIS|CTEST7_STD); NCR_write8(CTEST7_REG, CTEST7_10_CDIS|CTEST7_STD);
NCR_write8(DMODE_REG, DMODE_10_BL_8 | DMODE_10_FC2); NCR_write8(DMODE_REG, DMODE_10_BL_8 | DMODE_10_FC2);
...@@ -544,11 +557,6 @@ sim710_soft_reset (struct Scsi_Host *host) ...@@ -544,11 +557,6 @@ sim710_soft_reset (struct Scsi_Host *host)
NCR_write8(SIEN_REG_700, NCR_write8(SIEN_REG_700,
SIEN_PAR | SIEN_700_STO | SIEN_RST | SIEN_UDC | SIEN_SGE | SIEN_MA); SIEN_PAR | SIEN_700_STO | SIEN_RST | SIEN_UDC | SIEN_SGE | SIEN_MA);
#ifdef CONFIG_TP34V_SCSI
tpvic.loc_icr[irq_index[hostdata->chip]].icr = 0x30 | TP34V_SCSI0n1_IPL;
#endif
restore_flags(flags); restore_flags(flags);
} }
...@@ -577,6 +585,12 @@ sim710_driver_init (struct Scsi_Host *host) ...@@ -577,6 +585,12 @@ sim710_driver_init (struct Scsi_Host *host)
isa_virt_to_bus((void *)&(hostdata->reselected_identify))); isa_virt_to_bus((void *)&(hostdata->reselected_identify)));
patch_abs_32 (hostdata->script, 0, msgin_buf, patch_abs_32 (hostdata->script, 0, msgin_buf,
isa_virt_to_bus((void *)&(hostdata->msgin_buf[0]))); isa_virt_to_bus((void *)&(hostdata->msgin_buf[0])));
patch_abs_32 (hostdata->script, 0, msg_reject,
isa_virt_to_bus((void *)&(hostdata->msg_reject)));
patch_abs_32 (hostdata->script, 0, test1_src,
isa_virt_to_bus((void *)&(hostdata->test1_src)));
patch_abs_32 (hostdata->script, 0, test1_dst,
isa_virt_to_bus((void *)&(hostdata->test1_dst)));
hostdata->state = STATE_INITIALISED; hostdata->state = STATE_INITIALISED;
hostdata->negotiate = 0xff; hostdata->negotiate = 0xff;
} }
...@@ -587,7 +601,7 @@ sim710_driver_init (struct Scsi_Host *host) ...@@ -587,7 +601,7 @@ sim710_driver_init (struct Scsi_Host *host)
* spurious request from the target. Don't really expect target initiated * spurious request from the target. Don't really expect target initiated
* SDTRs, because we always negotiate on the first command. Could still * SDTRs, because we always negotiate on the first command. Could still
* get them though.. * get them though..
* The chip is currently paused with ACK asserted o the last byte of the * The chip is currently paused with ACK asserted on the last byte of the
* SDTR. * SDTR.
* resa is the resume address if the message is in response to our outgoing * resa is the resume address if the message is in response to our outgoing
* SDTR. Only possible on initial identify. * SDTR. Only possible on initial identify.
...@@ -739,6 +753,12 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd) ...@@ -739,6 +753,12 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd)
host->host_no); host->host_no);
resume_offset = Ent_resume_cmd; resume_offset = Ent_resume_cmd;
} }
else if (sbcl == SBCL_PHASE_STATIN) {
/* Some devices do this on parity error, at least */
printk("scsi%d: Unexpected switch to STATUSIN on initial message out\n",
host->host_no);
resume_offset = Ent_end_data_trans;
}
else { else {
printk("scsi%d: Unexpected phase change to %s on initial msgout\n", printk("scsi%d: Unexpected phase change to %s on initial msgout\n",
host->host_no, sbcl_to_phase(sbcl)); host->host_no, sbcl_to_phase(sbcl));
...@@ -801,6 +821,14 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd) ...@@ -801,6 +821,14 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd)
resume_offset = Ent_resume_pmm; resume_offset = Ent_resume_pmm;
} }
} }
else if (sbcl == SBCL_PHASE_STATIN) {
/* Change to Status In at some random point; probably wants to report a
* parity error or similar.
*/
printk("scsi%d: Unexpected phase change to STATUSIN at index 0x%x\n",
host->host_no, index);
resume_offset = Ent_end_data_trans;
}
else { else {
printk("scsi%d: Unexpected phase change to %s at index 0x%x\n", printk("scsi%d: Unexpected phase change to %s at index 0x%x\n",
host->host_no, sbcl_to_phase(sbcl), index); host->host_no, sbcl_to_phase(sbcl), index);
...@@ -868,12 +896,6 @@ handle_script_int(struct Scsi_Host * host, Scsi_Cmnd * cmd) ...@@ -868,12 +896,6 @@ handle_script_int(struct Scsi_Host * host, Scsi_Cmnd * cmd)
printk("scsi%d: int_data_bad_phase, phase %s (%x)\n", printk("scsi%d: int_data_bad_phase, phase %s (%x)\n",
host->host_no, sbcl_to_phase(sbcl), sbcl); host->host_no, sbcl_to_phase(sbcl), sbcl);
break; break;
case A_int_bad_extmsg1a:
case A_int_bad_extmsg1b:
case A_int_bad_extmsg2a:
case A_int_bad_extmsg2b:
case A_int_bad_extmsg3a:
case A_int_bad_extmsg3b:
case A_int_bad_msg1: case A_int_bad_msg1:
case A_int_bad_msg2: case A_int_bad_msg2:
case A_int_bad_msg3: case A_int_bad_msg3:
...@@ -918,21 +940,22 @@ do_sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) ...@@ -918,21 +940,22 @@ do_sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
static void static void
sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
{ {
unsigned int flags;
struct Scsi_Host * host = (struct Scsi_Host *)dev_id; struct Scsi_Host * host = (struct Scsi_Host *)dev_id;
struct sim710_hostdata *hostdata = (struct sim710_hostdata *)host->hostdata[0]; struct sim710_hostdata *hostdata = (struct sim710_hostdata *)host->hostdata[0];
Scsi_Cmnd * cmd; Scsi_Cmnd * cmd;
unsigned char istat, dstat; unsigned char istat, dstat;
unsigned char sstat0; unsigned char sstat0;
u32 dsps, resume_offset = 0; u32 scratch, dsps, resume_offset = 0;
save_flags(flags); istat = NCR_read8(ISTAT_REG);
cli(); if (!(istat & (ISTAT_SIP|ISTAT_DIP)))
sim710_intrs++; return;
while ((istat = NCR_read8(ISTAT_REG)) & (ISTAT_SIP|ISTAT_DIP)) { else {
sim710_intrs++;
dsps = NCR_read32(DSPS_REG); dsps = NCR_read32(DSPS_REG);
hostdata->state = STATE_HALTED; hostdata->state = STATE_HALTED;
sstat0 = dstat = 0; sstat0 = dstat = 0;
scratch = NCR_read32(SCRATCH_REG);
if (istat & ISTAT_SIP) { if (istat & ISTAT_SIP) {
sstat0 = NCR_read8(SSTAT0_REG); sstat0 = NCR_read8(SSTAT0_REG);
} }
...@@ -945,7 +968,13 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) ...@@ -945,7 +968,13 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
"dstat %02x, dsp [%04x], scratch %02x\n", "dstat %02x, dsp [%04x], scratch %02x\n",
host->host_no, sim710_intrs, istat, sstat0, dstat, host->host_no, sim710_intrs, istat, sstat0, dstat,
(u32 *)(isa_bus_to_virt(NCR_read32(DSP_REG))) - hostdata->script, (u32 *)(isa_bus_to_virt(NCR_read32(DSP_REG))) - hostdata->script,
NCR_read32(SCRATCH_REG))); scratch));
if (scratch & 0x100) {
u8 *p = hostdata->msgin_buf;
DEB(DEB_INTS, printk(" msgin_buf: %02x %02x %02x %02x\n",
p[0], p[1], p[2], p[3]));
}
if ((dstat & DSTAT_SIR) && dsps == A_int_reselected) { if ((dstat & DSTAT_SIR) && dsps == A_int_reselected) {
/* Reselected. Identify the target from LCRC_REG, and /* Reselected. Identify the target from LCRC_REG, and
* update current command. If we were trying to select * update current command. If we were trying to select
...@@ -1002,12 +1031,7 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) ...@@ -1002,12 +1031,7 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
hostdata->target[cmd->target].cur_cmd = NULL; hostdata->target[cmd->target].cur_cmd = NULL;
resume_offset = Ent_reselect; resume_offset = Ent_reselect;
} }
else if (dstat & DSTAT_SIR) else if (sstat0 & (SSTAT0_SGE|SSTAT0_UDC|SSTAT0_RST|SSTAT0_PAR)) {
resume_offset = handle_script_int(host, cmd);
else if (sstat0 & SSTAT0_MA) {
resume_offset = handle_phase_mismatch(host, cmd);
}
else if (sstat0 & (SSTAT0_MA|SSTAT0_SGE|SSTAT0_UDC|SSTAT0_RST|SSTAT0_PAR)) {
printk("scsi%d: Serious error, sstat0 = %02x\n", host->host_no, printk("scsi%d: Serious error, sstat0 = %02x\n", host->host_no,
sstat0); sstat0);
sim710_errors++; sim710_errors++;
...@@ -1019,6 +1043,10 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) ...@@ -1019,6 +1043,10 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
sim710_errors++; sim710_errors++;
/* resume_offset is zero, which will cause a host reset */ /* resume_offset is zero, which will cause a host reset */
} }
else if (dstat & DSTAT_SIR)
resume_offset = handle_script_int(host, cmd);
else if (sstat0 & SSTAT0_MA)
resume_offset = handle_phase_mismatch(host, cmd);
else if (dstat & DSTAT_IID) { else if (dstat & DSTAT_IID) {
/* This can be due to a quick reselect while doing a WAIT /* This can be due to a quick reselect while doing a WAIT
* DISCONNECT. * DISCONNECT.
...@@ -1044,18 +1072,21 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs) ...@@ -1044,18 +1072,21 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
#ifdef DEBUG_LIMIT_INTS #ifdef DEBUG_LIMIT_INTS
if (sim710_intrs < DEBUG_LIMIT_INTS) if (sim710_intrs < DEBUG_LIMIT_INTS)
#endif #endif
NCR_write32(DSP_REG, isa_virt_to_bus(hostdata->script+resume_offset/4)); {
NCR_write32(SCRATCH_REG, 0);
NCR_write32(DSP_REG,
isa_virt_to_bus(hostdata->script+resume_offset/4));
}
if (resume_offset == Ent_reselect) if (resume_offset == Ent_reselect)
run_process_issue_queue(hostdata); run_process_issue_queue(hostdata);
} }
else { else {
printk("scsi%d: Failed to handle interrupt. Failing commands " printk("scsi%d: Failed to handle interrupt. Failing commands "
"and resetting SCSI bus and chip\n", host->host_no); "and resetting SCSI bus and chip\n", host->host_no);
mdelay(4000); /* Give chance to read screen!! */ mdelay(1000); /* Give chance to read screen!! */
full_reset(host); full_reset(host);
} }
restore_flags(flags);
} }
...@@ -1101,9 +1132,9 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd) ...@@ -1101,9 +1132,9 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd)
memcpy(targdata->dsa_cdb, cmd->cmnd, MAX_CMND); memcpy(targdata->dsa_cdb, cmd->cmnd, MAX_CMND);
targdata->dsa_msgout[0] = targdata->dsa_msgout[0] =
IDENTIFY((opt_nodisc & (1<<cmd->target)) ? 0 : 1 ,0); IDENTIFY((opt_nodisc[hostdata->chip] & (1<<cmd->target)) ? 0 : 1 ,0);
if (hostdata->negotiate & (1 << cmd->target)) { if (hostdata->negotiate & (1 << cmd->target)) {
if (opt_noneg & (1 << cmd->target)) { if (opt_noneg[hostdata->chip] & (1 << cmd->target)) {
hostdata->negotiate ^= (1 << cmd->target); hostdata->negotiate ^= (1 << cmd->target);
targdata->dsa[DSA_MSGOUT] = 1; targdata->dsa[DSA_MSGOUT] = 1;
} }
...@@ -1143,16 +1174,10 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd) ...@@ -1143,16 +1174,10 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd)
u32 cnt = cmd->use_sg ? sgl->length : cmd->request_bufflen; u32 cnt = cmd->use_sg ? sgl->length : cmd->request_bufflen;
if (datain) { if (datain) {
#ifdef CONFIG_TP34V_SCSI
cache_clear(virt_to_phys(vbuf, cnt);
#endif
*dip++ = cnt; *dip++ = cnt;
*dip++ = bbuf; *dip++ = bbuf;
} }
if (dataout) { if (dataout) {
#ifdef CONFIG_TP34V_SCSI
cache_push(virt_to_phys(vbuf, cnt);
#endif
*dop++ = cnt; *dop++ = cnt;
*dop++ = bbuf; *dop++ = bbuf;
} }
...@@ -1288,7 +1313,7 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *)) ...@@ -1288,7 +1313,7 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *))
save_flags(flags); save_flags(flags);
cli(); cli();
if (ignore_ids & (1 << cmd->target)) { if (ignore_ids[hostdata->chip] & (1 << cmd->target)) {
printk("scsi%d: ignoring target %d\n", host->host_no, cmd->target); printk("scsi%d: ignoring target %d\n", host->host_no, cmd->target);
cmd->result = (DID_BAD_TARGET << 16); cmd->result = (DID_BAD_TARGET << 16);
done(cmd); done(cmd);
...@@ -1320,18 +1345,25 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *)) ...@@ -1320,18 +1345,25 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *))
} }
int __init int
sim710_detect(Scsi_Host_Template * tpnt) sim710_detect(Scsi_Host_Template * tpnt)
{ {
unsigned char irq_vector;
unsigned char scsi_id; unsigned char scsi_id;
unsigned int base_addr; unsigned int base_addr;
struct Scsi_Host * host = NULL; struct Scsi_Host * host = NULL;
struct sim710_hostdata *hostdata; struct sim710_hostdata *hostdata;
unsigned long timeout;
unsigned long irq_mask;
int requested_irq;
int probed_irq;
u32 dsps;
int chips = 0; int chips = 0;
int limit;
int indx; int indx;
int revision; int revision;
int order, size; int size;
volatile u8 tmp;
struct Scsi_Host *our_hosts[MAXBOARDS+1];
#ifdef MODULE #ifdef MODULE
if (sim710) if (sim710)
...@@ -1433,83 +1465,191 @@ sim710_detect(Scsi_Host_Template * tpnt) ...@@ -1433,83 +1465,191 @@ sim710_detect(Scsi_Host_Template * tpnt)
} }
#endif #endif
#ifdef CONFIG_EISA
/* Auto probe, if no boards specified in boot parameters */
if (no_of_boards == 0) {
int io_addr;
/* reverse probe, so my on-board controller at 0x9000 is always scsi0 */
for (io_addr = 0x9000; no_of_boards < MAXBOARDS && io_addr >= 0x1000; io_addr -= 0x1000) {
if (request_region(io_addr, 0x40, "sim710") != NULL) {
int id0 = inw(io_addr + 0xc80);
int id1 = inw(io_addr + 0xc82);
/* The on-board controller on my Proliant 2000 is 0x1044,
* my EISA card is 0x1144.
*/
if (id0 == 0x110e && (id1 == 0x1044 || id1 == 0x1144)) {
bases[no_of_boards] = io_addr;
#if 0
/* This should detect the IRQ, but I havn't proved it for
* myself. Leave the old probe code active for now, as
* no-one has reported problems with it.
*/
switch (inb(io_addr + 0xc88)) {
case (0x00):
irq_vectors[no_of_boards] = 11;
break;
case (0x01):
irq_vectors[no_of_boards] = 14;
break;
case (0x02):
irq_vectors[no_of_boards] = 15;
break;
case (0x03):
irq_vectors[no_of_boards] = 10;
break;
case (0x04):
irq_vectors[no_of_boards] = 9;
break;
default:
printk("sim710.c: irq nasty\n");
}
#endif
no_of_boards++;
}
release_region(io_addr, 64);
}
}
}
#endif
if (!no_of_boards) { if (!no_of_boards) {
printk("sim710: No NCR53C710 adapter found.\n"); printk("sim710: No NCR53C710 adapter found.\n");
return 0; return 0;
} }
size = sizeof(struct sim710_hostdata); size = sizeof(struct sim710_hostdata);
order = 0; hostdata_order = 0;
while (size > (PAGE_SIZE << order)) while (size > (PAGE_SIZE << hostdata_order))
order++; hostdata_order++;
size = PAGE_SIZE << order; size = PAGE_SIZE << hostdata_order;
DEB(DEB_ANY, printk("sim710: hostdata %d bytes, size %d, order %d\n", DEB(DEB_ANY, printk("sim710: hostdata %d bytes, size %d, order %d\n",
sizeof(struct sim710_hostdata), size, order)); sizeof(struct sim710_hostdata), size, hostdata_order));
tpnt->proc_name = "sim710"; tpnt->proc_name = "sim710";
for(indx = 0; indx < no_of_boards; indx++) { memset(our_hosts, 0, sizeof(our_hosts));
unsigned long page = __get_free_pages(GFP_ATOMIC, order); for (indx = 0; indx < no_of_boards; indx++) {
unsigned long page = __get_free_pages(GFP_ATOMIC, hostdata_order);
if(page == 0UL) if(page == 0UL)
{ {
printk(KERN_WARNING "sim710: out of memory registering board %d.\n", indx); printk(KERN_WARNING "sim710: out of memory registering board %d.\n", indx);
break; break;
} }
host = scsi_register(tpnt, 4); host = scsi_register(tpnt, 4);
if(host == NULL) if(host == NULL) {
break; free_pages(host->hostdata[0], hostdata_order);
break;
}
our_hosts[chips] = host;
host->hostdata[0] = page; host->hostdata[0] = page;
hostdata = (struct sim710_hostdata *)host->hostdata[0]; hostdata = (struct sim710_hostdata *)host->hostdata[0];
memset(hostdata, 0, size); memset(hostdata, 0, size);
#ifdef CONFIG_TP34V_SCSI
cache_push(virt_to_phys(hostdata), size);
cache_clear(virt_to_phys(hostdata), size);
kernel_set_cachemode((void *)hostdata,size,IOMAP_NOCACHE_SER);
#endif
scsi_id = 7; scsi_id = 7;
base_addr = bases[indx]; base_addr = bases[indx];
irq_vector = irq_vectors[indx]; requested_irq = irq_vectors[indx];
printk("sim710: Configuring Sim710 (SCSI-ID %d) at %x, IRQ %d\n", printk("scsi%d: Configuring Sim710 (SCSI-ID %d) at %x, IRQ %d\n",
scsi_id, base_addr, irq_vector); host->host_no, scsi_id, base_addr, requested_irq);
DEB(DEB_ANY, printk("sim710: hostdata = %p (%d bytes), dsa0 = %p\n", DEB(DEB_ANY, printk("sim710: hostdata = %p (%d bytes), dsa0 = %p\n",
hostdata, sizeof(struct sim710_hostdata), hostdata, sizeof(struct sim710_hostdata),
hostdata->target[0].dsa)); hostdata->target[0].dsa));
hostdata->chip = indx; hostdata->chip = indx;
host->irq = irq_vector; host->irq = requested_irq;
host->this_id = scsi_id; host->this_id = scsi_id;
host->unique_id = base_addr; host->unique_id = base_addr;
host->base = base_addr; host->base = base_addr;
hostdata->msg_reject = MESSAGE_REJECT;
ncr_halt(host); if (ncr_halt(host)) {
free_pages(host->hostdata[0], hostdata_order);
scsi_unregister (host);
printk("scsi%d: Failed to initialise 53c710 at address %x\n",
host->host_no, base_addr);
continue;
}
DEB(DEB_ANY,ncr_dump(host));
revision = (NCR_read8(CTEST8_REG) & 0xF0) >> 4; revision = (NCR_read8(CTEST8_REG) & 0xF0) >> 4;
printk("scsi%d: Revision 0x%x\n",host->host_no,revision); printk("scsi%d: Revision 0x%x\n",host->host_no,revision);
sim710_soft_reset(host); sim710_soft_reset(host);
sim710_driver_init(host); sim710_driver_init(host);
#ifdef CONFIG_TP34V_SCSI request_region((u32)host->base, 64, "sim710");
if (request_irq(irq_vector,do_sim710_intr_handle, 0, "sim710", host)) /* Now run test1 */
#else hostdata->test1_src = 0x53c710aa;
if (request_irq(irq_vector,do_sim710_intr_handle, SA_INTERRUPT, "sim710", host)) hostdata->test1_dst = 0x76543210;
#endif NCR_write32(DSPS_REG, 0x89abcdef);
irq_mask = probe_irq_on();
NCR_write32(DSP_REG, virt_to_bus(hostdata->script+Ent_test1/4));
timeout = 5;
while (hostdata->test1_dst != hostdata->test1_src && timeout--)
mdelay(100);
tmp = NCR_read8(ISTAT_REG);
tmp = NCR_read8(SSTAT0_REG);
udelay(10);
tmp = NCR_read8(DSTAT_REG);
probed_irq = probe_irq_off(irq_mask);
if (requested_irq == 0) {
if (probed_irq > 0) {
printk("scsi%d: Chip is using IRQ %d\n", host->host_no,
probed_irq);
requested_irq = host->irq = probed_irq;
}
else {
printk("scsi%d: Failed to probe for IRQ (returned %d)\n",
host->host_no, probed_irq);
ncr_halt(host);
free_pages(host->hostdata[0], hostdata_order);
scsi_unregister (host);
release_region((u32)host->base, 64);
continue;
}
}
else if (probed_irq > 0 && probed_irq != requested_irq)
printk("scsi%d: WARNING requested IRQ %d, but probed as %d\n",
host->host_no, requested_irq, probed_irq);
else if (probed_irq <= 0)
printk("scsi%d: WARNING IRQ probe failed, (returned %d)\n",
host->host_no, probed_irq);
dsps = NCR_read32(DSPS_REG);
if (hostdata->test1_dst != 0x53c710aa || dsps != A_int_test1) {
if (hostdata->test1_dst != 0x53c710aa)
printk("scsi%d: test 1 FAILED: data: exp 0x53c710aa, got 0x%08x\n",
host->host_no, hostdata->test1_dst);
if (dsps != A_int_test1)
printk("scsi%d: test 1 FAILED: dsps: exp 0x%08x, got 0x%08x\n",
host->host_no, A_int_test1, dsps);
ncr_dump(host);
ncr_halt(host);
free_pages(host->hostdata[0], hostdata_order);
scsi_unregister (host);
release_region((u32)host->base, 64);
continue;
}
printk("scsi%d: test 1 completed ok.\n", host->host_no);
NCR_write32(DSP_REG, virt_to_bus(hostdata->script+Ent_reselect/4));
hostdata->state = STATE_IDLE;
chips++;
}
/* OK, now run down our_hosts[] calling request_irq(... SA_SHIRQ ...).
* Couldn't call request_irq earlier, as probing would have failed.
*/
for (indx = 0, limit = chips; indx < limit; indx++) {
host = our_hosts[indx];
if (request_irq(host->irq, do_sim710_intr_handle,
SA_INTERRUPT | SA_SHIRQ, "sim710", host))
{ {
printk("scsi%d : IRQ%d not free, detaching\n", printk("scsi%d : IRQ%d not free, detaching\n",
host->host_no, host->irq); host->host_no, host->irq);
ncr_halt(host);
free_pages(host->hostdata[0], hostdata_order);
scsi_unregister (host); scsi_unregister (host);
chips--;
} }
else {
#ifdef IO_MAPPED
request_region((u32)host->base, 64, "sim710");
#endif
chips++;
}
NCR_write32(DSP_REG, isa_virt_to_bus(hostdata->script+Ent_reselect/4));
hostdata->state = STATE_IDLE;
} }
return chips; return chips;
} }
...@@ -1558,11 +1698,34 @@ full_reset(struct Scsi_Host * host) ...@@ -1558,11 +1698,34 @@ full_reset(struct Scsi_Host * host)
int target; int target;
Scsi_Cmnd *cmd; Scsi_Cmnd *cmd;
ncr_halt(host); u32 istat, dstat = 0, sstat0 = 0, sstat1 = 0, dsp, dsps, scratch;
printk("scsi%d: dsp = %08x (script[0x%04x]), scratch = %08x\n", unsigned long flags;
host->host_no, NCR_read32(DSP_REG),
((u32)isa_bus_to_virt(NCR_read32(DSP_REG)) - (u32)hostdata->script)/4, save_flags(flags);
NCR_read32(SCRATCH_REG)); cli();
istat = NCR_read8(ISTAT_REG);
if (istat & ISTAT_SIP) {
sstat0 = NCR_read8(SSTAT0_REG);
sstat1 = NCR_read8(SSTAT1_REG);
udelay(10);
}
if (istat & ISTAT_DIP)
dstat = NCR_read8(DSTAT_REG);
if (ncr_halt(host)) {
restore_flags(flags);
return FAILED;
}
restore_flags(flags);
dsp = NCR_read32(DSP_REG);
dsps = NCR_read32(DSPS_REG);
scratch = NCR_read32(SCRATCH_REG);
printk("scsi%d: istat = %02x, sstat0 = %02x, sstat1 = %02x, dstat = %02x\n",
host->host_no, istat, sstat0, sstat1, dstat);
printk("scsi%d: dsp = %08x (script[0x%04x]), dsps = %08x, scratch = %08x\n",
host->host_no, dsp,
((u32)bus_to_virt(dsp) - (u32)hostdata->script)/4, dsps, scratch);
for (target = 0; target < 7; target++) { for (target = 0; target < 7; target++) {
if ((cmd = hostdata->target[target].cur_cmd)) { if ((cmd = hostdata->target[target].cur_cmd)) {
...@@ -1604,10 +1767,10 @@ sim710_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1604,10 +1767,10 @@ sim710_host_reset(Scsi_Cmnd * SCpnt)
int int
sim710_release(struct Scsi_Host *host) sim710_release(struct Scsi_Host *host)
{ {
ncr_halt(host);
free_pages(host->hostdata[0], hostdata_order);
free_irq(host->irq, host); free_irq(host->irq, host);
#ifdef IO_MAPPED
release_region((u32)host->base, 64); release_region((u32)host->base, 64);
#endif
return 1; return 1;
} }
......
...@@ -23,8 +23,8 @@ int sim710_release(struct Scsi_Host *); ...@@ -23,8 +23,8 @@ int sim710_release(struct Scsi_Host *);
#include <scsi/scsicam.h> #include <scsi/scsicam.h>
#define SIM710_SCSI { proc_name: "sim710", \ #define SIM710_SCSI { proc_name: "sim710", \
name: "Simple 53c710", \ name: "53c710", \
detect: sim710_detect, \ detect: sim710_detect, \
release: sim710_release, \ release: sim710_release, \
queuecommand: sim710_queuecommand, \ queuecommand: sim710_queuecommand, \
...@@ -413,7 +413,7 @@ int sim710_release(struct Scsi_Host *); ...@@ -413,7 +413,7 @@ int sim710_release(struct Scsi_Host *);
#define CTEST3_800_FM 0x02 /* Fetch mode pin */ #define CTEST3_800_FM 0x02 /* Fetch mode pin */
/* bit 0 is reserved on 800 series chips */ /* bit 0 is reserved on 800 series chips */
#define CTEST4_REG_400 (0x18^bE) /* Chip test 4 rw */ #define CTEST4_REG_700 (0x18^bE) /* Chip test 4 rw */
#define CTEST4_REG_800 (0x21^bE) /* Chip test 4 rw */ #define CTEST4_REG_800 (0x21^bE) /* Chip test 4 rw */
/* 0x80 is reserved on 700 series chips */ /* 0x80 is reserved on 700 series chips */
#define CTEST4_800_BDIS 0x80 /* Burst mode disable */ #define CTEST4_800_BDIS 0x80 /* Burst mode disable */
...@@ -791,6 +791,20 @@ int sim710_release(struct Scsi_Host *); ...@@ -791,6 +791,20 @@ int sim710_release(struct Scsi_Host *);
#define ISTAT_REG ISTAT_REG_700 #define ISTAT_REG ISTAT_REG_700
#define SCRATCH_REG SCRATCHB_REG_10 #define SCRATCH_REG SCRATCHB_REG_10
#define ADDER_REG ADDER_REG_10
#define SIEN_REG SIEN_REG_700
#define SDID_REG SDID_REG_700
#define CTEST0_REG CTEST0_REG_700
#define CTEST1_REG CTEST1_REG_700
#define CTEST2_REG CTEST2_REG_700
#define CTEST3_REG CTEST3_REG_700
#define CTEST4_REG CTEST4_REG_700
#define CTEST5_REG CTEST5_REG_700
#define CTEST6_REG CTEST6_REG_700
#define SODL_REG SODL_REG_700
#define SBDL_REG SBDL_REG_700
#define SIDL_REG SIDL_REG_700
#define LCRC_REG LCRC_REG_10
#ifdef MEM_MAPPED #ifdef MEM_MAPPED
#define NCR_read8(address) \ #define NCR_read8(address) \
......
...@@ -15,15 +15,12 @@ ABSOLUTE dsa_size = 2088 ...@@ -15,15 +15,12 @@ ABSOLUTE dsa_size = 2088
ABSOLUTE reselected_identify = 0 ABSOLUTE reselected_identify = 0
ABSOLUTE msgin_buf = 0 ABSOLUTE msgin_buf = 0
ABSOLUTE msg_reject = 0
ABSOLUTE test1_src = 0
ABSOLUTE test1_dst = 0
/* Interrupt values passed back to driver */ /* Interrupt values passed back to driver */
ABSOLUTE int_bad_extmsg1a = 0xab930000
ABSOLUTE int_bad_extmsg1b = 0xab930001
ABSOLUTE int_bad_extmsg2a = 0xab930002
ABSOLUTE int_bad_extmsg2b = 0xab930003
ABSOLUTE int_bad_extmsg3a = 0xab930004
ABSOLUTE int_bad_extmsg3b = 0xab930005
ABSOLUTE int_bad_msg1 = 0xab930006 ABSOLUTE int_bad_msg1 = 0xab930006
ABSOLUTE int_bad_msg2 = 0xab930007 ABSOLUTE int_bad_msg2 = 0xab930007
ABSOLUTE int_bad_msg3 = 0xab930008 ABSOLUTE int_bad_msg3 = 0xab930008
...@@ -47,9 +44,9 @@ ABSOLUTE int_disc1 = 0xab930019 ...@@ -47,9 +44,9 @@ ABSOLUTE int_disc1 = 0xab930019
ABSOLUTE int_disc2 = 0xab93001a ABSOLUTE int_disc2 = 0xab93001a
ABSOLUTE int_disc3 = 0xab93001b ABSOLUTE int_disc3 = 0xab93001b
ABSOLUTE int_not_rej = 0xab93001c ABSOLUTE int_not_rej = 0xab93001c
ABSOLUTE int_test1 = 0xab93001d
/* Bit field settings used to record status in SCRATCH0 */
/* Bit field settings used to record status in SCRATCH */
ABSOLUTE had_select = 0x01 ABSOLUTE had_select = 0x01
ABSOLUTE had_msgout = 0x02 ABSOLUTE had_msgout = 0x02
...@@ -60,6 +57,9 @@ ABSOLUTE had_status = 0x20 ...@@ -60,6 +57,9 @@ ABSOLUTE had_status = 0x20
ABSOLUTE had_msgin = 0x40 ABSOLUTE had_msgin = 0x40
ABSOLUTE had_extmsg = 0x80 ABSOLUTE had_extmsg = 0x80
/* Bit field settings used to record status in SCRATCH1 */
ABSOLUTE did_reject = 0x01
/* These scripts are heavily based on the examples in the NCR 53C710 /* These scripts are heavily based on the examples in the NCR 53C710
* Programmer's Guide (Preliminary). * Programmer's Guide (Preliminary).
...@@ -68,7 +68,6 @@ ABSOLUTE had_extmsg = 0x80 ...@@ -68,7 +68,6 @@ ABSOLUTE had_extmsg = 0x80
ENTRY do_select ENTRY do_select
do_select: do_select:
CLEAR TARGET CLEAR TARGET
MOVE SCRATCH0 & 0 TO SCRATCH0
; Enable selection timer ; Enable selection timer
MOVE CTEST7 & 0xef TO CTEST7 MOVE CTEST7 & 0xef TO CTEST7
SELECT ATN FROM dsa_select, reselect SELECT ATN FROM dsa_select, reselect
...@@ -401,17 +400,23 @@ ext_msg1: ...@@ -401,17 +400,23 @@ ext_msg1:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg1a, IF 0x03 JUMP reject_msg1, IF NOT 0x03 ; Only handle SDTR
INT int_bad_extmsg1a
ext_msg1a:
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg1b, IF 0x01 ; Must be SDTR JUMP reject_msg1, IF NOT 0x01 ; Only handle SDTR
INT int_bad_extmsg1b
ext_msg1b:
CLEAR ACK CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
INT int_msg_sdtr1 INT int_msg_sdtr1
reject_msg1:
MOVE SCRATCH1 | did_reject TO SCRATCH1
SET ATN
CLEAR ACK
JUMP reject_msg1a, WHEN NOT MSG_IN
MOVE 1, msgin_buf + 7, WHEN MSG_IN
JUMP reject_msg1
reject_msg1a:
MOVE 1, msg_reject, WHEN MSG_OUT
JUMP redo_msgin1
disc1: disc1:
CLEAR ACK CLEAR ACK
ENTRY wait_disc1 ENTRY wait_disc1
...@@ -446,17 +451,23 @@ ext_msg2: ...@@ -446,17 +451,23 @@ ext_msg2:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg2a, IF 0x03 JUMP reject_msg2, IF NOT 0x03 ; Only handle SDTR
INT int_bad_extmsg2a
ext_msg2a:
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg2b, IF 0x01 ; Must be SDTR JUMP reject_msg2, IF NOT 0x01 ; Only handle SDTR
INT int_bad_extmsg2b
ext_msg2b:
CLEAR ACK CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
INT int_msg_sdtr2 INT int_msg_sdtr2
reject_msg2:
MOVE SCRATCH1 | did_reject TO SCRATCH1
SET ATN
CLEAR ACK
JUMP reject_msg2a, WHEN NOT MSG_IN
MOVE 1, msgin_buf + 7, WHEN MSG_IN
JUMP reject_msg2
reject_msg2a:
MOVE 1, msg_reject, WHEN MSG_OUT
JUMP redo_msgin2
disc2: disc2:
CLEAR ACK CLEAR ACK
ENTRY wait_disc2 ENTRY wait_disc2
...@@ -491,17 +502,23 @@ ext_msg3: ...@@ -491,17 +502,23 @@ ext_msg3:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg3a, IF 0x03 JUMP reject_msg3, IF NOT 0x03 ; Only handle SDTR
INT int_bad_extmsg3a
ext_msg3a:
CLEAR ACK CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg3b, IF 0x01 ; Must be SDTR JUMP reject_msg3, IF NOT 0x01 ; Only handle SDTR
INT int_bad_extmsg3b
ext_msg3b:
CLEAR ACK CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
INT int_msg_sdtr3 INT int_msg_sdtr3
reject_msg3:
MOVE SCRATCH1 | did_reject TO SCRATCH1
SET ATN
CLEAR ACK
JUMP reject_msg3a, WHEN NOT MSG_IN
MOVE 1, msgin_buf + 7, WHEN MSG_IN
JUMP reject_msg3
reject_msg3a:
MOVE 1, msg_reject, WHEN MSG_OUT
JUMP redo_msgin3
disc3: disc3:
CLEAR ACK CLEAR ACK
ENTRY wait_disc3 ENTRY wait_disc3
...@@ -552,3 +569,8 @@ patch_new_dsa: ...@@ -552,3 +569,8 @@ patch_new_dsa:
selected: selected:
INT int_selected INT int_selected
ENTRY test1
test1:
MOVE MEMORY 4, test1_src, test1_dst
INT int_test1
...@@ -18,15 +18,12 @@ ABSOLUTE dsa_size = 2088 ...@@ -18,15 +18,12 @@ ABSOLUTE dsa_size = 2088
ABSOLUTE reselected_identify = 0 ABSOLUTE reselected_identify = 0
ABSOLUTE msgin_buf = 0 ABSOLUTE msgin_buf = 0
ABSOLUTE msg_reject = 0
ABSOLUTE test1_src = 0
ABSOLUTE test1_dst = 0
ABSOLUTE int_bad_extmsg1a = 0xab930000
ABSOLUTE int_bad_extmsg1b = 0xab930001
ABSOLUTE int_bad_extmsg2a = 0xab930002
ABSOLUTE int_bad_extmsg2b = 0xab930003
ABSOLUTE int_bad_extmsg3a = 0xab930004
ABSOLUTE int_bad_extmsg3b = 0xab930005
ABSOLUTE int_bad_msg1 = 0xab930006 ABSOLUTE int_bad_msg1 = 0xab930006
ABSOLUTE int_bad_msg2 = 0xab930007 ABSOLUTE int_bad_msg2 = 0xab930007
ABSOLUTE int_bad_msg3 = 0xab930008 ABSOLUTE int_bad_msg3 = 0xab930008
...@@ -50,7 +47,7 @@ ABSOLUTE int_disc1 = 0xab930019 ...@@ -50,7 +47,7 @@ ABSOLUTE int_disc1 = 0xab930019
ABSOLUTE int_disc2 = 0xab93001a ABSOLUTE int_disc2 = 0xab93001a
ABSOLUTE int_disc3 = 0xab93001b ABSOLUTE int_disc3 = 0xab93001b
ABSOLUTE int_not_rej = 0xab93001c ABSOLUTE int_not_rej = 0xab93001c
ABSOLUTE int_test1 = 0xab93001d
...@@ -65,6 +62,9 @@ ABSOLUTE had_extmsg = 0x80 ...@@ -65,6 +62,9 @@ ABSOLUTE had_extmsg = 0x80
ABSOLUTE did_reject = 0x01
...@@ -73,1642 +73,1710 @@ do_select: ...@@ -73,1642 +73,1710 @@ do_select:
CLEAR TARGET CLEAR TARGET
at 0x00000000 : */ 0x60000200,0x00000000, at 0x00000000 : */ 0x60000200,0x00000000,
/*
MOVE SCRATCH0 & 0 TO SCRATCH0
at 0x00000002 : */ 0x7c340000,0x00000000,
/* /*
; Enable selection timer ; Enable selection timer
MOVE CTEST7 & 0xef TO CTEST7 MOVE CTEST7 & 0xef TO CTEST7
at 0x00000004 : */ 0x7c1bef00,0x00000000, at 0x00000002 : */ 0x7c1bef00,0x00000000,
/* /*
SELECT ATN FROM dsa_select, reselect SELECT ATN FROM dsa_select, reselect
at 0x00000006 : */ 0x43000000,0x00000c48, at 0x00000004 : */ 0x43000000,0x00000cd0,
/* /*
JUMP get_status, WHEN STATUS JUMP get_status, WHEN STATUS
at 0x00000008 : */ 0x830b0000,0x000000a0, at 0x00000006 : */ 0x830b0000,0x00000098,
/* /*
; Disable selection timer ; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7 MOVE CTEST7 | 0x10 TO CTEST7
at 0x0000000a : */ 0x7a1b1000,0x00000000, at 0x00000008 : */ 0x7a1b1000,0x00000000,
/* /*
MOVE SCRATCH0 | had_select TO SCRATCH0 MOVE SCRATCH0 | had_select TO SCRATCH0
at 0x0000000c : */ 0x7a340100,0x00000000, at 0x0000000a : */ 0x7a340100,0x00000000,
/* /*
INT int_sel_no_ident, IF NOT MSG_OUT INT int_sel_no_ident, IF NOT MSG_OUT
at 0x0000000e : */ 0x9e020000,0xab930013, at 0x0000000c : */ 0x9e020000,0xab930013,
/* /*
MOVE SCRATCH0 | had_msgout TO SCRATCH0 MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x00000010 : */ 0x7a340200,0x00000000, at 0x0000000e : */ 0x7a340200,0x00000000,
/* /*
MOVE FROM dsa_msgout, when MSG_OUT MOVE FROM dsa_msgout, when MSG_OUT
at 0x00000012 : */ 0x1e000000,0x00000008, at 0x00000010 : */ 0x1e000000,0x00000008,
/* /*
ENTRY done_ident ENTRY done_ident
done_ident: done_ident:
JUMP get_status, IF STATUS JUMP get_status, IF STATUS
at 0x00000014 : */ 0x830a0000,0x000000a0, at 0x00000012 : */ 0x830a0000,0x00000098,
/* /*
redo_msgin1: redo_msgin1:
JUMP get_msgin1, WHEN MSG_IN JUMP get_msgin1, WHEN MSG_IN
at 0x00000016 : */ 0x870b0000,0x00000920, at 0x00000014 : */ 0x870b0000,0x00000918,
/* /*
INT int_sel_not_cmd, IF NOT CMD INT int_sel_not_cmd, IF NOT CMD
at 0x00000018 : */ 0x9a020000,0xab930014, at 0x00000016 : */ 0x9a020000,0xab930014,
/* /*
ENTRY resume_cmd ENTRY resume_cmd
resume_cmd: resume_cmd:
MOVE SCRATCH0 | had_cmdout TO SCRATCH0 MOVE SCRATCH0 | had_cmdout TO SCRATCH0
at 0x0000001a : */ 0x7a340400,0x00000000, at 0x00000018 : */ 0x7a340400,0x00000000,
/* /*
MOVE FROM dsa_cmnd, WHEN CMD MOVE FROM dsa_cmnd, WHEN CMD
at 0x0000001c : */ 0x1a000000,0x00000010, at 0x0000001a : */ 0x1a000000,0x00000010,
/* /*
ENTRY resume_pmm ENTRY resume_pmm
resume_pmm: resume_pmm:
redo_msgin2: redo_msgin2:
JUMP get_msgin2, WHEN MSG_IN JUMP get_msgin2, WHEN MSG_IN
at 0x0000001e : */ 0x870b0000,0x00000a20, at 0x0000001c : */ 0x870b0000,0x00000a48,
/* /*
JUMP get_status, IF STATUS JUMP get_status, IF STATUS
at 0x00000020 : */ 0x830a0000,0x000000a0, at 0x0000001e : */ 0x830a0000,0x00000098,
/* /*
JUMP input_data, IF DATA_IN JUMP input_data, IF DATA_IN
at 0x00000022 : */ 0x810a0000,0x000000e0, at 0x00000020 : */ 0x810a0000,0x000000d8,
/* /*
JUMP output_data, IF DATA_OUT JUMP output_data, IF DATA_OUT
at 0x00000024 : */ 0x800a0000,0x000004f8, at 0x00000022 : */ 0x800a0000,0x000004f0,
/* /*
INT int_cmd_bad_phase INT int_cmd_bad_phase
at 0x00000026 : */ 0x98080000,0xab930009, at 0x00000024 : */ 0x98080000,0xab930009,
/* /*
get_status: get_status:
; Disable selection timer ; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7 MOVE CTEST7 | 0x10 TO CTEST7
at 0x00000028 : */ 0x7a1b1000,0x00000000, at 0x00000026 : */ 0x7a1b1000,0x00000000,
/* /*
MOVE FROM dsa_status, WHEN STATUS MOVE FROM dsa_status, WHEN STATUS
at 0x0000002a : */ 0x1b000000,0x00000018, at 0x00000028 : */ 0x1b000000,0x00000018,
/* /*
INT int_status_not_msgin, WHEN NOT MSG_IN INT int_status_not_msgin, WHEN NOT MSG_IN
at 0x0000002c : */ 0x9f030000,0xab930015, at 0x0000002a : */ 0x9f030000,0xab930015,
/* /*
MOVE FROM dsa_msgin, WHEN MSG_IN MOVE FROM dsa_msgin, WHEN MSG_IN
at 0x0000002e : */ 0x1f000000,0x00000020, at 0x0000002c : */ 0x1f000000,0x00000020,
/* /*
INT int_not_cmd_complete, IF NOT 0x00 INT int_not_cmd_complete, IF NOT 0x00
at 0x00000030 : */ 0x98040000,0xab930012, at 0x0000002e : */ 0x98040000,0xab930012,
/* /*
CLEAR ACK CLEAR ACK
at 0x00000032 : */ 0x60000040,0x00000000, at 0x00000030 : */ 0x60000040,0x00000000,
/* /*
ENTRY wait_disc_complete ENTRY wait_disc_complete
wait_disc_complete: wait_disc_complete:
WAIT DISCONNECT WAIT DISCONNECT
at 0x00000034 : */ 0x48000000,0x00000000, at 0x00000032 : */ 0x48000000,0x00000000,
/* /*
INT int_cmd_complete INT int_cmd_complete
at 0x00000036 : */ 0x98080000,0xab93000a, at 0x00000034 : */ 0x98080000,0xab93000a,
/* /*
input_data: input_data:
MOVE SCRATCH0 | had_datain TO SCRATCH0 MOVE SCRATCH0 | had_datain TO SCRATCH0
at 0x00000038 : */ 0x7a340800,0x00000000, at 0x00000036 : */ 0x7a340800,0x00000000,
/* /*
ENTRY patch_input_data ENTRY patch_input_data
patch_input_data: patch_input_data:
JUMP 0 JUMP 0
at 0x0000003a : */ 0x80080000,0x00000000, at 0x00000038 : */ 0x80080000,0x00000000,
/* /*
MOVE FROM dsa_datain+0x0000, WHEN DATA_IN MOVE FROM dsa_datain+0x0000, WHEN DATA_IN
at 0x0000003c : */ 0x19000000,0x00000028, at 0x0000003a : */ 0x19000000,0x00000028,
/* /*
MOVE FROM dsa_datain+0x0008, WHEN DATA_IN MOVE FROM dsa_datain+0x0008, WHEN DATA_IN
at 0x0000003e : */ 0x19000000,0x00000030, at 0x0000003c : */ 0x19000000,0x00000030,
/* /*
MOVE FROM dsa_datain+0x0010, WHEN DATA_IN MOVE FROM dsa_datain+0x0010, WHEN DATA_IN
at 0x00000040 : */ 0x19000000,0x00000038, at 0x0000003e : */ 0x19000000,0x00000038,
/* /*
MOVE FROM dsa_datain+0x0018, WHEN DATA_IN MOVE FROM dsa_datain+0x0018, WHEN DATA_IN
at 0x00000042 : */ 0x19000000,0x00000040, at 0x00000040 : */ 0x19000000,0x00000040,
/* /*
MOVE FROM dsa_datain+0x0020, WHEN DATA_IN MOVE FROM dsa_datain+0x0020, WHEN DATA_IN
at 0x00000044 : */ 0x19000000,0x00000048, at 0x00000042 : */ 0x19000000,0x00000048,
/* /*
MOVE FROM dsa_datain+0x0028, WHEN DATA_IN MOVE FROM dsa_datain+0x0028, WHEN DATA_IN
at 0x00000046 : */ 0x19000000,0x00000050, at 0x00000044 : */ 0x19000000,0x00000050,
/* /*
MOVE FROM dsa_datain+0x0030, WHEN DATA_IN MOVE FROM dsa_datain+0x0030, WHEN DATA_IN
at 0x00000048 : */ 0x19000000,0x00000058, at 0x00000046 : */ 0x19000000,0x00000058,
/* /*
MOVE FROM dsa_datain+0x0038, WHEN DATA_IN MOVE FROM dsa_datain+0x0038, WHEN DATA_IN
at 0x0000004a : */ 0x19000000,0x00000060, at 0x00000048 : */ 0x19000000,0x00000060,
/* /*
MOVE FROM dsa_datain+0x0040, WHEN DATA_IN MOVE FROM dsa_datain+0x0040, WHEN DATA_IN
at 0x0000004c : */ 0x19000000,0x00000068, at 0x0000004a : */ 0x19000000,0x00000068,
/* /*
MOVE FROM dsa_datain+0x0048, WHEN DATA_IN MOVE FROM dsa_datain+0x0048, WHEN DATA_IN
at 0x0000004e : */ 0x19000000,0x00000070, at 0x0000004c : */ 0x19000000,0x00000070,
/* /*
MOVE FROM dsa_datain+0x0050, WHEN DATA_IN MOVE FROM dsa_datain+0x0050, WHEN DATA_IN
at 0x00000050 : */ 0x19000000,0x00000078, at 0x0000004e : */ 0x19000000,0x00000078,
/* /*
MOVE FROM dsa_datain+0x0058, WHEN DATA_IN MOVE FROM dsa_datain+0x0058, WHEN DATA_IN
at 0x00000052 : */ 0x19000000,0x00000080, at 0x00000050 : */ 0x19000000,0x00000080,
/* /*
MOVE FROM dsa_datain+0x0060, WHEN DATA_IN MOVE FROM dsa_datain+0x0060, WHEN DATA_IN
at 0x00000054 : */ 0x19000000,0x00000088, at 0x00000052 : */ 0x19000000,0x00000088,
/* /*
MOVE FROM dsa_datain+0x0068, WHEN DATA_IN MOVE FROM dsa_datain+0x0068, WHEN DATA_IN
at 0x00000056 : */ 0x19000000,0x00000090, at 0x00000054 : */ 0x19000000,0x00000090,
/* /*
MOVE FROM dsa_datain+0x0070, WHEN DATA_IN MOVE FROM dsa_datain+0x0070, WHEN DATA_IN
at 0x00000058 : */ 0x19000000,0x00000098, at 0x00000056 : */ 0x19000000,0x00000098,
/* /*
MOVE FROM dsa_datain+0x0078, WHEN DATA_IN MOVE FROM dsa_datain+0x0078, WHEN DATA_IN
at 0x0000005a : */ 0x19000000,0x000000a0, at 0x00000058 : */ 0x19000000,0x000000a0,
/* /*
MOVE FROM dsa_datain+0x0080, WHEN DATA_IN MOVE FROM dsa_datain+0x0080, WHEN DATA_IN
at 0x0000005c : */ 0x19000000,0x000000a8, at 0x0000005a : */ 0x19000000,0x000000a8,
/* /*
MOVE FROM dsa_datain+0x0088, WHEN DATA_IN MOVE FROM dsa_datain+0x0088, WHEN DATA_IN
at 0x0000005e : */ 0x19000000,0x000000b0, at 0x0000005c : */ 0x19000000,0x000000b0,
/* /*
MOVE FROM dsa_datain+0x0090, WHEN DATA_IN MOVE FROM dsa_datain+0x0090, WHEN DATA_IN
at 0x00000060 : */ 0x19000000,0x000000b8, at 0x0000005e : */ 0x19000000,0x000000b8,
/* /*
MOVE FROM dsa_datain+0x0098, WHEN DATA_IN MOVE FROM dsa_datain+0x0098, WHEN DATA_IN
at 0x00000062 : */ 0x19000000,0x000000c0, at 0x00000060 : */ 0x19000000,0x000000c0,
/* /*
MOVE FROM dsa_datain+0x00a0, WHEN DATA_IN MOVE FROM dsa_datain+0x00a0, WHEN DATA_IN
at 0x00000064 : */ 0x19000000,0x000000c8, at 0x00000062 : */ 0x19000000,0x000000c8,
/* /*
MOVE FROM dsa_datain+0x00a8, WHEN DATA_IN MOVE FROM dsa_datain+0x00a8, WHEN DATA_IN
at 0x00000066 : */ 0x19000000,0x000000d0, at 0x00000064 : */ 0x19000000,0x000000d0,
/* /*
MOVE FROM dsa_datain+0x00b0, WHEN DATA_IN MOVE FROM dsa_datain+0x00b0, WHEN DATA_IN
at 0x00000068 : */ 0x19000000,0x000000d8, at 0x00000066 : */ 0x19000000,0x000000d8,
/* /*
MOVE FROM dsa_datain+0x00b8, WHEN DATA_IN MOVE FROM dsa_datain+0x00b8, WHEN DATA_IN
at 0x0000006a : */ 0x19000000,0x000000e0, at 0x00000068 : */ 0x19000000,0x000000e0,
/* /*
MOVE FROM dsa_datain+0x00c0, WHEN DATA_IN MOVE FROM dsa_datain+0x00c0, WHEN DATA_IN
at 0x0000006c : */ 0x19000000,0x000000e8, at 0x0000006a : */ 0x19000000,0x000000e8,
/* /*
MOVE FROM dsa_datain+0x00c8, WHEN DATA_IN MOVE FROM dsa_datain+0x00c8, WHEN DATA_IN
at 0x0000006e : */ 0x19000000,0x000000f0, at 0x0000006c : */ 0x19000000,0x000000f0,
/* /*
MOVE FROM dsa_datain+0x00d0, WHEN DATA_IN MOVE FROM dsa_datain+0x00d0, WHEN DATA_IN
at 0x00000070 : */ 0x19000000,0x000000f8, at 0x0000006e : */ 0x19000000,0x000000f8,
/* /*
MOVE FROM dsa_datain+0x00d8, WHEN DATA_IN MOVE FROM dsa_datain+0x00d8, WHEN DATA_IN
at 0x00000072 : */ 0x19000000,0x00000100, at 0x00000070 : */ 0x19000000,0x00000100,
/* /*
MOVE FROM dsa_datain+0x00e0, WHEN DATA_IN MOVE FROM dsa_datain+0x00e0, WHEN DATA_IN
at 0x00000074 : */ 0x19000000,0x00000108, at 0x00000072 : */ 0x19000000,0x00000108,
/* /*
MOVE FROM dsa_datain+0x00e8, WHEN DATA_IN MOVE FROM dsa_datain+0x00e8, WHEN DATA_IN
at 0x00000076 : */ 0x19000000,0x00000110, at 0x00000074 : */ 0x19000000,0x00000110,
/* /*
MOVE FROM dsa_datain+0x00f0, WHEN DATA_IN MOVE FROM dsa_datain+0x00f0, WHEN DATA_IN
at 0x00000078 : */ 0x19000000,0x00000118, at 0x00000076 : */ 0x19000000,0x00000118,
/* /*
MOVE FROM dsa_datain+0x00f8, WHEN DATA_IN MOVE FROM dsa_datain+0x00f8, WHEN DATA_IN
at 0x0000007a : */ 0x19000000,0x00000120, at 0x00000078 : */ 0x19000000,0x00000120,
/* /*
MOVE FROM dsa_datain+0x0100, WHEN DATA_IN MOVE FROM dsa_datain+0x0100, WHEN DATA_IN
at 0x0000007c : */ 0x19000000,0x00000128, at 0x0000007a : */ 0x19000000,0x00000128,
/* /*
MOVE FROM dsa_datain+0x0108, WHEN DATA_IN MOVE FROM dsa_datain+0x0108, WHEN DATA_IN
at 0x0000007e : */ 0x19000000,0x00000130, at 0x0000007c : */ 0x19000000,0x00000130,
/* /*
MOVE FROM dsa_datain+0x0110, WHEN DATA_IN MOVE FROM dsa_datain+0x0110, WHEN DATA_IN
at 0x00000080 : */ 0x19000000,0x00000138, at 0x0000007e : */ 0x19000000,0x00000138,
/* /*
MOVE FROM dsa_datain+0x0118, WHEN DATA_IN MOVE FROM dsa_datain+0x0118, WHEN DATA_IN
at 0x00000082 : */ 0x19000000,0x00000140, at 0x00000080 : */ 0x19000000,0x00000140,
/* /*
MOVE FROM dsa_datain+0x0120, WHEN DATA_IN MOVE FROM dsa_datain+0x0120, WHEN DATA_IN
at 0x00000084 : */ 0x19000000,0x00000148, at 0x00000082 : */ 0x19000000,0x00000148,
/* /*
MOVE FROM dsa_datain+0x0128, WHEN DATA_IN MOVE FROM dsa_datain+0x0128, WHEN DATA_IN
at 0x00000086 : */ 0x19000000,0x00000150, at 0x00000084 : */ 0x19000000,0x00000150,
/* /*
MOVE FROM dsa_datain+0x0130, WHEN DATA_IN MOVE FROM dsa_datain+0x0130, WHEN DATA_IN
at 0x00000088 : */ 0x19000000,0x00000158, at 0x00000086 : */ 0x19000000,0x00000158,
/* /*
MOVE FROM dsa_datain+0x0138, WHEN DATA_IN MOVE FROM dsa_datain+0x0138, WHEN DATA_IN
at 0x0000008a : */ 0x19000000,0x00000160, at 0x00000088 : */ 0x19000000,0x00000160,
/* /*
MOVE FROM dsa_datain+0x0140, WHEN DATA_IN MOVE FROM dsa_datain+0x0140, WHEN DATA_IN
at 0x0000008c : */ 0x19000000,0x00000168, at 0x0000008a : */ 0x19000000,0x00000168,
/* /*
MOVE FROM dsa_datain+0x0148, WHEN DATA_IN MOVE FROM dsa_datain+0x0148, WHEN DATA_IN
at 0x0000008e : */ 0x19000000,0x00000170, at 0x0000008c : */ 0x19000000,0x00000170,
/* /*
MOVE FROM dsa_datain+0x0150, WHEN DATA_IN MOVE FROM dsa_datain+0x0150, WHEN DATA_IN
at 0x00000090 : */ 0x19000000,0x00000178, at 0x0000008e : */ 0x19000000,0x00000178,
/* /*
MOVE FROM dsa_datain+0x0158, WHEN DATA_IN MOVE FROM dsa_datain+0x0158, WHEN DATA_IN
at 0x00000092 : */ 0x19000000,0x00000180, at 0x00000090 : */ 0x19000000,0x00000180,
/* /*
MOVE FROM dsa_datain+0x0160, WHEN DATA_IN MOVE FROM dsa_datain+0x0160, WHEN DATA_IN
at 0x00000094 : */ 0x19000000,0x00000188, at 0x00000092 : */ 0x19000000,0x00000188,
/* /*
MOVE FROM dsa_datain+0x0168, WHEN DATA_IN MOVE FROM dsa_datain+0x0168, WHEN DATA_IN
at 0x00000096 : */ 0x19000000,0x00000190, at 0x00000094 : */ 0x19000000,0x00000190,
/* /*
MOVE FROM dsa_datain+0x0170, WHEN DATA_IN MOVE FROM dsa_datain+0x0170, WHEN DATA_IN
at 0x00000098 : */ 0x19000000,0x00000198, at 0x00000096 : */ 0x19000000,0x00000198,
/* /*
MOVE FROM dsa_datain+0x0178, WHEN DATA_IN MOVE FROM dsa_datain+0x0178, WHEN DATA_IN
at 0x0000009a : */ 0x19000000,0x000001a0, at 0x00000098 : */ 0x19000000,0x000001a0,
/* /*
MOVE FROM dsa_datain+0x0180, WHEN DATA_IN MOVE FROM dsa_datain+0x0180, WHEN DATA_IN
at 0x0000009c : */ 0x19000000,0x000001a8, at 0x0000009a : */ 0x19000000,0x000001a8,
/* /*
MOVE FROM dsa_datain+0x0188, WHEN DATA_IN MOVE FROM dsa_datain+0x0188, WHEN DATA_IN
at 0x0000009e : */ 0x19000000,0x000001b0, at 0x0000009c : */ 0x19000000,0x000001b0,
/* /*
MOVE FROM dsa_datain+0x0190, WHEN DATA_IN MOVE FROM dsa_datain+0x0190, WHEN DATA_IN
at 0x000000a0 : */ 0x19000000,0x000001b8, at 0x0000009e : */ 0x19000000,0x000001b8,
/* /*
MOVE FROM dsa_datain+0x0198, WHEN DATA_IN MOVE FROM dsa_datain+0x0198, WHEN DATA_IN
at 0x000000a2 : */ 0x19000000,0x000001c0, at 0x000000a0 : */ 0x19000000,0x000001c0,
/* /*
MOVE FROM dsa_datain+0x01a0, WHEN DATA_IN MOVE FROM dsa_datain+0x01a0, WHEN DATA_IN
at 0x000000a4 : */ 0x19000000,0x000001c8, at 0x000000a2 : */ 0x19000000,0x000001c8,
/* /*
MOVE FROM dsa_datain+0x01a8, WHEN DATA_IN MOVE FROM dsa_datain+0x01a8, WHEN DATA_IN
at 0x000000a6 : */ 0x19000000,0x000001d0, at 0x000000a4 : */ 0x19000000,0x000001d0,
/* /*
MOVE FROM dsa_datain+0x01b0, WHEN DATA_IN MOVE FROM dsa_datain+0x01b0, WHEN DATA_IN
at 0x000000a8 : */ 0x19000000,0x000001d8, at 0x000000a6 : */ 0x19000000,0x000001d8,
/* /*
MOVE FROM dsa_datain+0x01b8, WHEN DATA_IN MOVE FROM dsa_datain+0x01b8, WHEN DATA_IN
at 0x000000aa : */ 0x19000000,0x000001e0, at 0x000000a8 : */ 0x19000000,0x000001e0,
/* /*
MOVE FROM dsa_datain+0x01c0, WHEN DATA_IN MOVE FROM dsa_datain+0x01c0, WHEN DATA_IN
at 0x000000ac : */ 0x19000000,0x000001e8, at 0x000000aa : */ 0x19000000,0x000001e8,
/* /*
MOVE FROM dsa_datain+0x01c8, WHEN DATA_IN MOVE FROM dsa_datain+0x01c8, WHEN DATA_IN
at 0x000000ae : */ 0x19000000,0x000001f0, at 0x000000ac : */ 0x19000000,0x000001f0,
/* /*
MOVE FROM dsa_datain+0x01d0, WHEN DATA_IN MOVE FROM dsa_datain+0x01d0, WHEN DATA_IN
at 0x000000b0 : */ 0x19000000,0x000001f8, at 0x000000ae : */ 0x19000000,0x000001f8,
/* /*
MOVE FROM dsa_datain+0x01d8, WHEN DATA_IN MOVE FROM dsa_datain+0x01d8, WHEN DATA_IN
at 0x000000b2 : */ 0x19000000,0x00000200, at 0x000000b0 : */ 0x19000000,0x00000200,
/* /*
MOVE FROM dsa_datain+0x01e0, WHEN DATA_IN MOVE FROM dsa_datain+0x01e0, WHEN DATA_IN
at 0x000000b4 : */ 0x19000000,0x00000208, at 0x000000b2 : */ 0x19000000,0x00000208,
/* /*
MOVE FROM dsa_datain+0x01e8, WHEN DATA_IN MOVE FROM dsa_datain+0x01e8, WHEN DATA_IN
at 0x000000b6 : */ 0x19000000,0x00000210, at 0x000000b4 : */ 0x19000000,0x00000210,
/* /*
MOVE FROM dsa_datain+0x01f0, WHEN DATA_IN MOVE FROM dsa_datain+0x01f0, WHEN DATA_IN
at 0x000000b8 : */ 0x19000000,0x00000218, at 0x000000b6 : */ 0x19000000,0x00000218,
/* /*
MOVE FROM dsa_datain+0x01f8, WHEN DATA_IN MOVE FROM dsa_datain+0x01f8, WHEN DATA_IN
at 0x000000ba : */ 0x19000000,0x00000220, at 0x000000b8 : */ 0x19000000,0x00000220,
/* /*
MOVE FROM dsa_datain+0x0200, WHEN DATA_IN MOVE FROM dsa_datain+0x0200, WHEN DATA_IN
at 0x000000bc : */ 0x19000000,0x00000228, at 0x000000ba : */ 0x19000000,0x00000228,
/* /*
MOVE FROM dsa_datain+0x0208, WHEN DATA_IN MOVE FROM dsa_datain+0x0208, WHEN DATA_IN
at 0x000000be : */ 0x19000000,0x00000230, at 0x000000bc : */ 0x19000000,0x00000230,
/* /*
MOVE FROM dsa_datain+0x0210, WHEN DATA_IN MOVE FROM dsa_datain+0x0210, WHEN DATA_IN
at 0x000000c0 : */ 0x19000000,0x00000238, at 0x000000be : */ 0x19000000,0x00000238,
/* /*
MOVE FROM dsa_datain+0x0218, WHEN DATA_IN MOVE FROM dsa_datain+0x0218, WHEN DATA_IN
at 0x000000c2 : */ 0x19000000,0x00000240, at 0x000000c0 : */ 0x19000000,0x00000240,
/* /*
MOVE FROM dsa_datain+0x0220, WHEN DATA_IN MOVE FROM dsa_datain+0x0220, WHEN DATA_IN
at 0x000000c4 : */ 0x19000000,0x00000248, at 0x000000c2 : */ 0x19000000,0x00000248,
/* /*
MOVE FROM dsa_datain+0x0228, WHEN DATA_IN MOVE FROM dsa_datain+0x0228, WHEN DATA_IN
at 0x000000c6 : */ 0x19000000,0x00000250, at 0x000000c4 : */ 0x19000000,0x00000250,
/* /*
MOVE FROM dsa_datain+0x0230, WHEN DATA_IN MOVE FROM dsa_datain+0x0230, WHEN DATA_IN
at 0x000000c8 : */ 0x19000000,0x00000258, at 0x000000c6 : */ 0x19000000,0x00000258,
/* /*
MOVE FROM dsa_datain+0x0238, WHEN DATA_IN MOVE FROM dsa_datain+0x0238, WHEN DATA_IN
at 0x000000ca : */ 0x19000000,0x00000260, at 0x000000c8 : */ 0x19000000,0x00000260,
/* /*
MOVE FROM dsa_datain+0x0240, WHEN DATA_IN MOVE FROM dsa_datain+0x0240, WHEN DATA_IN
at 0x000000cc : */ 0x19000000,0x00000268, at 0x000000ca : */ 0x19000000,0x00000268,
/* /*
MOVE FROM dsa_datain+0x0248, WHEN DATA_IN MOVE FROM dsa_datain+0x0248, WHEN DATA_IN
at 0x000000ce : */ 0x19000000,0x00000270, at 0x000000cc : */ 0x19000000,0x00000270,
/* /*
MOVE FROM dsa_datain+0x0250, WHEN DATA_IN MOVE FROM dsa_datain+0x0250, WHEN DATA_IN
at 0x000000d0 : */ 0x19000000,0x00000278, at 0x000000ce : */ 0x19000000,0x00000278,
/* /*
MOVE FROM dsa_datain+0x0258, WHEN DATA_IN MOVE FROM dsa_datain+0x0258, WHEN DATA_IN
at 0x000000d2 : */ 0x19000000,0x00000280, at 0x000000d0 : */ 0x19000000,0x00000280,
/* /*
MOVE FROM dsa_datain+0x0260, WHEN DATA_IN MOVE FROM dsa_datain+0x0260, WHEN DATA_IN
at 0x000000d4 : */ 0x19000000,0x00000288, at 0x000000d2 : */ 0x19000000,0x00000288,
/* /*
MOVE FROM dsa_datain+0x0268, WHEN DATA_IN MOVE FROM dsa_datain+0x0268, WHEN DATA_IN
at 0x000000d6 : */ 0x19000000,0x00000290, at 0x000000d4 : */ 0x19000000,0x00000290,
/* /*
MOVE FROM dsa_datain+0x0270, WHEN DATA_IN MOVE FROM dsa_datain+0x0270, WHEN DATA_IN
at 0x000000d8 : */ 0x19000000,0x00000298, at 0x000000d6 : */ 0x19000000,0x00000298,
/* /*
MOVE FROM dsa_datain+0x0278, WHEN DATA_IN MOVE FROM dsa_datain+0x0278, WHEN DATA_IN
at 0x000000da : */ 0x19000000,0x000002a0, at 0x000000d8 : */ 0x19000000,0x000002a0,
/* /*
MOVE FROM dsa_datain+0x0280, WHEN DATA_IN MOVE FROM dsa_datain+0x0280, WHEN DATA_IN
at 0x000000dc : */ 0x19000000,0x000002a8, at 0x000000da : */ 0x19000000,0x000002a8,
/* /*
MOVE FROM dsa_datain+0x0288, WHEN DATA_IN MOVE FROM dsa_datain+0x0288, WHEN DATA_IN
at 0x000000de : */ 0x19000000,0x000002b0, at 0x000000dc : */ 0x19000000,0x000002b0,
/* /*
MOVE FROM dsa_datain+0x0290, WHEN DATA_IN MOVE FROM dsa_datain+0x0290, WHEN DATA_IN
at 0x000000e0 : */ 0x19000000,0x000002b8, at 0x000000de : */ 0x19000000,0x000002b8,
/* /*
MOVE FROM dsa_datain+0x0298, WHEN DATA_IN MOVE FROM dsa_datain+0x0298, WHEN DATA_IN
at 0x000000e2 : */ 0x19000000,0x000002c0, at 0x000000e0 : */ 0x19000000,0x000002c0,
/* /*
MOVE FROM dsa_datain+0x02a0, WHEN DATA_IN MOVE FROM dsa_datain+0x02a0, WHEN DATA_IN
at 0x000000e4 : */ 0x19000000,0x000002c8, at 0x000000e2 : */ 0x19000000,0x000002c8,
/* /*
MOVE FROM dsa_datain+0x02a8, WHEN DATA_IN MOVE FROM dsa_datain+0x02a8, WHEN DATA_IN
at 0x000000e6 : */ 0x19000000,0x000002d0, at 0x000000e4 : */ 0x19000000,0x000002d0,
/* /*
MOVE FROM dsa_datain+0x02b0, WHEN DATA_IN MOVE FROM dsa_datain+0x02b0, WHEN DATA_IN
at 0x000000e8 : */ 0x19000000,0x000002d8, at 0x000000e6 : */ 0x19000000,0x000002d8,
/* /*
MOVE FROM dsa_datain+0x02b8, WHEN DATA_IN MOVE FROM dsa_datain+0x02b8, WHEN DATA_IN
at 0x000000ea : */ 0x19000000,0x000002e0, at 0x000000e8 : */ 0x19000000,0x000002e0,
/* /*
MOVE FROM dsa_datain+0x02c0, WHEN DATA_IN MOVE FROM dsa_datain+0x02c0, WHEN DATA_IN
at 0x000000ec : */ 0x19000000,0x000002e8, at 0x000000ea : */ 0x19000000,0x000002e8,
/* /*
MOVE FROM dsa_datain+0x02c8, WHEN DATA_IN MOVE FROM dsa_datain+0x02c8, WHEN DATA_IN
at 0x000000ee : */ 0x19000000,0x000002f0, at 0x000000ec : */ 0x19000000,0x000002f0,
/* /*
MOVE FROM dsa_datain+0x02d0, WHEN DATA_IN MOVE FROM dsa_datain+0x02d0, WHEN DATA_IN
at 0x000000f0 : */ 0x19000000,0x000002f8, at 0x000000ee : */ 0x19000000,0x000002f8,
/* /*
MOVE FROM dsa_datain+0x02d8, WHEN DATA_IN MOVE FROM dsa_datain+0x02d8, WHEN DATA_IN
at 0x000000f2 : */ 0x19000000,0x00000300, at 0x000000f0 : */ 0x19000000,0x00000300,
/* /*
MOVE FROM dsa_datain+0x02e0, WHEN DATA_IN MOVE FROM dsa_datain+0x02e0, WHEN DATA_IN
at 0x000000f4 : */ 0x19000000,0x00000308, at 0x000000f2 : */ 0x19000000,0x00000308,
/* /*
MOVE FROM dsa_datain+0x02e8, WHEN DATA_IN MOVE FROM dsa_datain+0x02e8, WHEN DATA_IN
at 0x000000f6 : */ 0x19000000,0x00000310, at 0x000000f4 : */ 0x19000000,0x00000310,
/* /*
MOVE FROM dsa_datain+0x02f0, WHEN DATA_IN MOVE FROM dsa_datain+0x02f0, WHEN DATA_IN
at 0x000000f8 : */ 0x19000000,0x00000318, at 0x000000f6 : */ 0x19000000,0x00000318,
/* /*
MOVE FROM dsa_datain+0x02f8, WHEN DATA_IN MOVE FROM dsa_datain+0x02f8, WHEN DATA_IN
at 0x000000fa : */ 0x19000000,0x00000320, at 0x000000f8 : */ 0x19000000,0x00000320,
/* /*
MOVE FROM dsa_datain+0x0300, WHEN DATA_IN MOVE FROM dsa_datain+0x0300, WHEN DATA_IN
at 0x000000fc : */ 0x19000000,0x00000328, at 0x000000fa : */ 0x19000000,0x00000328,
/* /*
MOVE FROM dsa_datain+0x0308, WHEN DATA_IN MOVE FROM dsa_datain+0x0308, WHEN DATA_IN
at 0x000000fe : */ 0x19000000,0x00000330, at 0x000000fc : */ 0x19000000,0x00000330,
/* /*
MOVE FROM dsa_datain+0x0310, WHEN DATA_IN MOVE FROM dsa_datain+0x0310, WHEN DATA_IN
at 0x00000100 : */ 0x19000000,0x00000338, at 0x000000fe : */ 0x19000000,0x00000338,
/* /*
MOVE FROM dsa_datain+0x0318, WHEN DATA_IN MOVE FROM dsa_datain+0x0318, WHEN DATA_IN
at 0x00000102 : */ 0x19000000,0x00000340, at 0x00000100 : */ 0x19000000,0x00000340,
/* /*
MOVE FROM dsa_datain+0x0320, WHEN DATA_IN MOVE FROM dsa_datain+0x0320, WHEN DATA_IN
at 0x00000104 : */ 0x19000000,0x00000348, at 0x00000102 : */ 0x19000000,0x00000348,
/* /*
MOVE FROM dsa_datain+0x0328, WHEN DATA_IN MOVE FROM dsa_datain+0x0328, WHEN DATA_IN
at 0x00000106 : */ 0x19000000,0x00000350, at 0x00000104 : */ 0x19000000,0x00000350,
/* /*
MOVE FROM dsa_datain+0x0330, WHEN DATA_IN MOVE FROM dsa_datain+0x0330, WHEN DATA_IN
at 0x00000108 : */ 0x19000000,0x00000358, at 0x00000106 : */ 0x19000000,0x00000358,
/* /*
MOVE FROM dsa_datain+0x0338, WHEN DATA_IN MOVE FROM dsa_datain+0x0338, WHEN DATA_IN
at 0x0000010a : */ 0x19000000,0x00000360, at 0x00000108 : */ 0x19000000,0x00000360,
/* /*
MOVE FROM dsa_datain+0x0340, WHEN DATA_IN MOVE FROM dsa_datain+0x0340, WHEN DATA_IN
at 0x0000010c : */ 0x19000000,0x00000368, at 0x0000010a : */ 0x19000000,0x00000368,
/* /*
MOVE FROM dsa_datain+0x0348, WHEN DATA_IN MOVE FROM dsa_datain+0x0348, WHEN DATA_IN
at 0x0000010e : */ 0x19000000,0x00000370, at 0x0000010c : */ 0x19000000,0x00000370,
/* /*
MOVE FROM dsa_datain+0x0350, WHEN DATA_IN MOVE FROM dsa_datain+0x0350, WHEN DATA_IN
at 0x00000110 : */ 0x19000000,0x00000378, at 0x0000010e : */ 0x19000000,0x00000378,
/* /*
MOVE FROM dsa_datain+0x0358, WHEN DATA_IN MOVE FROM dsa_datain+0x0358, WHEN DATA_IN
at 0x00000112 : */ 0x19000000,0x00000380, at 0x00000110 : */ 0x19000000,0x00000380,
/* /*
MOVE FROM dsa_datain+0x0360, WHEN DATA_IN MOVE FROM dsa_datain+0x0360, WHEN DATA_IN
at 0x00000114 : */ 0x19000000,0x00000388, at 0x00000112 : */ 0x19000000,0x00000388,
/* /*
MOVE FROM dsa_datain+0x0368, WHEN DATA_IN MOVE FROM dsa_datain+0x0368, WHEN DATA_IN
at 0x00000116 : */ 0x19000000,0x00000390, at 0x00000114 : */ 0x19000000,0x00000390,
/* /*
MOVE FROM dsa_datain+0x0370, WHEN DATA_IN MOVE FROM dsa_datain+0x0370, WHEN DATA_IN
at 0x00000118 : */ 0x19000000,0x00000398, at 0x00000116 : */ 0x19000000,0x00000398,
/* /*
MOVE FROM dsa_datain+0x0378, WHEN DATA_IN MOVE FROM dsa_datain+0x0378, WHEN DATA_IN
at 0x0000011a : */ 0x19000000,0x000003a0, at 0x00000118 : */ 0x19000000,0x000003a0,
/* /*
MOVE FROM dsa_datain+0x0380, WHEN DATA_IN MOVE FROM dsa_datain+0x0380, WHEN DATA_IN
at 0x0000011c : */ 0x19000000,0x000003a8, at 0x0000011a : */ 0x19000000,0x000003a8,
/* /*
MOVE FROM dsa_datain+0x0388, WHEN DATA_IN MOVE FROM dsa_datain+0x0388, WHEN DATA_IN
at 0x0000011e : */ 0x19000000,0x000003b0, at 0x0000011c : */ 0x19000000,0x000003b0,
/* /*
MOVE FROM dsa_datain+0x0390, WHEN DATA_IN MOVE FROM dsa_datain+0x0390, WHEN DATA_IN
at 0x00000120 : */ 0x19000000,0x000003b8, at 0x0000011e : */ 0x19000000,0x000003b8,
/* /*
MOVE FROM dsa_datain+0x0398, WHEN DATA_IN MOVE FROM dsa_datain+0x0398, WHEN DATA_IN
at 0x00000122 : */ 0x19000000,0x000003c0, at 0x00000120 : */ 0x19000000,0x000003c0,
/* /*
MOVE FROM dsa_datain+0x03a0, WHEN DATA_IN MOVE FROM dsa_datain+0x03a0, WHEN DATA_IN
at 0x00000124 : */ 0x19000000,0x000003c8, at 0x00000122 : */ 0x19000000,0x000003c8,
/* /*
MOVE FROM dsa_datain+0x03a8, WHEN DATA_IN MOVE FROM dsa_datain+0x03a8, WHEN DATA_IN
at 0x00000126 : */ 0x19000000,0x000003d0, at 0x00000124 : */ 0x19000000,0x000003d0,
/* /*
MOVE FROM dsa_datain+0x03b0, WHEN DATA_IN MOVE FROM dsa_datain+0x03b0, WHEN DATA_IN
at 0x00000128 : */ 0x19000000,0x000003d8, at 0x00000126 : */ 0x19000000,0x000003d8,
/* /*
MOVE FROM dsa_datain+0x03b8, WHEN DATA_IN MOVE FROM dsa_datain+0x03b8, WHEN DATA_IN
at 0x0000012a : */ 0x19000000,0x000003e0, at 0x00000128 : */ 0x19000000,0x000003e0,
/* /*
MOVE FROM dsa_datain+0x03c0, WHEN DATA_IN MOVE FROM dsa_datain+0x03c0, WHEN DATA_IN
at 0x0000012c : */ 0x19000000,0x000003e8, at 0x0000012a : */ 0x19000000,0x000003e8,
/* /*
MOVE FROM dsa_datain+0x03c8, WHEN DATA_IN MOVE FROM dsa_datain+0x03c8, WHEN DATA_IN
at 0x0000012e : */ 0x19000000,0x000003f0, at 0x0000012c : */ 0x19000000,0x000003f0,
/* /*
MOVE FROM dsa_datain+0x03d0, WHEN DATA_IN MOVE FROM dsa_datain+0x03d0, WHEN DATA_IN
at 0x00000130 : */ 0x19000000,0x000003f8, at 0x0000012e : */ 0x19000000,0x000003f8,
/* /*
MOVE FROM dsa_datain+0x03d8, WHEN DATA_IN MOVE FROM dsa_datain+0x03d8, WHEN DATA_IN
at 0x00000132 : */ 0x19000000,0x00000400, at 0x00000130 : */ 0x19000000,0x00000400,
/* /*
MOVE FROM dsa_datain+0x03e0, WHEN DATA_IN MOVE FROM dsa_datain+0x03e0, WHEN DATA_IN
at 0x00000134 : */ 0x19000000,0x00000408, at 0x00000132 : */ 0x19000000,0x00000408,
/* /*
MOVE FROM dsa_datain+0x03e8, WHEN DATA_IN MOVE FROM dsa_datain+0x03e8, WHEN DATA_IN
at 0x00000136 : */ 0x19000000,0x00000410, at 0x00000134 : */ 0x19000000,0x00000410,
/* /*
MOVE FROM dsa_datain+0x03f0, WHEN DATA_IN MOVE FROM dsa_datain+0x03f0, WHEN DATA_IN
at 0x00000138 : */ 0x19000000,0x00000418, at 0x00000136 : */ 0x19000000,0x00000418,
/* /*
MOVE FROM dsa_datain+0x03f8, WHEN DATA_IN MOVE FROM dsa_datain+0x03f8, WHEN DATA_IN
at 0x0000013a : */ 0x19000000,0x00000420, at 0x00000138 : */ 0x19000000,0x00000420,
/* /*
JUMP end_data_trans JUMP end_data_trans
at 0x0000013c : */ 0x80080000,0x00000908, at 0x0000013a : */ 0x80080000,0x00000900,
/* /*
output_data: output_data:
MOVE SCRATCH0 | had_dataout TO SCRATCH0 MOVE SCRATCH0 | had_dataout TO SCRATCH0
at 0x0000013e : */ 0x7a341000,0x00000000, at 0x0000013c : */ 0x7a341000,0x00000000,
/* /*
ENTRY patch_output_data ENTRY patch_output_data
patch_output_data: patch_output_data:
JUMP 0 JUMP 0
at 0x00000140 : */ 0x80080000,0x00000000, at 0x0000013e : */ 0x80080000,0x00000000,
/* /*
MOVE FROM dsa_dataout+0x0000, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0000, WHEN DATA_OUT
at 0x00000142 : */ 0x18000000,0x00000428, at 0x00000140 : */ 0x18000000,0x00000428,
/* /*
MOVE FROM dsa_dataout+0x0008, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0008, WHEN DATA_OUT
at 0x00000144 : */ 0x18000000,0x00000430, at 0x00000142 : */ 0x18000000,0x00000430,
/* /*
MOVE FROM dsa_dataout+0x0010, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0010, WHEN DATA_OUT
at 0x00000146 : */ 0x18000000,0x00000438, at 0x00000144 : */ 0x18000000,0x00000438,
/* /*
MOVE FROM dsa_dataout+0x0018, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0018, WHEN DATA_OUT
at 0x00000148 : */ 0x18000000,0x00000440, at 0x00000146 : */ 0x18000000,0x00000440,
/* /*
MOVE FROM dsa_dataout+0x0020, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0020, WHEN DATA_OUT
at 0x0000014a : */ 0x18000000,0x00000448, at 0x00000148 : */ 0x18000000,0x00000448,
/* /*
MOVE FROM dsa_dataout+0x0028, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0028, WHEN DATA_OUT
at 0x0000014c : */ 0x18000000,0x00000450, at 0x0000014a : */ 0x18000000,0x00000450,
/* /*
MOVE FROM dsa_dataout+0x0030, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0030, WHEN DATA_OUT
at 0x0000014e : */ 0x18000000,0x00000458, at 0x0000014c : */ 0x18000000,0x00000458,
/* /*
MOVE FROM dsa_dataout+0x0038, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0038, WHEN DATA_OUT
at 0x00000150 : */ 0x18000000,0x00000460, at 0x0000014e : */ 0x18000000,0x00000460,
/* /*
MOVE FROM dsa_dataout+0x0040, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0040, WHEN DATA_OUT
at 0x00000152 : */ 0x18000000,0x00000468, at 0x00000150 : */ 0x18000000,0x00000468,
/* /*
MOVE FROM dsa_dataout+0x0048, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0048, WHEN DATA_OUT
at 0x00000154 : */ 0x18000000,0x00000470, at 0x00000152 : */ 0x18000000,0x00000470,
/* /*
MOVE FROM dsa_dataout+0x0050, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0050, WHEN DATA_OUT
at 0x00000156 : */ 0x18000000,0x00000478, at 0x00000154 : */ 0x18000000,0x00000478,
/* /*
MOVE FROM dsa_dataout+0x0058, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0058, WHEN DATA_OUT
at 0x00000158 : */ 0x18000000,0x00000480, at 0x00000156 : */ 0x18000000,0x00000480,
/* /*
MOVE FROM dsa_dataout+0x0060, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0060, WHEN DATA_OUT
at 0x0000015a : */ 0x18000000,0x00000488, at 0x00000158 : */ 0x18000000,0x00000488,
/* /*
MOVE FROM dsa_dataout+0x0068, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0068, WHEN DATA_OUT
at 0x0000015c : */ 0x18000000,0x00000490, at 0x0000015a : */ 0x18000000,0x00000490,
/* /*
MOVE FROM dsa_dataout+0x0070, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0070, WHEN DATA_OUT
at 0x0000015e : */ 0x18000000,0x00000498, at 0x0000015c : */ 0x18000000,0x00000498,
/* /*
MOVE FROM dsa_dataout+0x0078, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0078, WHEN DATA_OUT
at 0x00000160 : */ 0x18000000,0x000004a0, at 0x0000015e : */ 0x18000000,0x000004a0,
/* /*
MOVE FROM dsa_dataout+0x0080, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0080, WHEN DATA_OUT
at 0x00000162 : */ 0x18000000,0x000004a8, at 0x00000160 : */ 0x18000000,0x000004a8,
/* /*
MOVE FROM dsa_dataout+0x0088, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0088, WHEN DATA_OUT
at 0x00000164 : */ 0x18000000,0x000004b0, at 0x00000162 : */ 0x18000000,0x000004b0,
/* /*
MOVE FROM dsa_dataout+0x0090, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0090, WHEN DATA_OUT
at 0x00000166 : */ 0x18000000,0x000004b8, at 0x00000164 : */ 0x18000000,0x000004b8,
/* /*
MOVE FROM dsa_dataout+0x0098, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0098, WHEN DATA_OUT
at 0x00000168 : */ 0x18000000,0x000004c0, at 0x00000166 : */ 0x18000000,0x000004c0,
/* /*
MOVE FROM dsa_dataout+0x00a0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00a0, WHEN DATA_OUT
at 0x0000016a : */ 0x18000000,0x000004c8, at 0x00000168 : */ 0x18000000,0x000004c8,
/* /*
MOVE FROM dsa_dataout+0x00a8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00a8, WHEN DATA_OUT
at 0x0000016c : */ 0x18000000,0x000004d0, at 0x0000016a : */ 0x18000000,0x000004d0,
/* /*
MOVE FROM dsa_dataout+0x00b0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00b0, WHEN DATA_OUT
at 0x0000016e : */ 0x18000000,0x000004d8, at 0x0000016c : */ 0x18000000,0x000004d8,
/* /*
MOVE FROM dsa_dataout+0x00b8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00b8, WHEN DATA_OUT
at 0x00000170 : */ 0x18000000,0x000004e0, at 0x0000016e : */ 0x18000000,0x000004e0,
/* /*
MOVE FROM dsa_dataout+0x00c0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00c0, WHEN DATA_OUT
at 0x00000172 : */ 0x18000000,0x000004e8, at 0x00000170 : */ 0x18000000,0x000004e8,
/* /*
MOVE FROM dsa_dataout+0x00c8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00c8, WHEN DATA_OUT
at 0x00000174 : */ 0x18000000,0x000004f0, at 0x00000172 : */ 0x18000000,0x000004f0,
/* /*
MOVE FROM dsa_dataout+0x00d0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00d0, WHEN DATA_OUT
at 0x00000176 : */ 0x18000000,0x000004f8, at 0x00000174 : */ 0x18000000,0x000004f8,
/* /*
MOVE FROM dsa_dataout+0x00d8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00d8, WHEN DATA_OUT
at 0x00000178 : */ 0x18000000,0x00000500, at 0x00000176 : */ 0x18000000,0x00000500,
/* /*
MOVE FROM dsa_dataout+0x00e0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00e0, WHEN DATA_OUT
at 0x0000017a : */ 0x18000000,0x00000508, at 0x00000178 : */ 0x18000000,0x00000508,
/* /*
MOVE FROM dsa_dataout+0x00e8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00e8, WHEN DATA_OUT
at 0x0000017c : */ 0x18000000,0x00000510, at 0x0000017a : */ 0x18000000,0x00000510,
/* /*
MOVE FROM dsa_dataout+0x00f0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00f0, WHEN DATA_OUT
at 0x0000017e : */ 0x18000000,0x00000518, at 0x0000017c : */ 0x18000000,0x00000518,
/* /*
MOVE FROM dsa_dataout+0x00f8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x00f8, WHEN DATA_OUT
at 0x00000180 : */ 0x18000000,0x00000520, at 0x0000017e : */ 0x18000000,0x00000520,
/* /*
MOVE FROM dsa_dataout+0x0100, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0100, WHEN DATA_OUT
at 0x00000182 : */ 0x18000000,0x00000528, at 0x00000180 : */ 0x18000000,0x00000528,
/* /*
MOVE FROM dsa_dataout+0x0108, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0108, WHEN DATA_OUT
at 0x00000184 : */ 0x18000000,0x00000530, at 0x00000182 : */ 0x18000000,0x00000530,
/* /*
MOVE FROM dsa_dataout+0x0110, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0110, WHEN DATA_OUT
at 0x00000186 : */ 0x18000000,0x00000538, at 0x00000184 : */ 0x18000000,0x00000538,
/* /*
MOVE FROM dsa_dataout+0x0118, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0118, WHEN DATA_OUT
at 0x00000188 : */ 0x18000000,0x00000540, at 0x00000186 : */ 0x18000000,0x00000540,
/* /*
MOVE FROM dsa_dataout+0x0120, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0120, WHEN DATA_OUT
at 0x0000018a : */ 0x18000000,0x00000548, at 0x00000188 : */ 0x18000000,0x00000548,
/* /*
MOVE FROM dsa_dataout+0x0128, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0128, WHEN DATA_OUT
at 0x0000018c : */ 0x18000000,0x00000550, at 0x0000018a : */ 0x18000000,0x00000550,
/* /*
MOVE FROM dsa_dataout+0x0130, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0130, WHEN DATA_OUT
at 0x0000018e : */ 0x18000000,0x00000558, at 0x0000018c : */ 0x18000000,0x00000558,
/* /*
MOVE FROM dsa_dataout+0x0138, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0138, WHEN DATA_OUT
at 0x00000190 : */ 0x18000000,0x00000560, at 0x0000018e : */ 0x18000000,0x00000560,
/* /*
MOVE FROM dsa_dataout+0x0140, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0140, WHEN DATA_OUT
at 0x00000192 : */ 0x18000000,0x00000568, at 0x00000190 : */ 0x18000000,0x00000568,
/* /*
MOVE FROM dsa_dataout+0x0148, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0148, WHEN DATA_OUT
at 0x00000194 : */ 0x18000000,0x00000570, at 0x00000192 : */ 0x18000000,0x00000570,
/* /*
MOVE FROM dsa_dataout+0x0150, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0150, WHEN DATA_OUT
at 0x00000196 : */ 0x18000000,0x00000578, at 0x00000194 : */ 0x18000000,0x00000578,
/* /*
MOVE FROM dsa_dataout+0x0158, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0158, WHEN DATA_OUT
at 0x00000198 : */ 0x18000000,0x00000580, at 0x00000196 : */ 0x18000000,0x00000580,
/* /*
MOVE FROM dsa_dataout+0x0160, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0160, WHEN DATA_OUT
at 0x0000019a : */ 0x18000000,0x00000588, at 0x00000198 : */ 0x18000000,0x00000588,
/* /*
MOVE FROM dsa_dataout+0x0168, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0168, WHEN DATA_OUT
at 0x0000019c : */ 0x18000000,0x00000590, at 0x0000019a : */ 0x18000000,0x00000590,
/* /*
MOVE FROM dsa_dataout+0x0170, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0170, WHEN DATA_OUT
at 0x0000019e : */ 0x18000000,0x00000598, at 0x0000019c : */ 0x18000000,0x00000598,
/* /*
MOVE FROM dsa_dataout+0x0178, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0178, WHEN DATA_OUT
at 0x000001a0 : */ 0x18000000,0x000005a0, at 0x0000019e : */ 0x18000000,0x000005a0,
/* /*
MOVE FROM dsa_dataout+0x0180, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0180, WHEN DATA_OUT
at 0x000001a2 : */ 0x18000000,0x000005a8, at 0x000001a0 : */ 0x18000000,0x000005a8,
/* /*
MOVE FROM dsa_dataout+0x0188, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0188, WHEN DATA_OUT
at 0x000001a4 : */ 0x18000000,0x000005b0, at 0x000001a2 : */ 0x18000000,0x000005b0,
/* /*
MOVE FROM dsa_dataout+0x0190, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0190, WHEN DATA_OUT
at 0x000001a6 : */ 0x18000000,0x000005b8, at 0x000001a4 : */ 0x18000000,0x000005b8,
/* /*
MOVE FROM dsa_dataout+0x0198, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0198, WHEN DATA_OUT
at 0x000001a8 : */ 0x18000000,0x000005c0, at 0x000001a6 : */ 0x18000000,0x000005c0,
/* /*
MOVE FROM dsa_dataout+0x01a0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01a0, WHEN DATA_OUT
at 0x000001aa : */ 0x18000000,0x000005c8, at 0x000001a8 : */ 0x18000000,0x000005c8,
/* /*
MOVE FROM dsa_dataout+0x01a8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01a8, WHEN DATA_OUT
at 0x000001ac : */ 0x18000000,0x000005d0, at 0x000001aa : */ 0x18000000,0x000005d0,
/* /*
MOVE FROM dsa_dataout+0x01b0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01b0, WHEN DATA_OUT
at 0x000001ae : */ 0x18000000,0x000005d8, at 0x000001ac : */ 0x18000000,0x000005d8,
/* /*
MOVE FROM dsa_dataout+0x01b8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01b8, WHEN DATA_OUT
at 0x000001b0 : */ 0x18000000,0x000005e0, at 0x000001ae : */ 0x18000000,0x000005e0,
/* /*
MOVE FROM dsa_dataout+0x01c0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01c0, WHEN DATA_OUT
at 0x000001b2 : */ 0x18000000,0x000005e8, at 0x000001b0 : */ 0x18000000,0x000005e8,
/* /*
MOVE FROM dsa_dataout+0x01c8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01c8, WHEN DATA_OUT
at 0x000001b4 : */ 0x18000000,0x000005f0, at 0x000001b2 : */ 0x18000000,0x000005f0,
/* /*
MOVE FROM dsa_dataout+0x01d0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01d0, WHEN DATA_OUT
at 0x000001b6 : */ 0x18000000,0x000005f8, at 0x000001b4 : */ 0x18000000,0x000005f8,
/* /*
MOVE FROM dsa_dataout+0x01d8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01d8, WHEN DATA_OUT
at 0x000001b8 : */ 0x18000000,0x00000600, at 0x000001b6 : */ 0x18000000,0x00000600,
/* /*
MOVE FROM dsa_dataout+0x01e0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01e0, WHEN DATA_OUT
at 0x000001ba : */ 0x18000000,0x00000608, at 0x000001b8 : */ 0x18000000,0x00000608,
/* /*
MOVE FROM dsa_dataout+0x01e8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01e8, WHEN DATA_OUT
at 0x000001bc : */ 0x18000000,0x00000610, at 0x000001ba : */ 0x18000000,0x00000610,
/* /*
MOVE FROM dsa_dataout+0x01f0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01f0, WHEN DATA_OUT
at 0x000001be : */ 0x18000000,0x00000618, at 0x000001bc : */ 0x18000000,0x00000618,
/* /*
MOVE FROM dsa_dataout+0x01f8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x01f8, WHEN DATA_OUT
at 0x000001c0 : */ 0x18000000,0x00000620, at 0x000001be : */ 0x18000000,0x00000620,
/* /*
MOVE FROM dsa_dataout+0x0200, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0200, WHEN DATA_OUT
at 0x000001c2 : */ 0x18000000,0x00000628, at 0x000001c0 : */ 0x18000000,0x00000628,
/* /*
MOVE FROM dsa_dataout+0x0208, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0208, WHEN DATA_OUT
at 0x000001c4 : */ 0x18000000,0x00000630, at 0x000001c2 : */ 0x18000000,0x00000630,
/* /*
MOVE FROM dsa_dataout+0x0210, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0210, WHEN DATA_OUT
at 0x000001c6 : */ 0x18000000,0x00000638, at 0x000001c4 : */ 0x18000000,0x00000638,
/* /*
MOVE FROM dsa_dataout+0x0218, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0218, WHEN DATA_OUT
at 0x000001c8 : */ 0x18000000,0x00000640, at 0x000001c6 : */ 0x18000000,0x00000640,
/* /*
MOVE FROM dsa_dataout+0x0220, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0220, WHEN DATA_OUT
at 0x000001ca : */ 0x18000000,0x00000648, at 0x000001c8 : */ 0x18000000,0x00000648,
/* /*
MOVE FROM dsa_dataout+0x0228, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0228, WHEN DATA_OUT
at 0x000001cc : */ 0x18000000,0x00000650, at 0x000001ca : */ 0x18000000,0x00000650,
/* /*
MOVE FROM dsa_dataout+0x0230, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0230, WHEN DATA_OUT
at 0x000001ce : */ 0x18000000,0x00000658, at 0x000001cc : */ 0x18000000,0x00000658,
/* /*
MOVE FROM dsa_dataout+0x0238, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0238, WHEN DATA_OUT
at 0x000001d0 : */ 0x18000000,0x00000660, at 0x000001ce : */ 0x18000000,0x00000660,
/* /*
MOVE FROM dsa_dataout+0x0240, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0240, WHEN DATA_OUT
at 0x000001d2 : */ 0x18000000,0x00000668, at 0x000001d0 : */ 0x18000000,0x00000668,
/* /*
MOVE FROM dsa_dataout+0x0248, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0248, WHEN DATA_OUT
at 0x000001d4 : */ 0x18000000,0x00000670, at 0x000001d2 : */ 0x18000000,0x00000670,
/* /*
MOVE FROM dsa_dataout+0x0250, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0250, WHEN DATA_OUT
at 0x000001d6 : */ 0x18000000,0x00000678, at 0x000001d4 : */ 0x18000000,0x00000678,
/* /*
MOVE FROM dsa_dataout+0x0258, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0258, WHEN DATA_OUT
at 0x000001d8 : */ 0x18000000,0x00000680, at 0x000001d6 : */ 0x18000000,0x00000680,
/* /*
MOVE FROM dsa_dataout+0x0260, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0260, WHEN DATA_OUT
at 0x000001da : */ 0x18000000,0x00000688, at 0x000001d8 : */ 0x18000000,0x00000688,
/* /*
MOVE FROM dsa_dataout+0x0268, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0268, WHEN DATA_OUT
at 0x000001dc : */ 0x18000000,0x00000690, at 0x000001da : */ 0x18000000,0x00000690,
/* /*
MOVE FROM dsa_dataout+0x0270, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0270, WHEN DATA_OUT
at 0x000001de : */ 0x18000000,0x00000698, at 0x000001dc : */ 0x18000000,0x00000698,
/* /*
MOVE FROM dsa_dataout+0x0278, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0278, WHEN DATA_OUT
at 0x000001e0 : */ 0x18000000,0x000006a0, at 0x000001de : */ 0x18000000,0x000006a0,
/* /*
MOVE FROM dsa_dataout+0x0280, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0280, WHEN DATA_OUT
at 0x000001e2 : */ 0x18000000,0x000006a8, at 0x000001e0 : */ 0x18000000,0x000006a8,
/* /*
MOVE FROM dsa_dataout+0x0288, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0288, WHEN DATA_OUT
at 0x000001e4 : */ 0x18000000,0x000006b0, at 0x000001e2 : */ 0x18000000,0x000006b0,
/* /*
MOVE FROM dsa_dataout+0x0290, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0290, WHEN DATA_OUT
at 0x000001e6 : */ 0x18000000,0x000006b8, at 0x000001e4 : */ 0x18000000,0x000006b8,
/* /*
MOVE FROM dsa_dataout+0x0298, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0298, WHEN DATA_OUT
at 0x000001e8 : */ 0x18000000,0x000006c0, at 0x000001e6 : */ 0x18000000,0x000006c0,
/* /*
MOVE FROM dsa_dataout+0x02a0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02a0, WHEN DATA_OUT
at 0x000001ea : */ 0x18000000,0x000006c8, at 0x000001e8 : */ 0x18000000,0x000006c8,
/* /*
MOVE FROM dsa_dataout+0x02a8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02a8, WHEN DATA_OUT
at 0x000001ec : */ 0x18000000,0x000006d0, at 0x000001ea : */ 0x18000000,0x000006d0,
/* /*
MOVE FROM dsa_dataout+0x02b0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02b0, WHEN DATA_OUT
at 0x000001ee : */ 0x18000000,0x000006d8, at 0x000001ec : */ 0x18000000,0x000006d8,
/* /*
MOVE FROM dsa_dataout+0x02b8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02b8, WHEN DATA_OUT
at 0x000001f0 : */ 0x18000000,0x000006e0, at 0x000001ee : */ 0x18000000,0x000006e0,
/* /*
MOVE FROM dsa_dataout+0x02c0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02c0, WHEN DATA_OUT
at 0x000001f2 : */ 0x18000000,0x000006e8, at 0x000001f0 : */ 0x18000000,0x000006e8,
/* /*
MOVE FROM dsa_dataout+0x02c8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02c8, WHEN DATA_OUT
at 0x000001f4 : */ 0x18000000,0x000006f0, at 0x000001f2 : */ 0x18000000,0x000006f0,
/* /*
MOVE FROM dsa_dataout+0x02d0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02d0, WHEN DATA_OUT
at 0x000001f6 : */ 0x18000000,0x000006f8, at 0x000001f4 : */ 0x18000000,0x000006f8,
/* /*
MOVE FROM dsa_dataout+0x02d8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02d8, WHEN DATA_OUT
at 0x000001f8 : */ 0x18000000,0x00000700, at 0x000001f6 : */ 0x18000000,0x00000700,
/* /*
MOVE FROM dsa_dataout+0x02e0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02e0, WHEN DATA_OUT
at 0x000001fa : */ 0x18000000,0x00000708, at 0x000001f8 : */ 0x18000000,0x00000708,
/* /*
MOVE FROM dsa_dataout+0x02e8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02e8, WHEN DATA_OUT
at 0x000001fc : */ 0x18000000,0x00000710, at 0x000001fa : */ 0x18000000,0x00000710,
/* /*
MOVE FROM dsa_dataout+0x02f0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02f0, WHEN DATA_OUT
at 0x000001fe : */ 0x18000000,0x00000718, at 0x000001fc : */ 0x18000000,0x00000718,
/* /*
MOVE FROM dsa_dataout+0x02f8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x02f8, WHEN DATA_OUT
at 0x00000200 : */ 0x18000000,0x00000720, at 0x000001fe : */ 0x18000000,0x00000720,
/* /*
MOVE FROM dsa_dataout+0x0300, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0300, WHEN DATA_OUT
at 0x00000202 : */ 0x18000000,0x00000728, at 0x00000200 : */ 0x18000000,0x00000728,
/* /*
MOVE FROM dsa_dataout+0x0308, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0308, WHEN DATA_OUT
at 0x00000204 : */ 0x18000000,0x00000730, at 0x00000202 : */ 0x18000000,0x00000730,
/* /*
MOVE FROM dsa_dataout+0x0310, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0310, WHEN DATA_OUT
at 0x00000206 : */ 0x18000000,0x00000738, at 0x00000204 : */ 0x18000000,0x00000738,
/* /*
MOVE FROM dsa_dataout+0x0318, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0318, WHEN DATA_OUT
at 0x00000208 : */ 0x18000000,0x00000740, at 0x00000206 : */ 0x18000000,0x00000740,
/* /*
MOVE FROM dsa_dataout+0x0320, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0320, WHEN DATA_OUT
at 0x0000020a : */ 0x18000000,0x00000748, at 0x00000208 : */ 0x18000000,0x00000748,
/* /*
MOVE FROM dsa_dataout+0x0328, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0328, WHEN DATA_OUT
at 0x0000020c : */ 0x18000000,0x00000750, at 0x0000020a : */ 0x18000000,0x00000750,
/* /*
MOVE FROM dsa_dataout+0x0330, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0330, WHEN DATA_OUT
at 0x0000020e : */ 0x18000000,0x00000758, at 0x0000020c : */ 0x18000000,0x00000758,
/* /*
MOVE FROM dsa_dataout+0x0338, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0338, WHEN DATA_OUT
at 0x00000210 : */ 0x18000000,0x00000760, at 0x0000020e : */ 0x18000000,0x00000760,
/* /*
MOVE FROM dsa_dataout+0x0340, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0340, WHEN DATA_OUT
at 0x00000212 : */ 0x18000000,0x00000768, at 0x00000210 : */ 0x18000000,0x00000768,
/* /*
MOVE FROM dsa_dataout+0x0348, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0348, WHEN DATA_OUT
at 0x00000214 : */ 0x18000000,0x00000770, at 0x00000212 : */ 0x18000000,0x00000770,
/* /*
MOVE FROM dsa_dataout+0x0350, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0350, WHEN DATA_OUT
at 0x00000216 : */ 0x18000000,0x00000778, at 0x00000214 : */ 0x18000000,0x00000778,
/* /*
MOVE FROM dsa_dataout+0x0358, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0358, WHEN DATA_OUT
at 0x00000218 : */ 0x18000000,0x00000780, at 0x00000216 : */ 0x18000000,0x00000780,
/* /*
MOVE FROM dsa_dataout+0x0360, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0360, WHEN DATA_OUT
at 0x0000021a : */ 0x18000000,0x00000788, at 0x00000218 : */ 0x18000000,0x00000788,
/* /*
MOVE FROM dsa_dataout+0x0368, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0368, WHEN DATA_OUT
at 0x0000021c : */ 0x18000000,0x00000790, at 0x0000021a : */ 0x18000000,0x00000790,
/* /*
MOVE FROM dsa_dataout+0x0370, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0370, WHEN DATA_OUT
at 0x0000021e : */ 0x18000000,0x00000798, at 0x0000021c : */ 0x18000000,0x00000798,
/* /*
MOVE FROM dsa_dataout+0x0378, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0378, WHEN DATA_OUT
at 0x00000220 : */ 0x18000000,0x000007a0, at 0x0000021e : */ 0x18000000,0x000007a0,
/* /*
MOVE FROM dsa_dataout+0x0380, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0380, WHEN DATA_OUT
at 0x00000222 : */ 0x18000000,0x000007a8, at 0x00000220 : */ 0x18000000,0x000007a8,
/* /*
MOVE FROM dsa_dataout+0x0388, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0388, WHEN DATA_OUT
at 0x00000224 : */ 0x18000000,0x000007b0, at 0x00000222 : */ 0x18000000,0x000007b0,
/* /*
MOVE FROM dsa_dataout+0x0390, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0390, WHEN DATA_OUT
at 0x00000226 : */ 0x18000000,0x000007b8, at 0x00000224 : */ 0x18000000,0x000007b8,
/* /*
MOVE FROM dsa_dataout+0x0398, WHEN DATA_OUT MOVE FROM dsa_dataout+0x0398, WHEN DATA_OUT
at 0x00000228 : */ 0x18000000,0x000007c0, at 0x00000226 : */ 0x18000000,0x000007c0,
/* /*
MOVE FROM dsa_dataout+0x03a0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03a0, WHEN DATA_OUT
at 0x0000022a : */ 0x18000000,0x000007c8, at 0x00000228 : */ 0x18000000,0x000007c8,
/* /*
MOVE FROM dsa_dataout+0x03a8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03a8, WHEN DATA_OUT
at 0x0000022c : */ 0x18000000,0x000007d0, at 0x0000022a : */ 0x18000000,0x000007d0,
/* /*
MOVE FROM dsa_dataout+0x03b0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03b0, WHEN DATA_OUT
at 0x0000022e : */ 0x18000000,0x000007d8, at 0x0000022c : */ 0x18000000,0x000007d8,
/* /*
MOVE FROM dsa_dataout+0x03b8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03b8, WHEN DATA_OUT
at 0x00000230 : */ 0x18000000,0x000007e0, at 0x0000022e : */ 0x18000000,0x000007e0,
/* /*
MOVE FROM dsa_dataout+0x03c0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03c0, WHEN DATA_OUT
at 0x00000232 : */ 0x18000000,0x000007e8, at 0x00000230 : */ 0x18000000,0x000007e8,
/* /*
MOVE FROM dsa_dataout+0x03c8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03c8, WHEN DATA_OUT
at 0x00000234 : */ 0x18000000,0x000007f0, at 0x00000232 : */ 0x18000000,0x000007f0,
/* /*
MOVE FROM dsa_dataout+0x03d0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03d0, WHEN DATA_OUT
at 0x00000236 : */ 0x18000000,0x000007f8, at 0x00000234 : */ 0x18000000,0x000007f8,
/* /*
MOVE FROM dsa_dataout+0x03d8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03d8, WHEN DATA_OUT
at 0x00000238 : */ 0x18000000,0x00000800, at 0x00000236 : */ 0x18000000,0x00000800,
/* /*
MOVE FROM dsa_dataout+0x03e0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03e0, WHEN DATA_OUT
at 0x0000023a : */ 0x18000000,0x00000808, at 0x00000238 : */ 0x18000000,0x00000808,
/* /*
MOVE FROM dsa_dataout+0x03e8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03e8, WHEN DATA_OUT
at 0x0000023c : */ 0x18000000,0x00000810, at 0x0000023a : */ 0x18000000,0x00000810,
/* /*
MOVE FROM dsa_dataout+0x03f0, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03f0, WHEN DATA_OUT
at 0x0000023e : */ 0x18000000,0x00000818, at 0x0000023c : */ 0x18000000,0x00000818,
/* /*
MOVE FROM dsa_dataout+0x03f8, WHEN DATA_OUT MOVE FROM dsa_dataout+0x03f8, WHEN DATA_OUT
at 0x00000240 : */ 0x18000000,0x00000820, at 0x0000023e : */ 0x18000000,0x00000820,
/* /*
ENTRY end_data_trans ENTRY end_data_trans
end_data_trans: end_data_trans:
redo_msgin3: redo_msgin3:
JUMP get_status, WHEN STATUS JUMP get_status, WHEN STATUS
at 0x00000242 : */ 0x830b0000,0x000000a0, at 0x00000240 : */ 0x830b0000,0x00000098,
/* /*
JUMP get_msgin3, WHEN MSG_IN JUMP get_msgin3, WHEN MSG_IN
at 0x00000244 : */ 0x870b0000,0x00000b20, at 0x00000242 : */ 0x870b0000,0x00000b78,
/* /*
INT int_data_bad_phase INT int_data_bad_phase
at 0x00000246 : */ 0x98080000,0xab93000b, at 0x00000244 : */ 0x98080000,0xab93000b,
/* /*
get_msgin1: get_msgin1:
MOVE SCRATCH0 | had_msgin TO SCRATCH0 MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x00000248 : */ 0x7a344000,0x00000000, at 0x00000246 : */ 0x7a344000,0x00000000,
/* /*
MOVE 1, msgin_buf, WHEN MSG_IN MOVE 1, msgin_buf, WHEN MSG_IN
at 0x0000024a : */ 0x0f000001,0x00000000, at 0x00000248 : */ 0x0f000001,0x00000000,
/* /*
JUMP ext_msg1, IF 0x01 ; Extended Message JUMP ext_msg1, IF 0x01 ; Extended Message
at 0x0000024c : */ 0x800c0001,0x00000968, at 0x0000024a : */ 0x800c0001,0x00000960,
/* /*
JUMP ignore_msg1, IF 0x02 ; Save Data Pointers JUMP ignore_msg1, IF 0x02 ; Save Data Pointers
at 0x0000024e : */ 0x800c0002,0x00000958, at 0x0000024c : */ 0x800c0002,0x00000950,
/* /*
JUMP ignore_msg1, IF 0x03 ; Save Restore Pointers JUMP ignore_msg1, IF 0x03 ; Save Restore Pointers
at 0x00000250 : */ 0x800c0003,0x00000958, at 0x0000024e : */ 0x800c0003,0x00000950,
/* /*
JUMP disc1, IF 0x04 ; Disconnect JUMP disc1, IF 0x04 ; Disconnect
at 0x00000252 : */ 0x800c0004,0x000009c8, at 0x00000250 : */ 0x800c0004,0x000009f0,
/* /*
INT int_bad_msg1 INT int_bad_msg1
at 0x00000254 : */ 0x98080000,0xab930006, at 0x00000252 : */ 0x98080000,0xab930006,
/* /*
ignore_msg1: ignore_msg1:
CLEAR ACK CLEAR ACK
at 0x00000256 : */ 0x60000040,0x00000000, at 0x00000254 : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin1 JUMP redo_msgin1
at 0x00000258 : */ 0x80080000,0x00000058, at 0x00000256 : */ 0x80080000,0x00000050,
/* /*
ext_msg1: ext_msg1:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x0000025a : */ 0x7a348000,0x00000000, at 0x00000258 : */ 0x7a348000,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x0000025c : */ 0x60000040,0x00000000, at 0x0000025a : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
at 0x0000025e : */ 0x0f000001,0x00000001, at 0x0000025c : */ 0x0f000001,0x00000001,
/* /*
JUMP ext_msg1a, IF 0x03 JUMP reject_msg1, IF NOT 0x03 ; Only handle SDTR
at 0x00000260 : */ 0x800c0003,0x00000990, at 0x0000025e : */ 0x80040003,0x000009b0,
/* /*
INT int_bad_extmsg1a CLEAR ACK
at 0x00000262 : */ 0x98080000,0xab930000, at 0x00000260 : */ 0x60000040,0x00000000,
/*
MOVE 1, msgin_buf + 2, WHEN MSG_IN
at 0x00000262 : */ 0x0f000001,0x00000002,
/*
JUMP reject_msg1, IF NOT 0x01 ; Only handle SDTR
at 0x00000264 : */ 0x80040001,0x000009b0,
/* /*
ext_msg1a:
CLEAR ACK CLEAR ACK
at 0x00000264 : */ 0x60000040,0x00000000, at 0x00000266 : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
at 0x00000266 : */ 0x0f000001,0x00000002, at 0x00000268 : */ 0x0f000002,0x00000003,
/* /*
JUMP ext_msg1b, IF 0x01 ; Must be SDTR INT int_msg_sdtr1
at 0x0000026a : */ 0x98080000,0xab93000c,
/*
reject_msg1:
MOVE SCRATCH1 | did_reject TO SCRATCH1
at 0x00000268 : */ 0x800c0001,0x000009b0, at 0x0000026c : */ 0x7a350100,0x00000000,
/* /*
INT int_bad_extmsg1b SET ATN
at 0x0000026a : */ 0x98080000,0xab930001, at 0x0000026e : */ 0x58000008,0x00000000,
/* /*
ext_msg1b:
CLEAR ACK CLEAR ACK
at 0x0000026c : */ 0x60000040,0x00000000, at 0x00000270 : */ 0x60000040,0x00000000,
/* /*
MOVE 2, msgin_buf + 3, WHEN MSG_IN JUMP reject_msg1a, WHEN NOT MSG_IN
at 0x0000026e : */ 0x0f000002,0x00000003, at 0x00000272 : */ 0x87030000,0x000009e0,
/* /*
INT int_msg_sdtr1 MOVE 1, msgin_buf + 7, WHEN MSG_IN
at 0x00000270 : */ 0x98080000,0xab93000c, at 0x00000274 : */ 0x0f000001,0x00000007,
/*
JUMP reject_msg1
at 0x00000276 : */ 0x80080000,0x000009b0,
/*
reject_msg1a:
MOVE 1, msg_reject, WHEN MSG_OUT
at 0x00000278 : */ 0x0e000001,0x00000000,
/*
JUMP redo_msgin1
at 0x0000027a : */ 0x80080000,0x00000050,
/* /*
disc1: disc1:
CLEAR ACK CLEAR ACK
at 0x00000272 : */ 0x60000040,0x00000000, at 0x0000027c : */ 0x60000040,0x00000000,
/* /*
ENTRY wait_disc1 ENTRY wait_disc1
wait_disc1: wait_disc1:
WAIT DISCONNECT WAIT DISCONNECT
at 0x00000274 : */ 0x48000000,0x00000000, at 0x0000027e : */ 0x48000000,0x00000000,
/* /*
INT int_disc1 INT int_disc1
at 0x00000276 : */ 0x98080000,0xab930019, at 0x00000280 : */ 0x98080000,0xab930019,
/* /*
ENTRY resume_msgin1a ENTRY resume_msgin1a
resume_msgin1a: resume_msgin1a:
CLEAR ACK CLEAR ACK
at 0x00000278 : */ 0x60000040,0x00000000, at 0x00000282 : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin1 JUMP redo_msgin1
at 0x0000027a : */ 0x80080000,0x00000058, at 0x00000284 : */ 0x80080000,0x00000050,
/* /*
ENTRY resume_msgin1b ENTRY resume_msgin1b
resume_msgin1b: resume_msgin1b:
SET ATN SET ATN
at 0x0000027c : */ 0x58000008,0x00000000, at 0x00000286 : */ 0x58000008,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x0000027e : */ 0x60000040,0x00000000, at 0x00000288 : */ 0x60000040,0x00000000,
/* /*
INT int_no_msgout1, WHEN NOT MSG_OUT INT int_no_msgout1, WHEN NOT MSG_OUT
at 0x00000280 : */ 0x9e030000,0xab93000f, at 0x0000028a : */ 0x9e030000,0xab93000f,
/* /*
MOVE SCRATCH0 | had_msgout TO SCRATCH0 MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x00000282 : */ 0x7a340200,0x00000000, at 0x0000028c : */ 0x7a340200,0x00000000,
/* /*
MOVE FROM dsa_msgout, when MSG_OUT MOVE FROM dsa_msgout, when MSG_OUT
at 0x00000284 : */ 0x1e000000,0x00000008, at 0x0000028e : */ 0x1e000000,0x00000008,
/* /*
JUMP redo_msgin1 JUMP redo_msgin1
at 0x00000286 : */ 0x80080000,0x00000058, at 0x00000290 : */ 0x80080000,0x00000050,
/* /*
get_msgin2: get_msgin2:
MOVE SCRATCH0 | had_msgin TO SCRATCH0 MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x00000288 : */ 0x7a344000,0x00000000, at 0x00000292 : */ 0x7a344000,0x00000000,
/* /*
MOVE 1, msgin_buf, WHEN MSG_IN MOVE 1, msgin_buf, WHEN MSG_IN
at 0x0000028a : */ 0x0f000001,0x00000000, at 0x00000294 : */ 0x0f000001,0x00000000,
/* /*
JUMP ext_msg2, IF 0x01 ; Extended Message JUMP ext_msg2, IF 0x01 ; Extended Message
at 0x0000028c : */ 0x800c0001,0x00000a68, at 0x00000296 : */ 0x800c0001,0x00000a90,
/* /*
JUMP ignore_msg2, IF 0x02 ; Save Data Pointers JUMP ignore_msg2, IF 0x02 ; Save Data Pointers
at 0x0000028e : */ 0x800c0002,0x00000a58, at 0x00000298 : */ 0x800c0002,0x00000a80,
/* /*
JUMP ignore_msg2, IF 0x03 ; Save Restore Pointers JUMP ignore_msg2, IF 0x03 ; Save Restore Pointers
at 0x00000290 : */ 0x800c0003,0x00000a58, at 0x0000029a : */ 0x800c0003,0x00000a80,
/* /*
JUMP disc2, IF 0x04 ; Disconnect JUMP disc2, IF 0x04 ; Disconnect
at 0x00000292 : */ 0x800c0004,0x00000ac8, at 0x0000029c : */ 0x800c0004,0x00000b20,
/* /*
INT int_bad_msg2 INT int_bad_msg2
at 0x00000294 : */ 0x98080000,0xab930007, at 0x0000029e : */ 0x98080000,0xab930007,
/* /*
ignore_msg2: ignore_msg2:
CLEAR ACK CLEAR ACK
at 0x00000296 : */ 0x60000040,0x00000000, at 0x000002a0 : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin2 JUMP redo_msgin2
at 0x00000298 : */ 0x80080000,0x00000078, at 0x000002a2 : */ 0x80080000,0x00000070,
/* /*
ext_msg2: ext_msg2:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x0000029a : */ 0x7a348000,0x00000000, at 0x000002a4 : */ 0x7a348000,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x0000029c : */ 0x60000040,0x00000000, at 0x000002a6 : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
at 0x0000029e : */ 0x0f000001,0x00000001, at 0x000002a8 : */ 0x0f000001,0x00000001,
/*
JUMP reject_msg2, IF NOT 0x03 ; Only handle SDTR
at 0x000002aa : */ 0x80040003,0x00000ae0,
/*
CLEAR ACK
at 0x000002ac : */ 0x60000040,0x00000000,
/* /*
JUMP ext_msg2a, IF 0x03 MOVE 1, msgin_buf + 2, WHEN MSG_IN
at 0x000002a0 : */ 0x800c0003,0x00000a90, at 0x000002ae : */ 0x0f000001,0x00000002,
/* /*
INT int_bad_extmsg2a JUMP reject_msg2, IF NOT 0x01 ; Only handle SDTR
at 0x000002a2 : */ 0x98080000,0xab930002, at 0x000002b0 : */ 0x80040001,0x00000ae0,
/* /*
ext_msg2a:
CLEAR ACK CLEAR ACK
at 0x000002a4 : */ 0x60000040,0x00000000, at 0x000002b2 : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
at 0x000002b4 : */ 0x0f000002,0x00000003,
/*
INT int_msg_sdtr2
at 0x000002a6 : */ 0x0f000001,0x00000002, at 0x000002b6 : */ 0x98080000,0xab93000d,
/* /*
JUMP ext_msg2b, IF 0x01 ; Must be SDTR reject_msg2:
MOVE SCRATCH1 | did_reject TO SCRATCH1
at 0x000002a8 : */ 0x800c0001,0x00000ab0, at 0x000002b8 : */ 0x7a350100,0x00000000,
/* /*
INT int_bad_extmsg2b SET ATN
at 0x000002aa : */ 0x98080000,0xab930003, at 0x000002ba : */ 0x58000008,0x00000000,
/* /*
ext_msg2b:
CLEAR ACK CLEAR ACK
at 0x000002ac : */ 0x60000040,0x00000000, at 0x000002bc : */ 0x60000040,0x00000000,
/* /*
MOVE 2, msgin_buf + 3, WHEN MSG_IN JUMP reject_msg2a, WHEN NOT MSG_IN
at 0x000002ae : */ 0x0f000002,0x00000003, at 0x000002be : */ 0x87030000,0x00000b10,
/* /*
INT int_msg_sdtr2 MOVE 1, msgin_buf + 7, WHEN MSG_IN
at 0x000002c0 : */ 0x0f000001,0x00000007,
/*
JUMP reject_msg2
at 0x000002c2 : */ 0x80080000,0x00000ae0,
/*
reject_msg2a:
MOVE 1, msg_reject, WHEN MSG_OUT
at 0x000002c4 : */ 0x0e000001,0x00000000,
/*
JUMP redo_msgin2
at 0x000002b0 : */ 0x98080000,0xab93000d, at 0x000002c6 : */ 0x80080000,0x00000070,
/* /*
disc2: disc2:
CLEAR ACK CLEAR ACK
at 0x000002b2 : */ 0x60000040,0x00000000, at 0x000002c8 : */ 0x60000040,0x00000000,
/* /*
ENTRY wait_disc2 ENTRY wait_disc2
wait_disc2: wait_disc2:
WAIT DISCONNECT WAIT DISCONNECT
at 0x000002b4 : */ 0x48000000,0x00000000, at 0x000002ca : */ 0x48000000,0x00000000,
/* /*
INT int_disc2 INT int_disc2
at 0x000002b6 : */ 0x98080000,0xab93001a, at 0x000002cc : */ 0x98080000,0xab93001a,
/* /*
ENTRY resume_msgin2a ENTRY resume_msgin2a
resume_msgin2a: resume_msgin2a:
CLEAR ACK CLEAR ACK
at 0x000002b8 : */ 0x60000040,0x00000000, at 0x000002ce : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin2 JUMP redo_msgin2
at 0x000002ba : */ 0x80080000,0x00000078, at 0x000002d0 : */ 0x80080000,0x00000070,
/* /*
ENTRY resume_msgin2b ENTRY resume_msgin2b
resume_msgin2b: resume_msgin2b:
SET ATN SET ATN
at 0x000002bc : */ 0x58000008,0x00000000, at 0x000002d2 : */ 0x58000008,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x000002be : */ 0x60000040,0x00000000, at 0x000002d4 : */ 0x60000040,0x00000000,
/* /*
INT int_no_msgout2, WHEN NOT MSG_OUT INT int_no_msgout2, WHEN NOT MSG_OUT
at 0x000002c0 : */ 0x9e030000,0xab930010, at 0x000002d6 : */ 0x9e030000,0xab930010,
/* /*
MOVE SCRATCH0 | had_msgout TO SCRATCH0 MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x000002c2 : */ 0x7a340200,0x00000000, at 0x000002d8 : */ 0x7a340200,0x00000000,
/* /*
MOVE FROM dsa_msgout, when MSG_OUT MOVE FROM dsa_msgout, when MSG_OUT
at 0x000002c4 : */ 0x1e000000,0x00000008, at 0x000002da : */ 0x1e000000,0x00000008,
/* /*
JUMP redo_msgin2 JUMP redo_msgin2
at 0x000002c6 : */ 0x80080000,0x00000078, at 0x000002dc : */ 0x80080000,0x00000070,
/* /*
get_msgin3: get_msgin3:
MOVE SCRATCH0 | had_msgin TO SCRATCH0 MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x000002c8 : */ 0x7a344000,0x00000000, at 0x000002de : */ 0x7a344000,0x00000000,
/* /*
MOVE 1, msgin_buf, WHEN MSG_IN MOVE 1, msgin_buf, WHEN MSG_IN
at 0x000002ca : */ 0x0f000001,0x00000000, at 0x000002e0 : */ 0x0f000001,0x00000000,
/* /*
JUMP ext_msg3, IF 0x01 ; Extended Message JUMP ext_msg3, IF 0x01 ; Extended Message
at 0x000002cc : */ 0x800c0001,0x00000b68, at 0x000002e2 : */ 0x800c0001,0x00000bc0,
/* /*
JUMP ignore_msg3, IF 0x02 ; Save Data Pointers JUMP ignore_msg3, IF 0x02 ; Save Data Pointers
at 0x000002ce : */ 0x800c0002,0x00000b58, at 0x000002e4 : */ 0x800c0002,0x00000bb0,
/* /*
JUMP ignore_msg3, IF 0x03 ; Save Restore Pointers JUMP ignore_msg3, IF 0x03 ; Save Restore Pointers
at 0x000002d0 : */ 0x800c0003,0x00000b58, at 0x000002e6 : */ 0x800c0003,0x00000bb0,
/* /*
JUMP disc3, IF 0x04 ; Disconnect JUMP disc3, IF 0x04 ; Disconnect
at 0x000002d2 : */ 0x800c0004,0x00000bc8, at 0x000002e8 : */ 0x800c0004,0x00000c50,
/* /*
INT int_bad_msg3 INT int_bad_msg3
at 0x000002d4 : */ 0x98080000,0xab930008, at 0x000002ea : */ 0x98080000,0xab930008,
/* /*
ignore_msg3: ignore_msg3:
CLEAR ACK CLEAR ACK
at 0x000002d6 : */ 0x60000040,0x00000000, at 0x000002ec : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin3 JUMP redo_msgin3
at 0x000002d8 : */ 0x80080000,0x00000908, at 0x000002ee : */ 0x80080000,0x00000900,
/* /*
ext_msg3: ext_msg3:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0 MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x000002da : */ 0x7a348000,0x00000000, at 0x000002f0 : */ 0x7a348000,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x000002dc : */ 0x60000040,0x00000000, at 0x000002f2 : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 1, WHEN MSG_IN MOVE 1, msgin_buf + 1, WHEN MSG_IN
at 0x000002de : */ 0x0f000001,0x00000001, at 0x000002f4 : */ 0x0f000001,0x00000001,
/* /*
JUMP ext_msg3a, IF 0x03 JUMP reject_msg3, IF NOT 0x03 ; Only handle SDTR
at 0x000002e0 : */ 0x800c0003,0x00000b90, at 0x000002f6 : */ 0x80040003,0x00000c10,
/* /*
INT int_bad_extmsg3a CLEAR ACK
at 0x000002e2 : */ 0x98080000,0xab930004, at 0x000002f8 : */ 0x60000040,0x00000000,
/*
MOVE 1, msgin_buf + 2, WHEN MSG_IN
at 0x000002fa : */ 0x0f000001,0x00000002,
/*
JUMP reject_msg3, IF NOT 0x01 ; Only handle SDTR
at 0x000002fc : */ 0x80040001,0x00000c10,
/* /*
ext_msg3a:
CLEAR ACK CLEAR ACK
at 0x000002e4 : */ 0x60000040,0x00000000, at 0x000002fe : */ 0x60000040,0x00000000,
/* /*
MOVE 1, msgin_buf + 2, WHEN MSG_IN MOVE 2, msgin_buf + 3, WHEN MSG_IN
at 0x00000300 : */ 0x0f000002,0x00000003,
/*
INT int_msg_sdtr3
at 0x000002e6 : */ 0x0f000001,0x00000002, at 0x00000302 : */ 0x98080000,0xab93000e,
/* /*
JUMP ext_msg3b, IF 0x01 ; Must be SDTR reject_msg3:
MOVE SCRATCH1 | did_reject TO SCRATCH1
at 0x000002e8 : */ 0x800c0001,0x00000bb0, at 0x00000304 : */ 0x7a350100,0x00000000,
/* /*
INT int_bad_extmsg3b SET ATN
at 0x000002ea : */ 0x98080000,0xab930005, at 0x00000306 : */ 0x58000008,0x00000000,
/* /*
ext_msg3b:
CLEAR ACK CLEAR ACK
at 0x000002ec : */ 0x60000040,0x00000000, at 0x00000308 : */ 0x60000040,0x00000000,
/* /*
MOVE 2, msgin_buf + 3, WHEN MSG_IN JUMP reject_msg3a, WHEN NOT MSG_IN
at 0x000002ee : */ 0x0f000002,0x00000003, at 0x0000030a : */ 0x87030000,0x00000c40,
/* /*
INT int_msg_sdtr3 MOVE 1, msgin_buf + 7, WHEN MSG_IN
at 0x0000030c : */ 0x0f000001,0x00000007,
/*
JUMP reject_msg3
at 0x0000030e : */ 0x80080000,0x00000c10,
/*
reject_msg3a:
MOVE 1, msg_reject, WHEN MSG_OUT
at 0x000002f0 : */ 0x98080000,0xab93000e, at 0x00000310 : */ 0x0e000001,0x00000000,
/*
JUMP redo_msgin3
at 0x00000312 : */ 0x80080000,0x00000900,
/* /*
disc3: disc3:
CLEAR ACK CLEAR ACK
at 0x000002f2 : */ 0x60000040,0x00000000, at 0x00000314 : */ 0x60000040,0x00000000,
/* /*
ENTRY wait_disc3 ENTRY wait_disc3
wait_disc3: wait_disc3:
WAIT DISCONNECT WAIT DISCONNECT
at 0x000002f4 : */ 0x48000000,0x00000000, at 0x00000316 : */ 0x48000000,0x00000000,
/* /*
INT int_disc3 INT int_disc3
at 0x000002f6 : */ 0x98080000,0xab93001b, at 0x00000318 : */ 0x98080000,0xab93001b,
/* /*
ENTRY resume_msgin3a ENTRY resume_msgin3a
resume_msgin3a: resume_msgin3a:
CLEAR ACK CLEAR ACK
at 0x000002f8 : */ 0x60000040,0x00000000, at 0x0000031a : */ 0x60000040,0x00000000,
/* /*
JUMP redo_msgin3 JUMP redo_msgin3
at 0x000002fa : */ 0x80080000,0x00000908, at 0x0000031c : */ 0x80080000,0x00000900,
/* /*
ENTRY resume_msgin3b ENTRY resume_msgin3b
resume_msgin3b: resume_msgin3b:
SET ATN SET ATN
at 0x000002fc : */ 0x58000008,0x00000000, at 0x0000031e : */ 0x58000008,0x00000000,
/* /*
CLEAR ACK CLEAR ACK
at 0x000002fe : */ 0x60000040,0x00000000, at 0x00000320 : */ 0x60000040,0x00000000,
/* /*
INT int_no_msgout3, WHEN NOT MSG_OUT INT int_no_msgout3, WHEN NOT MSG_OUT
at 0x00000300 : */ 0x9e030000,0xab930011, at 0x00000322 : */ 0x9e030000,0xab930011,
/* /*
MOVE SCRATCH0 | had_msgout TO SCRATCH0 MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x00000302 : */ 0x7a340200,0x00000000, at 0x00000324 : */ 0x7a340200,0x00000000,
/* /*
MOVE FROM dsa_msgout, when MSG_OUT MOVE FROM dsa_msgout, when MSG_OUT
at 0x00000304 : */ 0x1e000000,0x00000008, at 0x00000326 : */ 0x1e000000,0x00000008,
/* /*
JUMP redo_msgin3 JUMP redo_msgin3
at 0x00000306 : */ 0x80080000,0x00000908, at 0x00000328 : */ 0x80080000,0x00000900,
/* /*
ENTRY resume_rej_ident ENTRY resume_rej_ident
resume_rej_ident: resume_rej_ident:
CLEAR ATN CLEAR ATN
at 0x00000308 : */ 0x60000008,0x00000000, at 0x0000032a : */ 0x60000008,0x00000000,
/* /*
MOVE 1, msgin_buf, WHEN MSG_IN MOVE 1, msgin_buf, WHEN MSG_IN
at 0x0000030a : */ 0x0f000001,0x00000000, at 0x0000032c : */ 0x0f000001,0x00000000,
/* /*
INT int_not_rej, IF NOT 0x07 ; Reject INT int_not_rej, IF NOT 0x07 ; Reject
at 0x0000030c : */ 0x98040007,0xab93001c, at 0x0000032e : */ 0x98040007,0xab93001c,
/* /*
CLEAR ACK CLEAR ACK
at 0x0000030e : */ 0x60000040,0x00000000, at 0x00000330 : */ 0x60000040,0x00000000,
/* /*
JUMP done_ident JUMP done_ident
at 0x00000310 : */ 0x80080000,0x00000050, at 0x00000332 : */ 0x80080000,0x00000048,
/* /*
ENTRY reselect ENTRY reselect
...@@ -1716,73 +1784,92 @@ reselect: ...@@ -1716,73 +1784,92 @@ reselect:
; Disable selection timer ; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7 MOVE CTEST7 | 0x10 TO CTEST7
at 0x00000312 : */ 0x7a1b1000,0x00000000, at 0x00000334 : */ 0x7a1b1000,0x00000000,
/* /*
WAIT RESELECT resel_err WAIT RESELECT resel_err
at 0x00000314 : */ 0x50000000,0x00000c70, at 0x00000336 : */ 0x50000000,0x00000cf8,
/* /*
INT int_resel_not_msgin, WHEN NOT MSG_IN INT int_resel_not_msgin, WHEN NOT MSG_IN
at 0x00000316 : */ 0x9f030000,0xab930016, at 0x00000338 : */ 0x9f030000,0xab930016,
/* /*
MOVE 1, reselected_identify, WHEN MSG_IN MOVE 1, reselected_identify, WHEN MSG_IN
at 0x00000318 : */ 0x0f000001,0x00000000, at 0x0000033a : */ 0x0f000001,0x00000000,
/* /*
INT int_reselected INT int_reselected
at 0x0000031a : */ 0x98080000,0xab930017, at 0x0000033c : */ 0x98080000,0xab930017,
/* /*
resel_err: resel_err:
MOVE CTEST2 & 0x40 TO SFBR MOVE CTEST2 & 0x40 TO SFBR
at 0x0000031c : */ 0x74164000,0x00000000, at 0x0000033e : */ 0x74164000,0x00000000,
/* /*
JUMP selected, IF 0x00 JUMP selected, IF 0x00
at 0x0000031e : */ 0x800c0000,0x00000cb0, at 0x00000340 : */ 0x800c0000,0x00000d38,
/* /*
MOVE SFBR & 0 TO SFBR MOVE SFBR & 0 TO SFBR
at 0x00000320 : */ 0x7c080000,0x00000000, at 0x00000342 : */ 0x7c080000,0x00000000,
/* /*
ENTRY patch_new_dsa ENTRY patch_new_dsa
patch_new_dsa: patch_new_dsa:
MOVE SFBR | 0x11 TO DSA0 MOVE SFBR | 0x11 TO DSA0
at 0x00000322 : */ 0x6a101100,0x00000000, at 0x00000344 : */ 0x6a101100,0x00000000,
/* /*
MOVE SFBR | 0x22 TO DSA1 MOVE SFBR | 0x22 TO DSA1
at 0x00000324 : */ 0x6a112200,0x00000000, at 0x00000346 : */ 0x6a112200,0x00000000,
/* /*
MOVE SFBR | 0x33 TO DSA2 MOVE SFBR | 0x33 TO DSA2
at 0x00000326 : */ 0x6a123300,0x00000000, at 0x00000348 : */ 0x6a123300,0x00000000,
/* /*
MOVE SFBR | 0x44 TO DSA3 MOVE SFBR | 0x44 TO DSA3
at 0x00000328 : */ 0x6a134400,0x00000000, at 0x0000034a : */ 0x6a134400,0x00000000,
/* /*
JUMP do_select JUMP do_select
at 0x0000032a : */ 0x80080000,0x00000000, at 0x0000034c : */ 0x80080000,0x00000000,
/* /*
selected: selected:
INT int_selected INT int_selected
at 0x0000032c : */ 0x98080000,0xab930018, at 0x0000034e : */ 0x98080000,0xab930018,
/*
ENTRY test1
test1:
MOVE MEMORY 4, test1_src, test1_dst
at 0x00000350 : */ 0xc0000004,0x00000000,0x00000000,
/*
INT int_test1
at 0x00000353 : */ 0x98080000,0xab93001d,
};
#define A_did_reject 0x00000001
static u32 A_did_reject_used[] __attribute((unused)) = {
0x0000026c,
0x000002b8,
0x00000304,
}; };
#define A_dsa_cmnd 0x00000010 #define A_dsa_cmnd 0x00000010
static u32 A_dsa_cmnd_used[] __attribute((unused)) = { static u32 A_dsa_cmnd_used[] __attribute((unused)) = {
0x0000001d, 0x0000001b,
}; };
#define A_dsa_datain 0x00000028 #define A_dsa_datain 0x00000028
static u32 A_dsa_datain_used[] __attribute((unused)) = { static u32 A_dsa_datain_used[] __attribute((unused)) = {
0x0000003b,
0x0000003d, 0x0000003d,
0x0000003f, 0x0000003f,
0x00000041, 0x00000041,
...@@ -1910,11 +1997,11 @@ static u32 A_dsa_datain_used[] __attribute((unused)) = { ...@@ -1910,11 +1997,11 @@ static u32 A_dsa_datain_used[] __attribute((unused)) = {
0x00000135, 0x00000135,
0x00000137, 0x00000137,
0x00000139, 0x00000139,
0x0000013b,
}; };
#define A_dsa_dataout 0x00000428 #define A_dsa_dataout 0x00000428
static u32 A_dsa_dataout_used[] __attribute((unused)) = { static u32 A_dsa_dataout_used[] __attribute((unused)) = {
0x00000141,
0x00000143, 0x00000143,
0x00000145, 0x00000145,
0x00000147, 0x00000147,
...@@ -2042,25 +2129,24 @@ static u32 A_dsa_dataout_used[] __attribute((unused)) = { ...@@ -2042,25 +2129,24 @@ static u32 A_dsa_dataout_used[] __attribute((unused)) = {
0x0000023b, 0x0000023b,
0x0000023d, 0x0000023d,
0x0000023f, 0x0000023f,
0x00000241,
}; };
#define A_dsa_msgin 0x00000020 #define A_dsa_msgin 0x00000020
static u32 A_dsa_msgin_used[] __attribute((unused)) = { static u32 A_dsa_msgin_used[] __attribute((unused)) = {
0x0000002f, 0x0000002d,
}; };
#define A_dsa_msgout 0x00000008 #define A_dsa_msgout 0x00000008
static u32 A_dsa_msgout_used[] __attribute((unused)) = { static u32 A_dsa_msgout_used[] __attribute((unused)) = {
0x00000013, 0x00000011,
0x00000285, 0x0000028f,
0x000002c5, 0x000002db,
0x00000305, 0x00000327,
}; };
#define A_dsa_select 0x00000000 #define A_dsa_select 0x00000000
static u32 A_dsa_select_used[] __attribute((unused)) = { static u32 A_dsa_select_used[] __attribute((unused)) = {
0x00000006, 0x00000004,
}; };
#define A_dsa_size 0x00000828 #define A_dsa_size 0x00000828
...@@ -2069,285 +2155,290 @@ static u32 A_dsa_size_used[] __attribute((unused)) = { ...@@ -2069,285 +2155,290 @@ static u32 A_dsa_size_used[] __attribute((unused)) = {
#define A_dsa_status 0x00000018 #define A_dsa_status 0x00000018
static u32 A_dsa_status_used[] __attribute((unused)) = { static u32 A_dsa_status_used[] __attribute((unused)) = {
0x0000002b, 0x00000029,
}; };
#define A_had_cmdout 0x00000004 #define A_had_cmdout 0x00000004
static u32 A_had_cmdout_used[] __attribute((unused)) = { static u32 A_had_cmdout_used[] __attribute((unused)) = {
0x0000001a, 0x00000018,
}; };
#define A_had_datain 0x00000008 #define A_had_datain 0x00000008
static u32 A_had_datain_used[] __attribute((unused)) = { static u32 A_had_datain_used[] __attribute((unused)) = {
0x00000038, 0x00000036,
}; };
#define A_had_dataout 0x00000010 #define A_had_dataout 0x00000010
static u32 A_had_dataout_used[] __attribute((unused)) = { static u32 A_had_dataout_used[] __attribute((unused)) = {
0x0000013e, 0x0000013c,
}; };
#define A_had_extmsg 0x00000080 #define A_had_extmsg 0x00000080
static u32 A_had_extmsg_used[] __attribute((unused)) = { static u32 A_had_extmsg_used[] __attribute((unused)) = {
0x0000025a, 0x00000258,
0x0000029a, 0x000002a4,
0x000002da, 0x000002f0,
}; };
#define A_had_msgin 0x00000040 #define A_had_msgin 0x00000040
static u32 A_had_msgin_used[] __attribute((unused)) = { static u32 A_had_msgin_used[] __attribute((unused)) = {
0x00000248, 0x00000246,
0x00000288, 0x00000292,
0x000002c8, 0x000002de,
}; };
#define A_had_msgout 0x00000002 #define A_had_msgout 0x00000002
static u32 A_had_msgout_used[] __attribute((unused)) = { static u32 A_had_msgout_used[] __attribute((unused)) = {
0x00000010, 0x0000000e,
0x00000282, 0x0000028c,
0x000002c2, 0x000002d8,
0x00000302, 0x00000324,
}; };
#define A_had_select 0x00000001 #define A_had_select 0x00000001
static u32 A_had_select_used[] __attribute((unused)) = { static u32 A_had_select_used[] __attribute((unused)) = {
0x0000000c, 0x0000000a,
}; };
#define A_had_status 0x00000020 #define A_had_status 0x00000020
static u32 A_had_status_used[] __attribute((unused)) = { static u32 A_had_status_used[] __attribute((unused)) = {
}; };
#define A_int_bad_extmsg1a 0xab930000
static u32 A_int_bad_extmsg1a_used[] __attribute((unused)) = {
0x00000263,
};
#define A_int_bad_extmsg1b 0xab930001
static u32 A_int_bad_extmsg1b_used[] __attribute((unused)) = {
0x0000026b,
};
#define A_int_bad_extmsg2a 0xab930002
static u32 A_int_bad_extmsg2a_used[] __attribute((unused)) = {
0x000002a3,
};
#define A_int_bad_extmsg2b 0xab930003
static u32 A_int_bad_extmsg2b_used[] __attribute((unused)) = {
0x000002ab,
};
#define A_int_bad_extmsg3a 0xab930004
static u32 A_int_bad_extmsg3a_used[] __attribute((unused)) = {
0x000002e3,
};
#define A_int_bad_extmsg3b 0xab930005
static u32 A_int_bad_extmsg3b_used[] __attribute((unused)) = {
0x000002eb,
};
#define A_int_bad_msg1 0xab930006 #define A_int_bad_msg1 0xab930006
static u32 A_int_bad_msg1_used[] __attribute((unused)) = { static u32 A_int_bad_msg1_used[] __attribute((unused)) = {
0x00000255, 0x00000253,
}; };
#define A_int_bad_msg2 0xab930007 #define A_int_bad_msg2 0xab930007
static u32 A_int_bad_msg2_used[] __attribute((unused)) = { static u32 A_int_bad_msg2_used[] __attribute((unused)) = {
0x00000295, 0x0000029f,
}; };
#define A_int_bad_msg3 0xab930008 #define A_int_bad_msg3 0xab930008
static u32 A_int_bad_msg3_used[] __attribute((unused)) = { static u32 A_int_bad_msg3_used[] __attribute((unused)) = {
0x000002d5, 0x000002eb,
}; };
#define A_int_cmd_bad_phase 0xab930009 #define A_int_cmd_bad_phase 0xab930009
static u32 A_int_cmd_bad_phase_used[] __attribute((unused)) = { static u32 A_int_cmd_bad_phase_used[] __attribute((unused)) = {
0x00000027, 0x00000025,
}; };
#define A_int_cmd_complete 0xab93000a #define A_int_cmd_complete 0xab93000a
static u32 A_int_cmd_complete_used[] __attribute((unused)) = { static u32 A_int_cmd_complete_used[] __attribute((unused)) = {
0x00000037, 0x00000035,
}; };
#define A_int_data_bad_phase 0xab93000b #define A_int_data_bad_phase 0xab93000b
static u32 A_int_data_bad_phase_used[] __attribute((unused)) = { static u32 A_int_data_bad_phase_used[] __attribute((unused)) = {
0x00000247, 0x00000245,
}; };
#define A_int_disc1 0xab930019 #define A_int_disc1 0xab930019
static u32 A_int_disc1_used[] __attribute((unused)) = { static u32 A_int_disc1_used[] __attribute((unused)) = {
0x00000277, 0x00000281,
}; };
#define A_int_disc2 0xab93001a #define A_int_disc2 0xab93001a
static u32 A_int_disc2_used[] __attribute((unused)) = { static u32 A_int_disc2_used[] __attribute((unused)) = {
0x000002b7, 0x000002cd,
}; };
#define A_int_disc3 0xab93001b #define A_int_disc3 0xab93001b
static u32 A_int_disc3_used[] __attribute((unused)) = { static u32 A_int_disc3_used[] __attribute((unused)) = {
0x000002f7, 0x00000319,
}; };
#define A_int_msg_sdtr1 0xab93000c #define A_int_msg_sdtr1 0xab93000c
static u32 A_int_msg_sdtr1_used[] __attribute((unused)) = { static u32 A_int_msg_sdtr1_used[] __attribute((unused)) = {
0x00000271, 0x0000026b,
}; };
#define A_int_msg_sdtr2 0xab93000d #define A_int_msg_sdtr2 0xab93000d
static u32 A_int_msg_sdtr2_used[] __attribute((unused)) = { static u32 A_int_msg_sdtr2_used[] __attribute((unused)) = {
0x000002b1, 0x000002b7,
}; };
#define A_int_msg_sdtr3 0xab93000e #define A_int_msg_sdtr3 0xab93000e
static u32 A_int_msg_sdtr3_used[] __attribute((unused)) = { static u32 A_int_msg_sdtr3_used[] __attribute((unused)) = {
0x000002f1, 0x00000303,
}; };
#define A_int_no_msgout1 0xab93000f #define A_int_no_msgout1 0xab93000f
static u32 A_int_no_msgout1_used[] __attribute((unused)) = { static u32 A_int_no_msgout1_used[] __attribute((unused)) = {
0x00000281, 0x0000028b,
}; };
#define A_int_no_msgout2 0xab930010 #define A_int_no_msgout2 0xab930010
static u32 A_int_no_msgout2_used[] __attribute((unused)) = { static u32 A_int_no_msgout2_used[] __attribute((unused)) = {
0x000002c1, 0x000002d7,
}; };
#define A_int_no_msgout3 0xab930011 #define A_int_no_msgout3 0xab930011
static u32 A_int_no_msgout3_used[] __attribute((unused)) = { static u32 A_int_no_msgout3_used[] __attribute((unused)) = {
0x00000301, 0x00000323,
}; };
#define A_int_not_cmd_complete 0xab930012 #define A_int_not_cmd_complete 0xab930012
static u32 A_int_not_cmd_complete_used[] __attribute((unused)) = { static u32 A_int_not_cmd_complete_used[] __attribute((unused)) = {
0x00000031, 0x0000002f,
}; };
#define A_int_not_rej 0xab93001c #define A_int_not_rej 0xab93001c
static u32 A_int_not_rej_used[] __attribute((unused)) = { static u32 A_int_not_rej_used[] __attribute((unused)) = {
0x0000030d, 0x0000032f,
}; };
#define A_int_resel_not_msgin 0xab930016 #define A_int_resel_not_msgin 0xab930016
static u32 A_int_resel_not_msgin_used[] __attribute((unused)) = { static u32 A_int_resel_not_msgin_used[] __attribute((unused)) = {
0x00000317, 0x00000339,
}; };
#define A_int_reselected 0xab930017 #define A_int_reselected 0xab930017
static u32 A_int_reselected_used[] __attribute((unused)) = { static u32 A_int_reselected_used[] __attribute((unused)) = {
0x0000031b, 0x0000033d,
}; };
#define A_int_sel_no_ident 0xab930013 #define A_int_sel_no_ident 0xab930013
static u32 A_int_sel_no_ident_used[] __attribute((unused)) = { static u32 A_int_sel_no_ident_used[] __attribute((unused)) = {
0x0000000f, 0x0000000d,
}; };
#define A_int_sel_not_cmd 0xab930014 #define A_int_sel_not_cmd 0xab930014
static u32 A_int_sel_not_cmd_used[] __attribute((unused)) = { static u32 A_int_sel_not_cmd_used[] __attribute((unused)) = {
0x00000019, 0x00000017,
}; };
#define A_int_selected 0xab930018 #define A_int_selected 0xab930018
static u32 A_int_selected_used[] __attribute((unused)) = { static u32 A_int_selected_used[] __attribute((unused)) = {
0x0000032d, 0x0000034f,
}; };
#define A_int_status_not_msgin 0xab930015 #define A_int_status_not_msgin 0xab930015
static u32 A_int_status_not_msgin_used[] __attribute((unused)) = { static u32 A_int_status_not_msgin_used[] __attribute((unused)) = {
0x0000002d, 0x0000002b,
};
#define A_int_test1 0xab93001d
static u32 A_int_test1_used[] __attribute((unused)) = {
0x00000354,
};
#define A_msg_reject 0x00000000
static u32 A_msg_reject_used[] __attribute((unused)) = {
0x00000279,
0x000002c5,
0x00000311,
}; };
#define A_msgin_buf 0x00000000 #define A_msgin_buf 0x00000000
static u32 A_msgin_buf_used[] __attribute((unused)) = { static u32 A_msgin_buf_used[] __attribute((unused)) = {
0x0000024b, 0x00000249,
0x0000025f, 0x0000025d,
0x00000267, 0x00000263,
0x0000026f, 0x00000269,
0x0000028b, 0x00000275,
0x0000029f, 0x00000295,
0x000002a7, 0x000002a9,
0x000002af, 0x000002af,
0x000002cb, 0x000002b5,
0x000002df, 0x000002c1,
0x000002e7, 0x000002e1,
0x000002ef, 0x000002f5,
0x0000030b, 0x000002fb,
0x00000301,
0x0000030d,
0x0000032d,
}; };
#define A_reselected_identify 0x00000000 #define A_reselected_identify 0x00000000
static u32 A_reselected_identify_used[] __attribute((unused)) = { static u32 A_reselected_identify_used[] __attribute((unused)) = {
0x00000319, 0x0000033b,
};
#define A_test1_dst 0x00000000
static u32 A_test1_dst_used[] __attribute((unused)) = {
0x00000352,
};
#define A_test1_src 0x00000000
static u32 A_test1_src_used[] __attribute((unused)) = {
0x00000351,
}; };
#define Ent_do_select 0x00000000 #define Ent_do_select 0x00000000
#define Ent_done_ident 0x00000050 #define Ent_done_ident 0x00000048
#define Ent_end_data_trans 0x00000908 #define Ent_end_data_trans 0x00000900
#define Ent_patch_input_data 0x000000e8 #define Ent_patch_input_data 0x000000e0
#define Ent_patch_new_dsa 0x00000c88 #define Ent_patch_new_dsa 0x00000d10
#define Ent_patch_output_data 0x00000500 #define Ent_patch_output_data 0x000004f8
#define Ent_reselect 0x00000c48 #define Ent_reselect 0x00000cd0
#define Ent_resume_cmd 0x00000068 #define Ent_resume_cmd 0x00000060
#define Ent_resume_msgin1a 0x000009e0 #define Ent_resume_msgin1a 0x00000a08
#define Ent_resume_msgin1b 0x000009f0 #define Ent_resume_msgin1b 0x00000a18
#define Ent_resume_msgin2a 0x00000ae0 #define Ent_resume_msgin2a 0x00000b38
#define Ent_resume_msgin2b 0x00000af0 #define Ent_resume_msgin2b 0x00000b48
#define Ent_resume_msgin3a 0x00000be0 #define Ent_resume_msgin3a 0x00000c68
#define Ent_resume_msgin3b 0x00000bf0 #define Ent_resume_msgin3b 0x00000c78
#define Ent_resume_pmm 0x00000078 #define Ent_resume_pmm 0x00000070
#define Ent_resume_rej_ident 0x00000c20 #define Ent_resume_rej_ident 0x00000ca8
#define Ent_wait_disc1 0x000009d0 #define Ent_test1 0x00000d40
#define Ent_wait_disc2 0x00000ad0 #define Ent_wait_disc1 0x000009f8
#define Ent_wait_disc3 0x00000bd0 #define Ent_wait_disc2 0x00000b28
#define Ent_wait_disc_complete 0x000000d0 #define Ent_wait_disc3 0x00000c58
#define Ent_wait_disc_complete 0x000000c8
static u32 LABELPATCHES[] __attribute((unused)) = { static u32 LABELPATCHES[] __attribute((unused)) = {
0x00000005,
0x00000007, 0x00000007,
0x00000009, 0x00000013,
0x00000015, 0x00000015,
0x00000017, 0x0000001d,
0x0000001f, 0x0000001f,
0x00000021, 0x00000021,
0x00000023, 0x00000023,
0x00000025, 0x0000013b,
0x0000013d, 0x00000241,
0x00000243, 0x00000243,
0x00000245, 0x0000024b,
0x0000024d, 0x0000024d,
0x0000024f, 0x0000024f,
0x00000251, 0x00000251,
0x00000253, 0x00000257,
0x00000259, 0x0000025f,
0x00000261, 0x00000265,
0x00000269, 0x00000273,
0x00000277,
0x0000027b, 0x0000027b,
0x00000287, 0x00000285,
0x0000028d,
0x0000028f,
0x00000291, 0x00000291,
0x00000293, 0x00000297,
0x00000299, 0x00000299,
0x000002a1, 0x0000029b,
0x000002a9, 0x0000029d,
0x000002bb, 0x000002a3,
0x000002ab,
0x000002b1,
0x000002bf,
0x000002c3,
0x000002c7, 0x000002c7,
0x000002cd,
0x000002cf,
0x000002d1, 0x000002d1,
0x000002d3, 0x000002dd,
0x000002d9, 0x000002e3,
0x000002e1, 0x000002e5,
0x000002e7,
0x000002e9, 0x000002e9,
0x000002fb, 0x000002ef,
0x00000307, 0x000002f7,
0x00000311, 0x000002fd,
0x00000315, 0x0000030b,
0x0000031f, 0x0000030f,
0x0000032b, 0x00000313,
0x0000031d,
0x00000329,
0x00000333,
0x00000337,
0x00000341,
0x0000034d,
}; };
static struct { static struct {
...@@ -2356,6 +2447,6 @@ static struct { ...@@ -2356,6 +2447,6 @@ static struct {
} EXTERNAL_PATCHES[] __attribute((unused)) = { } EXTERNAL_PATCHES[] __attribute((unused)) = {
}; };
static u32 INSTRUCTIONS __attribute((unused)) = 407; static u32 INSTRUCTIONS __attribute((unused)) = 426;
static u32 PATCHES __attribute((unused)) = 42; static u32 PATCHES __attribute((unused)) = 51;
static u32 EXTERNAL_PATCHES_LEN __attribute((unused)) = 0; static u32 EXTERNAL_PATCHES_LEN __attribute((unused)) = 0;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment