Commit 4548e111 authored by Justin T. Gibbs's avatar Justin T. Gibbs

Merge http://linux.bkbits.net/linux-2.5

into overdrive.btc.adaptec.com:/usr/home/gibbs/bk/linux-2.5
parents ace40f57 06d7b0f9
......@@ -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
......
......@@ -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);
......
......@@ -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
}
......
......@@ -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;
......
......@@ -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;
......
......@@ -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
......
/*
* 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
......
......@@ -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 *);
......
......@@ -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);
......
......@@ -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 */
......@@ -138,6 +159,12 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
"Adaptec 39320 Ultra320 SCSI adapter",
ahd_aic7902_setup
},
{
ID_AHA_39320_B,
ID_ALL_MASK,
"Adaptec 39320 Ultra320 SCSI adapter",
ahd_aic7902_setup
},
{
ID_AHA_39320A,
ID_ALL_MASK,
......@@ -181,6 +208,12 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
ahd_aic7902_setup
},
/* 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,
......@@ -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)
......@@ -867,6 +900,18 @@ ahd_pci_split_intr(struct ahd_softc *ahd, u_int intstat)
ahd_restore_modes(ahd, saved_modes);
}
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)
{
......@@ -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';
......
......@@ -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
......@@ -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));
}
......
......@@ -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)
......
/*
* 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
......
......@@ -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 *);
......
......@@ -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;
......
......@@ -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;
......
......@@ -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
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment