Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
798c67c3
Commit
798c67c3
authored
Oct 11, 2002
by
Rolf Eike Beer
Committed by
Linus Torvalds
Oct 11, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] improve NCR53c710 SCSI driver
parent
5f8c40c2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1118 additions
and
828 deletions
+1118
-828
drivers/scsi/sim710.c
drivers/scsi/sim710.c
+380
-217
drivers/scsi/sim710.h
drivers/scsi/sim710.h
+17
-3
drivers/scsi/sim710.scr
drivers/scsi/sim710.scr
+49
-27
drivers/scsi/sim710_d.h_shipped
drivers/scsi/sim710_d.h_shipped
+672
-581
No files found.
drivers/scsi/sim710.c
View file @
798c67c3
...
...
@@ -18,6 +18,9 @@
*----------------------------------------------------------------------------
*
* 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,
* which is coyright Drew Eckhardt. The scripts for the SCSI chip are
...
...
@@ -41,6 +44,16 @@
* and insmod parameters similar to
* 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:
*
* addr:0x9000 Specifies the base I/O port (or address) of the 53C710.
...
...
@@ -49,12 +62,18 @@
* ignore:0x0a Makes the driver ignore SCSI IDs 0 and 2.
* nodisc:0x70 Prevents disconnects from IDs 6, 5 and 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:
*
* o Async only
* 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 @@
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <linux/mca.h>
#include <linux/interrupt.h>
#include <asm/dma.h>
#include <asm/system.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,17)
#include <linux/spinlock.h>
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,93)
#include <asm/spinlock.h>
#endif
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/byteorder.h>
#include <linux/blk.h>
#ifdef CONFIG_TP34V_SCSI
#include <asm/tp34vhw.h>
#define MEM_MAPPED
#elif defined(CONFIG_MCA)
/* All targets are I/O mapped at the moment */
#define IO_MAPPED
#if defined(CONFIG_MCA)
/*
* For each known microchannel card using the 53c710 we need a list
* of possible IRQ and IO settings, as well as their corresponding
...
...
@@ -116,12 +128,6 @@
#define MCA_004F_IRQS { 5, 9, 14 }
#else
/* Assume an Intel platform */
#define IO_MAPPED
#endif
#include "scsi.h"
...
...
@@ -151,7 +157,7 @@
#ifdef DEBUG
#define DEB(m,x) if (sim710_debug & m) x
int
sim710_debug
=
0
;
int
sim710_debug
;
#else
#define DEB(m,x)
#endif
...
...
@@ -178,7 +184,7 @@ int sim710_debug = 0;
#define STATE_BUSY 3
#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.. */
#ifdef MODULE
...
...
@@ -193,44 +199,15 @@ MODULE_PARM(sim710, "s");
#endif
static
int
sim710_errors
=
0
;
/* Count of error interrupts */
static
int
sim710_intrs
=
0
;
/* Count of all interrupts */
static
int
ignore_ids
=
0
;
/* Accept all SCSI IDs */
static
int
opt_nodisc
=
0
;
/* Allow disconnect on all IDs */
static
int
opt_noneg
=
0
;
/* Allow SDTR negotiation on all IDs */
#ifdef CONFIG_TP34V_SCSI
/* Special hardwired case for Tadpole TP34V at the moment, otherwise
* 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
static
int
sim710_errors
;
/* Count of error interrupts */
static
int
sim710_intrs
;
/* Count of all interrupts */
static
int
ignore_ids
[
MAXBOARDS
];
/* Accept all SCSI IDs */
static
int
opt_nodisc
[
MAXBOARDS
];
/* Allow disconnect 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() */
static
int
no_of_boards
;
/* Actual number of boards/chips */
static
unsigned
int
bases
[
MAXBOARDS
];
/* Base addresses of chips */
static
unsigned
int
irq_vectors
[
MAXBOARDS
];
/* IRQ vectors used by chips */
/* The SCSI Script!!! */
...
...
@@ -249,7 +226,6 @@ static unsigned int irq_vectors[MAXBOARDS] = {
#define MAX_SG 128
/* Scatter/Gather elements */
#define MAX_MSGOUT 8
#define MAX_MSGIN 8
#define MAX_CMND 12
...
...
@@ -263,6 +239,9 @@ struct sim710_hostdata{
u8
negotiate
;
u8
reselected_identify
;
u8
msgin_buf
[
MAX_MSGIN
];
u8
msg_reject
;
u32
test1_src
__attribute__
((
aligned
(
4
)));
u32
test1_dst
;
struct
sim710_target
{
Scsi_Cmnd
*
cur_cmd
;
...
...
@@ -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
#define ARG_SEP ' '
#else
#define ARG_SEP ','
#endif
static
void
ncr_dump
(
struct
Scsi_Host
*
host
)
{
unsigned
long
flags
;
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
)
{
char
*
cur
=
str
;
char
*
pc
,
*
pv
;
char
*
p
,
*
p
c
,
*
pv
;
int
val
;
int
base
;
int
c
;
no_of_boards
=
0
;
while
(
cur
!=
NULL
&&
(
pc
=
strchr
(
cur
,
':'
))
!=
NULL
)
{
while
(
no_of_boards
<
MAXBOARDS
&&
cur
!=
NULL
&&
(
pc
=
strchr
(
cur
,
':'
))
!=
NULL
)
{
char
*
pe
;
val
=
0
;
pv
=
pc
;
c
=
*++
pv
;
if
(
c
==
'n'
)
val
=
0
;
else
if
(
c
==
'y'
)
val
=
1
;
else
{
base
=
0
;
val
=
(
int
)
simple_strtoul
(
pv
,
&
pe
,
base
);
}
val
=
(
int
)
simple_strtoul
(
pv
,
&
pe
,
0
);
if
(
!
strncmp
(
cur
,
"addr:"
,
5
))
{
bases
[
0
]
=
val
;
no_of_boards
=
1
;
bases
[
no_of_boards
++
]
=
val
;
}
#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
))
irq_vectors
[
0
]
=
val
;
irq_vectors
[
no_of_boards
-
1
]
=
val
;
else
if
(
!
strncmp
(
cur
,
"ignore:"
,
7
))
ignore_ids
=
val
;
ignore_ids
[
no_of_boards
-
1
]
=
val
;
else
if
(
!
strncmp
(
cur
,
"nodisc:"
,
7
))
opt_nodisc
=
val
;
opt_nodisc
[
no_of_boards
-
1
]
=
val
;
else
if
(
!
strncmp
(
cur
,
"noneg:"
,
6
))
opt_noneg
=
val
;
else
if
(
!
strncmp
(
cur
,
"disabled:"
,
5
))
{
opt_noneg
[
no_of_boards
-
1
]
=
val
;
else
if
(
!
strncmp
(
cur
,
"disabled:"
,
9
))
{
no_of_boards
=
-
1
;
return
1
;
}
#ifdef DEBUG
else
if
(
!
strncmp
(
cur
,
"debug:"
,
6
))
{
sim710_debug
=
val
;
else
{
printk
(
"sim710: unexpected boot option '%.*s'
\n
"
,
(
int
)(
pc
-
cur
+
1
),
cur
);
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
)
++
cur
;
/* Allow ',', ' ', or '+' seperators. Used to be ',' at boot and
* ' ' 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
;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,13)
#ifndef MODULE
__setup
(
"sim710="
,
param_setup
);
#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) {
}
/*
* 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)
*
...
...
@@ -431,6 +439,8 @@ ncr_halt (struct Scsi_Host *host)
struct
sim710_hostdata
*
hostdata
=
(
struct
sim710_hostdata
*
)
host
->
hostdata
[
0
];
int
stage
;
int
timeout
;
int
res
=
0
;
save_flags
(
flags
);
cli
();
...
...
@@ -438,8 +448,10 @@ ncr_halt (struct Scsi_Host *host)
Stage 1 : set ABORT
Stage 2 : eat all but abort 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
)
{
DEB
(
DEB_HALT
,
printk
(
"ncr_halt: writing ISTAT_ABRT
\n
"
));
NCR_write8
(
ISTAT_REG
,
ISTAT_ABRT
);
...
...
@@ -460,9 +472,8 @@ ncr_halt (struct Scsi_Host *host)
NCR_write8
(
ISTAT_REG
,
0
);
++
stage
;
}
else
{
printk
(
KERN_ALERT
"scsi%d : could not halt NCR chip
\n
"
,
host
->
host_no
);
disable
(
host
);
res
=
1
;
break
;
}
}
}
...
...
@@ -472,10 +483,18 @@ ncr_halt (struct Scsi_Host *host)
else
if
(
stage
==
3
)
break
;
}
udelay
(
10
);
}
hostdata
->
state
=
STATE_HALTED
;
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
sim710_soft_reset
(
struct
Scsi_Host
*
host
)
{
unsigned
long
flags
;
#ifdef CONFIG_TP34V_SCSI
struct
sim710_hostdata
*
hostdata
=
(
struct
sim710_hostdata
*
)
host
->
hostdata
[
0
];
#endif
save_flags
(
flags
);
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
* reinitialized to the power-on state.
...
...
@@ -528,6 +540,7 @@ sim710_soft_reset (struct Scsi_Host *host)
mdelay
(
1000
);
/* Let devices recover */
NCR_write32
(
SCRATCH_REG
,
0
);
NCR_write8
(
DCNTL_REG
,
DCNTL_10_COM
|
DCNTL_700_CF_3
);
NCR_write8
(
CTEST7_REG
,
CTEST7_10_CDIS
|
CTEST7_STD
);
NCR_write8
(
DMODE_REG
,
DMODE_10_BL_8
|
DMODE_10_FC2
);
...
...
@@ -544,11 +557,6 @@ sim710_soft_reset (struct Scsi_Host *host)
NCR_write8
(
SIEN_REG_700
,
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
);
}
...
...
@@ -577,6 +585,12 @@ sim710_driver_init (struct Scsi_Host *host)
isa_virt_to_bus
((
void
*
)
&
(
hostdata
->
reselected_identify
)));
patch_abs_32
(
hostdata
->
script
,
0
,
msgin_buf
,
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
->
negotiate
=
0xff
;
}
...
...
@@ -587,7 +601,7 @@ sim710_driver_init (struct Scsi_Host *host)
* spurious request from the target. Don't really expect target initiated
* SDTRs, because we always negotiate on the first command. Could still
* 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 o
n
the last byte of the
* SDTR.
* resa is the resume address if the message is in response to our outgoing
* SDTR. Only possible on initial identify.
...
...
@@ -739,6 +753,12 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd)
host
->
host_no
);
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
{
printk
(
"scsi%d: Unexpected phase change to %s on initial msgout
\n
"
,
host
->
host_no
,
sbcl_to_phase
(
sbcl
));
...
...
@@ -801,6 +821,14 @@ handle_phase_mismatch (struct Scsi_Host * host, Scsi_Cmnd * cmd)
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
{
printk
(
"scsi%d: Unexpected phase change to %s at index 0x%x
\n
"
,
host
->
host_no
,
sbcl_to_phase
(
sbcl
),
index
);
...
...
@@ -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
"
,
host
->
host_no
,
sbcl_to_phase
(
sbcl
),
sbcl
);
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_msg2
:
case
A_int_bad_msg3
:
...
...
@@ -918,21 +940,22 @@ do_sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
static
void
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
sim710_hostdata
*
hostdata
=
(
struct
sim710_hostdata
*
)
host
->
hostdata
[
0
];
Scsi_Cmnd
*
cmd
;
unsigned
char
istat
,
dstat
;
unsigned
char
sstat0
;
u32
dsps
,
resume_offset
=
0
;
u32
scratch
,
dsps
,
resume_offset
=
0
;
save_flags
(
flags
);
cli
();
sim710_intrs
++
;
while
((
istat
=
NCR_read8
(
ISTAT_REG
))
&
(
ISTAT_SIP
|
ISTAT_DIP
))
{
istat
=
NCR_read8
(
ISTAT_REG
);
if
(
!
(
istat
&
(
ISTAT_SIP
|
ISTAT_DIP
)))
return
;
else
{
sim710_intrs
++
;
dsps
=
NCR_read32
(
DSPS_REG
);
hostdata
->
state
=
STATE_HALTED
;
sstat0
=
dstat
=
0
;
scratch
=
NCR_read32
(
SCRATCH_REG
);
if
(
istat
&
ISTAT_SIP
)
{
sstat0
=
NCR_read8
(
SSTAT0_REG
);
}
...
...
@@ -945,7 +968,13 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
"dstat %02x, dsp [%04x], scratch %02x
\n
"
,
host
->
host_no
,
sim710_intrs
,
istat
,
sstat0
,
dstat
,
(
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
)
{
/* Reselected. Identify the target from LCRC_REG, and
* 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)
hostdata
->
target
[
cmd
->
target
].
cur_cmd
=
NULL
;
resume_offset
=
Ent_reselect
;
}
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
(
sstat0
&
(
SSTAT0_MA
|
SSTAT0_SGE
|
SSTAT0_UDC
|
SSTAT0_RST
|
SSTAT0_PAR
))
{
else
if
(
sstat0
&
(
SSTAT0_SGE
|
SSTAT0_UDC
|
SSTAT0_RST
|
SSTAT0_PAR
))
{
printk
(
"scsi%d: Serious error, sstat0 = %02x
\n
"
,
host
->
host_no
,
sstat0
);
sim710_errors
++
;
...
...
@@ -1019,6 +1043,10 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
sim710_errors
++
;
/* 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
)
{
/* This can be due to a quick reselect while doing a WAIT
* DISCONNECT.
...
...
@@ -1044,18 +1072,21 @@ sim710_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
#ifdef DEBUG_LIMIT_INTS
if
(
sim710_intrs
<
DEBUG_LIMIT_INTS
)
#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
)
run_process_issue_queue
(
hostdata
);
}
else
{
printk
(
"scsi%d: Failed to handle interrupt. Failing commands "
"and resetting SCSI bus and chip
\n
"
,
host
->
host_no
);
mdelay
(
4
000
);
/* Give chance to read screen!! */
mdelay
(
1
000
);
/* Give chance to read screen!! */
full_reset
(
host
);
}
restore_flags
(
flags
);
}
...
...
@@ -1101,9 +1132,9 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd)
memcpy
(
targdata
->
dsa_cdb
,
cmd
->
cmnd
,
MAX_CMND
);
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
(
opt_noneg
&
(
1
<<
cmd
->
target
))
{
if
(
opt_noneg
[
hostdata
->
chip
]
&
(
1
<<
cmd
->
target
))
{
hostdata
->
negotiate
^=
(
1
<<
cmd
->
target
);
targdata
->
dsa
[
DSA_MSGOUT
]
=
1
;
}
...
...
@@ -1143,16 +1174,10 @@ run_command (struct sim710_hostdata *hostdata, Scsi_Cmnd *cmd)
u32
cnt
=
cmd
->
use_sg
?
sgl
->
length
:
cmd
->
request_bufflen
;
if
(
datain
)
{
#ifdef CONFIG_TP34V_SCSI
cache_clear
(
virt_to_phys
(
vbuf
,
cnt
);
#endif
*
dip
++
=
cnt
;
*
dip
++
=
bbuf
;
}
if
(
dataout
)
{
#ifdef CONFIG_TP34V_SCSI
cache_push
(
virt_to_phys
(
vbuf
,
cnt
);
#endif
*
dop
++
=
cnt
;
*
dop
++
=
bbuf
;
}
...
...
@@ -1288,7 +1313,7 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *))
save_flags
(
flags
);
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
);
cmd
->
result
=
(
DID_BAD_TARGET
<<
16
);
done
(
cmd
);
...
...
@@ -1320,18 +1345,25 @@ sim710_queuecommand(Scsi_Cmnd * cmd, void (*done)(Scsi_Cmnd *))
}
int
__init
int
sim710_detect
(
Scsi_Host_Template
*
tpnt
)
{
unsigned
char
irq_vector
;
unsigned
char
scsi_id
;
unsigned
int
base_addr
;
struct
Scsi_Host
*
host
=
NULL
;
struct
sim710_hostdata
*
hostdata
;
unsigned
long
timeout
;
unsigned
long
irq_mask
;
int
requested_irq
;
int
probed_irq
;
u32
dsps
;
int
chips
=
0
;
int
limit
;
int
indx
;
int
revision
;
int
order
,
size
;
int
size
;
volatile
u8
tmp
;
struct
Scsi_Host
*
our_hosts
[
MAXBOARDS
+
1
];
#ifdef MODULE
if
(
sim710
)
...
...
@@ -1433,83 +1465,191 @@ sim710_detect(Scsi_Host_Template * tpnt)
}
#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
)
{
printk
(
"sim710: No NCR53C710 adapter found.
\n
"
);
return
0
;
printk
(
"sim710: No NCR53C710 adapter found.
\n
"
);
return
0
;
}
size
=
sizeof
(
struct
sim710_hostdata
);
order
=
0
;
while
(
size
>
(
PAGE_SIZE
<<
order
))
order
++
;
size
=
PAGE_SIZE
<<
order
;
hostdata_
order
=
0
;
while
(
size
>
(
PAGE_SIZE
<<
hostdata_
order
))
hostdata_
order
++
;
size
=
PAGE_SIZE
<<
hostdata_
order
;
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"
;
for
(
indx
=
0
;
indx
<
no_of_boards
;
indx
++
)
{
unsigned
long
page
=
__get_free_pages
(
GFP_ATOMIC
,
order
);
memset
(
our_hosts
,
0
,
sizeof
(
our_hosts
));
for
(
indx
=
0
;
indx
<
no_of_boards
;
indx
++
)
{
unsigned
long
page
=
__get_free_pages
(
GFP_ATOMIC
,
hostdata_order
);
if
(
page
==
0UL
)
{
printk
(
KERN_WARNING
"sim710: out of memory registering board %d.
\n
"
,
indx
);
break
;
printk
(
KERN_WARNING
"sim710: out of memory registering board %d.
\n
"
,
indx
);
break
;
}
host
=
scsi_register
(
tpnt
,
4
);
if
(
host
==
NULL
)
break
;
if
(
host
==
NULL
)
{
free_pages
(
host
->
hostdata
[
0
],
hostdata_order
);
break
;
}
our_hosts
[
chips
]
=
host
;
host
->
hostdata
[
0
]
=
page
;
hostdata
=
(
struct
sim710_hostdata
*
)
host
->
hostdata
[
0
];
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
;
base_addr
=
bases
[
indx
];
irq_vector
=
irq_vectors
[
indx
];
printk
(
"s
im710
: Configuring Sim710 (SCSI-ID %d) at %x, IRQ %d
\n
"
,
scsi_id
,
base_addr
,
irq_vector
);
requested_irq
=
irq_vectors
[
indx
];
printk
(
"s
csi%d
: Configuring Sim710 (SCSI-ID %d) at %x, IRQ %d
\n
"
,
host
->
host_no
,
scsi_id
,
base_addr
,
requested_irq
);
DEB
(
DEB_ANY
,
printk
(
"sim710: hostdata = %p (%d bytes), dsa0 = %p
\n
"
,
hostdata
,
sizeof
(
struct
sim710_hostdata
),
hostdata
->
target
[
0
].
dsa
));
hostdata
->
chip
=
indx
;
host
->
irq
=
irq_vector
;
host
->
irq
=
requested_irq
;
host
->
this_id
=
scsi_id
;
host
->
unique_id
=
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
;
printk
(
"scsi%d: Revision 0x%x
\n
"
,
host
->
host_no
,
revision
);
sim710_soft_reset
(
host
);
sim710_driver_init
(
host
);
#ifdef CONFIG_TP34V_SCSI
if
(
request_irq
(
irq_vector
,
do_sim710_intr_handle
,
0
,
"sim710"
,
host
))
#else
if
(
request_irq
(
irq_vector
,
do_sim710_intr_handle
,
SA_INTERRUPT
,
"sim710"
,
host
))
#endif
request_region
((
u32
)
host
->
base
,
64
,
"sim710"
);
/* Now run test1 */
hostdata
->
test1_src
=
0x53c710aa
;
hostdata
->
test1_dst
=
0x76543210
;
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
"
,
host
->
host_no
,
host
->
irq
);
host
->
host_no
,
host
->
irq
);
ncr_halt
(
host
);
free_pages
(
host
->
hostdata
[
0
],
hostdata_order
);
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
;
}
...
...
@@ -1558,11 +1698,34 @@ full_reset(struct Scsi_Host * host)
int
target
;
Scsi_Cmnd
*
cmd
;
ncr_halt
(
host
);
printk
(
"scsi%d: dsp = %08x (script[0x%04x]), scratch = %08x
\n
"
,
host
->
host_no
,
NCR_read32
(
DSP_REG
),
((
u32
)
isa_bus_to_virt
(
NCR_read32
(
DSP_REG
))
-
(
u32
)
hostdata
->
script
)
/
4
,
NCR_read32
(
SCRATCH_REG
));
u32
istat
,
dstat
=
0
,
sstat0
=
0
,
sstat1
=
0
,
dsp
,
dsps
,
scratch
;
unsigned
long
flags
;
save_flags
(
flags
);
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
++
)
{
if
((
cmd
=
hostdata
->
target
[
target
].
cur_cmd
))
{
...
...
@@ -1604,10 +1767,10 @@ sim710_host_reset(Scsi_Cmnd * SCpnt)
int
sim710_release
(
struct
Scsi_Host
*
host
)
{
ncr_halt
(
host
);
free_pages
(
host
->
hostdata
[
0
],
hostdata_order
);
free_irq
(
host
->
irq
,
host
);
#ifdef IO_MAPPED
release_region
((
u32
)
host
->
base
,
64
);
#endif
return
1
;
}
...
...
drivers/scsi/sim710.h
View file @
798c67c3
...
...
@@ -23,8 +23,8 @@ int sim710_release(struct Scsi_Host *);
#include <scsi/scsicam.h>
#define SIM710_SCSI { proc_name: "sim710", \
name: "
Simple 53c710",
\
#define SIM710_SCSI { proc_name: "sim710",
\
name: "
53c710",
\
detect: sim710_detect, \
release: sim710_release, \
queuecommand: sim710_queuecommand, \
...
...
@@ -413,7 +413,7 @@ int sim710_release(struct Scsi_Host *);
#define CTEST3_800_FM 0x02
/* Fetch mode pin */
/* bit 0 is reserved on 800 series chips */
#define CTEST4_REG_
4
00 (0x18^bE)
/* Chip test 4 rw */
#define CTEST4_REG_
7
00 (0x18^bE)
/* Chip test 4 rw */
#define CTEST4_REG_800 (0x21^bE)
/* Chip test 4 rw */
/* 0x80 is reserved on 700 series chips */
#define CTEST4_800_BDIS 0x80
/* Burst mode disable */
...
...
@@ -791,6 +791,20 @@ int sim710_release(struct Scsi_Host *);
#define ISTAT_REG ISTAT_REG_700
#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
#define NCR_read8(address) \
...
...
drivers/scsi/sim710.scr
View file @
798c67c3
...
...
@@ -15,15 +15,12 @@ ABSOLUTE dsa_size = 2088
ABSOLUTE reselected_identify = 0
ABSOLUTE msgin_buf = 0
ABSOLUTE msg_reject = 0
ABSOLUTE test1_src = 0
ABSOLUTE test1_dst = 0
/* 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_msg2 = 0xab930007
ABSOLUTE int_bad_msg3 = 0xab930008
...
...
@@ -47,9 +44,9 @@ ABSOLUTE int_disc1 = 0xab930019
ABSOLUTE int_disc2 = 0xab93001a
ABSOLUTE int_disc3 = 0xab93001b
ABSOLUTE int_not_rej = 0xab93001c
ABSOLUTE int_test1 = 0xab93001d
/* Bit field settings used to record status in SCRATCH */
/* Bit field settings used to record status in SCRATCH0 */
ABSOLUTE had_select = 0x01
ABSOLUTE had_msgout = 0x02
...
...
@@ -60,6 +57,9 @@ ABSOLUTE had_status = 0x20
ABSOLUTE had_msgin = 0x40
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
* Programmer's Guide (Preliminary).
...
...
@@ -68,7 +68,6 @@ ABSOLUTE had_extmsg = 0x80
ENTRY do_select
do_select:
CLEAR TARGET
MOVE SCRATCH0 & 0 TO SCRATCH0
; Enable selection timer
MOVE CTEST7 & 0xef TO CTEST7
SELECT ATN FROM dsa_select, reselect
...
...
@@ -401,17 +400,23 @@ ext_msg1:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg1a, IF 0x03
INT int_bad_extmsg1a
ext_msg1a:
JUMP reject_msg1, IF NOT 0x03 ; Only handle SDTR
CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg1b, IF 0x01 ; Must be SDTR
INT int_bad_extmsg1b
ext_msg1b:
JUMP reject_msg1, IF NOT 0x01 ; Only handle SDTR
CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN
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:
CLEAR ACK
ENTRY wait_disc1
...
...
@@ -446,17 +451,23 @@ ext_msg2:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg2a, IF 0x03
INT int_bad_extmsg2a
ext_msg2a:
JUMP reject_msg2, IF NOT 0x03 ; Only handle SDTR
CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg2b, IF 0x01 ; Must be SDTR
INT int_bad_extmsg2b
ext_msg2b:
JUMP reject_msg2, IF NOT 0x01 ; Only handle SDTR
CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN
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:
CLEAR ACK
ENTRY wait_disc2
...
...
@@ -491,17 +502,23 @@ ext_msg3:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
CLEAR ACK
MOVE 1, msgin_buf + 1, WHEN MSG_IN
JUMP ext_msg3a, IF 0x03
INT int_bad_extmsg3a
ext_msg3a:
JUMP reject_msg3, IF NOT 0x03 ; Only handle SDTR
CLEAR ACK
MOVE 1, msgin_buf + 2, WHEN MSG_IN
JUMP ext_msg3b, IF 0x01 ; Must be SDTR
INT int_bad_extmsg3b
ext_msg3b:
JUMP reject_msg3, IF NOT 0x01 ; Only handle SDTR
CLEAR ACK
MOVE 2, msgin_buf + 3, WHEN MSG_IN
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:
CLEAR ACK
ENTRY wait_disc3
...
...
@@ -552,3 +569,8 @@ patch_new_dsa:
selected:
INT int_selected
ENTRY test1
test1:
MOVE MEMORY 4, test1_src, test1_dst
INT int_test1
drivers/scsi/sim710_d.h_shipped
View file @
798c67c3
...
...
@@ -18,15 +18,12 @@ ABSOLUTE dsa_size = 2088
ABSOLUTE reselected_identify = 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_msg2 = 0xab930007
ABSOLUTE int_bad_msg3 = 0xab930008
...
...
@@ -50,7 +47,7 @@ ABSOLUTE int_disc1 = 0xab930019
ABSOLUTE int_disc2 = 0xab93001a
ABSOLUTE int_disc3 = 0xab93001b
ABSOLUTE int_not_rej = 0xab93001c
ABSOLUTE int_test1 = 0xab93001d
...
...
@@ -65,6 +62,9 @@ ABSOLUTE had_extmsg = 0x80
ABSOLUTE did_reject = 0x01
...
...
@@ -73,1642 +73,1710 @@ do_select:
CLEAR TARGET
at 0x00000000 : */ 0x60000200,0x00000000,
/*
MOVE SCRATCH0 & 0 TO SCRATCH0
at 0x00000002 : */ 0x7c340000,0x00000000,
/*
; Enable selection timer
MOVE CTEST7 & 0xef TO CTEST7
at 0x0000000
4
: */ 0x7c1bef00,0x00000000,
at 0x0000000
2
: */ 0x7c1bef00,0x00000000,
/*
SELECT ATN FROM dsa_select, reselect
at 0x0000000
6 : */ 0x43000000,0x00000c48
,
at 0x0000000
4 : */ 0x43000000,0x00000cd0
,
/*
JUMP get_status, WHEN STATUS
at 0x0000000
8 : */ 0x830b0000,0x000000a0
,
at 0x0000000
6 : */ 0x830b0000,0x00000098
,
/*
; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7
at 0x0000000
a
: */ 0x7a1b1000,0x00000000,
at 0x0000000
8
: */ 0x7a1b1000,0x00000000,
/*
MOVE SCRATCH0 | had_select TO SCRATCH0
at 0x0000000
c
: */ 0x7a340100,0x00000000,
at 0x0000000
a
: */ 0x7a340100,0x00000000,
/*
INT int_sel_no_ident, IF NOT MSG_OUT
at 0x0000000
e
: */ 0x9e020000,0xab930013,
at 0x0000000
c
: */ 0x9e020000,0xab930013,
/*
MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x000000
10
: */ 0x7a340200,0x00000000,
at 0x000000
0e
: */ 0x7a340200,0x00000000,
/*
MOVE FROM dsa_msgout, when MSG_OUT
at 0x0000001
2
: */ 0x1e000000,0x00000008,
at 0x0000001
0
: */ 0x1e000000,0x00000008,
/*
ENTRY done_ident
done_ident:
JUMP get_status, IF STATUS
at 0x0000001
4 : */ 0x830a0000,0x000000a0
,
at 0x0000001
2 : */ 0x830a0000,0x00000098
,
/*
redo_msgin1:
JUMP get_msgin1, WHEN MSG_IN
at 0x0000001
6 : */ 0x870b0000,0x00000920
,
at 0x0000001
4 : */ 0x870b0000,0x00000918
,
/*
INT int_sel_not_cmd, IF NOT CMD
at 0x0000001
8
: */ 0x9a020000,0xab930014,
at 0x0000001
6
: */ 0x9a020000,0xab930014,
/*
ENTRY resume_cmd
resume_cmd:
MOVE SCRATCH0 | had_cmdout TO SCRATCH0
at 0x0000001
a
: */ 0x7a340400,0x00000000,
at 0x0000001
8
: */ 0x7a340400,0x00000000,
/*
MOVE FROM dsa_cmnd, WHEN CMD
at 0x0000001
c
: */ 0x1a000000,0x00000010,
at 0x0000001
a
: */ 0x1a000000,0x00000010,
/*
ENTRY resume_pmm
resume_pmm:
redo_msgin2:
JUMP get_msgin2, WHEN MSG_IN
at 0x0000001
e : */ 0x870b0000,0x00000a20
,
at 0x0000001
c : */ 0x870b0000,0x00000a48
,
/*
JUMP get_status, IF STATUS
at 0x000000
20 : */ 0x830a0000,0x000000a0
,
at 0x000000
1e : */ 0x830a0000,0x00000098
,
/*
JUMP input_data, IF DATA_IN
at 0x0000002
2 : */ 0x810a0000,0x000000e0
,
at 0x0000002
0 : */ 0x810a0000,0x000000d8
,
/*
JUMP output_data, IF DATA_OUT
at 0x0000002
4 : */ 0x800a0000,0x000004f8
,
at 0x0000002
2 : */ 0x800a0000,0x000004f0
,
/*
INT int_cmd_bad_phase
at 0x0000002
6
: */ 0x98080000,0xab930009,
at 0x0000002
4
: */ 0x98080000,0xab930009,
/*
get_status:
; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7
at 0x0000002
8
: */ 0x7a1b1000,0x00000000,
at 0x0000002
6
: */ 0x7a1b1000,0x00000000,
/*
MOVE FROM dsa_status, WHEN STATUS
at 0x0000002
a
: */ 0x1b000000,0x00000018,
at 0x0000002
8
: */ 0x1b000000,0x00000018,
/*
INT int_status_not_msgin, WHEN NOT MSG_IN
at 0x0000002
c
: */ 0x9f030000,0xab930015,
at 0x0000002
a
: */ 0x9f030000,0xab930015,
/*
MOVE FROM dsa_msgin, WHEN MSG_IN
at 0x0000002
e
: */ 0x1f000000,0x00000020,
at 0x0000002
c
: */ 0x1f000000,0x00000020,
/*
INT int_not_cmd_complete, IF NOT 0x00
at 0x000000
30
: */ 0x98040000,0xab930012,
at 0x000000
2e
: */ 0x98040000,0xab930012,
/*
CLEAR ACK
at 0x0000003
2
: */ 0x60000040,0x00000000,
at 0x0000003
0
: */ 0x60000040,0x00000000,
/*
ENTRY wait_disc_complete
wait_disc_complete:
WAIT DISCONNECT
at 0x0000003
4
: */ 0x48000000,0x00000000,
at 0x0000003
2
: */ 0x48000000,0x00000000,
/*
INT int_cmd_complete
at 0x0000003
6
: */ 0x98080000,0xab93000a,
at 0x0000003
4
: */ 0x98080000,0xab93000a,
/*
input_data:
MOVE SCRATCH0 | had_datain TO SCRATCH0
at 0x0000003
8
: */ 0x7a340800,0x00000000,
at 0x0000003
6
: */ 0x7a340800,0x00000000,
/*
ENTRY patch_input_data
patch_input_data:
JUMP 0
at 0x0000003
a
: */ 0x80080000,0x00000000,
at 0x0000003
8
: */ 0x80080000,0x00000000,
/*
MOVE FROM dsa_datain+0x0000, WHEN DATA_IN
at 0x0000003
c
: */ 0x19000000,0x00000028,
at 0x0000003
a
: */ 0x19000000,0x00000028,
/*
MOVE FROM dsa_datain+0x0008, WHEN DATA_IN
at 0x0000003
e
: */ 0x19000000,0x00000030,
at 0x0000003
c
: */ 0x19000000,0x00000030,
/*
MOVE FROM dsa_datain+0x0010, WHEN DATA_IN
at 0x000000
40
: */ 0x19000000,0x00000038,
at 0x000000
3e
: */ 0x19000000,0x00000038,
/*
MOVE FROM dsa_datain+0x0018, WHEN DATA_IN
at 0x0000004
2
: */ 0x19000000,0x00000040,
at 0x0000004
0
: */ 0x19000000,0x00000040,
/*
MOVE FROM dsa_datain+0x0020, WHEN DATA_IN
at 0x0000004
4
: */ 0x19000000,0x00000048,
at 0x0000004
2
: */ 0x19000000,0x00000048,
/*
MOVE FROM dsa_datain+0x0028, WHEN DATA_IN
at 0x0000004
6
: */ 0x19000000,0x00000050,
at 0x0000004
4
: */ 0x19000000,0x00000050,
/*
MOVE FROM dsa_datain+0x0030, WHEN DATA_IN
at 0x0000004
8
: */ 0x19000000,0x00000058,
at 0x0000004
6
: */ 0x19000000,0x00000058,
/*
MOVE FROM dsa_datain+0x0038, WHEN DATA_IN
at 0x0000004
a
: */ 0x19000000,0x00000060,
at 0x0000004
8
: */ 0x19000000,0x00000060,
/*
MOVE FROM dsa_datain+0x0040, WHEN DATA_IN
at 0x0000004
c
: */ 0x19000000,0x00000068,
at 0x0000004
a
: */ 0x19000000,0x00000068,
/*
MOVE FROM dsa_datain+0x0048, WHEN DATA_IN
at 0x0000004
e
: */ 0x19000000,0x00000070,
at 0x0000004
c
: */ 0x19000000,0x00000070,
/*
MOVE FROM dsa_datain+0x0050, WHEN DATA_IN
at 0x000000
50
: */ 0x19000000,0x00000078,
at 0x000000
4e
: */ 0x19000000,0x00000078,
/*
MOVE FROM dsa_datain+0x0058, WHEN DATA_IN
at 0x0000005
2
: */ 0x19000000,0x00000080,
at 0x0000005
0
: */ 0x19000000,0x00000080,
/*
MOVE FROM dsa_datain+0x0060, WHEN DATA_IN
at 0x0000005
4
: */ 0x19000000,0x00000088,
at 0x0000005
2
: */ 0x19000000,0x00000088,
/*
MOVE FROM dsa_datain+0x0068, WHEN DATA_IN
at 0x0000005
6
: */ 0x19000000,0x00000090,
at 0x0000005
4
: */ 0x19000000,0x00000090,
/*
MOVE FROM dsa_datain+0x0070, WHEN DATA_IN
at 0x0000005
8
: */ 0x19000000,0x00000098,
at 0x0000005
6
: */ 0x19000000,0x00000098,
/*
MOVE FROM dsa_datain+0x0078, WHEN DATA_IN
at 0x0000005
a
: */ 0x19000000,0x000000a0,
at 0x0000005
8
: */ 0x19000000,0x000000a0,
/*
MOVE FROM dsa_datain+0x0080, WHEN DATA_IN
at 0x0000005
c
: */ 0x19000000,0x000000a8,
at 0x0000005
a
: */ 0x19000000,0x000000a8,
/*
MOVE FROM dsa_datain+0x0088, WHEN DATA_IN
at 0x0000005
e
: */ 0x19000000,0x000000b0,
at 0x0000005
c
: */ 0x19000000,0x000000b0,
/*
MOVE FROM dsa_datain+0x0090, WHEN DATA_IN
at 0x000000
60
: */ 0x19000000,0x000000b8,
at 0x000000
5e
: */ 0x19000000,0x000000b8,
/*
MOVE FROM dsa_datain+0x0098, WHEN DATA_IN
at 0x0000006
2
: */ 0x19000000,0x000000c0,
at 0x0000006
0
: */ 0x19000000,0x000000c0,
/*
MOVE FROM dsa_datain+0x00a0, WHEN DATA_IN
at 0x0000006
4
: */ 0x19000000,0x000000c8,
at 0x0000006
2
: */ 0x19000000,0x000000c8,
/*
MOVE FROM dsa_datain+0x00a8, WHEN DATA_IN
at 0x0000006
6
: */ 0x19000000,0x000000d0,
at 0x0000006
4
: */ 0x19000000,0x000000d0,
/*
MOVE FROM dsa_datain+0x00b0, WHEN DATA_IN
at 0x0000006
8
: */ 0x19000000,0x000000d8,
at 0x0000006
6
: */ 0x19000000,0x000000d8,
/*
MOVE FROM dsa_datain+0x00b8, WHEN DATA_IN
at 0x0000006
a
: */ 0x19000000,0x000000e0,
at 0x0000006
8
: */ 0x19000000,0x000000e0,
/*
MOVE FROM dsa_datain+0x00c0, WHEN DATA_IN
at 0x0000006
c
: */ 0x19000000,0x000000e8,
at 0x0000006
a
: */ 0x19000000,0x000000e8,
/*
MOVE FROM dsa_datain+0x00c8, WHEN DATA_IN
at 0x0000006
e
: */ 0x19000000,0x000000f0,
at 0x0000006
c
: */ 0x19000000,0x000000f0,
/*
MOVE FROM dsa_datain+0x00d0, WHEN DATA_IN
at 0x000000
70
: */ 0x19000000,0x000000f8,
at 0x000000
6e
: */ 0x19000000,0x000000f8,
/*
MOVE FROM dsa_datain+0x00d8, WHEN DATA_IN
at 0x0000007
2
: */ 0x19000000,0x00000100,
at 0x0000007
0
: */ 0x19000000,0x00000100,
/*
MOVE FROM dsa_datain+0x00e0, WHEN DATA_IN
at 0x0000007
4
: */ 0x19000000,0x00000108,
at 0x0000007
2
: */ 0x19000000,0x00000108,
/*
MOVE FROM dsa_datain+0x00e8, WHEN DATA_IN
at 0x0000007
6
: */ 0x19000000,0x00000110,
at 0x0000007
4
: */ 0x19000000,0x00000110,
/*
MOVE FROM dsa_datain+0x00f0, WHEN DATA_IN
at 0x0000007
8
: */ 0x19000000,0x00000118,
at 0x0000007
6
: */ 0x19000000,0x00000118,
/*
MOVE FROM dsa_datain+0x00f8, WHEN DATA_IN
at 0x0000007
a
: */ 0x19000000,0x00000120,
at 0x0000007
8
: */ 0x19000000,0x00000120,
/*
MOVE FROM dsa_datain+0x0100, WHEN DATA_IN
at 0x0000007
c
: */ 0x19000000,0x00000128,
at 0x0000007
a
: */ 0x19000000,0x00000128,
/*
MOVE FROM dsa_datain+0x0108, WHEN DATA_IN
at 0x0000007
e
: */ 0x19000000,0x00000130,
at 0x0000007
c
: */ 0x19000000,0x00000130,
/*
MOVE FROM dsa_datain+0x0110, WHEN DATA_IN
at 0x000000
80
: */ 0x19000000,0x00000138,
at 0x000000
7e
: */ 0x19000000,0x00000138,
/*
MOVE FROM dsa_datain+0x0118, WHEN DATA_IN
at 0x0000008
2
: */ 0x19000000,0x00000140,
at 0x0000008
0
: */ 0x19000000,0x00000140,
/*
MOVE FROM dsa_datain+0x0120, WHEN DATA_IN
at 0x0000008
4
: */ 0x19000000,0x00000148,
at 0x0000008
2
: */ 0x19000000,0x00000148,
/*
MOVE FROM dsa_datain+0x0128, WHEN DATA_IN
at 0x0000008
6
: */ 0x19000000,0x00000150,
at 0x0000008
4
: */ 0x19000000,0x00000150,
/*
MOVE FROM dsa_datain+0x0130, WHEN DATA_IN
at 0x0000008
8
: */ 0x19000000,0x00000158,
at 0x0000008
6
: */ 0x19000000,0x00000158,
/*
MOVE FROM dsa_datain+0x0138, WHEN DATA_IN
at 0x0000008
a
: */ 0x19000000,0x00000160,
at 0x0000008
8
: */ 0x19000000,0x00000160,
/*
MOVE FROM dsa_datain+0x0140, WHEN DATA_IN
at 0x0000008
c
: */ 0x19000000,0x00000168,
at 0x0000008
a
: */ 0x19000000,0x00000168,
/*
MOVE FROM dsa_datain+0x0148, WHEN DATA_IN
at 0x0000008
e
: */ 0x19000000,0x00000170,
at 0x0000008
c
: */ 0x19000000,0x00000170,
/*
MOVE FROM dsa_datain+0x0150, WHEN DATA_IN
at 0x000000
90
: */ 0x19000000,0x00000178,
at 0x000000
8e
: */ 0x19000000,0x00000178,
/*
MOVE FROM dsa_datain+0x0158, WHEN DATA_IN
at 0x0000009
2
: */ 0x19000000,0x00000180,
at 0x0000009
0
: */ 0x19000000,0x00000180,
/*
MOVE FROM dsa_datain+0x0160, WHEN DATA_IN
at 0x0000009
4
: */ 0x19000000,0x00000188,
at 0x0000009
2
: */ 0x19000000,0x00000188,
/*
MOVE FROM dsa_datain+0x0168, WHEN DATA_IN
at 0x0000009
6
: */ 0x19000000,0x00000190,
at 0x0000009
4
: */ 0x19000000,0x00000190,
/*
MOVE FROM dsa_datain+0x0170, WHEN DATA_IN
at 0x0000009
8
: */ 0x19000000,0x00000198,
at 0x0000009
6
: */ 0x19000000,0x00000198,
/*
MOVE FROM dsa_datain+0x0178, WHEN DATA_IN
at 0x0000009
a
: */ 0x19000000,0x000001a0,
at 0x0000009
8
: */ 0x19000000,0x000001a0,
/*
MOVE FROM dsa_datain+0x0180, WHEN DATA_IN
at 0x0000009
c
: */ 0x19000000,0x000001a8,
at 0x0000009
a
: */ 0x19000000,0x000001a8,
/*
MOVE FROM dsa_datain+0x0188, WHEN DATA_IN
at 0x0000009
e
: */ 0x19000000,0x000001b0,
at 0x0000009
c
: */ 0x19000000,0x000001b0,
/*
MOVE FROM dsa_datain+0x0190, WHEN DATA_IN
at 0x000000
a0
: */ 0x19000000,0x000001b8,
at 0x000000
9e
: */ 0x19000000,0x000001b8,
/*
MOVE FROM dsa_datain+0x0198, WHEN DATA_IN
at 0x000000a
2
: */ 0x19000000,0x000001c0,
at 0x000000a
0
: */ 0x19000000,0x000001c0,
/*
MOVE FROM dsa_datain+0x01a0, WHEN DATA_IN
at 0x000000a
4
: */ 0x19000000,0x000001c8,
at 0x000000a
2
: */ 0x19000000,0x000001c8,
/*
MOVE FROM dsa_datain+0x01a8, WHEN DATA_IN
at 0x000000a
6
: */ 0x19000000,0x000001d0,
at 0x000000a
4
: */ 0x19000000,0x000001d0,
/*
MOVE FROM dsa_datain+0x01b0, WHEN DATA_IN
at 0x000000a
8
: */ 0x19000000,0x000001d8,
at 0x000000a
6
: */ 0x19000000,0x000001d8,
/*
MOVE FROM dsa_datain+0x01b8, WHEN DATA_IN
at 0x000000a
a
: */ 0x19000000,0x000001e0,
at 0x000000a
8
: */ 0x19000000,0x000001e0,
/*
MOVE FROM dsa_datain+0x01c0, WHEN DATA_IN
at 0x000000a
c
: */ 0x19000000,0x000001e8,
at 0x000000a
a
: */ 0x19000000,0x000001e8,
/*
MOVE FROM dsa_datain+0x01c8, WHEN DATA_IN
at 0x000000a
e
: */ 0x19000000,0x000001f0,
at 0x000000a
c
: */ 0x19000000,0x000001f0,
/*
MOVE FROM dsa_datain+0x01d0, WHEN DATA_IN
at 0x000000
b0
: */ 0x19000000,0x000001f8,
at 0x000000
ae
: */ 0x19000000,0x000001f8,
/*
MOVE FROM dsa_datain+0x01d8, WHEN DATA_IN
at 0x000000b
2
: */ 0x19000000,0x00000200,
at 0x000000b
0
: */ 0x19000000,0x00000200,
/*
MOVE FROM dsa_datain+0x01e0, WHEN DATA_IN
at 0x000000b
4
: */ 0x19000000,0x00000208,
at 0x000000b
2
: */ 0x19000000,0x00000208,
/*
MOVE FROM dsa_datain+0x01e8, WHEN DATA_IN
at 0x000000b
6
: */ 0x19000000,0x00000210,
at 0x000000b
4
: */ 0x19000000,0x00000210,
/*
MOVE FROM dsa_datain+0x01f0, WHEN DATA_IN
at 0x000000b
8
: */ 0x19000000,0x00000218,
at 0x000000b
6
: */ 0x19000000,0x00000218,
/*
MOVE FROM dsa_datain+0x01f8, WHEN DATA_IN
at 0x000000b
a
: */ 0x19000000,0x00000220,
at 0x000000b
8
: */ 0x19000000,0x00000220,
/*
MOVE FROM dsa_datain+0x0200, WHEN DATA_IN
at 0x000000b
c
: */ 0x19000000,0x00000228,
at 0x000000b
a
: */ 0x19000000,0x00000228,
/*
MOVE FROM dsa_datain+0x0208, WHEN DATA_IN
at 0x000000b
e
: */ 0x19000000,0x00000230,
at 0x000000b
c
: */ 0x19000000,0x00000230,
/*
MOVE FROM dsa_datain+0x0210, WHEN DATA_IN
at 0x000000
c0
: */ 0x19000000,0x00000238,
at 0x000000
be
: */ 0x19000000,0x00000238,
/*
MOVE FROM dsa_datain+0x0218, WHEN DATA_IN
at 0x000000c
2
: */ 0x19000000,0x00000240,
at 0x000000c
0
: */ 0x19000000,0x00000240,
/*
MOVE FROM dsa_datain+0x0220, WHEN DATA_IN
at 0x000000c
4
: */ 0x19000000,0x00000248,
at 0x000000c
2
: */ 0x19000000,0x00000248,
/*
MOVE FROM dsa_datain+0x0228, WHEN DATA_IN
at 0x000000c
6
: */ 0x19000000,0x00000250,
at 0x000000c
4
: */ 0x19000000,0x00000250,
/*
MOVE FROM dsa_datain+0x0230, WHEN DATA_IN
at 0x000000c
8
: */ 0x19000000,0x00000258,
at 0x000000c
6
: */ 0x19000000,0x00000258,
/*
MOVE FROM dsa_datain+0x0238, WHEN DATA_IN
at 0x000000c
a
: */ 0x19000000,0x00000260,
at 0x000000c
8
: */ 0x19000000,0x00000260,
/*
MOVE FROM dsa_datain+0x0240, WHEN DATA_IN
at 0x000000c
c
: */ 0x19000000,0x00000268,
at 0x000000c
a
: */ 0x19000000,0x00000268,
/*
MOVE FROM dsa_datain+0x0248, WHEN DATA_IN
at 0x000000c
e
: */ 0x19000000,0x00000270,
at 0x000000c
c
: */ 0x19000000,0x00000270,
/*
MOVE FROM dsa_datain+0x0250, WHEN DATA_IN
at 0x000000
d0
: */ 0x19000000,0x00000278,
at 0x000000
ce
: */ 0x19000000,0x00000278,
/*
MOVE FROM dsa_datain+0x0258, WHEN DATA_IN
at 0x000000d
2
: */ 0x19000000,0x00000280,
at 0x000000d
0
: */ 0x19000000,0x00000280,
/*
MOVE FROM dsa_datain+0x0260, WHEN DATA_IN
at 0x000000d
4
: */ 0x19000000,0x00000288,
at 0x000000d
2
: */ 0x19000000,0x00000288,
/*
MOVE FROM dsa_datain+0x0268, WHEN DATA_IN
at 0x000000d
6
: */ 0x19000000,0x00000290,
at 0x000000d
4
: */ 0x19000000,0x00000290,
/*
MOVE FROM dsa_datain+0x0270, WHEN DATA_IN
at 0x000000d
8
: */ 0x19000000,0x00000298,
at 0x000000d
6
: */ 0x19000000,0x00000298,
/*
MOVE FROM dsa_datain+0x0278, WHEN DATA_IN
at 0x000000d
a
: */ 0x19000000,0x000002a0,
at 0x000000d
8
: */ 0x19000000,0x000002a0,
/*
MOVE FROM dsa_datain+0x0280, WHEN DATA_IN
at 0x000000d
c
: */ 0x19000000,0x000002a8,
at 0x000000d
a
: */ 0x19000000,0x000002a8,
/*
MOVE FROM dsa_datain+0x0288, WHEN DATA_IN
at 0x000000d
e
: */ 0x19000000,0x000002b0,
at 0x000000d
c
: */ 0x19000000,0x000002b0,
/*
MOVE FROM dsa_datain+0x0290, WHEN DATA_IN
at 0x000000
e0
: */ 0x19000000,0x000002b8,
at 0x000000
de
: */ 0x19000000,0x000002b8,
/*
MOVE FROM dsa_datain+0x0298, WHEN DATA_IN
at 0x000000e
2
: */ 0x19000000,0x000002c0,
at 0x000000e
0
: */ 0x19000000,0x000002c0,
/*
MOVE FROM dsa_datain+0x02a0, WHEN DATA_IN
at 0x000000e
4
: */ 0x19000000,0x000002c8,
at 0x000000e
2
: */ 0x19000000,0x000002c8,
/*
MOVE FROM dsa_datain+0x02a8, WHEN DATA_IN
at 0x000000e
6
: */ 0x19000000,0x000002d0,
at 0x000000e
4
: */ 0x19000000,0x000002d0,
/*
MOVE FROM dsa_datain+0x02b0, WHEN DATA_IN
at 0x000000e
8
: */ 0x19000000,0x000002d8,
at 0x000000e
6
: */ 0x19000000,0x000002d8,
/*
MOVE FROM dsa_datain+0x02b8, WHEN DATA_IN
at 0x000000e
a
: */ 0x19000000,0x000002e0,
at 0x000000e
8
: */ 0x19000000,0x000002e0,
/*
MOVE FROM dsa_datain+0x02c0, WHEN DATA_IN
at 0x000000e
c
: */ 0x19000000,0x000002e8,
at 0x000000e
a
: */ 0x19000000,0x000002e8,
/*
MOVE FROM dsa_datain+0x02c8, WHEN DATA_IN
at 0x000000e
e
: */ 0x19000000,0x000002f0,
at 0x000000e
c
: */ 0x19000000,0x000002f0,
/*
MOVE FROM dsa_datain+0x02d0, WHEN DATA_IN
at 0x000000
f0
: */ 0x19000000,0x000002f8,
at 0x000000
ee
: */ 0x19000000,0x000002f8,
/*
MOVE FROM dsa_datain+0x02d8, WHEN DATA_IN
at 0x000000f
2
: */ 0x19000000,0x00000300,
at 0x000000f
0
: */ 0x19000000,0x00000300,
/*
MOVE FROM dsa_datain+0x02e0, WHEN DATA_IN
at 0x000000f
4
: */ 0x19000000,0x00000308,
at 0x000000f
2
: */ 0x19000000,0x00000308,
/*
MOVE FROM dsa_datain+0x02e8, WHEN DATA_IN
at 0x000000f
6
: */ 0x19000000,0x00000310,
at 0x000000f
4
: */ 0x19000000,0x00000310,
/*
MOVE FROM dsa_datain+0x02f0, WHEN DATA_IN
at 0x000000f
8
: */ 0x19000000,0x00000318,
at 0x000000f
6
: */ 0x19000000,0x00000318,
/*
MOVE FROM dsa_datain+0x02f8, WHEN DATA_IN
at 0x000000f
a
: */ 0x19000000,0x00000320,
at 0x000000f
8
: */ 0x19000000,0x00000320,
/*
MOVE FROM dsa_datain+0x0300, WHEN DATA_IN
at 0x000000f
c
: */ 0x19000000,0x00000328,
at 0x000000f
a
: */ 0x19000000,0x00000328,
/*
MOVE FROM dsa_datain+0x0308, WHEN DATA_IN
at 0x000000f
e
: */ 0x19000000,0x00000330,
at 0x000000f
c
: */ 0x19000000,0x00000330,
/*
MOVE FROM dsa_datain+0x0310, WHEN DATA_IN
at 0x00000
100
: */ 0x19000000,0x00000338,
at 0x00000
0fe
: */ 0x19000000,0x00000338,
/*
MOVE FROM dsa_datain+0x0318, WHEN DATA_IN
at 0x0000010
2
: */ 0x19000000,0x00000340,
at 0x0000010
0
: */ 0x19000000,0x00000340,
/*
MOVE FROM dsa_datain+0x0320, WHEN DATA_IN
at 0x0000010
4
: */ 0x19000000,0x00000348,
at 0x0000010
2
: */ 0x19000000,0x00000348,
/*
MOVE FROM dsa_datain+0x0328, WHEN DATA_IN
at 0x0000010
6
: */ 0x19000000,0x00000350,
at 0x0000010
4
: */ 0x19000000,0x00000350,
/*
MOVE FROM dsa_datain+0x0330, WHEN DATA_IN
at 0x0000010
8
: */ 0x19000000,0x00000358,
at 0x0000010
6
: */ 0x19000000,0x00000358,
/*
MOVE FROM dsa_datain+0x0338, WHEN DATA_IN
at 0x0000010
a
: */ 0x19000000,0x00000360,
at 0x0000010
8
: */ 0x19000000,0x00000360,
/*
MOVE FROM dsa_datain+0x0340, WHEN DATA_IN
at 0x0000010
c
: */ 0x19000000,0x00000368,
at 0x0000010
a
: */ 0x19000000,0x00000368,
/*
MOVE FROM dsa_datain+0x0348, WHEN DATA_IN
at 0x0000010
e
: */ 0x19000000,0x00000370,
at 0x0000010
c
: */ 0x19000000,0x00000370,
/*
MOVE FROM dsa_datain+0x0350, WHEN DATA_IN
at 0x000001
10
: */ 0x19000000,0x00000378,
at 0x000001
0e
: */ 0x19000000,0x00000378,
/*
MOVE FROM dsa_datain+0x0358, WHEN DATA_IN
at 0x0000011
2
: */ 0x19000000,0x00000380,
at 0x0000011
0
: */ 0x19000000,0x00000380,
/*
MOVE FROM dsa_datain+0x0360, WHEN DATA_IN
at 0x0000011
4
: */ 0x19000000,0x00000388,
at 0x0000011
2
: */ 0x19000000,0x00000388,
/*
MOVE FROM dsa_datain+0x0368, WHEN DATA_IN
at 0x0000011
6
: */ 0x19000000,0x00000390,
at 0x0000011
4
: */ 0x19000000,0x00000390,
/*
MOVE FROM dsa_datain+0x0370, WHEN DATA_IN
at 0x0000011
8
: */ 0x19000000,0x00000398,
at 0x0000011
6
: */ 0x19000000,0x00000398,
/*
MOVE FROM dsa_datain+0x0378, WHEN DATA_IN
at 0x0000011
a
: */ 0x19000000,0x000003a0,
at 0x0000011
8
: */ 0x19000000,0x000003a0,
/*
MOVE FROM dsa_datain+0x0380, WHEN DATA_IN
at 0x0000011
c
: */ 0x19000000,0x000003a8,
at 0x0000011
a
: */ 0x19000000,0x000003a8,
/*
MOVE FROM dsa_datain+0x0388, WHEN DATA_IN
at 0x0000011
e
: */ 0x19000000,0x000003b0,
at 0x0000011
c
: */ 0x19000000,0x000003b0,
/*
MOVE FROM dsa_datain+0x0390, WHEN DATA_IN
at 0x000001
20
: */ 0x19000000,0x000003b8,
at 0x000001
1e
: */ 0x19000000,0x000003b8,
/*
MOVE FROM dsa_datain+0x0398, WHEN DATA_IN
at 0x0000012
2
: */ 0x19000000,0x000003c0,
at 0x0000012
0
: */ 0x19000000,0x000003c0,
/*
MOVE FROM dsa_datain+0x03a0, WHEN DATA_IN
at 0x0000012
4
: */ 0x19000000,0x000003c8,
at 0x0000012
2
: */ 0x19000000,0x000003c8,
/*
MOVE FROM dsa_datain+0x03a8, WHEN DATA_IN
at 0x0000012
6
: */ 0x19000000,0x000003d0,
at 0x0000012
4
: */ 0x19000000,0x000003d0,
/*
MOVE FROM dsa_datain+0x03b0, WHEN DATA_IN
at 0x0000012
8
: */ 0x19000000,0x000003d8,
at 0x0000012
6
: */ 0x19000000,0x000003d8,
/*
MOVE FROM dsa_datain+0x03b8, WHEN DATA_IN
at 0x0000012
a
: */ 0x19000000,0x000003e0,
at 0x0000012
8
: */ 0x19000000,0x000003e0,
/*
MOVE FROM dsa_datain+0x03c0, WHEN DATA_IN
at 0x0000012
c
: */ 0x19000000,0x000003e8,
at 0x0000012
a
: */ 0x19000000,0x000003e8,
/*
MOVE FROM dsa_datain+0x03c8, WHEN DATA_IN
at 0x0000012
e
: */ 0x19000000,0x000003f0,
at 0x0000012
c
: */ 0x19000000,0x000003f0,
/*
MOVE FROM dsa_datain+0x03d0, WHEN DATA_IN
at 0x000001
30
: */ 0x19000000,0x000003f8,
at 0x000001
2e
: */ 0x19000000,0x000003f8,
/*
MOVE FROM dsa_datain+0x03d8, WHEN DATA_IN
at 0x0000013
2
: */ 0x19000000,0x00000400,
at 0x0000013
0
: */ 0x19000000,0x00000400,
/*
MOVE FROM dsa_datain+0x03e0, WHEN DATA_IN
at 0x0000013
4
: */ 0x19000000,0x00000408,
at 0x0000013
2
: */ 0x19000000,0x00000408,
/*
MOVE FROM dsa_datain+0x03e8, WHEN DATA_IN
at 0x0000013
6
: */ 0x19000000,0x00000410,
at 0x0000013
4
: */ 0x19000000,0x00000410,
/*
MOVE FROM dsa_datain+0x03f0, WHEN DATA_IN
at 0x0000013
8
: */ 0x19000000,0x00000418,
at 0x0000013
6
: */ 0x19000000,0x00000418,
/*
MOVE FROM dsa_datain+0x03f8, WHEN DATA_IN
at 0x0000013
a
: */ 0x19000000,0x00000420,
at 0x0000013
8
: */ 0x19000000,0x00000420,
/*
JUMP end_data_trans
at 0x0000013
c : */ 0x80080000,0x00000908
,
at 0x0000013
a : */ 0x80080000,0x00000900
,
/*
output_data:
MOVE SCRATCH0 | had_dataout TO SCRATCH0
at 0x0000013
e
: */ 0x7a341000,0x00000000,
at 0x0000013
c
: */ 0x7a341000,0x00000000,
/*
ENTRY patch_output_data
patch_output_data:
JUMP 0
at 0x000001
40
: */ 0x80080000,0x00000000,
at 0x000001
3e
: */ 0x80080000,0x00000000,
/*
MOVE FROM dsa_dataout+0x0000, WHEN DATA_OUT
at 0x0000014
2
: */ 0x18000000,0x00000428,
at 0x0000014
0
: */ 0x18000000,0x00000428,
/*
MOVE FROM dsa_dataout+0x0008, WHEN DATA_OUT
at 0x0000014
4
: */ 0x18000000,0x00000430,
at 0x0000014
2
: */ 0x18000000,0x00000430,
/*
MOVE FROM dsa_dataout+0x0010, WHEN DATA_OUT
at 0x0000014
6
: */ 0x18000000,0x00000438,
at 0x0000014
4
: */ 0x18000000,0x00000438,
/*
MOVE FROM dsa_dataout+0x0018, WHEN DATA_OUT
at 0x0000014
8
: */ 0x18000000,0x00000440,
at 0x0000014
6
: */ 0x18000000,0x00000440,
/*
MOVE FROM dsa_dataout+0x0020, WHEN DATA_OUT
at 0x0000014
a
: */ 0x18000000,0x00000448,
at 0x0000014
8
: */ 0x18000000,0x00000448,
/*
MOVE FROM dsa_dataout+0x0028, WHEN DATA_OUT
at 0x0000014
c
: */ 0x18000000,0x00000450,
at 0x0000014
a
: */ 0x18000000,0x00000450,
/*
MOVE FROM dsa_dataout+0x0030, WHEN DATA_OUT
at 0x0000014
e
: */ 0x18000000,0x00000458,
at 0x0000014
c
: */ 0x18000000,0x00000458,
/*
MOVE FROM dsa_dataout+0x0038, WHEN DATA_OUT
at 0x000001
50
: */ 0x18000000,0x00000460,
at 0x000001
4e
: */ 0x18000000,0x00000460,
/*
MOVE FROM dsa_dataout+0x0040, WHEN DATA_OUT
at 0x0000015
2
: */ 0x18000000,0x00000468,
at 0x0000015
0
: */ 0x18000000,0x00000468,
/*
MOVE FROM dsa_dataout+0x0048, WHEN DATA_OUT
at 0x0000015
4
: */ 0x18000000,0x00000470,
at 0x0000015
2
: */ 0x18000000,0x00000470,
/*
MOVE FROM dsa_dataout+0x0050, WHEN DATA_OUT
at 0x0000015
6
: */ 0x18000000,0x00000478,
at 0x0000015
4
: */ 0x18000000,0x00000478,
/*
MOVE FROM dsa_dataout+0x0058, WHEN DATA_OUT
at 0x0000015
8
: */ 0x18000000,0x00000480,
at 0x0000015
6
: */ 0x18000000,0x00000480,
/*
MOVE FROM dsa_dataout+0x0060, WHEN DATA_OUT
at 0x0000015
a
: */ 0x18000000,0x00000488,
at 0x0000015
8
: */ 0x18000000,0x00000488,
/*
MOVE FROM dsa_dataout+0x0068, WHEN DATA_OUT
at 0x0000015
c
: */ 0x18000000,0x00000490,
at 0x0000015
a
: */ 0x18000000,0x00000490,
/*
MOVE FROM dsa_dataout+0x0070, WHEN DATA_OUT
at 0x0000015
e
: */ 0x18000000,0x00000498,
at 0x0000015
c
: */ 0x18000000,0x00000498,
/*
MOVE FROM dsa_dataout+0x0078, WHEN DATA_OUT
at 0x000001
60
: */ 0x18000000,0x000004a0,
at 0x000001
5e
: */ 0x18000000,0x000004a0,
/*
MOVE FROM dsa_dataout+0x0080, WHEN DATA_OUT
at 0x0000016
2
: */ 0x18000000,0x000004a8,
at 0x0000016
0
: */ 0x18000000,0x000004a8,
/*
MOVE FROM dsa_dataout+0x0088, WHEN DATA_OUT
at 0x0000016
4
: */ 0x18000000,0x000004b0,
at 0x0000016
2
: */ 0x18000000,0x000004b0,
/*
MOVE FROM dsa_dataout+0x0090, WHEN DATA_OUT
at 0x0000016
6
: */ 0x18000000,0x000004b8,
at 0x0000016
4
: */ 0x18000000,0x000004b8,
/*
MOVE FROM dsa_dataout+0x0098, WHEN DATA_OUT
at 0x0000016
8
: */ 0x18000000,0x000004c0,
at 0x0000016
6
: */ 0x18000000,0x000004c0,
/*
MOVE FROM dsa_dataout+0x00a0, WHEN DATA_OUT
at 0x0000016
a
: */ 0x18000000,0x000004c8,
at 0x0000016
8
: */ 0x18000000,0x000004c8,
/*
MOVE FROM dsa_dataout+0x00a8, WHEN DATA_OUT
at 0x0000016
c
: */ 0x18000000,0x000004d0,
at 0x0000016
a
: */ 0x18000000,0x000004d0,
/*
MOVE FROM dsa_dataout+0x00b0, WHEN DATA_OUT
at 0x0000016
e
: */ 0x18000000,0x000004d8,
at 0x0000016
c
: */ 0x18000000,0x000004d8,
/*
MOVE FROM dsa_dataout+0x00b8, WHEN DATA_OUT
at 0x000001
70
: */ 0x18000000,0x000004e0,
at 0x000001
6e
: */ 0x18000000,0x000004e0,
/*
MOVE FROM dsa_dataout+0x00c0, WHEN DATA_OUT
at 0x0000017
2
: */ 0x18000000,0x000004e8,
at 0x0000017
0
: */ 0x18000000,0x000004e8,
/*
MOVE FROM dsa_dataout+0x00c8, WHEN DATA_OUT
at 0x0000017
4
: */ 0x18000000,0x000004f0,
at 0x0000017
2
: */ 0x18000000,0x000004f0,
/*
MOVE FROM dsa_dataout+0x00d0, WHEN DATA_OUT
at 0x0000017
6
: */ 0x18000000,0x000004f8,
at 0x0000017
4
: */ 0x18000000,0x000004f8,
/*
MOVE FROM dsa_dataout+0x00d8, WHEN DATA_OUT
at 0x0000017
8
: */ 0x18000000,0x00000500,
at 0x0000017
6
: */ 0x18000000,0x00000500,
/*
MOVE FROM dsa_dataout+0x00e0, WHEN DATA_OUT
at 0x0000017
a
: */ 0x18000000,0x00000508,
at 0x0000017
8
: */ 0x18000000,0x00000508,
/*
MOVE FROM dsa_dataout+0x00e8, WHEN DATA_OUT
at 0x0000017
c
: */ 0x18000000,0x00000510,
at 0x0000017
a
: */ 0x18000000,0x00000510,
/*
MOVE FROM dsa_dataout+0x00f0, WHEN DATA_OUT
at 0x0000017
e
: */ 0x18000000,0x00000518,
at 0x0000017
c
: */ 0x18000000,0x00000518,
/*
MOVE FROM dsa_dataout+0x00f8, WHEN DATA_OUT
at 0x000001
80
: */ 0x18000000,0x00000520,
at 0x000001
7e
: */ 0x18000000,0x00000520,
/*
MOVE FROM dsa_dataout+0x0100, WHEN DATA_OUT
at 0x0000018
2
: */ 0x18000000,0x00000528,
at 0x0000018
0
: */ 0x18000000,0x00000528,
/*
MOVE FROM dsa_dataout+0x0108, WHEN DATA_OUT
at 0x0000018
4
: */ 0x18000000,0x00000530,
at 0x0000018
2
: */ 0x18000000,0x00000530,
/*
MOVE FROM dsa_dataout+0x0110, WHEN DATA_OUT
at 0x0000018
6
: */ 0x18000000,0x00000538,
at 0x0000018
4
: */ 0x18000000,0x00000538,
/*
MOVE FROM dsa_dataout+0x0118, WHEN DATA_OUT
at 0x0000018
8
: */ 0x18000000,0x00000540,
at 0x0000018
6
: */ 0x18000000,0x00000540,
/*
MOVE FROM dsa_dataout+0x0120, WHEN DATA_OUT
at 0x0000018
a
: */ 0x18000000,0x00000548,
at 0x0000018
8
: */ 0x18000000,0x00000548,
/*
MOVE FROM dsa_dataout+0x0128, WHEN DATA_OUT
at 0x0000018
c
: */ 0x18000000,0x00000550,
at 0x0000018
a
: */ 0x18000000,0x00000550,
/*
MOVE FROM dsa_dataout+0x0130, WHEN DATA_OUT
at 0x0000018
e
: */ 0x18000000,0x00000558,
at 0x0000018
c
: */ 0x18000000,0x00000558,
/*
MOVE FROM dsa_dataout+0x0138, WHEN DATA_OUT
at 0x000001
90
: */ 0x18000000,0x00000560,
at 0x000001
8e
: */ 0x18000000,0x00000560,
/*
MOVE FROM dsa_dataout+0x0140, WHEN DATA_OUT
at 0x0000019
2
: */ 0x18000000,0x00000568,
at 0x0000019
0
: */ 0x18000000,0x00000568,
/*
MOVE FROM dsa_dataout+0x0148, WHEN DATA_OUT
at 0x0000019
4
: */ 0x18000000,0x00000570,
at 0x0000019
2
: */ 0x18000000,0x00000570,
/*
MOVE FROM dsa_dataout+0x0150, WHEN DATA_OUT
at 0x0000019
6
: */ 0x18000000,0x00000578,
at 0x0000019
4
: */ 0x18000000,0x00000578,
/*
MOVE FROM dsa_dataout+0x0158, WHEN DATA_OUT
at 0x0000019
8
: */ 0x18000000,0x00000580,
at 0x0000019
6
: */ 0x18000000,0x00000580,
/*
MOVE FROM dsa_dataout+0x0160, WHEN DATA_OUT
at 0x0000019
a
: */ 0x18000000,0x00000588,
at 0x0000019
8
: */ 0x18000000,0x00000588,
/*
MOVE FROM dsa_dataout+0x0168, WHEN DATA_OUT
at 0x0000019
c
: */ 0x18000000,0x00000590,
at 0x0000019
a
: */ 0x18000000,0x00000590,
/*
MOVE FROM dsa_dataout+0x0170, WHEN DATA_OUT
at 0x0000019
e
: */ 0x18000000,0x00000598,
at 0x0000019
c
: */ 0x18000000,0x00000598,
/*
MOVE FROM dsa_dataout+0x0178, WHEN DATA_OUT
at 0x000001
a0
: */ 0x18000000,0x000005a0,
at 0x000001
9e
: */ 0x18000000,0x000005a0,
/*
MOVE FROM dsa_dataout+0x0180, WHEN DATA_OUT
at 0x000001a
2
: */ 0x18000000,0x000005a8,
at 0x000001a
0
: */ 0x18000000,0x000005a8,
/*
MOVE FROM dsa_dataout+0x0188, WHEN DATA_OUT
at 0x000001a
4
: */ 0x18000000,0x000005b0,
at 0x000001a
2
: */ 0x18000000,0x000005b0,
/*
MOVE FROM dsa_dataout+0x0190, WHEN DATA_OUT
at 0x000001a
6
: */ 0x18000000,0x000005b8,
at 0x000001a
4
: */ 0x18000000,0x000005b8,
/*
MOVE FROM dsa_dataout+0x0198, WHEN DATA_OUT
at 0x000001a
8
: */ 0x18000000,0x000005c0,
at 0x000001a
6
: */ 0x18000000,0x000005c0,
/*
MOVE FROM dsa_dataout+0x01a0, WHEN DATA_OUT
at 0x000001a
a
: */ 0x18000000,0x000005c8,
at 0x000001a
8
: */ 0x18000000,0x000005c8,
/*
MOVE FROM dsa_dataout+0x01a8, WHEN DATA_OUT
at 0x000001a
c
: */ 0x18000000,0x000005d0,
at 0x000001a
a
: */ 0x18000000,0x000005d0,
/*
MOVE FROM dsa_dataout+0x01b0, WHEN DATA_OUT
at 0x000001a
e
: */ 0x18000000,0x000005d8,
at 0x000001a
c
: */ 0x18000000,0x000005d8,
/*
MOVE FROM dsa_dataout+0x01b8, WHEN DATA_OUT
at 0x000001
b0
: */ 0x18000000,0x000005e0,
at 0x000001
ae
: */ 0x18000000,0x000005e0,
/*
MOVE FROM dsa_dataout+0x01c0, WHEN DATA_OUT
at 0x000001b
2
: */ 0x18000000,0x000005e8,
at 0x000001b
0
: */ 0x18000000,0x000005e8,
/*
MOVE FROM dsa_dataout+0x01c8, WHEN DATA_OUT
at 0x000001b
4
: */ 0x18000000,0x000005f0,
at 0x000001b
2
: */ 0x18000000,0x000005f0,
/*
MOVE FROM dsa_dataout+0x01d0, WHEN DATA_OUT
at 0x000001b
6
: */ 0x18000000,0x000005f8,
at 0x000001b
4
: */ 0x18000000,0x000005f8,
/*
MOVE FROM dsa_dataout+0x01d8, WHEN DATA_OUT
at 0x000001b
8
: */ 0x18000000,0x00000600,
at 0x000001b
6
: */ 0x18000000,0x00000600,
/*
MOVE FROM dsa_dataout+0x01e0, WHEN DATA_OUT
at 0x000001b
a
: */ 0x18000000,0x00000608,
at 0x000001b
8
: */ 0x18000000,0x00000608,
/*
MOVE FROM dsa_dataout+0x01e8, WHEN DATA_OUT
at 0x000001b
c
: */ 0x18000000,0x00000610,
at 0x000001b
a
: */ 0x18000000,0x00000610,
/*
MOVE FROM dsa_dataout+0x01f0, WHEN DATA_OUT
at 0x000001b
e
: */ 0x18000000,0x00000618,
at 0x000001b
c
: */ 0x18000000,0x00000618,
/*
MOVE FROM dsa_dataout+0x01f8, WHEN DATA_OUT
at 0x000001
c0
: */ 0x18000000,0x00000620,
at 0x000001
be
: */ 0x18000000,0x00000620,
/*
MOVE FROM dsa_dataout+0x0200, WHEN DATA_OUT
at 0x000001c
2
: */ 0x18000000,0x00000628,
at 0x000001c
0
: */ 0x18000000,0x00000628,
/*
MOVE FROM dsa_dataout+0x0208, WHEN DATA_OUT
at 0x000001c
4
: */ 0x18000000,0x00000630,
at 0x000001c
2
: */ 0x18000000,0x00000630,
/*
MOVE FROM dsa_dataout+0x0210, WHEN DATA_OUT
at 0x000001c
6
: */ 0x18000000,0x00000638,
at 0x000001c
4
: */ 0x18000000,0x00000638,
/*
MOVE FROM dsa_dataout+0x0218, WHEN DATA_OUT
at 0x000001c
8
: */ 0x18000000,0x00000640,
at 0x000001c
6
: */ 0x18000000,0x00000640,
/*
MOVE FROM dsa_dataout+0x0220, WHEN DATA_OUT
at 0x000001c
a
: */ 0x18000000,0x00000648,
at 0x000001c
8
: */ 0x18000000,0x00000648,
/*
MOVE FROM dsa_dataout+0x0228, WHEN DATA_OUT
at 0x000001c
c
: */ 0x18000000,0x00000650,
at 0x000001c
a
: */ 0x18000000,0x00000650,
/*
MOVE FROM dsa_dataout+0x0230, WHEN DATA_OUT
at 0x000001c
e
: */ 0x18000000,0x00000658,
at 0x000001c
c
: */ 0x18000000,0x00000658,
/*
MOVE FROM dsa_dataout+0x0238, WHEN DATA_OUT
at 0x000001
d0
: */ 0x18000000,0x00000660,
at 0x000001
ce
: */ 0x18000000,0x00000660,
/*
MOVE FROM dsa_dataout+0x0240, WHEN DATA_OUT
at 0x000001d
2
: */ 0x18000000,0x00000668,
at 0x000001d
0
: */ 0x18000000,0x00000668,
/*
MOVE FROM dsa_dataout+0x0248, WHEN DATA_OUT
at 0x000001d
4
: */ 0x18000000,0x00000670,
at 0x000001d
2
: */ 0x18000000,0x00000670,
/*
MOVE FROM dsa_dataout+0x0250, WHEN DATA_OUT
at 0x000001d
6
: */ 0x18000000,0x00000678,
at 0x000001d
4
: */ 0x18000000,0x00000678,
/*
MOVE FROM dsa_dataout+0x0258, WHEN DATA_OUT
at 0x000001d
8
: */ 0x18000000,0x00000680,
at 0x000001d
6
: */ 0x18000000,0x00000680,
/*
MOVE FROM dsa_dataout+0x0260, WHEN DATA_OUT
at 0x000001d
a
: */ 0x18000000,0x00000688,
at 0x000001d
8
: */ 0x18000000,0x00000688,
/*
MOVE FROM dsa_dataout+0x0268, WHEN DATA_OUT
at 0x000001d
c
: */ 0x18000000,0x00000690,
at 0x000001d
a
: */ 0x18000000,0x00000690,
/*
MOVE FROM dsa_dataout+0x0270, WHEN DATA_OUT
at 0x000001d
e
: */ 0x18000000,0x00000698,
at 0x000001d
c
: */ 0x18000000,0x00000698,
/*
MOVE FROM dsa_dataout+0x0278, WHEN DATA_OUT
at 0x000001
e0
: */ 0x18000000,0x000006a0,
at 0x000001
de
: */ 0x18000000,0x000006a0,
/*
MOVE FROM dsa_dataout+0x0280, WHEN DATA_OUT
at 0x000001e
2
: */ 0x18000000,0x000006a8,
at 0x000001e
0
: */ 0x18000000,0x000006a8,
/*
MOVE FROM dsa_dataout+0x0288, WHEN DATA_OUT
at 0x000001e
4
: */ 0x18000000,0x000006b0,
at 0x000001e
2
: */ 0x18000000,0x000006b0,
/*
MOVE FROM dsa_dataout+0x0290, WHEN DATA_OUT
at 0x000001e
6
: */ 0x18000000,0x000006b8,
at 0x000001e
4
: */ 0x18000000,0x000006b8,
/*
MOVE FROM dsa_dataout+0x0298, WHEN DATA_OUT
at 0x000001e
8
: */ 0x18000000,0x000006c0,
at 0x000001e
6
: */ 0x18000000,0x000006c0,
/*
MOVE FROM dsa_dataout+0x02a0, WHEN DATA_OUT
at 0x000001e
a
: */ 0x18000000,0x000006c8,
at 0x000001e
8
: */ 0x18000000,0x000006c8,
/*
MOVE FROM dsa_dataout+0x02a8, WHEN DATA_OUT
at 0x000001e
c
: */ 0x18000000,0x000006d0,
at 0x000001e
a
: */ 0x18000000,0x000006d0,
/*
MOVE FROM dsa_dataout+0x02b0, WHEN DATA_OUT
at 0x000001e
e
: */ 0x18000000,0x000006d8,
at 0x000001e
c
: */ 0x18000000,0x000006d8,
/*
MOVE FROM dsa_dataout+0x02b8, WHEN DATA_OUT
at 0x000001
f0
: */ 0x18000000,0x000006e0,
at 0x000001
ee
: */ 0x18000000,0x000006e0,
/*
MOVE FROM dsa_dataout+0x02c0, WHEN DATA_OUT
at 0x000001f
2
: */ 0x18000000,0x000006e8,
at 0x000001f
0
: */ 0x18000000,0x000006e8,
/*
MOVE FROM dsa_dataout+0x02c8, WHEN DATA_OUT
at 0x000001f
4
: */ 0x18000000,0x000006f0,
at 0x000001f
2
: */ 0x18000000,0x000006f0,
/*
MOVE FROM dsa_dataout+0x02d0, WHEN DATA_OUT
at 0x000001f
6
: */ 0x18000000,0x000006f8,
at 0x000001f
4
: */ 0x18000000,0x000006f8,
/*
MOVE FROM dsa_dataout+0x02d8, WHEN DATA_OUT
at 0x000001f
8
: */ 0x18000000,0x00000700,
at 0x000001f
6
: */ 0x18000000,0x00000700,
/*
MOVE FROM dsa_dataout+0x02e0, WHEN DATA_OUT
at 0x000001f
a
: */ 0x18000000,0x00000708,
at 0x000001f
8
: */ 0x18000000,0x00000708,
/*
MOVE FROM dsa_dataout+0x02e8, WHEN DATA_OUT
at 0x000001f
c
: */ 0x18000000,0x00000710,
at 0x000001f
a
: */ 0x18000000,0x00000710,
/*
MOVE FROM dsa_dataout+0x02f0, WHEN DATA_OUT
at 0x000001f
e
: */ 0x18000000,0x00000718,
at 0x000001f
c
: */ 0x18000000,0x00000718,
/*
MOVE FROM dsa_dataout+0x02f8, WHEN DATA_OUT
at 0x00000
200
: */ 0x18000000,0x00000720,
at 0x00000
1fe
: */ 0x18000000,0x00000720,
/*
MOVE FROM dsa_dataout+0x0300, WHEN DATA_OUT
at 0x0000020
2
: */ 0x18000000,0x00000728,
at 0x0000020
0
: */ 0x18000000,0x00000728,
/*
MOVE FROM dsa_dataout+0x0308, WHEN DATA_OUT
at 0x0000020
4
: */ 0x18000000,0x00000730,
at 0x0000020
2
: */ 0x18000000,0x00000730,
/*
MOVE FROM dsa_dataout+0x0310, WHEN DATA_OUT
at 0x0000020
6
: */ 0x18000000,0x00000738,
at 0x0000020
4
: */ 0x18000000,0x00000738,
/*
MOVE FROM dsa_dataout+0x0318, WHEN DATA_OUT
at 0x0000020
8
: */ 0x18000000,0x00000740,
at 0x0000020
6
: */ 0x18000000,0x00000740,
/*
MOVE FROM dsa_dataout+0x0320, WHEN DATA_OUT
at 0x0000020
a
: */ 0x18000000,0x00000748,
at 0x0000020
8
: */ 0x18000000,0x00000748,
/*
MOVE FROM dsa_dataout+0x0328, WHEN DATA_OUT
at 0x0000020
c
: */ 0x18000000,0x00000750,
at 0x0000020
a
: */ 0x18000000,0x00000750,
/*
MOVE FROM dsa_dataout+0x0330, WHEN DATA_OUT
at 0x0000020
e
: */ 0x18000000,0x00000758,
at 0x0000020
c
: */ 0x18000000,0x00000758,
/*
MOVE FROM dsa_dataout+0x0338, WHEN DATA_OUT
at 0x000002
10
: */ 0x18000000,0x00000760,
at 0x000002
0e
: */ 0x18000000,0x00000760,
/*
MOVE FROM dsa_dataout+0x0340, WHEN DATA_OUT
at 0x0000021
2
: */ 0x18000000,0x00000768,
at 0x0000021
0
: */ 0x18000000,0x00000768,
/*
MOVE FROM dsa_dataout+0x0348, WHEN DATA_OUT
at 0x0000021
4
: */ 0x18000000,0x00000770,
at 0x0000021
2
: */ 0x18000000,0x00000770,
/*
MOVE FROM dsa_dataout+0x0350, WHEN DATA_OUT
at 0x0000021
6
: */ 0x18000000,0x00000778,
at 0x0000021
4
: */ 0x18000000,0x00000778,
/*
MOVE FROM dsa_dataout+0x0358, WHEN DATA_OUT
at 0x0000021
8
: */ 0x18000000,0x00000780,
at 0x0000021
6
: */ 0x18000000,0x00000780,
/*
MOVE FROM dsa_dataout+0x0360, WHEN DATA_OUT
at 0x0000021
a
: */ 0x18000000,0x00000788,
at 0x0000021
8
: */ 0x18000000,0x00000788,
/*
MOVE FROM dsa_dataout+0x0368, WHEN DATA_OUT
at 0x0000021
c
: */ 0x18000000,0x00000790,
at 0x0000021
a
: */ 0x18000000,0x00000790,
/*
MOVE FROM dsa_dataout+0x0370, WHEN DATA_OUT
at 0x0000021
e
: */ 0x18000000,0x00000798,
at 0x0000021
c
: */ 0x18000000,0x00000798,
/*
MOVE FROM dsa_dataout+0x0378, WHEN DATA_OUT
at 0x000002
20
: */ 0x18000000,0x000007a0,
at 0x000002
1e
: */ 0x18000000,0x000007a0,
/*
MOVE FROM dsa_dataout+0x0380, WHEN DATA_OUT
at 0x0000022
2
: */ 0x18000000,0x000007a8,
at 0x0000022
0
: */ 0x18000000,0x000007a8,
/*
MOVE FROM dsa_dataout+0x0388, WHEN DATA_OUT
at 0x0000022
4
: */ 0x18000000,0x000007b0,
at 0x0000022
2
: */ 0x18000000,0x000007b0,
/*
MOVE FROM dsa_dataout+0x0390, WHEN DATA_OUT
at 0x0000022
6
: */ 0x18000000,0x000007b8,
at 0x0000022
4
: */ 0x18000000,0x000007b8,
/*
MOVE FROM dsa_dataout+0x0398, WHEN DATA_OUT
at 0x0000022
8
: */ 0x18000000,0x000007c0,
at 0x0000022
6
: */ 0x18000000,0x000007c0,
/*
MOVE FROM dsa_dataout+0x03a0, WHEN DATA_OUT
at 0x0000022
a
: */ 0x18000000,0x000007c8,
at 0x0000022
8
: */ 0x18000000,0x000007c8,
/*
MOVE FROM dsa_dataout+0x03a8, WHEN DATA_OUT
at 0x0000022
c
: */ 0x18000000,0x000007d0,
at 0x0000022
a
: */ 0x18000000,0x000007d0,
/*
MOVE FROM dsa_dataout+0x03b0, WHEN DATA_OUT
at 0x0000022
e
: */ 0x18000000,0x000007d8,
at 0x0000022
c
: */ 0x18000000,0x000007d8,
/*
MOVE FROM dsa_dataout+0x03b8, WHEN DATA_OUT
at 0x000002
30
: */ 0x18000000,0x000007e0,
at 0x000002
2e
: */ 0x18000000,0x000007e0,
/*
MOVE FROM dsa_dataout+0x03c0, WHEN DATA_OUT
at 0x0000023
2
: */ 0x18000000,0x000007e8,
at 0x0000023
0
: */ 0x18000000,0x000007e8,
/*
MOVE FROM dsa_dataout+0x03c8, WHEN DATA_OUT
at 0x0000023
4
: */ 0x18000000,0x000007f0,
at 0x0000023
2
: */ 0x18000000,0x000007f0,
/*
MOVE FROM dsa_dataout+0x03d0, WHEN DATA_OUT
at 0x0000023
6
: */ 0x18000000,0x000007f8,
at 0x0000023
4
: */ 0x18000000,0x000007f8,
/*
MOVE FROM dsa_dataout+0x03d8, WHEN DATA_OUT
at 0x0000023
8
: */ 0x18000000,0x00000800,
at 0x0000023
6
: */ 0x18000000,0x00000800,
/*
MOVE FROM dsa_dataout+0x03e0, WHEN DATA_OUT
at 0x0000023
a
: */ 0x18000000,0x00000808,
at 0x0000023
8
: */ 0x18000000,0x00000808,
/*
MOVE FROM dsa_dataout+0x03e8, WHEN DATA_OUT
at 0x0000023
c
: */ 0x18000000,0x00000810,
at 0x0000023
a
: */ 0x18000000,0x00000810,
/*
MOVE FROM dsa_dataout+0x03f0, WHEN DATA_OUT
at 0x0000023
e
: */ 0x18000000,0x00000818,
at 0x0000023
c
: */ 0x18000000,0x00000818,
/*
MOVE FROM dsa_dataout+0x03f8, WHEN DATA_OUT
at 0x000002
40
: */ 0x18000000,0x00000820,
at 0x000002
3e
: */ 0x18000000,0x00000820,
/*
ENTRY end_data_trans
end_data_trans:
redo_msgin3:
JUMP get_status, WHEN STATUS
at 0x0000024
2 : */ 0x830b0000,0x000000a0
,
at 0x0000024
0 : */ 0x830b0000,0x00000098
,
/*
JUMP get_msgin3, WHEN MSG_IN
at 0x0000024
4 : */ 0x870b0000,0x00000b20
,
at 0x0000024
2 : */ 0x870b0000,0x00000b78
,
/*
INT int_data_bad_phase
at 0x0000024
6
: */ 0x98080000,0xab93000b,
at 0x0000024
4
: */ 0x98080000,0xab93000b,
/*
get_msgin1:
MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x0000024
8
: */ 0x7a344000,0x00000000,
at 0x0000024
6
: */ 0x7a344000,0x00000000,
/*
MOVE 1, msgin_buf, WHEN MSG_IN
at 0x0000024
a
: */ 0x0f000001,0x00000000,
at 0x0000024
8
: */ 0x0f000001,0x00000000,
/*
JUMP ext_msg1, IF 0x01 ; Extended Message
at 0x0000024
c : */ 0x800c0001,0x00000968
,
at 0x0000024
a : */ 0x800c0001,0x00000960
,
/*
JUMP ignore_msg1, IF 0x02 ; Save Data Pointers
at 0x0000024
e : */ 0x800c0002,0x00000958
,
at 0x0000024
c : */ 0x800c0002,0x00000950
,
/*
JUMP ignore_msg1, IF 0x03 ; Save Restore Pointers
at 0x000002
50 : */ 0x800c0003,0x00000958
,
at 0x000002
4e : */ 0x800c0003,0x00000950
,
/*
JUMP disc1, IF 0x04 ; Disconnect
at 0x0000025
2 : */ 0x800c0004,0x000009c8
,
at 0x0000025
0 : */ 0x800c0004,0x000009f0
,
/*
INT int_bad_msg1
at 0x0000025
4
: */ 0x98080000,0xab930006,
at 0x0000025
2
: */ 0x98080000,0xab930006,
/*
ignore_msg1:
CLEAR ACK
at 0x0000025
6
: */ 0x60000040,0x00000000,
at 0x0000025
4
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin1
at 0x0000025
8 : */ 0x80080000,0x00000058
,
at 0x0000025
6 : */ 0x80080000,0x00000050
,
/*
ext_msg1:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x0000025
a
: */ 0x7a348000,0x00000000,
at 0x0000025
8
: */ 0x7a348000,0x00000000,
/*
CLEAR ACK
at 0x0000025
c
: */ 0x60000040,0x00000000,
at 0x0000025
a
: */ 0x60000040,0x00000000,
/*
MOVE 1, msgin_buf + 1, WHEN MSG_IN
at 0x0000025
e
: */ 0x0f000001,0x00000001,
at 0x0000025
c
: */ 0x0f000001,0x00000001,
/*
JUMP
ext_msg1a, IF 0x03
JUMP
reject_msg1, IF NOT 0x03 ; Only handle SDTR
at 0x000002
60 : */ 0x800c0003,0x0000099
0,
at 0x000002
5e : */ 0x80040003,0x000009b
0,
/*
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
at 0x0000026
4
: */ 0x60000040,0x00000000,
at 0x0000026
6
: */ 0x60000040,0x00000000,
/*
MOVE
1, msgin_buf + 2
, WHEN MSG_IN
MOVE
2, msgin_buf + 3
, WHEN MSG_IN
at 0x0000026
6 : */ 0x0f000001,0x00000002
,
at 0x0000026
8 : */ 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 0x0000026
8 : */ 0x800c0001,0x000009b
0,
at 0x0000026
c : */ 0x7a350100,0x0000000
0,
/*
INT int_bad_extmsg1b
SET ATN
at 0x0000026
a : */ 0x98080000,0xab930001
,
at 0x0000026
e : */ 0x58000008,0x00000000
,
/*
ext_msg1b:
CLEAR ACK
at 0x000002
6c
: */ 0x60000040,0x00000000,
at 0x000002
70
: */ 0x60000040,0x00000000,
/*
MOVE 2, msgin_buf + 3, WHEN
MSG_IN
JUMP reject_msg1a, WHEN NOT
MSG_IN
at 0x000002
6e : */ 0x0f000002,0x00000003
,
at 0x000002
72 : */ 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:
CLEAR ACK
at 0x0000027
2
: */ 0x60000040,0x00000000,
at 0x0000027
c
: */ 0x60000040,0x00000000,
/*
ENTRY wait_disc1
wait_disc1:
WAIT DISCONNECT
at 0x0000027
4
: */ 0x48000000,0x00000000,
at 0x0000027
e
: */ 0x48000000,0x00000000,
/*
INT int_disc1
at 0x000002
76
: */ 0x98080000,0xab930019,
at 0x000002
80
: */ 0x98080000,0xab930019,
/*
ENTRY resume_msgin1a
resume_msgin1a:
CLEAR ACK
at 0x000002
78
: */ 0x60000040,0x00000000,
at 0x000002
82
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin1
at 0x000002
7a : */ 0x80080000,0x00000058
,
at 0x000002
84 : */ 0x80080000,0x00000050
,
/*
ENTRY resume_msgin1b
resume_msgin1b:
SET ATN
at 0x000002
7c
: */ 0x58000008,0x00000000,
at 0x000002
86
: */ 0x58000008,0x00000000,
/*
CLEAR ACK
at 0x000002
7e
: */ 0x60000040,0x00000000,
at 0x000002
88
: */ 0x60000040,0x00000000,
/*
INT int_no_msgout1, WHEN NOT MSG_OUT
at 0x0000028
0
: */ 0x9e030000,0xab93000f,
at 0x0000028
a
: */ 0x9e030000,0xab93000f,
/*
MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x0000028
2
: */ 0x7a340200,0x00000000,
at 0x0000028
c
: */ 0x7a340200,0x00000000,
/*
MOVE FROM dsa_msgout, when MSG_OUT
at 0x0000028
4
: */ 0x1e000000,0x00000008,
at 0x0000028
e
: */ 0x1e000000,0x00000008,
/*
JUMP redo_msgin1
at 0x000002
86 : */ 0x80080000,0x00000058
,
at 0x000002
90 : */ 0x80080000,0x00000050
,
/*
get_msgin2:
MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x000002
88
: */ 0x7a344000,0x00000000,
at 0x000002
92
: */ 0x7a344000,0x00000000,
/*
MOVE 1, msgin_buf, WHEN MSG_IN
at 0x000002
8a
: */ 0x0f000001,0x00000000,
at 0x000002
94
: */ 0x0f000001,0x00000000,
/*
JUMP ext_msg2, IF 0x01 ; Extended Message
at 0x000002
8c : */ 0x800c0001,0x00000a68
,
at 0x000002
96 : */ 0x800c0001,0x00000a90
,
/*
JUMP ignore_msg2, IF 0x02 ; Save Data Pointers
at 0x000002
8e : */ 0x800c0002,0x00000a58
,
at 0x000002
98 : */ 0x800c0002,0x00000a80
,
/*
JUMP ignore_msg2, IF 0x03 ; Save Restore Pointers
at 0x0000029
0 : */ 0x800c0003,0x00000a58
,
at 0x0000029
a : */ 0x800c0003,0x00000a80
,
/*
JUMP disc2, IF 0x04 ; Disconnect
at 0x0000029
2 : */ 0x800c0004,0x00000ac8
,
at 0x0000029
c : */ 0x800c0004,0x00000b20
,
/*
INT int_bad_msg2
at 0x0000029
4
: */ 0x98080000,0xab930007,
at 0x0000029
e
: */ 0x98080000,0xab930007,
/*
ignore_msg2:
CLEAR ACK
at 0x000002
96
: */ 0x60000040,0x00000000,
at 0x000002
a0
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin2
at 0x000002
98 : */ 0x80080000,0x00000078
,
at 0x000002
a2 : */ 0x80080000,0x00000070
,
/*
ext_msg2:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x000002
9a
: */ 0x7a348000,0x00000000,
at 0x000002
a4
: */ 0x7a348000,0x00000000,
/*
CLEAR ACK
at 0x000002
9c
: */ 0x60000040,0x00000000,
at 0x000002
a6
: */ 0x60000040,0x00000000,
/*
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 0x000002a
0 : */ 0x800c0003,0x00000a90
,
at 0x000002a
e : */ 0x0f000001,0x00000002
,
/*
INT int_bad_extmsg2a
JUMP reject_msg2, IF NOT 0x01 ; Only handle SDTR
at 0x000002
a2 : */ 0x98080000,0xab930002
,
at 0x000002
b0 : */ 0x80040001,0x00000ae0
,
/*
ext_msg2a:
CLEAR ACK
at 0x000002
a4
: */ 0x60000040,0x00000000,
at 0x000002
b2
: */ 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 0x000002
a6 : */ 0x0f000001,0x00000002
,
at 0x000002
b6 : */ 0x98080000,0xab93000d
,
/*
JUMP ext_msg2b, IF 0x01 ; Must be SDTR
reject_msg2:
MOVE SCRATCH1 | did_reject TO SCRATCH1
at 0x000002
a8 : */ 0x800c0001,0x00000ab
0,
at 0x000002
b8 : */ 0x7a350100,0x0000000
0,
/*
INT int_bad_extmsg2b
SET ATN
at 0x000002
aa : */ 0x98080000,0xab930003
,
at 0x000002
ba : */ 0x58000008,0x00000000
,
/*
ext_msg2b:
CLEAR ACK
at 0x000002
a
c : */ 0x60000040,0x00000000,
at 0x000002
b
c : */ 0x60000040,0x00000000,
/*
MOVE 2, msgin_buf + 3, WHEN
MSG_IN
JUMP reject_msg2a, WHEN NOT
MSG_IN
at 0x000002
ae : */ 0x0f000002,0x00000003
,
at 0x000002
be : */ 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 0x000002
b0 : */ 0x98080000,0xab93000d
,
at 0x000002
c6 : */ 0x80080000,0x00000070
,
/*
disc2:
CLEAR ACK
at 0x000002
b2
: */ 0x60000040,0x00000000,
at 0x000002
c8
: */ 0x60000040,0x00000000,
/*
ENTRY wait_disc2
wait_disc2:
WAIT DISCONNECT
at 0x000002
b4
: */ 0x48000000,0x00000000,
at 0x000002
ca
: */ 0x48000000,0x00000000,
/*
INT int_disc2
at 0x000002
b6
: */ 0x98080000,0xab93001a,
at 0x000002
cc
: */ 0x98080000,0xab93001a,
/*
ENTRY resume_msgin2a
resume_msgin2a:
CLEAR ACK
at 0x000002
b8
: */ 0x60000040,0x00000000,
at 0x000002
ce
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin2
at 0x000002
ba : */ 0x80080000,0x00000078
,
at 0x000002
d0 : */ 0x80080000,0x00000070
,
/*
ENTRY resume_msgin2b
resume_msgin2b:
SET ATN
at 0x000002
bc
: */ 0x58000008,0x00000000,
at 0x000002
d2
: */ 0x58000008,0x00000000,
/*
CLEAR ACK
at 0x000002
be
: */ 0x60000040,0x00000000,
at 0x000002
d4
: */ 0x60000040,0x00000000,
/*
INT int_no_msgout2, WHEN NOT MSG_OUT
at 0x000002
c0
: */ 0x9e030000,0xab930010,
at 0x000002
d6
: */ 0x9e030000,0xab930010,
/*
MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x000002
c2
: */ 0x7a340200,0x00000000,
at 0x000002
d8
: */ 0x7a340200,0x00000000,
/*
MOVE FROM dsa_msgout, when MSG_OUT
at 0x000002
c4
: */ 0x1e000000,0x00000008,
at 0x000002
da
: */ 0x1e000000,0x00000008,
/*
JUMP redo_msgin2
at 0x000002
c6 : */ 0x80080000,0x00000078
,
at 0x000002
dc : */ 0x80080000,0x00000070
,
/*
get_msgin3:
MOVE SCRATCH0 | had_msgin TO SCRATCH0
at 0x000002
c8
: */ 0x7a344000,0x00000000,
at 0x000002
de
: */ 0x7a344000,0x00000000,
/*
MOVE 1, msgin_buf, WHEN MSG_IN
at 0x000002
ca
: */ 0x0f000001,0x00000000,
at 0x000002
e0
: */ 0x0f000001,0x00000000,
/*
JUMP ext_msg3, IF 0x01 ; Extended Message
at 0x000002
cc : */ 0x800c0001,0x00000b68
,
at 0x000002
e2 : */ 0x800c0001,0x00000bc0
,
/*
JUMP ignore_msg3, IF 0x02 ; Save Data Pointers
at 0x000002
ce : */ 0x800c0002,0x00000b58
,
at 0x000002
e4 : */ 0x800c0002,0x00000bb0
,
/*
JUMP ignore_msg3, IF 0x03 ; Save Restore Pointers
at 0x000002
d0 : */ 0x800c0003,0x00000b58
,
at 0x000002
e6 : */ 0x800c0003,0x00000bb0
,
/*
JUMP disc3, IF 0x04 ; Disconnect
at 0x000002
d2 : */ 0x800c0004,0x00000bc8
,
at 0x000002
e8 : */ 0x800c0004,0x00000c50
,
/*
INT int_bad_msg3
at 0x000002
d4
: */ 0x98080000,0xab930008,
at 0x000002
ea
: */ 0x98080000,0xab930008,
/*
ignore_msg3:
CLEAR ACK
at 0x000002
d6
: */ 0x60000040,0x00000000,
at 0x000002
ec
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin3
at 0x000002
d8 : */ 0x80080000,0x00000908
,
at 0x000002
ee : */ 0x80080000,0x00000900
,
/*
ext_msg3:
MOVE SCRATCH0 | had_extmsg TO SCRATCH0
at 0x000002
da
: */ 0x7a348000,0x00000000,
at 0x000002
f0
: */ 0x7a348000,0x00000000,
/*
CLEAR ACK
at 0x000002
dc
: */ 0x60000040,0x00000000,
at 0x000002
f2
: */ 0x60000040,0x00000000,
/*
MOVE 1, msgin_buf + 1, WHEN MSG_IN
at 0x000002
de
: */ 0x0f000001,0x00000001,
at 0x000002
f4
: */ 0x0f000001,0x00000001,
/*
JUMP
ext_msg3a, IF 0x03
JUMP
reject_msg3, IF NOT 0x03 ; Only handle SDTR
at 0x000002
e0 : */ 0x800c0003,0x00000b9
0,
at 0x000002
f6 : */ 0x80040003,0x00000c1
0,
/*
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
at 0x000002
e4
: */ 0x60000040,0x00000000,
at 0x000002
fe
: */ 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 0x00000
2e6 : */ 0x0f000001,0x00000002
,
at 0x00000
302 : */ 0x98080000,0xab93000e
,
/*
JUMP ext_msg3b, IF 0x01 ; Must be SDTR
reject_msg3:
MOVE SCRATCH1 | did_reject TO SCRATCH1
at 0x00000
2e8 : */ 0x800c0001,0x00000bb
0,
at 0x00000
304 : */ 0x7a350100,0x0000000
0,
/*
INT int_bad_extmsg3b
SET ATN
at 0x00000
2ea : */ 0x98080000,0xab930005
,
at 0x00000
306 : */ 0x58000008,0x00000000
,
/*
ext_msg3b:
CLEAR ACK
at 0x00000
2ec
: */ 0x60000040,0x00000000,
at 0x00000
308
: */ 0x60000040,0x00000000,
/*
MOVE 2, msgin_buf + 3, WHEN
MSG_IN
JUMP reject_msg3a, WHEN NOT
MSG_IN
at 0x00000
2ee : */ 0x0f000002,0x00000003
,
at 0x00000
30a : */ 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:
CLEAR ACK
at 0x00000
2f2
: */ 0x60000040,0x00000000,
at 0x00000
314
: */ 0x60000040,0x00000000,
/*
ENTRY wait_disc3
wait_disc3:
WAIT DISCONNECT
at 0x00000
2f4
: */ 0x48000000,0x00000000,
at 0x00000
316
: */ 0x48000000,0x00000000,
/*
INT int_disc3
at 0x00000
2f6
: */ 0x98080000,0xab93001b,
at 0x00000
318
: */ 0x98080000,0xab93001b,
/*
ENTRY resume_msgin3a
resume_msgin3a:
CLEAR ACK
at 0x00000
2f8
: */ 0x60000040,0x00000000,
at 0x00000
31a
: */ 0x60000040,0x00000000,
/*
JUMP redo_msgin3
at 0x00000
2fa : */ 0x80080000,0x00000908
,
at 0x00000
31c : */ 0x80080000,0x00000900
,
/*
ENTRY resume_msgin3b
resume_msgin3b:
SET ATN
at 0x00000
2fc
: */ 0x58000008,0x00000000,
at 0x00000
31e
: */ 0x58000008,0x00000000,
/*
CLEAR ACK
at 0x00000
2fe
: */ 0x60000040,0x00000000,
at 0x00000
320
: */ 0x60000040,0x00000000,
/*
INT int_no_msgout3, WHEN NOT MSG_OUT
at 0x000003
00
: */ 0x9e030000,0xab930011,
at 0x000003
22
: */ 0x9e030000,0xab930011,
/*
MOVE SCRATCH0 | had_msgout TO SCRATCH0
at 0x000003
02
: */ 0x7a340200,0x00000000,
at 0x000003
24
: */ 0x7a340200,0x00000000,
/*
MOVE FROM dsa_msgout, when MSG_OUT
at 0x000003
04
: */ 0x1e000000,0x00000008,
at 0x000003
26
: */ 0x1e000000,0x00000008,
/*
JUMP redo_msgin3
at 0x000003
06 : */ 0x80080000,0x00000908
,
at 0x000003
28 : */ 0x80080000,0x00000900
,
/*
ENTRY resume_rej_ident
resume_rej_ident:
CLEAR ATN
at 0x000003
08
: */ 0x60000008,0x00000000,
at 0x000003
2a
: */ 0x60000008,0x00000000,
/*
MOVE 1, msgin_buf, WHEN MSG_IN
at 0x000003
0a
: */ 0x0f000001,0x00000000,
at 0x000003
2c
: */ 0x0f000001,0x00000000,
/*
INT int_not_rej, IF NOT 0x07 ; Reject
at 0x000003
0c
: */ 0x98040007,0xab93001c,
at 0x000003
2e
: */ 0x98040007,0xab93001c,
/*
CLEAR ACK
at 0x000003
0e
: */ 0x60000040,0x00000000,
at 0x000003
30
: */ 0x60000040,0x00000000,
/*
JUMP done_ident
at 0x000003
10 : */ 0x80080000,0x00000050
,
at 0x000003
32 : */ 0x80080000,0x00000048
,
/*
ENTRY reselect
...
...
@@ -1716,73 +1784,92 @@ reselect:
; Disable selection timer
MOVE CTEST7 | 0x10 TO CTEST7
at 0x000003
12
: */ 0x7a1b1000,0x00000000,
at 0x000003
34
: */ 0x7a1b1000,0x00000000,
/*
WAIT RESELECT resel_err
at 0x000003
14 : */ 0x50000000,0x00000c70
,
at 0x000003
36 : */ 0x50000000,0x00000cf8
,
/*
INT int_resel_not_msgin, WHEN NOT MSG_IN
at 0x000003
16
: */ 0x9f030000,0xab930016,
at 0x000003
38
: */ 0x9f030000,0xab930016,
/*
MOVE 1, reselected_identify, WHEN MSG_IN
at 0x000003
18
: */ 0x0f000001,0x00000000,
at 0x000003
3a
: */ 0x0f000001,0x00000000,
/*
INT int_reselected
at 0x000003
1a
: */ 0x98080000,0xab930017,
at 0x000003
3c
: */ 0x98080000,0xab930017,
/*
resel_err:
MOVE CTEST2 & 0x40 TO SFBR
at 0x000003
1c
: */ 0x74164000,0x00000000,
at 0x000003
3e
: */ 0x74164000,0x00000000,
/*
JUMP selected, IF 0x00
at 0x000003
1e : */ 0x800c0000,0x00000cb0
,
at 0x000003
40 : */ 0x800c0000,0x00000d38
,
/*
MOVE SFBR & 0 TO SFBR
at 0x000003
20
: */ 0x7c080000,0x00000000,
at 0x000003
42
: */ 0x7c080000,0x00000000,
/*
ENTRY patch_new_dsa
patch_new_dsa:
MOVE SFBR | 0x11 TO DSA0
at 0x000003
22
: */ 0x6a101100,0x00000000,
at 0x000003
44
: */ 0x6a101100,0x00000000,
/*
MOVE SFBR | 0x22 TO DSA1
at 0x000003
24
: */ 0x6a112200,0x00000000,
at 0x000003
46
: */ 0x6a112200,0x00000000,
/*
MOVE SFBR | 0x33 TO DSA2
at 0x000003
26
: */ 0x6a123300,0x00000000,
at 0x000003
48
: */ 0x6a123300,0x00000000,
/*
MOVE SFBR | 0x44 TO DSA3
at 0x000003
28
: */ 0x6a134400,0x00000000,
at 0x000003
4a
: */ 0x6a134400,0x00000000,
/*
JUMP do_select
at 0x000003
2a
: */ 0x80080000,0x00000000,
at 0x000003
4c
: */ 0x80080000,0x00000000,
/*
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
static u32 A_dsa_cmnd_used[] __attribute((unused)) = {
0x0000001
d
,
0x0000001
b
,
};
#define A_dsa_datain 0x00000028
static u32 A_dsa_datain_used[] __attribute((unused)) = {
0x0000003b,
0x0000003d,
0x0000003f,
0x00000041,
...
...
@@ -1910,11 +1997,11 @@ static u32 A_dsa_datain_used[] __attribute((unused)) = {
0x00000135,
0x00000137,
0x00000139,
0x0000013b,
};
#define A_dsa_dataout 0x00000428
static u32 A_dsa_dataout_used[] __attribute((unused)) = {
0x00000141,
0x00000143,
0x00000145,
0x00000147,
...
...
@@ -2042,25 +2129,24 @@ static u32 A_dsa_dataout_used[] __attribute((unused)) = {
0x0000023b,
0x0000023d,
0x0000023f,
0x00000241,
};
#define A_dsa_msgin 0x00000020
static u32 A_dsa_msgin_used[] __attribute((unused)) = {
0x0000002
f
,
0x0000002
d
,
};
#define A_dsa_msgout 0x00000008
static u32 A_dsa_msgout_used[] __attribute((unused)) = {
0x0000001
3
,
0x0000028
5
,
0x000002
c5
,
0x000003
05
,
0x0000001
1
,
0x0000028
f
,
0x000002
db
,
0x000003
27
,
};
#define A_dsa_select 0x00000000
static u32 A_dsa_select_used[] __attribute((unused)) = {
0x0000000
6
,
0x0000000
4
,
};
#define A_dsa_size 0x00000828
...
...
@@ -2069,285 +2155,290 @@ static u32 A_dsa_size_used[] __attribute((unused)) = {
#define A_dsa_status 0x00000018
static u32 A_dsa_status_used[] __attribute((unused)) = {
0x0000002
b
,
0x0000002
9
,
};
#define A_had_cmdout 0x00000004
static u32 A_had_cmdout_used[] __attribute((unused)) = {
0x0000001
a
,
0x0000001
8
,
};
#define A_had_datain 0x00000008
static u32 A_had_datain_used[] __attribute((unused)) = {
0x0000003
8
,
0x0000003
6
,
};
#define A_had_dataout 0x00000010
static u32 A_had_dataout_used[] __attribute((unused)) = {
0x0000013
e
,
0x0000013
c
,
};
#define A_had_extmsg 0x00000080
static u32 A_had_extmsg_used[] __attribute((unused)) = {
0x0000025
a
,
0x000002
9a
,
0x000002
da
,
0x0000025
8
,
0x000002
a4
,
0x000002
f0
,
};
#define A_had_msgin 0x00000040
static u32 A_had_msgin_used[] __attribute((unused)) = {
0x0000024
8
,
0x000002
88
,
0x000002
c8
,
0x0000024
6
,
0x000002
92
,
0x000002
de
,
};
#define A_had_msgout 0x00000002
static u32 A_had_msgout_used[] __attribute((unused)) = {
0x000000
10
,
0x0000028
2
,
0x000002
c2
,
0x000003
02
,
0x000000
0e
,
0x0000028
c
,
0x000002
d8
,
0x000003
24
,
};
#define A_had_select 0x00000001
static u32 A_had_select_used[] __attribute((unused)) = {
0x0000000
c
,
0x0000000
a
,
};
#define A_had_status 0x00000020
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
static u32 A_int_bad_msg1_used[] __attribute((unused)) = {
0x0000025
5
,
0x0000025
3
,
};
#define A_int_bad_msg2 0xab930007
static u32 A_int_bad_msg2_used[] __attribute((unused)) = {
0x0000029
5
,
0x0000029
f
,
};
#define A_int_bad_msg3 0xab930008
static u32 A_int_bad_msg3_used[] __attribute((unused)) = {
0x000002
d5
,
0x000002
eb
,
};
#define A_int_cmd_bad_phase 0xab930009
static u32 A_int_cmd_bad_phase_used[] __attribute((unused)) = {
0x0000002
7
,
0x0000002
5
,
};
#define A_int_cmd_complete 0xab93000a
static u32 A_int_cmd_complete_used[] __attribute((unused)) = {
0x0000003
7
,
0x0000003
5
,
};
#define A_int_data_bad_phase 0xab93000b
static u32 A_int_data_bad_phase_used[] __attribute((unused)) = {
0x0000024
7
,
0x0000024
5
,
};
#define A_int_disc1 0xab930019
static u32 A_int_disc1_used[] __attribute((unused)) = {
0x000002
77
,
0x000002
81
,
};
#define A_int_disc2 0xab93001a
static u32 A_int_disc2_used[] __attribute((unused)) = {
0x000002
b7
,
0x000002
cd
,
};
#define A_int_disc3 0xab93001b
static u32 A_int_disc3_used[] __attribute((unused)) = {
0x00000
2f7
,
0x00000
319
,
};
#define A_int_msg_sdtr1 0xab93000c
static u32 A_int_msg_sdtr1_used[] __attribute((unused)) = {
0x000002
71
,
0x000002
6b
,
};
#define A_int_msg_sdtr2 0xab93000d
static u32 A_int_msg_sdtr2_used[] __attribute((unused)) = {
0x000002b
1
,
0x000002b
7
,
};
#define A_int_msg_sdtr3 0xab93000e
static u32 A_int_msg_sdtr3_used[] __attribute((unused)) = {
0x00000
2f1
,
0x00000
303
,
};
#define A_int_no_msgout1 0xab93000f
static u32 A_int_no_msgout1_used[] __attribute((unused)) = {
0x0000028
1
,
0x0000028
b
,
};
#define A_int_no_msgout2 0xab930010
static u32 A_int_no_msgout2_used[] __attribute((unused)) = {
0x000002
c1
,
0x000002
d7
,
};
#define A_int_no_msgout3 0xab930011
static u32 A_int_no_msgout3_used[] __attribute((unused)) = {
0x000003
01
,
0x000003
23
,
};
#define A_int_not_cmd_complete 0xab930012
static u32 A_int_not_cmd_complete_used[] __attribute((unused)) = {
0x000000
31
,
0x000000
2f
,
};
#define A_int_not_rej 0xab93001c
static u32 A_int_not_rej_used[] __attribute((unused)) = {
0x000003
0d
,
0x000003
2f
,
};
#define A_int_resel_not_msgin 0xab930016
static u32 A_int_resel_not_msgin_used[] __attribute((unused)) = {
0x000003
17
,
0x000003
39
,
};
#define A_int_reselected 0xab930017
static u32 A_int_reselected_used[] __attribute((unused)) = {
0x000003
1b
,
0x000003
3d
,
};
#define A_int_sel_no_ident 0xab930013
static u32 A_int_sel_no_ident_used[] __attribute((unused)) = {
0x0000000
f
,
0x0000000
d
,
};
#define A_int_sel_not_cmd 0xab930014
static u32 A_int_sel_not_cmd_used[] __attribute((unused)) = {
0x0000001
9
,
0x0000001
7
,
};
#define A_int_selected 0xab930018
static u32 A_int_selected_used[] __attribute((unused)) = {
0x000003
2d
,
0x000003
4f
,
};
#define A_int_status_not_msgin 0xab930015
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
static u32 A_msgin_buf_used[] __attribute((unused)) = {
0x0000024
b
,
0x0000025
f
,
0x0000026
7
,
0x0000026
f
,
0x000002
8b
,
0x0000029
f
,
0x000002a
7
,
0x0000024
9
,
0x0000025
d
,
0x0000026
3
,
0x0000026
9
,
0x000002
75
,
0x0000029
5
,
0x000002a
9
,
0x000002af,
0x000002cb,
0x000002df,
0x000002e7,
0x000002ef,
0x0000030b,
0x000002b5,
0x000002c1,
0x000002e1,
0x000002f5,
0x000002fb,
0x00000301,
0x0000030d,
0x0000032d,
};
#define A_reselected_identify 0x00000000
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_done_ident 0x00000050
#define Ent_end_data_trans 0x00000908
#define Ent_patch_input_data 0x000000e8
#define Ent_patch_new_dsa 0x00000c88
#define Ent_patch_output_data 0x00000500
#define Ent_reselect 0x00000c48
#define Ent_resume_cmd 0x00000068
#define Ent_resume_msgin1a 0x000009e0
#define Ent_resume_msgin1b 0x000009f0
#define Ent_resume_msgin2a 0x00000ae0
#define Ent_resume_msgin2b 0x00000af0
#define Ent_resume_msgin3a 0x00000be0
#define Ent_resume_msgin3b 0x00000bf0
#define Ent_resume_pmm 0x00000078
#define Ent_resume_rej_ident 0x00000c20
#define Ent_wait_disc1 0x000009d0
#define Ent_wait_disc2 0x00000ad0
#define Ent_wait_disc3 0x00000bd0
#define Ent_wait_disc_complete 0x000000d0
#define Ent_done_ident 0x00000048
#define Ent_end_data_trans 0x00000900
#define Ent_patch_input_data 0x000000e0
#define Ent_patch_new_dsa 0x00000d10
#define Ent_patch_output_data 0x000004f8
#define Ent_reselect 0x00000cd0
#define Ent_resume_cmd 0x00000060
#define Ent_resume_msgin1a 0x00000a08
#define Ent_resume_msgin1b 0x00000a18
#define Ent_resume_msgin2a 0x00000b38
#define Ent_resume_msgin2b 0x00000b48
#define Ent_resume_msgin3a 0x00000c68
#define Ent_resume_msgin3b 0x00000c78
#define Ent_resume_pmm 0x00000070
#define Ent_resume_rej_ident 0x00000ca8
#define Ent_test1 0x00000d40
#define Ent_wait_disc1 0x000009f8
#define Ent_wait_disc2 0x00000b28
#define Ent_wait_disc3 0x00000c58
#define Ent_wait_disc_complete 0x000000c8
static u32 LABELPATCHES[] __attribute((unused)) = {
0x00000005,
0x00000007,
0x000000
09
,
0x000000
13
,
0x00000015,
0x0000001
7
,
0x0000001
d
,
0x0000001f,
0x00000021,
0x00000023,
0x00000
025
,
0x00000
13d
,
0x00000
13b
,
0x00000
241
,
0x00000243,
0x0000024
5
,
0x0000024
b
,
0x0000024d,
0x0000024f,
0x00000251,
0x00000253,
0x00000259,
0x00000261,
0x00000269,
0x00000257,
0x0000025f,
0x00000265,
0x00000273,
0x00000277,
0x0000027b,
0x00000287,
0x0000028d,
0x0000028f,
0x00000285,
0x00000291,
0x0000029
3
,
0x0000029
7
,
0x00000299,
0x000002a1,
0x000002a9,
0x000002bb,
0x0000029b,
0x0000029d,
0x000002a3,
0x000002ab,
0x000002b1,
0x000002bf,
0x000002c3,
0x000002c7,
0x000002cd,
0x000002cf,
0x000002d1,
0x000002d3,
0x000002d9,
0x000002e1,
0x000002dd,
0x000002e3,
0x000002e5,
0x000002e7,
0x000002e9,
0x000002fb,
0x00000307,
0x00000311,
0x00000315,
0x0000031f,
0x0000032b,
0x000002ef,
0x000002f7,
0x000002fd,
0x0000030b,
0x0000030f,
0x00000313,
0x0000031d,
0x00000329,
0x00000333,
0x00000337,
0x00000341,
0x0000034d,
};
static struct {
...
...
@@ -2356,6 +2447,6 @@ static struct {
} EXTERNAL_PATCHES[] __attribute((unused)) = {
};
static u32 INSTRUCTIONS __attribute((unused)) = 4
07
;
static u32 PATCHES __attribute((unused)) =
42
;
static u32 INSTRUCTIONS __attribute((unused)) = 4
26
;
static u32 PATCHES __attribute((unused)) =
51
;
static u32 EXTERNAL_PATCHES_LEN __attribute((unused)) = 0;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment