diff options
| author | thorpej <thorpej@NetBSD.org> | 2003-08-29 00:09:59 +0000 |
|---|---|---|
| committer | thorpej <thorpej@NetBSD.org> | 2003-08-29 00:09:59 +0000 |
| commit | e88c8722b77095d841218e6cd0e79b86873d0c7e (patch) | |
| tree | 56cbcd0bcfa2cf4a7a160a56fde9c01a58ebb75d /sys/dev/microcode | |
| parent | 03bdc52085b3678c2cf66159607933ac11836332 (diff) | |
Apply the following change checked in 2003/05/04 00:20:07 by gibbs
to the FreeBSD ahd driver:
Correct spelling errors.
Switch to handling bad SCSI status as a sequencer interrupt
instead of having the kernel proccess these failures via
the completion queue. This is done because:
o The old scheme required us to pause the sequencer and clear
critical sections for each SCB. It seems that these pause
actions, if coincident with a sequencer FIFO interrupt, would
result in a FIFO interrupt getting lost or directing to the
wrong FIFO. This caused hangs when the driver was stressed
under high "queue full" loads.
o The completion code assumed that it was always called with
the sequencer running. This may not be the case in timeout
processing where completions occur manually via
ahd_pause_and_flushwork().
o With this scheme, the extra expense of clearing critical
sections is avoided since the sequencer will only self pause
once all pending selections have cleared and it is not in
a critical section.
aic79xx.c
Add code to handle the new BAD_SCB_STATUS sequencer
interrupt code. This just redirects the SCB through
the already existing ahd_complete_scb() code path.
Remove code in ahd_handle_scsi_status() that paused
the sequencer, made sure that no selections where
pending, and cleared critical sections. Bad
status SCBs are now only processed when all of these
conditions are true.
aic79xx.reg:
Add the BAD_SCB_STATUS sequencer interrupt code.
aic79xx.seq:
When completing an SCB upload to the host, if
we are doing this because the SCB contains non-zero
SCSI status, defer completing the SCB until there
are no pending selection events. When completing
these SCBs, use the new BAD_SCB_STATUS sequencer
interrupt. For all other uploaded SCBs (currently
only for underruns), the SCB is completed via the
normal done queue. Additionally, keep the SCB that
is currently being uploaded on the COMPLETE_DMA_SCB
list until the dma is completed, not just until the
DMA is started. This ensures that the DMA is restarted
properly should the host disable the DMA transfer for
some reason.
In our RevA workaround for Maxtor drives, guard against
the host pausing us while trying to pause I/O until the
first data-valid REQ by clearing the current snapshot
so that we can tell if the transfer has completed prior
to us noticing the REQINIT status.
In cfg4data_intr, shave off an instruction before getting
the data path running by adding an entrypoint to the
overrun handler to also increment the FIFO use count.
In the overrun handler, be sure to clear our LONGJMP
address in both exit paths.
Perform a few sequencer optimizations.
aic79xx.c:
Print the full path from the SCB when a packetized
status overrun occurs.
Remove references to LONGJMP_SCB which is being
removed from firmware usage.
Print the new SCB_FIFO_USE_COUNT field in the
per-SCB section of ahd_dump_card_state(). The
SCB_TAG field is now re-used by the sequencer,
so it no longer makes sense to reference this
field in the kernel driver.
aic79xx.h:
Re-arrange fields in the hardware SCB from largest
size type to smallest. This makes it easier to
move fields without changing field alignment.
The hardware scb tag field is now down near the
"spare" portion of the SCB to facilitate reuse
by the sequencer.
aic79xx.reg:
Remove LONGJMP_ADDR.
Rearrange SCB fields to match aic79xx.h.
Add SCB_FIFO_USE_COUNT as the first byte
of the SCB_TAG field.
aic79xx.seq:
Add a per-SCB "Fifos in use count" field and use
it to determine when it is safe (all data posted)
to deliver status back to the host. The old method
involved polling one or both FIFOs to verify that
the current task did not have pending data. This
makes running down the GSFIFO very cheap, so we
will empty the GSFIFO in one idle loop pass in
all cases.
Use this simplification of the completion process
to prune down the data FIFO teardown sequencer for
packetized transfers. Much more code is now shared
between the data residual and transfer complete cases.
Correct some issues in the packetized status handler.
It used to be possible to CLRCHN our FIFO before status
had fully transferred to the host. We also failed to
handle NONPACKREQ phases that could occur should a CRC
error occur during transmission of the status data packet.
Correct a few big endian issues:
aic79xx.c:
aic79xx_inline.h:
aic79xx_pci.c:
aic79xx_osm.c:
o Always get the SCB's tag via the SCB_GET_TAG acccessor
o Add missing use of byte swapping macros when touching
hscb fields.
o Don't double swap SEEPROM data when it is printed.
Correct a big-endian bug. We cannot assign a
o When assigning a 32bit LE variable to a 64bit LE
variable, we must be explict about how the words
of the 64bit LE variable are initialized. Cast to
(uint32_t*) to do this.
aic79xx.c:
In ahd_clear_critical_section(), hit CRLSCSIINT
after restoring the interrupt masks to avoid what
appears to be a glitch on SCSIINT. Any real SCSIINT
status will be persistent and will immidiately
reset SCSIINT. This clear should only get rid of
spurious SCSIINTs.
This glitch was the cause of the "Unexpected PKT busfree"
status that occurred under high queue full loads
Call ahd_fini_scbdata() after shutdown so that
any ahd_chip_init() routine that might access
SCB data will not access free'd memory.
Reset the bus on an IOERR since the chip doesn't
seem to reset to the new voltage level without
this.
Change offset calculation for scatter gather maps
so that the calculation is correct if an integral
multiple of sg lists does not fit in the allocation
size.
Adjust bus dma tag for data buffers based on 39BIT
addressing flag in our softc.
Use the QFREEZE count to simplify ahd_pause_and_flushworkd().
We can thus rely on the sequencer eventually clearing ENSELO.
In ahd_abort_scbs(), fix a bug that could potentially
corrupt sequencer state. The saved SCB was being
restored in the SCSI mode instead of the saved mode.
It turns out that the SCB did not need to be saved at all
as the scbptr is already restored by all subroutines
called during this function that modify that register.
aic79xx.c:
aic79xx.h:
aic79xx_pci.c:
Add support for parsing the seeprom vital product
data. The VPD data are currently unused.
aic79xx.h:
aic79xx.seq:
aic79xx_pci.c:
Add a firmware workaround to make the LED blink
brighter during packetized operations on the H2A.
aic79xx_inline.h:
The host does not use timer interrupts, so don't
gate our decision on whether or not to unpause
the sequencer on whether or not a timer interrupt
is pending.
Diffstat (limited to 'sys/dev/microcode')
| -rw-r--r-- | sys/dev/microcode/aic7xxx/aic79xx.reg | 51 | ||||
| -rw-r--r-- | sys/dev/microcode/aic7xxx/aic79xx.seq | 337 | ||||
| -rw-r--r-- | sys/dev/microcode/aic7xxx/aic79xx_reg.h | 127 | ||||
| -rw-r--r-- | sys/dev/microcode/aic7xxx/aic79xx_seq.h | 1108 |
4 files changed, 834 insertions, 789 deletions
diff --git a/sys/dev/microcode/aic7xxx/aic79xx.reg b/sys/dev/microcode/aic7xxx/aic79xx.reg index b3cd742428e..5470278cffa 100644 --- a/sys/dev/microcode/aic7xxx/aic79xx.reg +++ b/sys/dev/microcode/aic7xxx/aic79xx.reg @@ -1,3 +1,5 @@ +/* $NetBSD: aic79xx.reg,v 1.4 2003/08/29 00:10:01 thorpej Exp $ */ + /* * Aic79xx register and scratch ram definitions. * @@ -37,9 +39,9 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.reg,v 1.10 2003/03/25 22:16:27 scottl Exp $ + * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.reg,v 1.11 2003/05/04 00:20:07 gibbs Exp $ */ -VERSION = "$NetBSD: aic79xx.reg,v 1.3 2003/05/14 12:57:46 wiz Exp $" +VERSION = "Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling @@ -194,7 +196,8 @@ register SEQINTCODE { TRACEPOINT1, TRACEPOINT2, TRACEPOINT3, - SAW_HWERR + SAW_HWERR, + BAD_SCB_STATUS } } @@ -3484,9 +3487,6 @@ scratch_ram { LONGJMP_ADDR { size 2 } - LONGJMP_SCB { - size 2 - } ACCUM_SAVE { size 1 } @@ -3799,23 +3799,6 @@ scb { size 4 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 { size 8 } @@ -3834,6 +3817,16 @@ scb { field SG_FULL_RESID 0x02 /* 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 { size 1 field TARGET_SCB 0x80 @@ -3856,8 +3849,16 @@ scb { SCB_TASK_ATTRIBUTE { size 1 } - SCB_BUSADDR { - size 4 + SCB_CDB_LEN { + 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 { size 8 diff --git a/sys/dev/microcode/aic7xxx/aic79xx.seq b/sys/dev/microcode/aic7xxx/aic79xx.seq index c92ac5e9db6..ac1838e7f94 100644 --- a/sys/dev/microcode/aic7xxx/aic79xx.seq +++ b/sys/dev/microcode/aic7xxx/aic79xx.seq @@ -1,3 +1,5 @@ +/* $NetBSD: aic79xx.seq,v 1.4 2003/08/29 00:10:01 thorpej Exp $ */ + /* * Adaptec U320 device driver firmware for Linux and FreeBSD. * @@ -37,10 +39,10 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: /repoman/r/ncvs/src/sys/dev/aic7xxx/aic79xx.seq,v 1.7 2003/02/27 23:23:16 gibbs Exp $ + * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.seq,v 1.8 2003/05/04 00:20:07 gibbs Exp $ */ -VERSION = "$NetBSD: aic79xx.seq,v 1.3 2003/05/14 12:57:46 wiz Exp $" +VERSION = "Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $" PATCH_ARG_LIST = "struct ahd_softc *ahd" PREFIX = "ahd_" @@ -89,6 +91,13 @@ END_CRITICAL; idle_loop_check_nonpackreq: test SSTAT2, NONPACKREQ jz . + 2; call unexpected_nonpkt_phase_find_ctxt; + if ((ahd->bugs & AHD_FAINT_LED_BUG) != 0) { + and A, FIFO0FREE|FIFO1FREE, DFFSTAT; + cmp A, FIFO0FREE|FIFO1FREE jne . + 3; + and SBLKCTL, ~DIAGLEDEN|DIAGLEDON; + jmp . + 2; + or SBLKCTL, DIAGLEDEN|DIAGLEDON; + } call idle_loop_gsfifo_in_scsi_mode; call idle_loop_service_fifos; call idle_loop_cchan; @@ -101,8 +110,8 @@ idle_loop_gsfifo_in_scsi_mode: test LQISTAT2, LQIGSAVAIL jz return; /* * We have received good status for this transaction. There may - * still be data in our FIFOs draining to the host. Setup - * monitoring of the draining process or complete the SCB. + * still be data in our FIFOs draining to the host. Complete + * the SCB only if all data has transferred to the host. */ good_status_IU_done: bmov SCBPTR, GSFIFO, 2; @@ -128,42 +137,20 @@ gsfifo_complete_normally: * 1) Configured and draining to the host, with a FIFO handler. * 2) Pending cfg4data, fifo not empty. * - * Case 1 can be detected by noticing that a longjmp is active for - * the FIFO and LONGJMP_SCB matches our SCB. In this case, we allow - * the routine servicing the FIFO to complete the SCB. + * Case 1 can be detected by noticing a non-zero FIFO active + * count in the SCB. In this case, we allow the routine servicing + * the FIFO to complete the SCB. * * Case 2 implies either a pending or yet to occur save data * pointers for this same context in the other FIFO. So, if * we detect case 1, we will properly defer the post of the SCB * and achieve the desired result. The pending cfg4data will * 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; END_CRITICAL; 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: SET_MODE(M_DFF0, M_DFF0) @@ -172,6 +159,7 @@ idle_loop_service_fifos: idle_loop_next_fifo: SET_MODE(M_DFF1, M_DFF1) test LONGJMP_ADDR[1], INVALID_ADDR jz longjmp; +return: ret; idle_loop_cchan: @@ -189,12 +177,31 @@ END_CRITICAL; scbdma_tohost_done: test CCSCBCTL, CCARREN jz fill_qoutfifo_dmadone; /* - * A complete SCB upload requires no intervention. - * The SCB is already on the COMPLETE_SCB list - * and its completion notification will now be - * handled just like any other SCB. + * An SCB has been succesfully uploaded to the host. + * If the SCB was uploaded for some reason other than + * bad SCSI status (currently only for underruns), we + * queue the SCB for normal completion. Otherwise, we + * wait until any select-out activity has halted, and + * then notify the host so that the transaction can be + * dealt with. + */ + test SCB_SCSI_STATUS, 0xff jnz scbdma_notify_host; + and CCSCBCTL, ~(CCARREN|CCSCBEN); + bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; + bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; + bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; +scbdma_notify_host: + SET_MODE(M_SCSI, M_SCSI) + test SCSISEQ0, ENSELO jnz return; + test SSTAT0, (SELDO|SELINGO) jnz return; + SET_MODE(M_CCHAN, M_CCHAN) + /* + * Remove SCB and notify host. */ - and CCSCBCTL, ~(CCARREN|CCSCBEN) ret; + and CCSCBCTL, ~(CCARREN|CCSCBEN); + bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; + SET_SEQINTCODE(BAD_SCB_STATUS) + ret; fill_qoutfifo_dmadone: and CCSCBCTL, ~(CCARREN|CCSCBEN); call qoutfifo_updated; @@ -256,6 +263,13 @@ fetch_new_scb_done: clr A; add CMDS_PENDING, 1; 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. */ bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4; mvi SCB_NEXT[1], SCB_LIST_NULL; @@ -332,15 +346,7 @@ fetch_new_scb: dma_complete_scb: bmov SCBPTR, COMPLETE_DMA_SCB_HEAD, 2; bmov SCBHADDR, SCB_BUSADDR, 4; - mvi CCARREN|CCSCBEN|CCSCBRESET call dma_scb; - /* - * Now that we've started the DMA, push us onto - * the normal completion queue to have our SCBID - * posted to the kernel. - */ - bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; - bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; - bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; + mvi CCARREN|CCSCBEN|CCSCBRESET jmp dma_scb; END_CRITICAL; /* @@ -359,8 +365,6 @@ dma_scb: mov CCSCBCTL, SINDEX ret; BEGIN_CRITICAL; -setjmp_setscb: - bmov LONGJMP_SCB, SCBPTR, 2; setjmp: bmov LONGJMP_ADDR, STACK, 2 ret; setjmp_inline: @@ -1028,9 +1032,18 @@ freeze_queue: or SEQ_FLAGS2, SELECTOUT_QFROZEN; 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) bmov SCBPTR, ARG_1, 2; + test SCB_FIFO_USE_COUNT, 0xFF jnz return; queue_scb_completion: test SCB_SCSI_STATUS,0xff jnz bad_status; /* @@ -1046,6 +1059,12 @@ bad_status: cmp SCB_SCSI_STATUS, STATUS_PKT_SENSE je upload_scb; call freeze_queue; 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 COMPLETE_DMA_SCB_HEAD, SCBPTR, 2; or SCB_SGPTR, SG_STATUS_VALID ret; @@ -1356,7 +1375,7 @@ load_first_seg: clr SG_STATE ret; p_data_handle_xfer: - call setjmp_setscb; + call setjmp; test SG_STATE, LOADING_NEEDED jnz service_fifo; p_data_clear_handler: or LONGJMP_ADDR[1], INVALID_ADDR ret; @@ -1609,25 +1628,32 @@ export seq_isr: * and deffer the test by one instruction. */ mov REG_ISR, LQISTAT2; - test REG_ISR, LQIWORKONLQ jz data_valid; - test SEQINTSRC, SAVEPTRS jz data_valid; + test REG_ISR, LQIWORKONLQ jz main_isr; + test SEQINTSRC, SAVEPTRS jz main_isr; test LONGJMP_ADDR[1], INVALID_ADDR jz saveptr_active_fifo; /* - * Switch to the active FIFO. + * Switch to the active FIFO after clearing the snapshot + * savepointer in the current FIFO. We do this so that + * a pending CTXTDONE or SAVEPTR is visible in the active + * FIFO. This status is the only way we can detect if we + * have lost the race (e.g. host paused us) and our attepts + * to disable the channel occurred after all REQs were + * already seen and acked (REQINIT never comes true). */ + mvi DFFSXFRCTL, CLRCHN; xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); - test DFCNTRL, DIRECTION jz snapshot_other_fifo; + test DFCNTRL, DIRECTION jz interrupt_return; and DFCNTRL, ~SCSIEN; - test SSTAT1, REQINIT jz .; +snapshot_wait_data_valid: + test SEQINTSRC, (CTXTDONE|SAVEPTRS) jnz snapshot_data_valid; + test SSTAT1, REQINIT jz snapshot_wait_data_valid; +snapshot_data_valid: or DFCNTRL, SCSIEN; - /* FALLTHROUGH */ -snapshot_other_fifo: - xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); - /* FALLTHROUGH */ + or SEQINTCTL, IRET ret; snapshot_saveptr: mvi DFFSXFRCTL, CLRCHN; or SEQINTCTL, IRET ret; -data_valid: +main_isr: } test SEQINTSRC, CFG4DATA jnz cfg4data_intr; test SEQINTSRC, CFG4ISTAT jnz cfg4istat_intr; @@ -1660,9 +1686,11 @@ saveptr_active_fifo: or SEQINTCTL, IRET ret; cfg4data_intr: - test SCB_SGPTR[0], SG_LIST_NULL jnz pkt_handle_overrun; + test SCB_SGPTR[0], SG_LIST_NULL jnz pkt_handle_overrun_inc_use_count; call load_first_seg; call pkt_handle_xfer; + inc SCB_FIFO_USE_COUNT; +interrupt_return: or SEQINTCTL, IRET ret; cfg4istat_intr: @@ -1722,7 +1750,6 @@ cfg4icmd_intr: test DFSTATUS, FIFOEMP jz pkt_handle_overrun pkt_handle_xfer: - bmov LONGJMP_SCB, SCBPTR, 2; test SG_STATE, LOADING_NEEDED jz pkt_last_seg; call setjmp; test SEQINTSRC, SAVEPTRS jnz pkt_saveptrs; @@ -1744,7 +1771,7 @@ pkt_service_fifo: pkt_last_seg: call setjmp; 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 SCSISIGO, ATNO jnz . + 2; test SSTAT2, NONPACKREQ jz return; @@ -1753,7 +1780,7 @@ pkt_last_seg: /* * 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 * prior to clearing this status and executing the common code for * these two cases. @@ -1782,118 +1809,134 @@ pkt_saveptrs_wait_fifoemp: pkt_saveptrs_check_status: or LONGJMP_ADDR[1], INVALID_ADDR; test REG0, SAVEPTRS jz unexpected_nonpkt_phase; - test SCB_CONTROL, STATUS_RCVD jz pkt_saveptrs_clrchn; - jmp last_pkt_complete; -pkt_saveptrs_clrchn: + dec SCB_FIFO_USE_COUNT; + test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle; mvi DFFSXFRCTL, CLRCHN ret; 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; - 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 - * 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. + * Mark transfer as completed. */ -last_pkt_queue_scb: - 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; + or SCB_SGPTR, SG_LIST_NULL; -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; -END_CRITICAL; -wait_pkt_end_loop: - test SEQINTSRC, CTXTDONE jnz pkt_end; +pkt_wait_ctxt_done_loop: + test SEQINTSRC, CTXTDONE jnz pkt_ctxt_done; + /* + * A sufficiently large overrun or a NONPACKREQ may + * prevent CTXTDONE from ever asserting, so we must + * poll for these statuses too. + */ check_overrun; test SSTAT2, NONPACKREQ jz return; test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase; -pkt_end: -BEGIN_CRITICAL; + /* FALLTHROUGH */ + +pkt_ctxt_done: check_overrun; 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; 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 * large enough to take the maximum allowed status packet. * 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: - call setjmp_setscb; - test SG_CACHE_SHADOW, LAST_SEG_DONE jz check_status_overrun; - test SEQINTSRC, CTXTDONE jz return; -status_IU_done: -BEGIN_CRITICAL; + call setjmp; + test SG_CACHE_SHADOW, LAST_SEG_DONE jnz pkt_status_check_overrun; + test SEQINTSRC, CTXTDONE jz pkt_status_check_nonpackreq; + test SG_CACHE_SHADOW, LAST_SEG_DONE jnz pkt_status_check_overrun; +pkt_status_IU_done: if ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0) { or DFCNTRL, FIFOFLUSH; } + test DFSTATUS, FIFOEMP jz return; +BEGIN_CRITICAL; or LONGJMP_ADDR[1], INVALID_ADDR; mvi SCB_SCSI_STATUS, STATUS_PKT_SENSE; or SCB_CONTROL, STATUS_RCVD; - jmp last_pkt_complete; + jmp pkt_complete_scb_if_fifos_idle; END_CRITICAL; -check_status_overrun: - /* - * We've filled the entire sense buffer. - * Wait for either context done or a negative - * shaddow count. If the context completes without - * causing the shaddow count to go negative, then - * this was a successful transfer up to the status - * limit. Otherwise we report the error. - */ - test SHCNT[2], 0xFF jnz report_status_overrun; - test SEQINTSRC, CTXTDONE jz return; - test SHCNT[2], 0xFF jz status_IU_done; -report_status_overrun: +pkt_status_check_overrun: + /* + * Status PKT overruns are uncerimoniously recovered with a + * bus reset. If we've overrun, let the host know so that + * recovery can be performed. + * + * LAST_SEG_DONE has been observed. If either CTXTDONE or + * a NONPACKREQ phase change have occurred and the FIFO is + * empty, there is no overrun. + */ + test DFSTATUS, FIFOEMP jz pkt_status_report_overrun; + test SEQINTSRC, CTXTDONE jz . + 2; + 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) - jmp status_IU_done; - -SET_SRC_MODE M_DFF0; -SET_DST_MODE M_DFF0; -BEGIN_CRITICAL; -check_fifo: - test LONGJMP_ADDR[1], INVALID_ADDR jnz return; - mov A, ARG_2; - 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: - call setjmp_setscb; - test SG_CACHE_SHADOW, LAST_SEG_DONE jz return; - or LONGJMP_ADDR[1], INVALID_ADDR; - mvi DFFSXFRCTL, CLRCHN ret; + /* SEQUENCER RESTARTED */ +pkt_status_check_nonpackreq: + /* + * CTXTDONE may be held off if a NONPACKREQ is associated with + * the current context. If a NONPACKREQ is observed, decide + * if it is for the current context. If it is for the current + * context, we must defer NONPACKREQ processing until all data + * has transferred to the host. + */ + test SCSIPHASE, ~DATA_PHASE_MASK jz return; + test SCSISIGO, ATNO jnz . + 2; + test SSTAT2, NONPACKREQ jz return; + test SEQINTSRC, CTXTDONE jnz pkt_status_IU_done; + 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: @@ -1922,6 +1965,7 @@ unexpected_nonpkt_phase: SET_SRC_MODE M_DFF0; SET_DST_MODE M_DFF0; or LONGJMP_ADDR[1], INVALID_ADDR; + dec SCB_FIFO_USE_COUNT; mvi DFFSXFRCTL, CLRCHN; mvi CLRSINT2, CLRNONPACKREQ; test SCSIPHASE, ~(MSG_IN_PHASE|MSG_OUT_PHASE) jnz illegal_phase; @@ -1938,6 +1982,8 @@ illegal_phase: * data. Otherwise use an overrun buffer in the host to simulate * BITBUCKET. */ +pkt_handle_overrun_inc_use_count: + inc SCB_FIFO_USE_COUNT; pkt_handle_overrun: SET_SEQINTCODE(CFG4OVERRUN) call freeze_queue; @@ -1963,8 +2009,9 @@ overrun_load_done: pkt_overrun_end: or SCB_RESIDUAL_SGPTR, SG_OVERRUN_RESID; test SEQINTSRC, CTXTDONE jz unexpected_nonpkt_phase; - test SCB_CONTROL, STATUS_RCVD jnz last_pkt_queue_scb; + dec SCB_FIFO_USE_COUNT; or LONGJMP_ADDR[1], INVALID_ADDR; + test SCB_CONTROL, STATUS_RCVD jnz pkt_complete_scb_if_fifos_idle; mvi DFFSXFRCTL, CLRCHN ret; if ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0) { diff --git a/sys/dev/microcode/aic7xxx/aic79xx_reg.h b/sys/dev/microcode/aic7xxx/aic79xx_reg.h index 4c437c05015..f709a642a38 100644 --- a/sys/dev/microcode/aic7xxx/aic79xx_reg.h +++ b/sys/dev/microcode/aic7xxx/aic79xx_reg.h @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $NetBSD: aic79xx_reg.h,v 1.3 2003/05/14 12:57:46 wiz Exp $ - * $NetBSD: aic79xx_reg.h,v 1.3 2003/05/14 12:57:46 wiz Exp $ + * Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $ + * Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $ */ typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef struct ahd_reg_parse_entry { @@ -1924,17 +1924,10 @@ ahd_reg_print_t ahd_longjmp_addr_print; #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 ahd_reg_print_t ahd_accum_save_print; #else #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 #if AIC_DEBUG_REGISTERS @@ -2246,59 +2239,45 @@ ahd_reg_print_t ahd_scb_sense_busaddr_print; #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", 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; +ahd_reg_print_t ahd_scb_dataptr_print; #else -#define ahd_scb_task_management_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT", 0x193, regvalue, cur_col, wrap) +#define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x190, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_next_print; +ahd_reg_print_t ahd_scb_datacnt_print; #else -#define ahd_scb_next_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_NEXT", 0x194, regvalue, cur_col, wrap) +#define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_DATACNT", 0x198, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_next2_print; +ahd_reg_print_t ahd_scb_sgptr_print; #else -#define ahd_scb_next2_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_NEXT2", 0x196, regvalue, cur_col, wrap) +#define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_SGPTR", 0x19c, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_dataptr_print; +ahd_reg_print_t ahd_scb_busaddr_print; #else -#define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x198, regvalue, cur_col, wrap) +#define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1a0, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_datacnt_print; +ahd_reg_print_t ahd_scb_next_print; #else -#define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_DATACNT", 0x1a0, regvalue, cur_col, wrap) +#define ahd_scb_next_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_NEXT", 0x1a4, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_sgptr_print; +ahd_reg_print_t ahd_scb_next2_print; #else -#define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_SGPTR", 0x1a4, regvalue, cur_col, wrap) +#define ahd_scb_next2_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "SCB_NEXT2", 0x1a6, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS @@ -2330,10 +2309,24 @@ ahd_reg_print_t ahd_scb_task_attribute_print; #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_scb_busaddr_print; +ahd_reg_print_t ahd_scb_cdb_len_print; #else -#define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1ac, regvalue, cur_col, wrap) +#define ahd_scb_cdb_len_print(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 #if AIC_DEBUG_REGISTERS @@ -2367,6 +2360,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define SPLTINT 0x01 #define SEQINTCODE 0x02 +#define BAD_SCB_STATUS 0x1a #define SAW_HWERR 0x19 #define TRACEPOINT3 0x18 #define TRACEPOINT2 0x17 @@ -2438,7 +2432,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define HS_MAILBOX 0x0b #define HOST_TQINPOS 0x80 -#define ENINT_COALESCE 0x40 +#define ENINT_COALESCE 0x40 #define SEQINTSTAT 0x0c #define SEQ_SWTMRTO 0x10 @@ -3508,9 +3502,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define LONGJMP_ADDR 0xf8 -#define LONGJMP_SCB 0xfa - -#define ACCUM_SAVE 0xfc +#define ACCUM_SAVE 0xfa #define AHD_PCI_CONFIG_BASE 0x100 @@ -3656,29 +3648,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define SCB_SENSE_BUSADDR 0x18c #define SCB_NEXT_COMPLETE 0x18c -#define SCB_TAG 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_DATAPTR 0x190 -#define SCB_NEXT2 0x196 - -#define SCB_DATAPTR 0x198 - -#define SCB_DATACNT 0x1a0 +#define SCB_DATACNT 0x198 #define SG_LAST_SEG 0x80 #define SG_HIGH_ADDR_BITS 0x7f -#define SCB_SGPTR 0x1a4 +#define SCB_SGPTR 0x19c #define SG_STATUS_VALID 0x04 #define SG_FULL_RESID 0x02 #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 TARGET_SCB 0x80 #define DISCENB 0x40 @@ -3697,7 +3684,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #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_PKT_LUN 0x1b0 @@ -3775,5 +3768,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; /* Exported Labels */ -#define LABEL_seq_isr 0x268 -#define LABEL_timer_isr 0x264 +#define LABEL_seq_isr 0x270 +#define LABEL_timer_isr 0x26c diff --git a/sys/dev/microcode/aic7xxx/aic79xx_seq.h b/sys/dev/microcode/aic7xxx/aic79xx_seq.h index fbf8805360d..210c6b53e93 100644 --- a/sys/dev/microcode/aic7xxx/aic79xx_seq.h +++ b/sys/dev/microcode/aic7xxx/aic79xx_seq.h @@ -2,97 +2,104 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $NetBSD: aic79xx_seq.h,v 1.2 2003/04/20 11:20:52 fvdl Exp $ - * $NetBSD: aic79xx_seq.h,v 1.2 2003/04/20 11:20:52 fvdl Exp $ + * Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $ + * Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $ */ static uint8_t seqprog[] = { 0xff, 0x02, 0x06, 0x78, - 0x00, 0xea, 0x46, 0x59, + 0x00, 0xea, 0x4e, 0x59, 0x01, 0xea, 0x04, 0x30, 0xff, 0x04, 0x0c, 0x78, - 0x19, 0xea, 0x46, 0x59, + 0x19, 0xea, 0x4e, 0x59, 0x19, 0xea, 0x04, 0x00, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x60, 0x3a, 0x1a, 0x68, 0x04, 0x47, 0x1b, 0x68, 0xff, 0x21, 0x1b, 0x70, - 0x40, 0x4b, 0x88, 0x69, - 0x00, 0xe2, 0x4a, 0x59, - 0x40, 0x4b, 0x88, 0x69, - 0x20, 0x4b, 0x78, 0x69, + 0x40, 0x4b, 0x90, 0x69, + 0x00, 0xe2, 0x52, 0x59, + 0x40, 0x4b, 0x90, 0x69, + 0x20, 0x4b, 0x80, 0x69, 0xfc, 0x42, 0x24, 0x78, 0x10, 0x40, 0x24, 0x78, - 0x00, 0xe2, 0xd6, 0x5d, + 0x00, 0xe2, 0xd2, 0x5d, 0x20, 0x4d, 0x28, 0x78, - 0x00, 0xe2, 0xd6, 0x5d, - 0x00, 0xe2, 0x34, 0x58, + 0x00, 0xe2, 0xd2, 0x5d, + 0x30, 0x3f, 0xc0, 0x09, + 0x30, 0xe0, 0x30, 0x60, + 0x7f, 0x4a, 0x94, 0x08, + 0x00, 0xe2, 0x32, 0x40, + 0xc0, 0x4a, 0x94, 0x00, + 0x00, 0xe2, 0x3e, 0x58, + 0x00, 0xe2, 0x56, 0x58, 0x00, 0xe2, 0x66, 0x58, - 0x00, 0xe2, 0x76, 0x58, 0x00, 0xe2, 0x06, 0x40, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, - 0x01, 0x52, 0x8c, 0x7d, + 0x01, 0x52, 0x64, 0x78, 0x02, 0x58, 0x50, 0x31, 0xff, 0xea, 0x10, 0x0b, - 0xff, 0x93, 0x45, 0x78, - 0x50, 0x4b, 0x40, 0x68, + 0xff, 0xad, 0x4f, 0x78, + 0x50, 0x4b, 0x4a, 0x68, 0xbf, 0x3a, 0x74, 0x08, - 0x14, 0xea, 0x46, 0x59, + 0x14, 0xea, 0x4e, 0x59, 0x14, 0xea, 0x04, 0x00, 0x08, 0xa8, 0x51, 0x03, - 0x01, 0xa4, 0x4d, 0x78, - 0x00, 0xe2, 0x42, 0x5b, - 0x00, 0xe2, 0x34, 0x40, - 0xff, 0xea, 0xd4, 0x19, - 0x02, 0xa8, 0x84, 0x32, - 0x00, 0xea, 0x3a, 0x59, - 0x01, 0xea, 0x00, 0x30, - 0x00, 0xe2, 0xc2, 0x5d, - 0x00, 0xe2, 0x8c, 0x4d, - 0x11, 0xea, 0x3a, 0x59, - 0x11, 0xea, 0x00, 0x00, - 0x00, 0xe2, 0xc2, 0x5d, - 0x00, 0xe2, 0x8c, 0x4d, - 0x33, 0xea, 0x3a, 0x59, - 0x33, 0xea, 0x00, 0x00, - 0x00, 0xe2, 0x3a, 0x43, - 0x00, 0xea, 0x3a, 0x59, + 0xff, 0xae, 0x3f, 0x68, + 0x00, 0xe2, 0x50, 0x5b, + 0x00, 0xe2, 0x3e, 0x40, + 0x00, 0xea, 0x42, 0x59, 0x01, 0xea, 0x00, 0x30, - 0x80, 0xf9, 0x6e, 0x68, - 0x00, 0xe2, 0x38, 0x59, - 0x11, 0xea, 0x3a, 0x59, + 0x80, 0xf9, 0x5e, 0x68, + 0x00, 0xe2, 0x40, 0x59, + 0x11, 0xea, 0x42, 0x59, 0x11, 0xea, 0x00, 0x00, - 0x80, 0xf9, 0x38, 0x79, + 0x80, 0xf9, 0x40, 0x79, 0xff, 0xea, 0xd4, 0x0d, - 0x22, 0xea, 0x3a, 0x59, + 0x22, 0xea, 0x42, 0x59, 0x22, 0xea, 0x00, 0x00, - 0x10, 0x16, 0x80, 0x78, + 0x10, 0x16, 0x70, 0x78, 0x01, 0x0b, 0xa2, 0x32, 0x10, 0x16, 0x2c, 0x00, - 0x18, 0xad, 0xee, 0x78, - 0x04, 0xad, 0xbc, 0x68, - 0x80, 0xad, 0x8c, 0x7d, - 0x10, 0xad, 0x8a, 0x78, - 0xe7, 0xad, 0x5a, 0x0d, + 0x18, 0xad, 0xfe, 0x78, + 0x04, 0xad, 0xca, 0x68, + 0x80, 0xad, 0x64, 0x78, + 0x10, 0xad, 0x98, 0x78, + 0xff, 0x88, 0x83, 0x68, 0xe7, 0xad, 0x5a, 0x09, - 0x00, 0xe2, 0x98, 0x58, + 0x02, 0x8c, 0x59, 0x32, + 0x02, 0x28, 0x19, 0x33, + 0x02, 0xa8, 0x50, 0x36, + 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x00, 0x00, + 0x40, 0x3a, 0x64, 0x68, + 0x50, 0x4b, 0x64, 0x68, + 0x22, 0xea, 0x42, 0x59, + 0x22, 0xea, 0x00, 0x00, + 0xe7, 0xad, 0x5a, 0x09, + 0x02, 0x8c, 0x59, 0x32, + 0x1a, 0xea, 0x4e, 0x59, + 0x1a, 0xea, 0x04, 0x00, + 0xff, 0xea, 0xd4, 0x0d, + 0xe7, 0xad, 0x5a, 0x09, + 0x00, 0xe2, 0xa6, 0x58, 0xff, 0xea, 0x56, 0x02, 0x04, 0x7c, 0x78, 0x32, - 0x20, 0x16, 0x8c, 0x7d, + 0x20, 0x16, 0x64, 0x78, 0x04, 0x38, 0x79, 0x32, 0x80, 0x37, 0x6f, 0x16, - 0xff, 0x2d, 0xa7, 0x60, - 0xff, 0x29, 0xa7, 0x60, - 0x40, 0x51, 0xb7, 0x78, - 0xff, 0x4f, 0xa7, 0x68, + 0xff, 0x2d, 0xb5, 0x60, + 0xff, 0x29, 0xb5, 0x60, + 0x40, 0x51, 0xc5, 0x78, + 0xff, 0x4f, 0xb5, 0x68, 0xff, 0x4d, 0xc1, 0x19, 0x00, 0x4e, 0xd5, 0x19, - 0x00, 0xe2, 0xb6, 0x50, + 0x00, 0xe2, 0xc4, 0x50, 0x01, 0x4c, 0xc1, 0x31, 0x00, 0x50, 0xd5, 0x19, - 0x00, 0xe2, 0xb6, 0x48, - 0x80, 0x18, 0x8c, 0x7d, + 0x00, 0xe2, 0xc4, 0x48, + 0x80, 0x18, 0x64, 0x78, 0x02, 0x4a, 0x1d, 0x30, 0x10, 0xea, 0x18, 0x00, 0x60, 0x18, 0x30, 0x00, @@ -100,35 +107,36 @@ static uint8_t seqprog[] = { 0x02, 0xea, 0x02, 0x00, 0xff, 0xea, 0xa0, 0x0a, 0x80, 0x18, 0x30, 0x04, - 0x40, 0xad, 0x8c, 0x7d, + 0x40, 0xad, 0x64, 0x78, 0xe7, 0xad, 0x5a, 0x09, 0x02, 0xa8, 0x40, 0x31, 0xff, 0xea, 0xc0, 0x09, 0x01, 0x4e, 0x9d, 0x1a, 0x00, 0x4f, 0x9f, 0x22, - 0x04, 0x94, 0x49, 0x32, - 0xff, 0xea, 0x2a, 0x03, - 0xff, 0xea, 0x2e, 0x03, + 0x01, 0xea, 0x5c, 0x33, + 0x04, 0xa4, 0x49, 0x32, + 0xff, 0xea, 0x4a, 0x03, + 0xff, 0xea, 0x4e, 0x03, 0x01, 0x10, 0xd4, 0x31, - 0x10, 0xa8, 0xe3, 0x68, + 0x10, 0xa8, 0xf3, 0x68, 0x3d, 0xa9, 0xc5, 0x29, 0xfe, 0xe2, 0xc4, 0x09, 0x01, 0xea, 0xc6, 0x01, 0x02, 0xe2, 0xc8, 0x31, 0x02, 0xec, 0x50, 0x31, 0x02, 0xa0, 0xda, 0x31, - 0xff, 0xa9, 0xe2, 0x70, - 0x02, 0xa0, 0x28, 0x37, - 0xff, 0x21, 0xeb, 0x70, + 0xff, 0xa9, 0xf2, 0x70, + 0x02, 0xa0, 0x48, 0x37, + 0xff, 0x21, 0xfb, 0x70, 0x02, 0x22, 0x51, 0x31, - 0x02, 0xa0, 0x2c, 0x33, + 0x02, 0xa0, 0x4c, 0x33, 0x02, 0xa0, 0x44, 0x36, 0x02, 0xa0, 0x40, 0x32, 0x02, 0xa0, 0x44, 0x36, - 0x04, 0x47, 0xf3, 0x68, - 0x40, 0x16, 0x1e, 0x69, - 0xff, 0x2d, 0x23, 0x61, - 0xff, 0x29, 0x8d, 0x75, + 0x04, 0x47, 0x03, 0x69, + 0x40, 0x16, 0x2e, 0x69, + 0xff, 0x2d, 0x33, 0x61, + 0xff, 0x29, 0x65, 0x70, 0x01, 0x37, 0xc1, 0x31, 0x02, 0x28, 0x55, 0x32, 0x01, 0xea, 0x5a, 0x01, @@ -140,26 +148,22 @@ static uint8_t seqprog[] = { 0x01, 0x50, 0xa1, 0x1a, 0xff, 0x4e, 0x9d, 0x1a, 0xff, 0x4f, 0x9f, 0x22, - 0xff, 0x8d, 0x17, 0x71, - 0x80, 0xac, 0x16, 0x71, - 0x20, 0x16, 0x16, 0x69, + 0xff, 0x8d, 0x27, 0x71, + 0x80, 0xac, 0x26, 0x71, + 0x20, 0x16, 0x26, 0x69, 0x02, 0x8c, 0x51, 0x31, - 0x00, 0xe2, 0x00, 0x41, + 0x00, 0xe2, 0x10, 0x41, 0x01, 0xac, 0x08, 0x31, 0x09, 0xea, 0x5a, 0x01, 0x02, 0x8c, 0x51, 0x32, 0xff, 0xea, 0x1a, 0x07, 0x04, 0x24, 0xf9, 0x30, - 0x1d, 0xea, 0x2e, 0x41, + 0x1d, 0xea, 0x38, 0x41, 0x02, 0x2c, 0x51, 0x31, - 0x04, 0xac, 0xf9, 0x30, - 0x19, 0xea, 0x2e, 0x59, - 0x02, 0x8c, 0x59, 0x32, - 0x02, 0x28, 0x19, 0x33, - 0x02, 0xa8, 0x50, 0x36, + 0x04, 0xa0, 0xf9, 0x30, + 0x19, 0xea, 0x38, 0x41, 0x06, 0xea, 0x08, 0x81, 0x01, 0xe2, 0x5a, 0x35, - 0x02, 0xa8, 0xf4, 0x31, 0x02, 0xf2, 0xf0, 0x35, 0x02, 0xf2, 0xf0, 0x31, 0x02, 0xf8, 0xe4, 0x35, @@ -175,23 +179,23 @@ static uint8_t seqprog[] = { 0x02, 0x20, 0xb9, 0x30, 0x02, 0x20, 0x51, 0x31, 0x4c, 0xa9, 0xd7, 0x28, - 0x10, 0xa8, 0x59, 0x79, + 0x10, 0xa8, 0x61, 0x79, 0x01, 0x6b, 0xc0, 0x30, 0x02, 0x64, 0xc8, 0x00, 0x40, 0x3a, 0x74, 0x04, - 0x00, 0xe2, 0x66, 0x58, - 0x33, 0xea, 0x3a, 0x59, + 0x00, 0xe2, 0x56, 0x58, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x30, 0x3f, 0xc0, 0x09, - 0x30, 0xe0, 0x5a, 0x61, - 0x20, 0x3f, 0x70, 0x69, - 0x10, 0x3f, 0x5a, 0x79, + 0x30, 0xe0, 0x62, 0x61, + 0x20, 0x3f, 0x78, 0x69, + 0x10, 0x3f, 0x62, 0x79, 0x02, 0xea, 0x7e, 0x00, - 0x00, 0xea, 0x3a, 0x59, + 0x00, 0xea, 0x42, 0x59, 0x01, 0xea, 0x00, 0x30, 0x02, 0x48, 0x51, 0x35, 0x01, 0xea, 0x7e, 0x00, - 0x11, 0xea, 0x3a, 0x59, + 0x11, 0xea, 0x42, 0x59, 0x11, 0xea, 0x00, 0x00, 0x02, 0x48, 0x51, 0x35, 0x08, 0xea, 0x98, 0x00, @@ -201,11 +205,11 @@ static uint8_t seqprog[] = { 0x0f, 0x67, 0xc0, 0x09, 0x00, 0x34, 0x69, 0x02, 0x20, 0xea, 0x96, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x40, 0x3a, 0xa4, 0x69, + 0x00, 0xe2, 0xf6, 0x41, + 0x40, 0x3a, 0xac, 0x69, 0x02, 0x55, 0x06, 0x68, - 0x02, 0x56, 0xa4, 0x69, - 0xff, 0x5b, 0xa4, 0x61, + 0x02, 0x56, 0xac, 0x69, + 0xff, 0x5b, 0xac, 0x61, 0x02, 0x20, 0x51, 0x31, 0x80, 0xea, 0xb2, 0x01, 0x44, 0xea, 0x00, 0x00, @@ -213,36 +217,36 @@ static uint8_t seqprog[] = { 0x33, 0xea, 0x00, 0x00, 0xff, 0xea, 0xb2, 0x09, 0xff, 0xe0, 0xc0, 0x19, - 0xff, 0xe0, 0xa6, 0x79, - 0x02, 0x94, 0x51, 0x31, - 0x00, 0xe2, 0x9c, 0x41, + 0xff, 0xe0, 0xae, 0x79, + 0x02, 0xa4, 0x51, 0x31, + 0x00, 0xe2, 0xa4, 0x41, 0x02, 0x5e, 0x50, 0x31, 0x02, 0xa8, 0xb8, 0x30, 0x02, 0x5c, 0x50, 0x31, - 0xff, 0x95, 0xb7, 0x71, - 0x02, 0x94, 0x41, 0x31, + 0xff, 0xa5, 0xbf, 0x71, + 0x02, 0xa4, 0x41, 0x31, 0x02, 0x22, 0x51, 0x31, - 0x02, 0xa0, 0x2c, 0x33, + 0x02, 0xa0, 0x4c, 0x33, 0x02, 0xa0, 0x44, 0x32, - 0x00, 0xe2, 0xc0, 0x41, - 0x10, 0xa8, 0xc1, 0x69, + 0x00, 0xe2, 0xc8, 0x41, + 0x10, 0xa8, 0xc9, 0x69, 0x3d, 0xa9, 0xc9, 0x29, 0x01, 0xe4, 0xc8, 0x01, 0x01, 0xea, 0xca, 0x01, 0xff, 0xea, 0xda, 0x01, 0x02, 0x20, 0x51, 0x31, - 0x02, 0x96, 0x41, 0x32, - 0xff, 0x21, 0xc9, 0x61, + 0x02, 0xa6, 0x41, 0x32, + 0xff, 0x21, 0xd1, 0x61, 0xff, 0xea, 0x46, 0x02, 0x02, 0x5c, 0x50, 0x31, 0x40, 0xea, 0x96, 0x00, - 0x02, 0x56, 0xde, 0x6d, - 0x01, 0x55, 0xde, 0x6d, - 0x10, 0xa8, 0xd5, 0x79, - 0x10, 0x40, 0xde, 0x69, - 0x01, 0x56, 0xde, 0x79, - 0xff, 0x93, 0x07, 0x78, - 0x13, 0xea, 0x46, 0x59, + 0x02, 0x56, 0xda, 0x6d, + 0x01, 0x55, 0xda, 0x6d, + 0x10, 0xa8, 0xdd, 0x79, + 0x10, 0x40, 0xe6, 0x69, + 0x01, 0x56, 0xe6, 0x79, + 0xff, 0xad, 0x07, 0x78, + 0x13, 0xea, 0x4e, 0x59, 0x13, 0xea, 0x04, 0x00, 0x00, 0xe2, 0x06, 0x40, 0xbf, 0x3a, 0x74, 0x08, @@ -253,104 +257,104 @@ static uint8_t seqprog[] = { 0x40, 0xea, 0x66, 0x02, 0x08, 0x3c, 0x78, 0x00, 0x80, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xa2, 0x5b, + 0x00, 0xe2, 0xb2, 0x5b, 0x01, 0x36, 0xc1, 0x31, - 0x9f, 0xe0, 0x44, 0x7c, - 0x80, 0xe0, 0x02, 0x72, - 0xa0, 0xe0, 0x3a, 0x72, - 0xc0, 0xe0, 0x30, 0x72, - 0xe0, 0xe0, 0x6a, 0x72, - 0x01, 0xea, 0x46, 0x59, + 0x9f, 0xe0, 0x54, 0x7c, + 0x80, 0xe0, 0x0a, 0x72, + 0xa0, 0xe0, 0x42, 0x72, + 0xc0, 0xe0, 0x38, 0x72, + 0xe0, 0xe0, 0x72, 0x72, + 0x01, 0xea, 0x4e, 0x59, 0x01, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x80, 0x33, 0x09, 0x7a, - 0x03, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf6, 0x41, + 0x80, 0x33, 0x11, 0x7a, + 0x03, 0xea, 0x4e, 0x59, 0x03, 0xea, 0x04, 0x00, - 0xee, 0x00, 0x10, 0x6a, + 0xee, 0x00, 0x18, 0x6a, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x60, 0x59, - 0xef, 0x92, 0xd5, 0x19, - 0x00, 0xe2, 0x20, 0x52, + 0x00, 0xe2, 0x68, 0x59, + 0xef, 0xac, 0xd5, 0x19, + 0x00, 0xe2, 0x28, 0x52, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x26, 0x42, - 0x01, 0x92, 0xd1, 0x30, + 0x00, 0xe2, 0x2e, 0x42, + 0x01, 0xac, 0xd1, 0x30, 0x10, 0x80, 0x89, 0x31, 0x20, 0xea, 0x32, 0x00, 0xbf, 0x33, 0x67, 0x0a, - 0x20, 0x19, 0x28, 0x6a, - 0x02, 0x4d, 0xee, 0x69, + 0x20, 0x19, 0x30, 0x6a, + 0x02, 0x4d, 0xf6, 0x69, 0x40, 0x33, 0x67, 0x02, - 0x00, 0xe2, 0xee, 0x41, - 0x80, 0x33, 0xa7, 0x6a, + 0x00, 0xe2, 0xf6, 0x41, + 0x80, 0x33, 0xaf, 0x6a, 0x01, 0x44, 0x10, 0x33, 0x08, 0xa8, 0x51, 0x03, - 0x00, 0xe2, 0xee, 0x41, + 0x00, 0xe2, 0xf6, 0x41, 0x10, 0xea, 0x80, 0x00, 0x01, 0x31, 0xc5, 0x31, - 0x80, 0xe2, 0x56, 0x62, - 0x10, 0xa8, 0x7b, 0x6a, + 0x80, 0xe2, 0x5e, 0x62, + 0x10, 0xa8, 0x83, 0x6a, 0xc0, 0xaa, 0xc5, 0x01, - 0x40, 0xa8, 0x47, 0x6a, + 0x40, 0xa8, 0x4f, 0x6a, 0xbf, 0xe2, 0xc4, 0x09, - 0x20, 0xa8, 0x5b, 0x7a, + 0x20, 0xa8, 0x63, 0x7a, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xa2, 0x5b, - 0xa0, 0x36, 0x63, 0x62, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x6b, 0x62, 0x23, 0xa8, 0x89, 0x08, - 0x00, 0xe2, 0xa2, 0x5b, - 0xa0, 0x36, 0x63, 0x62, - 0x00, 0xa8, 0x5a, 0x42, - 0xff, 0xe2, 0x5a, 0x62, - 0x00, 0xe2, 0x7a, 0x42, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x6b, 0x62, + 0x00, 0xa8, 0x62, 0x42, + 0xff, 0xe2, 0x62, 0x62, + 0x00, 0xe2, 0x82, 0x42, 0x40, 0xea, 0x98, 0x00, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xa2, 0x5b, - 0xa0, 0x36, 0x39, 0x72, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x41, 0x72, 0x40, 0xea, 0x98, 0x00, 0x01, 0x31, 0x89, 0x32, 0x08, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xee, 0x41, - 0xe0, 0xea, 0xbe, 0x5b, - 0x80, 0xe0, 0xb2, 0x6a, - 0x04, 0xe0, 0x50, 0x73, - 0x02, 0xe0, 0x80, 0x73, - 0x00, 0xea, 0x10, 0x73, - 0x03, 0xe0, 0x90, 0x73, - 0x23, 0xe0, 0x8c, 0x72, - 0x08, 0xe0, 0xae, 0x72, - 0x00, 0xe2, 0xa2, 0x5b, - 0x07, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf6, 0x41, + 0xe0, 0xea, 0xce, 0x5b, + 0x80, 0xe0, 0xba, 0x6a, + 0x04, 0xe0, 0x60, 0x73, + 0x02, 0xe0, 0x90, 0x73, + 0x00, 0xea, 0x18, 0x73, + 0x03, 0xe0, 0xa0, 0x73, + 0x23, 0xe0, 0x94, 0x72, + 0x08, 0xe0, 0xb6, 0x72, + 0x00, 0xe2, 0xb2, 0x5b, + 0x07, 0xea, 0x4e, 0x59, 0x07, 0xea, 0x04, 0x00, - 0x08, 0x42, 0xef, 0x71, - 0x04, 0x42, 0x89, 0x62, + 0x08, 0x42, 0xf7, 0x71, + 0x04, 0x42, 0x91, 0x62, 0x01, 0x43, 0x89, 0x30, - 0x00, 0xe2, 0x7a, 0x42, + 0x00, 0xe2, 0x82, 0x42, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0x7a, 0x42, + 0x00, 0xe2, 0x82, 0x42, 0x01, 0x00, 0x60, 0x32, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x4c, 0x34, 0xc1, 0x28, 0x01, 0x64, 0xc0, 0x31, - 0x00, 0x30, 0x3b, 0x59, + 0x00, 0x30, 0x43, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x01, 0xe0, 0xac, 0x7a, - 0xa0, 0xea, 0xb4, 0x5b, - 0x01, 0xa0, 0xac, 0x62, - 0x01, 0x84, 0xa5, 0x7a, - 0x01, 0xa7, 0xae, 0x7a, - 0x00, 0xe2, 0xae, 0x42, - 0x03, 0xea, 0x46, 0x59, + 0x01, 0xe0, 0xb4, 0x7a, + 0xa0, 0xea, 0xc4, 0x5b, + 0x01, 0xa0, 0xb4, 0x62, + 0x01, 0x84, 0xad, 0x7a, + 0x01, 0xa7, 0xb6, 0x7a, + 0x00, 0xe2, 0xb6, 0x42, + 0x03, 0xea, 0x4e, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xae, 0x42, - 0x07, 0xea, 0xc6, 0x5b, + 0x00, 0xe2, 0xb6, 0x42, + 0x07, 0xea, 0xd6, 0x5b, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xee, 0x41, + 0x00, 0xe2, 0xf6, 0x41, 0x3f, 0xe0, 0x6a, 0x0a, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -361,78 +365,82 @@ static uint8_t seqprog[] = { 0x01, 0xea, 0xc6, 0x01, 0x02, 0xe2, 0xc8, 0x31, 0x02, 0xec, 0x40, 0x31, - 0xff, 0xa1, 0xce, 0x72, + 0xff, 0xa1, 0xd6, 0x72, 0x02, 0xe8, 0xda, 0x31, 0x02, 0xa0, 0x50, 0x31, - 0x00, 0xe2, 0xf0, 0x42, + 0x00, 0xe2, 0xf8, 0x42, 0x80, 0x33, 0x67, 0x02, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xa2, 0x5b, + 0x00, 0xe2, 0xb2, 0x5b, 0x01, 0x33, 0x67, 0x02, - 0xe0, 0x36, 0x0b, 0x63, + 0xe0, 0x36, 0x13, 0x63, 0x02, 0x33, 0x67, 0x02, - 0x20, 0x46, 0x04, 0x63, + 0x20, 0x46, 0x0c, 0x63, 0xff, 0xea, 0x52, 0x09, - 0xa8, 0xea, 0xb4, 0x5b, - 0x04, 0xa8, 0xeb, 0x7a, + 0xa8, 0xea, 0xc4, 0x5b, + 0x04, 0xa8, 0xf3, 0x7a, 0x01, 0x34, 0xc1, 0x31, - 0x00, 0xa9, 0xeb, 0x62, + 0x00, 0xa9, 0xf3, 0x62, 0x01, 0x35, 0xc1, 0x31, - 0x00, 0xaa, 0xf5, 0x72, + 0x00, 0xaa, 0xfd, 0x72, 0x01, 0xa9, 0x52, 0x11, - 0xff, 0xa9, 0xe0, 0x6a, - 0x00, 0xe2, 0x04, 0x43, + 0xff, 0xa9, 0xe8, 0x6a, + 0x00, 0xe2, 0x0c, 0x43, 0x10, 0x33, 0x67, 0x02, - 0x04, 0xa8, 0x05, 0x7b, + 0x04, 0xa8, 0x0d, 0x7b, 0xfb, 0xa8, 0x51, 0x0b, 0xff, 0xea, 0x66, 0x0a, - 0x01, 0xa4, 0xff, 0x6a, + 0x01, 0x9c, 0x07, 0x6b, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x60, 0x59, - 0x10, 0xa8, 0xaf, 0x7a, - 0xff, 0xea, 0xc6, 0x5b, - 0x00, 0xe2, 0xae, 0x42, - 0x04, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0x68, 0x59, + 0x10, 0xa8, 0xb7, 0x7a, + 0xff, 0xea, 0xd6, 0x5b, + 0x00, 0xe2, 0xb6, 0x42, + 0x04, 0xea, 0x4e, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xae, 0x42, - 0x04, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xb6, 0x42, + 0x04, 0xea, 0x4e, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x08, 0xa8, 0xa7, 0x7a, - 0xc0, 0x33, 0x1b, 0x7b, - 0x80, 0x33, 0xa7, 0x6a, - 0xff, 0x88, 0x1b, 0x6b, - 0x40, 0x33, 0xa7, 0x6a, - 0x10, 0xa8, 0x21, 0x7b, - 0x0a, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf6, 0x41, + 0x08, 0xa8, 0xaf, 0x7a, + 0xc0, 0x33, 0x23, 0x7b, + 0x80, 0x33, 0xaf, 0x6a, + 0xff, 0x88, 0x23, 0x6b, + 0x40, 0x33, 0xaf, 0x6a, + 0x10, 0xa8, 0x29, 0x7b, + 0x0a, 0xea, 0x4e, 0x59, 0x0a, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x3a, 0x5b, - 0x00, 0xe2, 0x6c, 0x43, - 0x50, 0x4b, 0x28, 0x6b, + 0x00, 0xe2, 0x48, 0x5b, + 0x00, 0xe2, 0x7c, 0x43, + 0x50, 0x4b, 0x30, 0x6b, 0xbf, 0x3a, 0x74, 0x08, - 0x01, 0xe0, 0xf8, 0x31, + 0x01, 0xe0, 0xf4, 0x31, 0xff, 0xea, 0xc0, 0x09, 0x01, 0x2e, 0x5d, 0x1a, 0x00, 0x2f, 0x5f, 0x22, 0x04, 0x47, 0x8f, 0x02, - 0x01, 0xfc, 0xc0, 0x35, - 0x33, 0xea, 0x3a, 0x59, + 0x01, 0xfa, 0xc0, 0x35, + 0x02, 0xa8, 0x84, 0x32, + 0x02, 0xea, 0xb4, 0x00, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x02, 0x42, 0x51, 0x31, - 0xff, 0x88, 0x47, 0x6b, - 0x01, 0xa4, 0x43, 0x6b, - 0x02, 0xa4, 0x4b, 0x6b, - 0x01, 0x84, 0x4b, 0x7b, + 0xff, 0xae, 0x65, 0x68, + 0xff, 0x88, 0x55, 0x6b, + 0x01, 0x9c, 0x51, 0x6b, + 0x02, 0x9c, 0x59, 0x6b, + 0x01, 0x84, 0x59, 0x7b, 0x02, 0x28, 0x19, 0x33, 0x02, 0xa8, 0x50, 0x36, - 0xff, 0x88, 0x4b, 0x73, - 0x00, 0xe2, 0x24, 0x5b, + 0xff, 0x88, 0x59, 0x73, + 0x00, 0xe2, 0x2c, 0x5b, + 0x02, 0xa8, 0x5c, 0x33, 0x02, 0x2c, 0x19, 0x33, 0x02, 0xa8, 0x58, 0x32, - 0x04, 0xa4, 0x49, 0x07, - 0xc0, 0x33, 0xa7, 0x6a, + 0x04, 0x9c, 0x39, 0x07, + 0xc0, 0x33, 0xaf, 0x6a, 0x04, 0xa8, 0x51, 0x03, - 0x20, 0xa8, 0x6d, 0x6b, + 0x20, 0xa8, 0x7d, 0x6b, 0x02, 0xa8, 0x40, 0x31, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -447,73 +455,73 @@ static uint8_t seqprog[] = { 0xf7, 0x57, 0xae, 0x08, 0x08, 0xea, 0x98, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0xee, 0x00, 0x76, 0x6b, + 0xee, 0x00, 0x86, 0x6b, 0x02, 0xea, 0xb4, 0x00, - 0x00, 0xe2, 0x9e, 0x5b, - 0x09, 0x4c, 0x78, 0x7b, + 0x00, 0xe2, 0xae, 0x5b, + 0x09, 0x4c, 0x88, 0x7b, 0x08, 0x4c, 0x06, 0x68, - 0x0b, 0xea, 0x46, 0x59, + 0x0b, 0xea, 0x4e, 0x59, 0x0b, 0xea, 0x04, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0x20, 0x33, 0xef, 0x79, - 0x00, 0xe2, 0x88, 0x5b, - 0x00, 0xe2, 0xee, 0x41, - 0x01, 0x84, 0x8d, 0x7b, - 0x01, 0xa4, 0x49, 0x07, - 0x08, 0x60, 0x30, 0x33, - 0x08, 0x80, 0x41, 0x37, + 0x20, 0x33, 0xf7, 0x79, + 0x00, 0xe2, 0x98, 0x5b, + 0x00, 0xe2, 0xf6, 0x41, + 0x01, 0x84, 0x9d, 0x7b, + 0x01, 0x9c, 0x39, 0x07, + 0x08, 0x60, 0x20, 0x33, + 0x08, 0x80, 0x31, 0x37, 0xdf, 0x33, 0x67, 0x0a, - 0xee, 0x00, 0x9a, 0x6b, + 0xee, 0x00, 0xaa, 0x6b, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, - 0x00, 0xe2, 0x60, 0x59, - 0x00, 0xe2, 0xae, 0x42, + 0x00, 0xe2, 0x68, 0x59, + 0x00, 0xe2, 0xb6, 0x42, 0x01, 0xea, 0x6c, 0x02, 0xc0, 0xea, 0x66, 0x06, - 0xff, 0x42, 0xae, 0x6b, - 0x01, 0x41, 0xa2, 0x6b, - 0x02, 0x41, 0xa2, 0x7b, - 0xff, 0x42, 0xae, 0x6b, - 0x01, 0x41, 0xa2, 0x6b, - 0x02, 0x41, 0xa2, 0x7b, - 0xff, 0x42, 0xae, 0x7b, - 0x04, 0x4c, 0xa2, 0x6b, + 0xff, 0x42, 0xbe, 0x6b, + 0x01, 0x41, 0xb2, 0x6b, + 0x02, 0x41, 0xb2, 0x7b, + 0xff, 0x42, 0xbe, 0x6b, + 0x01, 0x41, 0xb2, 0x6b, + 0x02, 0x41, 0xb2, 0x7b, + 0xff, 0x42, 0xbe, 0x7b, + 0x04, 0x4c, 0xb2, 0x6b, 0xe0, 0x41, 0x6c, 0x0e, 0x01, 0x44, 0xd4, 0x31, - 0xff, 0x42, 0xb6, 0x7b, - 0x04, 0x4c, 0xb6, 0x6b, + 0xff, 0x42, 0xc6, 0x7b, + 0x04, 0x4c, 0xc6, 0x6b, 0xe0, 0x41, 0x6c, 0x0a, - 0xe0, 0x36, 0xef, 0x61, + 0xe0, 0x36, 0xf7, 0x61, 0xff, 0xea, 0xca, 0x09, 0x01, 0xe2, 0xc8, 0x31, 0x01, 0x46, 0xda, 0x35, 0x01, 0x44, 0xd4, 0x35, 0x10, 0xea, 0x80, 0x00, 0x01, 0xe2, 0x62, 0x36, - 0x04, 0xa6, 0xce, 0x7b, + 0x04, 0xa6, 0xde, 0x7b, 0xff, 0xea, 0x5a, 0x09, 0xff, 0xea, 0x4c, 0x0d, - 0x01, 0xa6, 0xec, 0x6b, - 0x10, 0xad, 0x8c, 0x7d, - 0x80, 0xad, 0xe4, 0x6b, - 0x08, 0xad, 0x8c, 0x6d, + 0x01, 0xa6, 0xfc, 0x6b, + 0x10, 0xad, 0x64, 0x78, + 0x80, 0xad, 0xf4, 0x6b, + 0x08, 0xad, 0x64, 0x68, 0x04, 0x84, 0xf9, 0x30, 0x00, 0xea, 0x08, 0x81, 0xff, 0xea, 0xd4, 0x09, 0x02, 0x84, 0xf9, 0x88, 0x0d, 0xea, 0x5a, 0x01, 0x04, 0xa6, 0x4c, 0x05, - 0x04, 0xa6, 0x8c, 0x7d, + 0x04, 0xa6, 0x64, 0x78, 0xff, 0xea, 0x5a, 0x09, 0x03, 0x84, 0x59, 0x89, 0x03, 0xea, 0x4c, 0x01, - 0x80, 0x1a, 0x8c, 0x7d, - 0x08, 0x19, 0x8c, 0x7d, + 0x80, 0x1a, 0x64, 0x78, + 0x08, 0x19, 0x64, 0x78, 0x08, 0xb0, 0xe0, 0x30, 0x04, 0xb0, 0xe0, 0x30, 0x03, 0xb0, 0xf0, 0x30, - 0x01, 0x78, 0xfa, 0x7b, + 0x01, 0x78, 0x0a, 0x7c, 0x01, 0xa7, 0x4e, 0x11, 0x01, 0xb0, 0x06, 0x33, 0x7f, 0x83, 0xe9, 0x08, @@ -524,275 +532,268 @@ static uint8_t seqprog[] = { 0x00, 0x86, 0x0d, 0x23, 0x00, 0x87, 0x0f, 0x23, 0x01, 0x84, 0xc5, 0x31, - 0x01, 0xa7, 0x10, 0x7c, + 0x01, 0xa7, 0x20, 0x7c, 0x04, 0xe2, 0xc4, 0x01, - 0x80, 0x83, 0x17, 0x7c, + 0x80, 0x83, 0x27, 0x7c, 0x02, 0xe2, 0xc4, 0x01, 0xff, 0xea, 0x4c, 0x09, 0x01, 0xe2, 0x36, 0x30, 0xc8, 0x19, 0x32, 0x00, 0x88, 0x19, 0x32, 0x00, 0x01, 0xac, 0xd4, 0x99, - 0x00, 0xe2, 0x8c, 0x55, + 0x00, 0xe2, 0x64, 0x50, 0xfe, 0xa6, 0x4c, 0x0d, - 0x0b, 0x98, 0xe1, 0x30, - 0x01, 0xa0, 0x4f, 0x09, - 0xfd, 0xa4, 0x49, 0x09, - 0x80, 0xa3, 0x2d, 0x7c, + 0x0b, 0x90, 0xe1, 0x30, + 0x01, 0x98, 0x4f, 0x09, + 0xfd, 0x9c, 0x49, 0x09, + 0x80, 0x9b, 0x3d, 0x7c, 0x02, 0xa4, 0x48, 0x01, - 0x01, 0xa7, 0x30, 0x7c, + 0x01, 0xa7, 0x40, 0x7c, 0x04, 0xa4, 0x48, 0x01, 0x01, 0xa4, 0x36, 0x30, 0xa8, 0xea, 0x32, 0x00, - 0xfd, 0xa4, 0x49, 0x0b, - 0x05, 0xa3, 0x07, 0x33, - 0x80, 0x83, 0x3d, 0x6c, + 0xfd, 0x9c, 0x39, 0x0b, + 0x05, 0x9b, 0x07, 0x33, + 0x80, 0x83, 0x4d, 0x6c, 0x02, 0xea, 0x4c, 0x05, 0xff, 0xea, 0x4c, 0x0d, - 0x00, 0xe2, 0x32, 0x59, - 0x02, 0xa6, 0xd0, 0x6b, + 0x00, 0xe2, 0x3c, 0x59, + 0x02, 0xa6, 0xe0, 0x6b, 0x80, 0xf9, 0xf2, 0x05, - 0xc0, 0x33, 0x4b, 0x7c, - 0x03, 0xea, 0x46, 0x59, + 0xc0, 0x33, 0x5b, 0x7c, + 0x03, 0xea, 0x4e, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x20, 0x33, 0x6f, 0x7c, - 0x01, 0x84, 0x55, 0x6c, - 0x06, 0xea, 0x46, 0x59, + 0x20, 0x33, 0x7f, 0x7c, + 0x01, 0x84, 0x65, 0x6c, + 0x06, 0xea, 0x4e, 0x59, 0x06, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x72, 0x44, + 0x00, 0xe2, 0x82, 0x44, 0x01, 0x00, 0x60, 0x32, - 0xee, 0x00, 0x5e, 0x6c, + 0xee, 0x00, 0x6e, 0x6c, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x3a, 0x59, + 0x33, 0xea, 0x42, 0x59, 0x33, 0xea, 0x00, 0x00, 0x80, 0x3d, 0x7a, 0x00, - 0xfc, 0x42, 0x60, 0x7c, + 0xfc, 0x42, 0x70, 0x7c, 0x7f, 0x3d, 0x7a, 0x08, - 0x00, 0x30, 0x3b, 0x59, + 0x00, 0x30, 0x43, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x09, 0xea, 0x46, 0x59, + 0x09, 0xea, 0x4e, 0x59, 0x09, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x01, 0xa4, 0x55, 0x6c, - 0x00, 0xe2, 0x22, 0x5c, + 0x00, 0xe2, 0xf6, 0x41, + 0x01, 0x9c, 0x65, 0x6c, + 0x00, 0xe2, 0x32, 0x5c, 0x20, 0x33, 0x67, 0x02, 0x01, 0x00, 0x60, 0x32, - 0x02, 0xa6, 0x7a, 0x7c, - 0x00, 0xe2, 0x3e, 0x5c, + 0x02, 0xa6, 0x8a, 0x7c, + 0x00, 0xe2, 0x4e, 0x5c, + 0x00, 0xe2, 0x56, 0x58, 0x00, 0xe2, 0x66, 0x58, - 0x00, 0xe2, 0x76, 0x58, - 0x00, 0xe2, 0x30, 0x58, - 0x00, 0x30, 0x3b, 0x59, + 0x00, 0xe2, 0x3a, 0x58, + 0x00, 0x30, 0x43, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x20, 0x19, 0x7a, 0x6c, - 0x00, 0xe2, 0xaa, 0x5c, - 0x04, 0x19, 0x94, 0x6c, + 0x20, 0x19, 0x8a, 0x6c, + 0x00, 0xe2, 0xba, 0x5c, + 0x04, 0x19, 0xa4, 0x6c, 0x02, 0x19, 0x32, 0x00, - 0x01, 0x84, 0x95, 0x7c, - 0x01, 0x1b, 0x8e, 0x7c, - 0x01, 0x1a, 0x94, 0x6c, - 0x00, 0xe2, 0x44, 0x44, - 0x80, 0x4b, 0x9a, 0x6c, - 0x01, 0x4c, 0x96, 0x7c, - 0x03, 0x42, 0x44, 0x6c, - 0x00, 0xe2, 0xca, 0x5b, + 0x01, 0x84, 0xa5, 0x7c, + 0x01, 0x1b, 0x9e, 0x7c, + 0x01, 0x1a, 0xa4, 0x6c, + 0x00, 0xe2, 0x54, 0x44, + 0x80, 0x4b, 0xaa, 0x6c, + 0x01, 0x4c, 0xa6, 0x7c, + 0x03, 0x42, 0x54, 0x6c, + 0x00, 0xe2, 0xda, 0x5b, 0x80, 0xf9, 0xf2, 0x01, - 0x04, 0x33, 0xef, 0x79, - 0x00, 0xe2, 0xee, 0x41, - 0x08, 0x5d, 0xb2, 0x6c, - 0x00, 0xe2, 0x66, 0x58, - 0x00, 0x30, 0x3b, 0x59, + 0x04, 0x33, 0xf7, 0x79, + 0x00, 0xe2, 0xf6, 0x41, + 0x08, 0x5d, 0xc2, 0x6c, + 0x00, 0xe2, 0x56, 0x58, + 0x00, 0x30, 0x43, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x02, 0x1b, 0xa2, 0x7c, - 0x08, 0x5d, 0xb0, 0x7c, + 0x02, 0x1b, 0xb2, 0x7c, + 0x08, 0x5d, 0xc0, 0x7c, 0x03, 0x68, 0x00, 0x37, 0x01, 0x84, 0x09, 0x07, - 0x80, 0x1b, 0xbc, 0x7c, - 0x80, 0x84, 0xbd, 0x6c, + 0x80, 0x1b, 0xcc, 0x7c, + 0x80, 0x84, 0xcd, 0x6c, 0xff, 0x85, 0x0b, 0x1b, 0xff, 0x86, 0x0d, 0x23, 0xff, 0x87, 0x0f, 0x23, 0xf8, 0x1b, 0x08, 0x0b, 0xff, 0xea, 0x4e, 0x09, - 0x04, 0x1b, 0xc4, 0x7c, + 0x04, 0x1b, 0xd4, 0x7c, 0x01, 0xa7, 0x4e, 0x01, 0xff, 0xea, 0x06, 0x0b, 0x03, 0x68, 0x00, 0x37, - 0x00, 0xe2, 0xb6, 0x58, + 0x00, 0xe2, 0xc4, 0x58, 0x10, 0xea, 0x18, 0x00, 0xf9, 0xd9, 0xb2, 0x0d, 0x01, 0xd9, 0xb2, 0x05, 0x01, 0x52, 0x48, 0x31, - 0x20, 0xa4, 0xe8, 0x7c, - 0x20, 0x5b, 0xe8, 0x7c, - 0x80, 0xf9, 0xf6, 0x7c, + 0x20, 0xa4, 0xfc, 0x7c, + 0x20, 0x5b, 0xfc, 0x7c, + 0x80, 0xf9, 0x0a, 0x7d, + 0x02, 0xea, 0xb4, 0x00, 0x11, 0x00, 0x00, 0x10, - 0x04, 0x19, 0xe2, 0x7c, + 0x04, 0x19, 0x16, 0x7d, 0xdf, 0x19, 0x32, 0x08, - 0x01, 0x4c, 0xde, 0x7c, + 0x60, 0x5b, 0xf4, 0x6c, + 0x01, 0x4c, 0xf0, 0x7c, 0x20, 0x19, 0x32, 0x00, - 0x11, 0x00, 0x00, 0x10, + 0x01, 0xd9, 0xb2, 0x05, 0x02, 0xea, 0xb4, 0x00, 0x01, 0xd9, 0xb2, 0x05, - 0x10, 0x5b, 0xfa, 0x6c, - 0x08, 0x5b, 0x02, 0x6d, - 0x20, 0x5b, 0xf4, 0x6c, - 0x02, 0x5b, 0x22, 0x6d, - 0x0e, 0xea, 0x46, 0x59, + 0x10, 0x5b, 0x0e, 0x6d, + 0x08, 0x5b, 0x18, 0x6d, + 0x20, 0x5b, 0x08, 0x6d, + 0x02, 0x5b, 0x38, 0x6d, + 0x0e, 0xea, 0x4e, 0x59, 0x0e, 0xea, 0x04, 0x00, - 0x80, 0xf9, 0xe4, 0x6c, + 0x80, 0xf9, 0xf8, 0x6c, 0xdf, 0x5c, 0xb8, 0x08, 0x01, 0xd9, 0xb2, 0x05, - 0x01, 0xa4, 0xf5, 0x6d, - 0x00, 0xe2, 0x22, 0x5c, - 0x00, 0xe2, 0x2c, 0x5d, + 0x01, 0x9c, 0xf3, 0x6d, + 0x00, 0xe2, 0x32, 0x5c, + 0x00, 0xe2, 0x42, 0x5d, + 0x01, 0xae, 0x5d, 0x1b, 0x01, 0xd9, 0xb2, 0x05, - 0x00, 0xe2, 0x24, 0x5b, - 0xf3, 0x92, 0xd5, 0x19, - 0x00, 0xe2, 0x10, 0x55, - 0x80, 0x92, 0x11, 0x6d, - 0x0f, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0x2c, 0x5b, + 0xf3, 0xac, 0xd5, 0x19, + 0x00, 0xe2, 0x26, 0x55, + 0x80, 0xac, 0x27, 0x6d, + 0x0f, 0xea, 0x4e, 0x59, 0x0f, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x18, 0x45, + 0x00, 0xe2, 0x2e, 0x45, 0x04, 0x8c, 0xe1, 0x30, 0x01, 0xea, 0xf2, 0x00, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0xff, 0x93, 0x1f, 0x7d, - 0x14, 0xea, 0x46, 0x59, + 0xff, 0xad, 0x35, 0x7d, + 0x14, 0xea, 0x4e, 0x59, 0x14, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xa6, 0x5d, + 0x00, 0xe2, 0xa4, 0x5d, 0x01, 0xd9, 0xb2, 0x05, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0xce, 0x5d, + 0x00, 0xe2, 0x9c, 0x5d, 0x01, 0xd9, 0xb2, 0x05, - 0x02, 0xa8, 0xf4, 0x31, - 0x02, 0xa6, 0x3e, 0x7d, - 0x00, 0xe2, 0x34, 0x59, - 0x20, 0x5b, 0x4c, 0x6d, - 0xfc, 0x42, 0x38, 0x7d, - 0x10, 0x40, 0x3a, 0x6d, - 0x20, 0x4d, 0x3c, 0x7d, - 0x08, 0x5d, 0x4c, 0x6d, - 0x02, 0xa6, 0xd0, 0x6b, - 0x00, 0xe2, 0x34, 0x59, - 0x20, 0x5b, 0x4c, 0x6d, - 0x01, 0x1b, 0x6c, 0x6d, - 0xfc, 0x42, 0x48, 0x7d, - 0x10, 0x40, 0x4a, 0x6d, - 0x20, 0x4d, 0x8c, 0x7d, - 0x08, 0x5d, 0x8c, 0x7d, + 0x02, 0xa6, 0x52, 0x7d, + 0x00, 0xe2, 0x3c, 0x59, + 0x20, 0x5b, 0x60, 0x6d, + 0xfc, 0x42, 0x4c, 0x7d, + 0x10, 0x40, 0x4e, 0x6d, + 0x20, 0x4d, 0x50, 0x7d, + 0x08, 0x5d, 0x60, 0x6d, + 0x02, 0xa6, 0xe0, 0x6b, + 0x00, 0xe2, 0x3c, 0x59, + 0x20, 0x5b, 0x60, 0x6d, + 0x01, 0x1b, 0x80, 0x6d, + 0xfc, 0x42, 0x5c, 0x7d, + 0x10, 0x40, 0x5e, 0x6d, + 0x20, 0x4d, 0x64, 0x78, + 0x08, 0x5d, 0x64, 0x78, 0x02, 0x19, 0x32, 0x00, 0x01, 0x5b, 0x40, 0x31, - 0x00, 0xe2, 0xaa, 0x5c, - 0x00, 0xe2, 0x88, 0x5b, + 0x00, 0xe2, 0xba, 0x5c, + 0x00, 0xe2, 0x98, 0x5b, 0x20, 0xea, 0xb6, 0x00, - 0x00, 0xe2, 0xca, 0x5b, + 0x00, 0xe2, 0xda, 0x5b, 0x20, 0x5c, 0xb8, 0x00, - 0x04, 0x19, 0x62, 0x6d, - 0x01, 0x1a, 0x62, 0x6d, - 0x00, 0xe2, 0x34, 0x59, - 0x01, 0x1a, 0x8c, 0x7d, + 0x04, 0x19, 0x76, 0x6d, + 0x01, 0x1a, 0x76, 0x6d, + 0x00, 0xe2, 0x3c, 0x59, + 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, - 0x20, 0xa0, 0xde, 0x7d, - 0x08, 0xa8, 0x6b, 0x7d, - 0x00, 0xe2, 0x7e, 0x45, + 0x20, 0xa0, 0xda, 0x7d, + 0xff, 0xae, 0x5d, 0x1b, + 0x08, 0xa8, 0x3d, 0x6b, 0x02, 0xea, 0xb4, 0x04, - 0x02, 0x19, 0x32, 0x00, - 0x08, 0xa8, 0x8f, 0x7d, - 0x04, 0x5d, 0xf4, 0x7d, - 0x01, 0x1a, 0xf4, 0x7d, - 0x01, 0xa4, 0x49, 0x03, - 0x80, 0xf9, 0xf2, 0x01, - 0x02, 0xa8, 0x84, 0x32, - 0x02, 0xea, 0xb4, 0x00, - 0x00, 0xe2, 0x34, 0x43, - 0x02, 0xa8, 0x84, 0x32, - 0x02, 0xea, 0xb4, 0x00, - 0xff, 0xea, 0xd4, 0x19, - 0x00, 0xe2, 0x40, 0x59, - 0x11, 0x00, 0x00, 0x10, - 0x00, 0xe2, 0xc2, 0x5d, - 0x00, 0xe2, 0x34, 0x53, - 0xff, 0xea, 0xd4, 0x0d, - 0x00, 0xe2, 0x34, 0x59, - 0x40, 0x5b, 0x9a, 0x6d, + 0x01, 0x9c, 0x39, 0x03, + 0x40, 0x5b, 0x90, 0x6d, + 0x00, 0xe2, 0x3c, 0x59, + 0x40, 0x5b, 0x90, 0x6d, 0x04, 0x5d, 0xf4, 0x7d, 0x01, 0x1a, 0xf4, 0x7d, - 0x20, 0x4d, 0x8c, 0x7d, - 0x40, 0x5b, 0xde, 0x7d, + 0x20, 0x4d, 0x64, 0x78, + 0x40, 0x5b, 0xda, 0x7d, 0x04, 0x5d, 0xf4, 0x7d, 0x01, 0x1a, 0xf4, 0x7d, 0x80, 0xf9, 0xf2, 0x01, - 0x01, 0xa4, 0x49, 0x03, - 0x08, 0xa8, 0x7f, 0x6d, + 0xff, 0xae, 0x5d, 0x1b, + 0x08, 0xa8, 0x3d, 0x6b, 0x02, 0xea, 0xb4, 0x04, - 0x00, 0xe2, 0x32, 0x59, - 0x01, 0x1b, 0xb6, 0x7d, - 0x40, 0x5b, 0x8c, 0x7d, + 0x00, 0xe2, 0x3c, 0x59, + 0x01, 0x1b, 0x64, 0x78, + 0x80, 0xf9, 0xf2, 0x01, + 0x02, 0xea, 0xb4, 0x04, + 0x00, 0xe2, 0x3c, 0x59, + 0x01, 0x1b, 0xb8, 0x6d, + 0x40, 0x5b, 0xc6, 0x7d, + 0x01, 0x1b, 0xb8, 0x6d, 0x02, 0x19, 0x32, 0x00, + 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0xea, 0x10, 0x03, 0x08, 0xa8, 0x51, 0x03, - 0x00, 0xe2, 0x7e, 0x45, - 0xff, 0x6a, 0xbc, 0x6d, - 0x40, 0x5b, 0x8c, 0x7d, - 0xff, 0x6a, 0xac, 0x7d, - 0x10, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0x3c, 0x43, + 0x01, 0x1a, 0xc2, 0x7d, + 0x40, 0x5b, 0xbe, 0x7d, + 0x01, 0x1a, 0xac, 0x6d, + 0xfc, 0x42, 0x64, 0x78, + 0x01, 0x1a, 0xc6, 0x6d, + 0x10, 0xea, 0x4e, 0x59, 0x10, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xac, 0x45, - 0x80, 0xf9, 0x8c, 0x6d, - 0x01, 0x43, 0xc1, 0x31, - 0x00, 0xfb, 0x8c, 0x65, - 0x01, 0x42, 0xc1, 0x31, - 0x00, 0xfa, 0x8c, 0x65, - 0x01, 0xe8, 0xd4, 0x1d, - 0x00, 0xe2, 0x32, 0x59, - 0x01, 0x1b, 0x8c, 0x7d, - 0x80, 0xf9, 0xf2, 0x01, - 0x02, 0xea, 0xb4, 0x04, + 0xfc, 0x42, 0x64, 0x78, + 0x10, 0x40, 0xcc, 0x6d, + 0x20, 0x4d, 0x64, 0x78, + 0x40, 0x5b, 0xac, 0x6d, + 0x01, 0x1a, 0x64, 0x78, + 0x01, 0xae, 0x5d, 0x1b, 0x30, 0x3f, 0xc0, 0x09, - 0x30, 0xe0, 0x8c, 0x65, - 0x40, 0x4b, 0x8c, 0x6d, + 0x30, 0xe0, 0x64, 0x60, + 0x40, 0x4b, 0x64, 0x68, 0xff, 0xea, 0x52, 0x01, - 0xee, 0x00, 0xe4, 0x6d, + 0xee, 0x00, 0xe0, 0x6d, 0x80, 0xf9, 0xf2, 0x01, + 0xff, 0xae, 0x5d, 0x1b, 0x02, 0xea, 0xb4, 0x00, 0x20, 0xea, 0x9a, 0x00, - 0xf3, 0x42, 0xee, 0x6d, - 0x12, 0xea, 0x46, 0x59, + 0xf3, 0x42, 0xec, 0x6d, + 0x12, 0xea, 0x4e, 0x59, 0x12, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x0d, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf6, 0x41, + 0x0d, 0xea, 0x4e, 0x59, 0x0d, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xee, 0x41, - 0x11, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf6, 0x41, + 0x01, 0xae, 0x5d, 0x1b, + 0x11, 0xea, 0x4e, 0x59, 0x11, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x24, 0x5b, + 0x00, 0xe2, 0x2c, 0x5b, 0x08, 0x5a, 0xb4, 0x00, - 0x00, 0xe2, 0x18, 0x5e, + 0x00, 0xe2, 0x1a, 0x5e, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x34, 0x59, + 0x00, 0xe2, 0x3c, 0x59, 0x80, 0x1a, 0x08, 0x7e, - 0x00, 0xe2, 0x18, 0x5e, + 0x00, 0xe2, 0x1a, 0x5e, 0x80, 0x19, 0x32, 0x00, 0x40, 0x5b, 0x0e, 0x6e, 0x08, 0x5a, 0x0e, 0x7e, - 0x20, 0x4d, 0x8c, 0x7d, + 0x20, 0x4d, 0x64, 0x78, 0x02, 0x84, 0x09, 0x03, - 0x40, 0x5b, 0xde, 0x7d, - 0x08, 0xa8, 0x77, 0x6d, + 0x40, 0x5b, 0xda, 0x7d, + 0xff, 0xae, 0x5d, 0x1b, 0x80, 0xf9, 0xf2, 0x01, + 0x08, 0xa8, 0x3d, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x01, 0x38, 0xe1, 0x30, 0x05, 0x39, 0xe3, 0x98, - 0x01, 0xe0, 0xf8, 0x31, + 0x01, 0xe0, 0xf4, 0x31, 0xff, 0xea, 0xc0, 0x09, 0x00, 0x3a, 0xe5, 0x20, 0x00, 0x3b, 0xe7, 0x20, - 0x01, 0xfc, 0xc0, 0x31, + 0x01, 0xfa, 0xc0, 0x31, 0x04, 0xea, 0xe8, 0x30, 0xff, 0xea, 0xf0, 0x08, 0x02, 0xea, 0xf2, 0x00, @@ -800,12 +801,20 @@ static uint8_t seqprog[] = { }; typedef int ahd_patch_func_t (struct ahd_softc *ahd); +static ahd_patch_func_t ahd_patch21_func; + +static int +ahd_patch21_func(struct ahd_softc *ahd) +{ + return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0); +} + static ahd_patch_func_t ahd_patch20_func; static int ahd_patch20_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0); + return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0); } static ahd_patch_func_t ahd_patch19_func; @@ -813,7 +822,7 @@ static ahd_patch_func_t ahd_patch19_func; static int ahd_patch19_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0); + return ((ahd->features & AHD_RTI) == 0); } static ahd_patch_func_t ahd_patch18_func; @@ -821,7 +830,7 @@ static ahd_patch_func_t ahd_patch18_func; static int ahd_patch18_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_RTI) == 0); + return ((ahd->flags & AHD_INITIATORROLE) != 0); } static ahd_patch_func_t ahd_patch17_func; @@ -829,7 +838,7 @@ static ahd_patch_func_t ahd_patch17_func; static int ahd_patch17_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_INITIATORROLE) != 0); + return ((ahd->flags & AHD_TARGETROLE) != 0); } static ahd_patch_func_t ahd_patch16_func; @@ -837,7 +846,7 @@ static ahd_patch_func_t ahd_patch16_func; static int ahd_patch16_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_TARGETROLE) != 0); + return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); } static ahd_patch_func_t ahd_patch15_func; @@ -845,7 +854,7 @@ static ahd_patch_func_t ahd_patch15_func; static int ahd_patch15_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); + return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0); } static ahd_patch_func_t ahd_patch14_func; @@ -853,7 +862,7 @@ static ahd_patch_func_t ahd_patch14_func; static int ahd_patch14_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0); + return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0); } static ahd_patch_func_t ahd_patch13_func; @@ -861,7 +870,7 @@ static ahd_patch_func_t ahd_patch13_func; static int ahd_patch13_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0); + return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0); } static ahd_patch_func_t ahd_patch12_func; @@ -869,7 +878,7 @@ static ahd_patch_func_t ahd_patch12_func; static int ahd_patch12_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0); + return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0); } static ahd_patch_func_t ahd_patch11_func; @@ -877,7 +886,7 @@ static ahd_patch_func_t ahd_patch11_func; static int ahd_patch11_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0); + return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); } static ahd_patch_func_t ahd_patch10_func; @@ -885,7 +894,7 @@ static ahd_patch_func_t ahd_patch10_func; static int ahd_patch10_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); + return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0); } static ahd_patch_func_t ahd_patch9_func; @@ -893,7 +902,7 @@ static ahd_patch_func_t ahd_patch9_func; static int ahd_patch9_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0); + return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0); } static ahd_patch_func_t ahd_patch8_func; @@ -901,7 +910,7 @@ static ahd_patch_func_t ahd_patch8_func; static int ahd_patch8_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0); + return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0); } static ahd_patch_func_t ahd_patch7_func; @@ -909,7 +918,7 @@ static ahd_patch_func_t ahd_patch7_func; static int ahd_patch7_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0); + return ((ahd->bugs & AHD_LQO_ATNO_BUG) != 0); } static ahd_patch_func_t ahd_patch6_func; @@ -917,7 +926,7 @@ static ahd_patch_func_t ahd_patch6_func; static int ahd_patch6_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_LQO_ATNO_BUG) != 0); + return ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0); } static ahd_patch_func_t ahd_patch5_func; @@ -925,7 +934,7 @@ static ahd_patch_func_t ahd_patch5_func; static int ahd_patch5_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0); + return ((ahd->bugs & AHD_NONPACKFIFO_BUG) != 0); } static ahd_patch_func_t ahd_patch4_func; @@ -933,7 +942,7 @@ static ahd_patch_func_t ahd_patch4_func; static int ahd_patch4_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_NONPACKFIFO_BUG) != 0); + return ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0); } static ahd_patch_func_t ahd_patch3_func; @@ -941,7 +950,7 @@ static ahd_patch_func_t ahd_patch3_func; static int ahd_patch3_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0); + return ((ahd->bugs & AHD_FAINT_LED_BUG) != 0); } static ahd_patch_func_t ahd_patch2_func; @@ -982,128 +991,126 @@ static struct patch { { ahd_patch0_func, 5, 1, 1 }, { ahd_patch2_func, 6, 1, 2 }, { ahd_patch0_func, 7, 1, 1 }, - { ahd_patch2_func, 24, 1, 2 }, - { ahd_patch0_func, 25, 1, 1 }, - { ahd_patch1_func, 32, 1, 2 }, - { ahd_patch0_func, 33, 1, 1 }, - { ahd_patch2_func, 40, 1, 2 }, - { ahd_patch0_func, 41, 1, 1 }, - { ahd_patch2_func, 44, 1, 2 }, - { ahd_patch0_func, 45, 1, 1 }, - { ahd_patch2_func, 48, 1, 2 }, - { ahd_patch0_func, 49, 1, 1 }, + { ahd_patch3_func, 20, 5, 1 }, + { ahd_patch2_func, 29, 1, 2 }, + { ahd_patch0_func, 30, 1, 1 }, + { ahd_patch1_func, 37, 1, 2 }, + { ahd_patch0_func, 38, 1, 1 }, + { ahd_patch2_func, 43, 1, 2 }, + { ahd_patch0_func, 44, 1, 1 }, + { ahd_patch2_func, 47, 1, 2 }, + { ahd_patch0_func, 48, 1, 1 }, { ahd_patch2_func, 51, 1, 2 }, { ahd_patch0_func, 52, 1, 1 }, - { ahd_patch2_func, 55, 1, 2 }, - { ahd_patch0_func, 56, 1, 1 }, - { ahd_patch2_func, 59, 1, 2 }, - { ahd_patch0_func, 60, 1, 1 }, - { ahd_patch2_func, 157, 6, 1 }, - { ahd_patch1_func, 163, 2, 1 }, - { ahd_patch3_func, 165, 1, 1 }, - { ahd_patch2_func, 174, 1, 2 }, - { ahd_patch0_func, 175, 1, 1 }, - { ahd_patch4_func, 176, 2, 2 }, - { ahd_patch0_func, 178, 6, 3 }, - { ahd_patch2_func, 181, 1, 2 }, - { ahd_patch0_func, 182, 1, 1 }, + { ahd_patch2_func, 65, 1, 2 }, + { ahd_patch0_func, 66, 1, 1 }, + { ahd_patch2_func, 69, 1, 2 }, + { ahd_patch0_func, 70, 1, 1 }, + { ahd_patch1_func, 73, 1, 2 }, + { ahd_patch0_func, 74, 1, 1 }, + { ahd_patch2_func, 161, 6, 1 }, + { ahd_patch1_func, 167, 2, 1 }, + { ahd_patch4_func, 169, 1, 1 }, + { ahd_patch2_func, 178, 1, 2 }, + { ahd_patch0_func, 179, 1, 1 }, + { ahd_patch5_func, 180, 2, 2 }, + { ahd_patch0_func, 182, 6, 3 }, { ahd_patch2_func, 185, 1, 2 }, { ahd_patch0_func, 186, 1, 1 }, - { ahd_patch5_func, 188, 2, 1 }, - { ahd_patch3_func, 196, 16, 2 }, - { ahd_patch0_func, 212, 1, 1 }, - { ahd_patch6_func, 232, 2, 1 }, - { ahd_patch1_func, 236, 1, 2 }, - { ahd_patch0_func, 237, 1, 1 }, - { ahd_patch5_func, 240, 2, 1 }, - { ahd_patch1_func, 254, 1, 2 }, - { ahd_patch0_func, 255, 1, 1 }, + { ahd_patch2_func, 189, 1, 2 }, + { ahd_patch0_func, 190, 1, 1 }, + { ahd_patch6_func, 192, 2, 1 }, + { ahd_patch4_func, 200, 16, 2 }, + { ahd_patch0_func, 216, 1, 1 }, + { ahd_patch7_func, 236, 2, 1 }, + { ahd_patch1_func, 240, 1, 2 }, + { ahd_patch0_func, 241, 1, 1 }, + { ahd_patch6_func, 244, 2, 1 }, { ahd_patch1_func, 258, 1, 2 }, { ahd_patch0_func, 259, 1, 1 }, - { ahd_patch2_func, 262, 1, 2 }, + { ahd_patch1_func, 262, 1, 2 }, { ahd_patch0_func, 263, 1, 1 }, - { ahd_patch1_func, 318, 1, 2 }, - { ahd_patch0_func, 319, 1, 1 }, - { ahd_patch2_func, 327, 1, 2 }, - { ahd_patch0_func, 328, 1, 1 }, + { ahd_patch2_func, 266, 1, 2 }, + { ahd_patch0_func, 267, 1, 1 }, + { ahd_patch1_func, 322, 1, 2 }, + { ahd_patch0_func, 323, 1, 1 }, { ahd_patch2_func, 331, 1, 2 }, { ahd_patch0_func, 332, 1, 1 }, - { ahd_patch1_func, 339, 1, 2 }, - { ahd_patch0_func, 340, 1, 1 }, - { ahd_patch7_func, 359, 1, 1 }, - { ahd_patch7_func, 362, 1, 1 }, - { ahd_patch7_func, 364, 1, 1 }, - { ahd_patch7_func, 376, 1, 1 }, - { ahd_patch1_func, 386, 1, 2 }, - { ahd_patch0_func, 387, 1, 1 }, - { ahd_patch1_func, 389, 1, 2 }, - { ahd_patch0_func, 390, 1, 1 }, - { ahd_patch1_func, 398, 1, 2 }, - { ahd_patch0_func, 399, 1, 1 }, - { ahd_patch2_func, 410, 1, 2 }, - { ahd_patch0_func, 411, 1, 1 }, - { ahd_patch8_func, 439, 1, 1 }, - { ahd_patch1_func, 446, 1, 2 }, - { ahd_patch0_func, 447, 1, 1 }, - { ahd_patch2_func, 459, 1, 2 }, - { ahd_patch0_func, 460, 1, 1 }, - { ahd_patch9_func, 465, 6, 2 }, - { ahd_patch0_func, 471, 1, 1 }, - { ahd_patch10_func, 494, 1, 1 }, - { ahd_patch11_func, 503, 1, 1 }, - { ahd_patch12_func, 504, 1, 2 }, - { ahd_patch0_func, 505, 1, 1 }, - { ahd_patch13_func, 510, 1, 1 }, + { ahd_patch2_func, 335, 1, 2 }, + { ahd_patch0_func, 336, 1, 1 }, + { ahd_patch1_func, 343, 1, 2 }, + { ahd_patch0_func, 344, 1, 1 }, + { ahd_patch8_func, 363, 1, 1 }, + { ahd_patch8_func, 366, 1, 1 }, + { ahd_patch8_func, 368, 1, 1 }, + { ahd_patch8_func, 380, 1, 1 }, + { ahd_patch1_func, 390, 1, 2 }, + { ahd_patch0_func, 391, 1, 1 }, + { ahd_patch1_func, 393, 1, 2 }, + { ahd_patch0_func, 394, 1, 1 }, + { ahd_patch1_func, 402, 1, 2 }, + { ahd_patch0_func, 403, 1, 1 }, + { ahd_patch2_func, 416, 1, 2 }, + { ahd_patch0_func, 417, 1, 1 }, + { ahd_patch9_func, 447, 1, 1 }, + { ahd_patch1_func, 454, 1, 2 }, + { ahd_patch0_func, 455, 1, 1 }, + { ahd_patch2_func, 467, 1, 2 }, + { ahd_patch0_func, 468, 1, 1 }, + { ahd_patch10_func, 473, 6, 2 }, + { ahd_patch0_func, 479, 1, 1 }, + { ahd_patch11_func, 502, 1, 1 }, { ahd_patch12_func, 511, 1, 1 }, - { ahd_patch14_func, 524, 1, 2 }, - { ahd_patch0_func, 525, 1, 1 }, - { ahd_patch1_func, 547, 1, 2 }, - { ahd_patch0_func, 548, 1, 1 }, - { ahd_patch1_func, 551, 1, 2 }, - { ahd_patch0_func, 552, 1, 1 }, - { ahd_patch2_func, 557, 1, 2 }, - { ahd_patch0_func, 558, 1, 1 }, - { ahd_patch2_func, 562, 1, 2 }, - { ahd_patch0_func, 563, 1, 1 }, - { ahd_patch1_func, 564, 1, 2 }, - { ahd_patch0_func, 565, 1, 1 }, - { ahd_patch2_func, 576, 1, 2 }, - { ahd_patch0_func, 577, 1, 1 }, - { ahd_patch15_func, 581, 1, 1 }, - { ahd_patch16_func, 586, 1, 1 }, - { ahd_patch17_func, 587, 2, 1 }, - { ahd_patch16_func, 591, 1, 2 }, - { ahd_patch0_func, 592, 1, 1 }, - { ahd_patch2_func, 595, 1, 2 }, - { ahd_patch0_func, 596, 1, 1 }, - { ahd_patch2_func, 614, 1, 2 }, - { ahd_patch0_func, 615, 1, 1 }, - { ahd_patch18_func, 616, 12, 1 }, - { ahd_patch1_func, 632, 1, 2 }, - { ahd_patch0_func, 633, 1, 1 }, - { ahd_patch18_func, 634, 1, 1 }, - { ahd_patch1_func, 645, 1, 2 }, - { ahd_patch0_func, 646, 1, 1 }, - { ahd_patch1_func, 653, 1, 2 }, - { ahd_patch0_func, 654, 1, 1 }, - { ahd_patch15_func, 678, 1, 1 }, - { ahd_patch15_func, 694, 1, 1 }, - { ahd_patch2_func, 706, 1, 2 }, - { ahd_patch0_func, 707, 1, 1 }, - { ahd_patch15_func, 726, 1, 1 }, - { ahd_patch1_func, 734, 1, 2 }, - { ahd_patch0_func, 735, 1, 1 }, - { ahd_patch1_func, 756, 1, 2 }, - { ahd_patch0_func, 757, 1, 1 }, - { ahd_patch1_func, 759, 1, 2 }, - { ahd_patch0_func, 760, 1, 1 }, + { ahd_patch13_func, 512, 1, 2 }, + { ahd_patch0_func, 513, 1, 1 }, + { ahd_patch14_func, 518, 1, 1 }, + { ahd_patch13_func, 519, 1, 1 }, + { ahd_patch15_func, 532, 1, 2 }, + { ahd_patch0_func, 533, 1, 1 }, + { ahd_patch1_func, 555, 1, 2 }, + { ahd_patch0_func, 556, 1, 1 }, + { ahd_patch1_func, 559, 1, 2 }, + { ahd_patch0_func, 560, 1, 1 }, + { ahd_patch2_func, 565, 1, 2 }, + { ahd_patch0_func, 566, 1, 1 }, + { ahd_patch2_func, 570, 1, 2 }, + { ahd_patch0_func, 571, 1, 1 }, + { ahd_patch1_func, 572, 1, 2 }, + { ahd_patch0_func, 573, 1, 1 }, + { ahd_patch2_func, 584, 1, 2 }, + { ahd_patch0_func, 585, 1, 1 }, + { ahd_patch16_func, 589, 1, 1 }, + { ahd_patch17_func, 594, 1, 1 }, + { ahd_patch18_func, 595, 2, 1 }, + { ahd_patch17_func, 599, 1, 2 }, + { ahd_patch0_func, 600, 1, 1 }, + { ahd_patch2_func, 603, 1, 2 }, + { ahd_patch0_func, 604, 1, 1 }, + { ahd_patch2_func, 622, 1, 2 }, + { ahd_patch0_func, 623, 1, 1 }, + { ahd_patch19_func, 624, 14, 1 }, + { ahd_patch1_func, 642, 1, 2 }, + { ahd_patch0_func, 643, 1, 1 }, + { ahd_patch19_func, 644, 1, 1 }, + { ahd_patch1_func, 656, 1, 2 }, + { ahd_patch0_func, 657, 1, 1 }, + { ahd_patch1_func, 664, 1, 2 }, + { ahd_patch0_func, 665, 1, 1 }, + { ahd_patch16_func, 688, 1, 1 }, + { ahd_patch16_func, 726, 1, 1 }, + { ahd_patch1_func, 737, 1, 2 }, + { ahd_patch0_func, 738, 1, 1 }, + { ahd_patch1_func, 755, 1, 2 }, + { ahd_patch0_func, 756, 1, 1 }, + { ahd_patch1_func, 758, 1, 2 }, + { ahd_patch0_func, 759, 1, 1 }, { ahd_patch1_func, 762, 1, 2 }, { ahd_patch0_func, 763, 1, 1 }, - { ahd_patch19_func, 765, 1, 2 }, + { ahd_patch20_func, 765, 1, 2 }, { ahd_patch0_func, 766, 2, 1 }, - { ahd_patch20_func, 769, 4, 2 }, + { ahd_patch21_func, 769, 4, 2 }, { ahd_patch0_func, 773, 1, 1 }, - { ahd_patch20_func, 780, 11, 1 } + { ahd_patch21_func, 781, 11, 1 } }; static struct cs { @@ -1112,19 +1119,16 @@ static struct cs { } critical_sections[] = { { 11, 12 }, { 13, 14 }, - { 24, 37 }, - { 38, 51 }, - { 64, 67 }, - { 94, 119 }, - { 120, 151 }, - { 153, 157 }, - { 165, 173 }, - { 196, 245 }, - { 678, 694 }, - { 694, 712 }, - { 717, 723 }, - { 726, 731 }, - { 737, 743 } + { 29, 42 }, + { 56, 59 }, + { 101, 127 }, + { 128, 156 }, + { 158, 161 }, + { 169, 177 }, + { 200, 249 }, + { 688, 704 }, + { 704, 718 }, + { 728, 732 } }; static const int num_critical_sections = sizeof(critical_sections) |
