From mboxrd@z Thu Jan 1 00:00:00 1970 From: Luben Tuikov Subject: [patch 16/28] Sync up drivers/scsi/aic7xxx Date: Tue, 28 Sep 2004 09:06:24 -0400 Sender: linux-scsi-owner@vger.kernel.org Message-ID: <415961D0.4020409@adaptec.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from magic.adaptec.com ([216.52.22.17]:5579 "EHLO magic.adaptec.com") by vger.kernel.org with ESMTP id S267751AbUI1NGc (ORCPT ); Tue, 28 Sep 2004 09:06:32 -0400 Received: from redfish.adaptec.com (redfish.adaptec.com [162.62.50.11]) by magic.adaptec.com (8.11.6/8.11.6) with ESMTP id i8SD6VW02999 for ; Tue, 28 Sep 2004 06:06:31 -0700 Received: from rtpe2k01.adaptec.com (rtpe2k01.adaptec.com [10.110.12.40]) by redfish.adaptec.com (8.11.6/8.11.6) with ESMTP id i8SD6Um31191 for ; Tue, 28 Sep 2004 06:06:31 -0700 List-Id: linux-scsi@vger.kernel.org To: SCSI Mailing List Sync up drivers/scsi/aic7xxx/. (2603-2643) Signed-off-by: Luben Tuikov ==== //depot/aic7xxx/aic7xxx/aic79xx.reg#70 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.reg ==== --- /tmp/tmp.26963.0 2004-09-27 13:31:39.261144880 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.reg 2004-01-23 14:37:51.000000000 -0500 @@ -39,7 +39,7 @@ * * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#72 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling @@ -65,13 +65,6 @@ mvi MODE_PTR, MK_MODE(src, dst); \ } -#define TOGGLE_DFF_MODE \ - if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) { \ - call toggle_dff_mode_work_around; \ - } else { \ - xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); \ - } - #define RESTORE_MODE(mode) \ if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) { \ mov mode call set_mode_work_around; \ @@ -3542,6 +3535,15 @@ COMPLETE_DMA_SCB_HEAD { size 2 } + /* + * head of list of SCBs that have + * been uploaded to the host, but cannot + * be completed until the QFREEZE is in + * full effect (i.e. no selections pending). + */ + COMPLETE_ON_QFREEZE_HEAD { + size 2 + } /* Counting semaphore to prevent new select-outs */ QFREEZE_COUNT { size 2 @@ -3625,6 +3627,17 @@ size 1 } /* + * Kernel and sequencer offsets into the queue of + * incoming target mode command descriptors. The + * queue is full when the KERNEL_TQINPOS == TQINPOS. + */ + KERNEL_TQINPOS { + size 1 + } + TQINPOS { + size 1 + } + /* * Base address of our shared data with the kernel driver in host * memory. This includes the qoutfifo and target mode * incoming command queue. @@ -3639,17 +3652,6 @@ QOUTFIFO_NEXT_ADDR { size 4 } - /* - * Kernel and sequencer offsets into the queue of - * incoming target mode command descriptors. The - * queue is full when the KERNEL_TQINPOS == TQINPOS. - */ - KERNEL_TQINPOS { - size 1 - } - TQINPOS { - size 1 - } ARG_1 { size 1 mask SEND_MSG 0x80 ==== //depot/aic7xxx/aic7xxx/aic79xx.seq#107 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq ==== --- /tmp/tmp.26963.1 2004-09-27 13:31:39.613091376 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx.seq 2004-01-23 14:32:29.000000000 -0500 @@ -40,7 +40,7 @@ * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#107 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#110 $" PATCH_ARG_LIST = "struct ahd_softc *ahd" PREFIX = "ahd_" @@ -68,13 +68,36 @@ } SET_MODE(M_SCSI, M_SCSI) test SCSISEQ0, ENSELO|ENARBO jnz idle_loop_checkbus; - test SEQ_FLAGS2, SELECTOUT_QFROZEN jnz idle_loop_checkbus; + test SEQ_FLAGS2, SELECTOUT_QFROZEN jz check_waiting_list; + test SSTAT0, SELDO|SELINGO jnz idle_loop_checkbus; +BEGIN_CRITICAL; + /* + * If we have completions stalled waiting for the qfreeze + * to take effect, move them over to the complete_scb list + * now that no selections are pending. + */ + cmp COMPLETE_ON_QFREEZE_HEAD[1],SCB_LIST_NULL je idle_loop_checkbus; + /* + * Find the end of the qfreeze list. The first element has + * to be treated specially. + */ + bmov SCBPTR, COMPLETE_ON_QFREEZE_HEAD, 2; + cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je join_lists; + /* + * Now the normal loop. + */ + bmov SCBPTR, SCB_NEXT_COMPLETE, 2; + cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL jne . - 1; +join_lists: + bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; + bmov COMPLETE_SCB_HEAD, COMPLETE_ON_QFREEZE_HEAD, 2; + jmp idle_loop_checkbus; +check_waiting_list: cmp WAITING_TID_HEAD[1], SCB_LIST_NULL je idle_loop_checkbus; /* * ENSELO is cleared by a SELDO, so we must test for SELDO * one last time. */ -BEGIN_CRITICAL; test SSTAT0, SELDO jnz select_out; END_CRITICAL; call start_selection; @@ -184,6 +207,7 @@ /* FALLTHROUGH */ scbdma_tohost_done: test CCSCBCTL, CCARREN jz fill_qoutfifo_dmadone; + and CCSCBCTL, ~(CCARREN|CCSCBEN); /* * An SCB has been succesfully uploaded to the host. * If the SCB was uploaded for some reason other than @@ -193,13 +217,9 @@ * then queue the completion. */ test SCB_SCSI_STATUS, 0xff jz scbdma_queue_completion; - SET_MODE(M_SCSI, M_SCSI) - test SCSISEQ0, ENSELO jnz return; - test SSTAT0, (SELDO|SELINGO) jnz return; - SET_MODE(M_CCHAN, M_CCHAN) + bmov SCB_NEXT_COMPLETE, COMPLETE_ON_QFREEZE_HEAD, 2; + bmov COMPLETE_ON_QFREEZE_HEAD, SCB_NEXT_COMPLETE, 2 ret; scbdma_queue_completion: - and CCSCBCTL, ~(CCARREN|CCSCBEN); - bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; bmov SCB_NEXT_COMPLETE, COMPLETE_SCB_HEAD, 2; bmov COMPLETE_SCB_HEAD, SCBPTR, 2 ret; fill_qoutfifo_dmadone: @@ -355,9 +375,9 @@ mvi CCARREN|CCSCBEN|CCSCBDIR|CCSCBRESET jmp dma_scb; dma_complete_scb: bmov SCBPTR, COMPLETE_DMA_SCB_HEAD, 2; + bmov COMPLETE_DMA_SCB_HEAD, SCB_NEXT_COMPLETE, 2; bmov SCBHADDR, SCB_BUSADDR, 4; mvi CCARREN|CCSCBEN|CCSCBRESET jmp dma_scb; -END_CRITICAL; /* * Either post or fetch an SCB from host memory. The caller @@ -373,6 +393,7 @@ dma_scb: mvi SCBHCNT, SCB_TRANSFER_SIZE; mov CCSCBCTL, SINDEX ret; +END_CRITICAL; BEGIN_CRITICAL; setjmp: @@ -395,11 +416,6 @@ mvi SEQINTCTL, INTVEC1DSL; mov MODE_PTR, SINDEX; clr SEQINTCTL ret; - -toggle_dff_mode_work_around: - mvi SEQINTCTL, INTVEC1DSL; - xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); - clr SEQINTCTL ret; } @@ -1033,15 +1049,9 @@ /* * We received a "command complete" message. Put the SCB on the complete * queue and trigger a completion interrupt via the idle loop. Before doing - * so, check to see if there - * is a residual or the status byte is something other than STATUS_GOOD (0). - * In either of these conditions, we upload the SCB back to the host so it can - * process this information. In the case of a non zero status byte, we - * additionally interrupt the kernel driver synchronously, allowing it to - * decide if sense should be retrieved. If the kernel driver wishes to request - * sense, it will fill the kernel SCB with a request sense command, requeue - * it to the QINFIFO and tell us not to post to the QOUTFIFO by setting - * RETURN_1 to SEND_SENSE. + * so, check to see if there is a residual or the status byte is something + * other than STATUS_GOOD (0). In either of these conditions, we upload the + * SCB back to the host so it can process this information. */ mesgin_complete: @@ -1086,6 +1096,7 @@ call queue_scb_completion; jmp await_busfree; +BEGIN_CRITICAL; freeze_queue: /* Cancel any pending select-out. */ test SSTAT0, SELDO|SELINGO jnz . + 2; @@ -1096,6 +1107,7 @@ adc QFREEZE_COUNT[1], A; or SEQ_FLAGS2, SELECTOUT_QFROZEN; mov A, ACCUM_SAVE ret; +END_CRITICAL; /* * Complete the current FIFO's SCB if data for this same @@ -1340,6 +1352,47 @@ test CCSGCTL, CCSGENACK jnz return; /* + * Should the other FIFO get the S/G cache first? If + * both FIFOs have been allocated since we last checked + * any FIFO, it is important that we service a FIFO + * that is not actively on the bus first. This guarantees + * that a FIFO will be freed to handle snapshot requests for + * any FIFO that is still on the bus. Chips with RTI do not + * perform snapshots, so don't bother with this test there. + */ + if ((ahd->features & AHD_RTI) == 0) { + /* + * If we're not still receiving SCSI data, + * it is safe to allocate the S/G cache to + * this FIFO. + */ + test DFCNTRL, SCSIEN jz idle_sgfetch_start; + + /* + * Switch to the other FIFO. Non-RTI chips + * also have the "set mode" bug, so we must + * disable interrupts during the switch. + */ + mvi SEQINTCTL, INTVEC1DSL; + xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); + + /* + * If the other FIFO needs loading, then it + * must not have claimed the S/G cache yet + * (SG_CACHE_AVAIL would have been cleared in + * the orginal FIFO mode and we test this above). + * Return to the idle loop so we can process the + * FIFO not currently on the bus first. + */ + test SG_STATE, LOADING_NEEDED jz idle_sgfetch_okay; + clr SEQINTCTL ret; +idle_sgfetch_okay: + xor MODE_PTR, MK_MODE(M_DFF1, M_DFF1); + clr SEQINTCTL; + } + +idle_sgfetch_start: + /* * We fetch a "cacheline aligned" and sized amount of data * so we don't end up referencing a non-existant page. * Cacheline aligned is in quotes because the kernel will @@ -1350,7 +1403,7 @@ mvi SGHCNT, SG_PREFETCH_CNT; if ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0) { /* - * Need two instruction between "touches" of SGHADDR. + * Need two instructions between "touches" of SGHADDR. */ nop; } ==== //depot/aic7xxx/aic7xxx/aic79xx.c#225 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c ==== --- /tmp/tmp.26963.2 2004-09-27 13:31:40.829906392 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_core.c 2004-01-20 05:16:39.000000000 -0500 @@ -37,7 +37,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#225 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#226 $ */ #ifdef __linux__ @@ -8011,6 +8011,7 @@ } else { paused = 0; ahd_pause(ahd); + ahd_clear_critical_section(ahd); } /* Freeze the queue until the client sees the error. */ ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#195 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.c ==== --- /tmp/tmp.26963.3 2004-09-27 13:31:41.337829176 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_osm.c 2004-01-23 13:15:14.000000000 -0500 @@ -1,7 +1,7 @@ /* * Adaptec AIC79xx device driver for Linux. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#195 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#198 $ * * -------------------------------------------------------------------------- * Copyright (c) 1994-2000 Justin T. Gibbs. @@ -52,9 +52,7 @@ */ #include "aiclib.c" -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) #include /* __setup */ -#endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) #include "sd.h" /* For geometry detection */ @@ -77,14 +75,6 @@ */ spinlock_t ahd_list_spinlock; -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) -struct proc_dir_entry proc_scsi_aic79xx = { - PROC_SCSI_AIC79XX, 7, "aic79xx", - S_IFDIR | S_IRUGO | S_IXUGO, 2, - 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; -#endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) /* For dynamic sglist size calculation. */ u_int ahd_linux_nseg; @@ -958,11 +948,7 @@ "aic79xx: insmod or else it might trash certain memory areas.\n"); #endif -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0) template->proc_name = "aic79xx"; -#else - template->proc_dir = &proc_scsi_aic79xx; -#endif /* * Initialize our softc list lock prior to @@ -1972,9 +1958,7 @@ return 1; } -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0) __setup("aic79xx=", aic79xx_setup); -#endif uint32_t aic79xx_verbose; @@ -2001,16 +1985,8 @@ *((struct ahd_softc **)host->hostdata) = ahd; ahd_lock(ahd, &s); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) - scsi_assign_lock(host, &ahd->platform_data->spin_lock); -#elif AHD_SCSI_HAS_HOST_LOCK != 0 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) - host->host_lock = &ahd->platform_data->spin_lock; -#else - host->lock = &ahd->platform_data->spin_lock; -#endif -#endif ahd->platform_data->host = host; + aic_assign_host_lock(ahd); host->can_queue = AHD_MAX_QUEUE; host->cmd_per_lun = 2; host->sg_tablesize = AHD_NSEG; @@ -2182,19 +2158,11 @@ ahd->platform_data->completeq_timer.data = (u_long)ahd; ahd->platform_data->completeq_timer.function = (aic_linux_callback_t *)ahd_linux_thread_run_complete_queue; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) init_MUTEX_LOCKED(&ahd->platform_data->eh_sem); init_MUTEX_LOCKED(&ahd->platform_data->dv_sem); init_MUTEX_LOCKED(&ahd->platform_data->dv_cmd_sem); init_MUTEX_LOCKED(&ahd->platform_data->recovery_sem); init_MUTEX_LOCKED(&ahd->platform_data->recovery_ending_sem); -#else - ahd->platform_data->eh_sem = MUTEX_LOCKED; - ahd->platform_data->dv_sem = MUTEX_LOCKED; - ahd->platform_data->dv_cmd_sem = MUTEX_LOCKED; - ahd->platform_data->recovery_sem = MUTEX_LOCKED; - ahd->platform_data->recovery_ending_sem = MUTEX_LOCKED; -#endif aic_setup_tasklets(ahd); ahd->seltime = (aic79xx_seltime & 0x3) << 4; return (0); @@ -2258,10 +2226,8 @@ base_addr = (u_long)ahd->bshs[0].maddr; base_addr &= PAGE_MASK; iounmap((void *)base_addr); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) release_mem_region(ahd->platform_data->mem_busaddr, 0x1000); -#endif } #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) && \ LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) @@ -2796,13 +2762,13 @@ * ahd host lock held. For other kernels, the * io_request_lock must be held. */ -#if AHD_SCSI_HAS_HOST_LOCK != 0 +#if AIC_SCSI_HAS_HOST_LOCK != 0 ahd_lock(ahd, &s); #else spin_lock_irqsave(&io_request_lock, s); #endif ahd_linux_queue(cmd, ahd_linux_dv_complete); -#if AHD_SCSI_HAS_HOST_LOCK != 0 +#if AIC_SCSI_HAS_HOST_LOCK != 0 ahd_unlock(ahd, &s); #else spin_unlock_irqrestore(&io_request_lock, s); @@ -4039,6 +4005,30 @@ if ((tstate->auto_negotiate & mask) != 0) { scb->flags |= SCB_AUTO_NEGOTIATE; scb->hscb->control |= MK_MESSAGE; + } else if (cmd->cmnd[0] == INQUIRY + && (tinfo->curr.offset != 0 + || tinfo->curr.width != MSG_EXT_WDTR_BUS_8_BIT + || tinfo->curr.ppr_options != 0) + && (tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ)==0) { + /* + * The SCSI spec requires inquiry + * commands to complete without + * reporting unit attention conditions. + * Because of this, an inquiry command + * that occurs just after a device is + * reset will result in a data phase + * with mismatched negotiated rates. + * The core already forces a renegotiation + * for reset events that are visible to + * our controller or that we initiate, + * but a third party device reset or a + * hot-plug insertion can still cause this + * issue. Therefore, we force a re-negotiation + * for every inquiry command unless we + * are async. + */ + scb->flags |= SCB_NEGOTIATE; + scb->hscb->control |= MK_MESSAGE; } if ((dev->flags & (AIC_DEV_Q_TAGGED|AIC_DEV_Q_BASIC)) != 0) { @@ -4324,7 +4314,7 @@ WARN_ON(lun != CAM_LUN_WILDCARD); scsi_report_device_reset(ahd->platform_data->host, channel - 'A', target); -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) Scsi_Device *scsi_dev; /* @@ -4345,12 +4335,10 @@ break; } case AC_BUS_RESET: -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) if (ahd->platform_data->host != NULL) { scsi_report_bus_reset(ahd->platform_data->host, channel - 'A'); } -#endif /* * Add a minimal bus settle delay for devices that are slow to * respond after bus resets. ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_reg.h#77 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped ==== --- /tmp/tmp.26963.4 2004-09-27 13:31:41.833753784 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped 2004-01-20 16:07:15.000000000 -0500 @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#107 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#109 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#71 $ */ typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef struct ahd_reg_parse_entry { @@ -3772,5 +3772,5 @@ /* Exported Labels */ -#define LABEL_seq_isr 0x269 -#define LABEL_timer_isr 0x265 +#define LABEL_seq_isr 0x26d +#define LABEL_timer_isr 0x269 ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_reg_print.c#58 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped ==== --- /tmp/tmp.26963.5 2004-09-27 13:31:42.203697544 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped 2004-01-20 16:07:15.000000000 -0500 @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#107 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#109 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#71 $ */ #include "aic79xx_osm.h" ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_seq.h#78 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped ==== --- /tmp/tmp.26963.6 2004-09-27 13:31:42.295683560 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped 2004-01-20 16:07:15.000000000 -0500 @@ -2,30 +2,30 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#107 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#109 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#71 $ */ static uint8_t seqprog[] = { 0xff, 0x02, 0x06, 0x78, - 0x00, 0xea, 0x46, 0x59, + 0x00, 0xea, 0x40, 0x59, 0x01, 0xea, 0x04, 0x30, 0xff, 0x04, 0x0c, 0x78, - 0x19, 0xea, 0x46, 0x59, + 0x19, 0xea, 0x40, 0x59, 0x19, 0xea, 0x04, 0x00, 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, 0x60, 0x3a, 0x1a, 0x68, 0x04, 0x47, 0x1b, 0x68, 0xff, 0x21, 0x1b, 0x70, - 0x40, 0x4b, 0x8c, 0x69, - 0x00, 0xe2, 0x4a, 0x59, - 0x40, 0x4b, 0x8c, 0x69, - 0x20, 0x4b, 0x78, 0x69, + 0x40, 0x4b, 0x86, 0x69, + 0x00, 0xe2, 0x44, 0x59, + 0x40, 0x4b, 0x86, 0x69, + 0x20, 0x4b, 0x72, 0x69, 0xfc, 0x42, 0x24, 0x78, 0x10, 0x40, 0x24, 0x78, - 0x00, 0xe2, 0xc4, 0x5d, + 0x00, 0xe2, 0xcc, 0x5d, 0x20, 0x4d, 0x28, 0x78, - 0x00, 0xe2, 0xc4, 0x5d, + 0x00, 0xe2, 0xcc, 0x5d, 0x30, 0x3f, 0xc0, 0x09, 0x30, 0xe0, 0x30, 0x60, 0x7f, 0x4a, 0x94, 0x08, @@ -43,11 +43,11 @@ 0xff, 0x97, 0x4f, 0x78, 0x50, 0x4b, 0x4a, 0x68, 0xbf, 0x3a, 0x74, 0x08, - 0x14, 0xea, 0x46, 0x59, + 0x14, 0xea, 0x40, 0x59, 0x14, 0xea, 0x04, 0x00, 0x08, 0x92, 0x25, 0x03, 0xff, 0x90, 0x3f, 0x68, - 0x00, 0xe2, 0x58, 0x5b, + 0x00, 0xe2, 0x52, 0x5b, 0x00, 0xe2, 0x3e, 0x40, 0x00, 0xea, 0x3a, 0x59, 0x01, 0xea, 0x00, 0x30, @@ -166,16 +166,13 @@ 0x80, 0xea, 0xb2, 0x01, 0x01, 0xe2, 0x00, 0x30, 0xff, 0xea, 0xb2, 0x0d, - 0x80, 0xea, 0xb2, 0x01, - 0x11, 0x00, 0x00, 0x10, - 0xff, 0xea, 0xb2, 0x0d, 0x01, 0xe2, 0x04, 0x30, 0x01, 0xea, 0x04, 0x34, 0x02, 0x20, 0xbd, 0x30, 0x02, 0x20, 0xb9, 0x30, 0x02, 0x20, 0x51, 0x31, 0x4c, 0x93, 0xd7, 0x28, - 0x10, 0x92, 0x59, 0x79, + 0x10, 0x92, 0x53, 0x79, 0x01, 0x6b, 0xc0, 0x30, 0x02, 0x64, 0xc8, 0x00, 0x40, 0x3a, 0x74, 0x04, @@ -183,9 +180,9 @@ 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, 0x30, 0x3f, 0xc0, 0x09, - 0x30, 0xe0, 0x5a, 0x61, - 0x20, 0x3f, 0x70, 0x69, - 0x10, 0x3f, 0x5a, 0x79, + 0x30, 0xe0, 0x54, 0x61, + 0x20, 0x3f, 0x6a, 0x69, + 0x10, 0x3f, 0x54, 0x79, 0x02, 0xea, 0x7e, 0x00, 0x00, 0xea, 0x3a, 0x59, 0x01, 0xea, 0x00, 0x30, @@ -195,7 +192,7 @@ 0x11, 0xea, 0x00, 0x00, 0x02, 0x48, 0x51, 0x35, 0xc0, 0x4a, 0x94, 0x00, - 0x04, 0x41, 0x7e, 0x79, + 0x04, 0x41, 0x78, 0x79, 0x08, 0xea, 0x98, 0x00, 0x08, 0x57, 0xae, 0x00, 0x08, 0x3c, 0x78, 0x00, @@ -203,12 +200,12 @@ 0x0f, 0x67, 0xc0, 0x09, 0x00, 0x34, 0x69, 0x02, 0x20, 0xea, 0x96, 0x00, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf0, 0x41, 0xc0, 0x4a, 0x94, 0x00, - 0x40, 0x3a, 0xaa, 0x69, + 0x40, 0x3a, 0xa4, 0x69, 0x02, 0x55, 0x06, 0x68, - 0x02, 0x56, 0xaa, 0x69, - 0xff, 0x5b, 0xaa, 0x61, + 0x02, 0x56, 0xa4, 0x69, + 0xff, 0x5b, 0xa4, 0x61, 0x02, 0x20, 0x51, 0x31, 0x80, 0xea, 0xb2, 0x01, 0x44, 0xea, 0x00, 0x00, @@ -216,40 +213,40 @@ 0x33, 0xea, 0x00, 0x00, 0xff, 0xea, 0xb2, 0x09, 0xff, 0xe0, 0xc0, 0x19, - 0xff, 0xe0, 0xac, 0x79, + 0xff, 0xe0, 0xa6, 0x79, 0x02, 0xac, 0x51, 0x31, - 0x00, 0xe2, 0xa2, 0x41, + 0x00, 0xe2, 0x9c, 0x41, 0x02, 0x5e, 0x50, 0x31, 0x02, 0xa8, 0xb8, 0x30, 0x02, 0x5c, 0x50, 0x31, - 0xff, 0xad, 0xbd, 0x71, + 0xff, 0xad, 0xb7, 0x71, 0x02, 0xac, 0x41, 0x31, 0x02, 0x22, 0x51, 0x31, 0x02, 0xa0, 0x5c, 0x33, 0x02, 0xa0, 0x44, 0x32, - 0x00, 0xe2, 0xc6, 0x41, - 0x10, 0x92, 0xc7, 0x69, + 0x00, 0xe2, 0xc0, 0x41, + 0x10, 0x92, 0xc1, 0x69, 0x3d, 0x93, 0xc9, 0x29, 0x01, 0xe4, 0xc8, 0x01, 0x01, 0xea, 0xca, 0x01, 0xff, 0xea, 0xda, 0x01, 0x02, 0x20, 0x51, 0x31, 0x02, 0xae, 0x41, 0x32, - 0xff, 0x21, 0xcf, 0x61, + 0xff, 0x21, 0xc9, 0x61, 0xff, 0xea, 0x46, 0x02, 0x02, 0x5c, 0x50, 0x31, 0x40, 0xea, 0x96, 0x00, - 0x02, 0x56, 0xcc, 0x6d, - 0x01, 0x55, 0xcc, 0x6d, - 0x10, 0x92, 0xdb, 0x79, - 0x10, 0x40, 0xe4, 0x69, - 0x01, 0x56, 0xe4, 0x79, + 0x02, 0x56, 0xd4, 0x6d, + 0x01, 0x55, 0xd4, 0x6d, + 0x10, 0x92, 0xd5, 0x79, + 0x10, 0x40, 0xde, 0x69, + 0x01, 0x56, 0xde, 0x79, 0xff, 0x97, 0x07, 0x78, - 0x13, 0xea, 0x46, 0x59, + 0x13, 0xea, 0x40, 0x59, 0x13, 0xea, 0x04, 0x00, 0x00, 0xe2, 0x06, 0x40, 0xbf, 0x3a, 0x74, 0x08, - 0x04, 0x41, 0xea, 0x79, + 0x04, 0x41, 0xe4, 0x79, 0x08, 0xea, 0x98, 0x00, 0x08, 0x57, 0xae, 0x00, 0x01, 0x93, 0x69, 0x32, @@ -257,87 +254,87 @@ 0x40, 0xea, 0x66, 0x02, 0x08, 0x3c, 0x78, 0x00, 0x80, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xb8, 0x5b, + 0x00, 0xe2, 0xb2, 0x5b, 0x01, 0x36, 0xc1, 0x31, - 0x9f, 0xe0, 0x4c, 0x7c, - 0x80, 0xe0, 0x0a, 0x72, - 0xa0, 0xe0, 0x46, 0x72, - 0xc0, 0xe0, 0x3c, 0x72, - 0xe0, 0xe0, 0x76, 0x72, - 0x01, 0xea, 0x46, 0x59, + 0x9f, 0xe0, 0x54, 0x7c, + 0x80, 0xe0, 0x04, 0x72, + 0xa0, 0xe0, 0x40, 0x72, + 0xc0, 0xe0, 0x36, 0x72, + 0xe0, 0xe0, 0x70, 0x72, + 0x01, 0xea, 0x40, 0x59, 0x01, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x80, 0x33, 0x11, 0x7a, - 0x03, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf0, 0x41, + 0x80, 0x33, 0x0b, 0x7a, + 0x03, 0xea, 0x40, 0x59, 0x03, 0xea, 0x04, 0x00, - 0xee, 0x00, 0x18, 0x6a, + 0xee, 0x00, 0x12, 0x6a, 0x05, 0xea, 0xb4, 0x00, 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x60, 0x59, + 0x00, 0xe2, 0x5a, 0x59, 0xef, 0x96, 0xd5, 0x19, - 0x00, 0xe2, 0x28, 0x52, + 0x00, 0xe2, 0x22, 0x52, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x2e, 0x42, + 0x00, 0xe2, 0x28, 0x42, 0x01, 0x96, 0xd1, 0x30, 0x10, 0x80, 0x89, 0x31, 0x20, 0xea, 0x32, 0x00, 0xbf, 0x33, 0x67, 0x0a, - 0x10, 0x4c, 0x38, 0x6a, - 0x20, 0x19, 0x30, 0x6a, - 0x20, 0x19, 0x34, 0x6a, - 0x02, 0x4d, 0xf6, 0x69, + 0x10, 0x4c, 0x32, 0x6a, + 0x20, 0x19, 0x2a, 0x6a, + 0x20, 0x19, 0x2e, 0x6a, + 0x02, 0x4d, 0xf0, 0x69, 0x40, 0x33, 0x67, 0x02, - 0x00, 0xe2, 0xf6, 0x41, - 0x80, 0x33, 0xb7, 0x6a, + 0x00, 0xe2, 0xf0, 0x41, + 0x80, 0x33, 0xb1, 0x6a, 0x01, 0x44, 0x10, 0x33, 0x08, 0x92, 0x25, 0x03, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf0, 0x41, 0x10, 0xea, 0x80, 0x00, 0x01, 0x31, 0xc5, 0x31, - 0x80, 0xe2, 0x62, 0x62, - 0x10, 0x92, 0x87, 0x6a, + 0x80, 0xe2, 0x5c, 0x62, + 0x10, 0x92, 0x81, 0x6a, 0xc0, 0x94, 0xc5, 0x01, - 0x40, 0x92, 0x53, 0x6a, + 0x40, 0x92, 0x4d, 0x6a, 0xbf, 0xe2, 0xc4, 0x09, - 0x20, 0x92, 0x67, 0x7a, + 0x20, 0x92, 0x61, 0x7a, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xb8, 0x5b, - 0xa0, 0x36, 0x6f, 0x62, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x69, 0x62, 0x23, 0x92, 0x89, 0x08, - 0x00, 0xe2, 0xb8, 0x5b, - 0xa0, 0x36, 0x6f, 0x62, - 0x00, 0xa8, 0x66, 0x42, - 0xff, 0xe2, 0x66, 0x62, - 0x00, 0xe2, 0x86, 0x42, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x69, 0x62, + 0x00, 0xa8, 0x60, 0x42, + 0xff, 0xe2, 0x60, 0x62, + 0x00, 0xe2, 0x80, 0x42, 0x40, 0xea, 0x98, 0x00, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xb8, 0x5b, - 0xa0, 0x36, 0x45, 0x72, + 0x00, 0xe2, 0xb2, 0x5b, + 0xa0, 0x36, 0x3f, 0x72, 0x40, 0xea, 0x98, 0x00, 0x01, 0x31, 0x89, 0x32, 0x08, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xf6, 0x41, - 0xe0, 0xea, 0xd4, 0x5b, - 0x80, 0xe0, 0xc2, 0x6a, - 0x04, 0xe0, 0x68, 0x73, - 0x02, 0xe0, 0x9a, 0x73, - 0x00, 0xea, 0x20, 0x73, - 0x03, 0xe0, 0xaa, 0x73, - 0x23, 0xe0, 0x98, 0x72, - 0x08, 0xe0, 0xbe, 0x72, - 0x00, 0xe2, 0xb8, 0x5b, - 0x07, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf0, 0x41, + 0xe0, 0xea, 0xce, 0x5b, + 0x80, 0xe0, 0xbc, 0x6a, + 0x04, 0xe0, 0x62, 0x73, + 0x02, 0xe0, 0x94, 0x73, + 0x00, 0xea, 0x1a, 0x73, + 0x03, 0xe0, 0xa4, 0x73, + 0x23, 0xe0, 0x92, 0x72, + 0x08, 0xe0, 0xb8, 0x72, + 0x00, 0xe2, 0xb2, 0x5b, + 0x07, 0xea, 0x40, 0x59, 0x07, 0xea, 0x04, 0x00, - 0x08, 0x42, 0xf7, 0x71, - 0x04, 0x42, 0x95, 0x62, + 0x08, 0x42, 0xf1, 0x71, + 0x04, 0x42, 0x8f, 0x62, 0x01, 0x43, 0x89, 0x30, - 0x00, 0xe2, 0x86, 0x42, + 0x00, 0xe2, 0x80, 0x42, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0x86, 0x42, + 0x00, 0xe2, 0x80, 0x42, 0x01, 0x00, 0x60, 0x32, 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, @@ -345,20 +342,20 @@ 0x01, 0x64, 0xc0, 0x31, 0x00, 0x30, 0x3b, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x01, 0xe0, 0xbc, 0x7a, - 0xa0, 0xea, 0xca, 0x5b, - 0x01, 0xa0, 0xbc, 0x62, - 0x01, 0x84, 0xb1, 0x7a, - 0x01, 0x95, 0xbf, 0x6a, - 0x05, 0xea, 0x46, 0x59, + 0x01, 0xe0, 0xb6, 0x7a, + 0xa0, 0xea, 0xc4, 0x5b, + 0x01, 0xa0, 0xb6, 0x62, + 0x01, 0x84, 0xab, 0x7a, + 0x01, 0x95, 0xb9, 0x6a, + 0x05, 0xea, 0x40, 0x59, 0x05, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xbe, 0x42, - 0x03, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xb8, 0x42, + 0x03, 0xea, 0x40, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xbe, 0x42, - 0x07, 0xea, 0xdc, 0x5b, + 0x00, 0xe2, 0xb8, 0x42, + 0x07, 0xea, 0xd6, 0x5b, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf0, 0x41, 0x3f, 0xe0, 0x6a, 0x0a, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -369,54 +366,54 @@ 0x01, 0xea, 0xc6, 0x01, 0x02, 0xe2, 0xc8, 0x31, 0x02, 0xec, 0x40, 0x31, - 0xff, 0xa1, 0xde, 0x72, + 0xff, 0xa1, 0xd8, 0x72, 0x02, 0xe8, 0xda, 0x31, 0x02, 0xa0, 0x50, 0x31, - 0x00, 0xe2, 0x00, 0x43, + 0x00, 0xe2, 0xfa, 0x42, 0x80, 0x33, 0x67, 0x02, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xb8, 0x5b, + 0x00, 0xe2, 0xb2, 0x5b, 0x01, 0x33, 0x67, 0x02, - 0xe0, 0x36, 0x1b, 0x63, + 0xe0, 0x36, 0x15, 0x63, 0x02, 0x33, 0x67, 0x02, - 0x20, 0x46, 0x14, 0x63, + 0x20, 0x46, 0x0e, 0x63, 0xff, 0xea, 0x52, 0x09, - 0xa8, 0xea, 0xca, 0x5b, - 0x04, 0x92, 0xfb, 0x7a, + 0xa8, 0xea, 0xc4, 0x5b, + 0x04, 0x92, 0xf5, 0x7a, 0x01, 0x34, 0xc1, 0x31, - 0x00, 0x93, 0xfb, 0x62, + 0x00, 0x93, 0xf5, 0x62, 0x01, 0x35, 0xc1, 0x31, - 0x00, 0x94, 0x05, 0x73, + 0x00, 0x94, 0xff, 0x72, 0x01, 0xa9, 0x52, 0x11, - 0xff, 0xa9, 0xf0, 0x6a, - 0x00, 0xe2, 0x14, 0x43, + 0xff, 0xa9, 0xea, 0x6a, + 0x00, 0xe2, 0x0e, 0x43, 0x10, 0x33, 0x67, 0x02, - 0x04, 0x92, 0x15, 0x7b, + 0x04, 0x92, 0x0f, 0x7b, 0xfb, 0x92, 0x25, 0x0b, 0xff, 0xea, 0x66, 0x0a, - 0x01, 0xa4, 0x0f, 0x6b, + 0x01, 0xa4, 0x09, 0x6b, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x60, 0x59, - 0x10, 0x92, 0xbf, 0x7a, - 0xff, 0xea, 0xdc, 0x5b, - 0x00, 0xe2, 0xbe, 0x42, - 0x04, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0x5a, 0x59, + 0x10, 0x92, 0xb9, 0x7a, + 0xff, 0xea, 0xd6, 0x5b, + 0x00, 0xe2, 0xb8, 0x42, + 0x04, 0xea, 0x40, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xbe, 0x42, - 0x04, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xb8, 0x42, + 0x04, 0xea, 0x40, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x08, 0x92, 0xb7, 0x7a, - 0xc0, 0x33, 0x2b, 0x7b, - 0x80, 0x33, 0xb7, 0x6a, - 0xff, 0x88, 0x2b, 0x6b, - 0x40, 0x33, 0xb7, 0x6a, - 0x10, 0x92, 0x31, 0x7b, - 0x0a, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf0, 0x41, + 0x08, 0x92, 0xb1, 0x7a, + 0xc0, 0x33, 0x25, 0x7b, + 0x80, 0x33, 0xb1, 0x6a, + 0xff, 0x88, 0x25, 0x6b, + 0x40, 0x33, 0xb1, 0x6a, + 0x10, 0x92, 0x2b, 0x7b, + 0x0a, 0xea, 0x40, 0x59, 0x0a, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x50, 0x5b, - 0x00, 0xe2, 0x84, 0x43, - 0x50, 0x4b, 0x38, 0x6b, + 0x00, 0xe2, 0x4a, 0x5b, + 0x00, 0xe2, 0x7e, 0x43, + 0x50, 0x4b, 0x32, 0x6b, 0xbf, 0x3a, 0x74, 0x08, 0x01, 0xe0, 0xf4, 0x31, 0xff, 0xea, 0xc0, 0x09, @@ -430,21 +427,21 @@ 0x33, 0xea, 0x00, 0x00, 0x02, 0x42, 0x51, 0x31, 0xff, 0x90, 0x65, 0x68, - 0xff, 0x88, 0x5d, 0x6b, - 0x01, 0xa4, 0x59, 0x6b, - 0x02, 0xa4, 0x61, 0x6b, - 0x01, 0x84, 0x61, 0x7b, + 0xff, 0x88, 0x57, 0x6b, + 0x01, 0xa4, 0x53, 0x6b, + 0x02, 0xa4, 0x5b, 0x6b, + 0x01, 0x84, 0x5b, 0x7b, 0x02, 0x28, 0x19, 0x33, 0x02, 0xa8, 0x50, 0x36, - 0xff, 0x88, 0x61, 0x73, - 0x00, 0xe2, 0x34, 0x5b, + 0xff, 0x88, 0x5b, 0x73, + 0x00, 0xe2, 0x2e, 0x5b, 0x02, 0xa8, 0x20, 0x33, 0x02, 0x2c, 0x19, 0x33, 0x02, 0xa8, 0x58, 0x32, 0x04, 0xa4, 0x49, 0x07, - 0xc0, 0x33, 0xb7, 0x6a, + 0xc0, 0x33, 0xb1, 0x6a, 0x04, 0x92, 0x25, 0x03, - 0x20, 0x92, 0x85, 0x6b, + 0x20, 0x92, 0x7f, 0x6b, 0x02, 0xa8, 0x40, 0x31, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -459,56 +456,63 @@ 0xf7, 0x57, 0xae, 0x08, 0x08, 0xea, 0x98, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0xee, 0x00, 0x8e, 0x6b, + 0xee, 0x00, 0x88, 0x6b, 0x02, 0xea, 0xb4, 0x00, 0xc0, 0xea, 0x66, 0x02, - 0x09, 0x4c, 0x90, 0x7b, + 0x09, 0x4c, 0x8a, 0x7b, 0x01, 0xea, 0x6c, 0x02, 0x08, 0x4c, 0x06, 0x68, - 0x0b, 0xea, 0x46, 0x59, + 0x0b, 0xea, 0x40, 0x59, 0x0b, 0xea, 0x04, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0x20, 0x33, 0xf7, 0x79, - 0x00, 0xe2, 0xa2, 0x5b, - 0x00, 0xe2, 0xf6, 0x41, - 0x01, 0x84, 0xa7, 0x7b, + 0x20, 0x33, 0xf1, 0x79, + 0x00, 0xe2, 0x9c, 0x5b, + 0x00, 0xe2, 0xf0, 0x41, + 0x01, 0x84, 0xa1, 0x7b, 0x01, 0xa4, 0x49, 0x07, 0x08, 0x60, 0x30, 0x33, 0x08, 0x80, 0x41, 0x37, 0xdf, 0x33, 0x67, 0x0a, - 0xee, 0x00, 0xb4, 0x6b, + 0xee, 0x00, 0xae, 0x6b, 0x05, 0xea, 0xb4, 0x00, 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, - 0x00, 0xe2, 0x60, 0x59, - 0x00, 0xe2, 0xbe, 0x42, - 0xff, 0x42, 0xc4, 0x6b, - 0x01, 0x41, 0xb8, 0x6b, - 0x02, 0x41, 0xb8, 0x7b, - 0xff, 0x42, 0xc4, 0x6b, - 0x01, 0x41, 0xb8, 0x6b, - 0x02, 0x41, 0xb8, 0x7b, - 0xff, 0x42, 0xc4, 0x7b, - 0x04, 0x4c, 0xb8, 0x6b, + 0x00, 0xe2, 0x5a, 0x59, + 0x00, 0xe2, 0xb8, 0x42, + 0xff, 0x42, 0xbe, 0x6b, + 0x01, 0x41, 0xb2, 0x6b, + 0x02, 0x41, 0xb2, 0x7b, + 0xff, 0x42, 0xbe, 0x6b, + 0x01, 0x41, 0xb2, 0x6b, + 0x02, 0x41, 0xb2, 0x7b, + 0xff, 0x42, 0xbe, 0x7b, + 0x04, 0x4c, 0xb2, 0x6b, 0xe0, 0x41, 0x6c, 0x0e, 0x01, 0x44, 0xd4, 0x31, - 0xff, 0x42, 0xcc, 0x7b, - 0x04, 0x4c, 0xcc, 0x6b, + 0xff, 0x42, 0xc6, 0x7b, + 0x04, 0x4c, 0xc6, 0x6b, 0xe0, 0x41, 0x6c, 0x0a, - 0xe0, 0x36, 0xf7, 0x61, + 0xe0, 0x36, 0xf1, 0x61, 0xff, 0xea, 0xca, 0x09, 0x01, 0xe2, 0xc8, 0x31, 0x01, 0x46, 0xda, 0x35, 0x01, 0x44, 0xd4, 0x35, 0x10, 0xea, 0x80, 0x00, 0x01, 0xe2, 0x62, 0x36, - 0x04, 0xa6, 0xe4, 0x7b, + 0x04, 0xa6, 0xde, 0x7b, 0xff, 0xea, 0x5a, 0x09, 0xff, 0xea, 0x4c, 0x0d, - 0x01, 0xa6, 0x02, 0x6c, + 0x01, 0xa6, 0x0a, 0x6c, 0x10, 0xad, 0x64, 0x78, - 0x80, 0xad, 0xfa, 0x6b, + 0x80, 0xad, 0x02, 0x6c, 0x08, 0xad, 0x64, 0x68, + 0x20, 0x19, 0xf6, 0x7b, + 0x80, 0xea, 0xb2, 0x01, + 0x11, 0x00, 0x00, 0x10, + 0x02, 0xa6, 0xf2, 0x7b, + 0xff, 0xea, 0xb2, 0x0d, + 0x11, 0x00, 0x00, 0x10, + 0xff, 0xea, 0xb2, 0x09, 0x04, 0x84, 0xf9, 0x30, 0x00, 0xea, 0x08, 0x81, 0xff, 0xea, 0xd4, 0x09, @@ -533,7 +537,7 @@ 0x00, 0x86, 0x0d, 0x23, 0x00, 0x87, 0x0f, 0x23, 0x01, 0x84, 0xc5, 0x31, - 0x80, 0x83, 0x25, 0x7c, + 0x80, 0x83, 0x2d, 0x7c, 0x02, 0xe2, 0xc4, 0x01, 0xff, 0xea, 0x4c, 0x09, 0x01, 0xe2, 0x36, 0x30, @@ -544,75 +548,75 @@ 0xfe, 0xa6, 0x4c, 0x0d, 0x0b, 0x98, 0xe1, 0x30, 0xfd, 0xa4, 0x49, 0x09, - 0x80, 0xa3, 0x39, 0x7c, + 0x80, 0xa3, 0x41, 0x7c, 0x02, 0xa4, 0x48, 0x01, 0x01, 0xa4, 0x36, 0x30, 0xa8, 0xea, 0x32, 0x00, 0xfd, 0xa4, 0x49, 0x0b, 0x05, 0xa3, 0x07, 0x33, - 0x80, 0x83, 0x45, 0x6c, + 0x80, 0x83, 0x4d, 0x6c, 0x02, 0xea, 0x4c, 0x05, 0xff, 0xea, 0x4c, 0x0d, 0x00, 0xe2, 0x34, 0x59, - 0x02, 0xa6, 0xe6, 0x6b, + 0x02, 0xa6, 0xe0, 0x6b, 0x80, 0xf9, 0xf2, 0x05, - 0xc0, 0x33, 0x53, 0x7c, - 0x03, 0xea, 0x46, 0x59, + 0xc0, 0x33, 0x5b, 0x7c, + 0x03, 0xea, 0x40, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x20, 0x33, 0x77, 0x7c, - 0x01, 0x84, 0x5d, 0x6c, - 0x06, 0xea, 0x46, 0x59, + 0x20, 0x33, 0x7f, 0x7c, + 0x01, 0x84, 0x65, 0x6c, + 0x06, 0xea, 0x40, 0x59, 0x06, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x7a, 0x44, + 0x00, 0xe2, 0x82, 0x44, 0x01, 0x00, 0x60, 0x32, - 0xee, 0x00, 0x66, 0x6c, + 0xee, 0x00, 0x6e, 0x6c, 0x05, 0xea, 0xb4, 0x00, 0x33, 0xea, 0x3a, 0x59, 0x33, 0xea, 0x00, 0x00, 0x80, 0x3d, 0x7a, 0x00, - 0xfc, 0x42, 0x68, 0x7c, + 0xfc, 0x42, 0x70, 0x7c, 0x7f, 0x3d, 0x7a, 0x08, 0x00, 0x30, 0x3b, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x09, 0xea, 0x46, 0x59, + 0x09, 0xea, 0x40, 0x59, 0x09, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x01, 0xa4, 0x5d, 0x6c, - 0x00, 0xe2, 0x30, 0x5c, + 0x00, 0xe2, 0xf0, 0x41, + 0x01, 0xa4, 0x65, 0x6c, + 0x00, 0xe2, 0x38, 0x5c, 0x20, 0x33, 0x67, 0x02, 0x01, 0x00, 0x60, 0x32, - 0x02, 0xa6, 0x82, 0x7c, - 0x00, 0xe2, 0x46, 0x5c, + 0x02, 0xa6, 0x8a, 0x7c, + 0x00, 0xe2, 0x4e, 0x5c, 0x00, 0xe2, 0x56, 0x58, 0x00, 0xe2, 0x66, 0x58, 0x00, 0xe2, 0x3a, 0x58, 0x00, 0x30, 0x3b, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x20, 0x19, 0x82, 0x6c, - 0x00, 0xe2, 0xb2, 0x5c, - 0x04, 0x19, 0x9c, 0x6c, + 0x20, 0x19, 0x8a, 0x6c, + 0x00, 0xe2, 0xba, 0x5c, + 0x04, 0x19, 0xa4, 0x6c, 0x02, 0x19, 0x32, 0x00, - 0x01, 0x84, 0x9d, 0x7c, - 0x01, 0x1b, 0x96, 0x7c, - 0x01, 0x1a, 0x9c, 0x6c, - 0x00, 0xe2, 0x4c, 0x44, - 0x80, 0x4b, 0xa2, 0x6c, - 0x01, 0x4c, 0x9e, 0x7c, - 0x03, 0x42, 0x4c, 0x6c, - 0x00, 0xe2, 0xe0, 0x5b, + 0x01, 0x84, 0xa5, 0x7c, + 0x01, 0x1b, 0x9e, 0x7c, + 0x01, 0x1a, 0xa4, 0x6c, + 0x00, 0xe2, 0x54, 0x44, + 0x80, 0x4b, 0xaa, 0x6c, + 0x01, 0x4c, 0xa6, 0x7c, + 0x03, 0x42, 0x54, 0x6c, + 0x00, 0xe2, 0xda, 0x5b, 0x80, 0xf9, 0xf2, 0x01, - 0x04, 0x33, 0xf7, 0x79, - 0x00, 0xe2, 0xf6, 0x41, - 0x08, 0x5d, 0xba, 0x6c, + 0x04, 0x33, 0xf1, 0x79, + 0x00, 0xe2, 0xf0, 0x41, + 0x08, 0x5d, 0xc2, 0x6c, 0x00, 0xe2, 0x56, 0x58, 0x00, 0x30, 0x3b, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x02, 0x1b, 0xaa, 0x7c, - 0x08, 0x5d, 0xb8, 0x7c, + 0x02, 0x1b, 0xb2, 0x7c, + 0x08, 0x5d, 0xc0, 0x7c, 0x03, 0x68, 0x00, 0x37, 0x01, 0x84, 0x09, 0x07, - 0x80, 0x1b, 0xc4, 0x7c, - 0x80, 0x84, 0xc5, 0x6c, + 0x80, 0x1b, 0xcc, 0x7c, + 0x80, 0x84, 0xcd, 0x6c, 0xff, 0x85, 0x0b, 0x1b, 0xff, 0x86, 0x0d, 0x23, 0xff, 0x87, 0x0f, 0x23, @@ -624,161 +628,161 @@ 0xf9, 0xd9, 0xb2, 0x0d, 0x01, 0xd9, 0xb2, 0x05, 0x01, 0x52, 0x48, 0x31, - 0x20, 0xa4, 0xee, 0x7c, - 0x20, 0x5b, 0xee, 0x7c, - 0x80, 0xf9, 0xfc, 0x7c, + 0x20, 0xa4, 0xf6, 0x7c, + 0x20, 0x5b, 0xf6, 0x7c, + 0x80, 0xf9, 0x04, 0x7d, 0x02, 0xea, 0xb4, 0x00, 0x11, 0x00, 0x00, 0x10, - 0x04, 0x19, 0x08, 0x7d, + 0x04, 0x19, 0x10, 0x7d, 0xdf, 0x19, 0x32, 0x08, - 0x60, 0x5b, 0x08, 0x6d, - 0x01, 0x4c, 0xe2, 0x7c, + 0x60, 0x5b, 0x10, 0x6d, + 0x01, 0x4c, 0xea, 0x7c, 0x20, 0x19, 0x32, 0x00, 0x01, 0xd9, 0xb2, 0x05, 0x02, 0xea, 0xb4, 0x00, 0x01, 0xd9, 0xb2, 0x05, - 0x10, 0x5b, 0x00, 0x6d, - 0x08, 0x5b, 0x0a, 0x6d, - 0x20, 0x5b, 0xfa, 0x6c, - 0x02, 0x5b, 0x2a, 0x6d, - 0x0e, 0xea, 0x46, 0x59, + 0x10, 0x5b, 0x08, 0x6d, + 0x08, 0x5b, 0x12, 0x6d, + 0x20, 0x5b, 0x02, 0x6d, + 0x02, 0x5b, 0x32, 0x6d, + 0x0e, 0xea, 0x40, 0x59, 0x0e, 0xea, 0x04, 0x00, - 0x80, 0xf9, 0xea, 0x6c, + 0x80, 0xf9, 0xf2, 0x6c, 0xdf, 0x5c, 0xb8, 0x08, 0x01, 0xd9, 0xb2, 0x05, - 0x01, 0xa4, 0xe5, 0x6d, - 0x00, 0xe2, 0x30, 0x5c, - 0x00, 0xe2, 0x34, 0x5d, + 0x01, 0xa4, 0xed, 0x6d, + 0x00, 0xe2, 0x38, 0x5c, + 0x00, 0xe2, 0x3c, 0x5d, 0x01, 0x90, 0x21, 0x1b, 0x01, 0xd9, 0xb2, 0x05, - 0x00, 0xe2, 0x34, 0x5b, + 0x00, 0xe2, 0x2e, 0x5b, 0xf3, 0x96, 0xd5, 0x19, - 0x00, 0xe2, 0x18, 0x55, - 0x80, 0x96, 0x19, 0x6d, - 0x0f, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0x20, 0x55, + 0x80, 0x96, 0x21, 0x6d, + 0x0f, 0xea, 0x40, 0x59, 0x0f, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x20, 0x45, + 0x00, 0xe2, 0x28, 0x45, 0x04, 0x8c, 0xe1, 0x30, 0x01, 0xea, 0xf2, 0x00, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0xff, 0x97, 0x27, 0x7d, - 0x14, 0xea, 0x46, 0x59, + 0xff, 0x97, 0x2f, 0x7d, + 0x14, 0xea, 0x40, 0x59, 0x14, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x96, 0x5d, + 0x00, 0xe2, 0x9e, 0x5d, 0x01, 0xd9, 0xb2, 0x05, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x8e, 0x5d, + 0x00, 0xe2, 0x96, 0x5d, 0x01, 0xd9, 0xb2, 0x05, - 0x02, 0xa6, 0x44, 0x7d, + 0x02, 0xa6, 0x4c, 0x7d, 0x00, 0xe2, 0x34, 0x59, - 0x20, 0x5b, 0x52, 0x6d, - 0xfc, 0x42, 0x3e, 0x7d, - 0x10, 0x40, 0x40, 0x6d, - 0x20, 0x4d, 0x42, 0x7d, - 0x08, 0x5d, 0x52, 0x6d, - 0x02, 0xa6, 0xe6, 0x6b, + 0x20, 0x5b, 0x5a, 0x6d, + 0xfc, 0x42, 0x46, 0x7d, + 0x10, 0x40, 0x48, 0x6d, + 0x20, 0x4d, 0x4a, 0x7d, + 0x08, 0x5d, 0x5a, 0x6d, + 0x02, 0xa6, 0xe0, 0x6b, 0x00, 0xe2, 0x34, 0x59, - 0x20, 0x5b, 0x52, 0x6d, - 0x01, 0x1b, 0x72, 0x6d, - 0xfc, 0x42, 0x4e, 0x7d, - 0x10, 0x40, 0x50, 0x6d, + 0x20, 0x5b, 0x5a, 0x6d, + 0x01, 0x1b, 0x7a, 0x6d, + 0xfc, 0x42, 0x56, 0x7d, + 0x10, 0x40, 0x58, 0x6d, 0x20, 0x4d, 0x64, 0x78, 0x08, 0x5d, 0x64, 0x78, 0x02, 0x19, 0x32, 0x00, 0x01, 0x5b, 0x40, 0x31, - 0x00, 0xe2, 0xb2, 0x5c, - 0x00, 0xe2, 0xa2, 0x5b, + 0x00, 0xe2, 0xba, 0x5c, + 0x00, 0xe2, 0x9c, 0x5b, 0x20, 0xea, 0xb6, 0x00, - 0x00, 0xe2, 0xe0, 0x5b, + 0x00, 0xe2, 0xda, 0x5b, 0x20, 0x5c, 0xb8, 0x00, - 0x04, 0x19, 0x68, 0x6d, - 0x01, 0x1a, 0x68, 0x6d, + 0x04, 0x19, 0x70, 0x6d, + 0x01, 0x1a, 0x70, 0x6d, 0x00, 0xe2, 0x34, 0x59, 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, - 0x20, 0xa0, 0xcc, 0x7d, + 0x20, 0xa0, 0xd4, 0x7d, 0xff, 0x90, 0x21, 0x1b, - 0x08, 0x92, 0x45, 0x6b, + 0x08, 0x92, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x01, 0xa4, 0x49, 0x03, - 0x40, 0x5b, 0x82, 0x6d, + 0x40, 0x5b, 0x8a, 0x6d, 0x00, 0xe2, 0x34, 0x59, - 0x40, 0x5b, 0x82, 0x6d, - 0x04, 0x5d, 0xe6, 0x7d, - 0x01, 0x1a, 0xe6, 0x7d, + 0x40, 0x5b, 0x8a, 0x6d, + 0x04, 0x5d, 0xee, 0x7d, + 0x01, 0x1a, 0xee, 0x7d, 0x20, 0x4d, 0x64, 0x78, - 0x40, 0x5b, 0xcc, 0x7d, - 0x04, 0x5d, 0xe6, 0x7d, - 0x01, 0x1a, 0xe6, 0x7d, + 0x40, 0x5b, 0xd4, 0x7d, + 0x04, 0x5d, 0xee, 0x7d, + 0x01, 0x1a, 0xee, 0x7d, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0x90, 0x21, 0x1b, - 0x08, 0x92, 0x45, 0x6b, + 0x08, 0x92, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x00, 0xe2, 0x34, 0x59, 0x01, 0x1b, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, 0x02, 0xea, 0xb4, 0x04, 0x00, 0xe2, 0x34, 0x59, - 0x01, 0x1b, 0xaa, 0x6d, - 0x40, 0x5b, 0xb8, 0x7d, - 0x01, 0x1b, 0xaa, 0x6d, + 0x01, 0x1b, 0xb2, 0x6d, + 0x40, 0x5b, 0xc0, 0x7d, + 0x01, 0x1b, 0xb2, 0x6d, 0x02, 0x19, 0x32, 0x00, 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0xea, 0x10, 0x03, 0x08, 0x92, 0x25, 0x03, - 0x00, 0xe2, 0x44, 0x43, - 0x01, 0x1a, 0xb4, 0x7d, - 0x40, 0x5b, 0xb0, 0x7d, - 0x01, 0x1a, 0x9e, 0x6d, + 0x00, 0xe2, 0x3e, 0x43, + 0x01, 0x1a, 0xbc, 0x7d, + 0x40, 0x5b, 0xb8, 0x7d, + 0x01, 0x1a, 0xa6, 0x6d, 0xfc, 0x42, 0x64, 0x78, - 0x01, 0x1a, 0xb8, 0x6d, - 0x10, 0xea, 0x46, 0x59, + 0x01, 0x1a, 0xc0, 0x6d, + 0x10, 0xea, 0x40, 0x59, 0x10, 0xea, 0x04, 0x00, 0xfc, 0x42, 0x64, 0x78, - 0x10, 0x40, 0xbe, 0x6d, + 0x10, 0x40, 0xc6, 0x6d, 0x20, 0x4d, 0x64, 0x78, - 0x40, 0x5b, 0x9e, 0x6d, + 0x40, 0x5b, 0xa6, 0x6d, 0x01, 0x1a, 0x64, 0x78, 0x01, 0x90, 0x21, 0x1b, 0x30, 0x3f, 0xc0, 0x09, 0x30, 0xe0, 0x64, 0x60, 0x40, 0x4b, 0x64, 0x68, 0xff, 0xea, 0x52, 0x01, - 0xee, 0x00, 0xd4, 0x6d, + 0xee, 0x00, 0xdc, 0x6d, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0x90, 0x21, 0x1b, 0x02, 0xea, 0xb4, 0x00, 0x20, 0xea, 0x9a, 0x00, - 0xf3, 0x42, 0xde, 0x6d, - 0x12, 0xea, 0x46, 0x59, + 0xf3, 0x42, 0xe6, 0x6d, + 0x12, 0xea, 0x40, 0x59, 0x12, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x0d, 0xea, 0x46, 0x59, + 0x00, 0xe2, 0xf0, 0x41, + 0x0d, 0xea, 0x40, 0x59, 0x0d, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf0, 0x41, 0x01, 0x90, 0x21, 0x1b, - 0x11, 0xea, 0x46, 0x59, + 0x11, 0xea, 0x40, 0x59, 0x11, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x34, 0x5b, + 0x00, 0xe2, 0x2e, 0x5b, 0x08, 0x5a, 0xb4, 0x00, - 0x00, 0xe2, 0x0c, 0x5e, + 0x00, 0xe2, 0x14, 0x5e, 0xa8, 0xea, 0x32, 0x00, 0x00, 0xe2, 0x34, 0x59, - 0x80, 0x1a, 0xfa, 0x7d, - 0x00, 0xe2, 0x0c, 0x5e, + 0x80, 0x1a, 0x02, 0x7e, + 0x00, 0xe2, 0x14, 0x5e, 0x80, 0x19, 0x32, 0x00, - 0x40, 0x5b, 0x00, 0x6e, - 0x08, 0x5a, 0x00, 0x7e, + 0x40, 0x5b, 0x08, 0x6e, + 0x08, 0x5a, 0x08, 0x7e, 0x20, 0x4d, 0x64, 0x78, 0x02, 0x84, 0x09, 0x03, - 0x40, 0x5b, 0xcc, 0x7d, + 0x40, 0x5b, 0xd4, 0x7d, 0xff, 0x90, 0x21, 0x1b, 0x80, 0xf9, 0xf2, 0x01, - 0x08, 0x92, 0x45, 0x6b, + 0x08, 0x92, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x01, 0x38, 0xe1, 0x30, 0x05, 0x39, 0xe3, 0x98, @@ -815,7 +819,7 @@ static int ahd_patch21_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_RTI) == 0); + return ((ahd->flags & AHD_INITIATORROLE) != 0); } static ahd_patch_func_t ahd_patch20_func; @@ -823,7 +827,7 @@ static int ahd_patch20_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_INITIATORROLE) != 0); + return ((ahd->flags & AHD_TARGETROLE) != 0); } static ahd_patch_func_t ahd_patch19_func; @@ -831,7 +835,7 @@ static int ahd_patch19_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_TARGETROLE) != 0); + return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); } static ahd_patch_func_t ahd_patch18_func; @@ -839,7 +843,7 @@ static int ahd_patch18_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); + return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0); } static ahd_patch_func_t ahd_patch17_func; @@ -847,7 +851,7 @@ static int ahd_patch17_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) != 0); + return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0); } static ahd_patch_func_t ahd_patch16_func; @@ -855,7 +859,7 @@ static int ahd_patch16_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_39BIT_ADDRESSING) != 0); + return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0); } static ahd_patch_func_t ahd_patch15_func; @@ -863,7 +867,7 @@ static int ahd_patch15_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_64BIT_ADDRESSING) != 0); + return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0); } static ahd_patch_func_t ahd_patch14_func; @@ -871,7 +875,7 @@ static int ahd_patch14_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_NEW_DFCNTRL_OPTS) == 0); + return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); } static ahd_patch_func_t ahd_patch13_func; @@ -879,7 +883,7 @@ static int ahd_patch13_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); + return ((ahd->features & AHD_RTI) == 0); } static ahd_patch_func_t ahd_patch12_func; @@ -1016,136 +1020,138 @@ { ahd_patch2_func, 65, 1, 2 }, { ahd_patch0_func, 66, 1, 1 }, { ahd_patch4_func, 102, 1, 1 }, - { ahd_patch2_func, 157, 6, 1 }, - { ahd_patch1_func, 163, 2, 1 }, - { ahd_patch5_func, 165, 1, 1 }, - { ahd_patch2_func, 174, 1, 2 }, - { ahd_patch0_func, 175, 1, 1 }, - { ahd_patch6_func, 176, 2, 2 }, - { ahd_patch0_func, 178, 6, 3 }, - { ahd_patch2_func, 181, 1, 2 }, - { ahd_patch0_func, 182, 1, 1 }, - { ahd_patch2_func, 185, 1, 2 }, - { ahd_patch0_func, 186, 1, 1 }, - { ahd_patch3_func, 188, 1, 1 }, - { ahd_patch7_func, 189, 3, 1 }, - { ahd_patch3_func, 198, 1, 1 }, - { ahd_patch5_func, 199, 16, 2 }, - { ahd_patch0_func, 215, 1, 1 }, - { ahd_patch8_func, 235, 2, 1 }, - { ahd_patch1_func, 239, 1, 2 }, - { ahd_patch0_func, 240, 1, 1 }, - { ahd_patch7_func, 243, 3, 1 }, - { ahd_patch1_func, 258, 1, 2 }, - { ahd_patch0_func, 259, 1, 1 }, - { ahd_patch1_func, 262, 1, 2 }, - { ahd_patch0_func, 263, 1, 1 }, - { ahd_patch2_func, 266, 1, 2 }, - { ahd_patch0_func, 267, 1, 1 }, - { ahd_patch9_func, 280, 2, 2 }, - { ahd_patch0_func, 282, 1, 1 }, - { ahd_patch1_func, 324, 1, 2 }, - { ahd_patch0_func, 325, 1, 1 }, - { ahd_patch2_func, 333, 1, 2 }, - { ahd_patch0_func, 334, 1, 1 }, - { ahd_patch2_func, 337, 1, 2 }, - { ahd_patch0_func, 338, 1, 1 }, + { ahd_patch2_func, 157, 3, 1 }, + { ahd_patch1_func, 160, 2, 1 }, + { ahd_patch5_func, 162, 1, 1 }, + { ahd_patch2_func, 171, 1, 2 }, + { ahd_patch0_func, 172, 1, 1 }, + { ahd_patch6_func, 173, 2, 2 }, + { ahd_patch0_func, 175, 6, 3 }, + { ahd_patch2_func, 178, 1, 2 }, + { ahd_patch0_func, 179, 1, 1 }, + { ahd_patch2_func, 182, 1, 2 }, + { ahd_patch0_func, 183, 1, 1 }, + { ahd_patch3_func, 185, 1, 1 }, + { ahd_patch7_func, 186, 3, 1 }, + { ahd_patch3_func, 195, 1, 1 }, + { ahd_patch5_func, 196, 16, 2 }, + { ahd_patch0_func, 212, 1, 1 }, + { ahd_patch8_func, 232, 2, 1 }, + { ahd_patch1_func, 236, 1, 2 }, + { ahd_patch0_func, 237, 1, 1 }, + { ahd_patch7_func, 240, 3, 1 }, + { ahd_patch1_func, 255, 1, 2 }, + { ahd_patch0_func, 256, 1, 1 }, + { ahd_patch1_func, 259, 1, 2 }, + { ahd_patch0_func, 260, 1, 1 }, + { ahd_patch2_func, 263, 1, 2 }, + { ahd_patch0_func, 264, 1, 1 }, + { ahd_patch9_func, 277, 2, 2 }, + { ahd_patch0_func, 279, 1, 1 }, + { ahd_patch1_func, 321, 1, 2 }, + { ahd_patch0_func, 322, 1, 1 }, + { ahd_patch2_func, 330, 1, 2 }, + { ahd_patch0_func, 331, 1, 1 }, + { ahd_patch2_func, 334, 1, 2 }, + { ahd_patch0_func, 335, 1, 1 }, + { ahd_patch1_func, 341, 1, 2 }, + { ahd_patch0_func, 342, 1, 1 }, { ahd_patch1_func, 344, 1, 2 }, { ahd_patch0_func, 345, 1, 1 }, - { ahd_patch1_func, 347, 1, 2 }, - { ahd_patch0_func, 348, 1, 1 }, + { ahd_patch10_func, 364, 1, 1 }, { ahd_patch10_func, 367, 1, 1 }, - { ahd_patch10_func, 370, 1, 1 }, - { ahd_patch10_func, 372, 1, 1 }, - { ahd_patch10_func, 384, 1, 1 }, + { ahd_patch10_func, 369, 1, 1 }, + { ahd_patch10_func, 381, 1, 1 }, + { ahd_patch1_func, 391, 1, 2 }, + { ahd_patch0_func, 392, 1, 1 }, { ahd_patch1_func, 394, 1, 2 }, { ahd_patch0_func, 395, 1, 1 }, - { ahd_patch1_func, 397, 1, 2 }, - { ahd_patch0_func, 398, 1, 1 }, - { ahd_patch1_func, 406, 1, 2 }, - { ahd_patch0_func, 407, 1, 1 }, - { ahd_patch2_func, 420, 1, 2 }, - { ahd_patch0_func, 421, 1, 1 }, - { ahd_patch11_func, 451, 1, 1 }, - { ahd_patch1_func, 459, 1, 2 }, - { ahd_patch0_func, 460, 1, 1 }, - { ahd_patch2_func, 472, 1, 2 }, - { ahd_patch0_func, 473, 1, 1 }, - { ahd_patch12_func, 476, 6, 2 }, - { ahd_patch0_func, 482, 1, 1 }, - { ahd_patch13_func, 505, 1, 1 }, - { ahd_patch14_func, 514, 1, 1 }, - { ahd_patch15_func, 515, 1, 2 }, - { ahd_patch0_func, 516, 1, 1 }, - { ahd_patch16_func, 519, 1, 1 }, - { ahd_patch15_func, 520, 1, 1 }, - { ahd_patch17_func, 531, 1, 2 }, - { ahd_patch0_func, 532, 1, 1 }, - { ahd_patch1_func, 551, 1, 2 }, - { ahd_patch0_func, 552, 1, 1 }, + { ahd_patch1_func, 403, 1, 2 }, + { ahd_patch0_func, 404, 1, 1 }, + { ahd_patch2_func, 417, 1, 2 }, + { ahd_patch0_func, 418, 1, 1 }, + { ahd_patch11_func, 448, 1, 1 }, + { ahd_patch1_func, 456, 1, 2 }, + { ahd_patch0_func, 457, 1, 1 }, + { ahd_patch2_func, 469, 1, 2 }, + { ahd_patch0_func, 470, 1, 1 }, + { ahd_patch12_func, 473, 6, 2 }, + { ahd_patch0_func, 479, 1, 1 }, + { ahd_patch13_func, 500, 7, 1 }, + { ahd_patch14_func, 509, 1, 1 }, + { ahd_patch15_func, 518, 1, 1 }, + { ahd_patch16_func, 519, 1, 2 }, + { ahd_patch0_func, 520, 1, 1 }, + { ahd_patch17_func, 523, 1, 1 }, + { ahd_patch16_func, 524, 1, 1 }, + { ahd_patch18_func, 535, 1, 2 }, + { ahd_patch0_func, 536, 1, 1 }, { ahd_patch1_func, 555, 1, 2 }, { ahd_patch0_func, 556, 1, 1 }, - { ahd_patch2_func, 561, 1, 2 }, - { ahd_patch0_func, 562, 1, 1 }, - { ahd_patch2_func, 566, 1, 2 }, - { ahd_patch0_func, 567, 1, 1 }, - { ahd_patch1_func, 568, 1, 2 }, - { ahd_patch0_func, 569, 1, 1 }, - { ahd_patch2_func, 580, 1, 2 }, - { ahd_patch0_func, 581, 1, 1 }, - { ahd_patch18_func, 585, 1, 1 }, - { ahd_patch19_func, 590, 1, 1 }, - { ahd_patch20_func, 591, 2, 1 }, - { ahd_patch19_func, 595, 1, 2 }, - { ahd_patch0_func, 596, 1, 1 }, - { ahd_patch2_func, 599, 1, 2 }, + { ahd_patch1_func, 559, 1, 2 }, + { ahd_patch0_func, 560, 1, 1 }, + { ahd_patch2_func, 565, 1, 2 }, + { ahd_patch0_func, 566, 1, 1 }, + { ahd_patch2_func, 570, 1, 2 }, + { ahd_patch0_func, 571, 1, 1 }, + { ahd_patch1_func, 572, 1, 2 }, + { ahd_patch0_func, 573, 1, 1 }, + { ahd_patch2_func, 584, 1, 2 }, + { ahd_patch0_func, 585, 1, 1 }, + { ahd_patch19_func, 589, 1, 1 }, + { ahd_patch20_func, 594, 1, 1 }, + { ahd_patch21_func, 595, 2, 1 }, + { ahd_patch20_func, 599, 1, 2 }, { ahd_patch0_func, 600, 1, 1 }, - { ahd_patch2_func, 615, 1, 2 }, - { ahd_patch0_func, 616, 1, 1 }, - { ahd_patch21_func, 617, 14, 1 }, - { ahd_patch1_func, 635, 1, 2 }, - { ahd_patch0_func, 636, 1, 1 }, - { ahd_patch21_func, 637, 1, 1 }, - { ahd_patch1_func, 649, 1, 2 }, - { ahd_patch0_func, 650, 1, 1 }, - { ahd_patch1_func, 657, 1, 2 }, - { ahd_patch0_func, 658, 1, 1 }, - { ahd_patch18_func, 681, 1, 1 }, - { ahd_patch18_func, 719, 1, 1 }, - { ahd_patch1_func, 730, 1, 2 }, - { ahd_patch0_func, 731, 1, 1 }, - { ahd_patch1_func, 748, 1, 2 }, - { ahd_patch0_func, 749, 1, 1 }, - { ahd_patch1_func, 751, 1, 2 }, - { ahd_patch0_func, 752, 1, 1 }, + { ahd_patch2_func, 603, 1, 2 }, + { ahd_patch0_func, 604, 1, 1 }, + { ahd_patch2_func, 619, 1, 2 }, + { ahd_patch0_func, 620, 1, 1 }, + { ahd_patch13_func, 621, 14, 1 }, + { ahd_patch1_func, 639, 1, 2 }, + { ahd_patch0_func, 640, 1, 1 }, + { ahd_patch13_func, 641, 1, 1 }, + { ahd_patch1_func, 653, 1, 2 }, + { ahd_patch0_func, 654, 1, 1 }, + { ahd_patch1_func, 661, 1, 2 }, + { ahd_patch0_func, 662, 1, 1 }, + { ahd_patch19_func, 685, 1, 1 }, + { ahd_patch19_func, 723, 1, 1 }, + { ahd_patch1_func, 734, 1, 2 }, + { ahd_patch0_func, 735, 1, 1 }, + { ahd_patch1_func, 752, 1, 2 }, + { ahd_patch0_func, 753, 1, 1 }, { ahd_patch1_func, 755, 1, 2 }, { ahd_patch0_func, 756, 1, 1 }, - { ahd_patch22_func, 758, 1, 2 }, - { ahd_patch0_func, 759, 2, 1 }, - { ahd_patch23_func, 762, 4, 2 }, - { ahd_patch0_func, 766, 1, 1 }, - { ahd_patch23_func, 774, 11, 1 } + { ahd_patch1_func, 759, 1, 2 }, + { ahd_patch0_func, 760, 1, 1 }, + { ahd_patch22_func, 762, 1, 2 }, + { ahd_patch0_func, 763, 2, 1 }, + { ahd_patch23_func, 766, 4, 2 }, + { ahd_patch0_func, 770, 1, 1 }, + { ahd_patch23_func, 778, 11, 1 } }; static struct cs { uint16_t begin; uint16_t end; } critical_sections[] = { - { 11, 12 }, + { 10, 12 }, { 13, 14 }, { 31, 42 }, { 45, 47 }, { 49, 50 }, { 56, 78 }, { 96, 123 }, - { 124, 152 }, + { 124, 154 }, { 154, 157 }, - { 165, 173 }, - { 198, 249 }, - { 428, 430 }, - { 433, 436 }, - { 681, 711 }, - { 721, 725 } + { 162, 170 }, + { 195, 246 }, + { 407, 415 }, + { 425, 427 }, + { 430, 433 }, + { 685, 715 }, + { 725, 729 } }; static const int num_critical_sections = sizeof(critical_sections) ==== //depot/aic7xxx/aic7xxx/aic7xxx.c#147 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c ==== --- /tmp/tmp.26963.7 2004-09-27 13:31:43.736464528 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_core.c 2004-01-16 17:59:19.000000000 -0500 @@ -37,7 +37,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#147 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#148 $ */ #ifdef __linux__ @@ -5525,7 +5525,7 @@ if (cstat != CAM_REQ_CMP) aic_freeze_scb(scb); if ((scb->flags & SCB_ACTIVE) == 0) - printf("Inactive SCB in Waiting List\n"); + printf("Inactive SCB in Wait List\n"); ahc_done(ahc, scb); /* FALLTHROUGH */ } @@ -5631,8 +5631,6 @@ cstat = aic_get_transaction_status(scb); if (cstat != CAM_REQ_CMP) aic_freeze_scb(scb); - if ((scb->flags & SCB_ACTIVE) == 0) - printf("Inactive SCB in untaggedQ\n"); ahc_done(ahc, scb); break; } ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#259 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c ==== --- /tmp/tmp.26963.8 2004-09-27 13:31:44.410362080 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aic7xxx_osm.c 2004-01-23 13:16:04.000000000 -0500 @@ -1,7 +1,7 @@ /* * Adaptec AIC7xxx device driver for Linux. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#259 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#262 $ * * Copyright (c) 1994 John Aycock * The University of Calgary Department of Computer Science. @@ -1635,16 +1635,8 @@ *((struct ahc_softc **)host->hostdata) = ahc; ahc_lock(ahc, &s); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) - scsi_assign_lock(host, &ahc->platform_data->spin_lock); -#elif AHC_SCSI_HAS_HOST_LOCK != 0 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) - host->host_lock = &ahc->platform_data->spin_lock; -#else - host->lock = &ahc->platform_data->spin_lock; -#endif -#endif ahc->platform_data->host = host; + aic_assign_host_lock(ahc); host->can_queue = AHC_MAX_QUEUE; host->cmd_per_lun = 2; /* XXX No way to communicate the ID for multiple channels */ @@ -2450,13 +2442,13 @@ * ahc host lock held. For other kernels, the * io_request_lock must be held. */ -#if AHC_SCSI_HAS_HOST_LOCK != 0 +#if AIC_SCSI_HAS_HOST_LOCK != 0 ahc_lock(ahc, &s); #else spin_lock_irqsave(&io_request_lock, s); #endif ahc_linux_queue(cmd, ahc_linux_dv_complete); -#if AHC_SCSI_HAS_HOST_LOCK != 0 +#if AIC_SCSI_HAS_HOST_LOCK != 0 ahc_unlock(ahc, &s); #else spin_unlock_irqrestore(&io_request_lock, s); @@ -3643,6 +3635,28 @@ if ((tstate->auto_negotiate & mask) != 0) { scb->flags |= SCB_AUTO_NEGOTIATE; scb->hscb->control |= MK_MESSAGE; + } else if (cmd->cmnd[0] == INQUIRY + && (tinfo->curr.offset != 0 + || tinfo->curr.width != MSG_EXT_WDTR_BUS_8_BIT)) { + /* + * The SCSI spec requires inquiry + * commands to complete without + * reporting unit attention conditions. + * Because of this, an inquiry command + * that occurs just after a device is + * reset will result in a data phase + * with mismatched negotiated rates. + * The core already forces a renegotiation + * for reset events that are visible to + * our controller or that we initiate, + * but a third party device reset or a + * hot-plug insertion can still cause this + * issue. Therefore, we force a re-negotiation + * for every inquiry command unless we + * are async. + */ + scb->flags |= SCB_NEGOTIATE; + scb->hscb->control |= MK_MESSAGE; } if ((dev->flags & (AIC_DEV_Q_TAGGED|AIC_DEV_Q_BASIC)) != 0) { @@ -4068,13 +4082,17 @@ untagged_q = &(ahc->untagged_queues[target_offset]); TAILQ_REMOVE(untagged_q, scb, links.tqe); ahc_run_untagged_queue(ahc, untagged_q); - } - - if ((scb->flags & SCB_ACTIVE) == 0) { + } else if ((scb->flags & SCB_ACTIVE) == 0) { + /* + * Transactions aborted from the untagged queue may + * not have been dispatched to the controller, so + * only check the SCB_ACTIVE flag for tagged transactions. + */ printf("SCB %d done'd twice\n", scb->hscb->tag); ahc_dump_card_state(ahc); panic("Stopping for safety"); } + cmd = scb->io_ctx; dev = scb->platform_data->dev; dev->active--; ==== //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aiclib.h#31 - /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aiclib.h ==== --- /tmp/tmp.26963.9 2004-09-27 13:31:44.733312984 -0400 +++ /home/luben/projects/linux/2.6/linux-2.5/drivers/scsi/aic7xxx/aiclib.h 2004-01-23 13:30:13.000000000 -0500 @@ -357,13 +357,14 @@ #define AIC_SCSI_HAS_HOST_LOCK 1 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) -#define aic_assign_host_lock(aic) \ - scsi_assign_lock((aic)->host, &(aic)->spin_lock); +#define aic_assign_host_lock(aic) \ + scsi_assign_lock((aic)->platform_data->host, \ + &(aic)->platform_data->spin_lock); #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \ && defined(RED_HAT_LINUX_KERNEL) -#define aic_assign_host_lock(aic) \ -do { \ - (aic)->host->host_lock = &(aic)->spin_lock; \ +#define aic_assign_host_lock(aic) \ +do { \ + (aic)->host->host_lock = &(aic)->platform_data->spin_lock; \ } while (0) #else #define aic_assign_host_lock(aic) \