Commit bebe7cd8 authored by Justin T. Gibbs's avatar Justin T. Gibbs

Aic79xx Driver Update

 o Perform a few firmware optimizations
 o Correct the packetized status handler so that
   it can handle CRC errors during status data packets.
parent 03b84f47
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#88 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#89 $
* *
* $FreeBSD$ * $FreeBSD$
*/ */
...@@ -494,13 +494,11 @@ struct hardware_scb { ...@@ -494,13 +494,11 @@ struct hardware_scb {
* transfer. * transfer.
*/ */
#define SG_PTR_MASK 0xFFFFFFF8 #define SG_PTR_MASK 0xFFFFFFF8
/*16*/ uint16_t tag; /*16*/ uint64_t dataptr;
/*18*/ uint8_t cdb_len; /*24*/ uint32_t datacnt; /* Byte 3 is spare. */
/*19*/ uint8_t task_management; /*28*/ uint32_t sgptr;
/*20*/ uint32_t next_hscb_busaddr; /*32*/ uint32_t hscb_busaddr;
/*24*/ uint64_t dataptr; /*36*/ uint32_t next_hscb_busaddr;
/*32*/ uint32_t datacnt; /* Byte 3 is spare. */
/*36*/ uint32_t sgptr;
/*40*/ uint8_t control; /* See SCB_CONTROL in aic79xx.reg for details */ /*40*/ uint8_t control; /* See SCB_CONTROL in aic79xx.reg for details */
/*41*/ uint8_t scsiid; /* /*41*/ uint8_t scsiid; /*
* Selection out Id * Selection out Id
...@@ -508,8 +506,10 @@ struct hardware_scb { ...@@ -508,8 +506,10 @@ struct hardware_scb {
*/ */
/*42*/ uint8_t lun; /*42*/ uint8_t lun;
/*43*/ uint8_t task_attribute; /*43*/ uint8_t task_attribute;
/*44*/ uint32_t hscb_busaddr; /*44*/ uint8_t cdb_len;
/******* Long lun field only downloaded for full 8 byte lun support *******/ /*45*/ uint8_t task_management;
/*46*/ uint16_t tag; /* Reused by Sequencer. */
/********** Long lun field only downloaded for full 8 byte lun support ********/
/*48*/ uint8_t pkt_long_lun[8]; /*48*/ uint8_t pkt_long_lun[8];
/******* Fields below are not Downloaded (Sequencer may use for scratch) ******/ /******* Fields below are not Downloaded (Sequencer may use for scratch) ******/
/*56*/ uint8_t spare[8]; /*56*/ uint8_t spare[8];
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
* *
* $FreeBSD$ * $FreeBSD$
*/ */
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $" VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $"
/* /*
* This file is processed by the aic7xxx_asm utility for use in assembling * This file is processed by the aic7xxx_asm utility for use in assembling
...@@ -3484,9 +3484,6 @@ scratch_ram { ...@@ -3484,9 +3484,6 @@ scratch_ram {
LONGJMP_ADDR { LONGJMP_ADDR {
size 2 size 2
} }
LONGJMP_SCB {
size 2
}
ACCUM_SAVE { ACCUM_SAVE {
size 1 size 1
} }
...@@ -3799,23 +3796,6 @@ scb { ...@@ -3799,23 +3796,6 @@ scb {
size 4 size 4
alias SCB_NEXT_COMPLETE alias SCB_NEXT_COMPLETE
} }
SCB_TAG {
size 2
}
SCB_CDB_LEN {
size 1
field SCB_CDB_LEN_PTR 0x80 /* CDB in host memory */
}
SCB_TASK_MANAGEMENT {
size 1
}
SCB_NEXT {
alias SCB_NEXT_SCB_BUSADDR
size 2
}
SCB_NEXT2 {
size 2
}
SCB_DATAPTR { SCB_DATAPTR {
size 8 size 8
} }
...@@ -3834,6 +3814,16 @@ scb { ...@@ -3834,6 +3814,16 @@ scb {
field SG_FULL_RESID 0x02 /* In the first byte */ field SG_FULL_RESID 0x02 /* In the first byte */
field SG_LIST_NULL 0x01 /* In the first byte */ field SG_LIST_NULL 0x01 /* In the first byte */
} }
SCB_BUSADDR {
size 4
}
SCB_NEXT {
alias SCB_NEXT_SCB_BUSADDR
size 2
}
SCB_NEXT2 {
size 2
}
SCB_CONTROL { SCB_CONTROL {
size 1 size 1
field TARGET_SCB 0x80 field TARGET_SCB 0x80
...@@ -3856,8 +3846,16 @@ scb { ...@@ -3856,8 +3846,16 @@ scb {
SCB_TASK_ATTRIBUTE { SCB_TASK_ATTRIBUTE {
size 1 size 1
} }
SCB_BUSADDR { SCB_CDB_LEN {
size 4 size 1
field SCB_CDB_LEN_PTR 0x80 /* CDB in host memory */
}
SCB_TASK_MANAGEMENT {
size 1
}
SCB_TAG {
alias SCB_FIFO_USE_COUNT
size 2
} }
SCB_SPARE { SCB_SPARE {
size 8 size 8
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
* $FreeBSD$ * $FreeBSD$
*/ */
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $" VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $"
PATCH_ARG_LIST = "struct ahd_softc *ahd" PATCH_ARG_LIST = "struct ahd_softc *ahd"
PREFIX = "ahd_" PREFIX = "ahd_"
...@@ -108,8 +108,8 @@ idle_loop_gsfifo_in_scsi_mode: ...@@ -108,8 +108,8 @@ idle_loop_gsfifo_in_scsi_mode:
test LQISTAT2, LQIGSAVAIL jz return; test LQISTAT2, LQIGSAVAIL jz return;
/* /*
* We have received good status for this transaction. There may * We have received good status for this transaction. There may
* still be data in our FIFOs draining to the host. Setup * still be data in our FIFOs draining to the host. Complete
* monitoring of the draining process or complete the SCB. * the SCB only if all data has transferred to the host.
*/ */
good_status_IU_done: good_status_IU_done:
bmov SCBPTR, GSFIFO, 2; bmov SCBPTR, GSFIFO, 2;
...@@ -135,42 +135,20 @@ gsfifo_complete_normally: ...@@ -135,42 +135,20 @@ gsfifo_complete_normally:
* 1) Configured and draining to the host, with a FIFO handler. * 1) Configured and draining to the host, with a FIFO handler.
* 2) Pending cfg4data, fifo not empty. * 2) Pending cfg4data, fifo not empty.
* *
* Case 1 can be detected by noticing that a longjmp is active for * Case 1 can be detected by noticing a non-zero FIFO active
* the FIFO and LONGJMP_SCB matches our SCB. In this case, we allow * count in the SCB. In this case, we allow the routine servicing
* the routine servicing the FIFO to complete the SCB. * the FIFO to complete the SCB.
* *
* Case 2 implies either a pending or yet to occur save data * Case 2 implies either a pending or yet to occur save data
* pointers for this same context in the other FIFO. So, if * pointers for this same context in the other FIFO. So, if
* we detect case 1, we will properly defer the post of the SCB * we detect case 1, we will properly defer the post of the SCB
* and achieve the desired result. The pending cfg4data will * and achieve the desired result. The pending cfg4data will
* notice that status has been received and complete the SCB. * notice that status has been received and complete the SCB.
*
* If the data-transfer has been completed, or no data transfer
* was needed for this SCB, it is safe to complete the command.
*/
test SCB_SGPTR, SG_LIST_NULL jz good_status_check_fifos;
/*
* All segments have been loaded (or no data transfer), so
* it is safe to complete the command. Since this was a
* cheap command to check for completion, loop to see if
* more entries can be removed from the GSFIFO.
*/ */
test SCB_FIFO_USE_COUNT, 0xFF jnz idle_loop_gsfifo_in_scsi_mode;
call complete; call complete;
END_CRITICAL; END_CRITICAL;
jmp idle_loop_gsfifo_in_scsi_mode; jmp idle_loop_gsfifo_in_scsi_mode;
BEGIN_CRITICAL;
good_status_check_fifos:
clc;
bmov ARG_1, SCBPTR, 2;
SET_MODE(M_DFF0, M_DFF0)
call check_fifo;
jc return;
SET_MODE(M_DFF1, M_DFF1)
call check_fifo;
jc return;
SET_MODE(M_SCSI, M_SCSI)
jmp queue_scb_completion;
END_CRITICAL;
idle_loop_service_fifos: idle_loop_service_fifos:
SET_MODE(M_DFF0, M_DFF0) SET_MODE(M_DFF0, M_DFF0)
...@@ -179,6 +157,7 @@ idle_loop_service_fifos: ...@@ -179,6 +157,7 @@ idle_loop_service_fifos:
idle_loop_next_fifo: idle_loop_next_fifo:
SET_MODE(M_DFF1, M_DFF1) SET_MODE(M_DFF1, M_DFF1)
test LONGJMP_ADDR[1], INVALID_ADDR jz longjmp; test LONGJMP_ADDR[1], INVALID_ADDR jz longjmp;
return:
ret; ret;
idle_loop_cchan: idle_loop_cchan:
...@@ -263,6 +242,13 @@ fetch_new_scb_done: ...@@ -263,6 +242,13 @@ fetch_new_scb_done:
clr A; clr A;
add CMDS_PENDING, 1; add CMDS_PENDING, 1;
adc CMDS_PENDING[1], A; adc CMDS_PENDING[1], A;
/*
* The FIFO use count field is shared with the
* tag set by the host so that our SCB dma engine
* knows the correct location to store the SCB.
* Set it to zero before processing the SCB.
*/
mov SCB_FIFO_USE_COUNT, ALLZEROS;
/* Update the next SCB address to download. */ /* Update the next SCB address to download. */
bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4; bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4;
mvi SCB_NEXT[1], SCB_LIST_NULL; mvi SCB_NEXT[1], SCB_LIST_NULL;
...@@ -366,8 +352,6 @@ dma_scb: ...@@ -366,8 +352,6 @@ dma_scb:
mov CCSCBCTL, SINDEX ret; mov CCSCBCTL, SINDEX ret;
BEGIN_CRITICAL; BEGIN_CRITICAL;
setjmp_setscb:
bmov LONGJMP_SCB, SCBPTR, 2;
setjmp: setjmp:
bmov LONGJMP_ADDR, STACK, 2 ret; bmov LONGJMP_ADDR, STACK, 2 ret;
setjmp_inline: setjmp_inline:
...@@ -1035,9 +1019,18 @@ freeze_queue: ...@@ -1035,9 +1019,18 @@ freeze_queue:
or SEQ_FLAGS2, SELECTOUT_QFROZEN; or SEQ_FLAGS2, SELECTOUT_QFROZEN;
mov A, ACCUM_SAVE ret; mov A, ACCUM_SAVE ret;
queue_arg1_scb_completion: /*
* Complete the current FIFO's SCB if data for this same
* SCB is not transferring in the other FIFO.
*/
SET_SRC_MODE M_DFF1;
SET_DST_MODE M_DFF1;
pkt_complete_scb_if_fifos_idle:
bmov ARG_1, SCBPTR, 2;
mvi DFFSXFRCTL, CLRCHN;
SET_MODE(M_SCSI, M_SCSI) SET_MODE(M_SCSI, M_SCSI)
bmov SCBPTR, ARG_1, 2; bmov SCBPTR, ARG_1, 2;
test SCB_FIFO_USE_COUNT, 0xFF jnz return;
queue_scb_completion: queue_scb_completion:
test SCB_SCSI_STATUS,0xff jnz bad_status; test SCB_SCSI_STATUS,0xff jnz bad_status;
/* /*
...@@ -1053,6 +1046,12 @@ bad_status: ...@@ -1053,6 +1046,12 @@ bad_status:
cmp SCB_SCSI_STATUS, STATUS_PKT_SENSE je upload_scb; cmp SCB_SCSI_STATUS, STATUS_PKT_SENSE je upload_scb;
call freeze_queue; call freeze_queue;
upload_scb: upload_scb:
/*
* Restore SCB TAG since we reuse this field
* in the sequencer. We don't want to corrupt
* it on the host.
*/
bmov SCB_TAG, SCBPTR, 2;
bmov SCB_NEXT_COMPLETE, COMPLETE_DMA_SCB_HEAD, 2; bmov SCB_NEXT_COMPLETE, COMPLETE_DMA_SCB_HEAD, 2;
bmov COMPLETE_DMA_SCB_HEAD, SCBPTR, 2; bmov COMPLETE_DMA_SCB_HEAD, SCBPTR, 2;
or SCB_SGPTR, SG_STATUS_VALID ret; or SCB_SGPTR, SG_STATUS_VALID ret;
...@@ -1363,7 +1362,7 @@ load_first_seg: ...@@ -1363,7 +1362,7 @@ load_first_seg:
clr SG_STATE ret; clr SG_STATE ret;
p_data_handle_xfer: p_data_handle_xfer:
call setjmp_setscb; call setjmp;
test SG_STATE, LOADING_NEEDED jnz service_fifo; test SG_STATE, LOADING_NEEDED jnz service_fifo;
p_data_clear_handler: p_data_clear_handler:
or LONGJMP_ADDR[1], INVALID_ADDR ret; or LONGJMP_ADDR[1], INVALID_ADDR ret;
...@@ -1667,6 +1666,7 @@ saveptr_active_fifo: ...@@ -1667,6 +1666,7 @@ saveptr_active_fifo:
or SEQINTCTL, IRET ret; or SEQINTCTL, IRET ret;
cfg4data_intr: cfg4data_intr:
inc SCB_FIFO_USE_COUNT;
test SCB_SGPTR[0], SG_LIST_NULL jnz pkt_handle_overrun; test SCB_SGPTR[0], SG_LIST_NULL jnz pkt_handle_overrun;
call load_first_seg; call load_first_seg;
call pkt_handle_xfer; call pkt_handle_xfer;
...@@ -1729,7 +1729,6 @@ cfg4icmd_intr: ...@@ -1729,7 +1729,6 @@ cfg4icmd_intr:
test DFSTATUS, FIFOEMP jz pkt_handle_overrun test DFSTATUS, FIFOEMP jz pkt_handle_overrun
pkt_handle_xfer: pkt_handle_xfer:
bmov LONGJMP_SCB, SCBPTR, 2;
test SG_STATE, LOADING_NEEDED jz pkt_last_seg; test SG_STATE, LOADING_NEEDED jz pkt_last_seg;
call setjmp; call setjmp;
test SEQINTSRC, SAVEPTRS jnz pkt_saveptrs; test SEQINTSRC, SAVEPTRS jnz pkt_saveptrs;
...@@ -1751,7 +1750,7 @@ pkt_service_fifo: ...@@ -1751,7 +1750,7 @@ pkt_service_fifo:
pkt_last_seg: pkt_last_seg:
call setjmp; call setjmp;
test SEQINTSRC, SAVEPTRS jnz pkt_saveptrs; test SEQINTSRC, SAVEPTRS jnz pkt_saveptrs;
test SG_CACHE_SHADOW, LAST_SEG_DONE jnz last_pkt_xfer_done; test SG_CACHE_SHADOW, LAST_SEG_DONE jnz pkt_last_seg_done;
test SCSIPHASE, ~DATA_PHASE_MASK jz . + 2; test SCSIPHASE, ~DATA_PHASE_MASK jz . + 2;
test SCSISIGO, ATNO jnz . + 2; test SCSISIGO, ATNO jnz . + 2;
test SSTAT2, NONPACKREQ jz return; test SSTAT2, NONPACKREQ jz return;
...@@ -1760,7 +1759,7 @@ pkt_last_seg: ...@@ -1760,7 +1759,7 @@ pkt_last_seg:
/* /*
* Either a SAVEPTRS interrupt condition is pending for this FIFO * Either a SAVEPTRS interrupt condition is pending for this FIFO
* or we have a pending nonpackreq for this FIFO. We differentiate * or we have a pending NONPACKREQ for this FIFO. We differentiate
* between the two by capturing the state of the SAVEPTRS interrupt * between the two by capturing the state of the SAVEPTRS interrupt
* prior to clearing this status and executing the common code for * prior to clearing this status and executing the common code for
* these two cases. * these two cases.
...@@ -1789,118 +1788,134 @@ pkt_saveptrs_wait_fifoemp: ...@@ -1789,118 +1788,134 @@ pkt_saveptrs_wait_fifoemp:
pkt_saveptrs_check_status: pkt_saveptrs_check_status:
or LONGJMP_ADDR[1], INVALID_ADDR; or LONGJMP_ADDR[1], INVALID_ADDR;
test REG0, SAVEPTRS jz unexpected_nonpkt_phase; test REG0, SAVEPTRS jz unexpected_nonpkt_phase;
test SCB_CONTROL, STATUS_RCVD jz pkt_saveptrs_clrchn; dec SCB_FIFO_USE_COUNT;
jmp last_pkt_complete; test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle;
pkt_saveptrs_clrchn:
mvi DFFSXFRCTL, CLRCHN ret; mvi DFFSXFRCTL, CLRCHN ret;
END_CRITICAL; END_CRITICAL;
last_pkt_xfer_done: /*
* LAST_SEG_DONE status has been seen in the current FIFO.
* This indicates that all of the allowed data for this
* command has transferred across the SCSI and host buses.
* Check for overrun and see if we can complete this command.
*/
pkt_last_seg_done:
BEGIN_CRITICAL; BEGIN_CRITICAL;
if ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0) {
or DFCNTRL, FIFOFLUSH;
}
test SCB_CONTROL, STATUS_RCVD jz wait_pkt_end;
check_overrun;
or SCB_SGPTR, SG_LIST_NULL;
/* /*
* It is safe to skip the other FIFO check since * Mark transfer as completed.
* we defer CLRCHN on SAVEPTRS until all data in
* the FIFO are seen by the host and a CFG4DATA
* in this FIFO for the same context is held off
* by hardware.
*/ */
last_pkt_queue_scb: or SCB_SGPTR, SG_LIST_NULL;
or LONGJMP_ADDR[1], INVALID_ADDR;
bmov ARG_1, SCBPTR, 2;
mvi DFFSXFRCTL, CLRCHN;
jmp queue_arg1_scb_completion;
last_pkt_complete:
bmov ARG_1, SCBPTR, 2;
mvi DFFSXFRCTL, CLRCHN;
check_other_fifo:
clc;
TOGGLE_DFF_MODE
call check_fifo;
jnc queue_arg1_scb_completion;
return:
ret;
wait_pkt_end: /*
* Wait for the current context to finish to verify that
* no overrun condition has occurred.
*/
test SEQINTSRC, CTXTDONE jnz pkt_ctxt_done;
call setjmp; call setjmp;
END_CRITICAL; pkt_wait_ctxt_done_loop:
wait_pkt_end_loop: test SEQINTSRC, CTXTDONE jnz pkt_ctxt_done;
test SEQINTSRC, CTXTDONE jnz pkt_end; /*
* A sufficiently large overrun or a NONPACKREQ may
* prevent CTXTDONE from ever asserting, so we must
* poll for these statuses too.
*/
check_overrun; check_overrun;
test SSTAT2, NONPACKREQ jz return; test SSTAT2, NONPACKREQ jz return;
test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase; test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase;
pkt_end: /* FALLTHROUGH */
BEGIN_CRITICAL;
pkt_ctxt_done:
check_overrun; check_overrun;
or LONGJMP_ADDR[1], INVALID_ADDR; or LONGJMP_ADDR[1], INVALID_ADDR;
or SCB_SGPTR, SG_LIST_NULL; /*
test SCB_CONTROL, STATUS_RCVD jnz last_pkt_complete; * If status has been received, it is safe to skip
* the check to see if another FIFO is active because
* LAST_SEG_DONE has been observed. However, we check
* the FIFO anyway since it costs us only one extra
* instruction to leverage common code to perform the
* SCB completion.
*/
dec SCB_FIFO_USE_COUNT;
test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle;
mvi DFFSXFRCTL, CLRCHN ret; mvi DFFSXFRCTL, CLRCHN ret;
END_CRITICAL; END_CRITICAL;
/*
* Must wait until CDB xfer is over before issuing the
* clear channel.
*/
pkt_handle_cdb:
call setjmp;
test SG_CACHE_SHADOW, LAST_SEG_DONE jz return;
or LONGJMP_ADDR[1], INVALID_ADDR;
mvi DFFSXFRCTL, CLRCHN ret;
/* /*
* Watch over the status transfer. Our host sense buffer is * Watch over the status transfer. Our host sense buffer is
* large enough to take the maximum allowed status packet. * large enough to take the maximum allowed status packet.
* None-the-less, we must still catch and report overruns to * None-the-less, we must still catch and report overruns to
* the host. * the host. Additionally, properly catch unexpected non-packet
* phases that are typically caused by CRC errors in status packet
* transmission.
*/ */
pkt_handle_status: pkt_handle_status:
call setjmp_setscb; call setjmp;
test SG_CACHE_SHADOW, LAST_SEG_DONE jz check_status_overrun; test SG_CACHE_SHADOW, LAST_SEG_DONE jnz pkt_status_check_overrun;
test SEQINTSRC, CTXTDONE jz return; test SEQINTSRC, CTXTDONE jz pkt_status_check_nonpackreq;
status_IU_done: test SG_CACHE_SHADOW, LAST_SEG_DONE jnz pkt_status_check_overrun;
BEGIN_CRITICAL; pkt_status_IU_done:
if ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0) { if ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0) {
or DFCNTRL, FIFOFLUSH; or DFCNTRL, FIFOFLUSH;
} }
test DFSTATUS, FIFOEMP jz return;
BEGIN_CRITICAL;
or LONGJMP_ADDR[1], INVALID_ADDR; or LONGJMP_ADDR[1], INVALID_ADDR;
mvi SCB_SCSI_STATUS, STATUS_PKT_SENSE; mvi SCB_SCSI_STATUS, STATUS_PKT_SENSE;
or SCB_CONTROL, STATUS_RCVD; or SCB_CONTROL, STATUS_RCVD;
jmp last_pkt_complete; jmp pkt_complete_scb_if_fifos_idle;
END_CRITICAL; END_CRITICAL;
check_status_overrun: pkt_status_check_overrun:
/* /*
* We've filled the entire sense buffer. * Status PKT overruns are uncerimoniously recovered with a
* Wait for either context done or a negative * bus reset. If we've overrun, let the host know so that
* shaddow count. If the context completes without * recovery can be performed.
* causing the shaddow count to go negative, then *
* this was a successful transfer up to the status * LAST_SEG_DONE has been observed. If either CTXTDONE or
* limit. Otherwise we report the error. * a NONPACKREQ phase change have occurred and the FIFO is
*/ * empty, there is no overrun.
test SHCNT[2], 0xFF jnz report_status_overrun; */
test SEQINTSRC, CTXTDONE jz return; test DFSTATUS, FIFOEMP jz pkt_status_report_overrun;
test SHCNT[2], 0xFF jz status_IU_done; test SEQINTSRC, CTXTDONE jz . + 2;
report_status_overrun: test DFSTATUS, FIFOEMP jnz pkt_status_IU_done;
test SCSIPHASE, ~DATA_PHASE_MASK jz return;
test DFSTATUS, FIFOEMP jnz pkt_status_check_nonpackreq;
pkt_status_report_overrun:
SET_SEQINTCODE(STATUS_OVERRUN) SET_SEQINTCODE(STATUS_OVERRUN)
jmp status_IU_done; /* SEQUENCER RESTARTED */
pkt_status_check_nonpackreq:
SET_SRC_MODE M_DFF0; /*
SET_DST_MODE M_DFF0; * CTXTDONE may be held off if a NONPACKREQ is associated with
BEGIN_CRITICAL; * the current context. If a NONPACKREQ is observed, decide
check_fifo: * if it is for the current context. If it is for the current
test LONGJMP_ADDR[1], INVALID_ADDR jnz return; * context, we must defer NONPACKREQ processing until all data
mov A, ARG_2; * has transferred to the host.
cmp LONGJMP_SCB[1], A jne return;
mov A, ARG_1;
cmp LONGJMP_SCB[0], A jne return;
stc ret;
END_CRITICAL;
/*
* Must wait until CDB xfer is over before issuing the
* clear channel.
*/ */
pkt_handle_cdb: test SCSIPHASE, ~DATA_PHASE_MASK jz return;
call setjmp_setscb; test SCSISIGO, ATNO jnz . + 2;
test SG_CACHE_SHADOW, LAST_SEG_DONE jz return; test SSTAT2, NONPACKREQ jz return;
or LONGJMP_ADDR[1], INVALID_ADDR; test SEQINTSRC, CTXTDONE jnz pkt_status_IU_done;
mvi DFFSXFRCTL, CLRCHN ret; test DFSTATUS, FIFOEMP jz return;
/*
* The unexpected nonpkt phase handler assumes that any
* data channel use will have a FIFO reference count. It
* turns out that the status handler doesn't need a refernce
* count since the status received flag, and thus completion
* processing, cannot be set until the handler is finished.
* We increment the count here to make the nonpkt handler
* happy.
*/
inc SCB_FIFO_USE_COUNT;
/* FALLTHROUGH */
/* /*
* Nonpackreq is a polled status. It can come true in three situations: * Nonpackreq is a polled status. It can come true in three situations:
...@@ -1929,6 +1944,7 @@ unexpected_nonpkt_phase: ...@@ -1929,6 +1944,7 @@ unexpected_nonpkt_phase:
SET_SRC_MODE M_DFF0; SET_SRC_MODE M_DFF0;
SET_DST_MODE M_DFF0; SET_DST_MODE M_DFF0;
or LONGJMP_ADDR[1], INVALID_ADDR; or LONGJMP_ADDR[1], INVALID_ADDR;
dec SCB_FIFO_USE_COUNT;
mvi DFFSXFRCTL, CLRCHN; mvi DFFSXFRCTL, CLRCHN;
mvi CLRSINT2, CLRNONPACKREQ; mvi CLRSINT2, CLRNONPACKREQ;
test SCSIPHASE, ~(MSG_IN_PHASE|MSG_OUT_PHASE) jnz illegal_phase; test SCSIPHASE, ~(MSG_IN_PHASE|MSG_OUT_PHASE) jnz illegal_phase;
...@@ -1970,7 +1986,8 @@ overrun_load_done: ...@@ -1970,7 +1986,8 @@ overrun_load_done:
pkt_overrun_end: pkt_overrun_end:
or SCB_RESIDUAL_SGPTR, SG_OVERRUN_RESID; or SCB_RESIDUAL_SGPTR, SG_OVERRUN_RESID;
test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase; test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase;
test SCB_CONTROL, STATUS_RCVD jnz last_pkt_queue_scb; dec SCB_FIFO_USE_COUNT;
test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle;
or LONGJMP_ADDR[1], INVALID_ADDR; or LONGJMP_ADDR[1], INVALID_ADDR;
mvi DFFSXFRCTL, CLRCHN ret; mvi DFFSXFRCTL, CLRCHN ret;
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#183 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#184 $
* *
* $FreeBSD$ * $FreeBSD$
*/ */
...@@ -604,7 +604,16 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat) ...@@ -604,7 +604,16 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
break; break;
case STATUS_OVERRUN: case STATUS_OVERRUN:
{ {
printf("%s: Status Overrun", ahd_name(ahd)); struct scb *scb;
u_int scbid;
scbid = ahd_get_scbptr(ahd);
scb = ahd_lookup_scb(ahd, scbid);
if (scb != NULL)
ahd_print_path(ahd, scb);
else
printf("%s: ", ahd_name(ahd));
printf("SCB %d Packetized Status Overrun", scbid);
ahd_dump_card_state(ahd); ahd_dump_card_state(ahd);
ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE); ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
break; break;
...@@ -6056,7 +6065,6 @@ ahd_chip_init(struct ahd_softc *ahd) ...@@ -6056,7 +6065,6 @@ ahd_chip_init(struct ahd_softc *ahd)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i); ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i);
ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR); ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR);
ahd_outw(ahd, LONGJMP_SCB, SCB_LIST_NULL);
ahd_outb(ahd, SG_STATE, 0); ahd_outb(ahd, SG_STATE, 0);
ahd_outb(ahd, CLRSEQINTSRC, 0xFF); ahd_outb(ahd, CLRSEQINTSRC, 0xFF);
ahd_outb(ahd, SEQIMODE, ahd_outb(ahd, SEQIMODE,
...@@ -8611,11 +8619,11 @@ ahd_dump_card_state(struct ahd_softc *ahd) ...@@ -8611,11 +8619,11 @@ ahd_dump_card_state(struct ahd_softc *ahd)
LIST_FOREACH(scb, &ahd->pending_scbs, pending_links) { LIST_FOREACH(scb, &ahd->pending_scbs, pending_links) {
if (i++ > AHD_SCB_MAX) if (i++ > AHD_SCB_MAX)
break; break;
cur_col = printf("\n%3d ", SCB_GET_TAG(scb)); cur_col = printf("\n%3d FIFO_USE[0x%x] ", SCB_GET_TAG(scb),
ahd_inb(ahd, SCB_FIFO_USE_COUNT));
ahd_set_scbptr(ahd, SCB_GET_TAG(scb)); ahd_set_scbptr(ahd, SCB_GET_TAG(scb));
ahd_scb_control_print(ahd_inb(ahd, SCB_CONTROL), &cur_col, 60); ahd_scb_control_print(ahd_inb(ahd, SCB_CONTROL), &cur_col, 60);
ahd_scb_scsiid_print(ahd_inb(ahd, SCB_SCSIID), &cur_col, 60); ahd_scb_scsiid_print(ahd_inb(ahd, SCB_SCSIID), &cur_col, 60);
ahd_scb_tag_print(ahd_inb(ahd, SCB_TAG), &cur_col, 60);
} }
printf("\nTotal %d\n", i); printf("\nTotal %d\n", i);
...@@ -8678,12 +8686,10 @@ ahd_dump_card_state(struct ahd_softc *ahd) ...@@ -8678,12 +8686,10 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i); ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i);
fifo_scbptr = ahd_get_scbptr(ahd); fifo_scbptr = ahd_get_scbptr(ahd);
printf("\n%s: FIFO%d %s, LONGJMP == 0x%x, " printf("\n%s: FIFO%d %s, LONGJMP == 0x%x, SCB 0x%x\n",
"SCB 0x%x, LJSCB 0x%x\n",
ahd_name(ahd), i, ahd_name(ahd), i,
(dffstat & (FIFO0FREE << i)) ? "Free" : "Active", (dffstat & (FIFO0FREE << i)) ? "Free" : "Active",
ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr, ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr);
ahd_inw(ahd, LONGJMP_SCB));
cur_col = 0; cur_col = 0;
ahd_seqimode_print(ahd_inb(ahd, SEQIMODE), &cur_col, 50); ahd_seqimode_print(ahd_inb(ahd, SEQIMODE), &cur_col, 50);
ahd_seqintsrc_print(ahd_inb(ahd, SEQINTSRC), &cur_col, 50); ahd_seqintsrc_print(ahd_inb(ahd, SEQINTSRC), &cur_col, 50);
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated * DO NOT EDIT - This file is automatically generated
* from the following source files: * from the following source files:
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $
*/ */
typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef int (ahd_reg_print_t)(u_int, u_int *, u_int);
typedef struct ahd_reg_parse_entry { typedef struct ahd_reg_parse_entry {
...@@ -1923,18 +1923,11 @@ ahd_reg_print_t ahd_longjmp_addr_print; ...@@ -1923,18 +1923,11 @@ ahd_reg_print_t ahd_longjmp_addr_print;
ahd_print_register(NULL, 0, "LONGJMP_ADDR", 0xf8, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "LONGJMP_ADDR", 0xf8, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_longjmp_scb_print;
#else
#define ahd_longjmp_scb_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "LONGJMP_SCB", 0xfa, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_accum_save_print; ahd_reg_print_t ahd_accum_save_print;
#else #else
#define ahd_accum_save_print(regvalue, cur_col, wrap) \ #define ahd_accum_save_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "ACCUM_SAVE", 0xfc, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "ACCUM_SAVE", 0xfa, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -2246,59 +2239,45 @@ ahd_reg_print_t ahd_scb_sense_busaddr_print; ...@@ -2246,59 +2239,45 @@ ahd_reg_print_t ahd_scb_sense_busaddr_print;
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_tag_print; ahd_reg_print_t ahd_scb_dataptr_print;
#else
#define ahd_scb_tag_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TAG", 0x190, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_cdb_len_print;
#else
#define ahd_scb_cdb_len_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_CDB_LEN", 0x192, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_task_management_print;
#else #else
#define ahd_scb_task_management_print(regvalue, cur_col, wrap) \ #define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT", 0x193, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x190, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_next_print; ahd_reg_print_t ahd_scb_datacnt_print;
#else #else
#define ahd_scb_next_print(regvalue, cur_col, wrap) \ #define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_NEXT", 0x194, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_DATACNT", 0x198, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_next2_print; ahd_reg_print_t ahd_scb_sgptr_print;
#else #else
#define ahd_scb_next2_print(regvalue, cur_col, wrap) \ #define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_NEXT2", 0x196, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_SGPTR", 0x19c, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_dataptr_print; ahd_reg_print_t ahd_scb_busaddr_print;
#else #else
#define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \ #define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x198, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1a0, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_datacnt_print; ahd_reg_print_t ahd_scb_next_print;
#else #else
#define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \ #define ahd_scb_next_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_DATACNT", 0x1a0, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_NEXT", 0x1a4, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_sgptr_print; ahd_reg_print_t ahd_scb_next2_print;
#else #else
#define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \ #define ahd_scb_next2_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_SGPTR", 0x1a4, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_NEXT2", 0x1a6, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -2330,10 +2309,24 @@ ahd_reg_print_t ahd_scb_task_attribute_print; ...@@ -2330,10 +2309,24 @@ ahd_reg_print_t ahd_scb_task_attribute_print;
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_busaddr_print; ahd_reg_print_t ahd_scb_cdb_len_print;
#else #else
#define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \ #define ahd_scb_cdb_len_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1ac, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_CDB_LEN", 0x1ac, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_task_management_print;
#else
#define ahd_scb_task_management_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT", 0x1ad, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_tag_print;
#else
#define ahd_scb_tag_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TAG", 0x1ae, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -3508,9 +3501,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3508,9 +3501,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define LONGJMP_ADDR 0xf8 #define LONGJMP_ADDR 0xf8
#define LONGJMP_SCB 0xfa #define ACCUM_SAVE 0xfa
#define ACCUM_SAVE 0xfc
#define WAITING_SCB_TAILS 0x100 #define WAITING_SCB_TAILS 0x100
...@@ -3656,29 +3647,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3656,29 +3647,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SCB_SENSE_BUSADDR 0x18c #define SCB_SENSE_BUSADDR 0x18c
#define SCB_NEXT_COMPLETE 0x18c #define SCB_NEXT_COMPLETE 0x18c
#define SCB_TAG 0x190 #define SCB_DATAPTR 0x190
#define SCB_CDB_LEN 0x192
#define SCB_CDB_LEN_PTR 0x80
#define SCB_TASK_MANAGEMENT 0x193
#define SCB_NEXT 0x194
#define SCB_NEXT_SCB_BUSADDR 0x194
#define SCB_NEXT2 0x196 #define SCB_DATACNT 0x198
#define SCB_DATAPTR 0x198
#define SCB_DATACNT 0x1a0
#define SG_LAST_SEG 0x80 #define SG_LAST_SEG 0x80
#define SG_HIGH_ADDR_BITS 0x7f #define SG_HIGH_ADDR_BITS 0x7f
#define SCB_SGPTR 0x1a4 #define SCB_SGPTR 0x19c
#define SG_STATUS_VALID 0x04 #define SG_STATUS_VALID 0x04
#define SG_FULL_RESID 0x02 #define SG_FULL_RESID 0x02
#define SG_LIST_NULL 0x01 #define SG_LIST_NULL 0x01
#define SCB_BUSADDR 0x1a0
#define SCB_NEXT 0x1a4
#define SCB_NEXT_SCB_BUSADDR 0x1a4
#define SCB_NEXT2 0x1a6
#define SCB_CONTROL 0x1a8 #define SCB_CONTROL 0x1a8
#define TARGET_SCB 0x80 #define TARGET_SCB 0x80
#define DISCENB 0x40 #define DISCENB 0x40
...@@ -3697,7 +3683,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3697,7 +3683,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SCB_TASK_ATTRIBUTE 0x1ab #define SCB_TASK_ATTRIBUTE 0x1ab
#define SCB_BUSADDR 0x1ac #define SCB_CDB_LEN 0x1ac
#define SCB_CDB_LEN_PTR 0x80
#define SCB_TASK_MANAGEMENT 0x1ad
#define SCB_TAG 0x1ae
#define SCB_FIFO_USE_COUNT 0x1ae
#define SCB_SPARE 0x1b0 #define SCB_SPARE 0x1b0
#define SCB_PKT_LUN 0x1b0 #define SCB_PKT_LUN 0x1b0
...@@ -3775,5 +3767,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3775,5 +3767,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
/* Exported Labels */ /* Exported Labels */
#define LABEL_seq_isr 0x26d #define LABEL_seq_isr 0x264
#define LABEL_timer_isr 0x269 #define LABEL_timer_isr 0x260
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated * DO NOT EDIT - This file is automatically generated
* from the following source files: * from the following source files:
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $
*/ */
#include "aic79xx_osm.h" #include "aic79xx_osm.h"
...@@ -3097,18 +3097,11 @@ ahd_longjmp_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3097,18 +3097,11 @@ ahd_longjmp_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
0xf8, regvalue, cur_col, wrap)); 0xf8, regvalue, cur_col, wrap));
} }
int
ahd_longjmp_scb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "LONGJMP_SCB",
0xfa, regvalue, cur_col, wrap));
}
int int
ahd_accum_save_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_accum_save_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "ACCUM_SAVE", return (ahd_print_register(NULL, 0, "ACCUM_SAVE",
0xfc, regvalue, cur_col, wrap)); 0xfa, regvalue, cur_col, wrap));
} }
int int
...@@ -3491,50 +3484,11 @@ ahd_scb_sense_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3491,50 +3484,11 @@ ahd_scb_sense_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x18c, regvalue, cur_col, wrap)); 0x18c, regvalue, cur_col, wrap));
} }
int
ahd_scb_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TAG",
0x190, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t SCB_CDB_LEN_parse_table[] = {
{ "SCB_CDB_LEN_PTR", 0x80, 0x80 }
};
int
ahd_scb_cdb_len_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(SCB_CDB_LEN_parse_table, 1, "SCB_CDB_LEN",
0x192, regvalue, cur_col, wrap));
}
int
ahd_scb_task_management_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT",
0x193, regvalue, cur_col, wrap));
}
int
ahd_scb_next_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT",
0x194, regvalue, cur_col, wrap));
}
int
ahd_scb_next2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT2",
0x196, regvalue, cur_col, wrap));
}
int int
ahd_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "SCB_DATAPTR", return (ahd_print_register(NULL, 0, "SCB_DATAPTR",
0x198, regvalue, cur_col, wrap)); 0x190, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_DATACNT_parse_table[] = { static ahd_reg_parse_entry_t SCB_DATACNT_parse_table[] = {
...@@ -3546,7 +3500,7 @@ int ...@@ -3546,7 +3500,7 @@ int
ahd_scb_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(SCB_DATACNT_parse_table, 2, "SCB_DATACNT", return (ahd_print_register(SCB_DATACNT_parse_table, 2, "SCB_DATACNT",
0x1a0, regvalue, cur_col, wrap)); 0x198, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_SGPTR_parse_table[] = { static ahd_reg_parse_entry_t SCB_SGPTR_parse_table[] = {
...@@ -3559,9 +3513,30 @@ int ...@@ -3559,9 +3513,30 @@ int
ahd_scb_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(SCB_SGPTR_parse_table, 3, "SCB_SGPTR", return (ahd_print_register(SCB_SGPTR_parse_table, 3, "SCB_SGPTR",
0x19c, regvalue, cur_col, wrap));
}
int
ahd_scb_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_BUSADDR",
0x1a0, regvalue, cur_col, wrap));
}
int
ahd_scb_next_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT",
0x1a4, regvalue, cur_col, wrap)); 0x1a4, regvalue, cur_col, wrap));
} }
int
ahd_scb_next2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT2",
0x1a6, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t SCB_CONTROL_parse_table[] = { static ahd_reg_parse_entry_t SCB_CONTROL_parse_table[] = {
{ "SCB_TAG_TYPE", 0x03, 0x03 }, { "SCB_TAG_TYPE", 0x03, 0x03 },
{ "DISCONNECTED", 0x04, 0x04 }, { "DISCONNECTED", 0x04, 0x04 },
...@@ -3609,13 +3584,31 @@ ahd_scb_task_attribute_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3609,13 +3584,31 @@ ahd_scb_task_attribute_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x1ab, regvalue, cur_col, wrap)); 0x1ab, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_CDB_LEN_parse_table[] = {
{ "SCB_CDB_LEN_PTR", 0x80, 0x80 }
};
int int
ahd_scb_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_cdb_len_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "SCB_BUSADDR", return (ahd_print_register(SCB_CDB_LEN_parse_table, 1, "SCB_CDB_LEN",
0x1ac, regvalue, cur_col, wrap)); 0x1ac, regvalue, cur_col, wrap));
} }
int
ahd_scb_task_management_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT",
0x1ad, regvalue, cur_col, wrap));
}
int
ahd_scb_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TAG",
0x1ae, regvalue, cur_col, wrap));
}
int int
ahd_scb_spare_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_spare_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
......
...@@ -2,102 +2,89 @@ ...@@ -2,102 +2,89 @@
* DO NOT EDIT - This file is automatically generated * DO NOT EDIT - This file is automatically generated
* from the following source files: * from the following source files:
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $
*/ */
static uint8_t seqprog[] = { static uint8_t seqprog[] = {
0xff, 0x02, 0x06, 0x78, 0xff, 0x02, 0x06, 0x78,
0x00, 0xea, 0x50, 0x59, 0x00, 0xea, 0x36, 0x59,
0x01, 0xea, 0x04, 0x30, 0x01, 0xea, 0x04, 0x30,
0xff, 0x04, 0x0c, 0x78, 0xff, 0x04, 0x0c, 0x78,
0x19, 0xea, 0x50, 0x59, 0x19, 0xea, 0x36, 0x59,
0x19, 0xea, 0x04, 0x00, 0x19, 0xea, 0x04, 0x00,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x60, 0x3a, 0x1a, 0x68, 0x60, 0x3a, 0x1a, 0x68,
0x04, 0x47, 0x1b, 0x68, 0x04, 0x47, 0x1b, 0x68,
0xff, 0x21, 0x1b, 0x70, 0xff, 0x21, 0x1b, 0x70,
0x40, 0x4b, 0x92, 0x69, 0x40, 0x4b, 0x78, 0x69,
0x00, 0xe2, 0x54, 0x59, 0x00, 0xe2, 0x3a, 0x59,
0x40, 0x4b, 0x92, 0x69, 0x40, 0x4b, 0x78, 0x69,
0x20, 0x4b, 0x82, 0x69, 0x20, 0x4b, 0x68, 0x69,
0xfc, 0x42, 0x24, 0x78, 0xfc, 0x42, 0x24, 0x78,
0x10, 0x40, 0x24, 0x78, 0x10, 0x40, 0x24, 0x78,
0x00, 0xe2, 0xe0, 0x5d, 0x00, 0xe2, 0xb6, 0x5d,
0x20, 0x4d, 0x28, 0x78, 0x20, 0x4d, 0x28, 0x78,
0x00, 0xe2, 0xe0, 0x5d, 0x00, 0xe2, 0xb6, 0x5d,
0x30, 0x3f, 0xc0, 0x09, 0x30, 0x3f, 0xc0, 0x09,
0x30, 0xe0, 0x30, 0x60, 0x30, 0xe0, 0x30, 0x60,
0x7f, 0x4a, 0x94, 0x08, 0x7f, 0x4a, 0x94, 0x08,
0x00, 0xe2, 0x32, 0x40, 0x00, 0xe2, 0x32, 0x40,
0xc0, 0x4a, 0x94, 0x00, 0xc0, 0x4a, 0x94, 0x00,
0x00, 0xe2, 0x3e, 0x58, 0x00, 0xe2, 0x3e, 0x58,
0x00, 0xe2, 0x70, 0x58, 0x00, 0xe2, 0x56, 0x58,
0x00, 0xe2, 0x80, 0x58, 0x00, 0xe2, 0x66, 0x58,
0x00, 0xe2, 0x06, 0x40, 0x00, 0xe2, 0x06, 0x40,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x01, 0x52, 0x96, 0x7d, 0x01, 0x52, 0x64, 0x78,
0x02, 0x58, 0x50, 0x31, 0x02, 0x58, 0x50, 0x31,
0xff, 0xea, 0x10, 0x0b, 0xff, 0xea, 0x10, 0x0b,
0xff, 0x93, 0x4f, 0x78, 0xff, 0xad, 0x4f, 0x78,
0x50, 0x4b, 0x4a, 0x68, 0x50, 0x4b, 0x4a, 0x68,
0xbf, 0x3a, 0x74, 0x08, 0xbf, 0x3a, 0x74, 0x08,
0x14, 0xea, 0x50, 0x59, 0x14, 0xea, 0x36, 0x59,
0x14, 0xea, 0x04, 0x00, 0x14, 0xea, 0x04, 0x00,
0x08, 0xa8, 0x51, 0x03, 0x08, 0xa8, 0x51, 0x03,
0x01, 0xa4, 0x57, 0x78, 0xff, 0xae, 0x3f, 0x68,
0x00, 0xe2, 0x4c, 0x5b, 0x00, 0xe2, 0x38, 0x5b,
0x00, 0xe2, 0x3e, 0x40, 0x00, 0xe2, 0x3e, 0x40,
0xff, 0xea, 0xd4, 0x19, 0x00, 0xea, 0x2a, 0x59,
0x02, 0xa8, 0x84, 0x32,
0x00, 0xea, 0x44, 0x59,
0x01, 0xea, 0x00, 0x30, 0x01, 0xea, 0x00, 0x30,
0x00, 0xe2, 0xcc, 0x5d, 0x80, 0xf9, 0x5e, 0x68,
0x00, 0xe2, 0x96, 0x4d, 0x00, 0xe2, 0x28, 0x59,
0x11, 0xea, 0x44, 0x59, 0x11, 0xea, 0x2a, 0x59,
0x11, 0xea, 0x00, 0x00, 0x11, 0xea, 0x00, 0x00,
0x00, 0xe2, 0xcc, 0x5d, 0x80, 0xf9, 0x28, 0x79,
0x00, 0xe2, 0x96, 0x4d,
0x33, 0xea, 0x44, 0x59,
0x33, 0xea, 0x00, 0x00,
0x00, 0xe2, 0x44, 0x43,
0x00, 0xea, 0x44, 0x59,
0x01, 0xea, 0x00, 0x30,
0x80, 0xf9, 0x78, 0x68,
0x00, 0xe2, 0x42, 0x59,
0x11, 0xea, 0x44, 0x59,
0x11, 0xea, 0x00, 0x00,
0x80, 0xf9, 0x42, 0x79,
0xff, 0xea, 0xd4, 0x0d, 0xff, 0xea, 0xd4, 0x0d,
0x22, 0xea, 0x44, 0x59, 0x22, 0xea, 0x2a, 0x59,
0x22, 0xea, 0x00, 0x00, 0x22, 0xea, 0x00, 0x00,
0x10, 0x16, 0x8a, 0x78, 0x10, 0x16, 0x70, 0x78,
0x01, 0x0b, 0xa2, 0x32, 0x01, 0x0b, 0xa2, 0x32,
0x10, 0x16, 0x2c, 0x00, 0x10, 0x16, 0x2c, 0x00,
0x18, 0xad, 0xf8, 0x78, 0x18, 0xad, 0xe0, 0x78,
0x04, 0xad, 0xc6, 0x68, 0x04, 0xad, 0xac, 0x68,
0x80, 0xad, 0x96, 0x7d, 0x80, 0xad, 0x64, 0x78,
0x10, 0xad, 0x94, 0x78, 0x10, 0xad, 0x7a, 0x78,
0xe7, 0xad, 0x5a, 0x0d, 0xe7, 0xad, 0x5a, 0x0d,
0xe7, 0xad, 0x5a, 0x09, 0xe7, 0xad, 0x5a, 0x09,
0x00, 0xe2, 0xa2, 0x58, 0x00, 0xe2, 0x88, 0x58,
0xff, 0xea, 0x56, 0x02, 0xff, 0xea, 0x56, 0x02,
0x04, 0x7c, 0x78, 0x32, 0x04, 0x7c, 0x78, 0x32,
0x20, 0x16, 0x96, 0x7d, 0x20, 0x16, 0x64, 0x78,
0x04, 0x38, 0x79, 0x32, 0x04, 0x38, 0x79, 0x32,
0x80, 0x37, 0x6f, 0x16, 0x80, 0x37, 0x6f, 0x16,
0xff, 0x2d, 0xb1, 0x60, 0xff, 0x2d, 0x97, 0x60,
0xff, 0x29, 0xb1, 0x60, 0xff, 0x29, 0x97, 0x60,
0x40, 0x51, 0xc1, 0x78, 0x40, 0x51, 0xa7, 0x78,
0xff, 0x4f, 0xb1, 0x68, 0xff, 0x4f, 0x97, 0x68,
0xff, 0x4d, 0xc1, 0x19, 0xff, 0x4d, 0xc1, 0x19,
0x00, 0x4e, 0xd5, 0x19, 0x00, 0x4e, 0xd5, 0x19,
0x00, 0xe2, 0xc0, 0x50, 0x00, 0xe2, 0xa6, 0x50,
0x01, 0x4c, 0xc1, 0x31, 0x01, 0x4c, 0xc1, 0x31,
0x00, 0x50, 0xd5, 0x19, 0x00, 0x50, 0xd5, 0x19,
0x00, 0xe2, 0xc0, 0x48, 0x00, 0xe2, 0xa6, 0x48,
0x80, 0x18, 0x96, 0x7d, 0x80, 0x18, 0x64, 0x78,
0x02, 0x4a, 0x1d, 0x30, 0x02, 0x4a, 0x1d, 0x30,
0x10, 0xea, 0x18, 0x00, 0x10, 0xea, 0x18, 0x00,
0x60, 0x18, 0x30, 0x00, 0x60, 0x18, 0x30, 0x00,
...@@ -105,35 +92,36 @@ static uint8_t seqprog[] = { ...@@ -105,35 +92,36 @@ static uint8_t seqprog[] = {
0x02, 0xea, 0x02, 0x00, 0x02, 0xea, 0x02, 0x00,
0xff, 0xea, 0xa0, 0x0a, 0xff, 0xea, 0xa0, 0x0a,
0x80, 0x18, 0x30, 0x04, 0x80, 0x18, 0x30, 0x04,
0x40, 0xad, 0x96, 0x7d, 0x40, 0xad, 0x64, 0x78,
0xe7, 0xad, 0x5a, 0x09, 0xe7, 0xad, 0x5a, 0x09,
0x02, 0xa8, 0x40, 0x31, 0x02, 0xa8, 0x40, 0x31,
0xff, 0xea, 0xc0, 0x09, 0xff, 0xea, 0xc0, 0x09,
0x01, 0x4e, 0x9d, 0x1a, 0x01, 0x4e, 0x9d, 0x1a,
0x00, 0x4f, 0x9f, 0x22, 0x00, 0x4f, 0x9f, 0x22,
0x04, 0x94, 0x49, 0x32, 0x01, 0xea, 0x5c, 0x33,
0xff, 0xea, 0x2a, 0x03, 0x04, 0xa4, 0x49, 0x32,
0xff, 0xea, 0x2e, 0x03, 0xff, 0xea, 0x4a, 0x03,
0xff, 0xea, 0x4e, 0x03,
0x01, 0x10, 0xd4, 0x31, 0x01, 0x10, 0xd4, 0x31,
0x10, 0xa8, 0xed, 0x68, 0x10, 0xa8, 0xd5, 0x68,
0x3d, 0xa9, 0xc5, 0x29, 0x3d, 0xa9, 0xc5, 0x29,
0xfe, 0xe2, 0xc4, 0x09, 0xfe, 0xe2, 0xc4, 0x09,
0x01, 0xea, 0xc6, 0x01, 0x01, 0xea, 0xc6, 0x01,
0x02, 0xe2, 0xc8, 0x31, 0x02, 0xe2, 0xc8, 0x31,
0x02, 0xec, 0x50, 0x31, 0x02, 0xec, 0x50, 0x31,
0x02, 0xa0, 0xda, 0x31, 0x02, 0xa0, 0xda, 0x31,
0xff, 0xa9, 0xec, 0x70, 0xff, 0xa9, 0xd4, 0x70,
0x02, 0xa0, 0x28, 0x37, 0x02, 0xa0, 0x48, 0x37,
0xff, 0x21, 0xf5, 0x70, 0xff, 0x21, 0xdd, 0x70,
0x02, 0x22, 0x51, 0x31, 0x02, 0x22, 0x51, 0x31,
0x02, 0xa0, 0x2c, 0x33, 0x02, 0xa0, 0x4c, 0x33,
0x02, 0xa0, 0x44, 0x36, 0x02, 0xa0, 0x44, 0x36,
0x02, 0xa0, 0x40, 0x32, 0x02, 0xa0, 0x40, 0x32,
0x02, 0xa0, 0x44, 0x36, 0x02, 0xa0, 0x44, 0x36,
0x04, 0x47, 0xfd, 0x68, 0x04, 0x47, 0xe5, 0x68,
0x40, 0x16, 0x28, 0x69, 0x40, 0x16, 0x10, 0x69,
0xff, 0x2d, 0x2d, 0x61, 0xff, 0x2d, 0x15, 0x61,
0xff, 0x29, 0x97, 0x75, 0xff, 0x29, 0x65, 0x70,
0x01, 0x37, 0xc1, 0x31, 0x01, 0x37, 0xc1, 0x31,
0x02, 0x28, 0x55, 0x32, 0x02, 0x28, 0x55, 0x32,
0x01, 0xea, 0x5a, 0x01, 0x01, 0xea, 0x5a, 0x01,
...@@ -145,26 +133,25 @@ static uint8_t seqprog[] = { ...@@ -145,26 +133,25 @@ static uint8_t seqprog[] = {
0x01, 0x50, 0xa1, 0x1a, 0x01, 0x50, 0xa1, 0x1a,
0xff, 0x4e, 0x9d, 0x1a, 0xff, 0x4e, 0x9d, 0x1a,
0xff, 0x4f, 0x9f, 0x22, 0xff, 0x4f, 0x9f, 0x22,
0xff, 0x8d, 0x21, 0x71, 0xff, 0x8d, 0x09, 0x71,
0x80, 0xac, 0x20, 0x71, 0x80, 0xac, 0x08, 0x71,
0x20, 0x16, 0x20, 0x69, 0x20, 0x16, 0x08, 0x69,
0x02, 0x8c, 0x51, 0x31, 0x02, 0x8c, 0x51, 0x31,
0x00, 0xe2, 0x0a, 0x41, 0x00, 0xe2, 0xf2, 0x40,
0x01, 0xac, 0x08, 0x31, 0x01, 0xac, 0x08, 0x31,
0x09, 0xea, 0x5a, 0x01, 0x09, 0xea, 0x5a, 0x01,
0x02, 0x8c, 0x51, 0x32, 0x02, 0x8c, 0x51, 0x32,
0xff, 0xea, 0x1a, 0x07, 0xff, 0xea, 0x1a, 0x07,
0x04, 0x24, 0xf9, 0x30, 0x04, 0x24, 0xf9, 0x30,
0x1d, 0xea, 0x38, 0x41, 0x1d, 0xea, 0x20, 0x41,
0x02, 0x2c, 0x51, 0x31, 0x02, 0x2c, 0x51, 0x31,
0x04, 0xac, 0xf9, 0x30, 0x04, 0xa0, 0xf9, 0x30,
0x19, 0xea, 0x38, 0x59, 0x19, 0xea, 0x20, 0x59,
0x02, 0x8c, 0x59, 0x32, 0x02, 0x8c, 0x59, 0x32,
0x02, 0x28, 0x19, 0x33, 0x02, 0x28, 0x19, 0x33,
0x02, 0xa8, 0x50, 0x36, 0x02, 0xa8, 0x50, 0x36,
0x06, 0xea, 0x08, 0x81, 0x06, 0xea, 0x08, 0x81,
0x01, 0xe2, 0x5a, 0x35, 0x01, 0xe2, 0x5a, 0x35,
0x02, 0xa8, 0xf4, 0x31,
0x02, 0xf2, 0xf0, 0x35, 0x02, 0xf2, 0xf0, 0x35,
0x02, 0xf2, 0xf0, 0x31, 0x02, 0xf2, 0xf0, 0x31,
0x02, 0xf8, 0xe4, 0x35, 0x02, 0xf8, 0xe4, 0x35,
...@@ -180,23 +167,23 @@ static uint8_t seqprog[] = { ...@@ -180,23 +167,23 @@ static uint8_t seqprog[] = {
0x02, 0x20, 0xb9, 0x30, 0x02, 0x20, 0xb9, 0x30,
0x02, 0x20, 0x51, 0x31, 0x02, 0x20, 0x51, 0x31,
0x4c, 0xa9, 0xd7, 0x28, 0x4c, 0xa9, 0xd7, 0x28,
0x10, 0xa8, 0x63, 0x79, 0x10, 0xa8, 0x49, 0x79,
0x01, 0x6b, 0xc0, 0x30, 0x01, 0x6b, 0xc0, 0x30,
0x02, 0x64, 0xc8, 0x00, 0x02, 0x64, 0xc8, 0x00,
0x40, 0x3a, 0x74, 0x04, 0x40, 0x3a, 0x74, 0x04,
0x00, 0xe2, 0x70, 0x58, 0x00, 0xe2, 0x56, 0x58,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x30, 0x3f, 0xc0, 0x09, 0x30, 0x3f, 0xc0, 0x09,
0x30, 0xe0, 0x64, 0x61, 0x30, 0xe0, 0x4a, 0x61,
0x20, 0x3f, 0x7a, 0x69, 0x20, 0x3f, 0x60, 0x69,
0x10, 0x3f, 0x64, 0x79, 0x10, 0x3f, 0x4a, 0x79,
0x02, 0xea, 0x7e, 0x00, 0x02, 0xea, 0x7e, 0x00,
0x00, 0xea, 0x44, 0x59, 0x00, 0xea, 0x2a, 0x59,
0x01, 0xea, 0x00, 0x30, 0x01, 0xea, 0x00, 0x30,
0x02, 0x48, 0x51, 0x35, 0x02, 0x48, 0x51, 0x35,
0x01, 0xea, 0x7e, 0x00, 0x01, 0xea, 0x7e, 0x00,
0x11, 0xea, 0x44, 0x59, 0x11, 0xea, 0x2a, 0x59,
0x11, 0xea, 0x00, 0x00, 0x11, 0xea, 0x00, 0x00,
0x02, 0x48, 0x51, 0x35, 0x02, 0x48, 0x51, 0x35,
0x08, 0xea, 0x98, 0x00, 0x08, 0xea, 0x98, 0x00,
...@@ -206,11 +193,11 @@ static uint8_t seqprog[] = { ...@@ -206,11 +193,11 @@ static uint8_t seqprog[] = {
0x0f, 0x67, 0xc0, 0x09, 0x0f, 0x67, 0xc0, 0x09,
0x00, 0x34, 0x69, 0x02, 0x00, 0x34, 0x69, 0x02,
0x20, 0xea, 0x96, 0x00, 0x20, 0xea, 0x96, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x40, 0x3a, 0xae, 0x69, 0x40, 0x3a, 0x94, 0x69,
0x02, 0x55, 0x06, 0x68, 0x02, 0x55, 0x06, 0x68,
0x02, 0x56, 0xae, 0x69, 0x02, 0x56, 0x94, 0x69,
0xff, 0x5b, 0xae, 0x61, 0xff, 0x5b, 0x94, 0x61,
0x02, 0x20, 0x51, 0x31, 0x02, 0x20, 0x51, 0x31,
0x80, 0xea, 0xb2, 0x01, 0x80, 0xea, 0xb2, 0x01,
0x44, 0xea, 0x00, 0x00, 0x44, 0xea, 0x00, 0x00,
...@@ -218,36 +205,36 @@ static uint8_t seqprog[] = { ...@@ -218,36 +205,36 @@ static uint8_t seqprog[] = {
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0xff, 0xea, 0xb2, 0x09, 0xff, 0xea, 0xb2, 0x09,
0xff, 0xe0, 0xc0, 0x19, 0xff, 0xe0, 0xc0, 0x19,
0xff, 0xe0, 0xb0, 0x79, 0xff, 0xe0, 0x96, 0x79,
0x02, 0x94, 0x51, 0x31, 0x02, 0xa4, 0x51, 0x31,
0x00, 0xe2, 0xa6, 0x41, 0x00, 0xe2, 0x8c, 0x41,
0x02, 0x5e, 0x50, 0x31, 0x02, 0x5e, 0x50, 0x31,
0x02, 0xa8, 0xb8, 0x30, 0x02, 0xa8, 0xb8, 0x30,
0x02, 0x5c, 0x50, 0x31, 0x02, 0x5c, 0x50, 0x31,
0xff, 0x95, 0xc1, 0x71, 0xff, 0xa5, 0xa7, 0x71,
0x02, 0x94, 0x41, 0x31, 0x02, 0xa4, 0x41, 0x31,
0x02, 0x22, 0x51, 0x31, 0x02, 0x22, 0x51, 0x31,
0x02, 0xa0, 0x2c, 0x33, 0x02, 0xa0, 0x4c, 0x33,
0x02, 0xa0, 0x44, 0x32, 0x02, 0xa0, 0x44, 0x32,
0x00, 0xe2, 0xca, 0x41, 0x00, 0xe2, 0xb0, 0x41,
0x10, 0xa8, 0xcb, 0x69, 0x10, 0xa8, 0xb1, 0x69,
0x3d, 0xa9, 0xc9, 0x29, 0x3d, 0xa9, 0xc9, 0x29,
0x01, 0xe4, 0xc8, 0x01, 0x01, 0xe4, 0xc8, 0x01,
0x01, 0xea, 0xca, 0x01, 0x01, 0xea, 0xca, 0x01,
0xff, 0xea, 0xda, 0x01, 0xff, 0xea, 0xda, 0x01,
0x02, 0x20, 0x51, 0x31, 0x02, 0x20, 0x51, 0x31,
0x02, 0x96, 0x41, 0x32, 0x02, 0xa6, 0x41, 0x32,
0xff, 0x21, 0xd3, 0x61, 0xff, 0x21, 0xb9, 0x61,
0xff, 0xea, 0x46, 0x02, 0xff, 0xea, 0x46, 0x02,
0x02, 0x5c, 0x50, 0x31, 0x02, 0x5c, 0x50, 0x31,
0x40, 0xea, 0x96, 0x00, 0x40, 0xea, 0x96, 0x00,
0x02, 0x56, 0xe8, 0x6d, 0x02, 0x56, 0xbe, 0x6d,
0x01, 0x55, 0xe8, 0x6d, 0x01, 0x55, 0xbe, 0x6d,
0x10, 0xa8, 0xdf, 0x79, 0x10, 0xa8, 0xc5, 0x79,
0x10, 0x40, 0xe8, 0x69, 0x10, 0x40, 0xce, 0x69,
0x01, 0x56, 0xe8, 0x79, 0x01, 0x56, 0xce, 0x79,
0xff, 0x93, 0x07, 0x78, 0xff, 0xad, 0x07, 0x78,
0x13, 0xea, 0x50, 0x59, 0x13, 0xea, 0x36, 0x59,
0x13, 0xea, 0x04, 0x00, 0x13, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x06, 0x40, 0x00, 0xe2, 0x06, 0x40,
0xbf, 0x3a, 0x74, 0x08, 0xbf, 0x3a, 0x74, 0x08,
...@@ -258,104 +245,104 @@ static uint8_t seqprog[] = { ...@@ -258,104 +245,104 @@ static uint8_t seqprog[] = {
0x40, 0xea, 0x66, 0x02, 0x40, 0xea, 0x66, 0x02,
0x08, 0x3c, 0x78, 0x00, 0x08, 0x3c, 0x78, 0x00,
0x80, 0xea, 0x62, 0x02, 0x80, 0xea, 0x62, 0x02,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0x01, 0x36, 0xc1, 0x31, 0x01, 0x36, 0xc1, 0x31,
0x9f, 0xe0, 0x4e, 0x7c, 0x9f, 0xe0, 0x3c, 0x7c,
0x80, 0xe0, 0x0c, 0x72, 0x80, 0xe0, 0xf2, 0x71,
0xa0, 0xe0, 0x44, 0x72, 0xa0, 0xe0, 0x2a, 0x72,
0xc0, 0xe0, 0x3a, 0x72, 0xc0, 0xe0, 0x20, 0x72,
0xe0, 0xe0, 0x74, 0x72, 0xe0, 0xe0, 0x5a, 0x72,
0x01, 0xea, 0x50, 0x59, 0x01, 0xea, 0x36, 0x59,
0x01, 0xea, 0x04, 0x00, 0x01, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x80, 0x33, 0x13, 0x7a, 0x80, 0x33, 0xf9, 0x79,
0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x36, 0x59,
0x03, 0xea, 0x04, 0x00, 0x03, 0xea, 0x04, 0x00,
0xee, 0x00, 0x1a, 0x6a, 0xee, 0x00, 0x00, 0x6a,
0x05, 0xea, 0xb4, 0x00, 0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x02, 0xa8, 0x90, 0x32, 0x02, 0xa8, 0x90, 0x32,
0x00, 0xe2, 0x6a, 0x59, 0x00, 0xe2, 0x50, 0x59,
0xef, 0x92, 0xd5, 0x19, 0xef, 0xac, 0xd5, 0x19,
0x00, 0xe2, 0x2a, 0x52, 0x00, 0xe2, 0x10, 0x52,
0x09, 0x80, 0xe1, 0x30, 0x09, 0x80, 0xe1, 0x30,
0x02, 0xea, 0x36, 0x00, 0x02, 0xea, 0x36, 0x00,
0xa8, 0xea, 0x32, 0x00, 0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0x30, 0x42, 0x00, 0xe2, 0x16, 0x42,
0x01, 0x92, 0xd1, 0x30, 0x01, 0xac, 0xd1, 0x30,
0x10, 0x80, 0x89, 0x31, 0x10, 0x80, 0x89, 0x31,
0x20, 0xea, 0x32, 0x00, 0x20, 0xea, 0x32, 0x00,
0xbf, 0x33, 0x67, 0x0a, 0xbf, 0x33, 0x67, 0x0a,
0x20, 0x19, 0x32, 0x6a, 0x20, 0x19, 0x18, 0x6a,
0x02, 0x4d, 0xf8, 0x69, 0x02, 0x4d, 0xde, 0x69,
0x40, 0x33, 0x67, 0x02, 0x40, 0x33, 0x67, 0x02,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x80, 0x33, 0xb1, 0x6a, 0x80, 0x33, 0x97, 0x6a,
0x01, 0x44, 0x10, 0x33, 0x01, 0x44, 0x10, 0x33,
0x08, 0xa8, 0x51, 0x03, 0x08, 0xa8, 0x51, 0x03,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x10, 0xea, 0x80, 0x00, 0x10, 0xea, 0x80, 0x00,
0x01, 0x31, 0xc5, 0x31, 0x01, 0x31, 0xc5, 0x31,
0x80, 0xe2, 0x60, 0x62, 0x80, 0xe2, 0x46, 0x62,
0x10, 0xa8, 0x85, 0x6a, 0x10, 0xa8, 0x6b, 0x6a,
0xc0, 0xaa, 0xc5, 0x01, 0xc0, 0xaa, 0xc5, 0x01,
0x40, 0xa8, 0x51, 0x6a, 0x40, 0xa8, 0x37, 0x6a,
0xbf, 0xe2, 0xc4, 0x09, 0xbf, 0xe2, 0xc4, 0x09,
0x20, 0xa8, 0x65, 0x7a, 0x20, 0xa8, 0x4b, 0x7a,
0x01, 0xe2, 0x88, 0x30, 0x01, 0xe2, 0x88, 0x30,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0xa0, 0x36, 0x6d, 0x62, 0xa0, 0x36, 0x53, 0x62,
0x23, 0xa8, 0x89, 0x08, 0x23, 0xa8, 0x89, 0x08,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0xa0, 0x36, 0x6d, 0x62, 0xa0, 0x36, 0x53, 0x62,
0x00, 0xa8, 0x64, 0x42, 0x00, 0xa8, 0x4a, 0x42,
0xff, 0xe2, 0x64, 0x62, 0xff, 0xe2, 0x4a, 0x62,
0x00, 0xe2, 0x84, 0x42, 0x00, 0xe2, 0x6a, 0x42,
0x40, 0xea, 0x98, 0x00, 0x40, 0xea, 0x98, 0x00,
0x01, 0xe2, 0x88, 0x30, 0x01, 0xe2, 0x88, 0x30,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0xa0, 0x36, 0x43, 0x72, 0xa0, 0x36, 0x29, 0x72,
0x40, 0xea, 0x98, 0x00, 0x40, 0xea, 0x98, 0x00,
0x01, 0x31, 0x89, 0x32, 0x01, 0x31, 0x89, 0x32,
0x08, 0xea, 0x62, 0x02, 0x08, 0xea, 0x62, 0x02,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0xe0, 0xea, 0xc8, 0x5b, 0xe0, 0xea, 0xb6, 0x5b,
0x80, 0xe0, 0xbc, 0x6a, 0x80, 0xe0, 0xa2, 0x6a,
0x04, 0xe0, 0x5a, 0x73, 0x04, 0xe0, 0x48, 0x73,
0x02, 0xe0, 0x8a, 0x73, 0x02, 0xe0, 0x78, 0x73,
0x00, 0xea, 0x1a, 0x73, 0x00, 0xea, 0x00, 0x73,
0x03, 0xe0, 0x9a, 0x73, 0x03, 0xe0, 0x88, 0x73,
0x23, 0xe0, 0x96, 0x72, 0x23, 0xe0, 0x7c, 0x72,
0x08, 0xe0, 0xb8, 0x72, 0x08, 0xe0, 0x9e, 0x72,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0x07, 0xea, 0x50, 0x59, 0x07, 0xea, 0x36, 0x59,
0x07, 0xea, 0x04, 0x00, 0x07, 0xea, 0x04, 0x00,
0x08, 0x42, 0xf9, 0x71, 0x08, 0x42, 0xdf, 0x71,
0x04, 0x42, 0x93, 0x62, 0x04, 0x42, 0x79, 0x62,
0x01, 0x43, 0x89, 0x30, 0x01, 0x43, 0x89, 0x30,
0x00, 0xe2, 0x84, 0x42, 0x00, 0xe2, 0x6a, 0x42,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0x84, 0x42, 0x00, 0xe2, 0x6a, 0x42,
0x01, 0x00, 0x60, 0x32, 0x01, 0x00, 0x60, 0x32,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x4c, 0x34, 0xc1, 0x28, 0x4c, 0x34, 0xc1, 0x28,
0x01, 0x64, 0xc0, 0x31, 0x01, 0x64, 0xc0, 0x31,
0x00, 0x30, 0x45, 0x59, 0x00, 0x30, 0x2b, 0x59,
0x01, 0x30, 0x01, 0x30, 0x01, 0x30, 0x01, 0x30,
0x01, 0xe0, 0xb6, 0x7a, 0x01, 0xe0, 0x9c, 0x7a,
0xa0, 0xea, 0xbe, 0x5b, 0xa0, 0xea, 0xac, 0x5b,
0x01, 0xa0, 0xb6, 0x62, 0x01, 0xa0, 0x9c, 0x62,
0x01, 0x84, 0xaf, 0x7a, 0x01, 0x84, 0x95, 0x7a,
0x01, 0xa7, 0xb8, 0x7a, 0x01, 0xa7, 0x9e, 0x7a,
0x00, 0xe2, 0xb8, 0x42, 0x00, 0xe2, 0x9e, 0x42,
0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x36, 0x59,
0x03, 0xea, 0x04, 0x00, 0x03, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xb8, 0x42, 0x00, 0xe2, 0x9e, 0x42,
0x07, 0xea, 0xd0, 0x5b, 0x07, 0xea, 0xbe, 0x5b,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x3f, 0xe0, 0x6a, 0x0a, 0x3f, 0xe0, 0x6a, 0x0a,
0xc0, 0x34, 0xc1, 0x09, 0xc0, 0x34, 0xc1, 0x09,
0x00, 0x35, 0x51, 0x01, 0x00, 0x35, 0x51, 0x01,
...@@ -366,78 +353,82 @@ static uint8_t seqprog[] = { ...@@ -366,78 +353,82 @@ static uint8_t seqprog[] = {
0x01, 0xea, 0xc6, 0x01, 0x01, 0xea, 0xc6, 0x01,
0x02, 0xe2, 0xc8, 0x31, 0x02, 0xe2, 0xc8, 0x31,
0x02, 0xec, 0x40, 0x31, 0x02, 0xec, 0x40, 0x31,
0xff, 0xa1, 0xd8, 0x72, 0xff, 0xa1, 0xbe, 0x72,
0x02, 0xe8, 0xda, 0x31, 0x02, 0xe8, 0xda, 0x31,
0x02, 0xa0, 0x50, 0x31, 0x02, 0xa0, 0x50, 0x31,
0x00, 0xe2, 0xfa, 0x42, 0x00, 0xe2, 0xe0, 0x42,
0x80, 0x33, 0x67, 0x02, 0x80, 0x33, 0x67, 0x02,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0xac, 0x5b, 0x00, 0xe2, 0x9a, 0x5b,
0x01, 0x33, 0x67, 0x02, 0x01, 0x33, 0x67, 0x02,
0xe0, 0x36, 0x15, 0x63, 0xe0, 0x36, 0xfb, 0x62,
0x02, 0x33, 0x67, 0x02, 0x02, 0x33, 0x67, 0x02,
0x20, 0x46, 0x0e, 0x63, 0x20, 0x46, 0xf4, 0x62,
0xff, 0xea, 0x52, 0x09, 0xff, 0xea, 0x52, 0x09,
0xa8, 0xea, 0xbe, 0x5b, 0xa8, 0xea, 0xac, 0x5b,
0x04, 0xa8, 0xf5, 0x7a, 0x04, 0xa8, 0xdb, 0x7a,
0x01, 0x34, 0xc1, 0x31, 0x01, 0x34, 0xc1, 0x31,
0x00, 0xa9, 0xf5, 0x62, 0x00, 0xa9, 0xdb, 0x62,
0x01, 0x35, 0xc1, 0x31, 0x01, 0x35, 0xc1, 0x31,
0x00, 0xaa, 0xff, 0x72, 0x00, 0xaa, 0xe5, 0x72,
0x01, 0xa9, 0x52, 0x11, 0x01, 0xa9, 0x52, 0x11,
0xff, 0xa9, 0xea, 0x6a, 0xff, 0xa9, 0xd0, 0x6a,
0x00, 0xe2, 0x0e, 0x43, 0x00, 0xe2, 0xf4, 0x42,
0x10, 0x33, 0x67, 0x02, 0x10, 0x33, 0x67, 0x02,
0x04, 0xa8, 0x0f, 0x7b, 0x04, 0xa8, 0xf5, 0x7a,
0xfb, 0xa8, 0x51, 0x0b, 0xfb, 0xa8, 0x51, 0x0b,
0xff, 0xea, 0x66, 0x0a, 0xff, 0xea, 0x66, 0x0a,
0x01, 0xa4, 0x09, 0x6b, 0x01, 0x9c, 0xef, 0x6a,
0x02, 0xa8, 0x90, 0x32, 0x02, 0xa8, 0x90, 0x32,
0x00, 0xe2, 0x6a, 0x59, 0x00, 0xe2, 0x50, 0x59,
0x10, 0xa8, 0xb9, 0x7a, 0x10, 0xa8, 0x9f, 0x7a,
0xff, 0xea, 0xd0, 0x5b, 0xff, 0xea, 0xbe, 0x5b,
0x00, 0xe2, 0xb8, 0x42, 0x00, 0xe2, 0x9e, 0x42,
0x04, 0xea, 0x50, 0x59, 0x04, 0xea, 0x36, 0x59,
0x04, 0xea, 0x04, 0x00, 0x04, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xb8, 0x42, 0x00, 0xe2, 0x9e, 0x42,
0x04, 0xea, 0x50, 0x59, 0x04, 0xea, 0x36, 0x59,
0x04, 0xea, 0x04, 0x00, 0x04, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x08, 0xa8, 0xb1, 0x7a, 0x08, 0xa8, 0x97, 0x7a,
0xc0, 0x33, 0x25, 0x7b, 0xc0, 0x33, 0x0b, 0x7b,
0x80, 0x33, 0xb1, 0x6a, 0x80, 0x33, 0x97, 0x6a,
0xff, 0x88, 0x25, 0x6b, 0xff, 0x88, 0x0b, 0x6b,
0x40, 0x33, 0xb1, 0x6a, 0x40, 0x33, 0x97, 0x6a,
0x10, 0xa8, 0x2b, 0x7b, 0x10, 0xa8, 0x11, 0x7b,
0x0a, 0xea, 0x50, 0x59, 0x0a, 0xea, 0x36, 0x59,
0x0a, 0xea, 0x04, 0x00, 0x0a, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x44, 0x5b, 0x00, 0xe2, 0x30, 0x5b,
0x00, 0xe2, 0x76, 0x43, 0x00, 0xe2, 0x64, 0x43,
0x50, 0x4b, 0x32, 0x6b, 0x50, 0x4b, 0x18, 0x6b,
0xbf, 0x3a, 0x74, 0x08, 0xbf, 0x3a, 0x74, 0x08,
0x01, 0xe0, 0xf8, 0x31, 0x01, 0xe0, 0xf4, 0x31,
0xff, 0xea, 0xc0, 0x09, 0xff, 0xea, 0xc0, 0x09,
0x01, 0x2e, 0x5d, 0x1a, 0x01, 0x2e, 0x5d, 0x1a,
0x00, 0x2f, 0x5f, 0x22, 0x00, 0x2f, 0x5f, 0x22,
0x04, 0x47, 0x8f, 0x02, 0x04, 0x47, 0x8f, 0x02,
0x01, 0xfc, 0xc0, 0x35, 0x01, 0xfa, 0xc0, 0x35,
0x33, 0xea, 0x44, 0x59, 0x02, 0xa8, 0x84, 0x32,
0x02, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x02, 0x42, 0x51, 0x31, 0x02, 0x42, 0x51, 0x31,
0xff, 0x88, 0x51, 0x6b, 0xff, 0xae, 0x65, 0x68,
0x01, 0xa4, 0x4d, 0x6b, 0xff, 0x88, 0x3d, 0x6b,
0x02, 0xa4, 0x55, 0x6b, 0x01, 0x9c, 0x39, 0x6b,
0x01, 0x84, 0x55, 0x7b, 0x02, 0x9c, 0x41, 0x6b,
0x01, 0x84, 0x41, 0x7b,
0x02, 0x28, 0x19, 0x33, 0x02, 0x28, 0x19, 0x33,
0x02, 0xa8, 0x50, 0x36, 0x02, 0xa8, 0x50, 0x36,
0xff, 0x88, 0x55, 0x73, 0xff, 0x88, 0x41, 0x73,
0x00, 0xe2, 0x2e, 0x5b, 0x00, 0xe2, 0x14, 0x5b,
0x02, 0xa8, 0x5c, 0x33,
0x02, 0x2c, 0x19, 0x33, 0x02, 0x2c, 0x19, 0x33,
0x02, 0xa8, 0x58, 0x32, 0x02, 0xa8, 0x58, 0x32,
0x04, 0xa4, 0x49, 0x07, 0x04, 0x9c, 0x39, 0x07,
0xc0, 0x33, 0xb1, 0x6a, 0xc0, 0x33, 0x97, 0x6a,
0x04, 0xa8, 0x51, 0x03, 0x04, 0xa8, 0x51, 0x03,
0x20, 0xa8, 0x77, 0x6b, 0x20, 0xa8, 0x65, 0x6b,
0x02, 0xa8, 0x40, 0x31, 0x02, 0xa8, 0x40, 0x31,
0xc0, 0x34, 0xc1, 0x09, 0xc0, 0x34, 0xc1, 0x09,
0x00, 0x35, 0x51, 0x01, 0x00, 0x35, 0x51, 0x01,
...@@ -452,73 +443,73 @@ static uint8_t seqprog[] = { ...@@ -452,73 +443,73 @@ static uint8_t seqprog[] = {
0xf7, 0x57, 0xae, 0x08, 0xf7, 0x57, 0xae, 0x08,
0x08, 0xea, 0x98, 0x00, 0x08, 0xea, 0x98, 0x00,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0xee, 0x00, 0x80, 0x6b, 0xee, 0x00, 0x6e, 0x6b,
0x02, 0xea, 0xb4, 0x00, 0x02, 0xea, 0xb4, 0x00,
0x00, 0xe2, 0xa8, 0x5b, 0x00, 0xe2, 0x96, 0x5b,
0x09, 0x4c, 0x82, 0x7b, 0x09, 0x4c, 0x70, 0x7b,
0x08, 0x4c, 0x06, 0x68, 0x08, 0x4c, 0x06, 0x68,
0x0b, 0xea, 0x50, 0x59, 0x0b, 0xea, 0x36, 0x59,
0x0b, 0xea, 0x04, 0x00, 0x0b, 0xea, 0x04, 0x00,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0x20, 0x33, 0xf9, 0x79, 0x20, 0x33, 0xdf, 0x79,
0x00, 0xe2, 0x92, 0x5b, 0x00, 0xe2, 0x80, 0x5b,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x01, 0x84, 0x97, 0x7b, 0x01, 0x84, 0x85, 0x7b,
0x01, 0xa4, 0x49, 0x07, 0x01, 0x9c, 0x39, 0x07,
0x08, 0x60, 0x30, 0x33, 0x08, 0x60, 0x20, 0x33,
0x08, 0x80, 0x41, 0x37, 0x08, 0x80, 0x31, 0x37,
0xdf, 0x33, 0x67, 0x0a, 0xdf, 0x33, 0x67, 0x0a,
0xee, 0x00, 0xa4, 0x6b, 0xee, 0x00, 0x92, 0x6b,
0x05, 0xea, 0xb4, 0x00, 0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x00, 0xe2, 0x6a, 0x59, 0x00, 0xe2, 0x50, 0x59,
0x00, 0xe2, 0xb8, 0x42, 0x00, 0xe2, 0x9e, 0x42,
0x01, 0xea, 0x6c, 0x02, 0x01, 0xea, 0x6c, 0x02,
0xc0, 0xea, 0x66, 0x06, 0xc0, 0xea, 0x66, 0x06,
0xff, 0x42, 0xb8, 0x6b, 0xff, 0x42, 0xa6, 0x6b,
0x01, 0x41, 0xac, 0x6b, 0x01, 0x41, 0x9a, 0x6b,
0x02, 0x41, 0xac, 0x7b, 0x02, 0x41, 0x9a, 0x7b,
0xff, 0x42, 0xb8, 0x6b, 0xff, 0x42, 0xa6, 0x6b,
0x01, 0x41, 0xac, 0x6b, 0x01, 0x41, 0x9a, 0x6b,
0x02, 0x41, 0xac, 0x7b, 0x02, 0x41, 0x9a, 0x7b,
0xff, 0x42, 0xb8, 0x7b, 0xff, 0x42, 0xa6, 0x7b,
0x04, 0x4c, 0xac, 0x6b, 0x04, 0x4c, 0x9a, 0x6b,
0xe0, 0x41, 0x6c, 0x0e, 0xe0, 0x41, 0x6c, 0x0e,
0x01, 0x44, 0xd4, 0x31, 0x01, 0x44, 0xd4, 0x31,
0xff, 0x42, 0xc0, 0x7b, 0xff, 0x42, 0xae, 0x7b,
0x04, 0x4c, 0xc0, 0x6b, 0x04, 0x4c, 0xae, 0x6b,
0xe0, 0x41, 0x6c, 0x0a, 0xe0, 0x41, 0x6c, 0x0a,
0xe0, 0x36, 0xf9, 0x61, 0xe0, 0x36, 0xdf, 0x61,
0xff, 0xea, 0xca, 0x09, 0xff, 0xea, 0xca, 0x09,
0x01, 0xe2, 0xc8, 0x31, 0x01, 0xe2, 0xc8, 0x31,
0x01, 0x46, 0xda, 0x35, 0x01, 0x46, 0xda, 0x35,
0x01, 0x44, 0xd4, 0x35, 0x01, 0x44, 0xd4, 0x35,
0x10, 0xea, 0x80, 0x00, 0x10, 0xea, 0x80, 0x00,
0x01, 0xe2, 0x62, 0x36, 0x01, 0xe2, 0x62, 0x36,
0x04, 0xa6, 0xd8, 0x7b, 0x04, 0xa6, 0xc6, 0x7b,
0xff, 0xea, 0x5a, 0x09, 0xff, 0xea, 0x5a, 0x09,
0xff, 0xea, 0x4c, 0x0d, 0xff, 0xea, 0x4c, 0x0d,
0x01, 0xa6, 0xf6, 0x6b, 0x01, 0xa6, 0xe4, 0x6b,
0x10, 0xad, 0x96, 0x7d, 0x10, 0xad, 0x64, 0x78,
0x80, 0xad, 0xee, 0x6b, 0x80, 0xad, 0xdc, 0x6b,
0x08, 0xad, 0x96, 0x6d, 0x08, 0xad, 0x64, 0x68,
0x04, 0x84, 0xf9, 0x30, 0x04, 0x84, 0xf9, 0x30,
0x00, 0xea, 0x08, 0x81, 0x00, 0xea, 0x08, 0x81,
0xff, 0xea, 0xd4, 0x09, 0xff, 0xea, 0xd4, 0x09,
0x02, 0x84, 0xf9, 0x88, 0x02, 0x84, 0xf9, 0x88,
0x0d, 0xea, 0x5a, 0x01, 0x0d, 0xea, 0x5a, 0x01,
0x04, 0xa6, 0x4c, 0x05, 0x04, 0xa6, 0x4c, 0x05,
0x04, 0xa6, 0x96, 0x7d, 0x04, 0xa6, 0x64, 0x78,
0xff, 0xea, 0x5a, 0x09, 0xff, 0xea, 0x5a, 0x09,
0x03, 0x84, 0x59, 0x89, 0x03, 0x84, 0x59, 0x89,
0x03, 0xea, 0x4c, 0x01, 0x03, 0xea, 0x4c, 0x01,
0x80, 0x1a, 0x96, 0x7d, 0x80, 0x1a, 0x64, 0x78,
0x08, 0x19, 0x96, 0x7d, 0x08, 0x19, 0x64, 0x78,
0x08, 0xb0, 0xe0, 0x30, 0x08, 0xb0, 0xe0, 0x30,
0x04, 0xb0, 0xe0, 0x30, 0x04, 0xb0, 0xe0, 0x30,
0x03, 0xb0, 0xf0, 0x30, 0x03, 0xb0, 0xf0, 0x30,
0x01, 0x78, 0x04, 0x7c, 0x01, 0x78, 0xf2, 0x7b,
0x01, 0xa7, 0x4e, 0x11, 0x01, 0xa7, 0x4e, 0x11,
0x01, 0xb0, 0x06, 0x33, 0x01, 0xb0, 0x06, 0x33,
0x7f, 0x83, 0xe9, 0x08, 0x7f, 0x83, 0xe9, 0x08,
...@@ -529,275 +520,265 @@ static uint8_t seqprog[] = { ...@@ -529,275 +520,265 @@ static uint8_t seqprog[] = {
0x00, 0x86, 0x0d, 0x23, 0x00, 0x86, 0x0d, 0x23,
0x00, 0x87, 0x0f, 0x23, 0x00, 0x87, 0x0f, 0x23,
0x01, 0x84, 0xc5, 0x31, 0x01, 0x84, 0xc5, 0x31,
0x01, 0xa7, 0x1a, 0x7c, 0x01, 0xa7, 0x08, 0x7c,
0x04, 0xe2, 0xc4, 0x01, 0x04, 0xe2, 0xc4, 0x01,
0x80, 0x83, 0x21, 0x7c, 0x80, 0x83, 0x0f, 0x7c,
0x02, 0xe2, 0xc4, 0x01, 0x02, 0xe2, 0xc4, 0x01,
0xff, 0xea, 0x4c, 0x09, 0xff, 0xea, 0x4c, 0x09,
0x01, 0xe2, 0x36, 0x30, 0x01, 0xe2, 0x36, 0x30,
0xc8, 0x19, 0x32, 0x00, 0xc8, 0x19, 0x32, 0x00,
0x88, 0x19, 0x32, 0x00, 0x88, 0x19, 0x32, 0x00,
0x01, 0xac, 0xd4, 0x99, 0x01, 0xac, 0xd4, 0x99,
0x00, 0xe2, 0x96, 0x55, 0x00, 0xe2, 0x64, 0x50,
0xfe, 0xa6, 0x4c, 0x0d, 0xfe, 0xa6, 0x4c, 0x0d,
0x0b, 0x98, 0xe1, 0x30, 0x0b, 0x90, 0xe1, 0x30,
0x01, 0xa0, 0x4f, 0x09, 0x01, 0x98, 0x4f, 0x09,
0xfd, 0xa4, 0x49, 0x09, 0xfd, 0x9c, 0x49, 0x09,
0x80, 0xa3, 0x37, 0x7c, 0x80, 0x9b, 0x25, 0x7c,
0x02, 0xa4, 0x48, 0x01, 0x02, 0xa4, 0x48, 0x01,
0x01, 0xa7, 0x3a, 0x7c, 0x01, 0xa7, 0x28, 0x7c,
0x04, 0xa4, 0x48, 0x01, 0x04, 0xa4, 0x48, 0x01,
0x01, 0xa4, 0x36, 0x30, 0x01, 0xa4, 0x36, 0x30,
0xa8, 0xea, 0x32, 0x00, 0xa8, 0xea, 0x32, 0x00,
0xfd, 0xa4, 0x49, 0x0b, 0xfd, 0x9c, 0x39, 0x0b,
0x05, 0xa3, 0x07, 0x33, 0x05, 0x9b, 0x07, 0x33,
0x80, 0x83, 0x47, 0x6c, 0x80, 0x83, 0x35, 0x6c,
0x02, 0xea, 0x4c, 0x05, 0x02, 0xea, 0x4c, 0x05,
0xff, 0xea, 0x4c, 0x0d, 0xff, 0xea, 0x4c, 0x0d,
0x00, 0xe2, 0x3c, 0x59, 0x00, 0xe2, 0x24, 0x59,
0x02, 0xa6, 0xda, 0x6b, 0x02, 0xa6, 0xc8, 0x6b,
0x80, 0xf9, 0xf2, 0x05, 0x80, 0xf9, 0xf2, 0x05,
0xc0, 0x33, 0x55, 0x7c, 0xc0, 0x33, 0x43, 0x7c,
0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x36, 0x59,
0x03, 0xea, 0x04, 0x00, 0x03, 0xea, 0x04, 0x00,
0x20, 0x33, 0x79, 0x7c, 0x20, 0x33, 0x67, 0x7c,
0x01, 0x84, 0x5f, 0x6c, 0x01, 0x84, 0x4d, 0x6c,
0x06, 0xea, 0x50, 0x59, 0x06, 0xea, 0x36, 0x59,
0x06, 0xea, 0x04, 0x00, 0x06, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x7c, 0x44, 0x00, 0xe2, 0x6a, 0x44,
0x01, 0x00, 0x60, 0x32, 0x01, 0x00, 0x60, 0x32,
0xee, 0x00, 0x68, 0x6c, 0xee, 0x00, 0x56, 0x6c,
0x05, 0xea, 0xb4, 0x00, 0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x2a, 0x59,
0x33, 0xea, 0x00, 0x00, 0x33, 0xea, 0x00, 0x00,
0x80, 0x3d, 0x7a, 0x00, 0x80, 0x3d, 0x7a, 0x00,
0xfc, 0x42, 0x6a, 0x7c, 0xfc, 0x42, 0x58, 0x7c,
0x7f, 0x3d, 0x7a, 0x08, 0x7f, 0x3d, 0x7a, 0x08,
0x00, 0x30, 0x45, 0x59, 0x00, 0x30, 0x2b, 0x59,
0x01, 0x30, 0x01, 0x30, 0x01, 0x30, 0x01, 0x30,
0x09, 0xea, 0x50, 0x59, 0x09, 0xea, 0x36, 0x59,
0x09, 0xea, 0x04, 0x00, 0x09, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x01, 0xa4, 0x5f, 0x6c, 0x01, 0x9c, 0x4d, 0x6c,
0x00, 0xe2, 0x2c, 0x5c, 0x00, 0xe2, 0x1a, 0x5c,
0x20, 0x33, 0x67, 0x02, 0x20, 0x33, 0x67, 0x02,
0x01, 0x00, 0x60, 0x32, 0x01, 0x00, 0x60, 0x32,
0x02, 0xa6, 0x84, 0x7c, 0x02, 0xa6, 0x72, 0x7c,
0x00, 0xe2, 0x48, 0x5c, 0x00, 0xe2, 0x36, 0x5c,
0x00, 0xe2, 0x70, 0x58, 0x00, 0xe2, 0x56, 0x58,
0x00, 0xe2, 0x80, 0x58, 0x00, 0xe2, 0x66, 0x58,
0x00, 0xe2, 0x3a, 0x58, 0x00, 0xe2, 0x3a, 0x58,
0x00, 0x30, 0x45, 0x59, 0x00, 0x30, 0x2b, 0x59,
0x01, 0x30, 0x01, 0x30, 0x01, 0x30, 0x01, 0x30,
0x20, 0x19, 0x84, 0x6c, 0x20, 0x19, 0x72, 0x6c,
0x00, 0xe2, 0xb4, 0x5c, 0x00, 0xe2, 0xa2, 0x5c,
0x04, 0x19, 0x9e, 0x6c, 0x04, 0x19, 0x8c, 0x6c,
0x02, 0x19, 0x32, 0x00, 0x02, 0x19, 0x32, 0x00,
0x01, 0x84, 0x9f, 0x7c, 0x01, 0x84, 0x8d, 0x7c,
0x01, 0x1b, 0x98, 0x7c, 0x01, 0x1b, 0x86, 0x7c,
0x01, 0x1a, 0x9e, 0x6c, 0x01, 0x1a, 0x8c, 0x6c,
0x00, 0xe2, 0x4e, 0x44, 0x00, 0xe2, 0x3c, 0x44,
0x80, 0x4b, 0xa4, 0x6c, 0x80, 0x4b, 0x92, 0x6c,
0x01, 0x4c, 0xa0, 0x7c, 0x01, 0x4c, 0x8e, 0x7c,
0x03, 0x42, 0x4e, 0x6c, 0x03, 0x42, 0x3c, 0x6c,
0x00, 0xe2, 0xd4, 0x5b, 0x00, 0xe2, 0xc2, 0x5b,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0x04, 0x33, 0xf9, 0x79, 0x04, 0x33, 0xdf, 0x79,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x08, 0x5d, 0xbc, 0x6c, 0x08, 0x5d, 0xaa, 0x6c,
0x00, 0xe2, 0x70, 0x58, 0x00, 0xe2, 0x56, 0x58,
0x00, 0x30, 0x45, 0x59, 0x00, 0x30, 0x2b, 0x59,
0x01, 0x30, 0x01, 0x30, 0x01, 0x30, 0x01, 0x30,
0x02, 0x1b, 0xac, 0x7c, 0x02, 0x1b, 0x9a, 0x7c,
0x08, 0x5d, 0xba, 0x7c, 0x08, 0x5d, 0xa8, 0x7c,
0x03, 0x68, 0x00, 0x37, 0x03, 0x68, 0x00, 0x37,
0x01, 0x84, 0x09, 0x07, 0x01, 0x84, 0x09, 0x07,
0x80, 0x1b, 0xc6, 0x7c, 0x80, 0x1b, 0xb4, 0x7c,
0x80, 0x84, 0xc7, 0x6c, 0x80, 0x84, 0xb5, 0x6c,
0xff, 0x85, 0x0b, 0x1b, 0xff, 0x85, 0x0b, 0x1b,
0xff, 0x86, 0x0d, 0x23, 0xff, 0x86, 0x0d, 0x23,
0xff, 0x87, 0x0f, 0x23, 0xff, 0x87, 0x0f, 0x23,
0xf8, 0x1b, 0x08, 0x0b, 0xf8, 0x1b, 0x08, 0x0b,
0xff, 0xea, 0x4e, 0x09, 0xff, 0xea, 0x4e, 0x09,
0x04, 0x1b, 0xce, 0x7c, 0x04, 0x1b, 0xbc, 0x7c,
0x01, 0xa7, 0x4e, 0x01, 0x01, 0xa7, 0x4e, 0x01,
0xff, 0xea, 0x06, 0x0b, 0xff, 0xea, 0x06, 0x0b,
0x03, 0x68, 0x00, 0x37, 0x03, 0x68, 0x00, 0x37,
0x00, 0xe2, 0xc0, 0x58, 0x00, 0xe2, 0xa6, 0x58,
0x10, 0xea, 0x18, 0x00, 0x10, 0xea, 0x18, 0x00,
0xf9, 0xd9, 0xb2, 0x0d, 0xf9, 0xd9, 0xb2, 0x0d,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x01, 0x52, 0x48, 0x31, 0x01, 0x52, 0x48, 0x31,
0x20, 0xa4, 0xf2, 0x7c, 0x20, 0xa4, 0xe0, 0x7c,
0x20, 0x5b, 0xf2, 0x7c, 0x20, 0x5b, 0xe0, 0x7c,
0x80, 0xf9, 0x00, 0x7d, 0x80, 0xf9, 0xee, 0x7c,
0x11, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x10,
0x04, 0x19, 0xec, 0x7c, 0x04, 0x19, 0xda, 0x7c,
0xdf, 0x19, 0x32, 0x08, 0xdf, 0x19, 0x32, 0x08,
0x01, 0x4c, 0xe8, 0x7c, 0x01, 0x4c, 0xd6, 0x7c,
0x20, 0x19, 0x32, 0x00, 0x20, 0x19, 0x32, 0x00,
0x11, 0x00, 0x00, 0x10, 0x11, 0x00, 0x00, 0x10,
0x02, 0xea, 0xb4, 0x00, 0x02, 0xea, 0xb4, 0x00,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x10, 0x5b, 0x04, 0x6d, 0x10, 0x5b, 0xf2, 0x6c,
0x08, 0x5b, 0x0c, 0x6d, 0x08, 0x5b, 0xfc, 0x6c,
0x20, 0x5b, 0xfe, 0x6c, 0x20, 0x5b, 0xec, 0x6c,
0x02, 0x5b, 0x2c, 0x6d, 0x02, 0x5b, 0x1c, 0x6d,
0x0e, 0xea, 0x50, 0x59, 0x0e, 0xea, 0x36, 0x59,
0x0e, 0xea, 0x04, 0x00, 0x0e, 0xea, 0x04, 0x00,
0x80, 0xf9, 0xee, 0x6c, 0x80, 0xf9, 0xdc, 0x6c,
0xdf, 0x5c, 0xb8, 0x08, 0xdf, 0x5c, 0xb8, 0x08,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x01, 0xa4, 0xff, 0x6d, 0x01, 0xae, 0x5d, 0x1b,
0x00, 0xe2, 0x2c, 0x5c, 0x01, 0x9c, 0xd7, 0x6d,
0x00, 0xe2, 0x36, 0x5d, 0x00, 0xe2, 0x1a, 0x5c,
0x00, 0xe2, 0x26, 0x5d,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x00, 0xe2, 0x2e, 0x5b, 0x00, 0xe2, 0x14, 0x5b,
0xf3, 0x92, 0xd5, 0x19, 0xf3, 0xac, 0xd5, 0x19,
0x00, 0xe2, 0x1a, 0x55, 0x00, 0xe2, 0x0a, 0x55,
0x80, 0x92, 0x1b, 0x6d, 0x80, 0xac, 0x0b, 0x6d,
0x0f, 0xea, 0x50, 0x59, 0x0f, 0xea, 0x36, 0x59,
0x0f, 0xea, 0x04, 0x00, 0x0f, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x22, 0x45, 0x00, 0xe2, 0x12, 0x45,
0x04, 0x8c, 0xe1, 0x30, 0x04, 0x8c, 0xe1, 0x30,
0x01, 0xea, 0xf2, 0x00, 0x01, 0xea, 0xf2, 0x00,
0x02, 0xea, 0x36, 0x00, 0x02, 0xea, 0x36, 0x00,
0xa8, 0xea, 0x32, 0x00, 0xa8, 0xea, 0x32, 0x00,
0xff, 0x93, 0x29, 0x7d, 0xff, 0xad, 0x19, 0x7d,
0x14, 0xea, 0x50, 0x59, 0x14, 0xea, 0x36, 0x59,
0x14, 0xea, 0x04, 0x00, 0x14, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xb0, 0x5d, 0x00, 0xe2, 0x88, 0x5d,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x09, 0x80, 0xe1, 0x30, 0x09, 0x80, 0xe1, 0x30,
0x02, 0xea, 0x36, 0x00, 0x02, 0xea, 0x36, 0x00,
0xa8, 0xea, 0x32, 0x00, 0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0xd8, 0x5d, 0x00, 0xe2, 0x80, 0x5d,
0x01, 0xd9, 0xb2, 0x05, 0x01, 0xd9, 0xb2, 0x05,
0x02, 0xa8, 0xf4, 0x31, 0x02, 0xa6, 0x36, 0x7d,
0x02, 0xa6, 0x48, 0x7d, 0x00, 0xe2, 0x24, 0x59,
0x00, 0xe2, 0x3e, 0x59, 0x20, 0x5b, 0x44, 0x6d,
0x20, 0x5b, 0x56, 0x6d, 0xfc, 0x42, 0x30, 0x7d,
0xfc, 0x42, 0x42, 0x7d, 0x10, 0x40, 0x32, 0x6d,
0x10, 0x40, 0x44, 0x6d, 0x20, 0x4d, 0x34, 0x7d,
0x20, 0x4d, 0x46, 0x7d, 0x08, 0x5d, 0x44, 0x6d,
0x08, 0x5d, 0x56, 0x6d, 0x02, 0xa6, 0xc8, 0x6b,
0x02, 0xa6, 0xda, 0x6b, 0x00, 0xe2, 0x24, 0x59,
0x00, 0xe2, 0x3e, 0x59, 0x20, 0x5b, 0x44, 0x6d,
0x20, 0x5b, 0x56, 0x6d, 0x01, 0x1b, 0x64, 0x6d,
0x01, 0x1b, 0x76, 0x6d, 0xfc, 0x42, 0x40, 0x7d,
0xfc, 0x42, 0x52, 0x7d, 0x10, 0x40, 0x42, 0x6d,
0x10, 0x40, 0x54, 0x6d, 0x20, 0x4d, 0x64, 0x78,
0x20, 0x4d, 0x96, 0x7d, 0x08, 0x5d, 0x64, 0x78,
0x08, 0x5d, 0x96, 0x7d,
0x02, 0x19, 0x32, 0x00, 0x02, 0x19, 0x32, 0x00,
0x01, 0x5b, 0x40, 0x31, 0x01, 0x5b, 0x40, 0x31,
0x00, 0xe2, 0xb4, 0x5c, 0x00, 0xe2, 0xa2, 0x5c,
0x00, 0xe2, 0x92, 0x5b, 0x00, 0xe2, 0x80, 0x5b,
0x20, 0xea, 0xb6, 0x00, 0x20, 0xea, 0xb6, 0x00,
0x00, 0xe2, 0xd4, 0x5b, 0x00, 0xe2, 0xc2, 0x5b,
0x20, 0x5c, 0xb8, 0x00, 0x20, 0x5c, 0xb8, 0x00,
0x04, 0x19, 0x6c, 0x6d, 0x04, 0x19, 0x5a, 0x6d,
0x01, 0x1a, 0x6c, 0x6d, 0x01, 0x1a, 0x5a, 0x6d,
0x00, 0xe2, 0x3e, 0x59, 0x00, 0xe2, 0x24, 0x59,
0x01, 0x1a, 0x96, 0x7d, 0x01, 0x1a, 0x64, 0x78,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0x20, 0xa0, 0xe8, 0x7d, 0x20, 0xa0, 0xbe, 0x7d,
0x08, 0xa8, 0x75, 0x7d, 0xff, 0xae, 0x5d, 0x1b,
0x00, 0xe2, 0x88, 0x45, 0x08, 0xa8, 0x25, 0x6b,
0x02, 0xea, 0xb4, 0x04, 0x02, 0xea, 0xb4, 0x04,
0x02, 0x19, 0x32, 0x00, 0x01, 0x9c, 0x39, 0x03,
0x08, 0xa8, 0x99, 0x7d, 0x40, 0x5b, 0x74, 0x6d,
0x04, 0x5d, 0xfe, 0x7d, 0x00, 0xe2, 0x24, 0x59,
0x01, 0x1a, 0xfe, 0x7d, 0x40, 0x5b, 0x74, 0x6d,
0x01, 0xa4, 0x49, 0x03, 0x04, 0x5d, 0xd6, 0x7d,
0x01, 0x1a, 0xd6, 0x7d,
0x20, 0x4d, 0x64, 0x78,
0x40, 0x5b, 0xbe, 0x7d,
0x04, 0x5d, 0xd6, 0x7d,
0x01, 0x1a, 0xd6, 0x7d,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0x02, 0xa8, 0x84, 0x32, 0xff, 0xae, 0x5d, 0x1b,
0x02, 0xea, 0xb4, 0x00, 0x08, 0xa8, 0x25, 0x6b,
0x00, 0xe2, 0x3e, 0x43, 0x02, 0xea, 0xb4, 0x04,
0x02, 0xa8, 0x84, 0x32, 0x00, 0xe2, 0x24, 0x59,
0x02, 0xea, 0xb4, 0x00, 0x01, 0x1b, 0x64, 0x78,
0xff, 0xea, 0xd4, 0x19,
0x00, 0xe2, 0x4a, 0x59,
0x11, 0x00, 0x00, 0x10,
0x00, 0xe2, 0xcc, 0x5d,
0x00, 0xe2, 0x3e, 0x53,
0xff, 0xea, 0xd4, 0x0d,
0x00, 0xe2, 0x3e, 0x59,
0x40, 0x5b, 0xa4, 0x6d,
0x04, 0x5d, 0xfe, 0x7d,
0x01, 0x1a, 0xfe, 0x7d,
0x20, 0x4d, 0x96, 0x7d,
0x40, 0x5b, 0xe8, 0x7d,
0x04, 0x5d, 0xfe, 0x7d,
0x01, 0x1a, 0xfe, 0x7d,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0x01, 0xa4, 0x49, 0x03,
0x08, 0xa8, 0x89, 0x6d,
0x02, 0xea, 0xb4, 0x04, 0x02, 0xea, 0xb4, 0x04,
0x00, 0xe2, 0x3c, 0x59, 0x00, 0xe2, 0x24, 0x59,
0x01, 0x1b, 0xc0, 0x7d, 0x01, 0x1b, 0x9c, 0x6d,
0x40, 0x5b, 0x96, 0x7d, 0x40, 0x5b, 0xaa, 0x7d,
0x01, 0x1b, 0x9c, 0x6d,
0x02, 0x19, 0x32, 0x00, 0x02, 0x19, 0x32, 0x00,
0x01, 0x1a, 0x64, 0x78,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0xff, 0xea, 0x10, 0x03, 0xff, 0xea, 0x10, 0x03,
0x08, 0xa8, 0x51, 0x03, 0x08, 0xa8, 0x51, 0x03,
0x00, 0xe2, 0x88, 0x45, 0x00, 0xe2, 0x24, 0x43,
0xff, 0x6a, 0xc6, 0x6d, 0x01, 0x1a, 0xa6, 0x7d,
0x40, 0x5b, 0x96, 0x7d, 0x40, 0x5b, 0xa2, 0x7d,
0xff, 0x6a, 0xb6, 0x7d, 0x01, 0x1a, 0x90, 0x6d,
0x10, 0xea, 0x50, 0x59, 0xfc, 0x42, 0x64, 0x78,
0x01, 0x1a, 0xaa, 0x6d,
0x10, 0xea, 0x36, 0x59,
0x10, 0xea, 0x04, 0x00, 0x10, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xb6, 0x45, 0xfc, 0x42, 0x64, 0x78,
0x80, 0xf9, 0x96, 0x6d, 0x10, 0x40, 0xb0, 0x6d,
0x01, 0x43, 0xc1, 0x31, 0x20, 0x4d, 0x64, 0x78,
0x00, 0xfb, 0x96, 0x65, 0x40, 0x5b, 0x90, 0x6d,
0x01, 0x42, 0xc1, 0x31, 0x01, 0x1a, 0x64, 0x78,
0x00, 0xfa, 0x96, 0x65, 0x01, 0xae, 0x5d, 0x1b,
0x01, 0xe8, 0xd4, 0x1d,
0x00, 0xe2, 0x3c, 0x59,
0x01, 0x1b, 0x96, 0x7d,
0x80, 0xf9, 0xf2, 0x01,
0x02, 0xea, 0xb4, 0x04,
0x30, 0x3f, 0xc0, 0x09, 0x30, 0x3f, 0xc0, 0x09,
0x30, 0xe0, 0x96, 0x65, 0x30, 0xe0, 0x64, 0x60,
0x40, 0x4b, 0x96, 0x6d, 0x40, 0x4b, 0x64, 0x68,
0xff, 0xea, 0x52, 0x01, 0xff, 0xea, 0x52, 0x01,
0xee, 0x00, 0xee, 0x6d, 0xee, 0x00, 0xc4, 0x6d,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0xff, 0xae, 0x5d, 0x1b,
0x02, 0xea, 0xb4, 0x00, 0x02, 0xea, 0xb4, 0x00,
0x20, 0xea, 0x9a, 0x00, 0x20, 0xea, 0x9a, 0x00,
0xf3, 0x42, 0xf8, 0x6d, 0xf3, 0x42, 0xd0, 0x6d,
0x12, 0xea, 0x50, 0x59, 0x12, 0xea, 0x36, 0x59,
0x12, 0xea, 0x04, 0x00, 0x12, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x0d, 0xea, 0x50, 0x59, 0x0d, 0xea, 0x36, 0x59,
0x0d, 0xea, 0x04, 0x00, 0x0d, 0xea, 0x04, 0x00,
0x00, 0xe2, 0xf8, 0x41, 0x00, 0xe2, 0xde, 0x41,
0x11, 0xea, 0x50, 0x59, 0x11, 0xea, 0x36, 0x59,
0x11, 0xea, 0x04, 0x00, 0x11, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x2e, 0x5b, 0x00, 0xe2, 0x14, 0x5b,
0x08, 0x5a, 0xb4, 0x00, 0x08, 0x5a, 0xb4, 0x00,
0x00, 0xe2, 0x22, 0x5e, 0x00, 0xe2, 0xfc, 0x5d,
0xa8, 0xea, 0x32, 0x00, 0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0x3e, 0x59, 0x00, 0xe2, 0x24, 0x59,
0x80, 0x1a, 0x12, 0x7e, 0x80, 0x1a, 0xea, 0x7d,
0x00, 0xe2, 0x22, 0x5e, 0x00, 0xe2, 0xfc, 0x5d,
0x80, 0x19, 0x32, 0x00, 0x80, 0x19, 0x32, 0x00,
0x40, 0x5b, 0x18, 0x6e, 0x40, 0x5b, 0xf0, 0x6d,
0x08, 0x5a, 0x18, 0x7e, 0x08, 0x5a, 0xf0, 0x7d,
0x20, 0x4d, 0x96, 0x7d, 0x20, 0x4d, 0x64, 0x78,
0x02, 0x84, 0x09, 0x03, 0x02, 0x84, 0x09, 0x03,
0x40, 0x5b, 0xe8, 0x7d, 0x40, 0x5b, 0xbe, 0x7d,
0x08, 0xa8, 0x81, 0x6d, 0xff, 0xae, 0x5d, 0x1b,
0x08, 0xa8, 0x25, 0x6b,
0x80, 0xf9, 0xf2, 0x01, 0x80, 0xf9, 0xf2, 0x01,
0x02, 0xea, 0xb4, 0x04, 0x02, 0xea, 0xb4, 0x04,
0x01, 0x38, 0xe1, 0x30, 0x01, 0x38, 0xe1, 0x30,
0x05, 0x39, 0xe3, 0x98, 0x05, 0x39, 0xe3, 0x98,
0x01, 0xe0, 0xf8, 0x31, 0x01, 0xe0, 0xf4, 0x31,
0xff, 0xea, 0xc0, 0x09, 0xff, 0xea, 0xc0, 0x09,
0x00, 0x3a, 0xe5, 0x20, 0x00, 0x3a, 0xe5, 0x20,
0x00, 0x3b, 0xe7, 0x20, 0x00, 0x3b, 0xe7, 0x20,
0x01, 0xfc, 0xc0, 0x31, 0x01, 0xfa, 0xc0, 0x31,
0x04, 0xea, 0xe8, 0x30, 0x04, 0xea, 0xe8, 0x30,
0xff, 0xea, 0xf0, 0x08, 0xff, 0xea, 0xf0, 0x08,
0x02, 0xea, 0xf2, 0x00, 0x02, 0xea, 0xf2, 0x00,
...@@ -1000,124 +981,115 @@ static struct patch { ...@@ -1000,124 +981,115 @@ static struct patch {
{ ahd_patch0_func, 30, 1, 1 }, { ahd_patch0_func, 30, 1, 1 },
{ ahd_patch1_func, 37, 1, 2 }, { ahd_patch1_func, 37, 1, 2 },
{ ahd_patch0_func, 38, 1, 1 }, { ahd_patch0_func, 38, 1, 1 },
{ ahd_patch2_func, 45, 1, 2 }, { ahd_patch2_func, 43, 1, 2 },
{ ahd_patch0_func, 46, 1, 1 }, { ahd_patch0_func, 44, 1, 1 },
{ ahd_patch2_func, 49, 1, 2 }, { ahd_patch2_func, 47, 1, 2 },
{ ahd_patch0_func, 50, 1, 1 }, { ahd_patch0_func, 48, 1, 1 },
{ ahd_patch2_func, 53, 1, 2 }, { ahd_patch2_func, 51, 1, 2 },
{ ahd_patch0_func, 54, 1, 1 }, { ahd_patch0_func, 52, 1, 1 },
{ ahd_patch2_func, 56, 1, 2 }, { ahd_patch2_func, 149, 6, 1 },
{ ahd_patch0_func, 57, 1, 1 }, { ahd_patch1_func, 155, 2, 1 },
{ ahd_patch2_func, 60, 1, 2 }, { ahd_patch4_func, 157, 1, 1 },
{ ahd_patch0_func, 61, 1, 1 }, { ahd_patch2_func, 166, 1, 2 },
{ ahd_patch2_func, 64, 1, 2 }, { ahd_patch0_func, 167, 1, 1 },
{ ahd_patch0_func, 65, 1, 1 }, { ahd_patch5_func, 168, 2, 2 },
{ ahd_patch2_func, 162, 6, 1 }, { ahd_patch0_func, 170, 6, 3 },
{ ahd_patch1_func, 168, 2, 1 }, { ahd_patch2_func, 173, 1, 2 },
{ ahd_patch4_func, 170, 1, 1 }, { ahd_patch0_func, 174, 1, 1 },
{ ahd_patch2_func, 179, 1, 2 }, { ahd_patch2_func, 177, 1, 2 },
{ ahd_patch0_func, 180, 1, 1 }, { ahd_patch0_func, 178, 1, 1 },
{ ahd_patch5_func, 181, 2, 2 }, { ahd_patch6_func, 180, 2, 1 },
{ ahd_patch0_func, 183, 6, 3 }, { ahd_patch4_func, 188, 16, 2 },
{ ahd_patch2_func, 186, 1, 2 }, { ahd_patch0_func, 204, 1, 1 },
{ ahd_patch0_func, 187, 1, 1 }, { ahd_patch7_func, 224, 2, 1 },
{ ahd_patch2_func, 190, 1, 2 }, { ahd_patch1_func, 228, 1, 2 },
{ ahd_patch0_func, 191, 1, 1 }, { ahd_patch0_func, 229, 1, 1 },
{ ahd_patch6_func, 193, 2, 1 }, { ahd_patch6_func, 232, 2, 1 },
{ ahd_patch4_func, 201, 16, 2 }, { ahd_patch1_func, 246, 1, 2 },
{ ahd_patch0_func, 217, 1, 1 }, { ahd_patch0_func, 247, 1, 1 },
{ ahd_patch7_func, 237, 2, 1 }, { ahd_patch1_func, 250, 1, 2 },
{ ahd_patch1_func, 241, 1, 2 }, { ahd_patch0_func, 251, 1, 1 },
{ ahd_patch0_func, 242, 1, 1 }, { ahd_patch2_func, 254, 1, 2 },
{ ahd_patch6_func, 245, 2, 1 }, { ahd_patch0_func, 255, 1, 1 },
{ ahd_patch1_func, 259, 1, 2 }, { ahd_patch1_func, 310, 1, 2 },
{ ahd_patch0_func, 260, 1, 1 }, { ahd_patch0_func, 311, 1, 1 },
{ ahd_patch1_func, 263, 1, 2 }, { ahd_patch2_func, 319, 1, 2 },
{ ahd_patch0_func, 264, 1, 1 }, { ahd_patch0_func, 320, 1, 1 },
{ ahd_patch2_func, 267, 1, 2 }, { ahd_patch2_func, 323, 1, 2 },
{ ahd_patch0_func, 268, 1, 1 },
{ ahd_patch1_func, 323, 1, 2 },
{ ahd_patch0_func, 324, 1, 1 }, { ahd_patch0_func, 324, 1, 1 },
{ ahd_patch2_func, 332, 1, 2 }, { ahd_patch1_func, 331, 1, 2 },
{ ahd_patch0_func, 333, 1, 1 }, { ahd_patch0_func, 332, 1, 1 },
{ ahd_patch2_func, 336, 1, 2 }, { ahd_patch8_func, 351, 1, 1 },
{ ahd_patch0_func, 337, 1, 1 }, { ahd_patch8_func, 354, 1, 1 },
{ ahd_patch1_func, 344, 1, 2 }, { ahd_patch8_func, 356, 1, 1 },
{ ahd_patch0_func, 345, 1, 1 }, { ahd_patch8_func, 368, 1, 1 },
{ ahd_patch8_func, 364, 1, 1 }, { ahd_patch1_func, 378, 1, 2 },
{ ahd_patch8_func, 367, 1, 1 }, { ahd_patch0_func, 379, 1, 1 },
{ ahd_patch8_func, 369, 1, 1 }, { ahd_patch1_func, 381, 1, 2 },
{ ahd_patch8_func, 381, 1, 1 }, { ahd_patch0_func, 382, 1, 1 },
{ ahd_patch1_func, 391, 1, 2 }, { ahd_patch1_func, 390, 1, 2 },
{ ahd_patch0_func, 392, 1, 1 }, { ahd_patch0_func, 391, 1, 1 },
{ ahd_patch1_func, 394, 1, 2 }, { ahd_patch2_func, 404, 1, 2 },
{ ahd_patch0_func, 395, 1, 1 }, { ahd_patch0_func, 405, 1, 1 },
{ ahd_patch1_func, 403, 1, 2 }, { ahd_patch9_func, 435, 1, 1 },
{ ahd_patch0_func, 404, 1, 1 }, { ahd_patch1_func, 442, 1, 2 },
{ ahd_patch2_func, 415, 1, 2 }, { ahd_patch0_func, 443, 1, 1 },
{ ahd_patch0_func, 416, 1, 1 }, { ahd_patch2_func, 455, 1, 2 },
{ ahd_patch9_func, 444, 1, 1 }, { ahd_patch0_func, 456, 1, 1 },
{ ahd_patch1_func, 451, 1, 2 }, { ahd_patch10_func, 461, 6, 2 },
{ ahd_patch0_func, 452, 1, 1 }, { ahd_patch0_func, 467, 1, 1 },
{ ahd_patch2_func, 464, 1, 2 }, { ahd_patch11_func, 490, 1, 1 },
{ ahd_patch0_func, 465, 1, 1 }, { ahd_patch12_func, 499, 1, 1 },
{ ahd_patch10_func, 470, 6, 2 }, { ahd_patch13_func, 500, 1, 2 },
{ ahd_patch0_func, 476, 1, 1 }, { ahd_patch0_func, 501, 1, 1 },
{ ahd_patch11_func, 499, 1, 1 }, { ahd_patch14_func, 506, 1, 1 },
{ ahd_patch12_func, 508, 1, 1 }, { ahd_patch13_func, 507, 1, 1 },
{ ahd_patch13_func, 509, 1, 2 }, { ahd_patch15_func, 520, 1, 2 },
{ ahd_patch0_func, 510, 1, 1 }, { ahd_patch0_func, 521, 1, 1 },
{ ahd_patch14_func, 515, 1, 1 }, { ahd_patch1_func, 543, 1, 2 },
{ ahd_patch13_func, 516, 1, 1 }, { ahd_patch0_func, 544, 1, 1 },
{ ahd_patch15_func, 529, 1, 2 }, { ahd_patch1_func, 547, 1, 2 },
{ ahd_patch0_func, 530, 1, 1 }, { ahd_patch0_func, 548, 1, 1 },
{ ahd_patch1_func, 552, 1, 2 }, { ahd_patch2_func, 553, 1, 2 },
{ ahd_patch0_func, 553, 1, 1 }, { ahd_patch0_func, 554, 1, 1 },
{ ahd_patch1_func, 556, 1, 2 }, { ahd_patch2_func, 558, 1, 2 },
{ ahd_patch0_func, 557, 1, 1 }, { ahd_patch0_func, 559, 1, 1 },
{ ahd_patch2_func, 562, 1, 2 }, { ahd_patch1_func, 560, 1, 2 },
{ ahd_patch0_func, 563, 1, 1 }, { ahd_patch0_func, 561, 1, 1 },
{ ahd_patch2_func, 567, 1, 2 }, { ahd_patch2_func, 572, 1, 2 },
{ ahd_patch0_func, 568, 1, 1 }, { ahd_patch0_func, 573, 1, 1 },
{ ahd_patch1_func, 569, 1, 2 }, { ahd_patch16_func, 577, 1, 1 },
{ ahd_patch0_func, 570, 1, 1 }, { ahd_patch17_func, 582, 1, 1 },
{ ahd_patch2_func, 581, 1, 2 }, { ahd_patch18_func, 583, 2, 1 },
{ ahd_patch0_func, 582, 1, 1 }, { ahd_patch17_func, 587, 1, 2 },
{ ahd_patch16_func, 586, 1, 1 }, { ahd_patch0_func, 588, 1, 1 },
{ ahd_patch17_func, 591, 1, 1 }, { ahd_patch2_func, 591, 1, 2 },
{ ahd_patch18_func, 592, 2, 1 }, { ahd_patch0_func, 592, 1, 1 },
{ ahd_patch17_func, 596, 1, 2 }, { ahd_patch2_func, 610, 1, 2 },
{ ahd_patch0_func, 597, 1, 1 }, { ahd_patch0_func, 611, 1, 1 },
{ ahd_patch2_func, 600, 1, 2 }, { ahd_patch19_func, 612, 12, 1 },
{ ahd_patch0_func, 601, 1, 1 }, { ahd_patch1_func, 628, 1, 2 },
{ ahd_patch2_func, 619, 1, 2 }, { ahd_patch0_func, 629, 1, 1 },
{ ahd_patch0_func, 620, 1, 1 }, { ahd_patch19_func, 630, 1, 1 },
{ ahd_patch19_func, 621, 12, 1 }, { ahd_patch1_func, 642, 1, 2 },
{ ahd_patch1_func, 637, 1, 2 }, { ahd_patch0_func, 643, 1, 1 },
{ ahd_patch0_func, 638, 1, 1 },
{ ahd_patch19_func, 639, 1, 1 },
{ ahd_patch1_func, 650, 1, 2 }, { ahd_patch1_func, 650, 1, 2 },
{ ahd_patch0_func, 651, 1, 1 }, { ahd_patch0_func, 651, 1, 1 },
{ ahd_patch1_func, 658, 1, 2 }, { ahd_patch16_func, 674, 1, 1 },
{ ahd_patch0_func, 659, 1, 1 }, { ahd_patch16_func, 712, 1, 1 },
{ ahd_patch16_func, 683, 1, 1 }, { ahd_patch1_func, 723, 1, 2 },
{ ahd_patch16_func, 699, 1, 1 }, { ahd_patch0_func, 724, 1, 1 },
{ ahd_patch2_func, 711, 1, 2 }, { ahd_patch1_func, 741, 1, 2 },
{ ahd_patch0_func, 712, 1, 1 }, { ahd_patch0_func, 742, 1, 1 },
{ ahd_patch16_func, 731, 1, 1 }, { ahd_patch1_func, 744, 1, 2 },
{ ahd_patch1_func, 739, 1, 2 }, { ahd_patch0_func, 745, 1, 1 },
{ ahd_patch0_func, 740, 1, 1 }, { ahd_patch1_func, 747, 1, 2 },
{ ahd_patch1_func, 761, 1, 2 }, { ahd_patch0_func, 748, 1, 1 },
{ ahd_patch0_func, 762, 1, 1 }, { ahd_patch20_func, 750, 1, 2 },
{ ahd_patch1_func, 764, 1, 2 }, { ahd_patch0_func, 751, 2, 1 },
{ ahd_patch0_func, 765, 1, 1 }, { ahd_patch21_func, 754, 4, 2 },
{ ahd_patch1_func, 767, 1, 2 }, { ahd_patch0_func, 758, 1, 1 },
{ ahd_patch0_func, 768, 1, 1 }, { ahd_patch21_func, 766, 11, 1 }
{ ahd_patch20_func, 770, 1, 2 },
{ ahd_patch0_func, 771, 2, 1 },
{ ahd_patch21_func, 774, 4, 2 },
{ ahd_patch0_func, 778, 1, 1 },
{ ahd_patch21_func, 785, 11, 1 }
}; };
static struct cs { static struct cs {
...@@ -1127,18 +1099,15 @@ static struct cs { ...@@ -1127,18 +1099,15 @@ static struct cs {
{ 11, 12 }, { 11, 12 },
{ 13, 14 }, { 13, 14 },
{ 29, 42 }, { 29, 42 },
{ 43, 56 }, { 56, 59 },
{ 69, 72 }, { 86, 112 },
{ 99, 124 }, { 113, 144 },
{ 125, 156 }, { 146, 149 },
{ 158, 162 }, { 157, 165 },
{ 170, 178 }, { 188, 237 },
{ 201, 250 }, { 674, 690 },
{ 683, 699 }, { 690, 704 },
{ 699, 717 }, { 714, 718 }
{ 722, 728 },
{ 731, 736 },
{ 742, 748 }
}; };
static const int num_critical_sections = sizeof(critical_sections) static const int num_critical_sections = sizeof(critical_sections)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment