aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.reg29
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.seq143
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_core.c260
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_inline.h7
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm.h2
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm_pci.c17
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_reg.h_shipped27
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped21
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_seq.h_shipped881
9 files changed, 834 insertions, 553 deletions
diff --git a/drivers/scsi/aic7xxx/aic79xx.reg b/drivers/scsi/aic7xxx/aic79xx.reg
index 3a3204703b1..be14e2ecb8f 100644
--- a/drivers/scsi/aic7xxx/aic79xx.reg
+++ b/drivers/scsi/aic7xxx/aic79xx.reg
@@ -1,7 +1,7 @@
1/* 1/*
2 * Aic79xx register and scratch ram definitions. 2 * Aic79xx register and scratch ram definitions.
3 * 3 *
4 * Copyright (c) 1994-2001 Justin T. Gibbs. 4 * Copyright (c) 1994-2001, 2004 Justin T. Gibbs.
5 * Copyright (c) 2000-2002 Adaptec Inc. 5 * Copyright (c) 2000-2002 Adaptec Inc.
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -39,7 +39,7 @@
39 * 39 *
40 * $FreeBSD$ 40 * $FreeBSD$
41 */ 41 */
42VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $" 42VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $"
43 43
44/* 44/*
45 * This file is processed by the aic7xxx_asm utility for use in assembling 45 * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -3715,8 +3715,9 @@ scratch_ram {
3715 3715
3716 SEQ_FLAGS2 { 3716 SEQ_FLAGS2 {
3717 size 1 3717 size 1
3718 field TARGET_MSG_PENDING 0x02 3718 field PENDING_MK_MESSAGE 0x01
3719 field SELECTOUT_QFROZEN 0x04 3719 field TARGET_MSG_PENDING 0x02
3720 field SELECTOUT_QFROZEN 0x04
3720 } 3721 }
3721 3722
3722 ALLOCFIFO_SCBPTR { 3723 ALLOCFIFO_SCBPTR {
@@ -3777,6 +3778,26 @@ scratch_ram {
3777 CMDSIZE_TABLE { 3778 CMDSIZE_TABLE {
3778 size 8 3779 size 8
3779 } 3780 }
3781 /*
3782 * When an SCB with the MK_MESSAGE flag is
3783 * queued to the controller, it cannot enter
3784 * the waiting for selection list until the
3785 * selections for any previously queued
3786 * commands to that target complete. During
3787 * the wait, the MK_MESSAGE SCB is queued
3788 * here.
3789 */
3790 MK_MESSAGE_SCB {
3791 size 2
3792 }
3793 /*
3794 * Saved SCSIID of MK_MESSAGE_SCB to avoid
3795 * an extra SCBPTR operation when deciding
3796 * if the MK_MESSAGE_SCB can be run.
3797 */
3798 MK_MESSAGE_SCSIID {
3799 size 1
3800 }
3780} 3801}
3781 3802
3782/************************* Hardware SCB Definition ****************************/ 3803/************************* Hardware SCB Definition ****************************/
diff --git a/drivers/scsi/aic7xxx/aic79xx.seq b/drivers/scsi/aic7xxx/aic79xx.seq
index bef1f9d369b..58bc17591b5 100644
--- a/drivers/scsi/aic7xxx/aic79xx.seq
+++ b/drivers/scsi/aic7xxx/aic79xx.seq
@@ -1,7 +1,7 @@
1/* 1/*
2 * Adaptec U320 device driver firmware for Linux and FreeBSD. 2 * Adaptec U320 device driver firmware for Linux and FreeBSD.
3 * 3 *
4 * Copyright (c) 1994-2001 Justin T. Gibbs. 4 * Copyright (c) 1994-2001, 2004 Justin T. Gibbs.
5 * Copyright (c) 2000-2002 Adaptec Inc. 5 * Copyright (c) 2000-2002 Adaptec Inc.
6 * All rights reserved. 6 * All rights reserved.
7 * 7 *
@@ -40,7 +40,7 @@
40 * $FreeBSD$ 40 * $FreeBSD$
41 */ 41 */
42 42
43VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $" 43VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $"
44PATCH_ARG_LIST = "struct ahd_softc *ahd" 44PATCH_ARG_LIST = "struct ahd_softc *ahd"
45PREFIX = "ahd_" 45PREFIX = "ahd_"
46 46
@@ -110,10 +110,8 @@ check_waiting_list:
110 * one last time. 110 * one last time.
111 */ 111 */
112 test SSTAT0, SELDO jnz select_out; 112 test SSTAT0, SELDO jnz select_out;
113END_CRITICAL;
114 call start_selection; 113 call start_selection;
115idle_loop_checkbus: 114idle_loop_checkbus:
116BEGIN_CRITICAL;
117 test SSTAT0, SELDO jnz select_out; 115 test SSTAT0, SELDO jnz select_out;
118END_CRITICAL; 116END_CRITICAL;
119 test SSTAT0, SELDI jnz select_in; 117 test SSTAT0, SELDI jnz select_in;
@@ -294,7 +292,6 @@ fetch_new_scb_inprog:
294 test CCSCBCTL, ARRDONE jz return; 292 test CCSCBCTL, ARRDONE jz return;
295fetch_new_scb_done: 293fetch_new_scb_done:
296 and CCSCBCTL, ~(CCARREN|CCSCBEN); 294 and CCSCBCTL, ~(CCARREN|CCSCBEN);
297 bmov REG0, SCBPTR, 2;
298 clr A; 295 clr A;
299 add CMDS_PENDING, 1; 296 add CMDS_PENDING, 1;
300 adc CMDS_PENDING[1], A; 297 adc CMDS_PENDING[1], A;
@@ -316,43 +313,117 @@ fetch_new_scb_done:
316 clr SCB_FIFO_USE_COUNT; 313 clr SCB_FIFO_USE_COUNT;
317 /* Update the next SCB address to download. */ 314 /* Update the next SCB address to download. */
318 bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4; 315 bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4;
316 /*
317 * NULL out the SCB links since these fields
318 * occupy the same location as SCB_NEXT_SCB_BUSADDR.
319 */
319 mvi SCB_NEXT[1], SCB_LIST_NULL; 320 mvi SCB_NEXT[1], SCB_LIST_NULL;
320 mvi SCB_NEXT2[1], SCB_LIST_NULL; 321 mvi SCB_NEXT2[1], SCB_LIST_NULL;
321 /* Increment our position in the QINFIFO. */ 322 /* Increment our position in the QINFIFO. */
322 mov NONE, SNSCB_QOFF; 323 mov NONE, SNSCB_QOFF;
324
323 /* 325 /*
324 * SCBs that want to send messages are always 326 * Save SCBID of this SCB in REG0 since
325 * queued independently. This ensures that they 327 * SCBPTR will be clobbered during target
326 * are at the head of the SCB list to select out 328 * list updates. We also record the SCB's
327 * to a target and we will see the MK_MESSAGE flag. 329 * flags so that we can refer to them even
330 * after SCBPTR has been changed.
331 */
332 bmov REG0, SCBPTR, 2;
333 mov A, SCB_CONTROL;
334
335 /*
336 * Find the tail SCB of the execution queue
337 * for this target.
328 */ 338 */
329 test SCB_CONTROL, MK_MESSAGE jnz first_new_target_scb;
330 shr SINDEX, 3, SCB_SCSIID; 339 shr SINDEX, 3, SCB_SCSIID;
331 and SINDEX, ~0x1; 340 and SINDEX, ~0x1;
332 mvi SINDEX[1], (WAITING_SCB_TAILS >> 8); 341 mvi SINDEX[1], (WAITING_SCB_TAILS >> 8);
333 bmov DINDEX, SINDEX, 2; 342 bmov DINDEX, SINDEX, 2;
334 bmov SCBPTR, SINDIR, 2; 343 bmov SCBPTR, SINDIR, 2;
344
345 /*
346 * Update the tail to point to the new SCB.
347 */
335 bmov DINDIR, REG0, 2; 348 bmov DINDIR, REG0, 2;
349
350 /*
351 * If the queue was empty, queue this SCB as
352 * the first for this target.
353 */
336 cmp SCBPTR[1], SCB_LIST_NULL je first_new_target_scb; 354 cmp SCBPTR[1], SCB_LIST_NULL je first_new_target_scb;
355
356 /*
357 * SCBs that want to send messages must always be
358 * at the head of their per-target queue so that
359 * ATN can be asserted even if the current
360 * negotiation agreement is packetized. If the
361 * target queue is empty, the SCB can be queued
362 * immediately. If the queue is not empty, we must
363 * wait for it to empty before entering this SCB
364 * into the waiting for selection queue. Otherwise
365 * our batching and round-robin selection scheme
366 * could allow commands to be queued out of order.
367 * To simplify the implementation, we stop pulling
368 * new commands from the host until the MK_MESSAGE
369 * SCB can be queued to the waiting for selection
370 * list.
371 */
372 test A, MK_MESSAGE jz batch_scb;
373
374 /*
375 * If the last SCB is also a MK_MESSAGE SCB, then
376 * order is preserved even if we batch.
377 */
378 test SCB_CONTROL, MK_MESSAGE jz batch_scb;
379
380 /*
381 * Defer this SCB and stop fetching new SCBs until
382 * it can be queued. Since the SCB_SCSIID of the
383 * tail SCB must be the same as that of the newly
384 * queued SCB, there is no need to restore the SCBID
385 * here.
386 */
387 or SEQ_FLAGS2, PENDING_MK_MESSAGE;
388 bmov MK_MESSAGE_SCB, REG0, 2;
389 mov MK_MESSAGE_SCSIID, SCB_SCSIID ret;
390
391batch_scb:
392 /*
393 * Otherwise just update the previous tail SCB to
394 * point to the new tail.
395 */
337 bmov SCB_NEXT, REG0, 2 ret; 396 bmov SCB_NEXT, REG0, 2 ret;
397
338first_new_target_scb: 398first_new_target_scb:
399 /*
400 * Append SCB to the tail of the waiting for
401 * selection list.
402 */
339 cmp WAITING_TID_HEAD[1], SCB_LIST_NULL je first_new_scb; 403 cmp WAITING_TID_HEAD[1], SCB_LIST_NULL je first_new_scb;
340 bmov SCBPTR, WAITING_TID_TAIL, 2; 404 bmov SCBPTR, WAITING_TID_TAIL, 2;
341 bmov SCB_NEXT2, REG0, 2; 405 bmov SCB_NEXT2, REG0, 2;
342 bmov WAITING_TID_TAIL, REG0, 2 ret; 406 bmov WAITING_TID_TAIL, REG0, 2 ret;
343first_new_scb: 407first_new_scb:
408 /*
409 * Whole list is empty, so the head of
410 * the list must be initialized too.
411 */
344 bmov WAITING_TID_HEAD, REG0, 2; 412 bmov WAITING_TID_HEAD, REG0, 2;
345 bmov WAITING_TID_TAIL, REG0, 2 ret; 413 bmov WAITING_TID_TAIL, REG0, 2 ret;
346END_CRITICAL; 414END_CRITICAL;
347 415
348scbdma_idle: 416scbdma_idle:
349 /* 417 /*
350 * Give precedence to downloading new SCBs to execute 418 * Don't bother downloading new SCBs to execute
351 * unless select-outs are currently frozen. 419 * if select-outs are currently frozen or we have
420 * a MK_MESSAGE SCB waiting to enter the queue.
352 */ 421 */
353 test SEQ_FLAGS2, SELECTOUT_QFROZEN jnz . + 2; 422 test SEQ_FLAGS2, SELECTOUT_QFROZEN|PENDING_MK_MESSAGE
423 jnz scbdma_no_new_scbs;
354BEGIN_CRITICAL; 424BEGIN_CRITICAL;
355 test QOFF_CTLSTA, NEW_SCB_AVAIL jnz fetch_new_scb; 425 test QOFF_CTLSTA, NEW_SCB_AVAIL jnz fetch_new_scb;
426scbdma_no_new_scbs:
356 cmp COMPLETE_DMA_SCB_HEAD[1], SCB_LIST_NULL jne dma_complete_scb; 427 cmp COMPLETE_DMA_SCB_HEAD[1], SCB_LIST_NULL jne dma_complete_scb;
357 cmp COMPLETE_SCB_HEAD[1], SCB_LIST_NULL je return; 428 cmp COMPLETE_SCB_HEAD[1], SCB_LIST_NULL je return;
358 /* FALLTHROUGH */ 429 /* FALLTHROUGH */
@@ -671,27 +742,41 @@ curscb_ww_done:
671 } 742 }
672 743
673 /* 744 /*
674 * Requeue any SCBs not sent, to the tail of the waiting Q. 745 * The whole list made it. Clear our tail pointer to indicate
746 * that the per-target selection queue is now empty.
675 */ 747 */
676 cmp SCB_NEXT[1], SCB_LIST_NULL je select_out_list_done; 748 cmp SCB_NEXT[1], SCB_LIST_NULL je select_out_clear_tail;
677 749
678 /* 750 /*
751 * Requeue any SCBs not sent, to the tail of the waiting Q.
679 * We know that neither the per-TID list nor the list of 752 * We know that neither the per-TID list nor the list of
680 * TIDs is empty. Use this knowledge to our advantage. 753 * TIDs is empty. Use this knowledge to our advantage and
754 * queue the remainder to the tail of the global execution
755 * queue.
681 */ 756 */
682 bmov REG0, SCB_NEXT, 2; 757 bmov REG0, SCB_NEXT, 2;
758select_out_queue_remainder:
683 bmov SCBPTR, WAITING_TID_TAIL, 2; 759 bmov SCBPTR, WAITING_TID_TAIL, 2;
684 bmov SCB_NEXT2, REG0, 2; 760 bmov SCB_NEXT2, REG0, 2;
685 bmov WAITING_TID_TAIL, REG0, 2; 761 bmov WAITING_TID_TAIL, REG0, 2;
686 jmp select_out_inc_tid_q; 762 jmp select_out_inc_tid_q;
687 763
688select_out_list_done: 764select_out_clear_tail:
765 /*
766 * Queue any pending MK_MESSAGE SCB for this target now
767 * that the queue is empty.
768 */
769 test SEQ_FLAGS2, PENDING_MK_MESSAGE jz select_out_no_mk_message_scb;
770 mov A, MK_MESSAGE_SCSIID;
771 cmp SCB_SCSIID, A jne select_out_no_mk_message_scb;
772 and SEQ_FLAGS2, ~PENDING_MK_MESSAGE;
773 bmov REG0, MK_MESSAGE_SCB, 2;
774 jmp select_out_queue_remainder;
775
776select_out_no_mk_message_scb:
689 /* 777 /*
690 * The whole list made it. Just clear our TID's tail pointer 778 * Clear this target's execution tail and increment the queue.
691 * unless we were queued independently due to our need to
692 * send a message.
693 */ 779 */
694 test SCB_CONTROL, MK_MESSAGE jnz select_out_inc_tid_q;
695 shr DINDEX, 3, SCB_SCSIID; 780 shr DINDEX, 3, SCB_SCSIID;
696 or DINDEX, 1; /* Want only the second byte */ 781 or DINDEX, 1; /* Want only the second byte */
697 mvi DINDEX[1], ((WAITING_SCB_TAILS) >> 8); 782 mvi DINDEX[1], ((WAITING_SCB_TAILS) >> 8);
@@ -703,8 +788,8 @@ select_out_inc_tid_q:
703 mvi WAITING_TID_TAIL[1], SCB_LIST_NULL; 788 mvi WAITING_TID_TAIL[1], SCB_LIST_NULL;
704 bmov SCBPTR, CURRSCB, 2; 789 bmov SCBPTR, CURRSCB, 2;
705 mvi CLRSINT0, CLRSELDO; 790 mvi CLRSINT0, CLRSELDO;
706 test LQOSTAT2, LQOPHACHGOUTPKT jnz unexpected_nonpkt_phase; 791 test LQOSTAT2, LQOPHACHGOUTPKT jnz unexpected_nonpkt_mode_cleared;
707 test LQOSTAT1, LQOPHACHGINPKT jnz unexpected_nonpkt_phase; 792 test LQOSTAT1, LQOPHACHGINPKT jnz unexpected_nonpkt_mode_cleared;
708 793
709 /* 794 /*
710 * If this is a packetized connection, return to our 795 * If this is a packetized connection, return to our
@@ -2127,6 +2212,18 @@ SET_DST_MODE M_DFF0;
2127 mvi DFFSXFRCTL, CLRCHN; 2212 mvi DFFSXFRCTL, CLRCHN;
2128unexpected_nonpkt_mode_cleared: 2213unexpected_nonpkt_mode_cleared:
2129 mvi CLRSINT2, CLRNONPACKREQ; 2214 mvi CLRSINT2, CLRNONPACKREQ;
2215 if ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0) {
2216 /*
2217 * Test to ensure that the bus has not
2218 * already gone free prior to clearing
2219 * any stale busfree status. This avoids
2220 * a window whereby a busfree just after
2221 * a selection could be missed.
2222 */
2223 test SCSISIGI, BSYI jz . + 2;
2224 mvi CLRSINT1,CLRBUSFREE;
2225 or SIMODE1, ENBUSFREE;
2226 }
2130 test SCSIPHASE, ~(MSG_IN_PHASE|MSG_OUT_PHASE) jnz illegal_phase; 2227 test SCSIPHASE, ~(MSG_IN_PHASE|MSG_OUT_PHASE) jnz illegal_phase;
2131 SET_SEQINTCODE(ENTERING_NONPACK) 2228 SET_SEQINTCODE(ENTERING_NONPACK)
2132 jmp ITloop; 2229 jmp ITloop;
diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c
index db8f5ce99ee..dfd4cc93c05 100644
--- a/drivers/scsi/aic7xxx/aic79xx_core.c
+++ b/drivers/scsi/aic7xxx/aic79xx_core.c
@@ -37,7 +37,7 @@
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES. 38 * POSSIBILITY OF SUCH DAMAGES.
39 * 39 *
40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#247 $ 40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#250 $
41 */ 41 */
42 42
43#ifdef __linux__ 43#ifdef __linux__
@@ -197,7 +197,8 @@ static int ahd_search_scb_list(struct ahd_softc *ahd, int target,
197 char channel, int lun, u_int tag, 197 char channel, int lun, u_int tag,
198 role_t role, uint32_t status, 198 role_t role, uint32_t status,
199 ahd_search_action action, 199 ahd_search_action action,
200 u_int *list_head, u_int tid); 200 u_int *list_head, u_int *list_tail,
201 u_int tid);
201static void ahd_stitch_tid_list(struct ahd_softc *ahd, 202static void ahd_stitch_tid_list(struct ahd_softc *ahd,
202 u_int tid_prev, u_int tid_cur, 203 u_int tid_prev, u_int tid_cur,
203 u_int tid_next); 204 u_int tid_next);
@@ -1660,7 +1661,8 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
1660 * so just clear the error. 1661 * so just clear the error.
1661 */ 1662 */
1662 ahd_outb(ahd, CLRLQIINT1, CLRLQICRCI_NLQ); 1663 ahd_outb(ahd, CLRLQIINT1, CLRLQICRCI_NLQ);
1663 } else if ((status & BUSFREE) != 0) { 1664 } else if ((status & BUSFREE) != 0
1665 || (lqistat1 & LQOBUSFREE) != 0) {
1664 u_int lqostat1; 1666 u_int lqostat1;
1665 int restart; 1667 int restart;
1666 int clear_fifo; 1668 int clear_fifo;
@@ -2025,10 +2027,6 @@ ahd_handle_pkt_busfree(struct ahd_softc *ahd, u_int busfreetime)
2025 u_int waiting_t; 2027 u_int waiting_t;
2026 u_int next; 2028 u_int next;
2027 2029
2028 if ((busfreetime & BUSFREE_LQO) == 0)
2029 printf("%s: Warning, BUSFREE time is 0x%x. "
2030 "Expected BUSFREE_LQO.\n",
2031 ahd_name(ahd), busfreetime);
2032 /* 2030 /*
2033 * The LQO manager detected an unexpected busfree 2031 * The LQO manager detected an unexpected busfree
2034 * either: 2032 * either:
@@ -2251,8 +2249,14 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2251 struct ahd_tmode_tstate *tstate; 2249 struct ahd_tmode_tstate *tstate;
2252 2250
2253 /* 2251 /*
2254 * PPR Rejected. Try non-ppr negotiation 2252 * PPR Rejected.
2255 * and retry command. 2253 *
2254 * If the previous negotiation was packetized,
2255 * this could be because the device has been
2256 * reset without our knowledge. Force our
2257 * current negotiation to async and retry the
2258 * negotiation. Otherwise retry the command
2259 * with non-ppr negotiation.
2256 */ 2260 */
2257#ifdef AHD_DEBUG 2261#ifdef AHD_DEBUG
2258 if ((ahd_debug & AHD_SHOW_MESSAGES) != 0) 2262 if ((ahd_debug & AHD_SHOW_MESSAGES) != 0)
@@ -2261,11 +2265,34 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2261 tinfo = ahd_fetch_transinfo(ahd, devinfo.channel, 2265 tinfo = ahd_fetch_transinfo(ahd, devinfo.channel,
2262 devinfo.our_scsiid, 2266 devinfo.our_scsiid,
2263 devinfo.target, &tstate); 2267 devinfo.target, &tstate);
2264 tinfo->curr.transport_version = 2; 2268 if ((tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ)!=0) {
2265 tinfo->goal.transport_version = 2; 2269 ahd_set_width(ahd, &devinfo,
2266 tinfo->goal.ppr_options = 0; 2270 MSG_EXT_WDTR_BUS_8_BIT,
2267 ahd_qinfifo_requeue_tail(ahd, scb); 2271 AHD_TRANS_CUR,
2268 printerror = 0; 2272 /*paused*/TRUE);
2273 ahd_set_syncrate(ahd, &devinfo,
2274 /*period*/0, /*offset*/0,
2275 /*ppr_options*/0,
2276 AHD_TRANS_CUR,
2277 /*paused*/TRUE);
2278 /*
2279 * The expect PPR busfree handler below
2280 * will effect the retry and necessary
2281 * abort.
2282 */
2283 } else {
2284 tinfo->curr.transport_version = 2;
2285 tinfo->goal.transport_version = 2;
2286 tinfo->goal.ppr_options = 0;
2287 /*
2288 * Remove any SCBs in the waiting for selection
2289 * queue that may also be for this target so
2290 * that command ordering is preserved.
2291 */
2292 ahd_freeze_devq(ahd, scb);
2293 ahd_qinfifo_requeue_tail(ahd, scb);
2294 printerror = 0;
2295 }
2269 } else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_WDTR, FALSE) 2296 } else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_WDTR, FALSE)
2270 && ppr_busfree == 0) { 2297 && ppr_busfree == 0) {
2271 /* 2298 /*
@@ -2280,6 +2307,12 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2280 MSG_EXT_WDTR_BUS_8_BIT, 2307 MSG_EXT_WDTR_BUS_8_BIT,
2281 AHD_TRANS_CUR|AHD_TRANS_GOAL, 2308 AHD_TRANS_CUR|AHD_TRANS_GOAL,
2282 /*paused*/TRUE); 2309 /*paused*/TRUE);
2310 /*
2311 * Remove any SCBs in the waiting for selection
2312 * queue that may also be for this target so that
2313 * command ordering is preserved.
2314 */
2315 ahd_freeze_devq(ahd, scb);
2283 ahd_qinfifo_requeue_tail(ahd, scb); 2316 ahd_qinfifo_requeue_tail(ahd, scb);
2284 printerror = 0; 2317 printerror = 0;
2285 } else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_SDTR, FALSE) 2318 } else if (ahd_sent_msg(ahd, AHDMSG_EXT, MSG_EXT_SDTR, FALSE)
@@ -2297,6 +2330,12 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2297 /*ppr_options*/0, 2330 /*ppr_options*/0,
2298 AHD_TRANS_CUR|AHD_TRANS_GOAL, 2331 AHD_TRANS_CUR|AHD_TRANS_GOAL,
2299 /*paused*/TRUE); 2332 /*paused*/TRUE);
2333 /*
2334 * Remove any SCBs in the waiting for selection
2335 * queue that may also be for this target so that
2336 * command ordering is preserved.
2337 */
2338 ahd_freeze_devq(ahd, scb);
2300 ahd_qinfifo_requeue_tail(ahd, scb); 2339 ahd_qinfifo_requeue_tail(ahd, scb);
2301 printerror = 0; 2340 printerror = 0;
2302 } else if ((ahd->msg_flags & MSG_FLAG_EXPECT_IDE_BUSFREE) != 0 2341 } else if ((ahd->msg_flags & MSG_FLAG_EXPECT_IDE_BUSFREE) != 0
@@ -2369,14 +2408,14 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
2369 */ 2408 */
2370 printf("%s: ", ahd_name(ahd)); 2409 printf("%s: ", ahd_name(ahd));
2371 } 2410 }
2372 if (lastphase != P_BUSFREE)
2373 ahd_force_renegotiation(ahd, &devinfo);
2374 printf("Unexpected busfree %s, %d SCBs aborted, " 2411 printf("Unexpected busfree %s, %d SCBs aborted, "
2375 "PRGMCNT == 0x%x\n", 2412 "PRGMCNT == 0x%x\n",
2376 ahd_lookup_phase_entry(lastphase)->phasemsg, 2413 ahd_lookup_phase_entry(lastphase)->phasemsg,
2377 aborted, 2414 aborted,
2378 ahd_inw(ahd, PRGMCNT)); 2415 ahd_inw(ahd, PRGMCNT));
2379 ahd_dump_card_state(ahd); 2416 ahd_dump_card_state(ahd);
2417 if (lastphase != P_BUSFREE)
2418 ahd_force_renegotiation(ahd, &devinfo);
2380 } 2419 }
2381 /* Always restart the sequencer. */ 2420 /* Always restart the sequencer. */
2382 return (1); 2421 return (1);
@@ -3315,7 +3354,6 @@ ahd_update_pending_scbs(struct ahd_softc *ahd)
3315{ 3354{
3316 struct scb *pending_scb; 3355 struct scb *pending_scb;
3317 int pending_scb_count; 3356 int pending_scb_count;
3318 u_int scb_tag;
3319 int paused; 3357 int paused;
3320 u_int saved_scbptr; 3358 u_int saved_scbptr;
3321 ahd_mode_state saved_modes; 3359 ahd_mode_state saved_modes;
@@ -3333,7 +3371,6 @@ ahd_update_pending_scbs(struct ahd_softc *ahd)
3333 pending_scb_count = 0; 3371 pending_scb_count = 0;
3334 LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) { 3372 LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) {
3335 struct ahd_devinfo devinfo; 3373 struct ahd_devinfo devinfo;
3336 struct hardware_scb *pending_hscb;
3337 struct ahd_initiator_tinfo *tinfo; 3374 struct ahd_initiator_tinfo *tinfo;
3338 struct ahd_tmode_tstate *tstate; 3375 struct ahd_tmode_tstate *tstate;
3339 3376
@@ -3341,11 +3378,10 @@ ahd_update_pending_scbs(struct ahd_softc *ahd)
3341 tinfo = ahd_fetch_transinfo(ahd, devinfo.channel, 3378 tinfo = ahd_fetch_transinfo(ahd, devinfo.channel,
3342 devinfo.our_scsiid, 3379 devinfo.our_scsiid,
3343 devinfo.target, &tstate); 3380 devinfo.target, &tstate);
3344 pending_hscb = pending_scb->hscb;
3345 if ((tstate->auto_negotiate & devinfo.target_mask) == 0 3381 if ((tstate->auto_negotiate & devinfo.target_mask) == 0
3346 && (pending_scb->flags & SCB_AUTO_NEGOTIATE) != 0) { 3382 && (pending_scb->flags & SCB_AUTO_NEGOTIATE) != 0) {
3347 pending_scb->flags &= ~SCB_AUTO_NEGOTIATE; 3383 pending_scb->flags &= ~SCB_AUTO_NEGOTIATE;
3348 pending_hscb->control &= ~MK_MESSAGE; 3384 pending_scb->hscb->control &= ~MK_MESSAGE;
3349 } 3385 }
3350 ahd_sync_scb(ahd, pending_scb, 3386 ahd_sync_scb(ahd, pending_scb,
3351 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); 3387 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
@@ -3377,18 +3413,15 @@ ahd_update_pending_scbs(struct ahd_softc *ahd)
3377 ahd_outb(ahd, SCSISEQ0, ahd_inb(ahd, SCSISEQ0) & ~ENSELO); 3413 ahd_outb(ahd, SCSISEQ0, ahd_inb(ahd, SCSISEQ0) & ~ENSELO);
3378 saved_scbptr = ahd_get_scbptr(ahd); 3414 saved_scbptr = ahd_get_scbptr(ahd);
3379 /* Ensure that the hscbs down on the card match the new information */ 3415 /* Ensure that the hscbs down on the card match the new information */
3380 for (scb_tag = 0; scb_tag < ahd->scb_data.maxhscbs; scb_tag++) { 3416 LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) {
3381 struct hardware_scb *pending_hscb; 3417 u_int scb_tag;
3382 u_int control; 3418 u_int control;
3383 3419
3384 pending_scb = ahd_lookup_scb(ahd, scb_tag); 3420 scb_tag = SCB_GET_TAG(pending_scb);
3385 if (pending_scb == NULL)
3386 continue;
3387 ahd_set_scbptr(ahd, scb_tag); 3421 ahd_set_scbptr(ahd, scb_tag);
3388 pending_hscb = pending_scb->hscb;
3389 control = ahd_inb_scbram(ahd, SCB_CONTROL); 3422 control = ahd_inb_scbram(ahd, SCB_CONTROL);
3390 control &= ~MK_MESSAGE; 3423 control &= ~MK_MESSAGE;
3391 control |= pending_hscb->control & MK_MESSAGE; 3424 control |= pending_scb->hscb->control & MK_MESSAGE;
3392 ahd_outb(ahd, SCB_CONTROL, control); 3425 ahd_outb(ahd, SCB_CONTROL, control);
3393 } 3426 }
3394 ahd_set_scbptr(ahd, saved_scbptr); 3427 ahd_set_scbptr(ahd, saved_scbptr);
@@ -6500,13 +6533,14 @@ ahd_chip_init(struct ahd_softc *ahd)
6500 | ENLQIOVERI_LQ|ENLQIOVERI_NLQ); 6533 | ENLQIOVERI_LQ|ENLQIOVERI_NLQ);
6501 ahd_outb(ahd, LQOMODE0, ENLQOATNLQ|ENLQOATNPKT|ENLQOTCRC); 6534 ahd_outb(ahd, LQOMODE0, ENLQOATNLQ|ENLQOATNPKT|ENLQOTCRC);
6502 /* 6535 /*
6503 * An interrupt from LQOBUSFREE is made redundant by the 6536 * We choose to have the sequencer catch LQOPHCHGINPKT errors
6504 * BUSFREE interrupt. We choose to have the sequencer catch 6537 * manually for the command phase at the start of a packetized
6505 * LQOPHCHGINPKT errors manually for the command phase at the 6538 * selection case. ENLQOBUSFREE should be made redundant by
6506 * start of a packetized selection case. 6539 * the BUSFREE interrupt, but it seems that some LQOBUSFREE
6507 ahd_outb(ahd, LQOMODE1, ENLQOBUSFREE|ENLQOPHACHGINPKT); 6540 * events fail to assert the BUSFREE interrupt so we must
6541 * also enable LQOBUSFREE interrupts.
6508 */ 6542 */
6509 ahd_outb(ahd, LQOMODE1, 0); 6543 ahd_outb(ahd, LQOMODE1, ENLQOBUSFREE);
6510 6544
6511 /* 6545 /*
6512 * Setup sequencer interrupt handlers. 6546 * Setup sequencer interrupt handlers.
@@ -6617,6 +6651,8 @@ ahd_chip_init(struct ahd_softc *ahd)
6617 /* We don't have any waiting selections */ 6651 /* We don't have any waiting selections */
6618 ahd_outw(ahd, WAITING_TID_HEAD, SCB_LIST_NULL); 6652 ahd_outw(ahd, WAITING_TID_HEAD, SCB_LIST_NULL);
6619 ahd_outw(ahd, WAITING_TID_TAIL, SCB_LIST_NULL); 6653 ahd_outw(ahd, WAITING_TID_TAIL, SCB_LIST_NULL);
6654 ahd_outw(ahd, MK_MESSAGE_SCB, SCB_LIST_NULL);
6655 ahd_outw(ahd, MK_MESSAGE_SCSIID, 0xFF);
6620 for (i = 0; i < AHD_NUM_TARGETS; i++) 6656 for (i = 0; i < AHD_NUM_TARGETS; i++)
6621 ahd_outw(ahd, WAITING_SCB_TAILS + (2 * i), SCB_LIST_NULL); 6657 ahd_outw(ahd, WAITING_SCB_TAILS + (2 * i), SCB_LIST_NULL);
6622 6658
@@ -7260,12 +7296,28 @@ ahd_reset_cmds_pending(struct ahd_softc *ahd)
7260 ahd->flags &= ~AHD_UPDATE_PEND_CMDS; 7296 ahd->flags &= ~AHD_UPDATE_PEND_CMDS;
7261} 7297}
7262 7298
7299void
7300ahd_done_with_status(struct ahd_softc *ahd, struct scb *scb, uint32_t status)
7301{
7302 cam_status ostat;
7303 cam_status cstat;
7304
7305 ostat = ahd_get_transaction_status(scb);
7306 if (ostat == CAM_REQ_INPROG)
7307 ahd_set_transaction_status(scb, status);
7308 cstat = ahd_get_transaction_status(scb);
7309 if (cstat != CAM_REQ_CMP)
7310 ahd_freeze_scb(scb);
7311 ahd_done(ahd, scb);
7312}
7313
7263int 7314int
7264ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel, 7315ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7265 int lun, u_int tag, role_t role, uint32_t status, 7316 int lun, u_int tag, role_t role, uint32_t status,
7266 ahd_search_action action) 7317 ahd_search_action action)
7267{ 7318{
7268 struct scb *scb; 7319 struct scb *scb;
7320 struct scb *mk_msg_scb;
7269 struct scb *prev_scb; 7321 struct scb *prev_scb;
7270 ahd_mode_state saved_modes; 7322 ahd_mode_state saved_modes;
7271 u_int qinstart; 7323 u_int qinstart;
@@ -7274,6 +7326,7 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7274 u_int tid_next; 7326 u_int tid_next;
7275 u_int tid_prev; 7327 u_int tid_prev;
7276 u_int scbid; 7328 u_int scbid;
7329 u_int seq_flags2;
7277 u_int savedscbptr; 7330 u_int savedscbptr;
7278 uint32_t busaddr; 7331 uint32_t busaddr;
7279 int found; 7332 int found;
@@ -7329,23 +7382,10 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7329 found++; 7382 found++;
7330 switch (action) { 7383 switch (action) {
7331 case SEARCH_COMPLETE: 7384 case SEARCH_COMPLETE:
7332 {
7333 cam_status ostat;
7334 cam_status cstat;
7335
7336 ostat = ahd_get_transaction_status(scb);
7337 if (ostat == CAM_REQ_INPROG)
7338 ahd_set_transaction_status(scb,
7339 status);
7340 cstat = ahd_get_transaction_status(scb);
7341 if (cstat != CAM_REQ_CMP)
7342 ahd_freeze_scb(scb);
7343 if ((scb->flags & SCB_ACTIVE) == 0) 7385 if ((scb->flags & SCB_ACTIVE) == 0)
7344 printf("Inactive SCB in qinfifo\n"); 7386 printf("Inactive SCB in qinfifo\n");
7345 ahd_done(ahd, scb); 7387 ahd_done_with_status(ahd, scb, status);
7346
7347 /* FALLTHROUGH */ 7388 /* FALLTHROUGH */
7348 }
7349 case SEARCH_REMOVE: 7389 case SEARCH_REMOVE:
7350 break; 7390 break;
7351 case SEARCH_PRINT: 7391 case SEARCH_PRINT:
@@ -7375,21 +7415,24 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7375 * looking for matches. 7415 * looking for matches.
7376 */ 7416 */
7377 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); 7417 ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
7418 seq_flags2 = ahd_inb(ahd, SEQ_FLAGS2);
7419 if ((seq_flags2 & PENDING_MK_MESSAGE) != 0) {
7420 scbid = ahd_inw(ahd, MK_MESSAGE_SCB);
7421 mk_msg_scb = ahd_lookup_scb(ahd, scbid);
7422 } else
7423 mk_msg_scb = NULL;
7378 savedscbptr = ahd_get_scbptr(ahd); 7424 savedscbptr = ahd_get_scbptr(ahd);
7379 tid_next = ahd_inw(ahd, WAITING_TID_HEAD); 7425 tid_next = ahd_inw(ahd, WAITING_TID_HEAD);
7380 tid_prev = SCB_LIST_NULL; 7426 tid_prev = SCB_LIST_NULL;
7381 targets = 0; 7427 targets = 0;
7382 for (scbid = tid_next; !SCBID_IS_NULL(scbid); scbid = tid_next) { 7428 for (scbid = tid_next; !SCBID_IS_NULL(scbid); scbid = tid_next) {
7383 u_int tid_head; 7429 u_int tid_head;
7430 u_int tid_tail;
7384 7431
7385 /*
7386 * We limit based on the number of SCBs since
7387 * MK_MESSAGE SCBs are not in the per-tid lists.
7388 */
7389 targets++; 7432 targets++;
7390 if (targets > AHD_SCB_MAX) { 7433 if (targets > AHD_NUM_TARGETS)
7391 panic("TID LIST LOOP"); 7434 panic("TID LIST LOOP");
7392 } 7435
7393 if (scbid >= ahd->scb_data.numscbs) { 7436 if (scbid >= ahd->scb_data.numscbs) {
7394 printf("%s: Waiting TID List inconsistency. " 7437 printf("%s: Waiting TID List inconsistency. "
7395 "SCB index == 0x%x, yet numscbs == 0x%x.", 7438 "SCB index == 0x%x, yet numscbs == 0x%x.",
@@ -7419,8 +7462,71 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7419 tid_head = scbid; 7462 tid_head = scbid;
7420 found += ahd_search_scb_list(ahd, target, channel, 7463 found += ahd_search_scb_list(ahd, target, channel,
7421 lun, tag, role, status, 7464 lun, tag, role, status,
7422 action, &tid_head, 7465 action, &tid_head, &tid_tail,
7423 SCB_GET_TARGET(ahd, scb)); 7466 SCB_GET_TARGET(ahd, scb));
7467 /*
7468 * Check any MK_MESSAGE SCB that is still waiting to
7469 * enter this target's waiting for selection queue.
7470 */
7471 if (mk_msg_scb != NULL
7472 && ahd_match_scb(ahd, mk_msg_scb, target, channel,
7473 lun, tag, role)) {
7474
7475 /*
7476 * We found an scb that needs to be acted on.
7477 */
7478 found++;
7479 switch (action) {
7480 case SEARCH_COMPLETE:
7481 if ((mk_msg_scb->flags & SCB_ACTIVE) == 0)
7482 printf("Inactive SCB pending MK_MSG\n");
7483 ahd_done_with_status(ahd, mk_msg_scb, status);
7484 /* FALLTHROUGH */
7485 case SEARCH_REMOVE:
7486 {
7487 u_int tail_offset;
7488
7489 printf("Removing MK_MSG scb\n");
7490
7491 /*
7492 * Reset our tail to the tail of the
7493 * main per-target list.
7494 */
7495 tail_offset = WAITING_SCB_TAILS
7496 + (2 * SCB_GET_TARGET(ahd, mk_msg_scb));
7497 ahd_outw(ahd, tail_offset, tid_tail);
7498
7499 seq_flags2 &= ~PENDING_MK_MESSAGE;
7500 ahd_outb(ahd, SEQ_FLAGS2, seq_flags2);
7501 ahd_outw(ahd, CMDS_PENDING,
7502 ahd_inw(ahd, CMDS_PENDING)-1);
7503 mk_msg_scb = NULL;
7504 break;
7505 }
7506 case SEARCH_PRINT:
7507 printf(" 0x%x", SCB_GET_TAG(scb));
7508 /* FALLTHROUGH */
7509 case SEARCH_COUNT:
7510 break;
7511 }
7512 }
7513
7514 if (mk_msg_scb != NULL
7515 && SCBID_IS_NULL(tid_head)
7516 && ahd_match_scb(ahd, scb, target, channel, CAM_LUN_WILDCARD,
7517 SCB_LIST_NULL, ROLE_UNKNOWN)) {
7518
7519 /*
7520 * When removing the last SCB for a target
7521 * queue with a pending MK_MESSAGE scb, we
7522 * must queue the MK_MESSAGE scb.
7523 */
7524 printf("Queueing mk_msg_scb\n");
7525 tid_head = ahd_inw(ahd, MK_MESSAGE_SCB);
7526 seq_flags2 &= ~PENDING_MK_MESSAGE;
7527 ahd_outb(ahd, SEQ_FLAGS2, seq_flags2);
7528 mk_msg_scb = NULL;
7529 }
7424 if (tid_head != scbid) 7530 if (tid_head != scbid)
7425 ahd_stitch_tid_list(ahd, tid_prev, tid_head, tid_next); 7531 ahd_stitch_tid_list(ahd, tid_prev, tid_head, tid_next);
7426 if (!SCBID_IS_NULL(tid_head)) 7532 if (!SCBID_IS_NULL(tid_head))
@@ -7428,6 +7534,8 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7428 if (action == SEARCH_PRINT) 7534 if (action == SEARCH_PRINT)
7429 printf(")\n"); 7535 printf(")\n");
7430 } 7536 }
7537
7538 /* Restore saved state. */
7431 ahd_set_scbptr(ahd, savedscbptr); 7539 ahd_set_scbptr(ahd, savedscbptr);
7432 ahd_restore_modes(ahd, saved_modes); 7540 ahd_restore_modes(ahd, saved_modes);
7433 return (found); 7541 return (found);
@@ -7436,7 +7544,8 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
7436static int 7544static int
7437ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel, 7545ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
7438 int lun, u_int tag, role_t role, uint32_t status, 7546 int lun, u_int tag, role_t role, uint32_t status,
7439 ahd_search_action action, u_int *list_head, u_int tid) 7547 ahd_search_action action, u_int *list_head,
7548 u_int *list_tail, u_int tid)
7440{ 7549{
7441 struct scb *scb; 7550 struct scb *scb;
7442 u_int scbid; 7551 u_int scbid;
@@ -7448,6 +7557,7 @@ ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
7448 found = 0; 7557 found = 0;
7449 prev = SCB_LIST_NULL; 7558 prev = SCB_LIST_NULL;
7450 next = *list_head; 7559 next = *list_head;
7560 *list_tail = SCB_LIST_NULL;
7451 for (scbid = next; !SCBID_IS_NULL(scbid); scbid = next) { 7561 for (scbid = next; !SCBID_IS_NULL(scbid); scbid = next) {
7452 if (scbid >= ahd->scb_data.numscbs) { 7562 if (scbid >= ahd->scb_data.numscbs) {
7453 printf("%s:SCB List inconsistency. " 7563 printf("%s:SCB List inconsistency. "
@@ -7463,6 +7573,7 @@ ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
7463 panic("Waiting List traversal\n"); 7573 panic("Waiting List traversal\n");
7464 } 7574 }
7465 ahd_set_scbptr(ahd, scbid); 7575 ahd_set_scbptr(ahd, scbid);
7576 *list_tail = scbid;
7466 next = ahd_inw_scbram(ahd, SCB_NEXT); 7577 next = ahd_inw_scbram(ahd, SCB_NEXT);
7467 if (ahd_match_scb(ahd, scb, target, channel, 7578 if (ahd_match_scb(ahd, scb, target, channel,
7468 lun, SCB_LIST_NULL, role) == 0) { 7579 lun, SCB_LIST_NULL, role) == 0) {
@@ -7472,24 +7583,14 @@ ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
7472 found++; 7583 found++;
7473 switch (action) { 7584 switch (action) {
7474 case SEARCH_COMPLETE: 7585 case SEARCH_COMPLETE:
7475 {
7476 cam_status ostat;
7477 cam_status cstat;
7478
7479 ostat = ahd_get_transaction_status(scb);
7480 if (ostat == CAM_REQ_INPROG)
7481 ahd_set_transaction_status(scb, status);
7482 cstat = ahd_get_transaction_status(scb);
7483 if (cstat != CAM_REQ_CMP)
7484 ahd_freeze_scb(scb);
7485 if ((scb->flags & SCB_ACTIVE) == 0) 7586 if ((scb->flags & SCB_ACTIVE) == 0)
7486 printf("Inactive SCB in Waiting List\n"); 7587 printf("Inactive SCB in Waiting List\n");
7487 ahd_done(ahd, scb); 7588 ahd_done_with_status(ahd, scb, status);
7488 /* FALLTHROUGH */ 7589 /* FALLTHROUGH */
7489 }
7490 case SEARCH_REMOVE: 7590 case SEARCH_REMOVE:
7491 ahd_rem_wscb(ahd, scbid, prev, next, tid); 7591 ahd_rem_wscb(ahd, scbid, prev, next, tid);
7492 if (prev == SCB_LIST_NULL) 7592 *list_tail = prev;
7593 if (SCBID_IS_NULL(prev))
7493 *list_head = next; 7594 *list_head = next;
7494 break; 7595 break;
7495 case SEARCH_PRINT: 7596 case SEARCH_PRINT:
@@ -7558,14 +7659,17 @@ ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid,
7558 } 7659 }
7559 7660
7560 /* 7661 /*
7561 * SCBs that had MK_MESSAGE set in them will not 7662 * SCBs that have MK_MESSAGE set in them may
7562 * be queued to the per-target lists, so don't 7663 * cause the tail pointer to be updated without
7563 * blindly clear the tail pointer. 7664 * setting the next pointer of the previous tail.
7665 * Only clear the tail if the removed SCB was
7666 * the tail.
7564 */ 7667 */
7565 tail_offset = WAITING_SCB_TAILS + (2 * tid); 7668 tail_offset = WAITING_SCB_TAILS + (2 * tid);
7566 if (SCBID_IS_NULL(next) 7669 if (SCBID_IS_NULL(next)
7567 && ahd_inw(ahd, tail_offset) == scbid) 7670 && ahd_inw(ahd, tail_offset) == scbid)
7568 ahd_outw(ahd, tail_offset, prev); 7671 ahd_outw(ahd, tail_offset, prev);
7672
7569 ahd_add_scb_to_free_list(ahd, scbid); 7673 ahd_add_scb_to_free_list(ahd, scbid);
7570 return (next); 7674 return (next);
7571} 7675}
@@ -8793,6 +8897,9 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8793 * Mode independent registers. 8897 * Mode independent registers.
8794 */ 8898 */
8795 cur_col = 0; 8899 cur_col = 0;
8900 ahd_intstat_print(ahd_inb(ahd, INTSTAT), &cur_col, 50);
8901 ahd_seloid_print(ahd_inb(ahd, SELOID), &cur_col, 50);
8902 ahd_selid_print(ahd_inb(ahd, SELID), &cur_col, 50);
8796 ahd_hs_mailbox_print(ahd_inb(ahd, LOCAL_HS_MAILBOX), &cur_col, 50); 8903 ahd_hs_mailbox_print(ahd_inb(ahd, LOCAL_HS_MAILBOX), &cur_col, 50);
8797 ahd_intctl_print(ahd_inb(ahd, INTCTL), &cur_col, 50); 8904 ahd_intctl_print(ahd_inb(ahd, INTCTL), &cur_col, 50);
8798 ahd_seqintstat_print(ahd_inb(ahd, SEQINTSTAT), &cur_col, 50); 8905 ahd_seqintstat_print(ahd_inb(ahd, SEQINTSTAT), &cur_col, 50);
@@ -8808,6 +8915,12 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8808 ahd_seqintctl_print(ahd_inb(ahd, SEQINTCTL), &cur_col, 50); 8915 ahd_seqintctl_print(ahd_inb(ahd, SEQINTCTL), &cur_col, 50);
8809 ahd_seq_flags_print(ahd_inb(ahd, SEQ_FLAGS), &cur_col, 50); 8916 ahd_seq_flags_print(ahd_inb(ahd, SEQ_FLAGS), &cur_col, 50);
8810 ahd_seq_flags2_print(ahd_inb(ahd, SEQ_FLAGS2), &cur_col, 50); 8917 ahd_seq_flags2_print(ahd_inb(ahd, SEQ_FLAGS2), &cur_col, 50);
8918 ahd_qfreeze_count_print(ahd_inw(ahd, QFREEZE_COUNT), &cur_col, 50);
8919 ahd_kernel_qfreeze_count_print(ahd_inw(ahd, KERNEL_QFREEZE_COUNT),
8920 &cur_col, 50);
8921 ahd_mk_message_scb_print(ahd_inw(ahd, MK_MESSAGE_SCB), &cur_col, 50);
8922 ahd_mk_message_scsiid_print(ahd_inb(ahd, MK_MESSAGE_SCSIID),
8923 &cur_col, 50);
8811 ahd_sstat0_print(ahd_inb(ahd, SSTAT0), &cur_col, 50); 8924 ahd_sstat0_print(ahd_inb(ahd, SSTAT0), &cur_col, 50);
8812 ahd_sstat1_print(ahd_inb(ahd, SSTAT1), &cur_col, 50); 8925 ahd_sstat1_print(ahd_inb(ahd, SSTAT1), &cur_col, 50);
8813 ahd_sstat2_print(ahd_inb(ahd, SSTAT2), &cur_col, 50); 8926 ahd_sstat2_print(ahd_inb(ahd, SSTAT2), &cur_col, 50);
@@ -8915,7 +9028,7 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8915 9028
8916 ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i); 9029 ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i);
8917 fifo_scbptr = ahd_get_scbptr(ahd); 9030 fifo_scbptr = ahd_get_scbptr(ahd);
8918 printf("\n%s: FIFO%d %s, LONGJMP == 0x%x, SCB 0x%x\n", 9031 printf("\n\n%s: FIFO%d %s, LONGJMP == 0x%x, SCB 0x%x\n",
8919 ahd_name(ahd), i, 9032 ahd_name(ahd), i,
8920 (dffstat & (FIFO0FREE << i)) ? "Free" : "Active", 9033 (dffstat & (FIFO0FREE << i)) ? "Free" : "Active",
8921 ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr); 9034 ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr);
@@ -8970,6 +9083,9 @@ ahd_dump_card_state(struct ahd_softc *ahd)
8970 printf("%s: OS_SPACE_CNT = 0x%x MAXCMDCNT = 0x%x\n", 9083 printf("%s: OS_SPACE_CNT = 0x%x MAXCMDCNT = 0x%x\n",
8971 ahd_name(ahd), ahd_inb(ahd, OS_SPACE_CNT), 9084 ahd_name(ahd), ahd_inb(ahd, OS_SPACE_CNT),
8972 ahd_inb(ahd, MAXCMDCNT)); 9085 ahd_inb(ahd, MAXCMDCNT));
9086 printf("%s: SAVED_SCSIID = 0x%x SAVED_LUN = 0x%x\n",
9087 ahd_name(ahd), ahd_inb(ahd, SAVED_SCSIID),
9088 ahd_inb(ahd, SAVED_LUN));
8973 ahd_simode0_print(ahd_inb(ahd, SIMODE0), &cur_col, 50); 9089 ahd_simode0_print(ahd_inb(ahd, SIMODE0), &cur_col, 50);
8974 printf("\n"); 9090 printf("\n");
8975 ahd_set_modes(ahd, AHD_MODE_CCHAN, AHD_MODE_CCHAN); 9091 ahd_set_modes(ahd, AHD_MODE_CCHAN, AHD_MODE_CCHAN);
diff --git a/drivers/scsi/aic7xxx/aic79xx_inline.h b/drivers/scsi/aic7xxx/aic79xx_inline.h
index 91c4f7f484b..8ad3ce945b9 100644
--- a/drivers/scsi/aic7xxx/aic79xx_inline.h
+++ b/drivers/scsi/aic7xxx/aic79xx_inline.h
@@ -37,7 +37,7 @@
37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGES. 38 * POSSIBILITY OF SUCH DAMAGES.
39 * 39 *
40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#58 $ 40 * $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#59 $
41 * 41 *
42 * $FreeBSD$ 42 * $FreeBSD$
43 */ 43 */
@@ -804,9 +804,10 @@ ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb)
804 uint64_t host_dataptr; 804 uint64_t host_dataptr;
805 805
806 host_dataptr = ahd_le64toh(scb->hscb->dataptr); 806 host_dataptr = ahd_le64toh(scb->hscb->dataptr);
807 printf("%s: Queueing SCB 0x%x bus addr 0x%x - 0x%x%x/0x%x\n", 807 printf("%s: Queueing SCB %d:0x%x bus addr 0x%x - 0x%x%x/0x%x\n",
808 ahd_name(ahd), 808 ahd_name(ahd),
809 SCB_GET_TAG(scb), ahd_le32toh(scb->hscb->hscb_busaddr), 809 SCB_GET_TAG(scb), scb->hscb->scsiid,
810 ahd_le32toh(scb->hscb->hscb_busaddr),
810 (u_int)((host_dataptr >> 32) & 0xFFFFFFFF), 811 (u_int)((host_dataptr >> 32) & 0xFFFFFFFF),
811 (u_int)(host_dataptr & 0xFFFFFFFF), 812 (u_int)(host_dataptr & 0xFFFFFFFF),
812 ahd_le32toh(scb->hscb->datacnt)); 813 ahd_le32toh(scb->hscb->datacnt));
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h
index cb74fccc810..854fc57c304 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm.h
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.h
@@ -36,7 +36,7 @@
36 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 * POSSIBILITY OF SUCH DAMAGES. 37 * POSSIBILITY OF SUCH DAMAGES.
38 * 38 *
39 * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#137 $ 39 * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#166 $
40 * 40 *
41 */ 41 */
42#ifndef _AIC79XX_LINUX_H_ 42#ifndef _AIC79XX_LINUX_H_
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
index bf360ae021a..ebbf7e4ff4c 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
@@ -220,10 +220,10 @@ ahd_linux_pci_reserve_io_regions(struct ahd_softc *ahd, u_long *base,
220 *base2 = pci_resource_start(ahd->dev_softc, 3); 220 *base2 = pci_resource_start(ahd->dev_softc, 3);
221 if (*base == 0 || *base2 == 0) 221 if (*base == 0 || *base2 == 0)
222 return (ENOMEM); 222 return (ENOMEM);
223 if (request_region(*base, 256, "aic79xx") == 0) 223 if (!request_region(*base, 256, "aic79xx"))
224 return (ENOMEM); 224 return (ENOMEM);
225 if (request_region(*base2, 256, "aic79xx") == 0) { 225 if (!request_region(*base2, 256, "aic79xx")) {
226 release_region(*base2, 256); 226 release_region(*base, 256);
227 return (ENOMEM); 227 return (ENOMEM);
228 } 228 }
229 return (0); 229 return (0);
@@ -237,7 +237,7 @@ ahd_linux_pci_reserve_mem_region(struct ahd_softc *ahd,
237 u_long start; 237 u_long start;
238 u_long base_page; 238 u_long base_page;
239 u_long base_offset; 239 u_long base_offset;
240 int error; 240 int error = 0;
241 241
242 if (aic79xx_allow_memio == 0) 242 if (aic79xx_allow_memio == 0)
243 return (ENOMEM); 243 return (ENOMEM);
@@ -245,16 +245,15 @@ ahd_linux_pci_reserve_mem_region(struct ahd_softc *ahd,
245 if ((ahd->bugs & AHD_PCIX_MMAPIO_BUG) != 0) 245 if ((ahd->bugs & AHD_PCIX_MMAPIO_BUG) != 0)
246 return (ENOMEM); 246 return (ENOMEM);
247 247
248 error = 0;
249 start = pci_resource_start(ahd->dev_softc, 1); 248 start = pci_resource_start(ahd->dev_softc, 1);
250 base_page = start & PAGE_MASK; 249 base_page = start & PAGE_MASK;
251 base_offset = start - base_page; 250 base_offset = start - base_page;
252 if (start != 0) { 251 if (start != 0) {
253 *bus_addr = start; 252 *bus_addr = start;
254 if (request_mem_region(start, 0x1000, "aic79xx") == 0) 253 if (!request_mem_region(start, 0x1000, "aic79xx"))
255 error = ENOMEM; 254 error = ENOMEM;
256 if (error == 0) { 255 if (!error) {
257 *maddr = ioremap_nocache(base_page, base_offset + 256); 256 *maddr = ioremap_nocache(base_page, base_offset + 512);
258 if (*maddr == NULL) { 257 if (*maddr == NULL) {
259 error = ENOMEM; 258 error = ENOMEM;
260 release_mem_region(start, 0x1000); 259 release_mem_region(start, 0x1000);
@@ -344,7 +343,7 @@ ahd_pci_map_int(struct ahd_softc *ahd)
344 343
345 error = request_irq(ahd->dev_softc->irq, ahd_linux_isr, 344 error = request_irq(ahd->dev_softc->irq, ahd_linux_isr,
346 SA_SHIRQ, "aic79xx", ahd); 345 SA_SHIRQ, "aic79xx", ahd);
347 if (error == 0) 346 if (!error)
348 ahd->platform_data->irq = ahd->dev_softc->irq; 347 ahd->platform_data->irq = ahd->dev_softc->irq;
349 348
350 return (-error); 349 return (-error);
diff --git a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
index 8763b158856..2068e00d2c7 100644
--- a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
@@ -2,8 +2,8 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $
7 */ 7 */
8typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); 8typedef int (ahd_reg_print_t)(u_int, u_int *, u_int);
9typedef struct ahd_reg_parse_entry { 9typedef struct ahd_reg_parse_entry {
@@ -2204,6 +2204,20 @@ ahd_reg_print_t ahd_cmdsize_table_print;
2204#endif 2204#endif
2205 2205
2206#if AIC_DEBUG_REGISTERS 2206#if AIC_DEBUG_REGISTERS
2207ahd_reg_print_t ahd_mk_message_scb_print;
2208#else
2209#define ahd_mk_message_scb_print(regvalue, cur_col, wrap) \
2210 ahd_print_register(NULL, 0, "MK_MESSAGE_SCB", 0x160, regvalue, cur_col, wrap)
2211#endif
2212
2213#if AIC_DEBUG_REGISTERS
2214ahd_reg_print_t ahd_mk_message_scsiid_print;
2215#else
2216#define ahd_mk_message_scsiid_print(regvalue, cur_col, wrap) \
2217 ahd_print_register(NULL, 0, "MK_MESSAGE_SCSIID", 0x162, regvalue, cur_col, wrap)
2218#endif
2219
2220#if AIC_DEBUG_REGISTERS
2207ahd_reg_print_t ahd_scb_base_print; 2221ahd_reg_print_t ahd_scb_base_print;
2208#else 2222#else
2209#define ahd_scb_base_print(regvalue, cur_col, wrap) \ 2223#define ahd_scb_base_print(regvalue, cur_col, wrap) \
@@ -3638,6 +3652,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3638#define SEQ_FLAGS2 0x14d 3652#define SEQ_FLAGS2 0x14d
3639#define SELECTOUT_QFROZEN 0x04 3653#define SELECTOUT_QFROZEN 0x04
3640#define TARGET_MSG_PENDING 0x02 3654#define TARGET_MSG_PENDING 0x02
3655#define PENDING_MK_MESSAGE 0x01
3641 3656
3642#define ALLOCFIFO_SCBPTR 0x14e 3657#define ALLOCFIFO_SCBPTR 0x14e
3643 3658
@@ -3655,6 +3670,10 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3655 3670
3656#define CMDSIZE_TABLE 0x158 3671#define CMDSIZE_TABLE 0x158
3657 3672
3673#define MK_MESSAGE_SCB 0x160
3674
3675#define MK_MESSAGE_SCSIID 0x162
3676
3658#define SCB_BASE 0x180 3677#define SCB_BASE 0x180
3659 3678
3660#define SCB_RESIDUAL_DATACNT 0x180 3679#define SCB_RESIDUAL_DATACNT 0x180
@@ -3800,5 +3819,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
3800 3819
3801 3820
3802/* Exported Labels */ 3821/* Exported Labels */
3803#define LABEL_seq_isr 0x285 3822#define LABEL_seq_isr 0x28f
3804#define LABEL_timer_isr 0x281 3823#define LABEL_timer_isr 0x28b
diff --git a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
index a4137c98537..db38a61a8cb 100644
--- a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
@@ -2,8 +2,8 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#118 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#75 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $
7 */ 7 */
8 8
9#include "aic79xx_osm.h" 9#include "aic79xx_osm.h"
@@ -3382,6 +3382,7 @@ ahd_initiator_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
3382} 3382}
3383 3383
3384static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = { 3384static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
3385 { "PENDING_MK_MESSAGE", 0x01, 0x01 },
3385 { "TARGET_MSG_PENDING", 0x02, 0x02 }, 3386 { "TARGET_MSG_PENDING", 0x02, 0x02 },
3386 { "SELECTOUT_QFROZEN", 0x04, 0x04 } 3387 { "SELECTOUT_QFROZEN", 0x04, 0x04 }
3387}; 3388};
@@ -3389,7 +3390,7 @@ static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
3389int 3390int
3390ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap) 3391ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap)
3391{ 3392{
3392 return (ahd_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2", 3393 return (ahd_print_register(SEQ_FLAGS2_parse_table, 3, "SEQ_FLAGS2",
3393 0x14d, regvalue, cur_col, wrap)); 3394 0x14d, regvalue, cur_col, wrap));
3394} 3395}
3395 3396
@@ -3450,6 +3451,20 @@ ahd_cmdsize_table_print(u_int regvalue, u_int *cur_col, u_int wrap)
3450} 3451}
3451 3452
3452int 3453int
3454ahd_mk_message_scb_print(u_int regvalue, u_int *cur_col, u_int wrap)
3455{
3456 return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCB",
3457 0x160, regvalue, cur_col, wrap));
3458}
3459
3460int
3461ahd_mk_message_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
3462{
3463 return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCSIID",
3464 0x162, regvalue, cur_col, wrap));
3465}
3466
3467int
3453ahd_scb_base_print(u_int regvalue, u_int *cur_col, u_int wrap) 3468ahd_scb_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
3454{ 3469{
3455 return (ahd_print_register(NULL, 0, "SCB_BASE", 3470 return (ahd_print_register(NULL, 0, "SCB_BASE",
diff --git a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
index b1e5365be23..11bed07e90b 100644
--- a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
+++ b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
@@ -2,17 +2,17 @@
2 * DO NOT EDIT - This file is automatically generated 2 * DO NOT EDIT - This file is automatically generated
3 * from the following source files: 3 * from the following source files:
4 * 4 *
5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $ 5 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $
6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $ 6 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $
7 */ 7 */
8static uint8_t seqprog[] = { 8static uint8_t seqprog[] = {
9 0xff, 0x02, 0x06, 0x78, 9 0xff, 0x02, 0x06, 0x78,
10 0x00, 0xea, 0x64, 0x59, 10 0x00, 0xea, 0x6e, 0x59,
11 0x01, 0xea, 0x04, 0x30, 11 0x01, 0xea, 0x04, 0x30,
12 0xff, 0x04, 0x0c, 0x78, 12 0xff, 0x04, 0x0c, 0x78,
13 0x19, 0xea, 0x64, 0x59, 13 0x19, 0xea, 0x6e, 0x59,
14 0x19, 0xea, 0x04, 0x00, 14 0x19, 0xea, 0x04, 0x00,
15 0x33, 0xea, 0x5e, 0x59, 15 0x33, 0xea, 0x68, 0x59,
16 0x33, 0xea, 0x00, 0x00, 16 0x33, 0xea, 0x00, 0x00,
17 0x60, 0x3a, 0x3a, 0x68, 17 0x60, 0x3a, 0x3a, 0x68,
18 0x04, 0x4d, 0x35, 0x78, 18 0x04, 0x4d, 0x35, 0x78,
@@ -33,15 +33,15 @@ static uint8_t seqprog[] = {
33 0xff, 0xea, 0x62, 0x02, 33 0xff, 0xea, 0x62, 0x02,
34 0x00, 0xe2, 0x3a, 0x40, 34 0x00, 0xe2, 0x3a, 0x40,
35 0xff, 0x21, 0x3b, 0x70, 35 0xff, 0x21, 0x3b, 0x70,
36 0x40, 0x4b, 0xaa, 0x69, 36 0x40, 0x4b, 0xb4, 0x69,
37 0x00, 0xe2, 0x68, 0x59, 37 0x00, 0xe2, 0x72, 0x59,
38 0x40, 0x4b, 0xaa, 0x69, 38 0x40, 0x4b, 0xb4, 0x69,
39 0x20, 0x4b, 0x96, 0x69, 39 0x20, 0x4b, 0xa0, 0x69,
40 0xfc, 0x42, 0x44, 0x78, 40 0xfc, 0x42, 0x44, 0x78,
41 0x10, 0x40, 0x44, 0x78, 41 0x10, 0x40, 0x44, 0x78,
42 0x00, 0xe2, 0xfc, 0x5d, 42 0x00, 0xe2, 0x10, 0x5e,
43 0x20, 0x4d, 0x48, 0x78, 43 0x20, 0x4d, 0x48, 0x78,
44 0x00, 0xe2, 0xfc, 0x5d, 44 0x00, 0xe2, 0x10, 0x5e,
45 0x30, 0x3f, 0xc0, 0x09, 45 0x30, 0x3f, 0xc0, 0x09,
46 0x30, 0xe0, 0x50, 0x60, 46 0x30, 0xe0, 0x50, 0x60,
47 0x7f, 0x4a, 0x94, 0x08, 47 0x7f, 0x4a, 0x94, 0x08,
@@ -51,7 +51,7 @@ static uint8_t seqprog[] = {
51 0x00, 0xe2, 0x76, 0x58, 51 0x00, 0xe2, 0x76, 0x58,
52 0x00, 0xe2, 0x86, 0x58, 52 0x00, 0xe2, 0x86, 0x58,
53 0x00, 0xe2, 0x06, 0x40, 53 0x00, 0xe2, 0x06, 0x40,
54 0x33, 0xea, 0x5e, 0x59, 54 0x33, 0xea, 0x68, 0x59,
55 0x33, 0xea, 0x00, 0x00, 55 0x33, 0xea, 0x00, 0x00,
56 0x01, 0x52, 0x84, 0x78, 56 0x01, 0x52, 0x84, 0x78,
57 0x02, 0x58, 0x50, 0x31, 57 0x02, 0x58, 0x50, 0x31,
@@ -59,26 +59,26 @@ static uint8_t seqprog[] = {
59 0xff, 0x97, 0x6f, 0x78, 59 0xff, 0x97, 0x6f, 0x78,
60 0x50, 0x4b, 0x6a, 0x68, 60 0x50, 0x4b, 0x6a, 0x68,
61 0xbf, 0x3a, 0x74, 0x08, 61 0xbf, 0x3a, 0x74, 0x08,
62 0x14, 0xea, 0x64, 0x59, 62 0x14, 0xea, 0x6e, 0x59,
63 0x14, 0xea, 0x04, 0x00, 63 0x14, 0xea, 0x04, 0x00,
64 0x08, 0x92, 0x25, 0x03, 64 0x08, 0x92, 0x25, 0x03,
65 0xff, 0x90, 0x5f, 0x68, 65 0xff, 0x90, 0x5f, 0x68,
66 0x00, 0xe2, 0x76, 0x5b, 66 0x00, 0xe2, 0x8a, 0x5b,
67 0x00, 0xe2, 0x5e, 0x40, 67 0x00, 0xe2, 0x5e, 0x40,
68 0x00, 0xea, 0x5e, 0x59, 68 0x00, 0xea, 0x68, 0x59,
69 0x01, 0xea, 0x00, 0x30, 69 0x01, 0xea, 0x00, 0x30,
70 0x80, 0xf9, 0x7e, 0x68, 70 0x80, 0xf9, 0x7e, 0x68,
71 0x00, 0xe2, 0x5c, 0x59, 71 0x00, 0xe2, 0x66, 0x59,
72 0x11, 0xea, 0x5e, 0x59, 72 0x11, 0xea, 0x68, 0x59,
73 0x11, 0xea, 0x00, 0x00, 73 0x11, 0xea, 0x00, 0x00,
74 0x80, 0xf9, 0x5c, 0x79, 74 0x80, 0xf9, 0x66, 0x79,
75 0xff, 0xea, 0xd4, 0x0d, 75 0xff, 0xea, 0xd4, 0x0d,
76 0x22, 0xea, 0x5e, 0x59, 76 0x22, 0xea, 0x68, 0x59,
77 0x22, 0xea, 0x00, 0x00, 77 0x22, 0xea, 0x00, 0x00,
78 0x10, 0x16, 0x90, 0x78, 78 0x10, 0x16, 0x90, 0x78,
79 0x10, 0x16, 0x2c, 0x00, 79 0x10, 0x16, 0x2c, 0x00,
80 0x01, 0x0b, 0xae, 0x32, 80 0x01, 0x0b, 0xae, 0x32,
81 0x18, 0xad, 0x12, 0x79, 81 0x18, 0xad, 0x1c, 0x79,
82 0x04, 0xad, 0xdc, 0x68, 82 0x04, 0xad, 0xdc, 0x68,
83 0x80, 0xad, 0x84, 0x78, 83 0x80, 0xad, 0x84, 0x78,
84 0x10, 0xad, 0xaa, 0x78, 84 0x10, 0xad, 0xaa, 0x78,
@@ -118,7 +118,6 @@ static uint8_t seqprog[] = {
118 0x80, 0x18, 0x30, 0x04, 118 0x80, 0x18, 0x30, 0x04,
119 0x40, 0xad, 0x84, 0x78, 119 0x40, 0xad, 0x84, 0x78,
120 0xe7, 0xad, 0x5a, 0x09, 120 0xe7, 0xad, 0x5a, 0x09,
121 0x02, 0xa8, 0x40, 0x31,
122 0xff, 0xea, 0xc0, 0x09, 121 0xff, 0xea, 0xc0, 0x09,
123 0x01, 0x54, 0xa9, 0x1a, 122 0x01, 0x54, 0xa9, 0x1a,
124 0x00, 0x55, 0xab, 0x22, 123 0x00, 0x55, 0xab, 0x22,
@@ -128,24 +127,30 @@ static uint8_t seqprog[] = {
128 0xff, 0xea, 0x5a, 0x03, 127 0xff, 0xea, 0x5a, 0x03,
129 0xff, 0xea, 0x5e, 0x03, 128 0xff, 0xea, 0x5e, 0x03,
130 0x01, 0x10, 0xd4, 0x31, 129 0x01, 0x10, 0xd4, 0x31,
131 0x10, 0x92, 0x07, 0x69, 130 0x02, 0xa8, 0x40, 0x31,
131 0x01, 0x92, 0xc1, 0x31,
132 0x3d, 0x93, 0xc5, 0x29, 132 0x3d, 0x93, 0xc5, 0x29,
133 0xfe, 0xe2, 0xc4, 0x09, 133 0xfe, 0xe2, 0xc4, 0x09,
134 0x01, 0xea, 0xc6, 0x01, 134 0x01, 0xea, 0xc6, 0x01,
135 0x02, 0xe2, 0xc8, 0x31, 135 0x02, 0xe2, 0xc8, 0x31,
136 0x02, 0xec, 0x50, 0x31, 136 0x02, 0xec, 0x50, 0x31,
137 0x02, 0xa0, 0xda, 0x31, 137 0x02, 0xa0, 0xda, 0x31,
138 0xff, 0xa9, 0x06, 0x71, 138 0xff, 0xa9, 0x10, 0x71,
139 0x10, 0xe0, 0x0e, 0x79,
140 0x10, 0x92, 0x0f, 0x79,
141 0x01, 0x4d, 0x9b, 0x02,
142 0x02, 0xa0, 0xc0, 0x32,
143 0x01, 0x93, 0xc5, 0x36,
139 0x02, 0xa0, 0x58, 0x37, 144 0x02, 0xa0, 0x58, 0x37,
140 0xff, 0x21, 0x0f, 0x71, 145 0xff, 0x21, 0x19, 0x71,
141 0x02, 0x22, 0x51, 0x31, 146 0x02, 0x22, 0x51, 0x31,
142 0x02, 0xa0, 0x5c, 0x33, 147 0x02, 0xa0, 0x5c, 0x33,
143 0x02, 0xa0, 0x44, 0x36, 148 0x02, 0xa0, 0x44, 0x36,
144 0x02, 0xa0, 0x40, 0x32, 149 0x02, 0xa0, 0x40, 0x32,
145 0x02, 0xa0, 0x44, 0x36, 150 0x02, 0xa0, 0x44, 0x36,
146 0x04, 0x4d, 0x17, 0x69, 151 0x05, 0x4d, 0x21, 0x69,
147 0x40, 0x16, 0x48, 0x69, 152 0x40, 0x16, 0x52, 0x69,
148 0xff, 0x2d, 0x4d, 0x61, 153 0xff, 0x2d, 0x57, 0x61,
149 0xff, 0x29, 0x85, 0x70, 154 0xff, 0x29, 0x85, 0x70,
150 0x02, 0x28, 0x55, 0x32, 155 0x02, 0x28, 0x55, 0x32,
151 0x01, 0xea, 0x5a, 0x01, 156 0x01, 0xea, 0x5a, 0x01,
@@ -159,22 +164,22 @@ static uint8_t seqprog[] = {
159 0x01, 0x56, 0xad, 0x1a, 164 0x01, 0x56, 0xad, 0x1a,
160 0xff, 0x54, 0xa9, 0x1a, 165 0xff, 0x54, 0xa9, 0x1a,
161 0xff, 0x55, 0xab, 0x22, 166 0xff, 0x55, 0xab, 0x22,
162 0xff, 0x8d, 0x41, 0x71, 167 0xff, 0x8d, 0x4b, 0x71,
163 0x80, 0xac, 0x40, 0x71, 168 0x80, 0xac, 0x4a, 0x71,
164 0x20, 0x16, 0x40, 0x69, 169 0x20, 0x16, 0x4a, 0x69,
165 0x00, 0xac, 0xc4, 0x19, 170 0x00, 0xac, 0xc4, 0x19,
166 0x07, 0xe2, 0x40, 0xf9, 171 0x07, 0xe2, 0x4a, 0xf9,
167 0x02, 0x8c, 0x51, 0x31, 172 0x02, 0x8c, 0x51, 0x31,
168 0x00, 0xe2, 0x24, 0x41, 173 0x00, 0xe2, 0x2e, 0x41,
169 0x01, 0xac, 0x08, 0x31, 174 0x01, 0xac, 0x08, 0x31,
170 0x09, 0xea, 0x5a, 0x01, 175 0x09, 0xea, 0x5a, 0x01,
171 0x02, 0x8c, 0x51, 0x32, 176 0x02, 0x8c, 0x51, 0x32,
172 0xff, 0xea, 0x1a, 0x07, 177 0xff, 0xea, 0x1a, 0x07,
173 0x04, 0x24, 0xf9, 0x30, 178 0x04, 0x24, 0xf9, 0x30,
174 0x1d, 0xea, 0x52, 0x41, 179 0x1d, 0xea, 0x5c, 0x41,
175 0x02, 0x2c, 0x51, 0x31, 180 0x02, 0x2c, 0x51, 0x31,
176 0x04, 0xa8, 0xf9, 0x30, 181 0x04, 0xa8, 0xf9, 0x30,
177 0x19, 0xea, 0x52, 0x41, 182 0x19, 0xea, 0x5c, 0x41,
178 0x06, 0xea, 0x08, 0x81, 183 0x06, 0xea, 0x08, 0x81,
179 0x01, 0xe2, 0x5a, 0x35, 184 0x01, 0xe2, 0x5a, 0x35,
180 0x02, 0xf2, 0xf0, 0x31, 185 0x02, 0xf2, 0xf0, 0x31,
@@ -190,27 +195,27 @@ static uint8_t seqprog[] = {
190 0x02, 0x20, 0xb9, 0x30, 195 0x02, 0x20, 0xb9, 0x30,
191 0x02, 0x20, 0x51, 0x31, 196 0x02, 0x20, 0x51, 0x31,
192 0x4c, 0x93, 0xd7, 0x28, 197 0x4c, 0x93, 0xd7, 0x28,
193 0x10, 0x92, 0x77, 0x79, 198 0x10, 0x92, 0x81, 0x79,
194 0x01, 0x6b, 0xc0, 0x30, 199 0x01, 0x6b, 0xc0, 0x30,
195 0x02, 0x64, 0xc8, 0x00, 200 0x02, 0x64, 0xc8, 0x00,
196 0x40, 0x3a, 0x74, 0x04, 201 0x40, 0x3a, 0x74, 0x04,
197 0x00, 0xe2, 0x76, 0x58, 202 0x00, 0xe2, 0x76, 0x58,
198 0x33, 0xea, 0x5e, 0x59, 203 0x33, 0xea, 0x68, 0x59,
199 0x33, 0xea, 0x00, 0x00, 204 0x33, 0xea, 0x00, 0x00,
200 0x30, 0x3f, 0xc0, 0x09, 205 0x30, 0x3f, 0xc0, 0x09,
201 0x30, 0xe0, 0x78, 0x61, 206 0x30, 0xe0, 0x82, 0x61,
202 0x20, 0x3f, 0x8e, 0x69, 207 0x20, 0x3f, 0x98, 0x69,
203 0x10, 0x3f, 0x78, 0x79, 208 0x10, 0x3f, 0x82, 0x79,
204 0x02, 0xea, 0x7e, 0x00, 209 0x02, 0xea, 0x7e, 0x00,
205 0x00, 0xea, 0x5e, 0x59, 210 0x00, 0xea, 0x68, 0x59,
206 0x01, 0xea, 0x00, 0x30, 211 0x01, 0xea, 0x00, 0x30,
207 0x02, 0x4e, 0x51, 0x35, 212 0x02, 0x4e, 0x51, 0x35,
208 0x01, 0xea, 0x7e, 0x00, 213 0x01, 0xea, 0x7e, 0x00,
209 0x11, 0xea, 0x5e, 0x59, 214 0x11, 0xea, 0x68, 0x59,
210 0x11, 0xea, 0x00, 0x00, 215 0x11, 0xea, 0x00, 0x00,
211 0x02, 0x4e, 0x51, 0x35, 216 0x02, 0x4e, 0x51, 0x35,
212 0xc0, 0x4a, 0x94, 0x00, 217 0xc0, 0x4a, 0x94, 0x00,
213 0x04, 0x41, 0x9c, 0x79, 218 0x04, 0x41, 0xa6, 0x79,
214 0x08, 0xea, 0x98, 0x00, 219 0x08, 0xea, 0x98, 0x00,
215 0x08, 0x57, 0xae, 0x00, 220 0x08, 0x57, 0xae, 0x00,
216 0x08, 0x3c, 0x78, 0x00, 221 0x08, 0x3c, 0x78, 0x00,
@@ -218,12 +223,12 @@ static uint8_t seqprog[] = {
218 0x0f, 0x67, 0xc0, 0x09, 223 0x0f, 0x67, 0xc0, 0x09,
219 0x00, 0x3a, 0x75, 0x02, 224 0x00, 0x3a, 0x75, 0x02,
220 0x20, 0xea, 0x96, 0x00, 225 0x20, 0xea, 0x96, 0x00,
221 0x00, 0xe2, 0x14, 0x42, 226 0x00, 0xe2, 0x28, 0x42,
222 0xc0, 0x4a, 0x94, 0x00, 227 0xc0, 0x4a, 0x94, 0x00,
223 0x40, 0x3a, 0xc8, 0x69, 228 0x40, 0x3a, 0xd2, 0x69,
224 0x02, 0x55, 0x06, 0x68, 229 0x02, 0x55, 0x06, 0x68,
225 0x02, 0x56, 0xc8, 0x69, 230 0x02, 0x56, 0xd2, 0x69,
226 0xff, 0x5b, 0xc8, 0x61, 231 0xff, 0x5b, 0xd2, 0x61,
227 0x02, 0x20, 0x51, 0x31, 232 0x02, 0x20, 0x51, 0x31,
228 0x80, 0xea, 0xb2, 0x01, 233 0x80, 0xea, 0xb2, 0x01,
229 0x44, 0xea, 0x00, 0x00, 234 0x44, 0xea, 0x00, 0x00,
@@ -231,40 +236,45 @@ static uint8_t seqprog[] = {
231 0x33, 0xea, 0x00, 0x00, 236 0x33, 0xea, 0x00, 0x00,
232 0xff, 0xea, 0xb2, 0x09, 237 0xff, 0xea, 0xb2, 0x09,
233 0xff, 0xe0, 0xc0, 0x19, 238 0xff, 0xe0, 0xc0, 0x19,
234 0xff, 0xe0, 0xca, 0x79, 239 0xff, 0xe0, 0xd4, 0x79,
235 0x02, 0xac, 0x51, 0x31, 240 0x02, 0xac, 0x51, 0x31,
236 0x00, 0xe2, 0xc0, 0x41, 241 0x00, 0xe2, 0xca, 0x41,
237 0x02, 0x5e, 0x50, 0x31, 242 0x02, 0x5e, 0x50, 0x31,
238 0x02, 0xa8, 0xb8, 0x30, 243 0x02, 0xa8, 0xb8, 0x30,
239 0x02, 0x5c, 0x50, 0x31, 244 0x02, 0x5c, 0x50, 0x31,
240 0xff, 0xad, 0xdb, 0x71, 245 0xff, 0xad, 0xe5, 0x71,
241 0x02, 0xac, 0x41, 0x31, 246 0x02, 0xac, 0x41, 0x31,
242 0x02, 0x22, 0x51, 0x31, 247 0x02, 0x22, 0x51, 0x31,
243 0x02, 0xa0, 0x5c, 0x33, 248 0x02, 0xa0, 0x5c, 0x33,
244 0x02, 0xa0, 0x44, 0x32, 249 0x02, 0xa0, 0x44, 0x32,
245 0x00, 0xe2, 0xe4, 0x41, 250 0x00, 0xe2, 0xf8, 0x41,
246 0x10, 0x92, 0xe5, 0x69, 251 0x01, 0x4d, 0xf1, 0x79,
252 0x01, 0x62, 0xc1, 0x31,
253 0x00, 0x93, 0xf1, 0x61,
254 0xfe, 0x4d, 0x9b, 0x0a,
255 0x02, 0x60, 0x41, 0x31,
256 0x00, 0xe2, 0xdc, 0x41,
247 0x3d, 0x93, 0xc9, 0x29, 257 0x3d, 0x93, 0xc9, 0x29,
248 0x01, 0xe4, 0xc8, 0x01, 258 0x01, 0xe4, 0xc8, 0x01,
249 0x01, 0xea, 0xca, 0x01, 259 0x01, 0xea, 0xca, 0x01,
250 0xff, 0xea, 0xda, 0x01, 260 0xff, 0xea, 0xda, 0x01,
251 0x02, 0x20, 0x51, 0x31, 261 0x02, 0x20, 0x51, 0x31,
252 0x02, 0xae, 0x41, 0x32, 262 0x02, 0xae, 0x41, 0x32,
253 0xff, 0x21, 0xed, 0x61, 263 0xff, 0x21, 0x01, 0x62,
254 0xff, 0xea, 0x46, 0x02, 264 0xff, 0xea, 0x46, 0x02,
255 0x02, 0x5c, 0x50, 0x31, 265 0x02, 0x5c, 0x50, 0x31,
256 0x40, 0xea, 0x96, 0x00, 266 0x40, 0xea, 0x96, 0x00,
257 0x02, 0x56, 0x04, 0x6e, 267 0x02, 0x56, 0x20, 0x6e,
258 0x01, 0x55, 0x04, 0x6e, 268 0x01, 0x55, 0x20, 0x6e,
259 0x10, 0x92, 0xf9, 0x79, 269 0x10, 0x92, 0x0d, 0x7a,
260 0x10, 0x40, 0x02, 0x6a, 270 0x10, 0x40, 0x16, 0x6a,
261 0x01, 0x56, 0x02, 0x7a, 271 0x01, 0x56, 0x16, 0x7a,
262 0xff, 0x97, 0x07, 0x78, 272 0xff, 0x97, 0x07, 0x78,
263 0x13, 0xea, 0x64, 0x59, 273 0x13, 0xea, 0x6e, 0x59,
264 0x13, 0xea, 0x04, 0x00, 274 0x13, 0xea, 0x04, 0x00,
265 0x00, 0xe2, 0x06, 0x40, 275 0x00, 0xe2, 0x06, 0x40,
266 0xbf, 0x3a, 0x74, 0x08, 276 0xbf, 0x3a, 0x74, 0x08,
267 0x04, 0x41, 0x08, 0x7a, 277 0x04, 0x41, 0x1c, 0x7a,
268 0x08, 0xea, 0x98, 0x00, 278 0x08, 0xea, 0x98, 0x00,
269 0x08, 0x57, 0xae, 0x00, 279 0x08, 0x57, 0xae, 0x00,
270 0x01, 0x93, 0x75, 0x32, 280 0x01, 0x93, 0x75, 0x32,
@@ -272,108 +282,108 @@ static uint8_t seqprog[] = {
272 0x40, 0xea, 0x72, 0x02, 282 0x40, 0xea, 0x72, 0x02,
273 0x08, 0x3c, 0x78, 0x00, 283 0x08, 0x3c, 0x78, 0x00,
274 0x80, 0xea, 0x6e, 0x02, 284 0x80, 0xea, 0x6e, 0x02,
275 0x00, 0xe2, 0xe2, 0x5b, 285 0x00, 0xe2, 0xf6, 0x5b,
276 0x01, 0x3c, 0xc1, 0x31, 286 0x01, 0x3c, 0xc1, 0x31,
277 0x9f, 0xe0, 0x84, 0x7c, 287 0x9f, 0xe0, 0x98, 0x7c,
278 0x80, 0xe0, 0x28, 0x72, 288 0x80, 0xe0, 0x3c, 0x72,
279 0xa0, 0xe0, 0x64, 0x72, 289 0xa0, 0xe0, 0x78, 0x72,
280 0xc0, 0xe0, 0x5a, 0x72, 290 0xc0, 0xe0, 0x6e, 0x72,
281 0xe0, 0xe0, 0x94, 0x72, 291 0xe0, 0xe0, 0xa8, 0x72,
282 0x01, 0xea, 0x64, 0x59, 292 0x01, 0xea, 0x6e, 0x59,
283 0x01, 0xea, 0x04, 0x00, 293 0x01, 0xea, 0x04, 0x00,
284 0x00, 0xe2, 0x14, 0x42, 294 0x00, 0xe2, 0x28, 0x42,
285 0x80, 0x39, 0x2f, 0x7a, 295 0x80, 0x39, 0x43, 0x7a,
286 0x03, 0xea, 0x64, 0x59, 296 0x03, 0xea, 0x6e, 0x59,
287 0x03, 0xea, 0x04, 0x00, 297 0x03, 0xea, 0x04, 0x00,
288 0xee, 0x00, 0x36, 0x6a, 298 0xee, 0x00, 0x4a, 0x6a,
289 0x05, 0xea, 0xb4, 0x00, 299 0x05, 0xea, 0xb4, 0x00,
290 0x33, 0xea, 0x5e, 0x59, 300 0x33, 0xea, 0x68, 0x59,
291 0x33, 0xea, 0x00, 0x00, 301 0x33, 0xea, 0x00, 0x00,
292 0x02, 0xa8, 0x9c, 0x32, 302 0x02, 0xa8, 0x9c, 0x32,
293 0x00, 0xe2, 0x7e, 0x59, 303 0x00, 0xe2, 0x88, 0x59,
294 0xef, 0x96, 0xd5, 0x19, 304 0xef, 0x96, 0xd5, 0x19,
295 0x00, 0xe2, 0x46, 0x52, 305 0x00, 0xe2, 0x5a, 0x52,
296 0x09, 0x80, 0xe1, 0x30, 306 0x09, 0x80, 0xe1, 0x30,
297 0x02, 0xea, 0x36, 0x00, 307 0x02, 0xea, 0x36, 0x00,
298 0xa8, 0xea, 0x32, 0x00, 308 0xa8, 0xea, 0x32, 0x00,
299 0x00, 0xe2, 0x4c, 0x42, 309 0x00, 0xe2, 0x60, 0x42,
300 0x01, 0x96, 0xd1, 0x30, 310 0x01, 0x96, 0xd1, 0x30,
301 0x10, 0x80, 0x89, 0x31, 311 0x10, 0x80, 0x89, 0x31,
302 0x20, 0xea, 0x32, 0x00, 312 0x20, 0xea, 0x32, 0x00,
303 0xbf, 0x39, 0x73, 0x0a, 313 0xbf, 0x39, 0x73, 0x0a,
304 0x10, 0x4c, 0x56, 0x6a, 314 0x10, 0x4c, 0x6a, 0x6a,
305 0x20, 0x19, 0x4e, 0x6a, 315 0x20, 0x19, 0x62, 0x6a,
306 0x20, 0x19, 0x52, 0x6a, 316 0x20, 0x19, 0x66, 0x6a,
307 0x02, 0x4d, 0x14, 0x6a, 317 0x02, 0x4d, 0x28, 0x6a,
308 0x40, 0x39, 0x73, 0x02, 318 0x40, 0x39, 0x73, 0x02,
309 0x00, 0xe2, 0x14, 0x42, 319 0x00, 0xe2, 0x28, 0x42,
310 0x80, 0x39, 0xd5, 0x6a, 320 0x80, 0x39, 0xe9, 0x6a,
311 0x01, 0x44, 0x10, 0x33, 321 0x01, 0x44, 0x10, 0x33,
312 0x08, 0x92, 0x25, 0x03, 322 0x08, 0x92, 0x25, 0x03,
313 0x00, 0xe2, 0x14, 0x42, 323 0x00, 0xe2, 0x28, 0x42,
314 0x10, 0xea, 0x80, 0x00, 324 0x10, 0xea, 0x80, 0x00,
315 0x01, 0x37, 0xc5, 0x31, 325 0x01, 0x37, 0xc5, 0x31,
316 0x80, 0xe2, 0x80, 0x62, 326 0x80, 0xe2, 0x94, 0x62,
317 0x10, 0x92, 0xa5, 0x6a, 327 0x10, 0x92, 0xb9, 0x6a,
318 0xc0, 0x94, 0xc5, 0x01, 328 0xc0, 0x94, 0xc5, 0x01,
319 0x40, 0x92, 0x71, 0x6a, 329 0x40, 0x92, 0x85, 0x6a,
320 0xbf, 0xe2, 0xc4, 0x09, 330 0xbf, 0xe2, 0xc4, 0x09,
321 0x20, 0x92, 0x85, 0x7a, 331 0x20, 0x92, 0x99, 0x7a,
322 0x01, 0xe2, 0x88, 0x30, 332 0x01, 0xe2, 0x88, 0x30,
323 0x00, 0xe2, 0xe2, 0x5b, 333 0x00, 0xe2, 0xf6, 0x5b,
324 0xa0, 0x3c, 0x8d, 0x62, 334 0xa0, 0x3c, 0xa1, 0x62,
325 0x23, 0x92, 0x89, 0x08, 335 0x23, 0x92, 0x89, 0x08,
326 0x00, 0xe2, 0xe2, 0x5b, 336 0x00, 0xe2, 0xf6, 0x5b,
327 0xa0, 0x3c, 0x8d, 0x62, 337 0xa0, 0x3c, 0xa1, 0x62,
328 0x00, 0xa8, 0x84, 0x42, 338 0x00, 0xa8, 0x98, 0x42,
329 0xff, 0xe2, 0x84, 0x62, 339 0xff, 0xe2, 0x98, 0x62,
330 0x00, 0xe2, 0xa4, 0x42, 340 0x00, 0xe2, 0xb8, 0x42,
331 0x40, 0xea, 0x98, 0x00, 341 0x40, 0xea, 0x98, 0x00,
332 0x01, 0xe2, 0x88, 0x30, 342 0x01, 0xe2, 0x88, 0x30,
333 0x00, 0xe2, 0xe2, 0x5b, 343 0x00, 0xe2, 0xf6, 0x5b,
334 0xa0, 0x3c, 0x63, 0x72, 344 0xa0, 0x3c, 0x77, 0x72,
335 0x40, 0xea, 0x98, 0x00, 345 0x40, 0xea, 0x98, 0x00,
336 0x01, 0x37, 0x95, 0x32, 346 0x01, 0x37, 0x95, 0x32,
337 0x08, 0xea, 0x6e, 0x02, 347 0x08, 0xea, 0x6e, 0x02,
338 0x00, 0xe2, 0x14, 0x42, 348 0x00, 0xe2, 0x28, 0x42,
339 0xe0, 0xea, 0xfe, 0x5b, 349 0xe0, 0xea, 0x12, 0x5c,
340 0x80, 0xe0, 0xe0, 0x6a, 350 0x80, 0xe0, 0xf4, 0x6a,
341 0x04, 0xe0, 0x92, 0x73, 351 0x04, 0xe0, 0xa6, 0x73,
342 0x02, 0xe0, 0xc4, 0x73, 352 0x02, 0xe0, 0xd8, 0x73,
343 0x00, 0xea, 0x3e, 0x73, 353 0x00, 0xea, 0x52, 0x73,
344 0x03, 0xe0, 0xd4, 0x73, 354 0x03, 0xe0, 0xe8, 0x73,
345 0x23, 0xe0, 0xb6, 0x72, 355 0x23, 0xe0, 0xca, 0x72,
346 0x08, 0xe0, 0xdc, 0x72, 356 0x08, 0xe0, 0xf0, 0x72,
347 0x00, 0xe2, 0xe2, 0x5b, 357 0x00, 0xe2, 0xf6, 0x5b,
348 0x07, 0xea, 0x64, 0x59, 358 0x07, 0xea, 0x6e, 0x59,
349 0x07, 0xea, 0x04, 0x00, 359 0x07, 0xea, 0x04, 0x00,
350 0x08, 0x48, 0x15, 0x72, 360 0x08, 0x48, 0x29, 0x72,
351 0x04, 0x48, 0xb3, 0x62, 361 0x04, 0x48, 0xc7, 0x62,
352 0x01, 0x49, 0x89, 0x30, 362 0x01, 0x49, 0x89, 0x30,
353 0x00, 0xe2, 0xa4, 0x42, 363 0x00, 0xe2, 0xb8, 0x42,
354 0x01, 0x44, 0xd4, 0x31, 364 0x01, 0x44, 0xd4, 0x31,
355 0x00, 0xe2, 0xa4, 0x42, 365 0x00, 0xe2, 0xb8, 0x42,
356 0x01, 0x00, 0x6c, 0x32, 366 0x01, 0x00, 0x6c, 0x32,
357 0x33, 0xea, 0x5e, 0x59, 367 0x33, 0xea, 0x68, 0x59,
358 0x33, 0xea, 0x00, 0x00, 368 0x33, 0xea, 0x00, 0x00,
359 0x4c, 0x3a, 0xc1, 0x28, 369 0x4c, 0x3a, 0xc1, 0x28,
360 0x01, 0x64, 0xc0, 0x31, 370 0x01, 0x64, 0xc0, 0x31,
361 0x00, 0x36, 0x5f, 0x59, 371 0x00, 0x36, 0x69, 0x59,
362 0x01, 0x36, 0x01, 0x30, 372 0x01, 0x36, 0x01, 0x30,
363 0x01, 0xe0, 0xda, 0x7a, 373 0x01, 0xe0, 0xee, 0x7a,
364 0xa0, 0xea, 0xf4, 0x5b, 374 0xa0, 0xea, 0x08, 0x5c,
365 0x01, 0xa0, 0xda, 0x62, 375 0x01, 0xa0, 0xee, 0x62,
366 0x01, 0x84, 0xcf, 0x7a, 376 0x01, 0x84, 0xe3, 0x7a,
367 0x01, 0x95, 0xdd, 0x6a, 377 0x01, 0x95, 0xf1, 0x6a,
368 0x05, 0xea, 0x64, 0x59, 378 0x05, 0xea, 0x6e, 0x59,
369 0x05, 0xea, 0x04, 0x00, 379 0x05, 0xea, 0x04, 0x00,
370 0x00, 0xe2, 0xdc, 0x42, 380 0x00, 0xe2, 0xf0, 0x42,
371 0x03, 0xea, 0x64, 0x59, 381 0x03, 0xea, 0x6e, 0x59,
372 0x03, 0xea, 0x04, 0x00, 382 0x03, 0xea, 0x04, 0x00,
373 0x00, 0xe2, 0xdc, 0x42, 383 0x00, 0xe2, 0xf0, 0x42,
374 0x07, 0xea, 0x06, 0x5c, 384 0x07, 0xea, 0x1a, 0x5c,
375 0x01, 0x44, 0xd4, 0x31, 385 0x01, 0x44, 0xd4, 0x31,
376 0x00, 0xe2, 0x14, 0x42, 386 0x00, 0xe2, 0x28, 0x42,
377 0x3f, 0xe0, 0x76, 0x0a, 387 0x3f, 0xe0, 0x76, 0x0a,
378 0xc0, 0x3a, 0xc1, 0x09, 388 0xc0, 0x3a, 0xc1, 0x09,
379 0x00, 0x3b, 0x51, 0x01, 389 0x00, 0x3b, 0x51, 0x01,
@@ -384,54 +394,54 @@ static uint8_t seqprog[] = {
384 0x01, 0xea, 0xc6, 0x01, 394 0x01, 0xea, 0xc6, 0x01,
385 0x02, 0xe2, 0xc8, 0x31, 395 0x02, 0xe2, 0xc8, 0x31,
386 0x02, 0xec, 0x40, 0x31, 396 0x02, 0xec, 0x40, 0x31,
387 0xff, 0xa1, 0xfc, 0x72, 397 0xff, 0xa1, 0x10, 0x73,
388 0x02, 0xe8, 0xda, 0x31, 398 0x02, 0xe8, 0xda, 0x31,
389 0x02, 0xa0, 0x50, 0x31, 399 0x02, 0xa0, 0x50, 0x31,
390 0x00, 0xe2, 0x1e, 0x43, 400 0x00, 0xe2, 0x32, 0x43,
391 0x80, 0x39, 0x73, 0x02, 401 0x80, 0x39, 0x73, 0x02,
392 0x01, 0x44, 0xd4, 0x31, 402 0x01, 0x44, 0xd4, 0x31,
393 0x00, 0xe2, 0xe2, 0x5b, 403 0x00, 0xe2, 0xf6, 0x5b,
394 0x01, 0x39, 0x73, 0x02, 404 0x01, 0x39, 0x73, 0x02,
395 0xe0, 0x3c, 0x39, 0x63, 405 0xe0, 0x3c, 0x4d, 0x63,
396 0x02, 0x39, 0x73, 0x02, 406 0x02, 0x39, 0x73, 0x02,
397 0x20, 0x46, 0x32, 0x63, 407 0x20, 0x46, 0x46, 0x63,
398 0xff, 0xea, 0x52, 0x09, 408 0xff, 0xea, 0x52, 0x09,
399 0xa8, 0xea, 0xf4, 0x5b, 409 0xa8, 0xea, 0x08, 0x5c,
400 0x04, 0x92, 0x19, 0x7b, 410 0x04, 0x92, 0x2d, 0x7b,
401 0x01, 0x3a, 0xc1, 0x31, 411 0x01, 0x3a, 0xc1, 0x31,
402 0x00, 0x93, 0x19, 0x63, 412 0x00, 0x93, 0x2d, 0x63,
403 0x01, 0x3b, 0xc1, 0x31, 413 0x01, 0x3b, 0xc1, 0x31,
404 0x00, 0x94, 0x23, 0x73, 414 0x00, 0x94, 0x37, 0x73,
405 0x01, 0xa9, 0x52, 0x11, 415 0x01, 0xa9, 0x52, 0x11,
406 0xff, 0xa9, 0x0e, 0x6b, 416 0xff, 0xa9, 0x22, 0x6b,
407 0x00, 0xe2, 0x32, 0x43, 417 0x00, 0xe2, 0x46, 0x43,
408 0x10, 0x39, 0x73, 0x02, 418 0x10, 0x39, 0x73, 0x02,
409 0x04, 0x92, 0x33, 0x7b, 419 0x04, 0x92, 0x47, 0x7b,
410 0xfb, 0x92, 0x25, 0x0b, 420 0xfb, 0x92, 0x25, 0x0b,
411 0xff, 0xea, 0x72, 0x0a, 421 0xff, 0xea, 0x72, 0x0a,
412 0x01, 0xa4, 0x2d, 0x6b, 422 0x01, 0xa4, 0x41, 0x6b,
413 0x02, 0xa8, 0x9c, 0x32, 423 0x02, 0xa8, 0x9c, 0x32,
414 0x00, 0xe2, 0x7e, 0x59, 424 0x00, 0xe2, 0x88, 0x59,
415 0x10, 0x92, 0xdd, 0x7a, 425 0x10, 0x92, 0xf1, 0x7a,
416 0xff, 0xea, 0x06, 0x5c, 426 0xff, 0xea, 0x1a, 0x5c,
417 0x00, 0xe2, 0xdc, 0x42, 427 0x00, 0xe2, 0xf0, 0x42,
418 0x04, 0xea, 0x64, 0x59, 428 0x04, 0xea, 0x6e, 0x59,
419 0x04, 0xea, 0x04, 0x00, 429 0x04, 0xea, 0x04, 0x00,
420 0x00, 0xe2, 0xdc, 0x42, 430 0x00, 0xe2, 0xf0, 0x42,
421 0x04, 0xea, 0x64, 0x59, 431 0x04, 0xea, 0x6e, 0x59,
422 0x04, 0xea, 0x04, 0x00, 432 0x04, 0xea, 0x04, 0x00,
423 0x00, 0xe2, 0x14, 0x42, 433 0x00, 0xe2, 0x28, 0x42,
424 0x08, 0x92, 0xd5, 0x7a, 434 0x08, 0x92, 0xe9, 0x7a,
425 0xc0, 0x39, 0x49, 0x7b, 435 0xc0, 0x39, 0x5d, 0x7b,
426 0x80, 0x39, 0xd5, 0x6a, 436 0x80, 0x39, 0xe9, 0x6a,
427 0xff, 0x88, 0x49, 0x6b, 437 0xff, 0x88, 0x5d, 0x6b,
428 0x40, 0x39, 0xd5, 0x6a, 438 0x40, 0x39, 0xe9, 0x6a,
429 0x10, 0x92, 0x4f, 0x7b, 439 0x10, 0x92, 0x63, 0x7b,
430 0x0a, 0xea, 0x64, 0x59, 440 0x0a, 0xea, 0x6e, 0x59,
431 0x0a, 0xea, 0x04, 0x00, 441 0x0a, 0xea, 0x04, 0x00,
432 0x00, 0xe2, 0x6e, 0x5b, 442 0x00, 0xe2, 0x82, 0x5b,
433 0x00, 0xe2, 0xae, 0x43, 443 0x00, 0xe2, 0xc2, 0x43,
434 0x50, 0x4b, 0x56, 0x6b, 444 0x50, 0x4b, 0x6a, 0x6b,
435 0xbf, 0x3a, 0x74, 0x08, 445 0xbf, 0x3a, 0x74, 0x08,
436 0x01, 0xe0, 0xf4, 0x31, 446 0x01, 0xe0, 0xf4, 0x31,
437 0xff, 0xea, 0xc0, 0x09, 447 0xff, 0xea, 0xc0, 0x09,
@@ -441,31 +451,31 @@ static uint8_t seqprog[] = {
441 0x01, 0xfa, 0xc0, 0x35, 451 0x01, 0xfa, 0xc0, 0x35,
442 0x02, 0xa8, 0x90, 0x32, 452 0x02, 0xa8, 0x90, 0x32,
443 0x02, 0xea, 0xb4, 0x00, 453 0x02, 0xea, 0xb4, 0x00,
444 0x33, 0xea, 0x5e, 0x59, 454 0x33, 0xea, 0x68, 0x59,
445 0x33, 0xea, 0x00, 0x00, 455 0x33, 0xea, 0x00, 0x00,
446 0x02, 0x48, 0x51, 0x31, 456 0x02, 0x48, 0x51, 0x31,
447 0xff, 0x90, 0x85, 0x68, 457 0xff, 0x90, 0x85, 0x68,
448 0xff, 0x88, 0x7b, 0x6b, 458 0xff, 0x88, 0x8f, 0x6b,
449 0x01, 0xa4, 0x77, 0x6b, 459 0x01, 0xa4, 0x8b, 0x6b,
450 0x02, 0xa4, 0x7f, 0x6b, 460 0x02, 0xa4, 0x93, 0x6b,
451 0x01, 0x84, 0x7f, 0x7b, 461 0x01, 0x84, 0x93, 0x7b,
452 0x02, 0x28, 0x19, 0x33, 462 0x02, 0x28, 0x19, 0x33,
453 0x02, 0xa8, 0x50, 0x36, 463 0x02, 0xa8, 0x50, 0x36,
454 0xff, 0x88, 0x7f, 0x73, 464 0xff, 0x88, 0x93, 0x73,
455 0x00, 0xe2, 0x52, 0x5b, 465 0x00, 0xe2, 0x66, 0x5b,
456 0x02, 0xa8, 0x20, 0x33, 466 0x02, 0xa8, 0x20, 0x33,
457 0x04, 0xa4, 0x49, 0x03, 467 0x04, 0xa4, 0x49, 0x03,
458 0xff, 0xea, 0x1a, 0x03, 468 0xff, 0xea, 0x1a, 0x03,
459 0xff, 0x2d, 0x8b, 0x63, 469 0xff, 0x2d, 0x9f, 0x63,
460 0x02, 0xa8, 0x58, 0x32, 470 0x02, 0xa8, 0x58, 0x32,
461 0x02, 0xa8, 0x5c, 0x36, 471 0x02, 0xa8, 0x5c, 0x36,
462 0x02, 0xa8, 0x40, 0x31, 472 0x02, 0xa8, 0x40, 0x31,
463 0x02, 0x2e, 0x51, 0x31, 473 0x02, 0x2e, 0x51, 0x31,
464 0x02, 0xa0, 0x18, 0x33, 474 0x02, 0xa0, 0x18, 0x33,
465 0x02, 0xa0, 0x5c, 0x36, 475 0x02, 0xa0, 0x5c, 0x36,
466 0xc0, 0x39, 0xd5, 0x6a, 476 0xc0, 0x39, 0xe9, 0x6a,
467 0x04, 0x92, 0x25, 0x03, 477 0x04, 0x92, 0x25, 0x03,
468 0x20, 0x92, 0xaf, 0x6b, 478 0x20, 0x92, 0xc3, 0x6b,
469 0x02, 0xa8, 0x40, 0x31, 479 0x02, 0xa8, 0x40, 0x31,
470 0xc0, 0x3a, 0xc1, 0x09, 480 0xc0, 0x3a, 0xc1, 0x09,
471 0x00, 0x3b, 0x51, 0x01, 481 0x00, 0x3b, 0x51, 0x01,
@@ -480,60 +490,60 @@ static uint8_t seqprog[] = {
480 0xf7, 0x57, 0xae, 0x08, 490 0xf7, 0x57, 0xae, 0x08,
481 0x08, 0xea, 0x98, 0x00, 491 0x08, 0xea, 0x98, 0x00,
482 0x01, 0x44, 0xd4, 0x31, 492 0x01, 0x44, 0xd4, 0x31,
483 0xee, 0x00, 0xb8, 0x6b, 493 0xee, 0x00, 0xcc, 0x6b,
484 0x02, 0xea, 0xb4, 0x00, 494 0x02, 0xea, 0xb4, 0x00,
485 0xc0, 0xea, 0x72, 0x02, 495 0xc0, 0xea, 0x72, 0x02,
486 0x09, 0x4c, 0xba, 0x7b, 496 0x09, 0x4c, 0xce, 0x7b,
487 0x01, 0xea, 0x78, 0x02, 497 0x01, 0xea, 0x78, 0x02,
488 0x08, 0x4c, 0x06, 0x68, 498 0x08, 0x4c, 0x06, 0x68,
489 0x0b, 0xea, 0x64, 0x59, 499 0x0b, 0xea, 0x6e, 0x59,
490 0x0b, 0xea, 0x04, 0x00, 500 0x0b, 0xea, 0x04, 0x00,
491 0x01, 0x44, 0xd4, 0x31, 501 0x01, 0x44, 0xd4, 0x31,
492 0x20, 0x39, 0x15, 0x7a, 502 0x20, 0x39, 0x29, 0x7a,
493 0x00, 0xe2, 0xcc, 0x5b, 503 0x00, 0xe2, 0xe0, 0x5b,
494 0x00, 0xe2, 0x14, 0x42, 504 0x00, 0xe2, 0x28, 0x42,
495 0x01, 0x84, 0xd1, 0x7b, 505 0x01, 0x84, 0xe5, 0x7b,
496 0x01, 0xa4, 0x49, 0x07, 506 0x01, 0xa4, 0x49, 0x07,
497 0x08, 0x60, 0x30, 0x33, 507 0x08, 0x60, 0x30, 0x33,
498 0x08, 0x80, 0x41, 0x37, 508 0x08, 0x80, 0x41, 0x37,
499 0xdf, 0x39, 0x73, 0x0a, 509 0xdf, 0x39, 0x73, 0x0a,
500 0xee, 0x00, 0xde, 0x6b, 510 0xee, 0x00, 0xf2, 0x6b,
501 0x05, 0xea, 0xb4, 0x00, 511 0x05, 0xea, 0xb4, 0x00,
502 0x33, 0xea, 0x5e, 0x59, 512 0x33, 0xea, 0x68, 0x59,
503 0x33, 0xea, 0x00, 0x00, 513 0x33, 0xea, 0x00, 0x00,
504 0x00, 0xe2, 0x7e, 0x59, 514 0x00, 0xe2, 0x88, 0x59,
505 0x00, 0xe2, 0xdc, 0x42, 515 0x00, 0xe2, 0xf0, 0x42,
506 0xff, 0x42, 0xee, 0x6b, 516 0xff, 0x42, 0x02, 0x6c,
507 0x01, 0x41, 0xe2, 0x6b, 517 0x01, 0x41, 0xf6, 0x6b,
508 0x02, 0x41, 0xe2, 0x7b, 518 0x02, 0x41, 0xf6, 0x7b,
509 0xff, 0x42, 0xee, 0x6b, 519 0xff, 0x42, 0x02, 0x6c,
510 0x01, 0x41, 0xe2, 0x6b, 520 0x01, 0x41, 0xf6, 0x6b,
511 0x02, 0x41, 0xe2, 0x7b, 521 0x02, 0x41, 0xf6, 0x7b,
512 0xff, 0x42, 0xee, 0x7b, 522 0xff, 0x42, 0x02, 0x7c,
513 0x04, 0x4c, 0xe2, 0x6b, 523 0x04, 0x4c, 0xf6, 0x6b,
514 0xe0, 0x41, 0x78, 0x0e, 524 0xe0, 0x41, 0x78, 0x0e,
515 0x01, 0x44, 0xd4, 0x31, 525 0x01, 0x44, 0xd4, 0x31,
516 0xff, 0x42, 0xf6, 0x7b, 526 0xff, 0x42, 0x0a, 0x7c,
517 0x04, 0x4c, 0xf6, 0x6b, 527 0x04, 0x4c, 0x0a, 0x6c,
518 0xe0, 0x41, 0x78, 0x0a, 528 0xe0, 0x41, 0x78, 0x0a,
519 0xe0, 0x3c, 0x15, 0x62, 529 0xe0, 0x3c, 0x29, 0x62,
520 0xff, 0xea, 0xca, 0x09, 530 0xff, 0xea, 0xca, 0x09,
521 0x01, 0xe2, 0xc8, 0x31, 531 0x01, 0xe2, 0xc8, 0x31,
522 0x01, 0x46, 0xda, 0x35, 532 0x01, 0x46, 0xda, 0x35,
523 0x01, 0x44, 0xd4, 0x35, 533 0x01, 0x44, 0xd4, 0x35,
524 0x10, 0xea, 0x80, 0x00, 534 0x10, 0xea, 0x80, 0x00,
525 0x01, 0xe2, 0x6e, 0x36, 535 0x01, 0xe2, 0x6e, 0x36,
526 0x04, 0xa6, 0x0e, 0x7c, 536 0x04, 0xa6, 0x22, 0x7c,
527 0xff, 0xea, 0x5a, 0x09, 537 0xff, 0xea, 0x5a, 0x09,
528 0xff, 0xea, 0x4c, 0x0d, 538 0xff, 0xea, 0x4c, 0x0d,
529 0x01, 0xa6, 0x3a, 0x6c, 539 0x01, 0xa6, 0x4e, 0x6c,
530 0x10, 0xad, 0x84, 0x78, 540 0x10, 0xad, 0x84, 0x78,
531 0x80, 0xad, 0x32, 0x6c, 541 0x80, 0xad, 0x46, 0x6c,
532 0x08, 0xad, 0x84, 0x68, 542 0x08, 0xad, 0x84, 0x68,
533 0x20, 0x19, 0x26, 0x7c, 543 0x20, 0x19, 0x3a, 0x7c,
534 0x80, 0xea, 0xb2, 0x01, 544 0x80, 0xea, 0xb2, 0x01,
535 0x11, 0x00, 0x00, 0x10, 545 0x11, 0x00, 0x00, 0x10,
536 0x02, 0xa6, 0x22, 0x7c, 546 0x02, 0xa6, 0x36, 0x7c,
537 0xff, 0xea, 0xb2, 0x0d, 547 0xff, 0xea, 0xb2, 0x0d,
538 0x11, 0x00, 0x00, 0x10, 548 0x11, 0x00, 0x00, 0x10,
539 0xff, 0xea, 0xb2, 0x09, 549 0xff, 0xea, 0xb2, 0x09,
@@ -561,7 +571,7 @@ static uint8_t seqprog[] = {
561 0x00, 0x86, 0x0d, 0x23, 571 0x00, 0x86, 0x0d, 0x23,
562 0x00, 0x87, 0x0f, 0x23, 572 0x00, 0x87, 0x0f, 0x23,
563 0x01, 0x84, 0xc5, 0x31, 573 0x01, 0x84, 0xc5, 0x31,
564 0x80, 0x83, 0x5d, 0x7c, 574 0x80, 0x83, 0x71, 0x7c,
565 0x02, 0xe2, 0xc4, 0x01, 575 0x02, 0xe2, 0xc4, 0x01,
566 0xff, 0xea, 0x4c, 0x09, 576 0xff, 0xea, 0x4c, 0x09,
567 0x01, 0xe2, 0x36, 0x30, 577 0x01, 0xe2, 0x36, 0x30,
@@ -572,75 +582,75 @@ static uint8_t seqprog[] = {
572 0xfe, 0xa6, 0x4c, 0x0d, 582 0xfe, 0xa6, 0x4c, 0x0d,
573 0x0b, 0x98, 0xe1, 0x30, 583 0x0b, 0x98, 0xe1, 0x30,
574 0xfd, 0xa4, 0x49, 0x09, 584 0xfd, 0xa4, 0x49, 0x09,
575 0x80, 0xa3, 0x71, 0x7c, 585 0x80, 0xa3, 0x85, 0x7c,
576 0x02, 0xa4, 0x48, 0x01, 586 0x02, 0xa4, 0x48, 0x01,
577 0x01, 0xa4, 0x36, 0x30, 587 0x01, 0xa4, 0x36, 0x30,
578 0xa8, 0xea, 0x32, 0x00, 588 0xa8, 0xea, 0x32, 0x00,
579 0xfd, 0xa4, 0x49, 0x0b, 589 0xfd, 0xa4, 0x49, 0x0b,
580 0x05, 0xa3, 0x07, 0x33, 590 0x05, 0xa3, 0x07, 0x33,
581 0x80, 0x83, 0x7d, 0x6c, 591 0x80, 0x83, 0x91, 0x6c,
582 0x02, 0xea, 0x4c, 0x05, 592 0x02, 0xea, 0x4c, 0x05,
583 0xff, 0xea, 0x4c, 0x0d, 593 0xff, 0xea, 0x4c, 0x0d,
584 0x00, 0xe2, 0x56, 0x59, 594 0x00, 0xe2, 0x60, 0x59,
585 0x02, 0xa6, 0x10, 0x6c, 595 0x02, 0xa6, 0x24, 0x6c,
586 0x80, 0xf9, 0xf2, 0x05, 596 0x80, 0xf9, 0xf2, 0x05,
587 0xc0, 0x39, 0x8b, 0x7c, 597 0xc0, 0x39, 0x9f, 0x7c,
588 0x03, 0xea, 0x64, 0x59, 598 0x03, 0xea, 0x6e, 0x59,
589 0x03, 0xea, 0x04, 0x00, 599 0x03, 0xea, 0x04, 0x00,
590 0x20, 0x39, 0xaf, 0x7c, 600 0x20, 0x39, 0xc3, 0x7c,
591 0x01, 0x84, 0x95, 0x6c, 601 0x01, 0x84, 0xa9, 0x6c,
592 0x06, 0xea, 0x64, 0x59, 602 0x06, 0xea, 0x6e, 0x59,
593 0x06, 0xea, 0x04, 0x00, 603 0x06, 0xea, 0x04, 0x00,
594 0x00, 0xe2, 0xb2, 0x44, 604 0x00, 0xe2, 0xc6, 0x44,
595 0x01, 0x00, 0x6c, 0x32, 605 0x01, 0x00, 0x6c, 0x32,
596 0xee, 0x00, 0x9e, 0x6c, 606 0xee, 0x00, 0xb2, 0x6c,
597 0x05, 0xea, 0xb4, 0x00, 607 0x05, 0xea, 0xb4, 0x00,
598 0x33, 0xea, 0x5e, 0x59, 608 0x33, 0xea, 0x68, 0x59,
599 0x33, 0xea, 0x00, 0x00, 609 0x33, 0xea, 0x00, 0x00,
600 0x80, 0x3d, 0x7a, 0x00, 610 0x80, 0x3d, 0x7a, 0x00,
601 0xfc, 0x42, 0xa0, 0x7c, 611 0xfc, 0x42, 0xb4, 0x7c,
602 0x7f, 0x3d, 0x7a, 0x08, 612 0x7f, 0x3d, 0x7a, 0x08,
603 0x00, 0x36, 0x5f, 0x59, 613 0x00, 0x36, 0x69, 0x59,
604 0x01, 0x36, 0x01, 0x30, 614 0x01, 0x36, 0x01, 0x30,
605 0x09, 0xea, 0x64, 0x59, 615 0x09, 0xea, 0x6e, 0x59,
606 0x09, 0xea, 0x04, 0x00, 616 0x09, 0xea, 0x04, 0x00,
607 0x00, 0xe2, 0x14, 0x42, 617 0x00, 0xe2, 0x28, 0x42,
608 0x01, 0xa4, 0x95, 0x6c, 618 0x01, 0xa4, 0xa9, 0x6c,
609 0x00, 0xe2, 0x68, 0x5c, 619 0x00, 0xe2, 0x7c, 0x5c,
610 0x20, 0x39, 0x73, 0x02, 620 0x20, 0x39, 0x73, 0x02,
611 0x01, 0x00, 0x6c, 0x32, 621 0x01, 0x00, 0x6c, 0x32,
612 0x02, 0xa6, 0xba, 0x7c, 622 0x02, 0xa6, 0xce, 0x7c,
613 0x00, 0xe2, 0x7e, 0x5c, 623 0x00, 0xe2, 0x92, 0x5c,
614 0x00, 0xe2, 0x76, 0x58, 624 0x00, 0xe2, 0x76, 0x58,
615 0x00, 0xe2, 0x86, 0x58, 625 0x00, 0xe2, 0x86, 0x58,
616 0x00, 0xe2, 0x5a, 0x58, 626 0x00, 0xe2, 0x5a, 0x58,
617 0x00, 0x36, 0x5f, 0x59, 627 0x00, 0x36, 0x69, 0x59,
618 0x01, 0x36, 0x01, 0x30, 628 0x01, 0x36, 0x01, 0x30,
619 0x20, 0x19, 0xba, 0x6c, 629 0x20, 0x19, 0xce, 0x6c,
620 0x00, 0xe2, 0xea, 0x5c, 630 0x00, 0xe2, 0xfe, 0x5c,
621 0x04, 0x19, 0xd4, 0x6c, 631 0x04, 0x19, 0xe8, 0x6c,
622 0x02, 0x19, 0x32, 0x00, 632 0x02, 0x19, 0x32, 0x00,
623 0x01, 0x84, 0xd5, 0x7c, 633 0x01, 0x84, 0xe9, 0x7c,
624 0x01, 0x1b, 0xce, 0x7c, 634 0x01, 0x1b, 0xe2, 0x7c,
625 0x01, 0x1a, 0xd4, 0x6c, 635 0x01, 0x1a, 0xe8, 0x6c,
626 0x00, 0xe2, 0x84, 0x44, 636 0x00, 0xe2, 0x98, 0x44,
627 0x80, 0x4b, 0xda, 0x6c, 637 0x80, 0x4b, 0xee, 0x6c,
628 0x01, 0x4c, 0xd6, 0x7c, 638 0x01, 0x4c, 0xea, 0x7c,
629 0x03, 0x42, 0x84, 0x6c, 639 0x03, 0x42, 0x98, 0x6c,
630 0x00, 0xe2, 0x0a, 0x5c, 640 0x00, 0xe2, 0x1e, 0x5c,
631 0x80, 0xf9, 0xf2, 0x01, 641 0x80, 0xf9, 0xf2, 0x01,
632 0x04, 0x39, 0x15, 0x7a, 642 0x04, 0x39, 0x29, 0x7a,
633 0x00, 0xe2, 0x14, 0x42, 643 0x00, 0xe2, 0x28, 0x42,
634 0x08, 0x5d, 0xf2, 0x6c, 644 0x08, 0x5d, 0x06, 0x6d,
635 0x00, 0xe2, 0x76, 0x58, 645 0x00, 0xe2, 0x76, 0x58,
636 0x00, 0x36, 0x5f, 0x59, 646 0x00, 0x36, 0x69, 0x59,
637 0x01, 0x36, 0x01, 0x30, 647 0x01, 0x36, 0x01, 0x30,
638 0x02, 0x1b, 0xe2, 0x7c, 648 0x02, 0x1b, 0xf6, 0x7c,
639 0x08, 0x5d, 0xf0, 0x7c, 649 0x08, 0x5d, 0x04, 0x7d,
640 0x03, 0x68, 0x00, 0x37, 650 0x03, 0x68, 0x00, 0x37,
641 0x01, 0x84, 0x09, 0x07, 651 0x01, 0x84, 0x09, 0x07,
642 0x80, 0x1b, 0xfc, 0x7c, 652 0x80, 0x1b, 0x10, 0x7d,
643 0x80, 0x84, 0xfd, 0x6c, 653 0x80, 0x84, 0x11, 0x6d,
644 0xff, 0x85, 0x0b, 0x1b, 654 0xff, 0x85, 0x0b, 0x1b,
645 0xff, 0x86, 0x0d, 0x23, 655 0xff, 0x86, 0x0d, 0x23,
646 0xff, 0x87, 0x0f, 0x23, 656 0xff, 0x87, 0x0f, 0x23,
@@ -652,161 +662,164 @@ static uint8_t seqprog[] = {
652 0xf9, 0xd9, 0xb2, 0x0d, 662 0xf9, 0xd9, 0xb2, 0x0d,
653 0x01, 0xd9, 0xb2, 0x05, 663 0x01, 0xd9, 0xb2, 0x05,
654 0x01, 0x52, 0x48, 0x31, 664 0x01, 0x52, 0x48, 0x31,
655 0x20, 0xa4, 0x26, 0x7d, 665 0x20, 0xa4, 0x3a, 0x7d,
656 0x20, 0x5b, 0x26, 0x7d, 666 0x20, 0x5b, 0x3a, 0x7d,
657 0x80, 0xf9, 0x34, 0x7d, 667 0x80, 0xf9, 0x48, 0x7d,
658 0x02, 0xea, 0xb4, 0x00, 668 0x02, 0xea, 0xb4, 0x00,
659 0x11, 0x00, 0x00, 0x10, 669 0x11, 0x00, 0x00, 0x10,
660 0x04, 0x19, 0x40, 0x7d, 670 0x04, 0x19, 0x54, 0x7d,
661 0xdf, 0x19, 0x32, 0x08, 671 0xdf, 0x19, 0x32, 0x08,
662 0x60, 0x5b, 0x40, 0x6d, 672 0x60, 0x5b, 0x54, 0x6d,
663 0x01, 0x4c, 0x1a, 0x7d, 673 0x01, 0x4c, 0x2e, 0x7d,
664 0x20, 0x19, 0x32, 0x00, 674 0x20, 0x19, 0x32, 0x00,
665 0x01, 0xd9, 0xb2, 0x05, 675 0x01, 0xd9, 0xb2, 0x05,
666 0x02, 0xea, 0xb4, 0x00, 676 0x02, 0xea, 0xb4, 0x00,
667 0x01, 0xd9, 0xb2, 0x05, 677 0x01, 0xd9, 0xb2, 0x05,
668 0x10, 0x5b, 0x38, 0x6d, 678 0x10, 0x5b, 0x4c, 0x6d,
669 0x08, 0x5b, 0x42, 0x6d, 679 0x08, 0x5b, 0x56, 0x6d,
670 0x20, 0x5b, 0x32, 0x6d, 680 0x20, 0x5b, 0x46, 0x6d,
671 0x02, 0x5b, 0x62, 0x6d, 681 0x02, 0x5b, 0x76, 0x6d,
672 0x0e, 0xea, 0x64, 0x59, 682 0x0e, 0xea, 0x6e, 0x59,
673 0x0e, 0xea, 0x04, 0x00, 683 0x0e, 0xea, 0x04, 0x00,
674 0x80, 0xf9, 0x22, 0x6d, 684 0x80, 0xf9, 0x36, 0x6d,
675 0xdf, 0x5c, 0xb8, 0x08, 685 0xdf, 0x5c, 0xb8, 0x08,
676 0x01, 0xd9, 0xb2, 0x05, 686 0x01, 0xd9, 0xb2, 0x05,
677 0x01, 0xa4, 0x1d, 0x6e, 687 0x01, 0xa4, 0x37, 0x6e,
678 0x00, 0xe2, 0x68, 0x5c, 688 0x00, 0xe2, 0x7c, 0x5c,
679 0x00, 0xe2, 0x6c, 0x5d, 689 0x00, 0xe2, 0x80, 0x5d,
680 0x01, 0x90, 0x21, 0x1b, 690 0x01, 0x90, 0x21, 0x1b,
681 0x01, 0xd9, 0xb2, 0x05, 691 0x01, 0xd9, 0xb2, 0x05,
682 0x00, 0xe2, 0x52, 0x5b, 692 0x00, 0xe2, 0x66, 0x5b,
683 0xf3, 0x96, 0xd5, 0x19, 693 0xf3, 0x96, 0xd5, 0x19,
684 0x00, 0xe2, 0x50, 0x55, 694 0x00, 0xe2, 0x64, 0x55,
685 0x80, 0x96, 0x51, 0x6d, 695 0x80, 0x96, 0x65, 0x6d,
686 0x0f, 0xea, 0x64, 0x59, 696 0x0f, 0xea, 0x6e, 0x59,
687 0x0f, 0xea, 0x04, 0x00, 697 0x0f, 0xea, 0x04, 0x00,
688 0x00, 0xe2, 0x58, 0x45, 698 0x00, 0xe2, 0x6c, 0x45,
689 0x04, 0x8c, 0xe1, 0x30, 699 0x04, 0x8c, 0xe1, 0x30,
690 0x01, 0xea, 0xf2, 0x00, 700 0x01, 0xea, 0xf2, 0x00,
691 0x02, 0xea, 0x36, 0x00, 701 0x02, 0xea, 0x36, 0x00,
692 0xa8, 0xea, 0x32, 0x00, 702 0xa8, 0xea, 0x32, 0x00,
693 0xff, 0x97, 0x5f, 0x7d, 703 0xff, 0x97, 0x73, 0x7d,
694 0x14, 0xea, 0x64, 0x59, 704 0x14, 0xea, 0x6e, 0x59,
695 0x14, 0xea, 0x04, 0x00, 705 0x14, 0xea, 0x04, 0x00,
696 0x00, 0xe2, 0xce, 0x5d, 706 0x00, 0xe2, 0xe2, 0x5d,
697 0x01, 0xd9, 0xb2, 0x05, 707 0x01, 0xd9, 0xb2, 0x05,
698 0x09, 0x80, 0xe1, 0x30, 708 0x09, 0x80, 0xe1, 0x30,
699 0x02, 0xea, 0x36, 0x00, 709 0x02, 0xea, 0x36, 0x00,
700 0xa8, 0xea, 0x32, 0x00, 710 0xa8, 0xea, 0x32, 0x00,
701 0x00, 0xe2, 0xc6, 0x5d, 711 0x00, 0xe2, 0xda, 0x5d,
702 0x01, 0xd9, 0xb2, 0x05, 712 0x01, 0xd9, 0xb2, 0x05,
703 0x02, 0xa6, 0x7c, 0x7d, 713 0x02, 0xa6, 0x90, 0x7d,
704 0x00, 0xe2, 0x56, 0x59, 714 0x00, 0xe2, 0x60, 0x59,
705 0x20, 0x5b, 0x8a, 0x6d, 715 0x20, 0x5b, 0x9e, 0x6d,
706 0xfc, 0x42, 0x76, 0x7d, 716 0xfc, 0x42, 0x8a, 0x7d,
707 0x10, 0x40, 0x78, 0x6d, 717 0x10, 0x40, 0x8c, 0x6d,
708 0x20, 0x4d, 0x7a, 0x7d, 718 0x20, 0x4d, 0x8e, 0x7d,
709 0x08, 0x5d, 0x8a, 0x6d, 719 0x08, 0x5d, 0x9e, 0x6d,
710 0x02, 0xa6, 0x10, 0x6c, 720 0x02, 0xa6, 0x24, 0x6c,
711 0x00, 0xe2, 0x56, 0x59, 721 0x00, 0xe2, 0x60, 0x59,
712 0x20, 0x5b, 0x8a, 0x6d, 722 0x20, 0x5b, 0x9e, 0x6d,
713 0x01, 0x1b, 0xaa, 0x6d, 723 0x01, 0x1b, 0xbe, 0x6d,
714 0xfc, 0x42, 0x86, 0x7d, 724 0xfc, 0x42, 0x9a, 0x7d,
715 0x10, 0x40, 0x88, 0x6d, 725 0x10, 0x40, 0x9c, 0x6d,
716 0x20, 0x4d, 0x84, 0x78, 726 0x20, 0x4d, 0x84, 0x78,
717 0x08, 0x5d, 0x84, 0x78, 727 0x08, 0x5d, 0x84, 0x78,
718 0x02, 0x19, 0x32, 0x00, 728 0x02, 0x19, 0x32, 0x00,
719 0x01, 0x5b, 0x40, 0x31, 729 0x01, 0x5b, 0x40, 0x31,
720 0x00, 0xe2, 0xea, 0x5c, 730 0x00, 0xe2, 0xfe, 0x5c,
721 0x00, 0xe2, 0xcc, 0x5b, 731 0x00, 0xe2, 0xe0, 0x5b,
722 0x20, 0xea, 0xb6, 0x00, 732 0x20, 0xea, 0xb6, 0x00,
723 0x00, 0xe2, 0x0a, 0x5c, 733 0x00, 0xe2, 0x1e, 0x5c,
724 0x20, 0x5c, 0xb8, 0x00, 734 0x20, 0x5c, 0xb8, 0x00,
725 0x04, 0x19, 0xa0, 0x6d, 735 0x04, 0x19, 0xb4, 0x6d,
726 0x01, 0x1a, 0xa0, 0x6d, 736 0x01, 0x1a, 0xb4, 0x6d,
727 0x00, 0xe2, 0x56, 0x59, 737 0x00, 0xe2, 0x60, 0x59,
728 0x01, 0x1a, 0x84, 0x78, 738 0x01, 0x1a, 0x84, 0x78,
729 0x80, 0xf9, 0xf2, 0x01, 739 0x80, 0xf9, 0xf2, 0x01,
730 0x20, 0xa0, 0x04, 0x7e, 740 0x20, 0xa0, 0x18, 0x7e,
731 0xff, 0x90, 0x21, 0x1b, 741 0xff, 0x90, 0x21, 0x1b,
732 0x08, 0x92, 0x63, 0x6b, 742 0x08, 0x92, 0x77, 0x6b,
733 0x02, 0xea, 0xb4, 0x04, 743 0x02, 0xea, 0xb4, 0x04,
734 0x01, 0xa4, 0x49, 0x03, 744 0x01, 0xa4, 0x49, 0x03,
735 0x40, 0x5b, 0xba, 0x6d, 745 0x40, 0x5b, 0xce, 0x6d,
736 0x00, 0xe2, 0x56, 0x59, 746 0x00, 0xe2, 0x60, 0x59,
737 0x40, 0x5b, 0xba, 0x6d, 747 0x40, 0x5b, 0xce, 0x6d,
738 0x04, 0x5d, 0x1e, 0x7e, 748 0x04, 0x5d, 0x38, 0x7e,
739 0x01, 0x1a, 0x1e, 0x7e, 749 0x01, 0x1a, 0x38, 0x7e,
740 0x20, 0x4d, 0x84, 0x78, 750 0x20, 0x4d, 0x84, 0x78,
741 0x40, 0x5b, 0x04, 0x7e, 751 0x40, 0x5b, 0x18, 0x7e,
742 0x04, 0x5d, 0x1e, 0x7e, 752 0x04, 0x5d, 0x38, 0x7e,
743 0x01, 0x1a, 0x1e, 0x7e, 753 0x01, 0x1a, 0x38, 0x7e,
744 0x80, 0xf9, 0xf2, 0x01, 754 0x80, 0xf9, 0xf2, 0x01,
745 0xff, 0x90, 0x21, 0x1b, 755 0xff, 0x90, 0x21, 0x1b,
746 0x08, 0x92, 0x63, 0x6b, 756 0x08, 0x92, 0x77, 0x6b,
747 0x02, 0xea, 0xb4, 0x04, 757 0x02, 0xea, 0xb4, 0x04,
748 0x00, 0xe2, 0x56, 0x59, 758 0x00, 0xe2, 0x60, 0x59,
749 0x01, 0x1b, 0x84, 0x78, 759 0x01, 0x1b, 0x84, 0x78,
750 0x80, 0xf9, 0xf2, 0x01, 760 0x80, 0xf9, 0xf2, 0x01,
751 0x02, 0xea, 0xb4, 0x04, 761 0x02, 0xea, 0xb4, 0x04,
752 0x00, 0xe2, 0x56, 0x59, 762 0x00, 0xe2, 0x60, 0x59,
753 0x01, 0x1b, 0xe2, 0x6d, 763 0x01, 0x1b, 0xf6, 0x6d,
754 0x40, 0x5b, 0xf0, 0x7d, 764 0x40, 0x5b, 0x04, 0x7e,
755 0x01, 0x1b, 0xe2, 0x6d, 765 0x01, 0x1b, 0xf6, 0x6d,
756 0x02, 0x19, 0x32, 0x00, 766 0x02, 0x19, 0x32, 0x00,
757 0x01, 0x1a, 0x84, 0x78, 767 0x01, 0x1a, 0x84, 0x78,
758 0x80, 0xf9, 0xf2, 0x01, 768 0x80, 0xf9, 0xf2, 0x01,
759 0xff, 0xea, 0x10, 0x03, 769 0xff, 0xea, 0x10, 0x03,
760 0x08, 0x92, 0x25, 0x03, 770 0x08, 0x92, 0x25, 0x03,
761 0x00, 0xe2, 0x62, 0x43, 771 0x00, 0xe2, 0x76, 0x43,
762 0x01, 0x1a, 0xec, 0x7d, 772 0x01, 0x1a, 0x00, 0x7e,
763 0x40, 0x5b, 0xe8, 0x7d, 773 0x40, 0x5b, 0xfc, 0x7d,
764 0x01, 0x1a, 0xd6, 0x6d, 774 0x01, 0x1a, 0xea, 0x6d,
765 0xfc, 0x42, 0x84, 0x78, 775 0xfc, 0x42, 0x84, 0x78,
766 0x01, 0x1a, 0xf0, 0x6d, 776 0x01, 0x1a, 0x04, 0x6e,
767 0x10, 0xea, 0x64, 0x59, 777 0x10, 0xea, 0x6e, 0x59,
768 0x10, 0xea, 0x04, 0x00, 778 0x10, 0xea, 0x04, 0x00,
769 0xfc, 0x42, 0x84, 0x78, 779 0xfc, 0x42, 0x84, 0x78,
770 0x10, 0x40, 0xf6, 0x6d, 780 0x10, 0x40, 0x0a, 0x6e,
771 0x20, 0x4d, 0x84, 0x78, 781 0x20, 0x4d, 0x84, 0x78,
772 0x40, 0x5b, 0xd6, 0x6d, 782 0x40, 0x5b, 0xea, 0x6d,
773 0x01, 0x1a, 0x84, 0x78, 783 0x01, 0x1a, 0x84, 0x78,
774 0x01, 0x90, 0x21, 0x1b, 784 0x01, 0x90, 0x21, 0x1b,
775 0x30, 0x3f, 0xc0, 0x09, 785 0x30, 0x3f, 0xc0, 0x09,
776 0x30, 0xe0, 0x84, 0x60, 786 0x30, 0xe0, 0x84, 0x60,
777 0x40, 0x4b, 0x84, 0x68, 787 0x40, 0x4b, 0x84, 0x68,
778 0xff, 0xea, 0x52, 0x01, 788 0xff, 0xea, 0x52, 0x01,
779 0xee, 0x00, 0x0c, 0x6e, 789 0xee, 0x00, 0x20, 0x6e,
780 0x80, 0xf9, 0xf2, 0x01, 790 0x80, 0xf9, 0xf2, 0x01,
781 0xff, 0x90, 0x21, 0x1b, 791 0xff, 0x90, 0x21, 0x1b,
782 0x02, 0xea, 0xb4, 0x00, 792 0x02, 0xea, 0xb4, 0x00,
783 0x20, 0xea, 0x9a, 0x00, 793 0x20, 0xea, 0x9a, 0x00,
784 0xf3, 0x42, 0x16, 0x6e, 794 0x04, 0x41, 0x26, 0x7e,
785 0x12, 0xea, 0x64, 0x59, 795 0x08, 0xea, 0x98, 0x00,
796 0x08, 0x57, 0xae, 0x00,
797 0xf3, 0x42, 0x30, 0x6e,
798 0x12, 0xea, 0x6e, 0x59,
786 0x12, 0xea, 0x04, 0x00, 799 0x12, 0xea, 0x04, 0x00,
787 0x00, 0xe2, 0x14, 0x42, 800 0x00, 0xe2, 0x28, 0x42,
788 0x0d, 0xea, 0x64, 0x59, 801 0x0d, 0xea, 0x6e, 0x59,
789 0x0d, 0xea, 0x04, 0x00, 802 0x0d, 0xea, 0x04, 0x00,
790 0x00, 0xe2, 0x14, 0x42, 803 0x00, 0xe2, 0x28, 0x42,
791 0x01, 0x90, 0x21, 0x1b, 804 0x01, 0x90, 0x21, 0x1b,
792 0x11, 0xea, 0x64, 0x59, 805 0x11, 0xea, 0x6e, 0x59,
793 0x11, 0xea, 0x04, 0x00, 806 0x11, 0xea, 0x04, 0x00,
794 0x00, 0xe2, 0x52, 0x5b, 807 0x00, 0xe2, 0x66, 0x5b,
795 0x08, 0x5a, 0xb4, 0x00, 808 0x08, 0x5a, 0xb4, 0x00,
796 0x00, 0xe2, 0x44, 0x5e, 809 0x00, 0xe2, 0x5e, 0x5e,
797 0xa8, 0xea, 0x32, 0x00, 810 0xa8, 0xea, 0x32, 0x00,
798 0x00, 0xe2, 0x56, 0x59, 811 0x00, 0xe2, 0x60, 0x59,
799 0x80, 0x1a, 0x32, 0x7e, 812 0x80, 0x1a, 0x4c, 0x7e,
800 0x00, 0xe2, 0x44, 0x5e, 813 0x00, 0xe2, 0x5e, 0x5e,
801 0x80, 0x19, 0x32, 0x00, 814 0x80, 0x19, 0x32, 0x00,
802 0x40, 0x5b, 0x38, 0x6e, 815 0x40, 0x5b, 0x52, 0x6e,
803 0x08, 0x5a, 0x38, 0x7e, 816 0x08, 0x5a, 0x52, 0x7e,
804 0x20, 0x4d, 0x84, 0x78, 817 0x20, 0x4d, 0x84, 0x78,
805 0x02, 0x84, 0x09, 0x03, 818 0x02, 0x84, 0x09, 0x03,
806 0x40, 0x5b, 0x04, 0x7e, 819 0x40, 0x5b, 0x18, 0x7e,
807 0xff, 0x90, 0x21, 0x1b, 820 0xff, 0x90, 0x21, 0x1b,
808 0x80, 0xf9, 0xf2, 0x01, 821 0x80, 0xf9, 0xf2, 0x01,
809 0x08, 0x92, 0x63, 0x6b, 822 0x08, 0x92, 0x77, 0x6b,
810 0x02, 0xea, 0xb4, 0x04, 823 0x02, 0xea, 0xb4, 0x04,
811 0x01, 0x40, 0xe1, 0x30, 824 0x01, 0x40, 0xe1, 0x30,
812 0x05, 0x41, 0xe3, 0x98, 825 0x05, 0x41, 0xe3, 0x98,
@@ -1039,138 +1052,138 @@ static struct patch {
1039 { ahd_patch0_func, 64, 1, 1 }, 1052 { ahd_patch0_func, 64, 1, 1 },
1040 { ahd_patch2_func, 67, 1, 2 }, 1053 { ahd_patch2_func, 67, 1, 2 },
1041 { ahd_patch0_func, 68, 1, 1 }, 1054 { ahd_patch0_func, 68, 1, 1 },
1042 { ahd_patch4_func, 116, 1, 1 }, 1055 { ahd_patch4_func, 115, 1, 1 },
1043 { ahd_patch2_func, 175, 3, 1 }, 1056 { ahd_patch2_func, 180, 3, 1 },
1044 { ahd_patch1_func, 178, 2, 1 }, 1057 { ahd_patch1_func, 183, 2, 1 },
1045 { ahd_patch5_func, 180, 1, 1 }, 1058 { ahd_patch5_func, 185, 1, 1 },
1046 { ahd_patch2_func, 189, 1, 2 }, 1059 { ahd_patch2_func, 194, 1, 2 },
1047 { ahd_patch0_func, 190, 1, 1 }, 1060 { ahd_patch0_func, 195, 1, 1 },
1048 { ahd_patch6_func, 191, 2, 2 }, 1061 { ahd_patch6_func, 196, 2, 2 },
1049 { ahd_patch0_func, 193, 6, 3 }, 1062 { ahd_patch0_func, 198, 6, 3 },
1050 { ahd_patch2_func, 196, 1, 2 }, 1063 { ahd_patch2_func, 201, 1, 2 },
1051 { ahd_patch0_func, 197, 1, 1 }, 1064 { ahd_patch0_func, 202, 1, 1 },
1052 { ahd_patch2_func, 200, 1, 2 }, 1065 { ahd_patch2_func, 205, 1, 2 },
1053 { ahd_patch0_func, 201, 1, 1 }, 1066 { ahd_patch0_func, 206, 1, 1 },
1054 { ahd_patch3_func, 203, 1, 1 }, 1067 { ahd_patch3_func, 208, 1, 1 },
1055 { ahd_patch7_func, 204, 3, 1 }, 1068 { ahd_patch7_func, 209, 3, 1 },
1056 { ahd_patch3_func, 213, 1, 1 }, 1069 { ahd_patch3_func, 218, 1, 1 },
1057 { ahd_patch5_func, 214, 16, 2 }, 1070 { ahd_patch5_func, 219, 16, 2 },
1058 { ahd_patch0_func, 230, 1, 1 }, 1071 { ahd_patch0_func, 235, 1, 1 },
1059 { ahd_patch8_func, 250, 2, 1 }, 1072 { ahd_patch8_func, 260, 2, 1 },
1060 { ahd_patch1_func, 254, 1, 2 }, 1073 { ahd_patch1_func, 264, 1, 2 },
1061 { ahd_patch0_func, 255, 1, 1 }, 1074 { ahd_patch0_func, 265, 1, 1 },
1062 { ahd_patch7_func, 258, 3, 1 }, 1075 { ahd_patch7_func, 268, 3, 1 },
1063 { ahd_patch1_func, 273, 1, 2 }, 1076 { ahd_patch1_func, 283, 1, 2 },
1064 { ahd_patch0_func, 274, 1, 1 }, 1077 { ahd_patch0_func, 284, 1, 1 },
1065 { ahd_patch1_func, 277, 1, 2 }, 1078 { ahd_patch1_func, 287, 1, 2 },
1066 { ahd_patch0_func, 278, 1, 1 }, 1079 { ahd_patch0_func, 288, 1, 1 },
1067 { ahd_patch2_func, 281, 1, 2 }, 1080 { ahd_patch2_func, 291, 1, 2 },
1068 { ahd_patch0_func, 282, 1, 1 }, 1081 { ahd_patch0_func, 292, 1, 1 },
1069 { ahd_patch9_func, 295, 2, 2 }, 1082 { ahd_patch9_func, 305, 2, 2 },
1070 { ahd_patch0_func, 297, 1, 1 }, 1083 { ahd_patch0_func, 307, 1, 1 },
1071 { ahd_patch1_func, 339, 1, 2 }, 1084 { ahd_patch1_func, 349, 1, 2 },
1072 { ahd_patch0_func, 340, 1, 1 }, 1085 { ahd_patch0_func, 350, 1, 1 },
1073 { ahd_patch2_func, 348, 1, 2 }, 1086 { ahd_patch2_func, 358, 1, 2 },
1074 { ahd_patch0_func, 349, 1, 1 }, 1087 { ahd_patch0_func, 359, 1, 1 },
1075 { ahd_patch2_func, 352, 1, 2 }, 1088 { ahd_patch2_func, 362, 1, 2 },
1076 { ahd_patch0_func, 353, 1, 1 },
1077 { ahd_patch1_func, 359, 1, 2 },
1078 { ahd_patch0_func, 360, 1, 1 },
1079 { ahd_patch1_func, 362, 1, 2 },
1080 { ahd_patch0_func, 363, 1, 1 }, 1089 { ahd_patch0_func, 363, 1, 1 },
1081 { ahd_patch10_func, 382, 1, 1 }, 1090 { ahd_patch1_func, 369, 1, 2 },
1082 { ahd_patch10_func, 385, 1, 1 }, 1091 { ahd_patch0_func, 370, 1, 1 },
1083 { ahd_patch10_func, 387, 1, 1 }, 1092 { ahd_patch1_func, 372, 1, 2 },
1084 { ahd_patch10_func, 399, 1, 1 }, 1093 { ahd_patch0_func, 373, 1, 1 },
1085 { ahd_patch1_func, 409, 1, 2 }, 1094 { ahd_patch10_func, 392, 1, 1 },
1086 { ahd_patch0_func, 410, 1, 1 }, 1095 { ahd_patch10_func, 395, 1, 1 },
1087 { ahd_patch1_func, 412, 1, 2 }, 1096 { ahd_patch10_func, 397, 1, 1 },
1088 { ahd_patch0_func, 413, 1, 1 }, 1097 { ahd_patch10_func, 409, 1, 1 },
1089 { ahd_patch1_func, 421, 1, 2 }, 1098 { ahd_patch1_func, 419, 1, 2 },
1090 { ahd_patch0_func, 422, 1, 1 }, 1099 { ahd_patch0_func, 420, 1, 1 },
1091 { ahd_patch2_func, 435, 1, 2 }, 1100 { ahd_patch1_func, 422, 1, 2 },
1092 { ahd_patch0_func, 436, 1, 1 }, 1101 { ahd_patch0_func, 423, 1, 1 },
1093 { ahd_patch11_func, 472, 1, 1 }, 1102 { ahd_patch1_func, 431, 1, 2 },
1094 { ahd_patch1_func, 480, 1, 2 }, 1103 { ahd_patch0_func, 432, 1, 1 },
1095 { ahd_patch0_func, 481, 1, 1 }, 1104 { ahd_patch2_func, 445, 1, 2 },
1096 { ahd_patch2_func, 493, 1, 2 }, 1105 { ahd_patch0_func, 446, 1, 1 },
1097 { ahd_patch0_func, 494, 1, 1 }, 1106 { ahd_patch11_func, 482, 1, 1 },
1098 { ahd_patch12_func, 497, 6, 2 }, 1107 { ahd_patch1_func, 490, 1, 2 },
1099 { ahd_patch0_func, 503, 1, 1 }, 1108 { ahd_patch0_func, 491, 1, 1 },
1100 { ahd_patch13_func, 524, 7, 1 }, 1109 { ahd_patch2_func, 503, 1, 2 },
1101 { ahd_patch14_func, 533, 1, 1 }, 1110 { ahd_patch0_func, 504, 1, 1 },
1102 { ahd_patch15_func, 542, 1, 1 }, 1111 { ahd_patch12_func, 507, 6, 2 },
1103 { ahd_patch16_func, 543, 1, 2 }, 1112 { ahd_patch0_func, 513, 1, 1 },
1104 { ahd_patch0_func, 544, 1, 1 }, 1113 { ahd_patch13_func, 534, 7, 1 },
1105 { ahd_patch17_func, 547, 1, 1 }, 1114 { ahd_patch14_func, 543, 1, 1 },
1106 { ahd_patch16_func, 548, 1, 1 }, 1115 { ahd_patch15_func, 552, 1, 1 },
1107 { ahd_patch18_func, 559, 1, 2 }, 1116 { ahd_patch16_func, 553, 1, 2 },
1108 { ahd_patch0_func, 560, 1, 1 }, 1117 { ahd_patch0_func, 554, 1, 1 },
1109 { ahd_patch1_func, 579, 1, 2 }, 1118 { ahd_patch17_func, 557, 1, 1 },
1110 { ahd_patch0_func, 580, 1, 1 }, 1119 { ahd_patch16_func, 558, 1, 1 },
1111 { ahd_patch1_func, 583, 1, 2 }, 1120 { ahd_patch18_func, 569, 1, 2 },
1112 { ahd_patch0_func, 584, 1, 1 }, 1121 { ahd_patch0_func, 570, 1, 1 },
1113 { ahd_patch2_func, 589, 1, 2 }, 1122 { ahd_patch1_func, 589, 1, 2 },
1114 { ahd_patch0_func, 590, 1, 1 }, 1123 { ahd_patch0_func, 590, 1, 1 },
1115 { ahd_patch2_func, 594, 1, 2 }, 1124 { ahd_patch1_func, 593, 1, 2 },
1116 { ahd_patch0_func, 595, 1, 1 }, 1125 { ahd_patch0_func, 594, 1, 1 },
1117 { ahd_patch1_func, 596, 1, 2 }, 1126 { ahd_patch2_func, 599, 1, 2 },
1118 { ahd_patch0_func, 597, 1, 1 }, 1127 { ahd_patch0_func, 600, 1, 1 },
1119 { ahd_patch2_func, 608, 1, 2 }, 1128 { ahd_patch2_func, 604, 1, 2 },
1120 { ahd_patch0_func, 609, 1, 1 }, 1129 { ahd_patch0_func, 605, 1, 1 },
1121 { ahd_patch19_func, 613, 1, 1 }, 1130 { ahd_patch1_func, 606, 1, 2 },
1122 { ahd_patch20_func, 618, 1, 1 }, 1131 { ahd_patch0_func, 607, 1, 1 },
1123 { ahd_patch21_func, 619, 2, 1 }, 1132 { ahd_patch2_func, 618, 1, 2 },
1124 { ahd_patch20_func, 623, 1, 2 }, 1133 { ahd_patch0_func, 619, 1, 1 },
1125 { ahd_patch0_func, 624, 1, 1 }, 1134 { ahd_patch19_func, 623, 1, 1 },
1126 { ahd_patch2_func, 627, 1, 2 }, 1135 { ahd_patch20_func, 628, 1, 1 },
1127 { ahd_patch0_func, 628, 1, 1 }, 1136 { ahd_patch21_func, 629, 2, 1 },
1128 { ahd_patch2_func, 643, 1, 2 }, 1137 { ahd_patch20_func, 633, 1, 2 },
1129 { ahd_patch0_func, 644, 1, 1 }, 1138 { ahd_patch0_func, 634, 1, 1 },
1130 { ahd_patch13_func, 645, 14, 1 }, 1139 { ahd_patch2_func, 637, 1, 2 },
1131 { ahd_patch1_func, 663, 1, 2 }, 1140 { ahd_patch0_func, 638, 1, 1 },
1132 { ahd_patch0_func, 664, 1, 1 }, 1141 { ahd_patch2_func, 653, 1, 2 },
1133 { ahd_patch13_func, 665, 1, 1 }, 1142 { ahd_patch0_func, 654, 1, 1 },
1134 { ahd_patch1_func, 677, 1, 2 }, 1143 { ahd_patch13_func, 655, 14, 1 },
1135 { ahd_patch0_func, 678, 1, 1 }, 1144 { ahd_patch1_func, 673, 1, 2 },
1136 { ahd_patch1_func, 685, 1, 2 }, 1145 { ahd_patch0_func, 674, 1, 1 },
1137 { ahd_patch0_func, 686, 1, 1 }, 1146 { ahd_patch13_func, 675, 1, 1 },
1138 { ahd_patch19_func, 709, 1, 1 }, 1147 { ahd_patch1_func, 687, 1, 2 },
1139 { ahd_patch19_func, 747, 1, 1 }, 1148 { ahd_patch0_func, 688, 1, 1 },
1140 { ahd_patch1_func, 758, 1, 2 }, 1149 { ahd_patch1_func, 695, 1, 2 },
1141 { ahd_patch0_func, 759, 1, 1 }, 1150 { ahd_patch0_func, 696, 1, 1 },
1142 { ahd_patch1_func, 776, 1, 2 }, 1151 { ahd_patch19_func, 719, 1, 1 },
1143 { ahd_patch0_func, 777, 1, 1 }, 1152 { ahd_patch19_func, 757, 1, 1 },
1144 { ahd_patch1_func, 779, 1, 2 }, 1153 { ahd_patch1_func, 768, 1, 2 },
1145 { ahd_patch0_func, 780, 1, 1 }, 1154 { ahd_patch0_func, 769, 1, 1 },
1146 { ahd_patch1_func, 783, 1, 2 }, 1155 { ahd_patch7_func, 785, 3, 1 },
1147 { ahd_patch0_func, 784, 1, 1 }, 1156 { ahd_patch1_func, 789, 1, 2 },
1148 { ahd_patch22_func, 786, 1, 2 }, 1157 { ahd_patch0_func, 790, 1, 1 },
1149 { ahd_patch0_func, 787, 2, 1 }, 1158 { ahd_patch1_func, 792, 1, 2 },
1150 { ahd_patch23_func, 790, 4, 2 }, 1159 { ahd_patch0_func, 793, 1, 1 },
1151 { ahd_patch0_func, 794, 1, 1 }, 1160 { ahd_patch1_func, 796, 1, 2 },
1152 { ahd_patch23_func, 802, 11, 1 } 1161 { ahd_patch0_func, 797, 1, 1 },
1162 { ahd_patch22_func, 799, 1, 2 },
1163 { ahd_patch0_func, 800, 2, 1 },
1164 { ahd_patch23_func, 803, 4, 2 },
1165 { ahd_patch0_func, 807, 1, 1 },
1166 { ahd_patch23_func, 815, 11, 1 }
1153}; 1167};
1154 1168
1155static struct cs { 1169static struct cs {
1156 uint16_t begin; 1170 uint16_t begin;
1157 uint16_t end; 1171 uint16_t end;
1158} critical_sections[] = { 1172} critical_sections[] = {
1159 { 17, 28 }, 1173 { 17, 30 },
1160 { 29, 30 },
1161 { 47, 58 }, 1174 { 47, 58 },
1162 { 61, 63 }, 1175 { 61, 63 },
1163 { 65, 66 }, 1176 { 65, 66 },
1164 { 72, 92 }, 1177 { 72, 92 },
1165 { 110, 137 }, 1178 { 110, 142 },
1166 { 138, 175 }, 1179 { 143, 180 },
1167 { 180, 188 }, 1180 { 185, 193 },
1168 { 213, 264 }, 1181 { 218, 274 },
1169 { 425, 433 }, 1182 { 435, 443 },
1170 { 443, 445 }, 1183 { 453, 455 },
1171 { 448, 457 }, 1184 { 458, 467 },
1172 { 709, 739 }, 1185 { 719, 749 },
1173 { 749, 753 } 1186 { 759, 763 }
1174}; 1187};
1175 1188
1176static const int num_critical_sections = sizeof(critical_sections) 1189static const int num_critical_sections = sizeof(critical_sections)