diff options
| author | Justin T. Gibbs <gibbs@overdrive.btc.adaptec.com> | 2003-05-20 03:15:50 -0600 |
|---|---|---|
| committer | Justin T. Gibbs <gibbs@overdrive.btc.adaptec.com> | 2003-05-20 03:15:50 -0600 |
| commit | 4548e1119e6325c0fa9c94433dff5c3f8073c07e (patch) | |
| tree | e8cae3f25979754b3a42d894855119ac43bf2c3c | |
| parent | ace40f5723c1aee9cb19456a0ceb49b2885d0940 (diff) | |
| parent | 06d7b0f99b9b58a4226fd89bc0da4d401de1d9b0 (diff) | |
Merge http://linux.bkbits.net/linux-2.5
into overdrive.btc.adaptec.com:/usr/home/gibbs/bk/linux-2.5
| -rw-r--r-- | Documentation/scsi/aic7xxx.txt | 5 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx.h | 34 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx.reg | 20 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx.seq | 37 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_core.c | 75 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_inline.h | 6 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_osm.c | 45 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_osm.h | 4 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_osm_pci.c | 20 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_pci.c | 75 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_reg.h_shipped | 42 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped | 22 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic79xx_seq.h_shipped | 892 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm.c | 60 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm.h | 8 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_osm_pci.c | 9 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aic7xxx_pci.c | 6 | ||||
| -rw-r--r-- | drivers/scsi/aic7xxx/aiclib.h | 9 |
18 files changed, 698 insertions, 671 deletions
diff --git a/Documentation/scsi/aic7xxx.txt b/Documentation/scsi/aic7xxx.txt index 5e8fe57ff749..4e88255e27e9 100644 --- a/Documentation/scsi/aic7xxx.txt +++ b/Documentation/scsi/aic7xxx.txt @@ -132,6 +132,11 @@ The following information is available in this file: 2. Version History + 6.2.34 - Fix locking regression instroduced in 6.2.29 that + could cuase a lock order reversal between the io_request_lock + and our per-softc lock. This was only possible on RH9, + SuSE, and kernel.org 2.4.X kernels. + 6.2.33 - Dynamically disable PCI parity error reporting after 10 errors are reported to the user. These errors are the result of some other device issuing PCI transactions diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h index 4bbbdbbabafd..43abefabdec9 100644 --- a/drivers/scsi/aic7xxx/aic79xx.h +++ b/drivers/scsi/aic7xxx/aic79xx.h @@ -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.h#89 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#90 $ * * $FreeBSD$ */ @@ -1225,20 +1225,20 @@ struct ahd_softc { int seltime; /* - * Interrupt coalessing settings. + * Interrupt coalescing settings. */ -#define AHD_INT_COALESSING_TIMER_DEFAULT 250 /*us*/ -#define AHD_INT_COALESSING_MAXCMDS_DEFAULT 10 -#define AHD_INT_COALESSING_MAXCMDS_MAX 127 -#define AHD_INT_COALESSING_MINCMDS_DEFAULT 5 -#define AHD_INT_COALESSING_MINCMDS_MAX 127 -#define AHD_INT_COALESSING_THRESHOLD_DEFAULT 2000 -#define AHD_INT_COALESSING_STOP_THRESHOLD_DEFAULT 1000 - u_int int_coalessing_timer; - u_int int_coalessing_maxcmds; - u_int int_coalessing_mincmds; - u_int int_coalessing_threshold; - u_int int_coalessing_stop_threshold; +#define AHD_INT_COALESCING_TIMER_DEFAULT 250 /*us*/ +#define AHD_INT_COALESCING_MAXCMDS_DEFAULT 10 +#define AHD_INT_COALESCING_MAXCMDS_MAX 127 +#define AHD_INT_COALESCING_MINCMDS_DEFAULT 5 +#define AHD_INT_COALESCING_MINCMDS_MAX 127 +#define AHD_INT_COALESCING_THRESHOLD_DEFAULT 2000 +#define AHD_INT_COALESCING_STOP_THRESHOLD_DEFAULT 1000 + u_int int_coalescing_timer; + u_int int_coalescing_maxcmds; + u_int int_coalescing_mincmds; + u_int int_coalescing_threshold; + u_int int_coalescing_stop_threshold; uint16_t user_discenable;/* Disconnection allowed */ uint16_t user_tagenable;/* Tagged Queuing allowed */ @@ -1362,11 +1362,11 @@ int ahd_parse_vpddata(struct ahd_softc *ahd, int ahd_parse_cfgdata(struct ahd_softc *ahd, struct seeprom_config *sc); void ahd_intr_enable(struct ahd_softc *ahd, int enable); -void ahd_update_coalessing_values(struct ahd_softc *ahd, +void ahd_update_coalescing_values(struct ahd_softc *ahd, u_int timer, u_int maxcmds, u_int mincmds); -void ahd_enable_coalessing(struct ahd_softc *ahd, +void ahd_enable_coalescing(struct ahd_softc *ahd, int enable); void ahd_pause_and_flushwork(struct ahd_softc *ahd); int ahd_suspend(struct ahd_softc *ahd); @@ -1514,7 +1514,7 @@ extern uint32_t ahd_debug; #define AHD_SHOW_QUEUE 0x02000 #define AHD_SHOW_TQIN 0x04000 #define AHD_SHOW_SG 0x08000 -#define AHD_SHOW_INT_COALESSING 0x10000 +#define AHD_SHOW_INT_COALESCING 0x10000 #define AHD_DEBUG_SEQUENCER 0x20000 #endif void ahd_print_scb(struct scb *scb); diff --git a/drivers/scsi/aic7xxx/aic79xx.reg b/drivers/scsi/aic7xxx/aic79xx.reg index c5e4521b37e9..14f6aa5bd988 100644 --- a/drivers/scsi/aic7xxx/aic79xx.reg +++ b/drivers/scsi/aic7xxx/aic79xx.reg @@ -39,7 +39,7 @@ * * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#68 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling @@ -286,7 +286,7 @@ register HS_MAILBOX { address 0x00B access_mode RW mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */ - mask ENINT_COALESS 0x40 /* Perform interrupt coalessing */ + mask ENINT_COALESCE 0x40 /* Perform interrupt coalescing */ } /* @@ -3704,28 +3704,28 @@ scratch_ram { } /* - * The maximum amount of time to wait, when interrupt coalessing + * The maximum amount of time to wait, when interrupt coalescing * is enabled, before issueing a CMDCMPLT interrupt for a completed * command. */ - INT_COALESSING_TIMER { + INT_COALESCING_TIMER { size 2 } /* - * The maximum number of commands to coaless into a single interrupt. + * The maximum number of commands to coalesce into a single interrupt. * Actually the 2's complement of that value to simplify sequencer * code. */ - INT_COALESSING_MAXCMDS { + INT_COALESCING_MAXCMDS { size 1 } /* * The minimum number of commands still outstanding required - * to continue coalessing (2's complement of value). + * to continue coalescing (2's complement of value). */ - INT_COALESSING_MINCMDS { + INT_COALESCING_MINCMDS { size 1 } @@ -3737,9 +3737,9 @@ scratch_ram { } /* - * The count of commands that have been coalessed. + * The count of commands that have been coalesced. */ - INT_COALESSING_CMDCOUNT { + INT_COALESCING_CMDCOUNT { size 1 } diff --git a/drivers/scsi/aic7xxx/aic79xx.seq b/drivers/scsi/aic7xxx/aic79xx.seq index cbc810117edc..86116a34e167 100644 --- a/drivers/scsi/aic7xxx/aic79xx.seq +++ b/drivers/scsi/aic7xxx/aic79xx.seq @@ -40,7 +40,7 @@ * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#93 $" PATCH_ARG_LIST = "struct ahd_softc *ahd" PREFIX = "ahd_" @@ -212,44 +212,44 @@ fill_qoutfifo_dmadone: qoutfifo_updated: /* * If there are more commands waiting to be dma'ed - * to the host, always coaless. Otherwise honor the + * to the host, always coalesce. Otherwise honor the * host's wishes. */ - cmp COMPLETE_DMA_SCB_HEAD[1], SCB_LIST_NULL jne coaless_by_count; - cmp COMPLETE_SCB_HEAD[1], SCB_LIST_NULL jne coaless_by_count; - test LOCAL_HS_MAILBOX, ENINT_COALESS jz issue_cmdcmplt; + cmp COMPLETE_DMA_SCB_HEAD[1], SCB_LIST_NULL jne coalesce_by_count; + cmp COMPLETE_SCB_HEAD[1], SCB_LIST_NULL jne coalesce_by_count; + test LOCAL_HS_MAILBOX, ENINT_COALESCE jz issue_cmdcmplt; /* * If we have relatively few commands outstanding, don't * bother waiting for another command to complete. */ - test CMDS_PENDING[1], 0xFF jnz coaless_by_count; + test CMDS_PENDING[1], 0xFF jnz coalesce_by_count; /* Add -1 so that jnc means <= not just < */ - add A, -1, INT_COALESSING_MINCMDS; + add A, -1, INT_COALESCING_MINCMDS; add NONE, A, CMDS_PENDING; jnc issue_cmdcmplt; /* - * If coalessing, only coaless up to the limit + * If coalescing, only coalesce up to the limit * provided by the host driver. */ -coaless_by_count: - mov A, INT_COALESSING_MAXCMDS; - add NONE, A, INT_COALESSING_CMDCOUNT; +coalesce_by_count: + mov A, INT_COALESCING_MAXCMDS; + add NONE, A, INT_COALESCING_CMDCOUNT; jc issue_cmdcmplt; /* * If the timer is not currently active, * fire it up. */ test INTCTL, SWTMINTMASK jz return; - bmov SWTIMER, INT_COALESSING_TIMER, 2; + bmov SWTIMER, INT_COALESCING_TIMER, 2; mvi CLRSEQINTSTAT, CLRSEQ_SWTMRTO; or INTCTL, SWTMINTEN|SWTIMER_START; and INTCTL, ~SWTMINTMASK ret; issue_cmdcmplt: mvi INTSTAT, CMDCMPLT; - clr INT_COALESSING_CMDCOUNT; + clr INT_COALESCING_CMDCOUNT; or INTCTL, SWTMINTMASK ret; BEGIN_CRITICAL; @@ -261,6 +261,15 @@ fetch_new_scb_done: clr A; add CMDS_PENDING, 1; adc CMDS_PENDING[1], A; + if ((ahd->bugs & AHD_PKT_LUN_BUG) != 0) { + /* + * "Short Luns" are not placed into outgoing LQ + * packets in the correct byte order. Use a full + * sized lun field instead and fill it with the + * one byte of lun information we support. + */ + mov SCB_PKT_LUN[6], SCB_LUN; + } /* * The FIFO use count field is shared with the * tag set by the host so that our SCB dma engine @@ -324,7 +333,7 @@ fill_qoutfifo_loop: mov CCSCBRAM, SCBPTR; or CCSCBRAM, A, SCBPTR[1]; mov NONE, SDSCB_QOFF; - inc INT_COALESSING_CMDCOUNT; + inc INT_COALESCING_CMDCOUNT; add CMDS_PENDING, -1; adc CMDS_PENDING[1], -1; cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je fill_qoutfifo_done; diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c index 2e8c000da13c..c1fc26b3b0e5 100644 --- a/drivers/scsi/aic7xxx/aic79xx_core.c +++ b/drivers/scsi/aic7xxx/aic79xx_core.c @@ -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#190 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#192 $ * * $FreeBSD$ */ @@ -4806,12 +4806,12 @@ ahd_alloc(void *platform_arg, char *name) | AHD_EXTENDED_TRANS_A|AHD_STPWLEVEL_A; ahd_timer_init(&ahd->reset_timer); ahd_timer_init(&ahd->stat_timer); - ahd->int_coalessing_timer = AHD_INT_COALESSING_TIMER_DEFAULT; - ahd->int_coalessing_maxcmds = AHD_INT_COALESSING_MAXCMDS_DEFAULT; - ahd->int_coalessing_mincmds = AHD_INT_COALESSING_MINCMDS_DEFAULT; - ahd->int_coalessing_threshold = AHD_INT_COALESSING_THRESHOLD_DEFAULT; - ahd->int_coalessing_stop_threshold = - AHD_INT_COALESSING_STOP_THRESHOLD_DEFAULT; + ahd->int_coalescing_timer = AHD_INT_COALESCING_TIMER_DEFAULT; + ahd->int_coalescing_maxcmds = AHD_INT_COALESCING_MAXCMDS_DEFAULT; + ahd->int_coalescing_mincmds = AHD_INT_COALESCING_MINCMDS_DEFAULT; + ahd->int_coalescing_threshold = AHD_INT_COALESCING_THRESHOLD_DEFAULT; + ahd->int_coalescing_stop_threshold = + AHD_INT_COALESCING_STOP_THRESHOLD_DEFAULT; if (ahd_platform_alloc(ahd, platform_arg) != 0) { ahd_free(ahd); @@ -5722,6 +5722,7 @@ ahd_alloc_scbs(struct ahd_softc *ahd) next_scb->sg_list = segs; next_scb->sense_data = sense_data; next_scb->sense_busaddr = sense_busaddr; + memset(hscb, 0, sizeof(*hscb)); next_scb->hscb = hscb; hscb->hscb_busaddr = ahd_htole32(hscb_busaddr); @@ -6341,14 +6342,14 @@ ahd_chip_init(struct ahd_softc *ahd) ahd_outb(ahd, NEXT_QUEUED_SCB_ADDR + 3, (busaddr >> 24) & 0xFF); /* - * Default to coalessing disabled. + * Default to coalescing disabled. */ - ahd_outw(ahd, INT_COALESSING_CMDCOUNT, 0); + ahd_outw(ahd, INT_COALESCING_CMDCOUNT, 0); ahd_outw(ahd, CMDS_PENDING, 0); - ahd_update_coalessing_values(ahd, ahd->int_coalessing_timer, - ahd->int_coalessing_maxcmds, - ahd->int_coalessing_mincmds); - ahd_enable_coalessing(ahd, FALSE); + ahd_update_coalescing_values(ahd, ahd->int_coalescing_timer, + ahd->int_coalescing_maxcmds, + ahd->int_coalescing_mincmds); + ahd_enable_coalescing(ahd, FALSE); ahd_loadseq(ahd); ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); @@ -6601,30 +6602,30 @@ ahd_intr_enable(struct ahd_softc *ahd, int enable) } void -ahd_update_coalessing_values(struct ahd_softc *ahd, u_int timer, u_int maxcmds, +ahd_update_coalescing_values(struct ahd_softc *ahd, u_int timer, u_int maxcmds, u_int mincmds) { if (timer > AHD_TIMER_MAX_US) timer = AHD_TIMER_MAX_US; - ahd->int_coalessing_timer = timer; + ahd->int_coalescing_timer = timer; - if (maxcmds > AHD_INT_COALESSING_MAXCMDS_MAX) - maxcmds = AHD_INT_COALESSING_MAXCMDS_MAX; - if (mincmds > AHD_INT_COALESSING_MINCMDS_MAX) - mincmds = AHD_INT_COALESSING_MINCMDS_MAX; - ahd->int_coalessing_maxcmds = maxcmds; - ahd_outw(ahd, INT_COALESSING_TIMER, timer / AHD_TIMER_US_PER_TICK); - ahd_outb(ahd, INT_COALESSING_MAXCMDS, -maxcmds); - ahd_outb(ahd, INT_COALESSING_MINCMDS, -mincmds); + if (maxcmds > AHD_INT_COALESCING_MAXCMDS_MAX) + maxcmds = AHD_INT_COALESCING_MAXCMDS_MAX; + if (mincmds > AHD_INT_COALESCING_MINCMDS_MAX) + mincmds = AHD_INT_COALESCING_MINCMDS_MAX; + ahd->int_coalescing_maxcmds = maxcmds; + ahd_outw(ahd, INT_COALESCING_TIMER, timer / AHD_TIMER_US_PER_TICK); + ahd_outb(ahd, INT_COALESCING_MAXCMDS, -maxcmds); + ahd_outb(ahd, INT_COALESCING_MINCMDS, -mincmds); } void -ahd_enable_coalessing(struct ahd_softc *ahd, int enable) +ahd_enable_coalescing(struct ahd_softc *ahd, int enable) { - ahd->hs_mailbox &= ~ENINT_COALESS; + ahd->hs_mailbox &= ~ENINT_COALESCE; if (enable) - ahd->hs_mailbox |= ENINT_COALESS; + ahd->hs_mailbox |= ENINT_COALESCE; ahd_outb(ahd, HS_MAILBOX, ahd->hs_mailbox); ahd_flush_device_writes(ahd); ahd_run_qoutfifo(ahd); @@ -7718,20 +7719,20 @@ ahd_stat_timer(void *arg) } ahd_lock(ahd, &s); - enint_coal = ahd->hs_mailbox & ENINT_COALESS; - if (ahd->cmdcmplt_total > ahd->int_coalessing_threshold) - enint_coal |= ENINT_COALESS; - else if (ahd->cmdcmplt_total < ahd->int_coalessing_stop_threshold) - enint_coal &= ~ENINT_COALESS; + enint_coal = ahd->hs_mailbox & ENINT_COALESCE; + if (ahd->cmdcmplt_total > ahd->int_coalescing_threshold) + enint_coal |= ENINT_COALESCE; + else if (ahd->cmdcmplt_total < ahd->int_coalescing_stop_threshold) + enint_coal &= ~ENINT_COALESCE; - if (enint_coal != (ahd->hs_mailbox & ENINT_COALESS)) { - ahd_enable_coalessing(ahd, enint_coal); + if (enint_coal != (ahd->hs_mailbox & ENINT_COALESCE)) { + ahd_enable_coalescing(ahd, enint_coal); #ifdef AHD_DEBUG - if ((ahd_debug & AHD_SHOW_INT_COALESSING) != 0) - printf("%s: Interrupt coalessing " + if ((ahd_debug & AHD_SHOW_INT_COALESCING) != 0) + printf("%s: Interrupt coalescing " "now %sabled. Cmds %d\n", ahd_name(ahd), - (enint_coal & ENINT_COALESS) ? "en" : "dis", + (enint_coal & ENINT_COALESCE) ? "en" : "dis", ahd->cmdcmplt_total); #endif } @@ -8279,8 +8280,6 @@ ahd_loadseq(struct ahd_softc *ahd) download_consts[PKT_OVERRUN_BUFOFFSET] = (ahd->overrun_buf - (uint8_t *)ahd->qoutfifo) / 256; download_consts[SCB_TRANSFER_SIZE] = SCB_TRANSFER_SIZE_1BYTE_LUN; - if ((ahd->bugs & AHD_PKT_LUN_BUG) != 0) - download_consts[SCB_TRANSFER_SIZE] = SCB_TRANSFER_SIZE_FULL_LUN; cur_patch = patches; downloaded = 0; skip_addr = 0; diff --git a/drivers/scsi/aic7xxx/aic79xx_inline.h b/drivers/scsi/aic7xxx/aic79xx_inline.h index 94c8f4afb222..686053ea437f 100644 --- a/drivers/scsi/aic7xxx/aic79xx_inline.h +++ b/drivers/scsi/aic7xxx/aic79xx_inline.h @@ -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_inline.h#48 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#49 $ * * $FreeBSD$ */ @@ -272,10 +272,6 @@ ahd_setup_scb_common(struct ahd_softc *ahd, struct scb *scb) if ((scb->flags & SCB_PACKETIZED) != 0) { /* XXX what about ACA?? It is type 4, but TAG_TYPE == 0x3. */ scb->hscb->task_attribute= scb->hscb->control & SCB_TAG_TYPE; - /* - * For Rev A short lun workaround. - */ - scb->hscb->pkt_long_lun[6] = scb->hscb->lun; } if (scb->hscb->cdb_len <= MAX_CDB_LEN_WITH_SENSE_ADDR diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c index 217005909f9c..723086250ff4 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.c +++ b/drivers/scsi/aic7xxx/aic79xx_osm.c @@ -1,7 +1,7 @@ /* * Adaptec AIC79xx device driver for Linux. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#160 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#167 $ * * -------------------------------------------------------------------------- * Copyright (c) 1994-2000 Justin T. Gibbs. @@ -62,11 +62,6 @@ #include <linux/mm.h> /* For fetching system memory size */ -#define __KERNEL_SYSCALLS__ - -#include <linux/unistd.h> -static int errno; - /* * Lock protecting manipulation of the ahd softc list. */ @@ -755,31 +750,11 @@ ahd_linux_map_seg(struct ahd_softc *ahd, struct scb *scb, consumed = 1; sg->addr = ahd_htole32(addr & 0xFFFFFFFF); scb->platform_data->xfer_len += len; + if (sizeof(bus_addr_t) > 4 - && (ahd->flags & AHD_39BIT_ADDRESSING) != 0) { - /* - * Due to DAC restrictions, we can't - * cross a 4GB boundary. - */ - if ((addr ^ (addr + len - 1)) & ~0xFFFFFFFF) { - struct ahd_dma_seg *next_sg; - uint32_t next_len; - - printf("Crossed Seg\n"); - if ((scb->sg_count + 2) > AHD_NSEG) - panic("Too few segs for dma mapping. " - "Increase AHD_NSEG\n"); - - consumed++; - next_sg = sg + 1; - next_sg->addr = 0; - next_len = 0x100000000 - (addr & 0xFFFFFFFF); - len -= next_len; - next_len |= ((addr >> 8) + 0x1000000) & 0x7F000000; - next_sg->len = ahd_htole32(next_len); - } - len |= (addr >> 8) & 0x7F000000; - } + && (ahd->flags & AHD_39BIT_ADDRESSING) != 0) + len |= (addr >> 8) & AHD_SG_HIGH_ADDR_MASK; + sg->len = ahd_htole32(len); return (consumed); } @@ -796,14 +771,18 @@ static int ahd_linux_queue(Scsi_Cmnd *, void (*)(Scsi_Cmnd *)); static int ahd_linux_slave_alloc(Scsi_Device *); static int ahd_linux_slave_configure(Scsi_Device *); static void ahd_linux_slave_destroy(Scsi_Device *); +#if defined(__i386__) static int ahd_linux_biosparam(struct scsi_device*, struct block_device*, sector_t, int[]); +#endif #else static int ahd_linux_release(struct Scsi_Host *); static void ahd_linux_select_queue_depth(struct Scsi_Host *host, Scsi_Device *scsi_devs); +#if defined(__i386__) static int ahd_linux_biosparam(Disk *, kdev_t, int[]); #endif +#endif static int ahd_linux_bus_reset(Scsi_Cmnd *); static int ahd_linux_dev_reset(Scsi_Cmnd *); static int ahd_linux_abort(Scsi_Cmnd *); @@ -1211,6 +1190,7 @@ ahd_linux_select_queue_depth(struct Scsi_Host * host, } #endif +#if defined(__i386__) /* * Return the disk geometry for the given SCSI device. */ @@ -1273,6 +1253,7 @@ ahd_linux_biosparam(Disk *disk, kdev_t dev, int geom[]) geom[2] = cylinders; return (0); } +#endif /* * Abort the current SCSI command(s). @@ -4211,7 +4192,7 @@ ahd_linux_run_device_queue(struct ahd_softc *ahd, struct ahd_linux_device *dev) /* * SCSI controller interrupt handler. */ -AIC_LINUX_IRQRETURN_T +irqreturn_t ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs) { struct ahd_softc *ahd; @@ -4225,7 +4206,7 @@ ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs) ahd_schedule_runq(ahd); ahd_linux_run_complete_queue(ahd); ahd_unlock(ahd, &flags); - AIC_LINUX_IRQRETURN(ours); + return IRQ_RETVAL(ours); } void diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.h b/drivers/scsi/aic7xxx/aic79xx_osm.h index 1a479d895872..7dd00350ec25 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.h +++ b/drivers/scsi/aic7xxx/aic79xx_osm.h @@ -36,7 +36,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#130 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#132 $ * */ #ifndef _AIC79XX_LINUX_H_ @@ -1211,7 +1211,7 @@ void ahd_platform_set_tags(struct ahd_softc *ahd, int ahd_platform_abort_scbs(struct ahd_softc *ahd, int target, char channel, int lun, u_int tag, role_t role, uint32_t status); -AIC_LINUX_IRQRETURN_T +irqreturn_t ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs); void ahd_platform_flushwork(struct ahd_softc *ahd); int ahd_softc_comp(struct ahd_softc *, struct ahd_softc *); diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c index 8ec854777727..43e88edf464e 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c +++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c @@ -36,7 +36,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm_pci.c#21 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm_pci.c#23 $ */ #include "aic79xx_osm.h" @@ -156,19 +156,21 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) pci_set_master(pdev); if (sizeof(bus_addr_t) > 4) { - uint64_t memsize; + uint64_t memsize; + bus_addr_t mask_64bit; + bus_addr_t mask_39bit; memsize = ahd_linux_get_memsize(); - if (memsize >= 0x8000000000 - && ahd_pci_set_dma_mask(pdev, 0xFFFFFFFFFFFFFFFFULL) == 0) { + mask_64bit = (bus_addr_t)(0xFFFFFFFFFFFFFFFFULL&(bus_addr_t)~0); + mask_39bit = (bus_addr_t)(0x7FFFFFFFFFULL&(bus_addr_t)~0); + if (memsize >= 0x8000000000ULL + && ahd_pci_set_dma_mask(pdev, mask_64bit) == 0) { ahd->flags |= AHD_64BIT_ADDRESSING; - ahd->platform_data->hw_dma_mask = - (bus_addr_t)(0xFFFFFFFFFFFFFFFFULL&(bus_addr_t)~0); + ahd->platform_data->hw_dma_mask = mask_64bit; } else if (memsize > 0x80000000 - && ahd_pci_set_dma_mask(pdev, 0x7FFFFFFFFFULL) == 0) { + && ahd_pci_set_dma_mask(pdev, mask_39bit) == 0) { ahd->flags |= AHD_39BIT_ADDRESSING; - ahd->platform_data->hw_dma_mask = - (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0); + ahd->platform_data->hw_dma_mask = mask_39bit; } } else { ahd_pci_set_dma_mask(pdev, 0xFFFFFFFF); diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c index 42d7a69ff057..b4da62704d69 100644 --- a/drivers/scsi/aic7xxx/aic79xx_pci.c +++ b/drivers/scsi/aic7xxx/aic79xx_pci.c @@ -38,7 +38,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_pci.c#71 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx_pci.c#73 $ * * $FreeBSD$ */ @@ -65,28 +65,29 @@ ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) } #define ID_ALL_MASK 0xFFFFFFFFFFFFFFFFull +#define ID_ALL_IROC_MASK 0xFFFFFF7FFFFFFFFFull #define ID_DEV_VENDOR_MASK 0xFFFFFFFF00000000ull #define ID_9005_GENERIC_MASK 0xFFF0FFFF00000000ull +#define ID_9005_GENERIC_IROC_MASK 0xFFF0FF7F00000000ull #define ID_AIC7901 0x800F9005FFFF9005ull -#define ID_AIC7901A 0x801E9005FFFF9005ull -#define ID_AIC7901A_IROC 0x809E9005FFFF9005ull #define ID_AHA_29320A 0x8000900500609005ull +#define ID_AHA_29320ALP 0x8017900500449005ull + +#define ID_AIC7901A 0x801E9005FFFF9005ull +#define ID_AHA_29320 0x8012900500429005ull +#define ID_AHA_29320B 0x8013900500439005ull #define ID_AHA_29320LP 0x8014900500449005ull -#define ID_AHA_29320LP_IROC 0x8094900500449005ull #define ID_AIC7902 0x801F9005FFFF9005ull -#define ID_AIC7902_IROC 0x809F9005FFFF9005ull #define ID_AIC7902_B 0x801D9005FFFF9005ull -#define ID_AIC7902_B_IROC 0x809D9005FFFF9005ull #define ID_AHA_39320 0x8010900500409005ull +#define ID_AHA_39320_B 0x8015900500409005ull #define ID_AHA_39320A 0x8016900500409005ull #define ID_AHA_39320D 0x8011900500419005ull #define ID_AHA_39320D_B 0x801C900500419005ull #define ID_AHA_39320D_HP 0x8011900500AC0E11ull #define ID_AHA_39320D_B_HP 0x801C900500AC0E11ull -#define ID_AHA_29320 0x8012900500429005ull -#define ID_AHA_29320B 0x8013900500439005ull #define ID_AIC7902_PCI_REV_A4 0x3 #define ID_AIC7902_PCI_REV_B0 0x10 #define SUBID_HP 0x0E11 @@ -113,22 +114,42 @@ ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor) #define SUBID_9005_SEEPTYPE_NONE 0x0 #define SUBID_9005_SEEPTYPE_4K 0x1 +static ahd_device_setup_t ahd_aic7901_setup; static ahd_device_setup_t ahd_aic7901A_setup; static ahd_device_setup_t ahd_aic7902_setup; struct ahd_pci_identity ahd_pci_ident_table [] = { + /* aic7901 based controllers */ + { + ID_AHA_29320A, + ID_ALL_MASK, + "Adaptec 29320A Ultra320 SCSI adapter", + ahd_aic7901_setup + }, + { + ID_AHA_29320ALP, + ID_ALL_MASK, + "Adaptec 29320ALP Ultra320 SCSI adapter", + ahd_aic7901_setup + }, /* aic7901A based controllers */ { - ID_AHA_29320LP, + ID_AHA_29320, ID_ALL_MASK, - "Adaptec 29320LP Ultra320 SCSI adapter", + "Adaptec 29320 Ultra320 SCSI adapter", ahd_aic7901A_setup }, { - ID_AHA_29320A, + ID_AHA_29320B, ID_ALL_MASK, - "Adaptec 29320A Ultra320 SCSI adapter", + "Adaptec 29320B Ultra320 SCSI adapter", + ahd_aic7901A_setup + }, + { + ID_AHA_29320LP, + ID_ALL_MASK, + "Adaptec 29320LP Ultra320 SCSI adapter", ahd_aic7901A_setup }, /* aic7902 based controllers */ @@ -139,6 +160,12 @@ struct ahd_pci_identity ahd_pci_ident_table [] = ahd_aic7902_setup }, { + ID_AHA_39320_B, + ID_ALL_MASK, + "Adaptec 39320 Ultra320 SCSI adapter", + ahd_aic7902_setup + }, + { ID_AHA_39320A, ID_ALL_MASK, "Adaptec 39320A Ultra320 SCSI adapter", @@ -182,6 +209,12 @@ struct ahd_pci_identity ahd_pci_ident_table [] = }, /* Generic chip probes for devices we don't know 'exactly' */ { + ID_AIC7901 & ID_DEV_VENDOR_MASK, + ID_DEV_VENDOR_MASK, + "Adaptec AIC7901 Ultra320 SCSI adapter", + ahd_aic7901_setup + }, + { ID_AIC7901A & ID_DEV_VENDOR_MASK, ID_DEV_VENDOR_MASK, "Adaptec AIC7901A Ultra320 SCSI adapter", @@ -332,9 +365,9 @@ ahd_pci_config(struct ahd_softc *ahd, struct ahd_pci_identity *entry) } /* Ensure busmastering is enabled */ - command = ahd_pci_read_config(ahd->dev_softc, PCIR_COMMAND, /*bytes*/1); + command = ahd_pci_read_config(ahd->dev_softc, PCIR_COMMAND, /*bytes*/2); command |= PCIM_CMD_BUSMASTEREN; - ahd_pci_write_config(ahd->dev_softc, PCIR_COMMAND, command, /*bytes*/1); + ahd_pci_write_config(ahd->dev_softc, PCIR_COMMAND, command, /*bytes*/2); error = ahd_softc_init(ahd); if (error != 0) @@ -868,6 +901,18 @@ ahd_pci_split_intr(struct ahd_softc *ahd, u_int intstat) } static int +ahd_aic7901_setup(struct ahd_softc *ahd) +{ + int error; + + error = ahd_aic7902_setup(ahd); + if (error != 0) + return (error); + ahd->chip = AHD_AIC7901; + return (0); +} + +static int ahd_aic7901A_setup(struct ahd_softc *ahd) { int error; @@ -890,7 +935,7 @@ ahd_aic7902_setup(struct ahd_softc *ahd) if (rev < ID_AIC7902_PCI_REV_A4) { printf("%s: Unable to attach to unsupported chip revision %d\n", ahd_name(ahd), rev); - ahd_pci_write_config(pci, PCIR_COMMAND, 0, /*bytes*/1); + ahd_pci_write_config(pci, PCIR_COMMAND, 0, /*bytes*/2); return (ENXIO); } ahd->channel = ahd_get_pci_function(pci) + 'A'; diff --git a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped index c76d68e07e05..67c7509f03c2 100644 --- a/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped +++ b/drivers/scsi/aic7xxx/aic79xx_reg.h_shipped @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#93 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#68 $ */ typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef struct ahd_reg_parse_entry { @@ -2134,24 +2134,24 @@ ahd_reg_print_t ahd_allocfifo_scbptr_print; #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_int_coalessing_timer_print; +ahd_reg_print_t ahd_int_coalescing_timer_print; #else -#define ahd_int_coalessing_timer_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "INT_COALESSING_TIMER", 0x14a, regvalue, cur_col, wrap) +#define ahd_int_coalescing_timer_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "INT_COALESCING_TIMER", 0x14a, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_int_coalessing_maxcmds_print; +ahd_reg_print_t ahd_int_coalescing_maxcmds_print; #else -#define ahd_int_coalessing_maxcmds_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "INT_COALESSING_MAXCMDS", 0x14c, regvalue, cur_col, wrap) +#define ahd_int_coalescing_maxcmds_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS", 0x14c, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_int_coalessing_mincmds_print; +ahd_reg_print_t ahd_int_coalescing_mincmds_print; #else -#define ahd_int_coalessing_mincmds_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "INT_COALESSING_MINCMDS", 0x14d, regvalue, cur_col, wrap) +#define ahd_int_coalescing_mincmds_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS", 0x14d, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS @@ -2162,10 +2162,10 @@ ahd_reg_print_t ahd_cmds_pending_print; #endif #if AIC_DEBUG_REGISTERS -ahd_reg_print_t ahd_int_coalessing_cmdcount_print; +ahd_reg_print_t ahd_int_coalescing_cmdcount_print; #else -#define ahd_int_coalessing_cmdcount_print(regvalue, cur_col, wrap) \ - ahd_print_register(NULL, 0, "INT_COALESSING_CMDCOUNT", 0x150, regvalue, cur_col, wrap) +#define ahd_int_coalescing_cmdcount_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT", 0x150, regvalue, cur_col, wrap) #endif #if AIC_DEBUG_REGISTERS @@ -2432,7 +2432,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define HS_MAILBOX 0x0b #define HOST_TQINPOS 0x80 -#define ENINT_COALESS 0x40 +#define ENINT_COALESCE 0x40 #define CLRSEQINTSTAT 0x0c #define CLRSEQ_SWTMRTO 0x10 @@ -3612,15 +3612,15 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; #define ALLOCFIFO_SCBPTR 0x148 -#define INT_COALESSING_TIMER 0x14a +#define INT_COALESCING_TIMER 0x14a -#define INT_COALESSING_MAXCMDS 0x14c +#define INT_COALESCING_MAXCMDS 0x14c -#define INT_COALESSING_MINCMDS 0x14d +#define INT_COALESCING_MINCMDS 0x14d #define CMDS_PENDING 0x14e -#define INT_COALESSING_CMDCOUNT 0x150 +#define INT_COALESCING_CMDCOUNT 0x150 #define LOCAL_HS_MAILBOX 0x151 @@ -3768,5 +3768,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; /* Exported Labels */ -#define LABEL_seq_isr 0x270 -#define LABEL_timer_isr 0x26c +#define LABEL_seq_isr 0x271 +#define LABEL_timer_isr 0x26d diff --git a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped index 11d726f9e30f..476e84691313 100644 --- a/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped +++ b/drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#93 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#68 $ */ #include "aic79xx_osm.h" @@ -161,7 +161,7 @@ ahd_hescb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap) } static ahd_reg_parse_entry_t HS_MAILBOX_parse_table[] = { - { "ENINT_COALESS", 0x40, 0x40 }, + { "ENINT_COALESCE", 0x40, 0x40 }, { "HOST_TQINPOS", 0x80, 0x80 } }; @@ -3375,23 +3375,23 @@ ahd_allocfifo_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap) } int -ahd_int_coalessing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap) +ahd_int_coalescing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap) { - return (ahd_print_register(NULL, 0, "INT_COALESSING_TIMER", + return (ahd_print_register(NULL, 0, "INT_COALESCING_TIMER", 0x14a, regvalue, cur_col, wrap)); } int -ahd_int_coalessing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap) +ahd_int_coalescing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap) { - return (ahd_print_register(NULL, 0, "INT_COALESSING_MAXCMDS", + return (ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS", 0x14c, regvalue, cur_col, wrap)); } int -ahd_int_coalessing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap) +ahd_int_coalescing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap) { - return (ahd_print_register(NULL, 0, "INT_COALESSING_MINCMDS", + return (ahd_print_register(NULL, 0, "INT_COALESCING_MINCMDS", 0x14d, regvalue, cur_col, wrap)); } @@ -3403,9 +3403,9 @@ ahd_cmds_pending_print(u_int regvalue, u_int *cur_col, u_int wrap) } int -ahd_int_coalessing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap) +ahd_int_coalescing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap) { - return (ahd_print_register(NULL, 0, "INT_COALESSING_CMDCOUNT", + return (ahd_print_register(NULL, 0, "INT_COALESCING_CMDCOUNT", 0x150, regvalue, cur_col, wrap)); } diff --git a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped index 753a7e5a10d6..42c38ee02284 100644 --- a/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped +++ b/drivers/scsi/aic7xxx/aic79xx_seq.h_shipped @@ -2,30 +2,30 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#91 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#67 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#93 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#68 $ */ static uint8_t seqprog[] = { 0xff, 0x02, 0x06, 0x78, - 0x00, 0xea, 0x4e, 0x59, + 0x00, 0xea, 0x50, 0x59, 0x01, 0xea, 0x04, 0x30, 0xff, 0x04, 0x0c, 0x78, - 0x19, 0xea, 0x4e, 0x59, + 0x19, 0xea, 0x50, 0x59, 0x19, 0xea, 0x04, 0x00, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x60, 0x3a, 0x1a, 0x68, 0x04, 0x47, 0x1b, 0x68, 0xff, 0x21, 0x1b, 0x70, - 0x40, 0x4b, 0x90, 0x69, - 0x00, 0xe2, 0x52, 0x59, - 0x40, 0x4b, 0x90, 0x69, - 0x20, 0x4b, 0x80, 0x69, + 0x40, 0x4b, 0x92, 0x69, + 0x00, 0xe2, 0x54, 0x59, + 0x40, 0x4b, 0x92, 0x69, + 0x20, 0x4b, 0x82, 0x69, 0xfc, 0x42, 0x24, 0x78, 0x10, 0x40, 0x24, 0x78, - 0x00, 0xe2, 0xd2, 0x5d, + 0x00, 0xe2, 0xd4, 0x5d, 0x20, 0x4d, 0x28, 0x78, - 0x00, 0xe2, 0xd2, 0x5d, + 0x00, 0xe2, 0xd4, 0x5d, 0x30, 0x3f, 0xc0, 0x09, 0x30, 0xe0, 0x30, 0x60, 0x7f, 0x4a, 0x94, 0x08, @@ -35,7 +35,7 @@ static uint8_t seqprog[] = { 0x00, 0xe2, 0x56, 0x58, 0x00, 0xe2, 0x66, 0x58, 0x00, 0xe2, 0x06, 0x40, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x01, 0x52, 0x64, 0x78, 0x02, 0x58, 0x50, 0x31, @@ -43,26 +43,26 @@ static uint8_t seqprog[] = { 0xff, 0xad, 0x4f, 0x78, 0x50, 0x4b, 0x4a, 0x68, 0xbf, 0x3a, 0x74, 0x08, - 0x14, 0xea, 0x4e, 0x59, + 0x14, 0xea, 0x50, 0x59, 0x14, 0xea, 0x04, 0x00, 0x08, 0xa8, 0x51, 0x03, 0xff, 0xae, 0x3f, 0x68, - 0x00, 0xe2, 0x50, 0x5b, + 0x00, 0xe2, 0x52, 0x5b, 0x00, 0xe2, 0x3e, 0x40, - 0x00, 0xea, 0x42, 0x59, + 0x00, 0xea, 0x44, 0x59, 0x01, 0xea, 0x00, 0x30, 0x80, 0xf9, 0x5e, 0x68, - 0x00, 0xe2, 0x40, 0x59, - 0x11, 0xea, 0x42, 0x59, + 0x00, 0xe2, 0x42, 0x59, + 0x11, 0xea, 0x44, 0x59, 0x11, 0xea, 0x00, 0x00, - 0x80, 0xf9, 0x40, 0x79, + 0x80, 0xf9, 0x42, 0x79, 0xff, 0xea, 0xd4, 0x0d, - 0x22, 0xea, 0x42, 0x59, + 0x22, 0xea, 0x44, 0x59, 0x22, 0xea, 0x00, 0x00, 0x10, 0x16, 0x70, 0x78, 0x01, 0x0b, 0xa2, 0x32, 0x10, 0x16, 0x2c, 0x00, - 0x18, 0xad, 0xfe, 0x78, + 0x18, 0xad, 0x00, 0x79, 0x04, 0xad, 0xca, 0x68, 0x80, 0xad, 0x64, 0x78, 0x10, 0xad, 0x98, 0x78, @@ -71,15 +71,15 @@ static uint8_t seqprog[] = { 0x02, 0x8c, 0x59, 0x32, 0x02, 0x28, 0x19, 0x33, 0x02, 0xa8, 0x50, 0x36, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x40, 0x3a, 0x64, 0x68, 0x50, 0x4b, 0x64, 0x68, - 0x22, 0xea, 0x42, 0x59, + 0x22, 0xea, 0x44, 0x59, 0x22, 0xea, 0x00, 0x00, 0xe7, 0xad, 0x5a, 0x09, 0x02, 0x8c, 0x59, 0x32, - 0x1a, 0xea, 0x4e, 0x59, + 0x1a, 0xea, 0x50, 0x59, 0x1a, 0xea, 0x04, 0x00, 0xff, 0xea, 0xd4, 0x0d, 0xe7, 0xad, 0x5a, 0x09, @@ -113,29 +113,30 @@ static uint8_t seqprog[] = { 0xff, 0xea, 0xc0, 0x09, 0x01, 0x4e, 0x9d, 0x1a, 0x00, 0x4f, 0x9f, 0x22, + 0x01, 0xaa, 0x6d, 0x33, 0x01, 0xea, 0x5c, 0x33, 0x04, 0xa4, 0x49, 0x32, 0xff, 0xea, 0x4a, 0x03, 0xff, 0xea, 0x4e, 0x03, 0x01, 0x10, 0xd4, 0x31, - 0x10, 0xa8, 0xf3, 0x68, + 0x10, 0xa8, 0xf5, 0x68, 0x3d, 0xa9, 0xc5, 0x29, 0xfe, 0xe2, 0xc4, 0x09, 0x01, 0xea, 0xc6, 0x01, 0x02, 0xe2, 0xc8, 0x31, 0x02, 0xec, 0x50, 0x31, 0x02, 0xa0, 0xda, 0x31, - 0xff, 0xa9, 0xf2, 0x70, + 0xff, 0xa9, 0xf4, 0x70, 0x02, 0xa0, 0x48, 0x37, - 0xff, 0x21, 0xfb, 0x70, + 0xff, 0x21, 0xfd, 0x70, 0x02, 0x22, 0x51, 0x31, 0x02, 0xa0, 0x4c, 0x33, 0x02, 0xa0, 0x44, 0x36, 0x02, 0xa0, 0x40, 0x32, 0x02, 0xa0, 0x44, 0x36, - 0x04, 0x47, 0x03, 0x69, - 0x40, 0x16, 0x2e, 0x69, - 0xff, 0x2d, 0x33, 0x61, + 0x04, 0x47, 0x05, 0x69, + 0x40, 0x16, 0x30, 0x69, + 0xff, 0x2d, 0x35, 0x61, 0xff, 0x29, 0x65, 0x70, 0x01, 0x37, 0xc1, 0x31, 0x02, 0x28, 0x55, 0x32, @@ -148,20 +149,20 @@ static uint8_t seqprog[] = { 0x01, 0x50, 0xa1, 0x1a, 0xff, 0x4e, 0x9d, 0x1a, 0xff, 0x4f, 0x9f, 0x22, - 0xff, 0x8d, 0x27, 0x71, - 0x80, 0xac, 0x26, 0x71, - 0x20, 0x16, 0x26, 0x69, + 0xff, 0x8d, 0x29, 0x71, + 0x80, 0xac, 0x28, 0x71, + 0x20, 0x16, 0x28, 0x69, 0x02, 0x8c, 0x51, 0x31, - 0x00, 0xe2, 0x10, 0x41, + 0x00, 0xe2, 0x12, 0x41, 0x01, 0xac, 0x08, 0x31, 0x09, 0xea, 0x5a, 0x01, 0x02, 0x8c, 0x51, 0x32, 0xff, 0xea, 0x1a, 0x07, 0x04, 0x24, 0xf9, 0x30, - 0x1d, 0xea, 0x38, 0x41, + 0x1d, 0xea, 0x3a, 0x41, 0x02, 0x2c, 0x51, 0x31, 0x04, 0xa0, 0xf9, 0x30, - 0x19, 0xea, 0x38, 0x41, + 0x19, 0xea, 0x3a, 0x41, 0x06, 0xea, 0x08, 0x81, 0x01, 0xe2, 0x5a, 0x35, 0x02, 0xf2, 0xf0, 0x35, @@ -179,23 +180,23 @@ static uint8_t seqprog[] = { 0x02, 0x20, 0xb9, 0x30, 0x02, 0x20, 0x51, 0x31, 0x4c, 0xa9, 0xd7, 0x28, - 0x10, 0xa8, 0x61, 0x79, + 0x10, 0xa8, 0x63, 0x79, 0x01, 0x6b, 0xc0, 0x30, 0x02, 0x64, 0xc8, 0x00, 0x40, 0x3a, 0x74, 0x04, 0x00, 0xe2, 0x56, 0x58, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x30, 0x3f, 0xc0, 0x09, - 0x30, 0xe0, 0x62, 0x61, - 0x20, 0x3f, 0x78, 0x69, - 0x10, 0x3f, 0x62, 0x79, + 0x30, 0xe0, 0x64, 0x61, + 0x20, 0x3f, 0x7a, 0x69, + 0x10, 0x3f, 0x64, 0x79, 0x02, 0xea, 0x7e, 0x00, - 0x00, 0xea, 0x42, 0x59, + 0x00, 0xea, 0x44, 0x59, 0x01, 0xea, 0x00, 0x30, 0x02, 0x48, 0x51, 0x35, 0x01, 0xea, 0x7e, 0x00, - 0x11, 0xea, 0x42, 0x59, + 0x11, 0xea, 0x44, 0x59, 0x11, 0xea, 0x00, 0x00, 0x02, 0x48, 0x51, 0x35, 0x08, 0xea, 0x98, 0x00, @@ -205,11 +206,11 @@ static uint8_t seqprog[] = { 0x0f, 0x67, 0xc0, 0x09, 0x00, 0x34, 0x69, 0x02, 0x20, 0xea, 0x96, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x40, 0x3a, 0xac, 0x69, + 0x00, 0xe2, 0xf8, 0x41, + 0x40, 0x3a, 0xae, 0x69, 0x02, 0x55, 0x06, 0x68, - 0x02, 0x56, 0xac, 0x69, - 0xff, 0x5b, 0xac, 0x61, + 0x02, 0x56, 0xae, 0x69, + 0xff, 0x5b, 0xae, 0x61, 0x02, 0x20, 0x51, 0x31, 0x80, 0xea, 0xb2, 0x01, 0x44, 0xea, 0x00, 0x00, @@ -217,36 +218,36 @@ static uint8_t seqprog[] = { 0x33, 0xea, 0x00, 0x00, 0xff, 0xea, 0xb2, 0x09, 0xff, 0xe0, 0xc0, 0x19, - 0xff, 0xe0, 0xae, 0x79, + 0xff, 0xe0, 0xb0, 0x79, 0x02, 0xa4, 0x51, 0x31, - 0x00, 0xe2, 0xa4, 0x41, + 0x00, 0xe2, 0xa6, 0x41, 0x02, 0x5e, 0x50, 0x31, 0x02, 0xa8, 0xb8, 0x30, 0x02, 0x5c, 0x50, 0x31, - 0xff, 0xa5, 0xbf, 0x71, + 0xff, 0xa5, 0xc1, 0x71, 0x02, 0xa4, 0x41, 0x31, 0x02, 0x22, 0x51, 0x31, 0x02, 0xa0, 0x4c, 0x33, 0x02, 0xa0, 0x44, 0x32, - 0x00, 0xe2, 0xc8, 0x41, - 0x10, 0xa8, 0xc9, 0x69, + 0x00, 0xe2, 0xca, 0x41, + 0x10, 0xa8, 0xcb, 0x69, 0x3d, 0xa9, 0xc9, 0x29, 0x01, 0xe4, 0xc8, 0x01, 0x01, 0xea, 0xca, 0x01, 0xff, 0xea, 0xda, 0x01, 0x02, 0x20, 0x51, 0x31, 0x02, 0xa6, 0x41, 0x32, - 0xff, 0x21, 0xd1, 0x61, + 0xff, 0x21, 0xd3, 0x61, 0xff, 0xea, 0x46, 0x02, 0x02, 0x5c, 0x50, 0x31, 0x40, 0xea, 0x96, 0x00, - 0x02, 0x56, 0xda, 0x6d, - 0x01, 0x55, 0xda, 0x6d, - 0x10, 0xa8, 0xdd, 0x79, - 0x10, 0x40, 0xe6, 0x69, - 0x01, 0x56, 0xe6, 0x79, + 0x02, 0x56, 0xdc, 0x6d, + 0x01, 0x55, 0xdc, 0x6d, + 0x10, 0xa8, 0xdf, 0x79, + 0x10, 0x40, 0xe8, 0x69, + 0x01, 0x56, 0xe8, 0x79, 0xff, 0xad, 0x07, 0x78, - 0x13, 0xea, 0x4e, 0x59, + 0x13, 0xea, 0x50, 0x59, 0x13, 0xea, 0x04, 0x00, 0x00, 0xe2, 0x06, 0x40, 0xbf, 0x3a, 0x74, 0x08, @@ -257,104 +258,104 @@ static uint8_t seqprog[] = { 0x40, 0xea, 0x66, 0x02, 0x08, 0x3c, 0x78, 0x00, 0x80, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xb2, 0x5b, + 0x00, 0xe2, 0xb4, 0x5b, 0x01, 0x36, 0xc1, 0x31, - 0x9f, 0xe0, 0x54, 0x7c, - 0x80, 0xe0, 0x0a, 0x72, - 0xa0, 0xe0, 0x42, 0x72, - 0xc0, 0xe0, 0x38, 0x72, - 0xe0, 0xe0, 0x72, 0x72, - 0x01, 0xea, 0x4e, 0x59, + 0x9f, 0xe0, 0x56, 0x7c, + 0x80, 0xe0, 0x0c, 0x72, + 0xa0, 0xe0, 0x44, 0x72, + 0xc0, 0xe0, 0x3a, 0x72, + 0xe0, 0xe0, 0x74, 0x72, + 0x01, 0xea, 0x50, 0x59, 0x01, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x80, 0x33, 0x11, 0x7a, - 0x03, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0xf8, 0x41, + 0x80, 0x33, 0x13, 0x7a, + 0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x04, 0x00, - 0xee, 0x00, 0x18, 0x6a, + 0xee, 0x00, 0x1a, 0x6a, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x68, 0x59, + 0x00, 0xe2, 0x6a, 0x59, 0xef, 0xac, 0xd5, 0x19, - 0x00, 0xe2, 0x28, 0x52, + 0x00, 0xe2, 0x2a, 0x52, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x2e, 0x42, + 0x00, 0xe2, 0x30, 0x42, 0x01, 0xac, 0xd1, 0x30, 0x10, 0x80, 0x89, 0x31, 0x20, 0xea, 0x32, 0x00, 0xbf, 0x33, 0x67, 0x0a, - 0x20, 0x19, 0x30, 0x6a, - 0x02, 0x4d, 0xf6, 0x69, + 0x20, 0x19, 0x32, 0x6a, + 0x02, 0x4d, 0xf8, 0x69, 0x40, 0x33, 0x67, 0x02, - 0x00, 0xe2, 0xf6, 0x41, - 0x80, 0x33, 0xaf, 0x6a, + 0x00, 0xe2, 0xf8, 0x41, + 0x80, 0x33, 0xb1, 0x6a, 0x01, 0x44, 0x10, 0x33, 0x08, 0xa8, 0x51, 0x03, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf8, 0x41, 0x10, 0xea, 0x80, 0x00, 0x01, 0x31, 0xc5, 0x31, - 0x80, 0xe2, 0x5e, 0x62, - 0x10, 0xa8, 0x83, 0x6a, + 0x80, 0xe2, 0x60, 0x62, + 0x10, 0xa8, 0x85, 0x6a, 0xc0, 0xaa, 0xc5, 0x01, - 0x40, 0xa8, 0x4f, 0x6a, + 0x40, 0xa8, 0x51, 0x6a, 0xbf, 0xe2, 0xc4, 0x09, - 0x20, 0xa8, 0x63, 0x7a, + 0x20, 0xa8, 0x65, 0x7a, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xb2, 0x5b, - 0xa0, 0x36, 0x6b, 0x62, + 0x00, 0xe2, 0xb4, 0x5b, + 0xa0, 0x36, 0x6d, 0x62, 0x23, 0xa8, 0x89, 0x08, - 0x00, 0xe2, 0xb2, 0x5b, - 0xa0, 0x36, 0x6b, 0x62, - 0x00, 0xa8, 0x62, 0x42, - 0xff, 0xe2, 0x62, 0x62, - 0x00, 0xe2, 0x82, 0x42, + 0x00, 0xe2, 0xb4, 0x5b, + 0xa0, 0x36, 0x6d, 0x62, + 0x00, 0xa8, 0x64, 0x42, + 0xff, 0xe2, 0x64, 0x62, + 0x00, 0xe2, 0x84, 0x42, 0x40, 0xea, 0x98, 0x00, 0x01, 0xe2, 0x88, 0x30, - 0x00, 0xe2, 0xb2, 0x5b, - 0xa0, 0x36, 0x41, 0x72, + 0x00, 0xe2, 0xb4, 0x5b, + 0xa0, 0x36, 0x43, 0x72, 0x40, 0xea, 0x98, 0x00, 0x01, 0x31, 0x89, 0x32, 0x08, 0xea, 0x62, 0x02, - 0x00, 0xe2, 0xf6, 0x41, - 0xe0, 0xea, 0xce, 0x5b, - 0x80, 0xe0, 0xba, 0x6a, - 0x04, 0xe0, 0x60, 0x73, - 0x02, 0xe0, 0x90, 0x73, - 0x00, 0xea, 0x18, 0x73, - 0x03, 0xe0, 0xa0, 0x73, - 0x23, 0xe0, 0x94, 0x72, - 0x08, 0xe0, 0xb6, 0x72, - 0x00, 0xe2, 0xb2, 0x5b, - 0x07, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0xf8, 0x41, + 0xe0, 0xea, 0xd0, 0x5b, + 0x80, 0xe0, 0xbc, 0x6a, + 0x04, 0xe0, 0x62, 0x73, + 0x02, 0xe0, 0x92, 0x73, + 0x00, 0xea, 0x1a, 0x73, + 0x03, 0xe0, 0xa2, 0x73, + 0x23, 0xe0, 0x96, 0x72, + 0x08, 0xe0, 0xb8, 0x72, + 0x00, 0xe2, 0xb4, 0x5b, + 0x07, 0xea, 0x50, 0x59, 0x07, 0xea, 0x04, 0x00, - 0x08, 0x42, 0xf7, 0x71, - 0x04, 0x42, 0x91, 0x62, + 0x08, 0x42, 0xf9, 0x71, + 0x04, 0x42, 0x93, 0x62, 0x01, 0x43, 0x89, 0x30, - 0x00, 0xe2, 0x82, 0x42, + 0x00, 0xe2, 0x84, 0x42, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0x82, 0x42, + 0x00, 0xe2, 0x84, 0x42, 0x01, 0x00, 0x60, 0x32, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x4c, 0x34, 0xc1, 0x28, 0x01, 0x64, 0xc0, 0x31, - 0x00, 0x30, 0x43, 0x59, + 0x00, 0x30, 0x45, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x01, 0xe0, 0xb4, 0x7a, - 0xa0, 0xea, 0xc4, 0x5b, - 0x01, 0xa0, 0xb4, 0x62, - 0x01, 0x84, 0xad, 0x7a, - 0x01, 0xa7, 0xb6, 0x7a, - 0x00, 0xe2, 0xb6, 0x42, - 0x03, 0xea, 0x4e, 0x59, + 0x01, 0xe0, 0xb6, 0x7a, + 0xa0, 0xea, 0xc6, 0x5b, + 0x01, 0xa0, 0xb6, 0x62, + 0x01, 0x84, 0xaf, 0x7a, + 0x01, 0xa7, 0xb8, 0x7a, + 0x00, 0xe2, 0xb8, 0x42, + 0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xb6, 0x42, - 0x07, 0xea, 0xd6, 0x5b, + 0x00, 0xe2, 0xb8, 0x42, + 0x07, 0xea, 0xd8, 0x5b, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf8, 0x41, 0x3f, 0xe0, 0x6a, 0x0a, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -365,54 +366,54 @@ static uint8_t seqprog[] = { 0x01, 0xea, 0xc6, 0x01, 0x02, 0xe2, 0xc8, 0x31, 0x02, 0xec, 0x40, 0x31, - 0xff, 0xa1, 0xd6, 0x72, + 0xff, 0xa1, 0xd8, 0x72, 0x02, 0xe8, 0xda, 0x31, 0x02, 0xa0, 0x50, 0x31, - 0x00, 0xe2, 0xf8, 0x42, + 0x00, 0xe2, 0xfa, 0x42, 0x80, 0x33, 0x67, 0x02, 0x01, 0x44, 0xd4, 0x31, - 0x00, 0xe2, 0xb2, 0x5b, + 0x00, 0xe2, 0xb4, 0x5b, 0x01, 0x33, 0x67, 0x02, - 0xe0, 0x36, 0x13, 0x63, + 0xe0, 0x36, 0x15, 0x63, 0x02, 0x33, 0x67, 0x02, - 0x20, 0x46, 0x0c, 0x63, + 0x20, 0x46, 0x0e, 0x63, 0xff, 0xea, 0x52, 0x09, - 0xa8, 0xea, 0xc4, 0x5b, - 0x04, 0xa8, 0xf3, 0x7a, + 0xa8, 0xea, 0xc6, 0x5b, + 0x04, 0xa8, 0xf5, 0x7a, 0x01, 0x34, 0xc1, 0x31, - 0x00, 0xa9, 0xf3, 0x62, + 0x00, 0xa9, 0xf5, 0x62, 0x01, 0x35, 0xc1, 0x31, - 0x00, 0xaa, 0xfd, 0x72, + 0x00, 0xaa, 0xff, 0x72, 0x01, 0xa9, 0x52, 0x11, - 0xff, 0xa9, 0xe8, 0x6a, - 0x00, 0xe2, 0x0c, 0x43, + 0xff, 0xa9, 0xea, 0x6a, + 0x00, 0xe2, 0x0e, 0x43, 0x10, 0x33, 0x67, 0x02, - 0x04, 0xa8, 0x0d, 0x7b, + 0x04, 0xa8, 0x0f, 0x7b, 0xfb, 0xa8, 0x51, 0x0b, 0xff, 0xea, 0x66, 0x0a, - 0x01, 0x9c, 0x07, 0x6b, + 0x01, 0x9c, 0x09, 0x6b, 0x02, 0xa8, 0x90, 0x32, - 0x00, 0xe2, 0x68, 0x59, - 0x10, 0xa8, 0xb7, 0x7a, - 0xff, 0xea, 0xd6, 0x5b, - 0x00, 0xe2, 0xb6, 0x42, - 0x04, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0x6a, 0x59, + 0x10, 0xa8, 0xb9, 0x7a, + 0xff, 0xea, 0xd8, 0x5b, + 0x00, 0xe2, 0xb8, 0x42, + 0x04, 0xea, 0x50, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xb6, 0x42, - 0x04, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0xb8, 0x42, + 0x04, 0xea, 0x50, 0x59, 0x04, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x08, 0xa8, 0xaf, 0x7a, - 0xc0, 0x33, 0x23, 0x7b, - 0x80, 0x33, 0xaf, 0x6a, - 0xff, 0x88, 0x23, 0x6b, - 0x40, 0x33, 0xaf, 0x6a, - 0x10, 0xa8, 0x29, 0x7b, - 0x0a, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0xf8, 0x41, + 0x08, 0xa8, 0xb1, 0x7a, + 0xc0, 0x33, 0x25, 0x7b, + 0x80, 0x33, 0xb1, 0x6a, + 0xff, 0x88, 0x25, 0x6b, + 0x40, 0x33, 0xb1, 0x6a, + 0x10, 0xa8, 0x2b, 0x7b, + 0x0a, 0xea, 0x50, 0x59, 0x0a, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x48, 0x5b, - 0x00, 0xe2, 0x7c, 0x43, - 0x50, 0x4b, 0x30, 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, @@ -422,25 +423,25 @@ static uint8_t seqprog[] = { 0x01, 0xfa, 0xc0, 0x35, 0x02, 0xa8, 0x84, 0x32, 0x02, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x02, 0x42, 0x51, 0x31, 0xff, 0xae, 0x65, 0x68, - 0xff, 0x88, 0x55, 0x6b, - 0x01, 0x9c, 0x51, 0x6b, - 0x02, 0x9c, 0x59, 0x6b, - 0x01, 0x84, 0x59, 0x7b, + 0xff, 0x88, 0x57, 0x6b, + 0x01, 0x9c, 0x53, 0x6b, + 0x02, 0x9c, 0x5b, 0x6b, + 0x01, 0x84, 0x5b, 0x7b, 0x02, 0x28, 0x19, 0x33, 0x02, 0xa8, 0x50, 0x36, - 0xff, 0x88, 0x59, 0x73, - 0x00, 0xe2, 0x2c, 0x5b, + 0xff, 0x88, 0x5b, 0x73, + 0x00, 0xe2, 0x2e, 0x5b, 0x02, 0xa8, 0x5c, 0x33, 0x02, 0x2c, 0x19, 0x33, 0x02, 0xa8, 0x58, 0x32, 0x04, 0x9c, 0x39, 0x07, - 0xc0, 0x33, 0xaf, 0x6a, + 0xc0, 0x33, 0xb1, 0x6a, 0x04, 0xa8, 0x51, 0x03, - 0x20, 0xa8, 0x7d, 0x6b, + 0x20, 0xa8, 0x7f, 0x6b, 0x02, 0xa8, 0x40, 0x31, 0xc0, 0x34, 0xc1, 0x09, 0x00, 0x35, 0x51, 0x01, @@ -455,56 +456,56 @@ static uint8_t seqprog[] = { 0xf7, 0x57, 0xae, 0x08, 0x08, 0xea, 0x98, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0xee, 0x00, 0x86, 0x6b, + 0xee, 0x00, 0x88, 0x6b, 0x02, 0xea, 0xb4, 0x00, - 0x00, 0xe2, 0xae, 0x5b, - 0x09, 0x4c, 0x88, 0x7b, + 0x00, 0xe2, 0xb0, 0x5b, + 0x09, 0x4c, 0x8a, 0x7b, 0x08, 0x4c, 0x06, 0x68, - 0x0b, 0xea, 0x4e, 0x59, + 0x0b, 0xea, 0x50, 0x59, 0x0b, 0xea, 0x04, 0x00, 0x01, 0x44, 0xd4, 0x31, - 0x20, 0x33, 0xf7, 0x79, - 0x00, 0xe2, 0x98, 0x5b, - 0x00, 0xe2, 0xf6, 0x41, - 0x01, 0x84, 0x9d, 0x7b, + 0x20, 0x33, 0xf9, 0x79, + 0x00, 0xe2, 0x9a, 0x5b, + 0x00, 0xe2, 0xf8, 0x41, + 0x01, 0x84, 0x9f, 0x7b, 0x01, 0x9c, 0x39, 0x07, 0x08, 0x60, 0x20, 0x33, 0x08, 0x80, 0x31, 0x37, 0xdf, 0x33, 0x67, 0x0a, - 0xee, 0x00, 0xaa, 0x6b, + 0xee, 0x00, 0xac, 0x6b, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, - 0x00, 0xe2, 0x68, 0x59, - 0x00, 0xe2, 0xb6, 0x42, + 0x00, 0xe2, 0x6a, 0x59, + 0x00, 0xe2, 0xb8, 0x42, 0x01, 0xea, 0x6c, 0x02, 0xc0, 0xea, 0x66, 0x06, - 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, + 0xff, 0x42, 0xc0, 0x6b, + 0x01, 0x41, 0xb4, 0x6b, + 0x02, 0x41, 0xb4, 0x7b, + 0xff, 0x42, 0xc0, 0x6b, + 0x01, 0x41, 0xb4, 0x6b, + 0x02, 0x41, 0xb4, 0x7b, + 0xff, 0x42, 0xc0, 0x7b, + 0x04, 0x4c, 0xb4, 0x6b, 0xe0, 0x41, 0x6c, 0x0e, 0x01, 0x44, 0xd4, 0x31, - 0xff, 0x42, 0xc6, 0x7b, - 0x04, 0x4c, 0xc6, 0x6b, + 0xff, 0x42, 0xc8, 0x7b, + 0x04, 0x4c, 0xc8, 0x6b, 0xe0, 0x41, 0x6c, 0x0a, - 0xe0, 0x36, 0xf7, 0x61, + 0xe0, 0x36, 0xf9, 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, 0xde, 0x7b, + 0x04, 0xa6, 0xe0, 0x7b, 0xff, 0xea, 0x5a, 0x09, 0xff, 0xea, 0x4c, 0x0d, - 0x01, 0xa6, 0xfc, 0x6b, + 0x01, 0xa6, 0xfe, 0x6b, 0x10, 0xad, 0x64, 0x78, - 0x80, 0xad, 0xf4, 0x6b, + 0x80, 0xad, 0xf6, 0x6b, 0x08, 0xad, 0x64, 0x68, 0x04, 0x84, 0xf9, 0x30, 0x00, 0xea, 0x08, 0x81, @@ -521,7 +522,7 @@ static uint8_t seqprog[] = { 0x08, 0xb0, 0xe0, 0x30, 0x04, 0xb0, 0xe0, 0x30, 0x03, 0xb0, 0xf0, 0x30, - 0x01, 0x78, 0x0a, 0x7c, + 0x01, 0x78, 0x0c, 0x7c, 0x01, 0xa7, 0x4e, 0x11, 0x01, 0xb0, 0x06, 0x33, 0x7f, 0x83, 0xe9, 0x08, @@ -532,9 +533,9 @@ static uint8_t seqprog[] = { 0x00, 0x86, 0x0d, 0x23, 0x00, 0x87, 0x0f, 0x23, 0x01, 0x84, 0xc5, 0x31, - 0x01, 0xa7, 0x20, 0x7c, + 0x01, 0xa7, 0x22, 0x7c, 0x04, 0xe2, 0xc4, 0x01, - 0x80, 0x83, 0x27, 0x7c, + 0x80, 0x83, 0x29, 0x7c, 0x02, 0xe2, 0xc4, 0x01, 0xff, 0xea, 0x4c, 0x09, 0x01, 0xe2, 0x36, 0x30, @@ -546,83 +547,83 @@ static uint8_t seqprog[] = { 0x0b, 0x90, 0xe1, 0x30, 0x01, 0x98, 0x4f, 0x09, 0xfd, 0x9c, 0x49, 0x09, - 0x80, 0x9b, 0x3d, 0x7c, + 0x80, 0x9b, 0x3f, 0x7c, 0x02, 0xa4, 0x48, 0x01, - 0x01, 0xa7, 0x40, 0x7c, + 0x01, 0xa7, 0x42, 0x7c, 0x04, 0xa4, 0x48, 0x01, 0x01, 0xa4, 0x36, 0x30, 0xa8, 0xea, 0x32, 0x00, 0xfd, 0x9c, 0x39, 0x0b, 0x05, 0x9b, 0x07, 0x33, - 0x80, 0x83, 0x4d, 0x6c, + 0x80, 0x83, 0x4f, 0x6c, 0x02, 0xea, 0x4c, 0x05, 0xff, 0xea, 0x4c, 0x0d, - 0x00, 0xe2, 0x3c, 0x59, - 0x02, 0xa6, 0xe0, 0x6b, + 0x00, 0xe2, 0x3e, 0x59, + 0x02, 0xa6, 0xe2, 0x6b, 0x80, 0xf9, 0xf2, 0x05, - 0xc0, 0x33, 0x5b, 0x7c, - 0x03, 0xea, 0x4e, 0x59, + 0xc0, 0x33, 0x5d, 0x7c, + 0x03, 0xea, 0x50, 0x59, 0x03, 0xea, 0x04, 0x00, - 0x20, 0x33, 0x7f, 0x7c, - 0x01, 0x84, 0x65, 0x6c, - 0x06, 0xea, 0x4e, 0x59, + 0x20, 0x33, 0x81, 0x7c, + 0x01, 0x84, 0x67, 0x6c, + 0x06, 0xea, 0x50, 0x59, 0x06, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x82, 0x44, + 0x00, 0xe2, 0x84, 0x44, 0x01, 0x00, 0x60, 0x32, - 0xee, 0x00, 0x6e, 0x6c, + 0xee, 0x00, 0x70, 0x6c, 0x05, 0xea, 0xb4, 0x00, - 0x33, 0xea, 0x42, 0x59, + 0x33, 0xea, 0x44, 0x59, 0x33, 0xea, 0x00, 0x00, 0x80, 0x3d, 0x7a, 0x00, - 0xfc, 0x42, 0x70, 0x7c, + 0xfc, 0x42, 0x72, 0x7c, 0x7f, 0x3d, 0x7a, 0x08, - 0x00, 0x30, 0x43, 0x59, + 0x00, 0x30, 0x45, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x09, 0xea, 0x4e, 0x59, + 0x09, 0xea, 0x50, 0x59, 0x09, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x01, 0x9c, 0x65, 0x6c, - 0x00, 0xe2, 0x32, 0x5c, + 0x00, 0xe2, 0xf8, 0x41, + 0x01, 0x9c, 0x67, 0x6c, + 0x00, 0xe2, 0x34, 0x5c, 0x20, 0x33, 0x67, 0x02, 0x01, 0x00, 0x60, 0x32, - 0x02, 0xa6, 0x8a, 0x7c, - 0x00, 0xe2, 0x4e, 0x5c, + 0x02, 0xa6, 0x8c, 0x7c, + 0x00, 0xe2, 0x50, 0x5c, 0x00, 0xe2, 0x56, 0x58, 0x00, 0xe2, 0x66, 0x58, 0x00, 0xe2, 0x3a, 0x58, - 0x00, 0x30, 0x43, 0x59, + 0x00, 0x30, 0x45, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x20, 0x19, 0x8a, 0x6c, - 0x00, 0xe2, 0xba, 0x5c, - 0x04, 0x19, 0xa4, 0x6c, + 0x20, 0x19, 0x8c, 0x6c, + 0x00, 0xe2, 0xbc, 0x5c, + 0x04, 0x19, 0xa6, 0x6c, 0x02, 0x19, 0x32, 0x00, - 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, + 0x01, 0x84, 0xa7, 0x7c, + 0x01, 0x1b, 0xa0, 0x7c, + 0x01, 0x1a, 0xa6, 0x6c, + 0x00, 0xe2, 0x56, 0x44, + 0x80, 0x4b, 0xac, 0x6c, + 0x01, 0x4c, 0xa8, 0x7c, + 0x03, 0x42, 0x56, 0x6c, + 0x00, 0xe2, 0xdc, 0x5b, 0x80, 0xf9, 0xf2, 0x01, - 0x04, 0x33, 0xf7, 0x79, - 0x00, 0xe2, 0xf6, 0x41, - 0x08, 0x5d, 0xc2, 0x6c, + 0x04, 0x33, 0xf9, 0x79, + 0x00, 0xe2, 0xf8, 0x41, + 0x08, 0x5d, 0xc4, 0x6c, 0x00, 0xe2, 0x56, 0x58, - 0x00, 0x30, 0x43, 0x59, + 0x00, 0x30, 0x45, 0x59, 0x01, 0x30, 0x01, 0x30, - 0x02, 0x1b, 0xb2, 0x7c, - 0x08, 0x5d, 0xc0, 0x7c, + 0x02, 0x1b, 0xb4, 0x7c, + 0x08, 0x5d, 0xc2, 0x7c, 0x03, 0x68, 0x00, 0x37, 0x01, 0x84, 0x09, 0x07, - 0x80, 0x1b, 0xcc, 0x7c, - 0x80, 0x84, 0xcd, 0x6c, + 0x80, 0x1b, 0xce, 0x7c, + 0x80, 0x84, 0xcf, 0x6c, 0xff, 0x85, 0x0b, 0x1b, 0xff, 0x86, 0x0d, 0x23, 0xff, 0x87, 0x0f, 0x23, 0xf8, 0x1b, 0x08, 0x0b, 0xff, 0xea, 0x4e, 0x09, - 0x04, 0x1b, 0xd4, 0x7c, + 0x04, 0x1b, 0xd6, 0x7c, 0x01, 0xa7, 0x4e, 0x01, 0xff, 0xea, 0x06, 0x0b, 0x03, 0x68, 0x00, 0x37, @@ -631,161 +632,161 @@ static uint8_t seqprog[] = { 0xf9, 0xd9, 0xb2, 0x0d, 0x01, 0xd9, 0xb2, 0x05, 0x01, 0x52, 0x48, 0x31, - 0x20, 0xa4, 0xfc, 0x7c, - 0x20, 0x5b, 0xfc, 0x7c, - 0x80, 0xf9, 0x0a, 0x7d, + 0x20, 0xa4, 0xfe, 0x7c, + 0x20, 0x5b, 0xfe, 0x7c, + 0x80, 0xf9, 0x0c, 0x7d, 0x02, 0xea, 0xb4, 0x00, 0x11, 0x00, 0x00, 0x10, - 0x04, 0x19, 0x16, 0x7d, + 0x04, 0x19, 0x18, 0x7d, 0xdf, 0x19, 0x32, 0x08, - 0x60, 0x5b, 0xf4, 0x6c, - 0x01, 0x4c, 0xf0, 0x7c, + 0x60, 0x5b, 0xf6, 0x6c, + 0x01, 0x4c, 0xf2, 0x7c, 0x20, 0x19, 0x32, 0x00, 0x01, 0xd9, 0xb2, 0x05, 0x02, 0xea, 0xb4, 0x00, 0x01, 0xd9, 0xb2, 0x05, - 0x10, 0x5b, 0x0e, 0x6d, - 0x08, 0x5b, 0x18, 0x6d, - 0x20, 0x5b, 0x08, 0x6d, - 0x02, 0x5b, 0x38, 0x6d, - 0x0e, 0xea, 0x4e, 0x59, + 0x10, 0x5b, 0x10, 0x6d, + 0x08, 0x5b, 0x1a, 0x6d, + 0x20, 0x5b, 0x0a, 0x6d, + 0x02, 0x5b, 0x3a, 0x6d, + 0x0e, 0xea, 0x50, 0x59, 0x0e, 0xea, 0x04, 0x00, - 0x80, 0xf9, 0xf8, 0x6c, + 0x80, 0xf9, 0xfa, 0x6c, 0xdf, 0x5c, 0xb8, 0x08, 0x01, 0xd9, 0xb2, 0x05, - 0x01, 0x9c, 0xf3, 0x6d, - 0x00, 0xe2, 0x32, 0x5c, - 0x00, 0xe2, 0x42, 0x5d, + 0x01, 0x9c, 0xf5, 0x6d, + 0x00, 0xe2, 0x34, 0x5c, + 0x00, 0xe2, 0x44, 0x5d, 0x01, 0xae, 0x5d, 0x1b, 0x01, 0xd9, 0xb2, 0x05, - 0x00, 0xe2, 0x2c, 0x5b, + 0x00, 0xe2, 0x2e, 0x5b, 0xf3, 0xac, 0xd5, 0x19, - 0x00, 0xe2, 0x26, 0x55, - 0x80, 0xac, 0x27, 0x6d, - 0x0f, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0x28, 0x55, + 0x80, 0xac, 0x29, 0x6d, + 0x0f, 0xea, 0x50, 0x59, 0x0f, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x2e, 0x45, + 0x00, 0xe2, 0x30, 0x45, 0x04, 0x8c, 0xe1, 0x30, 0x01, 0xea, 0xf2, 0x00, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0xff, 0xad, 0x35, 0x7d, - 0x14, 0xea, 0x4e, 0x59, + 0xff, 0xad, 0x37, 0x7d, + 0x14, 0xea, 0x50, 0x59, 0x14, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xa4, 0x5d, + 0x00, 0xe2, 0xa6, 0x5d, 0x01, 0xd9, 0xb2, 0x05, 0x09, 0x80, 0xe1, 0x30, 0x02, 0xea, 0x36, 0x00, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x9c, 0x5d, + 0x00, 0xe2, 0x9e, 0x5d, 0x01, 0xd9, 0xb2, 0x05, - 0x02, 0xa6, 0x52, 0x7d, - 0x00, 0xe2, 0x3c, 0x59, - 0x20, 0x5b, 0x60, 0x6d, - 0xfc, 0x42, 0x4c, 0x7d, - 0x10, 0x40, 0x4e, 0x6d, - 0x20, 0x4d, 0x50, 0x7d, - 0x08, 0x5d, 0x60, 0x6d, - 0x02, 0xa6, 0xe0, 0x6b, - 0x00, 0xe2, 0x3c, 0x59, - 0x20, 0x5b, 0x60, 0x6d, - 0x01, 0x1b, 0x80, 0x6d, - 0xfc, 0x42, 0x5c, 0x7d, - 0x10, 0x40, 0x5e, 0x6d, + 0x02, 0xa6, 0x54, 0x7d, + 0x00, 0xe2, 0x3e, 0x59, + 0x20, 0x5b, 0x62, 0x6d, + 0xfc, 0x42, 0x4e, 0x7d, + 0x10, 0x40, 0x50, 0x6d, + 0x20, 0x4d, 0x52, 0x7d, + 0x08, 0x5d, 0x62, 0x6d, + 0x02, 0xa6, 0xe2, 0x6b, + 0x00, 0xe2, 0x3e, 0x59, + 0x20, 0x5b, 0x62, 0x6d, + 0x01, 0x1b, 0x82, 0x6d, + 0xfc, 0x42, 0x5e, 0x7d, + 0x10, 0x40, 0x60, 0x6d, 0x20, 0x4d, 0x64, 0x78, 0x08, 0x5d, 0x64, 0x78, 0x02, 0x19, 0x32, 0x00, 0x01, 0x5b, 0x40, 0x31, - 0x00, 0xe2, 0xba, 0x5c, - 0x00, 0xe2, 0x98, 0x5b, + 0x00, 0xe2, 0xbc, 0x5c, + 0x00, 0xe2, 0x9a, 0x5b, 0x20, 0xea, 0xb6, 0x00, - 0x00, 0xe2, 0xda, 0x5b, + 0x00, 0xe2, 0xdc, 0x5b, 0x20, 0x5c, 0xb8, 0x00, - 0x04, 0x19, 0x76, 0x6d, - 0x01, 0x1a, 0x76, 0x6d, - 0x00, 0xe2, 0x3c, 0x59, + 0x04, 0x19, 0x78, 0x6d, + 0x01, 0x1a, 0x78, 0x6d, + 0x00, 0xe2, 0x3e, 0x59, 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, - 0x20, 0xa0, 0xda, 0x7d, + 0x20, 0xa0, 0xdc, 0x7d, 0xff, 0xae, 0x5d, 0x1b, - 0x08, 0xa8, 0x3d, 0x6b, + 0x08, 0xa8, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x01, 0x9c, 0x39, 0x03, - 0x40, 0x5b, 0x90, 0x6d, - 0x00, 0xe2, 0x3c, 0x59, - 0x40, 0x5b, 0x90, 0x6d, - 0x04, 0x5d, 0xf4, 0x7d, - 0x01, 0x1a, 0xf4, 0x7d, + 0x40, 0x5b, 0x92, 0x6d, + 0x00, 0xe2, 0x3e, 0x59, + 0x40, 0x5b, 0x92, 0x6d, + 0x04, 0x5d, 0xf6, 0x7d, + 0x01, 0x1a, 0xf6, 0x7d, 0x20, 0x4d, 0x64, 0x78, - 0x40, 0x5b, 0xda, 0x7d, - 0x04, 0x5d, 0xf4, 0x7d, - 0x01, 0x1a, 0xf4, 0x7d, + 0x40, 0x5b, 0xdc, 0x7d, + 0x04, 0x5d, 0xf6, 0x7d, + 0x01, 0x1a, 0xf6, 0x7d, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0xae, 0x5d, 0x1b, - 0x08, 0xa8, 0x3d, 0x6b, + 0x08, 0xa8, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, - 0x00, 0xe2, 0x3c, 0x59, + 0x00, 0xe2, 0x3e, 0x59, 0x01, 0x1b, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, 0x02, 0xea, 0xb4, 0x04, - 0x00, 0xe2, 0x3c, 0x59, - 0x01, 0x1b, 0xb8, 0x6d, - 0x40, 0x5b, 0xc6, 0x7d, - 0x01, 0x1b, 0xb8, 0x6d, + 0x00, 0xe2, 0x3e, 0x59, + 0x01, 0x1b, 0xba, 0x6d, + 0x40, 0x5b, 0xc8, 0x7d, + 0x01, 0x1b, 0xba, 0x6d, 0x02, 0x19, 0x32, 0x00, 0x01, 0x1a, 0x64, 0x78, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0xea, 0x10, 0x03, 0x08, 0xa8, 0x51, 0x03, - 0x00, 0xe2, 0x3c, 0x43, - 0x01, 0x1a, 0xc2, 0x7d, - 0x40, 0x5b, 0xbe, 0x7d, - 0x01, 0x1a, 0xac, 0x6d, + 0x00, 0xe2, 0x3e, 0x43, + 0x01, 0x1a, 0xc4, 0x7d, + 0x40, 0x5b, 0xc0, 0x7d, + 0x01, 0x1a, 0xae, 0x6d, 0xfc, 0x42, 0x64, 0x78, - 0x01, 0x1a, 0xc6, 0x6d, - 0x10, 0xea, 0x4e, 0x59, + 0x01, 0x1a, 0xc8, 0x6d, + 0x10, 0xea, 0x50, 0x59, 0x10, 0xea, 0x04, 0x00, 0xfc, 0x42, 0x64, 0x78, - 0x10, 0x40, 0xcc, 0x6d, + 0x10, 0x40, 0xce, 0x6d, 0x20, 0x4d, 0x64, 0x78, - 0x40, 0x5b, 0xac, 0x6d, + 0x40, 0x5b, 0xae, 0x6d, 0x01, 0x1a, 0x64, 0x78, 0x01, 0xae, 0x5d, 0x1b, 0x30, 0x3f, 0xc0, 0x09, 0x30, 0xe0, 0x64, 0x60, 0x40, 0x4b, 0x64, 0x68, 0xff, 0xea, 0x52, 0x01, - 0xee, 0x00, 0xe0, 0x6d, + 0xee, 0x00, 0xe2, 0x6d, 0x80, 0xf9, 0xf2, 0x01, 0xff, 0xae, 0x5d, 0x1b, 0x02, 0xea, 0xb4, 0x00, 0x20, 0xea, 0x9a, 0x00, - 0xf3, 0x42, 0xec, 0x6d, - 0x12, 0xea, 0x4e, 0x59, + 0xf3, 0x42, 0xee, 0x6d, + 0x12, 0xea, 0x50, 0x59, 0x12, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, - 0x0d, 0xea, 0x4e, 0x59, + 0x00, 0xe2, 0xf8, 0x41, + 0x0d, 0xea, 0x50, 0x59, 0x0d, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0xf6, 0x41, + 0x00, 0xe2, 0xf8, 0x41, 0x01, 0xae, 0x5d, 0x1b, - 0x11, 0xea, 0x4e, 0x59, + 0x11, 0xea, 0x50, 0x59, 0x11, 0xea, 0x04, 0x00, - 0x00, 0xe2, 0x2c, 0x5b, + 0x00, 0xe2, 0x2e, 0x5b, 0x08, 0x5a, 0xb4, 0x00, - 0x00, 0xe2, 0x1a, 0x5e, + 0x00, 0xe2, 0x1c, 0x5e, 0xa8, 0xea, 0x32, 0x00, - 0x00, 0xe2, 0x3c, 0x59, - 0x80, 0x1a, 0x08, 0x7e, - 0x00, 0xe2, 0x1a, 0x5e, + 0x00, 0xe2, 0x3e, 0x59, + 0x80, 0x1a, 0x0a, 0x7e, + 0x00, 0xe2, 0x1c, 0x5e, 0x80, 0x19, 0x32, 0x00, - 0x40, 0x5b, 0x0e, 0x6e, - 0x08, 0x5a, 0x0e, 0x7e, + 0x40, 0x5b, 0x10, 0x6e, + 0x08, 0x5a, 0x10, 0x7e, 0x20, 0x4d, 0x64, 0x78, 0x02, 0x84, 0x09, 0x03, - 0x40, 0x5b, 0xda, 0x7d, + 0x40, 0x5b, 0xdc, 0x7d, 0xff, 0xae, 0x5d, 0x1b, 0x80, 0xf9, 0xf2, 0x01, - 0x08, 0xa8, 0x3d, 0x6b, + 0x08, 0xa8, 0x3f, 0x6b, 0x02, 0xea, 0xb4, 0x04, 0x01, 0x38, 0xe1, 0x30, 0x05, 0x39, 0xe3, 0x98, @@ -801,12 +802,20 @@ static uint8_t seqprog[] = { }; typedef int ahd_patch_func_t (struct ahd_softc *ahd); +static ahd_patch_func_t ahd_patch22_func; + +static int +ahd_patch22_func(struct ahd_softc *ahd) +{ + return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0); +} + static ahd_patch_func_t ahd_patch21_func; static int ahd_patch21_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) != 0); + return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0); } static ahd_patch_func_t ahd_patch20_func; @@ -814,7 +823,7 @@ static ahd_patch_func_t ahd_patch20_func; static int ahd_patch20_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_PKT_BITBUCKET_BUG) == 0); + return ((ahd->features & AHD_RTI) == 0); } static ahd_patch_func_t ahd_patch19_func; @@ -822,7 +831,7 @@ static ahd_patch_func_t ahd_patch19_func; static int ahd_patch19_func(struct ahd_softc *ahd) { - return ((ahd->features & AHD_RTI) == 0); + return ((ahd->flags & AHD_INITIATORROLE) != 0); } static ahd_patch_func_t ahd_patch18_func; @@ -830,7 +839,7 @@ static ahd_patch_func_t ahd_patch18_func; static int ahd_patch18_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_INITIATORROLE) != 0); + return ((ahd->flags & AHD_TARGETROLE) != 0); } static ahd_patch_func_t ahd_patch17_func; @@ -838,7 +847,7 @@ static ahd_patch_func_t ahd_patch17_func; static int ahd_patch17_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_TARGETROLE) != 0); + return ((ahd->bugs & AHD_AUTOFLUSH_BUG) != 0); } static ahd_patch_func_t ahd_patch16_func; @@ -846,7 +855,7 @@ static ahd_patch_func_t ahd_patch16_func; static int ahd_patch16_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_patch15_func; @@ -854,7 +863,7 @@ static ahd_patch_func_t ahd_patch15_func; static int ahd_patch15_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_patch14_func; @@ -862,7 +871,7 @@ static ahd_patch_func_t ahd_patch14_func; static int ahd_patch14_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_patch13_func; @@ -870,7 +879,7 @@ static ahd_patch_func_t ahd_patch13_func; static int ahd_patch13_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_patch12_func; @@ -878,7 +887,7 @@ static ahd_patch_func_t ahd_patch12_func; static int ahd_patch12_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_patch11_func; @@ -886,7 +895,7 @@ static ahd_patch_func_t ahd_patch11_func; static int ahd_patch11_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_REG_SLOW_SETTLE_BUG) != 0); + return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0); } static ahd_patch_func_t ahd_patch10_func; @@ -894,7 +903,7 @@ static ahd_patch_func_t ahd_patch10_func; static int ahd_patch10_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_EARLY_REQ_BUG) != 0); + return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0); } static ahd_patch_func_t ahd_patch9_func; @@ -902,7 +911,7 @@ static ahd_patch_func_t ahd_patch9_func; static int ahd_patch9_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_BUSFREEREV_BUG) == 0); + return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0); } static ahd_patch_func_t ahd_patch8_func; @@ -910,7 +919,7 @@ static ahd_patch_func_t ahd_patch8_func; static int ahd_patch8_func(struct ahd_softc *ahd) { - return ((ahd->flags & AHD_SEQUENCER_DEBUG) != 0); + return ((ahd->bugs & AHD_LQO_ATNO_BUG) != 0); } static ahd_patch_func_t ahd_patch7_func; @@ -918,7 +927,7 @@ static ahd_patch_func_t ahd_patch7_func; static int ahd_patch7_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_LQO_ATNO_BUG) != 0); + return ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0); } static ahd_patch_func_t ahd_patch6_func; @@ -926,7 +935,7 @@ static ahd_patch_func_t ahd_patch6_func; static int ahd_patch6_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_BUSFREEREV_BUG) != 0); + return ((ahd->bugs & AHD_NONPACKFIFO_BUG) != 0); } static ahd_patch_func_t ahd_patch5_func; @@ -934,7 +943,7 @@ static ahd_patch_func_t ahd_patch5_func; static int ahd_patch5_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_NONPACKFIFO_BUG) != 0); + return ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0); } static ahd_patch_func_t ahd_patch4_func; @@ -942,7 +951,7 @@ static ahd_patch_func_t ahd_patch4_func; static int ahd_patch4_func(struct ahd_softc *ahd) { - return ((ahd->bugs & AHD_SENT_SCB_UPDATE_BUG) != 0); + return ((ahd->bugs & AHD_PKT_LUN_BUG) != 0); } static ahd_patch_func_t ahd_patch3_func; @@ -1008,109 +1017,110 @@ static struct patch { { ahd_patch0_func, 70, 1, 1 }, { ahd_patch1_func, 73, 1, 2 }, { ahd_patch0_func, 74, 1, 1 }, - { ahd_patch2_func, 161, 6, 1 }, - { ahd_patch1_func, 167, 2, 1 }, - { ahd_patch4_func, 169, 1, 1 }, - { ahd_patch2_func, 178, 1, 2 }, - { ahd_patch0_func, 179, 1, 1 }, - { ahd_patch5_func, 180, 2, 2 }, - { ahd_patch0_func, 182, 6, 3 }, - { ahd_patch2_func, 185, 1, 2 }, - { ahd_patch0_func, 186, 1, 1 }, - { ahd_patch2_func, 189, 1, 2 }, - { ahd_patch0_func, 190, 1, 1 }, - { ahd_patch6_func, 192, 2, 1 }, - { ahd_patch4_func, 200, 16, 2 }, - { ahd_patch0_func, 216, 1, 1 }, - { ahd_patch7_func, 236, 2, 1 }, - { ahd_patch1_func, 240, 1, 2 }, - { ahd_patch0_func, 241, 1, 1 }, - { ahd_patch6_func, 244, 2, 1 }, - { ahd_patch1_func, 258, 1, 2 }, - { ahd_patch0_func, 259, 1, 1 }, - { ahd_patch1_func, 262, 1, 2 }, - { ahd_patch0_func, 263, 1, 1 }, - { ahd_patch2_func, 266, 1, 2 }, - { ahd_patch0_func, 267, 1, 1 }, - { ahd_patch1_func, 322, 1, 2 }, - { ahd_patch0_func, 323, 1, 1 }, - { ahd_patch2_func, 331, 1, 2 }, - { ahd_patch0_func, 332, 1, 1 }, - { ahd_patch2_func, 335, 1, 2 }, - { ahd_patch0_func, 336, 1, 1 }, - { ahd_patch1_func, 343, 1, 2 }, - { ahd_patch0_func, 344, 1, 1 }, - { ahd_patch8_func, 363, 1, 1 }, - { ahd_patch8_func, 366, 1, 1 }, - { ahd_patch8_func, 368, 1, 1 }, - { ahd_patch8_func, 380, 1, 1 }, - { ahd_patch1_func, 390, 1, 2 }, - { ahd_patch0_func, 391, 1, 1 }, - { ahd_patch1_func, 393, 1, 2 }, - { ahd_patch0_func, 394, 1, 1 }, - { ahd_patch1_func, 402, 1, 2 }, - { ahd_patch0_func, 403, 1, 1 }, - { ahd_patch2_func, 416, 1, 2 }, - { ahd_patch0_func, 417, 1, 1 }, - { ahd_patch9_func, 447, 1, 1 }, - { ahd_patch1_func, 454, 1, 2 }, - { ahd_patch0_func, 455, 1, 1 }, - { ahd_patch2_func, 467, 1, 2 }, - { ahd_patch0_func, 468, 1, 1 }, - { ahd_patch10_func, 473, 6, 2 }, - { ahd_patch0_func, 479, 1, 1 }, - { ahd_patch11_func, 502, 1, 1 }, - { ahd_patch12_func, 511, 1, 1 }, - { ahd_patch13_func, 512, 1, 2 }, - { ahd_patch0_func, 513, 1, 1 }, - { ahd_patch14_func, 518, 1, 1 }, - { ahd_patch13_func, 519, 1, 1 }, - { ahd_patch15_func, 532, 1, 2 }, - { ahd_patch0_func, 533, 1, 1 }, - { ahd_patch1_func, 555, 1, 2 }, - { ahd_patch0_func, 556, 1, 1 }, - { ahd_patch1_func, 559, 1, 2 }, - { ahd_patch0_func, 560, 1, 1 }, - { ahd_patch2_func, 565, 1, 2 }, - { ahd_patch0_func, 566, 1, 1 }, - { ahd_patch2_func, 570, 1, 2 }, - { ahd_patch0_func, 571, 1, 1 }, - { ahd_patch1_func, 572, 1, 2 }, - { ahd_patch0_func, 573, 1, 1 }, - { ahd_patch2_func, 584, 1, 2 }, - { ahd_patch0_func, 585, 1, 1 }, - { ahd_patch16_func, 589, 1, 1 }, - { ahd_patch17_func, 594, 1, 1 }, - { ahd_patch18_func, 595, 2, 1 }, - { ahd_patch17_func, 599, 1, 2 }, - { ahd_patch0_func, 600, 1, 1 }, - { ahd_patch2_func, 603, 1, 2 }, - { ahd_patch0_func, 604, 1, 1 }, - { ahd_patch2_func, 622, 1, 2 }, - { ahd_patch0_func, 623, 1, 1 }, - { ahd_patch19_func, 624, 14, 1 }, - { ahd_patch1_func, 642, 1, 2 }, - { ahd_patch0_func, 643, 1, 1 }, - { ahd_patch19_func, 644, 1, 1 }, - { ahd_patch1_func, 656, 1, 2 }, - { ahd_patch0_func, 657, 1, 1 }, - { ahd_patch1_func, 664, 1, 2 }, - { ahd_patch0_func, 665, 1, 1 }, - { ahd_patch16_func, 688, 1, 1 }, - { ahd_patch16_func, 726, 1, 1 }, - { ahd_patch1_func, 737, 1, 2 }, - { ahd_patch0_func, 738, 1, 1 }, - { ahd_patch1_func, 755, 1, 2 }, - { ahd_patch0_func, 756, 1, 1 }, - { ahd_patch1_func, 758, 1, 2 }, - { ahd_patch0_func, 759, 1, 1 }, - { ahd_patch1_func, 762, 1, 2 }, - { ahd_patch0_func, 763, 1, 1 }, - { ahd_patch20_func, 765, 1, 2 }, - { ahd_patch0_func, 766, 2, 1 }, - { ahd_patch21_func, 769, 4, 2 }, - { ahd_patch0_func, 773, 1, 1 }, - { ahd_patch21_func, 781, 11, 1 } + { ahd_patch4_func, 107, 1, 1 }, + { ahd_patch2_func, 162, 6, 1 }, + { ahd_patch1_func, 168, 2, 1 }, + { ahd_patch5_func, 170, 1, 1 }, + { ahd_patch2_func, 179, 1, 2 }, + { ahd_patch0_func, 180, 1, 1 }, + { ahd_patch6_func, 181, 2, 2 }, + { ahd_patch0_func, 183, 6, 3 }, + { ahd_patch2_func, 186, 1, 2 }, + { ahd_patch0_func, 187, 1, 1 }, + { ahd_patch2_func, 190, 1, 2 }, + { ahd_patch0_func, 191, 1, 1 }, + { ahd_patch7_func, 193, 2, 1 }, + { ahd_patch5_func, 201, 16, 2 }, + { ahd_patch0_func, 217, 1, 1 }, + { ahd_patch8_func, 237, 2, 1 }, + { ahd_patch1_func, 241, 1, 2 }, + { ahd_patch0_func, 242, 1, 1 }, + { ahd_patch7_func, 245, 2, 1 }, + { ahd_patch1_func, 259, 1, 2 }, + { ahd_patch0_func, 260, 1, 1 }, + { ahd_patch1_func, 263, 1, 2 }, + { ahd_patch0_func, 264, 1, 1 }, + { ahd_patch2_func, 267, 1, 2 }, + { ahd_patch0_func, 268, 1, 1 }, + { ahd_patch1_func, 323, 1, 2 }, + { ahd_patch0_func, 324, 1, 1 }, + { ahd_patch2_func, 332, 1, 2 }, + { ahd_patch0_func, 333, 1, 1 }, + { ahd_patch2_func, 336, 1, 2 }, + { ahd_patch0_func, 337, 1, 1 }, + { ahd_patch1_func, 344, 1, 2 }, + { ahd_patch0_func, 345, 1, 1 }, + { ahd_patch9_func, 364, 1, 1 }, + { ahd_patch9_func, 367, 1, 1 }, + { ahd_patch9_func, 369, 1, 1 }, + { ahd_patch9_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, 403, 1, 2 }, + { ahd_patch0_func, 404, 1, 1 }, + { ahd_patch2_func, 417, 1, 2 }, + { ahd_patch0_func, 418, 1, 1 }, + { ahd_patch10_func, 448, 1, 1 }, + { ahd_patch1_func, 455, 1, 2 }, + { ahd_patch0_func, 456, 1, 1 }, + { ahd_patch2_func, 468, 1, 2 }, + { ahd_patch0_func, 469, 1, 1 }, + { ahd_patch11_func, 474, 6, 2 }, + { ahd_patch0_func, 480, 1, 1 }, + { ahd_patch12_func, 503, 1, 1 }, + { ahd_patch13_func, 512, 1, 1 }, + { ahd_patch14_func, 513, 1, 2 }, + { ahd_patch0_func, 514, 1, 1 }, + { ahd_patch15_func, 519, 1, 1 }, + { ahd_patch14_func, 520, 1, 1 }, + { ahd_patch16_func, 533, 1, 2 }, + { ahd_patch0_func, 534, 1, 1 }, + { ahd_patch1_func, 556, 1, 2 }, + { ahd_patch0_func, 557, 1, 1 }, + { ahd_patch1_func, 560, 1, 2 }, + { ahd_patch0_func, 561, 1, 1 }, + { ahd_patch2_func, 566, 1, 2 }, + { ahd_patch0_func, 567, 1, 1 }, + { ahd_patch2_func, 571, 1, 2 }, + { ahd_patch0_func, 572, 1, 1 }, + { ahd_patch1_func, 573, 1, 2 }, + { ahd_patch0_func, 574, 1, 1 }, + { ahd_patch2_func, 585, 1, 2 }, + { ahd_patch0_func, 586, 1, 1 }, + { ahd_patch17_func, 590, 1, 1 }, + { ahd_patch18_func, 595, 1, 1 }, + { ahd_patch19_func, 596, 2, 1 }, + { ahd_patch18_func, 600, 1, 2 }, + { ahd_patch0_func, 601, 1, 1 }, + { ahd_patch2_func, 604, 1, 2 }, + { ahd_patch0_func, 605, 1, 1 }, + { ahd_patch2_func, 623, 1, 2 }, + { ahd_patch0_func, 624, 1, 1 }, + { ahd_patch20_func, 625, 14, 1 }, + { ahd_patch1_func, 643, 1, 2 }, + { ahd_patch0_func, 644, 1, 1 }, + { ahd_patch20_func, 645, 1, 1 }, + { ahd_patch1_func, 657, 1, 2 }, + { ahd_patch0_func, 658, 1, 1 }, + { ahd_patch1_func, 665, 1, 2 }, + { ahd_patch0_func, 666, 1, 1 }, + { ahd_patch17_func, 689, 1, 1 }, + { ahd_patch17_func, 727, 1, 1 }, + { ahd_patch1_func, 738, 1, 2 }, + { ahd_patch0_func, 739, 1, 1 }, + { ahd_patch1_func, 756, 1, 2 }, + { ahd_patch0_func, 757, 1, 1 }, + { ahd_patch1_func, 759, 1, 2 }, + { ahd_patch0_func, 760, 1, 1 }, + { ahd_patch1_func, 763, 1, 2 }, + { ahd_patch0_func, 764, 1, 1 }, + { ahd_patch21_func, 766, 1, 2 }, + { ahd_patch0_func, 767, 2, 1 }, + { ahd_patch22_func, 770, 4, 2 }, + { ahd_patch0_func, 774, 1, 1 }, + { ahd_patch22_func, 782, 11, 1 } }; static struct cs { @@ -1121,14 +1131,14 @@ static struct cs { { 13, 14 }, { 29, 42 }, { 56, 59 }, - { 101, 127 }, - { 128, 156 }, - { 158, 161 }, - { 169, 177 }, - { 200, 249 }, - { 688, 704 }, - { 704, 718 }, - { 728, 732 } + { 101, 128 }, + { 129, 157 }, + { 159, 162 }, + { 170, 178 }, + { 201, 250 }, + { 689, 705 }, + { 705, 719 }, + { 729, 733 } }; static const int num_critical_sections = sizeof(critical_sections) diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c index 87bc0cd433dc..ff8201224180 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c @@ -1,7 +1,7 @@ /* * Adaptec AIC7xxx device driver for Linux. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#221 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#229 $ * * Copyright (c) 1994 John Aycock * The University of Calgary Department of Computer Science. @@ -141,11 +141,6 @@ #include <linux/mm.h> /* For fetching system memory size */ #include <linux/blk.h> /* For block_size() */ -#define __KERNEL_SYSCALLS__ - -#include <linux/unistd.h> -static int errno; - /* * Lock protecting manipulation of the ahc softc list. */ @@ -746,31 +741,11 @@ ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb, consumed = 1; sg->addr = ahc_htole32(addr & 0xFFFFFFFF); scb->platform_data->xfer_len += len; + if (sizeof(bus_addr_t) > 4 - && (ahc->flags & AHC_39BIT_ADDRESSING) != 0) { - /* - * Due to DAC restrictions, we can't - * cross a 4GB boundary. - */ - if ((addr ^ (addr + len - 1)) & ~0xFFFFFFFF) { - struct ahc_dma_seg *next_sg; - uint32_t next_len; - - printf("Crossed Seg\n"); - if ((scb->sg_count + 2) > AHC_NSEG) - panic("Too few segs for dma mapping. " - "Increase AHC_NSEG\n"); - - consumed++; - next_sg = sg + 1; - next_sg->addr = 0; - next_len = 0x100000000 - (addr & 0xFFFFFFFF); - len -= next_len; - next_len |= ((addr >> 8) + 0x1000000) & 0x7F000000; - next_sg->len = ahc_htole32(next_len); - } - len |= (addr >> 8) & 0x7F000000; - } + && (ahc->flags & AHC_39BIT_ADDRESSING) != 0) + len |= (addr >> 8) & AHC_SG_HIGH_ADDR_MASK; + sg->len = ahc_htole32(len); return (consumed); } @@ -1195,10 +1170,10 @@ ahc_linux_select_queue_depth(struct Scsi_Host *host, Scsi_Device *scsi_devs) } #endif +#if defined(__i386__) /* * Return the disk geometry for the given SCSI device. */ -#if defined(__i386__) static int #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) ahc_linux_biosparam(struct scsi_device *sdev, struct block_device *bdev, @@ -1747,7 +1722,7 @@ ahc_linux_register_host(struct ahc_softc *ahc, Scsi_Host_Template *template) struct Scsi_Host *host; char *new_name; u_long s; - u_int target; + u_int targ_offset; template->name = ahc->description; host = scsi_register(template, sizeof(struct ahc_softc *)); @@ -1802,14 +1777,19 @@ ahc_linux_register_host(struct ahc_softc *ahc, Scsi_Host_Template *template) * negotiation will occur for the first command, and DV * will comence should that first command be successful. */ - for (target = 0; - target < host->max_id * (host->max_channel + 1); target++) { + for (targ_offset = 0; + targ_offset < host->max_id * (host->max_channel + 1); + targ_offset++) { u_int channel; + u_int target; channel = 0; + target = targ_offset; if (target > 7 - && (ahc->features & AHC_TWIN) != 0) + && (ahc->features & AHC_TWIN) != 0) { channel = 1; + target &= 0x7; + } /* * Skip our own ID. Some Compaq/HP storage devices * have enclosure management devices that respond to @@ -2443,8 +2423,10 @@ ahc_linux_dv_target(struct ahc_softc *ahc, u_int target_offset) ahc_unlock(ahc, &s); return; } - ahc_compile_devinfo(&devinfo, ahc->our_id, targ->target, /*lun*/0, - targ->channel + 'A', ROLE_INITIATOR); + ahc_compile_devinfo(&devinfo, + targ->channel == 0 ? ahc->our_id : ahc->our_id_b, + targ->target, /*lun*/0, targ->channel + 'A', + ROLE_INITIATOR); #ifdef AHC_DEBUG if (ahc_debug & AHC_SHOW_DV) { ahc_print_devinfo(ahc, &devinfo); @@ -3881,7 +3863,7 @@ ahc_linux_run_device_queue(struct ahc_softc *ahc, struct ahc_linux_device *dev) /* * SCSI controller interrupt handler. */ -AIC_LINUX_IRQRETURN_T +irqreturn_t ahc_linux_isr(int irq, void *dev_id, struct pt_regs * regs) { struct ahc_softc *ahc; @@ -3895,7 +3877,7 @@ ahc_linux_isr(int irq, void *dev_id, struct pt_regs * regs) ahc_schedule_runq(ahc); ahc_linux_run_complete_queue(ahc); ahc_unlock(ahc, &flags); - AIC_LINUX_IRQRETURN(ours); + return IRQ_RETVAL(ours); } void diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h index 0e7087d2649f..3d75cf91f9b7 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.h +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h @@ -53,7 +53,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#142 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#146 $ * */ #ifndef _AIC7XXX_LINUX_H_ @@ -305,7 +305,7 @@ ahc_scb_timer_reset(struct scb *scb, u_int usec) #define AHC_SCSI_HAS_HOST_LOCK 0 #endif -#define AIC7XXX_DRIVER_VERSION "6.2.33" +#define AIC7XXX_DRIVER_VERSION "6.2.35" /**************************** Front End Queues ********************************/ /* @@ -778,7 +778,7 @@ ahc_done_unlock(struct ahc_softc *ahc, unsigned long *flags) } static __inline void -ahc_list_lockinit(void) +ahc_list_lockinit() { spin_lock_init(&ahc_list_spinlock); } @@ -1165,7 +1165,7 @@ void ahc_platform_set_tags(struct ahc_softc *ahc, int ahc_platform_abort_scbs(struct ahc_softc *ahc, int target, char channel, int lun, u_int tag, role_t role, uint32_t status); -AIC_LINUX_IRQRETURN_T +irqreturn_t ahc_linux_isr(int irq, void *dev_id, struct pt_regs * regs); void ahc_platform_flushwork(struct ahc_softc *ahc); int ahc_softc_comp(struct ahc_softc *, struct ahc_softc *); diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c index 1bc16d403d62..2fc15de489be 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c @@ -36,7 +36,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c#44 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c#45 $ */ #include "aic7xxx_osm.h" @@ -110,6 +110,7 @@ static int ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { char buf[80]; + bus_addr_t mask_39bit; struct ahc_softc *ahc; ahc_dev_softc_t pci; struct ahc_pci_identity *entry; @@ -160,12 +161,12 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) } pci_set_master(pdev); + mask_39bit = (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0); if (sizeof(bus_addr_t) > 4 && ahc_linux_get_memsize() > 0x80000000 - && ahc_pci_set_dma_mask(pdev, 0x7FFFFFFFFFULL) == 0) { + && ahc_pci_set_dma_mask(pdev, mask_39bit) == 0) { ahc->flags |= AHC_39BIT_ADDRESSING; - ahc->platform_data->hw_dma_mask = - (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0); + ahc->platform_data->hw_dma_mask = mask_39bit; } else { ahc_pci_set_dma_mask(pdev, 0xFFFFFFFF); ahc->platform_data->hw_dma_mask = 0xFFFFFFFF; diff --git a/drivers/scsi/aic7xxx/aic7xxx_pci.c b/drivers/scsi/aic7xxx/aic7xxx_pci.c index 2d5cbf34f970..265ba3d9c7c0 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_pci.c +++ b/drivers/scsi/aic7xxx/aic7xxx_pci.c @@ -39,7 +39,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_pci.c#63 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#65 $ * * $FreeBSD$ */ @@ -834,10 +834,10 @@ ahc_pci_config(struct ahc_softc *ahc, struct ahc_pci_identity *entry) ahc_pci_write_config(ahc->dev_softc, DEVCONFIG, devconfig, /*bytes*/4); /* Ensure busmastering is enabled */ - command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, /*bytes*/1); + command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, /*bytes*/2); command |= PCIM_CMD_BUSMASTEREN; - ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, /*bytes*/1); + ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, /*bytes*/2); /* On all PCI adapters, we allow SCB paging */ ahc->flags |= AHC_PAGESCBS; diff --git a/drivers/scsi/aic7xxx/aiclib.h b/drivers/scsi/aic7xxx/aiclib.h index e9dbe93b3a87..a0243ee229d6 100644 --- a/drivers/scsi/aic7xxx/aiclib.h +++ b/drivers/scsi/aic7xxx/aiclib.h @@ -60,12 +60,9 @@ /* * Linux Interrupt Support. */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) -#define AIC_LINUX_IRQRETURN_T irqreturn_t -#define AIC_LINUX_IRQRETURN(ours) return (IRQ_RETVAL(ours)) -#else -#define AIC_LINUX_IRQRETURN_T void -#define AIC_LINUX_IRQRETURN(ours) return +#ifndef IRQ_RETVAL +typedef void irqreturn_t; +#define IRQ_RETVAL(x) #endif /* |
