Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
d8433379
Commit
d8433379
authored
Dec 20, 2002
by
Justin T. Gibbs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update to aic7xxx version 6.2.24 and aic79xx version 1.3.0_ALPHA5.
parent
f211e1fd
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1386 additions
and
684 deletions
+1386
-684
drivers/scsi/aic7xxx/Makefile
drivers/scsi/aic7xxx/Makefile
+3
-3
drivers/scsi/aic7xxx/aic79xx.h
drivers/scsi/aic7xxx/aic79xx.h
+46
-3
drivers/scsi/aic7xxx/aic79xx.reg
drivers/scsi/aic7xxx/aic79xx.reg
+77
-21
drivers/scsi/aic7xxx/aic79xx.seq
drivers/scsi/aic7xxx/aic79xx.seq
+75
-6
drivers/scsi/aic7xxx/aic79xx_core.c
drivers/scsi/aic7xxx/aic79xx_core.c
+312
-36
drivers/scsi/aic7xxx/aic79xx_inline.h
drivers/scsi/aic7xxx/aic79xx_inline.h
+7
-2
drivers/scsi/aic7xxx/aic79xx_osm.c
drivers/scsi/aic7xxx/aic79xx_osm.c
+148
-52
drivers/scsi/aic7xxx/aic79xx_osm.h
drivers/scsi/aic7xxx/aic79xx_osm.h
+11
-3
drivers/scsi/aic7xxx/aic79xx_proc.c
drivers/scsi/aic7xxx/aic79xx_proc.c
+3
-2
drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
+101
-41
drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
+87
-43
drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
+462
-429
drivers/scsi/aic7xxx/aic7xxx_core.c
drivers/scsi/aic7xxx/aic7xxx_core.c
+1
-2
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
+46
-35
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_osm.h
+4
-3
drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
+3
-3
No files found.
drivers/scsi/aic7xxx/Makefile
View file @
d8433379
#
# Makefile for the Linux aic7xxx SCSI driver.
#
# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Makefile#
2
$
# $Id: //depot/linux-aic79xx-2.5.0/drivers/scsi/aic7xxx/Makefile#
3
$
#
# Let kbuild descend into aicasm when cleaning
...
...
@@ -53,7 +53,7 @@ aic7xxx_gen = $(obj)/aic7xxx_seq.h $(obj)/aic7xxx_reg.h
ifeq
($(CONFIG_AIC7XXX_REG_PRETTY_PRINT),y)
aic7xxx_gen
+=
$(obj)
/aic7xxx_reg_print.c
aic7xxx_asm_cmd
=
$(obj)
/aicasm/aicasm
-I
$(src)
-r
$(obj)
/aic7xxx_reg.h
\
-p
aic7xxx_reg_print.c
-i
aic7xxx_osm.h
\
-p
$(obj)
/
aic7xxx_reg_print.c
-i
aic7xxx_osm.h
\
-o
$(obj)
/aic7xxx_seq.h
$(src)
/aic7xxx.seq
else
aic7xxx_asm_cmd
=
$(obj)
/aicasm/aicasm
-I
$(src)
-r
$(obj)
/aic7xxx_reg.h
\
...
...
@@ -69,7 +69,7 @@ aic79xx_gen = $(obj)/aic79xx_seq.h $(obj)/aic79xx_reg.h
ifeq
($(CONFIG_AIC79XX_REG_PRETTY_PRINT),y)
aic79xx_gen
+=
$(obj)
/aic79xx_reg_print.c
aic79xx_asm_cmd
=
$(obj)
/aicasm/aicasm
-I
$(src)
-r
$(obj)
/aic79xx_reg.h
\
-p
aic79xx_reg_print.c
-i
aic79xx_osm.h
\
-p
$(obj)
/
aic79xx_reg_print.c
-i
aic79xx_osm.h
\
-o
$(obj)
/aic79xx_seq.h
$(src)
/aic79xx.seq
else
aic79xx_asm_cmd
=
$(obj)
/aicasm/aicasm
-I
$(src)
-r
$(obj)
/aic79xx_reg.h
\
...
...
drivers/scsi/aic7xxx/aic79xx.h
View file @
d8433379
...
...
@@ -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#7
6
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#7
8
$
*
* $FreeBSD$
*/
...
...
@@ -356,7 +356,9 @@ typedef enum {
AHD_CURRENT_SENSING
=
0x40000
,
AHD_SCB_CONFIG_USED
=
0x80000
,
/* No SEEPROM but SCB had info. */
AHD_HP_BOARD
=
0x100000
,
AHD_RESET_POLL_ACTIVE
=
0x200000
AHD_RESET_POLL_ACTIVE
=
0x200000
,
AHD_UPDATE_PEND_CMDS
=
0x400000
,
AHD_RUNNING_QOUTFIFO
=
0x800000
}
ahd_flag
;
/************************* Hardware SCB Definition ***************************/
...
...
@@ -1063,6 +1065,16 @@ struct ahd_softc {
* Timer handles for timer driven callbacks.
*/
ahd_timer_t
reset_timer
;
ahd_timer_t
stat_timer
;
/*
* Statistics.
*/
#define AHD_STAT_UPDATE_US 250000
/* 250ms */
#define AHD_STAT_BUCKETS 4
u_int
cmdcmplt_bucket
;
uint32_t
cmdcmplt_counts
[
AHD_STAT_BUCKETS
];
uint32_t
cmdcmplt_total
;
/*
* Card characteristics
...
...
@@ -1106,6 +1118,12 @@ struct ahd_softc {
struct
target_cmd
*
targetcmds
;
uint8_t
tqinfifonext
;
/*
* Cached verson of the hs_mailbox so we can avoid
* pausing the sequencer during mailbox updates.
*/
uint8_t
hs_mailbox
;
/*
* Incoming and outgoing message handling.
*/
...
...
@@ -1154,6 +1172,22 @@ struct ahd_softc {
/* Selection Timer settings */
int
seltime
;
/*
* Interrupt coalessing 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
;
uint16_t
user_discenable
;
/* Disconnection allowed */
uint16_t
user_tagenable
;
/* Tagged Queuing allowed */
};
...
...
@@ -1240,6 +1274,7 @@ extern const int ahd_num_aic7770_devs;
/*************************** Function Declarations ****************************/
/******************************************************************************/
void
ahd_reset_cmds_pending
(
struct
ahd_softc
*
ahd
);
u_int
ahd_find_busy_tcl
(
struct
ahd_softc
*
ahd
,
u_int
tcl
);
void
ahd_busy_tcl
(
struct
ahd_softc
*
ahd
,
u_int
tcl
,
u_int
busyid
);
...
...
@@ -1273,6 +1308,12 @@ int ahd_default_config(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
,
u_int
timer
,
u_int
maxcmds
,
u_int
mincmds
);
void
ahd_enable_coalessing
(
struct
ahd_softc
*
ahd
,
int
enable
);
void
ahd_pause_and_flushwork
(
struct
ahd_softc
*
ahd
);
int
ahd_suspend
(
struct
ahd_softc
*
ahd
);
int
ahd_resume
(
struct
ahd_softc
*
ahd
);
...
...
@@ -1295,6 +1336,7 @@ int ahd_wait_flexport(struct ahd_softc *ahd);
/*************************** Interrupt Services *******************************/
void
ahd_pci_intr
(
struct
ahd_softc
*
ahd
);
void
ahd_clear_intstat
(
struct
ahd_softc
*
ahd
);
void
ahd_flush_qoutfifo
(
struct
ahd_softc
*
ahd
);
void
ahd_run_qoutfifo
(
struct
ahd_softc
*
ahd
);
#ifdef AHD_TARGET_MODE
void
ahd_run_tqinfifo
(
struct
ahd_softc
*
ahd
,
int
paused
);
...
...
@@ -1418,7 +1460,8 @@ extern uint32_t ahd_debug;
#define AHD_SHOW_QUEUE 0x02000
#define AHD_SHOW_TQIN 0x04000
#define AHD_SHOW_SG 0x08000
#define AHD_DEBUG_SEQUENCER 0x10000
#define AHD_SHOW_INT_COALESSING 0x10000
#define AHD_DEBUG_SEQUENCER 0x20000
#endif
void
ahd_print_scb
(
struct
scb
*
scb
);
void
ahd_print_devinfo
(
struct
ahd_softc
*
ahd
,
...
...
drivers/scsi/aic7xxx/aic79xx.reg
View file @
d8433379
...
...
@@ -39,7 +39,7 @@
*
* $FreeBSD$
*/
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
6
$"
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
9
$"
/*
* This file is processed by the aic7xxx_asm utility for use in assembling
...
...
@@ -265,16 +265,17 @@ register HESCB_QOFF {
* Host Mailbox
*/
register HS_MAILBOX {
address 0x0B
address 0x0
0
B
access_mode RW
mask HOST_TQINPOS 0x80 /* Boundary at either 0 or 128 */
mask ENINT_COALESS 0x40 /* Perform interrupt coalessing */
}
/*
* Sequencer Interupt Status
*/
register SEQINTSTAT {
address 0x0C
address 0x0
0
C
access_mode RO
field SEQ_SWTMRTO 0x10
field SEQ_SEQINT 0x08
...
...
@@ -287,7 +288,7 @@ register SEQINTSTAT {
* Clear SEQ Interrupt
*/
register CLRSEQINTSTAT {
address 0x0
C0
address 0x0
0C
access_mode WO
field CLRSEQ_SWTMRTO 0x10
field CLRSEQ_SEQINT 0x08
...
...
@@ -300,7 +301,7 @@ register CLRSEQINTSTAT {
* Software Timer
*/
register SWTIMER {
address 0x0
E0
address 0x0
0E
access_mode RW
size 2
}
...
...
@@ -3105,21 +3106,6 @@ register RCVRBIASCALC {
modes M_CFG
}
/*
* Data FIFO Debug Control
*/
register DFDBCTL {
address 0x0C8
access_mode RW
modes M_DFF0, M_DFF1
field DFF_CIO_WR_RDY 0x20
field DFF_CIO_RD_RDY 0x10
field DFF_DIR_ERR 0x08
field DFF_RAMBIST_FAIL 0x04
field DFF_RAMBIST_DONE 0x02
field DFF_RAMBIST_EN 0x01
}
/*
* Data FIFO Backup Read Pointer
* Contains the data FIFO address to be restored if the last
...
...
@@ -3141,6 +3127,21 @@ register SKEWCALC {
modes M_CFG
}
/*
* Data FIFO Debug Control
*/
register DFDBCTL {
address 0x0CB
access_mode RW
modes M_DFF0, M_DFF1
field DFF_CIO_WR_RDY 0x20
field DFF_CIO_RD_RDY 0x10
field DFF_DIR_ERR 0x08
field DFF_RAMBIST_FAIL 0x04
field DFF_RAMBIST_DONE 0x02
field DFF_RAMBIST_EN 0x01
}
/*
* Data FIFO Space Count
* Number of FIFO locations that are free.
...
...
@@ -3226,7 +3227,8 @@ register SEQINTCTL {
field INT1_CONTEXT 0x20
field SCS_SEQ_INT1M1 0x10
field SCS_SEQ_INT1M0 0x08
field INTMASK 0x06
field INTMASK2 0x04
field INTMASK1 0x02
field IRET 0x01
}
...
...
@@ -3686,6 +3688,53 @@ scratch_ram {
size 2
}
/*
* The maximum amount of time to wait, when interrupt coalessing
* is enabled, before issueing a CMDCMPLT interrupt for a completed
* command.
*/
INT_COALESSING_TIMER {
size 2
}
/*
* The maximum number of commands to coaless into a single interrupt.
* Actually the 2's complement of that value to simplify sequencer
* code.
*/
INT_COALESSING_MAXCMDS {
size 1
}
/*
* The minimum number of commands still outstanding required
* to continue coalessing (2's compliment of value).
*/
INT_COALESSING_MINCMDS {
size 1
}
/*
* Number of commands "in-flight".
*/
CMDS_PENDING {
size 2
}
/*
* The count of commands that have been coalessed.
*/
INT_COALESSING_CMDCOUNT {
size 1
}
/*
* Since the HS_MAIBOX is self clearing, copy its contents to
* this position in scratch ram every time it changes.
*/
LOCAL_HS_MAILBOX {
size 1
}
/*
* Target-mode CDB type to CDB length table used
* in non-packetized operation.
...
...
@@ -3860,6 +3909,13 @@ const SCB_TRANSFER_SIZE_1BYTE_LUN 48
/* PKT_OVERRUN_BUFSIZE must be a multiple of 256 less than 64K */
const PKT_OVERRUN_BUFSIZE 512
/*
* Timer parameters.
*/
const AHD_TIMER_US_PER_TICK 25
const AHD_TIMER_MAX_TICKS 0xFFFF
const AHD_TIMER_MAX_US (AHD_TIMER_MAX_TICKS * AHD_TIMER_US_PER_TICK)
/*
* Downloaded (kernel inserted) constants
*/
...
...
drivers/scsi/aic7xxx/aic79xx.seq
View file @
d8433379
...
...
@@ -40,7 +40,7 @@
* $FreeBSD$
*/
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
4
$"
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
7
$"
PATCH_ARG_LIST = "struct ahd_softc *ahd"
PREFIX = "ahd_"
...
...
@@ -164,6 +164,10 @@ idle_loop_next_fifo:
idle_loop_cchan:
SET_MODE(M_CCHAN, M_CCHAN)
test QOFF_CTLSTA, HS_MAILBOX_ACT jz hs_mailbox_empty;
mov LOCAL_HS_MAILBOX, HS_MAILBOX;
or QOFF_CTLSTA, HS_MAILBOX_ACT;
hs_mailbox_empty:
BEGIN_CRITICAL;
test CCSCBCTL, CCARREN|CCSCBEN jz scbdma_idle;
test CCSCBCTL, CCSCBDIR jnz fetch_new_scb_inprog;
...
...
@@ -181,19 +185,65 @@ scbdma_tohost_done:
and CCSCBCTL, ~(CCARREN|CCSCBEN) ret;
fill_qoutfifo_dmadone:
and CCSCBCTL, ~(CCARREN|CCSCBEN);
mvi INTSTAT, CMDCMPLT
;
call qoutfifo_updated
;
mvi COMPLETE_SCB_DMAINPROG_HEAD[1], SCB_LIST_NULL;
bmov QOUTFIFO_NEXT_ADDR, SCBHADDR, 4;
test QOFF_CTLSTA, SDSCB_ROLLOVR jz return;
bmov QOUTFIFO_NEXT_ADDR, SHARED_DATA_ADDR, 4;
xor QOUTFIFO_ENTRY_VALID_TAG, QOUTFIFO_ENTRY_VALID_TOGGLE ret;
qoutfifo_updated:
/*
* If there are more commands waiting to be dma'ed
* to the host, always coaless. 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;
/*
* 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;
/* Add -1 so that jnc means <= not just < */
add A, -1, INT_COALESSING_MINCMDS;
add NONE, A, CMDS_PENDING;
jnc issue_cmdcmplt;
/*
* If coalessing, only coaless up to the limit
* provided by the host driver.
*/
coaless_by_count:
mov A, INT_COALESSING_MAXCMDS;
add NONE, A, INT_COALESSING_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;
mvi CLRSEQINTSTAT, CLRSEQ_SWTMRTO;
or INTCTL, SWTMINTEN|SWTIMER_START;
and INTCTL, ~SWTMINTMASK ret;
issue_cmdcmplt:
mvi INTSTAT, CMDCMPLT;
clr INT_COALESSING_CMDCOUNT;
or INTCTL, SWTMINTMASK ret;
BEGIN_CRITICAL;
fetch_new_scb_inprog:
test CCSCBCTL, ARRDONE jz return;
fetch_new_scb_done:
and CCSCBCTL, ~(CCARREN|CCSCBEN);
bmov REG0, SCBPTR, 2;
clr A;
add CMDS_PENDING, 1;
adc CMDS_PENDING[1], A;
/* Update the next SCB address to download. */
bmov NEXT_QUEUED_SCB_ADDR, SCB_NEXT_SCB_BUSADDR, 4;
mvi SCB_NEXT[1], SCB_LIST_NULL;
...
...
@@ -229,7 +279,6 @@ scbdma_idle:
/*
* Give precedence to downloading new SCBs to execute
* unless select-outs are currently frozen.
* XXX Use a timer to prevent completion starvation.
*/
test SEQ_FLAGS2, SELECTOUT_QFROZEN jnz . + 2;
BEGIN_CRITICAL;
...
...
@@ -251,6 +300,9 @@ fill_qoutfifo_loop:
mov CCSCBRAM, SCBPTR;
or CCSCBRAM, A, SCBPTR[1];
mov NONE, SDSCB_QOFF;
inc INT_COALESSING_CMDCOUNT;
add CMDS_PENDING, -1;
adc CMDS_PENDING[1], -1;
cmp SCB_NEXT_COMPLETE[1], SCB_LIST_NULL je fill_qoutfifo_done;
cmp CCSCBADDR, CCSCBADDR_MAX je fill_qoutfifo_done;
test QOFF_CTLSTA, SDSCB_ROLLOVR jnz fill_qoutfifo_done;
...
...
@@ -949,7 +1001,7 @@ complete_nomsg:
freeze_queue:
/* Cancel any pending select-out. */
test SSTAT0, SELDO jnz . + 2;
test SSTAT0, SELDO
|SELINGO
jnz . + 2;
and SCSISEQ0, ~ENSELO;
mov ACCUM_SAVE, A;
clr A;
...
...
@@ -1484,11 +1536,28 @@ sgptr_fixup_done:
clr SCB_RESIDUAL_DATACNT[3]; /* We are not the last seg */
bmov SCB_RESIDUAL_DATACNT, SHCNT, 3 ret;
export timer_isr:
call issue_cmdcmplt;
mvi CLRSEQINTSTAT, CLRSEQ_SWTMRTO;
if ((ahd->bugs & AHD_SET_MODE_BUG) != 0) {
/*
* In H2A4, the mode pointer is not saved
* for intvec2, but is restored on iret.
* This can lead to the restoration of a
* bogus mode ptr. Manually clear the
* intmask bits and do a normal return
* to compensate.
*/
and SEQINTCTL, ~(INTMASK2|INTMASK1) ret;
} else {
or SEQINTCTL, IRET ret;
}
export seq_isr:
nop; /* Jumps in the first ISR instruction fail on Rev A. */
test SEQINTSRC, SAVEPTRS jnz saveptr_intr;
test SEQINTSRC, CFG4DATA jnz cfg4data_intr;
test SEQINTSRC, CFG4ISTAT jnz cfg4istat_intr;
test SEQINTSRC, SAVEPTRS jnz saveptr_intr;
test SEQINTSRC, CFG4ICMD jnz cfg4icmd_intr;
SET_SEQINTCODE(INVALID_SEQINT)
...
...
@@ -1793,7 +1862,7 @@ load_overrun_buf:
/* PKT_OVERRUN_BUFSIZE is a multiple of 256 */
clr HCNT[0];
mvi HCNT[1], ((PKT_OVERRUN_BUFSIZE >> 8) & 0xFF);
clr HCNT[2];
clr HCNT[2]
ret
;
}
cfg4icmd_intr:
drivers/scsi/aic7xxx/aic79xx_core.c
View file @
d8433379
...
...
@@ -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#14
3
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#14
7
$
*
* $FreeBSD$
*/
...
...
@@ -211,6 +211,7 @@ static u_int ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid,
u_int
prev
,
u_int
next
,
u_int
tid
);
static
void
ahd_reset_current_bus
(
struct
ahd_softc
*
ahd
);
static
ahd_callback_t
ahd_reset_poll
;
static
ahd_callback_t
ahd_stat_timer
;
#ifdef AHD_DUMP_SEQ
static
void
ahd_dumpseq
(
struct
ahd_softc
*
ahd
);
#endif
...
...
@@ -282,7 +283,6 @@ ahd_set_active_fifo(struct ahd_softc *ahd)
AHD_ASSERT_MODES
(
ahd
,
AHD_MODE_SCSI_MSK
,
AHD_MODE_SCSI_MSK
);
active_fifo
=
ahd_inb
(
ahd
,
DFFSTAT
)
&
CURRFIFO
;
/* XXX This is a three possition switch in the B. */
switch
(
active_fifo
)
{
case
0
:
case
1
:
...
...
@@ -332,7 +332,6 @@ ahd_restart(struct ahd_softc *ahd)
ahd_set_modes
(
ahd
,
AHD_MODE_CCHAN
,
AHD_MODE_CCHAN
);
ahd_outb
(
ahd
,
SCBHCNT
,
0
);
ahd_outb
(
ahd
,
CCSCBCTL
,
CCSCBRESET
);
ahd_outb
(
ahd
,
SEQCTL0
,
FASTMODE
|
SEQRESET
);
ahd_unpause
(
ahd
);
}
...
...
@@ -357,12 +356,106 @@ ahd_clear_fifo(struct ahd_softc *ahd, u_int fifo)
}
/************************* Input/Output Queues ********************************/
/*
* Flush and completed commands that are sitting in the command
* complete queues down on the chip but have yet to be dma'ed back up.
*/
void
ahd_flush_qoutfifo
(
struct
ahd_softc
*
ahd
)
{
struct
scb
*
scb
;
ahd_mode_state
saved_modes
;
u_int
saved_scbptr
;
u_int
ccscbctl
;
u_int
scbid
;
u_int
next_scbid
;
saved_modes
=
ahd_save_modes
(
ahd
);
ahd_set_modes
(
ahd
,
AHD_MODE_CCHAN
,
AHD_MODE_CCHAN
);
saved_scbptr
=
ahd_get_scbptr
(
ahd
);
/*
* Wait for any inprogress DMA to complete and clear DMA state
* if this if for an SCB in the qinfifo.
*/
while
((
ccscbctl
=
ahd_inb
(
ahd
,
CCSCBCTL
)
&
(
CCARREN
|
CCSCBEN
))
!=
0
)
{
if
((
ccscbctl
&
(
CCSCBDIR
|
CCARREN
))
==
(
CCSCBDIR
|
CCARREN
))
{
if
((
ccscbctl
&
ARRDONE
)
!=
0
)
break
;
}
else
if
((
ccscbctl
&
CCSCBDONE
)
!=
0
)
break
;
ahd_delay
(
200
);
}
if
((
ccscbctl
&
CCSCBDIR
)
!=
0
)
ahd_outb
(
ahd
,
CCSCBCTL
,
ccscbctl
&
~
(
CCARREN
|
CCSCBEN
));
/*
* Complete any SCBs that just finished being
* DMA'ed into the qoutfifo.
*/
ahd_run_qoutfifo
(
ahd
);
/*
* Manually update/complete any completed SCBs that are waiting to be
* DMA'ed back up to the host.
*/
scbid
=
ahd_inw
(
ahd
,
COMPLETE_DMA_SCB_HEAD
);
while
(
!
SCBID_IS_NULL
(
scbid
))
{
uint8_t
*
hscb_ptr
;
u_int
i
;
ahd_set_scbptr
(
ahd
,
scbid
);
next_scbid
=
ahd_inw
(
ahd
,
SCB_NEXT_COMPLETE
);
scb
=
ahd_lookup_scb
(
ahd
,
scbid
);
if
(
scb
==
NULL
)
{
printf
(
"%s: Warning - DMA-up and complete "
"SCB %d invalid
\n
"
,
ahd_name
(
ahd
),
scbid
);
continue
;
}
hscb_ptr
=
(
uint8_t
*
)
scb
->
hscb
;
for
(
i
=
0
;
i
<
sizeof
(
struct
hardware_scb
);
i
++
)
*
hscb_ptr
++
=
ahd_inb
(
ahd
,
SCB_BASE
+
i
);
ahd_complete_scb
(
ahd
,
scb
);
scbid
=
next_scbid
;
}
ahd_outw
(
ahd
,
COMPLETE_DMA_SCB_HEAD
,
SCB_LIST_NULL
);
scbid
=
ahd_inw
(
ahd
,
COMPLETE_SCB_HEAD
);
while
(
!
SCBID_IS_NULL
(
scbid
))
{
ahd_set_scbptr
(
ahd
,
scbid
);
next_scbid
=
ahd_inw
(
ahd
,
SCB_NEXT_COMPLETE
);
scb
=
ahd_lookup_scb
(
ahd
,
scbid
);
if
(
scb
==
NULL
)
{
printf
(
"%s: Warning - Complete SCB %d invalid
\n
"
,
ahd_name
(
ahd
),
scbid
);
continue
;
}
ahd_complete_scb
(
ahd
,
scb
);
scbid
=
next_scbid
;
}
ahd_outw
(
ahd
,
COMPLETE_SCB_HEAD
,
SCB_LIST_NULL
);
/*
* Restore state.
*/
ahd_set_scbptr
(
ahd
,
saved_scbptr
);
ahd_restore_modes
(
ahd
,
saved_modes
);
ahd
->
flags
|=
AHD_UPDATE_PEND_CMDS
;
}
void
ahd_run_qoutfifo
(
struct
ahd_softc
*
ahd
)
{
struct
scb
*
scb
;
u_int
scb_index
;
if
((
ahd
->
flags
&
AHD_RUNNING_QOUTFIFO
)
!=
0
)
panic
(
"ahd_run_qoutfifo recursion"
);
ahd
->
flags
|=
AHD_RUNNING_QOUTFIFO
;
ahd_sync_qoutfifo
(
ahd
,
BUS_DMASYNC_POSTREAD
);
while
((
ahd
->
qoutfifo
[
ahd
->
qoutfifonext
]
&
QOUTFIFO_ENTRY_VALID_LE
)
==
ahd
->
qoutfifonext_valid_tag
)
{
...
...
@@ -382,8 +475,8 @@ ahd_run_qoutfifo(struct ahd_softc *ahd)
ahd
->
qoutfifonext
=
(
ahd
->
qoutfifonext
+
1
)
&
(
AHD_QOUT_SIZE
-
1
);
if
(
ahd
->
qoutfifonext
==
0
)
ahd
->
qoutfifonext_valid_tag
^=
QOUTFIFO_ENTRY_VALID_LE
;
}
ahd
->
flags
&=
~
AHD_RUNNING_QOUTFIFO
;
}
/************************* Interrupt Handling *********************************/
...
...
@@ -1041,7 +1134,7 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
}
ahd_outb
(
ahd
,
CLRINT
,
CLRSCSIINT
);
ahd_iocell_first_selection
(
ahd
);
ahd_
restart
(
ahd
);
ahd_
unpause
(
ahd
);
}
else
if
((
status0
&
(
SELDI
|
SELDO
))
!=
0
)
{
ahd_iocell_first_selection
(
ahd
);
ahd_unpause
(
ahd
);
...
...
@@ -1699,10 +1792,6 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
ahd_set_transaction_status
(
scb
,
CAM_REQUEUE_REQ
);
ahd_freeze_scb
(
scb
);
if
((
ahd
->
msg_flags
&
MSG_FLAG_IU_REQ_CHANGED
)
!=
0
)
{
ahd_print_path
(
ahd
,
scb
);
printf
(
"Now %spacketized.
\n
"
,
(
scb
->
flags
&
SCB_PACKETIZED
)
==
0
?
""
:
"non-"
);
ahd_abort_scbs
(
ahd
,
SCB_GET_TARGET
(
ahd
,
scb
),
SCB_GET_CHANNEL
(
ahd
,
scb
),
SCB_GET_LUN
(
scb
),
SCB_LIST_NULL
,
...
...
@@ -2324,7 +2413,6 @@ ahd_update_neg_request(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
tinfo
->
curr
.
period
=
AHD_PERIOD_UNKNOWN
;
tinfo
->
curr
.
width
=
AHD_WIDTH_UNKNOWN
;
tinfo
->
curr
.
offset
=
AHD_OFFSET_UNKNOWN
;
tinfo
->
curr
.
ppr_options
=
AHD_OFFSET_UNKNOWN
;
}
if
(
tinfo
->
curr
.
period
!=
tinfo
->
goal
.
period
||
tinfo
->
curr
.
width
!=
tinfo
->
goal
.
width
...
...
@@ -2549,9 +2637,9 @@ void
ahd_set_tags
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
,
ahd_queue_alg
alg
)
{
ahd_platform_set_tags
(
ahd
,
devinfo
,
alg
);
ahd_send_async
(
ahd
,
devinfo
->
channel
,
devinfo
->
target
,
devinfo
->
lun
,
AC_TRANSFER_NEG
,
&
alg
);
ahd_platform_set_tags
(
ahd
,
devinfo
,
alg
);
ahd_send_async
(
ahd
,
devinfo
->
channel
,
devinfo
->
target
,
devinfo
->
lun
,
AC_TRANSFER_NEG
,
&
alg
);
}
static
void
...
...
@@ -2940,9 +3028,10 @@ ahd_setup_initiator_msgout(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
"does not have a waiting message
\n
"
);
printf
(
"SCSIID = %x, target_mask = %x
\n
"
,
scb
->
hscb
->
scsiid
,
devinfo
->
target_mask
);
panic
(
"SCB = %d, SCB Control = %x, MSG_OUT = %x "
panic
(
"SCB = %d, SCB Control = %x
:%x
, MSG_OUT = %x "
"SCB flags = %x"
,
SCB_GET_TAG
(
scb
),
scb
->
hscb
->
control
,
ahd_inb
(
ahd
,
MSG_OUT
),
scb
->
flags
);
ahd_inb
(
ahd
,
SCB_CONTROL
),
ahd_inb
(
ahd
,
MSG_OUT
),
scb
->
flags
);
}
/*
...
...
@@ -3525,8 +3614,10 @@ ahd_sent_msg(struct ahd_softc *ahd, ahd_msgtype type, u_int msgval, int full)
}
else
{
/* Single byte message */
if
(
type
==
AHDMSG_1B
&&
ahd
->
msgout_buf
[
index
]
==
msgval
&&
ahd
->
msgout_index
>
index
)
&&
ahd
->
msgout_index
>
index
&&
(
ahd
->
msgout_buf
[
index
]
==
msgval
||
((
ahd
->
msgout_buf
[
index
]
&
MSG_IDENTIFYFLAG
)
!=
0
))
&&
msgval
==
MSG_IDENTIFYFLAG
)
found
=
TRUE
;
index
++
;
}
...
...
@@ -4093,6 +4184,20 @@ ahd_handle_msg_reject(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
SCB_GET_LUN
(
scb
),
/*tag*/
SCB_LIST_NULL
,
ROLE_INITIATOR
,
CAM_REQUEUE_REQ
,
SEARCH_COMPLETE
);
}
else
if
(
ahd_sent_msg
(
ahd
,
AHDMSG_1B
,
MSG_IDENTIFYFLAG
,
TRUE
))
{
/*
* Most likely the device believes that we had
* previously negotiated packetized.
*/
ahd
->
msg_flags
|=
MSG_FLAG_EXPECT_PPR_BUSFREE
|
MSG_FLAG_IU_REQ_CHANGED
;
ahd_force_renegotiation
(
ahd
,
devinfo
);
ahd
->
msgout_index
=
0
;
ahd
->
msgout_len
=
0
;
ahd_build_transfer_msg
(
ahd
,
devinfo
);
ahd
->
msgout_index
=
0
;
response
=
1
;
}
else
{
/*
* Otherwise, we ignore it.
...
...
@@ -4531,6 +4636,13 @@ ahd_alloc(void *platform_arg, char *name)
ahd
->
flags
=
AHD_SPCHK_ENB_A
|
AHD_RESET_BUS_A
|
AHD_TERM_ENB_A
|
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
;
if
(
ahd_platform_alloc
(
ahd
,
platform_arg
)
!=
0
)
{
ahd_free
(
ahd
);
...
...
@@ -4723,6 +4835,12 @@ ahd_shutdown(void *arg)
ahd
=
(
struct
ahd_softc
*
)
arg
;
/*
* Stop periodic timer callbacks.
*/
ahd_timer_stop
(
&
ahd
->
reset_timer
);
ahd_timer_stop
(
&
ahd
->
stat_timer
);
/* This will reset most registers to 0, but not all */
ahd_reset
(
ahd
);
}
...
...
@@ -5724,6 +5842,8 @@ ahd_init(struct ahd_softc *ahd)
}
init_done:
ahd_restart
(
ahd
);
ahd_timer_reset
(
&
ahd
->
stat_timer
,
AHD_STAT_UPDATE_US
,
ahd_stat_timer
,
ahd
);
return
(
0
);
}
...
...
@@ -5746,6 +5866,12 @@ ahd_chip_init(struct ahd_softc *ahd)
*/
ahd_outb
(
ahd
,
SBLKCTL
,
ahd_inb
(
ahd
,
SBLKCTL
)
&
~
(
DIAGLEDEN
|
DIAGLEDON
));
/*
* Return HS_MAILBOX to its default value.
*/
ahd
->
hs_mailbox
=
0
;
ahd_outb
(
ahd
,
HS_MAILBOX
,
0
);
/* Set the SCSI Id, SXFRCTL0, SXFRCTL1, and SIMODE1. */
ahd_outb
(
ahd
,
IOWNID
,
ahd
->
our_id
);
ahd_outb
(
ahd
,
TOWNID
,
ahd
->
our_id
);
...
...
@@ -5850,9 +5976,10 @@ ahd_chip_init(struct ahd_softc *ahd)
ahd_outb
(
ahd
,
LQOMODE1
,
0
);
/*
* Setup sequencer interrupt handler.
* Setup sequencer interrupt handler
s
.
*/
ahd_outw
(
ahd
,
INTVEC1_ADDR
,
ahd_resolve_seqaddr
(
ahd
,
LABEL_seq_isr
));
ahd_outw
(
ahd
,
INTVEC2_ADDR
,
ahd_resolve_seqaddr
(
ahd
,
LABEL_timer_isr
));
/*
* Setup SCB Offset registers.
...
...
@@ -6034,6 +6161,17 @@ ahd_chip_init(struct ahd_softc *ahd)
ahd_outb
(
ahd
,
NEXT_QUEUED_SCB_ADDR
+
1
,
(
busaddr
>>
8
)
&
0xFF
);
ahd_outb
(
ahd
,
NEXT_QUEUED_SCB_ADDR
+
2
,
(
busaddr
>>
16
)
&
0xFF
);
ahd_outb
(
ahd
,
NEXT_QUEUED_SCB_ADDR
+
3
,
(
busaddr
>>
24
)
&
0xFF
);
/*
* Default to coalessing disabled.
*/
ahd_outw
(
ahd
,
INT_COALESSING_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_loadseq
(
ahd
);
ahd_set_modes
(
ahd
,
AHD_MODE_SCSI
,
AHD_MODE_SCSI
);
}
...
...
@@ -6268,6 +6406,36 @@ ahd_intr_enable(struct ahd_softc *ahd, int enable)
ahd_outb
(
ahd
,
HCNTRL
,
hcntrl
);
}
void
ahd_update_coalessing_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
;
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
);
}
void
ahd_enable_coalessing
(
struct
ahd_softc
*
ahd
,
int
enable
)
{
ahd
->
hs_mailbox
&=
~
ENINT_COALESS
;
if
(
enable
)
ahd
->
hs_mailbox
|=
ENINT_COALESS
;
ahd_outb
(
ahd
,
HS_MAILBOX
,
ahd
->
hs_mailbox
);
ahd_flush_device_writes
(
ahd
);
ahd_run_qoutfifo
(
ahd
);
}
/*
* Ensure that the card is paused in a location
* outside of all critical sections and that all
...
...
@@ -6278,24 +6446,51 @@ ahd_intr_enable(struct ahd_softc *ahd, int enable)
void
ahd_pause_and_flushwork
(
struct
ahd_softc
*
ahd
)
{
int
intstat
;
int
maxloops
;
u_int
intstat
;
u_int
maxloops
;
int
paused
;
maxloops
=
1000
;
ahd
->
flags
|=
AHD_ALL_INTERRUPTS
;
intstat
=
0
;
paused
=
FALSE
;
do
{
struct
scb
*
waiting_scb
;
if
(
paused
)
ahd_unpause
(
ahd
);
ahd_intr
(
ahd
);
ahd_pause
(
ahd
);
paused
=
TRUE
;
ahd_clear_critical_section
(
ahd
);
if
((
ahd_inb
(
ahd
,
SSTAT0
)
&
(
SELDO
|
SELINGO
))
==
0
)
ahd_outb
(
ahd
,
SCSISEQ0
,
ahd_inb
(
ahd
,
SCSISEQ0
)
&
~
ENSELO
);
/*
* In the non-packetized case, the sequencer (for Rev A),
* relies on ENSELO remaining set after SELDO. The hardware
* auto-clears ENSELO in the packetized case.
*/
waiting_scb
=
ahd_lookup_scb
(
ahd
,
ahd_inw
(
ahd
,
WAITING_TID_HEAD
));
if
(
waiting_scb
!=
NULL
&&
(
waiting_scb
->
flags
&
SCB_PACKETIZED
)
==
0
&&
(
ahd_inb
(
ahd
,
SSTAT0
)
&
(
SELDO
|
SELINGO
))
!=
0
)
ahd_outb
(
ahd
,
SCSISEQ0
,
ahd_inb
(
ahd
,
SCSISEQ0
)
|
ENSELO
);
if
(
intstat
==
0xFF
&&
(
ahd
->
features
&
AHD_REMOVABLE
)
!=
0
)
break
;
maxloops
--
;
}
while
(((
intstat
=
ahd_inb
(
ahd
,
INTSTAT
))
&
INT_PEND
)
&&
--
maxloops
);
}
while
(
--
maxloops
&&
(((
intstat
=
ahd_inb
(
ahd
,
INTSTAT
))
&
INT_PEND
)
!=
0
||
(
ahd_inb
(
ahd
,
SSTAT0
)
&
(
SELDO
|
SELINGO
))));
if
(
maxloops
==
0
)
{
printf
(
"Infinite interrupt loop, INTSTAT = %x"
,
ahd_inb
(
ahd
,
INTSTAT
));
}
ahd_flush_qoutfifo
(
ahd
);
ahd_platform_flushwork
(
ahd
);
ahd
->
flags
&=
~
AHD_ALL_INTERRUPTS
;
}
...
...
@@ -6608,13 +6803,38 @@ ahd_qinfifo_count(struct ahd_softc *ahd)
qinpos
=
ahd_get_snscb_qoff
(
ahd
);
wrap_qinpos
=
AHD_QIN_WRAP
(
qinpos
);
wrap_qinfifonext
=
AHD_QIN_WRAP
(
ahd
->
qinfifonext
);
if
(
wrap_qinfifonext
>
wrap_qinpos
)
if
(
wrap_qinfifonext
>
=
wrap_qinpos
)
return
(
wrap_qinfifonext
-
wrap_qinpos
);
else
return
(
wrap_qinfifonext
+
NUM_ELEMENTS
(
ahd
->
qinfifo
)
-
wrap_qinpos
);
}
void
ahd_reset_cmds_pending
(
struct
ahd_softc
*
ahd
)
{
struct
scb
*
scb
;
ahd_mode_state
saved_modes
;
u_int
pending_cmds
;
saved_modes
=
ahd_save_modes
(
ahd
);
ahd_set_modes
(
ahd
,
AHD_MODE_CCHAN
,
AHD_MODE_CCHAN
);
/*
* Don't count any commands as outstanding that the
* sequencer has already marked for completion.
*/
ahd_flush_qoutfifo
(
ahd
);
pending_cmds
=
0
;
LIST_FOREACH
(
scb
,
&
ahd
->
pending_scbs
,
pending_links
)
{
pending_cmds
++
;
}
ahd_outw
(
ahd
,
CMDS_PENDING
,
pending_cmds
-
ahd_qinfifo_count
(
ahd
));
ahd_restore_modes
(
ahd
,
saved_modes
);
ahd
->
flags
&=
~
AHD_UPDATE_PEND_CMDS
;
}
int
ahd_search_qinfifo
(
struct
ahd_softc
*
ahd
,
int
target
,
char
channel
,
int
lun
,
u_int
tag
,
role_t
role
,
uint32_t
status
,
...
...
@@ -6786,7 +7006,6 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
printf
(
")
\n
"
);
}
ahd_set_scbptr
(
ahd
,
savedscbptr
);
ahd_restore_modes
(
ahd
,
saved_modes
);
return
(
found
);
}
...
...
@@ -6859,6 +7078,9 @@ ahd_search_scb_list(struct ahd_softc *ahd, int target, char channel,
if
(
found
>
AHD_SCB_MAX
)
panic
(
"SCB LIST LOOP"
);
}
if
(
action
==
SEARCH_COMPLETE
||
action
==
SEARCH_REMOVE
)
ahd_outw
(
ahd
,
CMDS_PENDING
,
ahd_inw
(
ahd
,
CMDS_PENDING
)
-
found
);
return
(
found
);
}
...
...
@@ -7010,6 +7232,12 @@ ahd_abort_scbs(struct ahd_softc *ahd, int target, char channel,
}
}
/*
* Don't abort commands that have already completed,
* but haven't quite made it up to the host yet.
*/
ahd_flush_qoutfifo
(
ahd
);
/*
* Go through the pending CCB list and look for
* commands for this target that are still active.
...
...
@@ -7037,6 +7265,7 @@ ahd_abort_scbs(struct ahd_softc *ahd, int target, char channel,
ahd_set_scbptr
(
ahd
,
active_scb
);
ahd_restore_modes
(
ahd
,
saved_modes
);
ahd_platform_abort_scbs
(
ahd
,
target
,
channel
,
lun
,
tag
,
role
,
status
);
ahd
->
flags
|=
AHD_UPDATE_PEND_CMDS
;
return
found
;
}
...
...
@@ -7091,12 +7320,6 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset)
/* Make sure the sequencer is in a safe location. */
ahd_clear_critical_section
(
ahd
);
/*
* Run our command complete fifos to ensure that we perform
* completion processing on any commands that 'completed'
* before the reset occurred.
*/
ahd_run_qoutfifo
(
ahd
);
#if AHD_TARGET_MODE
if
((
ahd
->
flags
&
AHD_TARGETROLE
)
!=
0
)
{
ahd_run_tqinfifo
(
ahd
,
/*paused*/
TRUE
);
...
...
@@ -7266,6 +7489,51 @@ ahd_reset_poll(void *arg)
ahd_list_unlock
(
&
l
);
}
/**************************** Statistics Processing ***************************/
static
void
ahd_stat_timer
(
void
*
arg
)
{
struct
ahd_softc
*
ahd
;
u_long
l
;
u_long
s
;
int
enint_coal
;
ahd_list_lock
(
&
l
);
ahd
=
ahd_find_softc
((
struct
ahd_softc
*
)
arg
);
if
(
ahd
==
NULL
)
{
printf
(
"ahd_stat_timer: Instance %p no longer exists
\n
"
,
arg
);
ahd_list_unlock
(
&
l
);
return
;
}
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
;
if
(
enint_coal
!=
(
ahd
->
hs_mailbox
&
ENINT_COALESS
))
{
ahd_enable_coalessing
(
ahd
,
enint_coal
);
#ifdef AHD_DEBUG
if
((
ahd_debug
&
AHD_SHOW_INT_COALESSING
)
!=
0
)
printf
(
"%s: Interrupt coalessing "
"now %sabled. Cmds %d
\n
"
,
ahd_name
(
ahd
),
(
enint_coal
&
ENINT_COALESS
)
?
"en"
:
"dis"
,
ahd
->
cmdcmplt_total
,
ahd
->
cmdcmplt_counts
[
ahd
->
cmdcmplt_bucket
]);
#endif
}
ahd
->
cmdcmplt_bucket
=
(
ahd
->
cmdcmplt_bucket
+
1
)
&
(
AHD_STAT_BUCKETS
-
1
);
ahd
->
cmdcmplt_total
-=
ahd
->
cmdcmplt_counts
[
ahd
->
cmdcmplt_bucket
];
ahd
->
cmdcmplt_counts
[
ahd
->
cmdcmplt_bucket
]
=
0
;
ahd_timer_reset
(
&
ahd
->
stat_timer
,
AHD_STAT_UPDATE_US
,
ahd_stat_timer
,
ahd
);
ahd_unlock
(
ahd
,
&
s
);
ahd_list_unlock
(
&
l
);
}
/****************************** Status Processing *****************************/
void
...
...
@@ -8121,6 +8389,9 @@ ahd_dump_card_state(struct ahd_softc *ahd)
* Mode independent registers.
*/
cur_col
=
0
;
ahd_hs_mailbox_print
(
ahd_inb
(
ahd
,
LOCAL_HS_MAILBOX
),
&
cur_col
,
50
);
ahd_intctl_print
(
ahd_inb
(
ahd
,
INTCTL
),
&
cur_col
,
50
);
ahd_seqintstat_print
(
ahd_inb
(
ahd
,
SEQINTSTAT
),
&
cur_col
,
50
);
ahd_saved_mode_print
(
ahd_inb
(
ahd
,
SAVED_MODE
),
&
cur_col
,
50
);
ahd_dffstat_print
(
ahd_inb
(
ahd
,
DFFSTAT
),
&
cur_col
,
50
);
ahd_scsisigi_print
(
ahd_inb
(
ahd
,
SCSISIGI
),
&
cur_col
,
50
);
...
...
@@ -8133,7 +8404,6 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_seqintctl_print
(
ahd_inb
(
ahd
,
SEQINTCTL
),
&
cur_col
,
50
);
ahd_seq_flags_print
(
ahd_inb
(
ahd
,
SEQ_FLAGS
),
&
cur_col
,
50
);
ahd_seq_flags2_print
(
ahd_inb
(
ahd
,
SEQ_FLAGS2
),
&
cur_col
,
50
);
ahd_ccscbctl_print
(
ahd_inb
(
ahd
,
CCSCBCTL
),
&
cur_col
,
50
);
ahd_sstat0_print
(
ahd_inb
(
ahd
,
SSTAT0
),
&
cur_col
,
50
);
ahd_sstat1_print
(
ahd_inb
(
ahd
,
SSTAT1
),
&
cur_col
,
50
);
ahd_sstat2_print
(
ahd_inb
(
ahd
,
SSTAT2
),
&
cur_col
,
50
);
...
...
@@ -8147,9 +8417,11 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_lqostat1_print
(
ahd_inb
(
ahd
,
LQOSTAT1
),
&
cur_col
,
50
);
ahd_lqostat2_print
(
ahd_inb
(
ahd
,
LQOSTAT2
),
&
cur_col
,
50
);
printf
(
"
\n
"
);
printf
(
"
\n
SCB Count = %d LASTSCB 0x%x CURRSCB 0x%x NEXTSCB 0x%x
\n
"
,
ahd
->
scb_data
.
numscbs
,
ahd_inw
(
ahd
,
LASTSCB
),
ahd_inw
(
ahd
,
CURRSCB
),
ahd_inw
(
ahd
,
NEXTSCB
));
printf
(
"
\n
SCB Count = %d CMDS_PENDING = %d LASTSCB 0x%x "
"CURRSCB 0x%x NEXTSCB 0x%x
\n
"
,
ahd
->
scb_data
.
numscbs
,
ahd_inw
(
ahd
,
CMDS_PENDING
),
ahd_inw
(
ahd
,
LASTSCB
),
ahd_inw
(
ahd
,
CURRSCB
),
ahd_inw
(
ahd
,
NEXTSCB
));
cur_col
=
0
;
/* QINFIFO */
ahd_search_qinfifo
(
ahd
,
CAM_TARGET_WILDCARD
,
ALL_CHANNELS
,
...
...
@@ -8167,7 +8439,7 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_scb_scsiid_print
(
ahd_inb
(
ahd
,
SCB_SCSIID
),
&
cur_col
,
60
);
ahd_scb_tag_print
(
ahd_inb
(
ahd
,
SCB_TAG
),
&
cur_col
,
60
);
}
printf
(
"
\n
"
);
printf
(
"
\n
Total %d
\n
"
,
i
);
printf
(
"Kernel Free SCB list: "
);
i
=
0
;
...
...
@@ -8249,7 +8521,7 @@ ahd_dump_card_state(struct ahd_softc *ahd)
printf
(
"
\n
"
);
cur_col
=
0
;
}
cur_col
+=
printf
(
"SHADDR = 0x%x%x, SHCNT = 0x%x"
,
cur_col
+=
printf
(
"SHADDR = 0x%x%x, SHCNT = 0x%x
"
,
ahd_inl
(
ahd
,
SHADDR
+
4
),
ahd_inl
(
ahd
,
SHADDR
),
(
ahd_inb
(
ahd
,
SHCNT
)
...
...
@@ -8287,6 +8559,10 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_inb
(
ahd
,
MAXCMDCNT
));
ahd_simode0_print
(
ahd_inb
(
ahd
,
SIMODE0
),
&
cur_col
,
50
);
printf
(
"
\n
"
);
ahd_set_modes
(
ahd
,
AHD_MODE_CCHAN
,
AHD_MODE_CCHAN
);
cur_col
=
0
;
ahd_ccscbctl_print
(
ahd_inb
(
ahd
,
CCSCBCTL
),
&
cur_col
,
50
);
printf
(
"
\n
"
);
ahd_set_modes
(
ahd
,
ahd
->
saved_src_mode
,
ahd
->
saved_dst_mode
);
printf
(
"%s: REG0 == 0x%x, SINDEX = 0x%x, DINDEX = 0x%x
\n
"
,
ahd_name
(
ahd
),
ahd_inw
(
ahd
,
REG0
),
ahd_inw
(
ahd
,
SINDEX
),
...
...
drivers/scsi/aic7xxx/aic79xx_inline.h
View file @
d8433379
...
...
@@ -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#
39
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#
40
$
*
* $FreeBSD$
*/
...
...
@@ -217,8 +217,11 @@ ahd_unpause(struct ahd_softc *ahd)
* prior to the first change of the mode.
*/
if
(
ahd
->
saved_src_mode
!=
AHD_MODE_UNKNOWN
&&
ahd
->
saved_dst_mode
!=
AHD_MODE_UNKNOWN
)
&&
ahd
->
saved_dst_mode
!=
AHD_MODE_UNKNOWN
)
{
if
((
ahd
->
flags
&
AHD_UPDATE_PEND_CMDS
)
!=
0
)
ahd_reset_cmds_pending
(
ahd
);
ahd_set_modes
(
ahd
,
ahd
->
saved_src_mode
,
ahd
->
saved_dst_mode
);
}
if
((
ahd_inb
(
ahd
,
INTSTAT
)
&
~
(
SWTMINT
|
CMDCMPLT
))
==
0
)
ahd_outb
(
ahd
,
HCNTRL
,
ahd
->
unpause
);
...
...
@@ -913,6 +916,8 @@ ahd_intr(struct ahd_softc *ahd)
ahd_flush_device_writes
(
ahd
);
}
ahd_run_qoutfifo
(
ahd
);
ahd
->
cmdcmplt_counts
[
ahd
->
cmdcmplt_bucket
]
++
;
ahd
->
cmdcmplt_total
++
;
#ifdef AHD_TARGET_MODE
if
((
ahd
->
flags
&
AHD_TARGETROLE
)
!=
0
)
ahd_run_tqinfifo
(
ahd
,
/*paused*/
FALSE
);
...
...
drivers/scsi/aic7xxx/aic79xx_osm.c
View file @
d8433379
/*
* Adaptec AIC79xx device driver for Linux.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#
93
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#
100
$
*
* --------------------------------------------------------------------------
* Copyright (c) 1994-2000 Justin T. Gibbs.
...
...
@@ -88,6 +88,11 @@ struct proc_dir_entry proc_scsi_aic79xx = {
};
#endif
/*
* Bucket size for counting good commands in between bad ones.
*/
#define AHD_LINUX_ERR_THRESH 1000
/*
* Set this to the delay in seconds after SCSI bus reset.
* Note, we honor this only for the initial bus reset.
...
...
@@ -491,8 +496,8 @@ static void ahd_linux_dv_transition(struct ahd_softc *ahd,
struct
scsi_cmnd
*
cmd
,
struct
ahd_devinfo
*
devinfo
,
struct
ahd_linux_target
*
targ
);
static
uint32_t
aic_
dv_
error_action
(
struct
scsi_cmnd
*
cmd
,
struct
scsi_inquiry_data
*
inq_data
);
static
uint32_t
aic_error_action
(
struct
scsi_cmnd
*
cmd
,
struct
scsi_inquiry_data
*
inq_data
);
static
void
ahd_linux_dv_fill_cmd
(
struct
ahd_softc
*
ahd
,
struct
scsi_cmnd
*
cmd
,
struct
ahd_devinfo
*
devinfo
);
...
...
@@ -520,8 +525,13 @@ static void ahd_linux_dv_su(struct ahd_softc *ahd,
struct
scsi_cmnd
*
cmd
,
struct
ahd_devinfo
*
devinfo
,
struct
ahd_linux_target
*
targ
);
static
__inline
int
ahd_linux_dv_fallback
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
);
static
int
ahd_linux_fallback
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
);
static
__inline
int
ahd_linux_dv_fallback
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
);
static
void
ahd_linux_dv_complete
(
Scsi_Cmnd
*
cmd
);
static
void
ahd_linux_generate_dv_pattern
(
struct
ahd_linux_target
*
targ
);
static
u_int
ahd_linux_user_tagdepth
(
struct
ahd_softc
*
ahd
,
...
...
@@ -548,6 +558,7 @@ static void ahd_linux_setup_iocell_info(char *p, char *end, char *s, int index);
static
int
ahd_linux_next_unit
(
void
);
static
void
ahd_runq_tasklet
(
unsigned
long
data
);
static
int
ahd_linux_halt
(
struct
notifier_block
*
nb
,
u_long
event
,
void
*
buf
);
static
int
aic79xx_setup
(
char
*
c
);
/****************************** Inlines ***************************************/
static
__inline
void
ahd_schedule_completeq
(
struct
ahd_softc
*
ahd
,
...
...
@@ -801,6 +812,7 @@ static int ahd_linux_release(struct Scsi_Host *);
static
const
char
*
ahd_linux_info
(
struct
Scsi_Host
*
);
static
int
ahd_linux_queue
(
Scsi_Cmnd
*
,
void
(
*
)(
Scsi_Cmnd
*
));
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
static
int
ahd_linux_slave_alloc
(
Scsi_Device
*
);
static
int
ahd_linux_slave_configure
(
Scsi_Device
*
);
static
void
ahd_linux_slave_destroy
(
Scsi_Device
*
);
static
int
ahd_linux_biosparam
(
struct
scsi_device
*
,
...
...
@@ -862,15 +874,6 @@ ahd_linux_detect(Scsi_Host_Template *template)
template
->
proc_dir
=
&
proc_scsi_aic79xx
;
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7)
/*
* We can only map 16MB per-SG
* so create a sector limit of
* "16MB" in 2K sectors.
*/
template
->
max_sectors
=
8192
;
#endif
/*
* Initialize our softc list lock prior to
* probing for any adapters.
...
...
@@ -1013,6 +1016,17 @@ ahd_linux_queue(Scsi_Cmnd * cmd, void (*scsi_done) (Scsi_Cmnd *))
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
static
int
ahd_linux_slave_alloc
(
Scsi_Device
*
device
)
{
struct
ahd_softc
*
ahd
;
ahd
=
*
((
struct
ahd_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Alloc %d
\n
"
,
ahd_name
(
ahd
),
device
->
id
);
return
(
0
);
}
static
int
ahd_linux_slave_configure
(
Scsi_Device
*
device
)
{
...
...
@@ -1021,6 +1035,8 @@ ahd_linux_slave_configure(Scsi_Device *device)
u_long
flags
;
ahd
=
*
((
struct
ahd_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Configure %d
\n
"
,
ahd_name
(
ahd
),
device
->
id
);
ahd_midlayer_entrypoint_lock
(
ahd
,
&
flags
);
/*
* Since Linux has attached to the device, configure
...
...
@@ -1029,12 +1045,13 @@ ahd_linux_slave_configure(Scsi_Device *device)
*/
dev
=
ahd_linux_get_device
(
ahd
,
device
->
channel
,
device
->
id
,
device
->
lun
,
/*alloc*/
TRUE
);
/*alloc*/
TRUE
);
if
(
dev
!=
NULL
)
{
dev
->
flags
&=
~
AHD_DEV_UNCONFIGURED
;
dev
->
flags
|=
AHD_DEV_SLAVE_CONFIGURED
;
dev
->
scsi_device
=
device
;
ahd_linux_device_queue_depth
(
ahd
,
dev
);
}
ahd_linux_device_queue_depth
(
ahd
,
dev
);
ahd_midlayer_entrypoint_unlock
(
ahd
,
&
flags
);
return
(
0
);
}
...
...
@@ -1047,12 +1064,27 @@ ahd_linux_slave_destroy(Scsi_Device *device)
u_long
flags
;
ahd
=
*
((
struct
ahd_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Destroy %d
\n
"
,
ahd_name
(
ahd
),
device
->
id
);
ahd_midlayer_entrypoint_lock
(
ahd
,
&
flags
);
dev
=
ahd_linux_get_device
(
ahd
,
device
->
channel
,
device
->
id
,
device
->
lun
,
/*alloc*/
FALSE
);
if
(
dev
!=
NULL
)
/*
* Filter out "silly" deletions of real devices by only
* deleting devices that have had slave_configure()
* called on them. All other devices that have not
* been configured will automatically be deleted by
* the refcounting process.
*/
if
(
dev
!=
NULL
&&
(
dev
->
flags
&
AHD_DEV_SLAVE_CONFIGURED
)
!=
0
)
{
dev
->
flags
|=
AHD_DEV_UNCONFIGURED
;
if
(
TAILQ_EMPTY
(
&
dev
->
busyq
)
&&
dev
->
active
==
0
)
ahd_linux_free_device
(
ahd
,
dev
);
}
ahd_midlayer_entrypoint_unlock
(
ahd
,
&
flags
);
}
#else
...
...
@@ -1253,7 +1285,7 @@ ahd_linux_bus_reset(Scsi_Cmnd *cmd)
#endif
ahd
=
*
(
struct
ahd_softc
**
)
cmd
->
host
->
hostdata
;
#ifdef AHD_DEBUG
if
((
ahd_debug
&
AHD_SHOW_RECOVERY
)
!=
0
)
;
if
((
ahd_debug
&
AHD_SHOW_RECOVERY
)
!=
0
)
printf
(
"%s: Bus reset called for cmd %p
\n
"
,
ahd_name
(
ahd
),
cmd
);
#endif
...
...
@@ -1299,6 +1331,14 @@ Scsi_Host_Template aic79xx_driver_template = {
.
sg_tablesize
=
AHD_NSEG
,
.
cmd_per_lun
=
2
,
.
use_clustering
=
ENABLE_CLUSTERING
,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7)
/*
* We can only map 16MB per-SG
* so create a sector limit of
* "16MB" in 2K sectors.
*/
.
max_sectors
=
8192
,
#endif
#if defined CONFIG_HIGHIO
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
/* Assume RedHat Distribution with its different HIGHIO conventions. */
...
...
@@ -1309,6 +1349,8 @@ Scsi_Host_Template aic79xx_driver_template = {
#endif
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
.
name
=
"aic79xx"
,
.
slave_alloc
=
ahd_linux_slave_alloc
,
.
slave_configure
=
ahd_linux_slave_configure
,
.
slave_destroy
=
ahd_linux_slave_destroy
,
#else
...
...
@@ -1879,7 +1921,7 @@ ahd_linux_setup_tag_info_global(char *p)
* to a parameter with a ':' between the parameter and the value.
* ie. aic79xx=stpwlev:1,extended
*/
int
static
int
aic79xx_setup
(
char
*
s
)
{
int
i
,
n
;
...
...
@@ -2683,7 +2725,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
{
u_int32_t
status
;
status
=
aic_
dv_
error_action
(
cmd
,
targ
->
inq_data
);
status
=
aic_error_action
(
cmd
,
targ
->
inq_data
);
#ifdef AHD_DEBUG
...
...
@@ -2807,7 +2849,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
break
;
}
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
{
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
{
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
break
;
}
...
...
@@ -2830,7 +2872,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
==
CAM_REQUEUE_REQ
)
{
targ
->
dv_state_retry
--
;
}
else
if
((
status
&
SSQ_FALLBACK
)
!=
0
)
{
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
{
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
{
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
break
;
...
...
@@ -2874,7 +2916,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
==
CAM_REQUEUE_REQ
)
{
targ
->
dv_state_retry
--
;
}
else
if
((
status
&
SSQ_FALLBACK
)
!=
0
)
{
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
{
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
{
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
break
;
...
...
@@ -2987,7 +3029,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
==
CAM_REQUEUE_REQ
)
{
targ
->
dv_state_retry
--
;
}
else
if
((
status
&
SSQ_FALLBACK
)
!=
0
)
{
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
{
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
{
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
break
;
...
...
@@ -3018,7 +3060,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
case
SS_NOP
:
if
(
memcmp
(
targ
->
dv_buffer
,
targ
->
dv_buffer1
,
targ
->
dv_echo_size
)
!=
0
)
{
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
else
...
...
@@ -3047,7 +3089,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
==
CAM_REQUEUE_REQ
)
{
targ
->
dv_state_retry
--
;
}
else
if
((
status
&
SSQ_FALLBACK
)
!=
0
)
{
if
(
ahd_linux_fallback
(
ahd
,
devinfo
)
!=
0
)
{
if
(
ahd_linux_
dv_
fallback
(
ahd
,
devinfo
)
!=
0
)
{
AHD_SET_DV_STATE
(
ahd
,
targ
,
AHD_DV_STATE_EXIT
);
break
;
...
...
@@ -3126,7 +3168,7 @@ ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
}
static
uint32_t
aic_
dv_
error_action
(
struct
scsi_cmnd
*
cmd
,
struct
scsi_inquiry_data
*
inq_data
)
aic_error_action
(
struct
scsi_cmnd
*
cmd
,
struct
scsi_inquiry_data
*
inq_data
)
{
aic_sense_action
err_action
;
cam_status
status
;
...
...
@@ -3392,6 +3434,19 @@ ahd_linux_calc_speed(u_int width, u_int period, u_int offset)
return
(
freq
);
}
static
__inline
int
ahd_linux_dv_fallback
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
)
{
u_long
s
;
int
retval
;
ahd_lock
(
ahd
,
&
s
);
retval
=
ahd_linux_fallback
(
ahd
,
devinfo
);
ahd_unlock
(
ahd
,
&
s
);
return
(
retval
);
}
static
int
ahd_linux_fallback
(
struct
ahd_softc
*
ahd
,
struct
ahd_devinfo
*
devinfo
)
{
...
...
@@ -3399,7 +3454,6 @@ ahd_linux_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
struct
ahd_initiator_tinfo
*
tinfo
;
struct
ahd_transinfo
*
goal
;
struct
ahd_tmode_tstate
*
tstate
;
u_long
s
;
u_int
width
;
u_int
period
;
u_int
offset
;
...
...
@@ -3415,7 +3469,6 @@ ahd_linux_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
printf
(
"Trying to fallback
\n
"
);
}
#endif
ahd_lock
(
ahd
,
&
s
);
targ
=
ahd
->
platform_data
->
targets
[
devinfo
->
target_offset
];
tinfo
=
ahd_fetch_transinfo
(
ahd
,
devinfo
->
channel
,
devinfo
->
our_scsiid
,
...
...
@@ -3545,7 +3598,6 @@ ahd_linux_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
ppr_options
=
targ
->
dv_max_ppr_options
;
}
}
else
{
ahd_unlock
(
ahd
,
&
s
);
return
(
-
1
);
}
offset
=
MAX_OFFSET
;
...
...
@@ -3563,7 +3615,6 @@ ahd_linux_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
ahd_set_syncrate
(
ahd
,
devinfo
,
period
,
offset
,
ppr_options
,
AHD_TRANS_GOAL
,
FALSE
);
targ
->
dv_last_ppr_options
=
ppr_options
;
ahd_unlock
(
ahd
,
&
s
);
return
(
0
);
}
...
...
@@ -3966,6 +4017,15 @@ ahd_linux_run_device_queue(struct ahd_softc *ahd, struct ahd_linux_device *dev)
dev
->
openings
--
;
dev
->
active
++
;
dev
->
commands_issued
++
;
/* Update the error counting bucket and dump if needed */
if
(
dev
->
target
->
cmds_since_error
)
{
dev
->
target
->
cmds_since_error
++
;
if
(
dev
->
target
->
cmds_since_error
>
AHD_LINUX_ERR_THRESH
)
dev
->
target
->
cmds_since_error
=
0
;
}
if
((
dev
->
flags
&
AHD_DEV_PERIODIC_OTAG
)
!=
0
)
dev
->
commands_since_idle_or_otag
++
;
scb
->
flags
|=
SCB_ACTIVE
;
...
...
@@ -4377,43 +4437,45 @@ ahd_linux_handle_scsi_status(struct ahd_softc *ahd,
* structure if it is available.
*/
cmd
=
scb
->
io_ctx
;
if
(
scb
->
flags
&
SCB_SENSE
)
{
if
((
scb
->
flags
&
(
SCB_SENSE
|
SCB_PKT_SENSE
))
!=
0
)
{
struct
scsi_status_iu_header
*
siu
;
u_int
sense_size
;
u_int
sense_offset
;
sense_size
=
MIN
(
sizeof
(
struct
scsi_sense_data
)
-
ahd_get_sense_residual
(
scb
),
sizeof
(
cmd
->
sense_buffer
));
memset
(
cmd
->
sense_buffer
,
0
,
sizeof
(
cmd
->
sense_buffer
));
memcpy
(
cmd
->
sense_buffer
,
ahd_get_sense_buf
(
ahd
,
scb
),
sense_size
);
cmd
->
result
|=
(
DRIVER_SENSE
<<
24
);
}
else
if
(
scb
->
flags
&
SCB_PKT_SENSE
)
{
struct
scsi_status_iu_header
*
siu
;
u_int
sense_len
;
if
(
scb
->
flags
&
SCB_SENSE
)
{
sense_size
=
MIN
(
sizeof
(
struct
scsi_sense_data
)
-
ahd_get_sense_residual
(
scb
),
sizeof
(
cmd
->
sense_buffer
));
sense_offset
=
0
;
}
else
{
/*
* Copy only the sense data into the provided
* buffer.
*/
siu
=
(
struct
scsi_status_iu_header
*
)
scb
->
sense_data
;
sense_size
=
MIN
(
scsi_4btoul
(
siu
->
sense_length
),
sizeof
(
cmd
->
sense_buffer
));
sense_offset
=
SIU_SENSE_OFFSET
(
siu
);
}
/*
* Copy only the sense data into the provided buffer.
*/
siu
=
(
struct
scsi_status_iu_header
*
)
scb
->
sense_data
;
sense_len
=
MIN
(
scsi_4btoul
(
siu
->
sense_length
),
sizeof
(
cmd
->
sense_buffer
));
memset
(
cmd
->
sense_buffer
,
0
,
sizeof
(
cmd
->
sense_buffer
));
memcpy
(
cmd
->
sense_buffer
,
ahd_get_sense_buf
(
ahd
,
scb
)
+
SIU_SENSE_OFFSET
(
siu
),
sense_len
);
+
sense_offset
,
sense_size
);
cmd
->
result
|=
(
DRIVER_SENSE
<<
24
);
#ifdef AHD_DEBUG
if
(
ahd_debug
&
AHD_SHOW_SENSE
)
{
int
i
;
printf
(
"Copied %d bytes of sense data at %d:"
,
sense_
len
,
SIU_SENSE_OFFSET
(
siu
)
);
for
(
i
=
0
;
i
<
sense_
len
;
i
++
)
sense_
size
,
sense_offset
);
for
(
i
=
0
;
i
<
sense_
size
;
i
++
)
printf
(
" 0x%x"
,
cmd
->
sense_buffer
[
i
]);
printf
(
"
\n
"
);
}
#endif
cmd
->
result
|=
(
DRIVER_SENSE
<<
24
);
}
break
;
}
...
...
@@ -4529,9 +4591,43 @@ ahd_linux_queue_cmd_complete(struct ahd_softc *ahd, Scsi_Cmnd *cmd)
* state change decisions.
*/
if
(
AHD_DV_CMD
(
cmd
)
==
FALSE
)
{
uint32_t
status
;
u_int
new_status
;
switch
(
ahd_cmd_get_transaction_status
(
cmd
))
{
status
=
ahd_cmd_get_transaction_status
(
cmd
);
if
(
status
!=
CAM_REQ_CMP
)
{
struct
ahd_linux_device
*
dev
;
struct
ahd_devinfo
devinfo
;
uint32_t
action
;
dev
=
ahd_linux_get_device
(
ahd
,
cmd
->
channel
,
cmd
->
target
,
cmd
->
lun
,
/*alloc*/
FALSE
);
if
(
dev
==
NULL
)
goto
no_fallback
;
ahd_compile_devinfo
(
&
devinfo
,
ahd
->
our_id
,
dev
->
target
->
target
,
dev
->
lun
,
dev
->
target
->
channel
==
0
?
'A'
:
'B'
,
ROLE_INITIATOR
);
action
=
aic_error_action
(
cmd
,
dev
->
target
->
inq_data
);
if
((
action
&
SSQ_FALLBACK
)
!=
0
)
{
/* Update stats */
dev
->
target
->
errors_detected
++
;
if
(
dev
->
target
->
cmds_since_error
==
0
)
dev
->
target
->
cmds_since_error
++
;
else
{
dev
->
target
->
cmds_since_error
=
0
;
ahd_linux_fallback
(
ahd
,
&
devinfo
);
}
}
}
no_fallback:
switch
(
status
)
{
case
CAM_REQ_INPROG
:
case
CAM_REQ_CMP
:
case
CAM_SCSI_STATUS_ERROR
:
...
...
drivers/scsi/aic7xxx/aic79xx_osm.h
View file @
d8433379
...
...
@@ -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#9
0
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#9
6
$
*
*/
#ifndef _AIC79XX_LINUX_H_
...
...
@@ -287,7 +287,7 @@ ahd_scb_timer_reset(struct scb *scb, u_int usec)
#include <linux/smp.h>
#endif
#define AIC79XX_DRIVER_VERSION "1.3.0.ALPHA
3
"
#define AIC79XX_DRIVER_VERSION "1.3.0.ALPHA
5
"
/**************************** Front End Queues ********************************/
/*
...
...
@@ -334,7 +334,8 @@ typedef enum {
AHD_DEV_ON_RUN_LIST
=
0x08
,
/* Queued to be run later */
AHD_DEV_Q_BASIC
=
0x10
,
/* Allow basic device queuing */
AHD_DEV_Q_TAGGED
=
0x20
,
/* Allow full SCSI2 command queueing */
AHD_DEV_PERIODIC_OTAG
=
0x40
/* Send OTAG to prevent starvation */
AHD_DEV_PERIODIC_OTAG
=
0x40
,
/* Send OTAG to prevent starvation */
AHD_DEV_SLAVE_CONFIGURED
=
0x80
/* slave_configure() has been called */
}
ahd_linux_dev_flags
;
struct
ahd_linux_target
;
...
...
@@ -462,6 +463,12 @@ struct ahd_linux_target {
u_int
dv_state_retry
;
uint8_t
*
dv_buffer
;
uint8_t
*
dv_buffer1
;
/*
* Cumulative counter of errors.
*/
u_long
errors_detected
;
u_long
cmds_since_error
;
};
/********************* Definitions Required by the Core ***********************/
...
...
@@ -525,6 +532,7 @@ struct ahd_platform_data {
pid_t
dv_pid
;
struct
timer_list
completeq_timer
;
struct
timer_list
reset_timer
;
struct
timer_list
stats_timer
;
struct
semaphore
eh_sem
;
struct
semaphore
dv_sem
;
struct
semaphore
dv_cmd_sem
;
/* XXX This needs to be in
...
...
drivers/scsi/aic7xxx/aic79xx_proc.c
View file @
d8433379
...
...
@@ -37,7 +37,7 @@
* String handling code courtesy of Gerard Roudier's <groudier@club-internet.fr>
* sym driver.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_proc.c#
9
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_proc.c#
11
$
*/
#include "aic79xx_osm.h"
#include "aic79xx_inline.h"
...
...
@@ -103,7 +103,7 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo)
u_int
mb
;
if
(
tinfo
->
period
==
AHD_PERIOD_UNKNOWN
)
{
copy_info
(
info
,
"Renegotiation Pending"
);
copy_info
(
info
,
"Renegotiation Pending
\n
"
);
return
;
}
speed
=
3300
;
...
...
@@ -181,6 +181,7 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info,
ahd_format_transinfo
(
info
,
&
tinfo
->
goal
);
copy_info
(
info
,
"
\t
Curr: "
);
ahd_format_transinfo
(
info
,
&
tinfo
->
curr
);
copy_info
(
info
,
"
\t
Transmission Errors %ld
\n
"
,
targ
->
errors_detected
);
for
(
lun
=
0
;
lun
<
AHD_NUM_LUNS
;
lun
++
)
{
struct
ahd_linux_device
*
dev
;
...
...
drivers/scsi/aic7xxx/aic79xx_reg.h_shipped
View file @
d8433379
...
...
@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated
* from the following source files:
*
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
4
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
6
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
7
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
9
$
*/
typedef int (ahd_reg_print_t)(u_int, u_int *, u_int);
typedef struct ahd_reg_parse_entry {
...
...
@@ -82,6 +82,13 @@ ahd_reg_print_t ahd_hs_mailbox_print;
ahd_print_register(NULL, 0, "HS_MAILBOX", 0x0b, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_clrseqintstat_print;
#else
#define ahd_clrseqintstat_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "CLRSEQINTSTAT", 0x0c, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_seqintstat_print;
#else
...
...
@@ -89,6 +96,13 @@ ahd_reg_print_t ahd_seqintstat_print;
ahd_print_register(NULL, 0, "SEQINTSTAT", 0x0c, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_swtimer_print;
#else
#define ahd_swtimer_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SWTIMER", 0x0e, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_snscb_qoff_print;
#else
...
...
@@ -1629,13 +1643,6 @@ ahd_reg_print_t ahd_dspfltrctl_print;
ahd_print_register(NULL, 0, "DSPFLTRCTL", 0xc0, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_clrseqintstat_print;
#else
#define ahd_clrseqintstat_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "CLRSEQINTSTAT", 0xc0, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_dspdatactl_print;
#else
...
...
@@ -1713,13 +1720,6 @@ ahd_reg_print_t ahd_rcvrbiascalc_print;
ahd_print_register(NULL, 0, "RCVRBIASCALC", 0xc8, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_dfdbctl_print;
#else
#define ahd_dfdbctl_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "DFDBCTL", 0xc8, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_dfbkptr_print;
#else
...
...
@@ -1734,6 +1734,13 @@ ahd_reg_print_t ahd_skewcalc_print;
ahd_print_register(NULL, 0, "SKEWCALC", 0xc9, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_dfdbctl_print;
#else
#define ahd_dfdbctl_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "DFDBCTL", 0xcb, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_dfscnt_print;
#else
...
...
@@ -1797,13 +1804,6 @@ ahd_reg_print_t ahd_prgmcnt_print;
ahd_print_register(NULL, 0, "PRGMCNT", 0xde, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_swtimer_print;
#else
#define ahd_swtimer_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SWTIMER", 0xe0, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_accum_print;
#else
...
...
@@ -2140,11 +2140,53 @@ ahd_reg_print_t ahd_allocfifo_scbptr_print;
ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR", 0x148, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_int_coalessing_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)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_int_coalessing_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)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_int_coalessing_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)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_cmds_pending_print;
#else
#define ahd_cmds_pending_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "CMDS_PENDING", 0x14e, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_int_coalessing_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)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_local_hs_mailbox_print;
#else
#define ahd_local_hs_mailbox_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX", 0x151, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_cmdsize_table_print;
#else
#define ahd_cmdsize_table_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "CMDSIZE_TABLE", 0x1
4a
, regvalue, cur_col, wrap)
ahd_print_register(NULL, 0, "CMDSIZE_TABLE", 0x1
52
, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
...
...
@@ -2394,6 +2436,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define HS_MAILBOX 0x0b
#define HOST_TQINPOS 0x80
#define ENINT_COALESS 0x40
#define CLRSEQINTSTAT 0x0c
#define CLRSEQ_SWTMRTO 0x10
#define CLRSEQ_SEQINT 0x08
#define CLRSEQ_SCSIINT 0x04
#define CLRSEQ_PCIINT 0x02
#define CLRSEQ_SPLTINT 0x01
#define SEQINTSTAT 0x0c
#define SEQ_SWTMRTO 0x10
...
...
@@ -2402,6 +2452,8 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SEQ_PCIINT 0x02
#define SEQ_SPLTINT 0x01
#define SWTIMER 0x0e
#define SNSCB_QOFF 0x10
#define SESCB_QOFF 0x12
...
...
@@ -3332,13 +3384,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define EDGESENSE 0x10
#define DSPFCNTSEL 0x0f
#define CLRSEQINTSTAT 0xc0
#define CLRSEQ_SWTMRTO 0x10
#define CLRSEQ_SEQINT 0x08
#define CLRSEQ_SCSIINT 0x04
#define CLRSEQ_PCIINT 0x02
#define CLRSEQ_SPLTINT 0x01
#define DSPDATACTL 0xc1
#define BYPASSENAB 0x80
#define DESQDIS 0x10
...
...
@@ -3375,7 +3420,11 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define RCVRBIASCALC 0xc8
#define DFDBCTL 0xc8
#define DFBKPTR 0xc9
#define SKEWCALC 0xc9
#define DFDBCTL 0xcb
#define DFF_CIO_WR_RDY 0x20
#define DFF_CIO_RD_RDY 0x10
#define DFF_DIR_ERR 0x08
...
...
@@ -3383,10 +3432,6 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define DFF_RAMBIST_DONE 0x02
#define DFF_RAMBIST_EN 0x01
#define DFBKPTR 0xc9
#define SKEWCALC 0xc9
#define DFSCNT 0xcc
#define DFBCNT 0xce
...
...
@@ -3418,15 +3463,14 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define INT1_CONTEXT 0x20
#define SCS_SEQ_INT1M1 0x10
#define SCS_SEQ_INT1M0 0x08
#define INTMASK 0x06
#define INTMASK2 0x04
#define INTMASK1 0x02
#define IRET 0x01
#define SEQRAM 0xda
#define PRGMCNT 0xde
#define SWTIMER 0xe0
#define ACCUM 0xe0
#define SINDEX 0xe2
...
...
@@ -3574,7 +3618,19 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define ALLOCFIFO_SCBPTR 0x148
#define CMDSIZE_TABLE 0x14a
#define INT_COALESSING_TIMER 0x14a
#define INT_COALESSING_MAXCMDS 0x14c
#define INT_COALESSING_MINCMDS 0x14d
#define CMDS_PENDING 0x14e
#define INT_COALESSING_CMDCOUNT 0x150
#define LOCAL_HS_MAILBOX 0x151
#define CMDSIZE_TABLE 0x152
#define SCB_BASE 0x180
...
...
@@ -3646,6 +3702,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SCB_DISCONNECTED_LISTS 0x1b8
#define AHD_TIMER_US_PER_TICK 0x19
#define SCB_TRANSFER_SIZE_FULL_LUN 0x38
#define STATUS_QUEUE_FULL 0x28
#define STATUS_BUSY 0x08
...
...
@@ -3667,6 +3724,8 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define AHD_NUM_PER_DEV_ANNEXCOLS 0x04
#define B_CURRFIFO_0 0x02
#define NVRAM_SCB_OFFSET 0x2c
#define AHD_TIMER_MAX_US 0x18ffe7
#define AHD_TIMER_MAX_TICKS 0xffff
#define STATUS_PKT_SENSE 0xff
#define CMD_GROUP_CODE_SHIFT 0x05
#define AHD_SENSE_BUFSIZE 0x100
...
...
@@ -3713,4 +3772,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
/* Exported Labels */
#define LABEL_seq_isr 0x23b
#define LABEL_seq_isr 0x25a
#define LABEL_timer_isr 0x256
drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped
View file @
d8433379
...
...
@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated
* from the following source files:
*
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
4
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
6
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
7
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
9
$
*/
#include "aic79xx_osm.h"
...
...
@@ -158,16 +158,32 @@ 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 },
{ "HOST_TQINPOS", 0x80, 0x80 }
};
int
ahd_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(HS_MAILBOX_parse_table,
1
, "HS_MAILBOX",
return (ahd_print_register(HS_MAILBOX_parse_table,
2
, "HS_MAILBOX",
0x0b, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t CLRSEQINTSTAT_parse_table[] = {
{ "CLRSEQ_SPLTINT", 0x01, 0x01 },
{ "CLRSEQ_PCIINT", 0x02, 0x02 },
{ "CLRSEQ_SCSIINT", 0x04, 0x04 },
{ "CLRSEQ_SEQINT", 0x08, 0x08 },
{ "CLRSEQ_SWTMRTO", 0x10, 0x10 }
};
int
ahd_clrseqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(CLRSEQINTSTAT_parse_table, 5, "CLRSEQINTSTAT",
0x0c, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t SEQINTSTAT_parse_table[] = {
{ "SEQ_SPLTINT", 0x01, 0x01 },
{ "SEQ_PCIINT", 0x02, 0x02 },
...
...
@@ -183,6 +199,13 @@ ahd_seqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x0c, regvalue, cur_col, wrap));
}
int
ahd_swtimer_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SWTIMER",
0x0e, regvalue, cur_col, wrap));
}
int
ahd_snscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
...
...
@@ -2714,21 +2737,6 @@ ahd_dspfltrctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
0xc0, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t CLRSEQINTSTAT_parse_table[] = {
{ "CLRSEQ_SPLTINT", 0x01, 0x01 },
{ "CLRSEQ_PCIINT", 0x02, 0x02 },
{ "CLRSEQ_SCSIINT", 0x04, 0x04 },
{ "CLRSEQ_SEQINT", 0x08, 0x08 },
{ "CLRSEQ_SWTMRTO", 0x10, 0x10 }
};
int
ahd_clrseqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(CLRSEQINTSTAT_parse_table, 5, "CLRSEQINTSTAT",
0xc0, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t DSPDATACTL_parse_table[] = {
{ "XMITOFFSTDIS", 0x02, 0x02 },
{ "RCVROFFSTDIS", 0x04, 0x04 },
...
...
@@ -2838,6 +2846,20 @@ ahd_rcvrbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
0xc8, regvalue, cur_col, wrap));
}
int
ahd_dfbkptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "DFBKPTR",
0xc9, regvalue, cur_col, wrap));
}
int
ahd_skewcalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SKEWCALC",
0xc9, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t DFDBCTL_parse_table[] = {
{ "DFF_RAMBIST_EN", 0x01, 0x01 },
{ "DFF_RAMBIST_DONE", 0x02, 0x02 },
...
...
@@ -2851,21 +2873,7 @@ int
ahd_dfdbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(DFDBCTL_parse_table, 6, "DFDBCTL",
0xc8, regvalue, cur_col, wrap));
}
int
ahd_dfbkptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "DFBKPTR",
0xc9, regvalue, cur_col, wrap));
}
int
ahd_skewcalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SKEWCALC",
0xc9, regvalue, cur_col, wrap));
0xcb, regvalue, cur_col, wrap));
}
int
...
...
@@ -2935,7 +2943,8 @@ ahd_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
static ahd_reg_parse_entry_t SEQINTCTL_parse_table[] = {
{ "IRET", 0x01, 0x01 },
{ "INTMASK", 0x06, 0x06 },
{ "INTMASK1", 0x02, 0x02 },
{ "INTMASK2", 0x04, 0x04 },
{ "SCS_SEQ_INT1M0", 0x08, 0x08 },
{ "SCS_SEQ_INT1M1", 0x10, 0x10 },
{ "INT1_CONTEXT", 0x20, 0x20 },
...
...
@@ -2945,7 +2954,7 @@ static ahd_reg_parse_entry_t SEQINTCTL_parse_table[] = {
int
ahd_seqintctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(SEQINTCTL_parse_table,
6
, "SEQINTCTL",
return (ahd_print_register(SEQINTCTL_parse_table,
7
, "SEQINTCTL",
0xd9, regvalue, cur_col, wrap));
}
...
...
@@ -2963,13 +2972,6 @@ ahd_prgmcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
0xde, regvalue, cur_col, wrap));
}
int
ahd_swtimer_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SWTIMER",
0xe0, regvalue, cur_col, wrap));
}
int
ahd_accum_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
...
...
@@ -3376,11 +3378,53 @@ ahd_allocfifo_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x148, regvalue, cur_col, wrap));
}
int
ahd_int_coalessing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "INT_COALESSING_TIMER",
0x14a, regvalue, cur_col, wrap));
}
int
ahd_int_coalessing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "INT_COALESSING_MAXCMDS",
0x14c, regvalue, cur_col, wrap));
}
int
ahd_int_coalessing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "INT_COALESSING_MINCMDS",
0x14d, regvalue, cur_col, wrap));
}
int
ahd_cmds_pending_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "CMDS_PENDING",
0x14e, regvalue, cur_col, wrap));
}
int
ahd_int_coalessing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "INT_COALESSING_CMDCOUNT",
0x150, regvalue, cur_col, wrap));
}
int
ahd_local_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "LOCAL_HS_MAILBOX",
0x151, regvalue, cur_col, wrap));
}
int
ahd_cmdsize_table_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "CMDSIZE_TABLE",
0x1
4a
, regvalue, cur_col, wrap));
0x1
52
, regvalue, cur_col, wrap));
}
int
...
...
drivers/scsi/aic7xxx/aic79xx_seq.h_shipped
View file @
d8433379
...
...
@@ -2,104 +2,128 @@
* DO NOT EDIT - This file is automatically generated
* from the following source files:
*
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
4
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
6
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#7
7
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#5
9
$
*/
static uint8_t seqprog[] = {
0xff, 0x02, 0x06, 0x78,
0x00, 0xea, 0x
06
, 0x59,
0x00, 0xea, 0x
3c
, 0x59,
0x01, 0xea, 0x04, 0x30,
0xff, 0x04, 0x0c, 0x78,
0x17, 0xea, 0x
06
, 0x59,
0x17, 0xea, 0x
3c
, 0x59,
0x17, 0xea, 0x04, 0x00,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x60, 0x3a, 0x1a, 0x68,
0x04, 0x47, 0x1b, 0x68,
0xff, 0x21, 0x1b, 0x70,
0x40, 0x4b, 0x
48
, 0x69,
0x00, 0xe2, 0x
0a
, 0x59,
0x40, 0x4b, 0x
48
, 0x69,
0x20, 0x4b, 0x
38
, 0x69,
0x40, 0x4b, 0x
7e
, 0x69,
0x00, 0xe2, 0x
40
, 0x59,
0x40, 0x4b, 0x
7e
, 0x69,
0x20, 0x4b, 0x
6e
, 0x69,
0xfc, 0x42, 0x24, 0x78,
0x10, 0x40, 0x24, 0x78,
0x00, 0xe2, 0x
4e
, 0x5d,
0x00, 0xe2, 0x
8c
, 0x5d,
0x20, 0x4d, 0x28, 0x78,
0x00, 0xe2, 0x
4e
, 0x5d,
0x00, 0xe2, 0x
8c
, 0x5d,
0x00, 0xe2, 0x34, 0x58,
0x00, 0xe2, 0x5c, 0x58,
0x00, 0xe2, 0x6c, 0x58,
0x00, 0xe2, 0x06, 0x40,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x01, 0x52, 0x
10
, 0x7d,
0x01, 0x52, 0x
4e
, 0x7d,
0x02, 0x58, 0x50, 0x31,
0xff, 0xea, 0x10, 0x0b,
0x08, 0xa8, 0x51, 0x03,
0x01, 0xa4, 0x43, 0x78,
0x00, 0xe2, 0x
fc, 0x5a
,
0x00, 0xe2, 0x
32, 0x5b
,
0x00, 0xe2, 0x34, 0x40,
0xff, 0xea, 0xd4, 0x19,
0x02, 0xa8, 0x84, 0x32,
0x00, 0xea, 0x
fa, 0x58
,
0x00, 0xea, 0x
30, 0x59
,
0x01, 0xea, 0x00, 0x30,
0x00, 0xe2, 0x
42
, 0x5d,
0x00, 0xe2, 0x
10
, 0x4d,
0x11, 0xea, 0x
fa, 0x58
,
0x00, 0xe2, 0x
80
, 0x5d,
0x00, 0xe2, 0x
4e
, 0x4d,
0x11, 0xea, 0x
30, 0x59
,
0x11, 0xea, 0x00, 0x00,
0x00, 0xe2, 0x
42
, 0x5d,
0x00, 0xe2, 0x
10
, 0x4d,
0x33, 0xea, 0x
fa, 0x58
,
0x00, 0xe2, 0x
80
, 0x5d,
0x00, 0xe2, 0x
4e
, 0x4d,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x00, 0xe2, 0x
f2, 0x42
,
0x00, 0xea, 0x
fa, 0x58
,
0x00, 0xe2, 0x
28, 0x43
,
0x00, 0xea, 0x
30, 0x59
,
0x01, 0xea, 0x00, 0x30,
0x80, 0xf9, 0x64, 0x68,
0x00, 0xe2, 0x
f8, 0x58
,
0x11, 0xea, 0x
fa, 0x58
,
0x00, 0xe2, 0x
2e, 0x59
,
0x11, 0xea, 0x
30, 0x59
,
0x11, 0xea, 0x00, 0x00,
0x80, 0xf9, 0x
f8, 0x78
,
0x80, 0xf9, 0x
2e, 0x79
,
0xff, 0xea, 0xd4, 0x0d,
0x22, 0xea, 0x
fa, 0x58
,
0x22, 0xea, 0x
30, 0x59
,
0x22, 0xea, 0x00, 0x00,
0x18, 0xad, 0xb4, 0x78,
0x04, 0xad, 0x88, 0x68,
0x80, 0xad, 0x10, 0x7d,
0x10, 0xad, 0x7a, 0x78,
0x10, 0x16, 0x76, 0x78,
0x01, 0x0b, 0xa2, 0x32,
0x10, 0x16, 0x2c, 0x00,
0x18, 0xad, 0xe4, 0x78,
0x04, 0xad, 0xb2, 0x68,
0x80, 0xad, 0x4e, 0x7d,
0x10, 0xad, 0x80, 0x78,
0xe7, 0xad, 0x5a, 0x0d,
0xe7, 0xad, 0x5a, 0x09,
0x0
2, 0xea, 0x02, 0x00
,
0x0
0, 0xe2, 0x8e, 0x58
,
0xff, 0xea, 0x56, 0x02,
0x04, 0x7c, 0x78, 0x32,
0x20, 0x16, 0x
10
, 0x7d,
0x20, 0x16, 0x
4e
, 0x7d,
0x04, 0x38, 0x79, 0x32,
0x80, 0x37, 0x6f, 0x16,
0x40, 0xad, 0x10, 0x7d,
0xff, 0x2d, 0x9d, 0x60,
0xff, 0x29, 0x9d, 0x60,
0x40, 0x51, 0xad, 0x78,
0xff, 0x4f, 0x9d, 0x68,
0xff, 0x4d, 0xc1, 0x19,
0x00, 0x4e, 0xd5, 0x19,
0x00, 0xe2, 0xac, 0x50,
0x01, 0x4c, 0xc1, 0x31,
0x00, 0x50, 0xd5, 0x19,
0x00, 0xe2, 0xac, 0x48,
0x80, 0x18, 0x4e, 0x7d,
0x02, 0x4a, 0x1d, 0x30,
0x10, 0xea, 0x18, 0x00,
0x60, 0x18, 0x30, 0x00,
0x7f, 0x18, 0x30, 0x0c,
0x02, 0xea, 0x02, 0x00,
0xff, 0xea, 0xa0, 0x0a,
0x80, 0x18, 0x30, 0x04,
0x40, 0xad, 0x4e, 0x7d,
0xe7, 0xad, 0x5a, 0x09,
0x02, 0xa8, 0x40, 0x31,
0xff, 0xea, 0xc0, 0x09,
0x01, 0x4e, 0x9d, 0x1a,
0x00, 0x4f, 0x9f, 0x22,
0x04, 0x94, 0x49, 0x32,
0xff, 0xea, 0x2a, 0x03,
0xff, 0xea, 0x2e, 0x03,
0x01, 0x10, 0xd4, 0x31,
0x10, 0xa8, 0x
a
9, 0x68,
0x10, 0xa8, 0x
d
9, 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, 0x
a
8, 0x70,
0xff, 0xa9, 0x
d
8, 0x70,
0x02, 0xa0, 0x28, 0x37,
0xff, 0x21, 0x
b
1, 0x70,
0xff, 0x21, 0x
e
1, 0x70,
0x02, 0x22, 0x51, 0x31,
0x02, 0xa0, 0x2c, 0x33,
0x02, 0xa0, 0x44, 0x36,
0x02, 0xa0, 0x40, 0x32,
0x02, 0xa0, 0x44, 0x36,
0x04, 0x47, 0x
b
9, 0x68,
0x40, 0x16, 0x
de, 0x68
,
0xff, 0x2d, 0x
e3, 0x60
,
0xff, 0x29, 0x
11
, 0x75,
0x04, 0x47, 0x
e
9, 0x68,
0x40, 0x16, 0x
14, 0x69
,
0xff, 0x2d, 0x
19, 0x61
,
0xff, 0x29, 0x
4f
, 0x75,
0x01, 0x37, 0xc1, 0x31,
0x02, 0x28, 0x55, 0x32,
0x01, 0xea, 0x5a, 0x01,
...
...
@@ -108,20 +132,23 @@ static uint8_t seqprog[] = {
0x01, 0xa8, 0x60, 0x31,
0x00, 0xa9, 0x60, 0x01,
0x01, 0x14, 0xd4, 0x31,
0xff, 0x8d, 0xd7, 0x70,
0x80, 0xac, 0xd6, 0x70,
0x20, 0x16, 0xd6, 0x68,
0x01, 0x50, 0xa1, 0x1a,
0xff, 0x4e, 0x9d, 0x1a,
0xff, 0x4f, 0x9f, 0x22,
0xff, 0x8d, 0x0d, 0x71,
0x80, 0xac, 0x0c, 0x71,
0x20, 0x16, 0x0c, 0x69,
0x02, 0x8c, 0x51, 0x31,
0x00, 0xe2, 0x
c
6, 0x40,
0x00, 0xe2, 0x
f
6, 0x40,
0x01, 0xac, 0x08, 0x31,
0x09, 0xea, 0x5a, 0x01,
0x02, 0x8c, 0x51, 0x32,
0xff, 0xea, 0x1a, 0x07,
0x04, 0x24, 0xf9, 0x30,
0x1d, 0xea, 0x
ee, 0x40
,
0x1d, 0xea, 0x
24, 0x41
,
0x02, 0x2c, 0x51, 0x31,
0x04, 0xac, 0xf9, 0x30,
0x19, 0xea, 0x
ee, 0x58
,
0x19, 0xea, 0x
24, 0x59
,
0x02, 0x8c, 0x59, 0x32,
0x02, 0x28, 0x19, 0x33,
0x02, 0xa8, 0x50, 0x36,
...
...
@@ -143,23 +170,23 @@ static uint8_t seqprog[] = {
0x02, 0x20, 0xb9, 0x30,
0x02, 0x20, 0x51, 0x31,
0x4c, 0xa9, 0xd7, 0x28,
0x10, 0xa8, 0x
19
, 0x79,
0x10, 0xa8, 0x
4f
, 0x79,
0x01, 0x6b, 0xc0, 0x30,
0x02, 0x64, 0xc8, 0x00,
0x40, 0x3a, 0x74, 0x04,
0x00, 0xe2, 0x5c, 0x58,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x30, 0x3f, 0xc0, 0x09,
0x30, 0xe0, 0x
1a
, 0x61,
0x20, 0x3f, 0x
30
, 0x69,
0x10, 0x3f, 0x
1a
, 0x79,
0x30, 0xe0, 0x
50
, 0x61,
0x20, 0x3f, 0x
66
, 0x69,
0x10, 0x3f, 0x
50
, 0x79,
0x02, 0xea, 0x7e, 0x00,
0x00, 0xea, 0x
fa, 0x58
,
0x00, 0xea, 0x
30, 0x59
,
0x01, 0xea, 0x00, 0x30,
0x02, 0x48, 0x51, 0x35,
0x01, 0xea, 0x7e, 0x00,
0x11, 0xea, 0x
fa, 0x58
,
0x11, 0xea, 0x
30, 0x59
,
0x11, 0xea, 0x00, 0x00,
0x02, 0x48, 0x51, 0x35,
0x08, 0xea, 0x98, 0x00,
...
...
@@ -169,11 +196,11 @@ static uint8_t seqprog[] = {
0x0f, 0x67, 0xc0, 0x09,
0x00, 0x34, 0x69, 0x02,
0x20, 0xea, 0x96, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x40, 0x3a, 0x
64
, 0x69,
0x00, 0xe2, 0x
dc
, 0x41,
0x40, 0x3a, 0x
9a
, 0x69,
0x02, 0x55, 0x06, 0x68,
0x02, 0x56, 0x
64
, 0x69,
0xff, 0x5b, 0x
64
, 0x61,
0x02, 0x56, 0x
9a
, 0x69,
0xff, 0x5b, 0x
9a
, 0x61,
0x02, 0x20, 0x51, 0x31,
0x80, 0xea, 0xb2, 0x01,
0x44, 0xea, 0x00, 0x00,
...
...
@@ -181,33 +208,33 @@ static uint8_t seqprog[] = {
0x33, 0xea, 0x00, 0x00,
0xff, 0xea, 0xb2, 0x09,
0xff, 0xe0, 0xc0, 0x19,
0xff, 0xe0, 0x
66
, 0x79,
0xff, 0xe0, 0x
9c
, 0x79,
0x02, 0x94, 0x51, 0x31,
0x00, 0xe2, 0x
5c
, 0x41,
0x00, 0xe2, 0x
92
, 0x41,
0x02, 0x5e, 0x50, 0x31,
0x02, 0xa8, 0xb8, 0x30,
0x02, 0x5c, 0x50, 0x31,
0xff, 0x95, 0x
77
, 0x71,
0xff, 0x95, 0x
ad
, 0x71,
0x02, 0x94, 0x41, 0x31,
0x02, 0x22, 0x51, 0x31,
0x02, 0xa0, 0x2c, 0x33,
0x02, 0xa0, 0x44, 0x32,
0x00, 0xe2, 0x
80
, 0x41,
0x10, 0xa8, 0x
81
, 0x69,
0x00, 0xe2, 0x
b6
, 0x41,
0x10, 0xa8, 0x
b7
, 0x69,
0x3d, 0xa9, 0xc9, 0x29,
0x01, 0xe4, 0xc8, 0x01,
0x01, 0xea, 0xca, 0x01,
0xff, 0xea, 0xda, 0x01,
0x02, 0x20, 0x51, 0x31,
0x02, 0x96, 0x41, 0x32,
0xff, 0x21, 0x
89
, 0x61,
0xff, 0x21, 0x
bf
, 0x61,
0xff, 0xea, 0x46, 0x02,
0x02, 0x5c, 0x50, 0x31,
0x40, 0xea, 0x96, 0x00,
0x02, 0x56, 0x
56
, 0x6d,
0x01, 0x55, 0x
56
, 0x6d,
0x10, 0xa8, 0x
95
, 0x79,
0x10, 0x40, 0x
96
, 0x69,
0x02, 0x56, 0x
94
, 0x6d,
0x01, 0x55, 0x
94
, 0x6d,
0x10, 0xa8, 0x
cb
, 0x79,
0x10, 0x40, 0x
cc
, 0x69,
0x01, 0x56, 0x06, 0x68,
0xbf, 0x3a, 0x74, 0x08,
0x08, 0xea, 0x98, 0x00,
...
...
@@ -217,104 +244,104 @@ static uint8_t seqprog[] = {
0x08, 0x3c, 0x78, 0x00,
0x80, 0xea, 0x62, 0x02,
0x40, 0xea, 0x66, 0x02,
0x00, 0xe2, 0x
5c
, 0x5b,
0x00, 0xe2, 0x
92
, 0x5b,
0x01, 0x36, 0xc1, 0x31,
0x9f, 0xe0, 0x
f0, 0x7b
,
0x80, 0xe0, 0x
ba
, 0x71,
0xa0, 0xe0, 0x
f2, 0x71
,
0xc0, 0xe0, 0x
e8, 0x71
,
0xe0, 0xe0, 0x
22
, 0x72,
0x01, 0xea, 0x
06
, 0x59,
0x9f, 0xe0, 0x
26, 0x7c
,
0x80, 0xe0, 0x
f0
, 0x71,
0xa0, 0xe0, 0x
28, 0x72
,
0xc0, 0xe0, 0x
1e, 0x72
,
0xe0, 0xe0, 0x
58
, 0x72,
0x01, 0xea, 0x
3c
, 0x59,
0x01, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x80, 0x33, 0x
c1
, 0x79,
0x03, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
dc
, 0x41,
0x80, 0x33, 0x
f7
, 0x79,
0x03, 0xea, 0x
3c
, 0x59,
0x03, 0xea, 0x04, 0x00,
0xee, 0x00, 0x
c8
, 0x69,
0xee, 0x00, 0x
fe
, 0x69,
0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x02, 0xa8, 0x90, 0x32,
0x00, 0xe2, 0x
20
, 0x59,
0x00, 0xe2, 0x
56
, 0x59,
0xef, 0x92, 0xd5, 0x19,
0x00, 0xe2, 0x
d8, 0x51
,
0x00, 0xe2, 0x
0e, 0x52
,
0x0b, 0x84, 0xe1, 0x30,
0x02, 0xea, 0x36, 0x00,
0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0x
de, 0x41
,
0x00, 0xe2, 0x
14, 0x42
,
0x01, 0x92, 0xd1, 0x30,
0x10, 0x80, 0x89, 0x31,
0x20, 0xea, 0x32, 0x00,
0xbf, 0x33, 0x67, 0x0a,
0x20, 0x19, 0x
e0, 0x69
,
0x02, 0x4d, 0x
a6
, 0x69,
0x20, 0x19, 0x
16, 0x6a
,
0x02, 0x4d, 0x
dc
, 0x69,
0x40, 0x33, 0x67, 0x02,
0x00, 0xe2, 0x
a6
, 0x41,
0x80, 0x33, 0x
5f
, 0x6a,
0x00, 0xe2, 0x
dc
, 0x41,
0x80, 0x33, 0x
95
, 0x6a,
0x01, 0x44, 0x10, 0x33,
0x08, 0xa8, 0x51, 0x03,
0x00, 0xe2, 0x
a6
, 0x41,
0x00, 0xe2, 0x
dc
, 0x41,
0x10, 0xea, 0x80, 0x00,
0x01, 0x31, 0xc5, 0x31,
0x80, 0xe2, 0x
0e
, 0x62,
0x10, 0xa8, 0x
33
, 0x6a,
0x80, 0xe2, 0x
44
, 0x62,
0x10, 0xa8, 0x
69
, 0x6a,
0xc0, 0xaa, 0xc5, 0x01,
0x40, 0xa8, 0x
ff, 0x69
,
0x40, 0xa8, 0x
35, 0x6a
,
0xbf, 0xe2, 0xc4, 0x09,
0x20, 0xa8, 0x
13
, 0x7a,
0x20, 0xa8, 0x
49
, 0x7a,
0x01, 0xe2, 0x88, 0x30,
0x00, 0xe2, 0x
5c
, 0x5b,
0xa0, 0x36, 0x
1b
, 0x62,
0x00, 0xe2, 0x
92
, 0x5b,
0xa0, 0x36, 0x
51
, 0x62,
0x23, 0xa8, 0x89, 0x08,
0x00, 0xe2, 0x
5c
, 0x5b,
0xa0, 0x36, 0x
1b
, 0x62,
0x00, 0xa8, 0x
12
, 0x42,
0xff, 0xe2, 0x
12
, 0x62,
0x00, 0xe2, 0x
32
, 0x42,
0x00, 0xe2, 0x
92
, 0x5b,
0xa0, 0x36, 0x
51
, 0x62,
0x00, 0xa8, 0x
48
, 0x42,
0xff, 0xe2, 0x
48
, 0x62,
0x00, 0xe2, 0x
68
, 0x42,
0x40, 0xea, 0x98, 0x00,
0x01, 0xe2, 0x88, 0x30,
0x00, 0xe2, 0x
5c
, 0x5b,
0xa0, 0x36, 0x
f1, 0x71
,
0x00, 0xe2, 0x
92
, 0x5b,
0xa0, 0x36, 0x
27, 0x72
,
0x40, 0xea, 0x98, 0x00,
0x01, 0x31, 0x89, 0x32,
0x08, 0xea, 0x62, 0x02,
0x00, 0xe2, 0x
a6
, 0x41,
0xe0, 0xea, 0x
6c
, 0x5b,
0x80, 0xe0, 0x
6a
, 0x6a,
0x04, 0xe0, 0x
0a
, 0x73,
0x02, 0xe0, 0x
3a
, 0x73,
0x00, 0xea, 0x
c8
, 0x72,
0x03, 0xe0, 0x
4a
, 0x73,
0x23, 0xe0, 0x
44
, 0x72,
0x08, 0xe0, 0x
66
, 0x72,
0x00, 0xe2, 0x
5c
, 0x5b,
0x07, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
dc
, 0x41,
0xe0, 0xea, 0x
a2
, 0x5b,
0x80, 0xe0, 0x
a0
, 0x6a,
0x04, 0xe0, 0x
40
, 0x73,
0x02, 0xe0, 0x
70
, 0x73,
0x00, 0xea, 0x
fe
, 0x72,
0x03, 0xe0, 0x
80
, 0x73,
0x23, 0xe0, 0x
7a
, 0x72,
0x08, 0xe0, 0x
9c
, 0x72,
0x00, 0xe2, 0x
92
, 0x5b,
0x07, 0xea, 0x
3c
, 0x59,
0x07, 0xea, 0x04, 0x00,
0x08, 0x42, 0x
a7
, 0x71,
0x04, 0x42, 0x
41
, 0x62,
0x08, 0x42, 0x
dd
, 0x71,
0x04, 0x42, 0x
77
, 0x62,
0x01, 0x43, 0x89, 0x30,
0x00, 0xe2, 0x
32
, 0x42,
0x00, 0xe2, 0x
68
, 0x42,
0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0x
32
, 0x42,
0x00, 0xe2, 0x
68
, 0x42,
0x01, 0x00, 0x60, 0x32,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x4c, 0x34, 0xc1, 0x28,
0x01, 0x64, 0xc0, 0x31,
0x00, 0x30, 0x
fb, 0x58
,
0x00, 0x30, 0x
31, 0x59
,
0x01, 0x30, 0x01, 0x30,
0x01, 0xe0, 0x
64
, 0x7a,
0xa0, 0xea, 0x
62
, 0x5b,
0x01, 0xa0, 0x
64
, 0x62,
0x01, 0x84, 0x
5d
, 0x7a,
0x01, 0xa7, 0x
66
, 0x7a,
0x00, 0xe2, 0x
66
, 0x42,
0x03, 0xea, 0x
06
, 0x59,
0x01, 0xe0, 0x
9a
, 0x7a,
0xa0, 0xea, 0x
98
, 0x5b,
0x01, 0xa0, 0x
9a
, 0x62,
0x01, 0x84, 0x
93
, 0x7a,
0x01, 0xa7, 0x
9c
, 0x7a,
0x00, 0xe2, 0x
9c
, 0x42,
0x03, 0xea, 0x
3c
, 0x59,
0x03, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
66
, 0x42,
0x07, 0xea, 0x
74
, 0x5b,
0x00, 0xe2, 0x
9c
, 0x42,
0x07, 0xea, 0x
aa
, 0x5b,
0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0x
a6
, 0x41,
0x00, 0xe2, 0x
dc
, 0x41,
0x3f, 0xe0, 0x6a, 0x0a,
0xc0, 0x34, 0xc1, 0x09,
0x00, 0x35, 0x51, 0x01,
...
...
@@ -325,54 +352,54 @@ static uint8_t seqprog[] = {
0x01, 0xea, 0xc6, 0x01,
0x02, 0xe2, 0xc8, 0x31,
0x02, 0xec, 0x40, 0x31,
0xff, 0xa1, 0x
86
, 0x72,
0xff, 0xa1, 0x
bc
, 0x72,
0x02, 0xe8, 0xda, 0x31,
0x02, 0xa0, 0x50, 0x31,
0x00, 0xe2, 0x
a8
, 0x42,
0x00, 0xe2, 0x
de
, 0x42,
0x80, 0x33, 0x67, 0x02,
0x01, 0x44, 0xd4, 0x31,
0x00, 0xe2, 0x
5c
, 0x5b,
0x00, 0xe2, 0x
92
, 0x5b,
0x01, 0x33, 0x67, 0x02,
0xe0, 0x36, 0x
c3
, 0x62,
0xe0, 0x36, 0x
f9
, 0x62,
0x02, 0x33, 0x67, 0x02,
0x20, 0x46, 0x
bc
, 0x62,
0x20, 0x46, 0x
f2
, 0x62,
0xff, 0xea, 0x52, 0x09,
0xa8, 0xea, 0x
62
, 0x5b,
0x04, 0xa8, 0x
a3
, 0x7a,
0xa8, 0xea, 0x
98
, 0x5b,
0x04, 0xa8, 0x
d9
, 0x7a,
0x01, 0x34, 0xc1, 0x31,
0x00, 0xa9, 0x
a3
, 0x62,
0x00, 0xa9, 0x
d9
, 0x62,
0x01, 0x35, 0xc1, 0x31,
0x00, 0xaa, 0x
ad
, 0x72,
0x00, 0xaa, 0x
e3
, 0x72,
0x01, 0xa9, 0x52, 0x11,
0xff, 0xa9, 0x
98
, 0x6a,
0x00, 0xe2, 0x
bc
, 0x42,
0xff, 0xa9, 0x
ce
, 0x6a,
0x00, 0xe2, 0x
f2
, 0x42,
0x10, 0x33, 0x67, 0x02,
0x04, 0xa8, 0x
bd
, 0x7a,
0x04, 0xa8, 0x
f3
, 0x7a,
0xfb, 0xa8, 0x51, 0x0b,
0xff, 0xea, 0x66, 0x0a,
0x01, 0xa4, 0x
b7
, 0x6a,
0x01, 0xa4, 0x
ed
, 0x6a,
0x02, 0xa8, 0x90, 0x32,
0x00, 0xe2, 0x
20
, 0x59,
0x10, 0xa8, 0x
67
, 0x7a,
0xff, 0xea, 0x
74
, 0x5b,
0x00, 0xe2, 0x
66
, 0x42,
0x04, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
56
, 0x59,
0x10, 0xa8, 0x
9d
, 0x7a,
0xff, 0xea, 0x
aa
, 0x5b,
0x00, 0xe2, 0x
9c
, 0x42,
0x04, 0xea, 0x
3c
, 0x59,
0x04, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
66
, 0x42,
0x04, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
9c
, 0x42,
0x04, 0xea, 0x
3c
, 0x59,
0x04, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x08, 0xa8, 0x
5f
, 0x7a,
0xc0, 0x33, 0x
d3, 0x7a
,
0x80, 0x33, 0x
5f
, 0x6a,
0xff, 0x88, 0x
d3, 0x6a
,
0x40, 0x33, 0x
5f
, 0x6a,
0x10, 0xa8, 0x
d9, 0x7a
,
0x0a, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
dc
, 0x41,
0x08, 0xa8, 0x
95
, 0x7a,
0xc0, 0x33, 0x
09, 0x7b
,
0x80, 0x33, 0x
95
, 0x6a,
0xff, 0x88, 0x
09, 0x6b
,
0x40, 0x33, 0x
95
, 0x6a,
0x10, 0xa8, 0x
0f, 0x7b
,
0x0a, 0xea, 0x
3c
, 0x59,
0x0a, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
f2, 0x5a
,
0x00, 0xe2, 0x
26
, 0x43,
0x
40, 0x4b, 0xe0, 0x6a
,
0x00, 0xe2, 0x
28, 0x5b
,
0x00, 0xe2, 0x
5c
, 0x43,
0x
50, 0x4b, 0x16, 0x6b
,
0xbf, 0x3a, 0x74, 0x08,
0x01, 0xe0, 0xf8, 0x31,
0xff, 0xea, 0xc0, 0x09,
...
...
@@ -380,24 +407,24 @@ static uint8_t seqprog[] = {
0x00, 0x2f, 0x5f, 0x22,
0x04, 0x47, 0x8f, 0x02,
0x01, 0xfc, 0xc0, 0x35,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x02, 0x42, 0x51, 0x31,
0x10, 0xa8, 0x51, 0x03,
0xff, 0x88, 0x
01
, 0x6b,
0x01, 0xa4, 0x
fd, 0x6a
,
0x02, 0xa4, 0x
05
, 0x6b,
0x01, 0x84, 0x
05
, 0x7b,
0xff, 0x88, 0x
37
, 0x6b,
0x01, 0xa4, 0x
33, 0x6b
,
0x02, 0xa4, 0x
3b
, 0x6b,
0x01, 0x84, 0x
3b
, 0x7b,
0x02, 0x28, 0x19, 0x33,
0x02, 0xa8, 0x50, 0x36,
0xff, 0x88, 0x
05
, 0x73,
0x00, 0xe2, 0x
dc, 0x5a
,
0xff, 0x88, 0x
3b
, 0x73,
0x00, 0xe2, 0x
12, 0x5b
,
0x02, 0x2c, 0x19, 0x33,
0x02, 0xa8, 0x58, 0x32,
0x04, 0xa4, 0x49, 0x07,
0xc0, 0x33, 0x
5f
, 0x6a,
0xc0, 0x33, 0x
95
, 0x6a,
0x04, 0xa8, 0x51, 0x03,
0x20, 0xa8, 0x
27
, 0x6b,
0x20, 0xa8, 0x
5d
, 0x6b,
0x02, 0xa8, 0x40, 0x31,
0xc0, 0x34, 0xc1, 0x09,
0x00, 0x35, 0x51, 0x01,
...
...
@@ -412,66 +439,66 @@ static uint8_t seqprog[] = {
0xf7, 0x57, 0xae, 0x08,
0x08, 0xea, 0x98, 0x00,
0x01, 0x44, 0xd4, 0x31,
0xee, 0x00, 0x
30
, 0x6b,
0xee, 0x00, 0x
66
, 0x6b,
0x02, 0xea, 0xb4, 0x00,
0x00, 0xe2, 0x
58
, 0x5b,
0x09, 0x4c, 0x
32
, 0x7b,
0x00, 0xe2, 0x
8e
, 0x5b,
0x09, 0x4c, 0x
68
, 0x7b,
0x08, 0x4c, 0x06, 0x68,
0x0b, 0xea, 0x
06
, 0x59,
0x0b, 0xea, 0x
3c
, 0x59,
0x0b, 0xea, 0x04, 0x00,
0x01, 0x44, 0xd4, 0x31,
0x20, 0x33, 0x
a7
, 0x79,
0x00, 0xe2, 0x
42
, 0x5b,
0x00, 0xe2, 0x
a6
, 0x41,
0x01, 0x84, 0x
47
, 0x7b,
0x20, 0x33, 0x
dd
, 0x79,
0x00, 0xe2, 0x
78
, 0x5b,
0x00, 0xe2, 0x
dc
, 0x41,
0x01, 0x84, 0x
7d
, 0x7b,
0x01, 0xa4, 0x49, 0x07,
0x08, 0x60, 0x30, 0x33,
0x08, 0x80, 0x41, 0x37,
0xdf, 0x33, 0x67, 0x0a,
0xee, 0x00, 0x
54
, 0x6b,
0xee, 0x00, 0x
8a
, 0x6b,
0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x00, 0xe2, 0x
20
, 0x59,
0x00, 0xe2, 0x
66
, 0x42,
0x00, 0xe2, 0x
56
, 0x59,
0x00, 0xe2, 0x
9c
, 0x42,
0x01, 0xea, 0x6c, 0x02,
0xc0, 0xea, 0x66, 0x06,
0xff, 0x42, 0x
5c
, 0x7b,
0x04, 0x4c, 0x
5c
, 0x6b,
0xff, 0x42, 0x
92
, 0x7b,
0x04, 0x4c, 0x
92
, 0x6b,
0xe0, 0x41, 0x6c, 0x0e,
0x01, 0x44, 0xd4, 0x31,
0xff, 0x42, 0x
64
, 0x7b,
0x04, 0x4c, 0x
64
, 0x6b,
0xff, 0x42, 0x
9a
, 0x7b,
0x04, 0x4c, 0x
9a
, 0x6b,
0xe0, 0x41, 0x6c, 0x0a,
0xe0, 0x36, 0x
a7
, 0x61,
0xe0, 0x36, 0x
dd
, 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, 0x
7c
, 0x7b,
0x04, 0xa6, 0x
b2
, 0x7b,
0xff, 0xea, 0x5a, 0x09,
0xff, 0xea, 0x4c, 0x0d,
0x01, 0xa6, 0x
9a
, 0x6b,
0x10, 0xad, 0x
10
, 0x7d,
0x80, 0xad, 0x
92
, 0x6b,
0x08, 0xad, 0x
10
, 0x6d,
0x01, 0xa6, 0x
d0
, 0x6b,
0x10, 0xad, 0x
4e
, 0x7d,
0x80, 0xad, 0x
c8
, 0x6b,
0x08, 0xad, 0x
4e
, 0x6d,
0x04, 0x84, 0xf9, 0x30,
0x00, 0xea, 0x08, 0x81,
0xff, 0xea, 0xd4, 0x09,
0x02, 0x84, 0xf9, 0x88,
0x1d, 0xea, 0x5a, 0x01,
0x04, 0xa6, 0x4c, 0x05,
0x04, 0xa6, 0x
10
, 0x7d,
0x04, 0xa6, 0x
4e
, 0x7d,
0xff, 0xea, 0x5a, 0x09,
0x03, 0x84, 0x59, 0x89,
0x03, 0xea, 0x4c, 0x01,
0x80, 0x1a, 0x
10
, 0x7d,
0x80, 0x1a, 0x
4e
, 0x7d,
0x08, 0xb0, 0xe0, 0x30,
0x04, 0xb0, 0xe0, 0x30,
0x03, 0xb0, 0xf0, 0x30,
0x01, 0x78, 0x
a6
, 0x7b,
0x01, 0x78, 0x
dc
, 0x7b,
0x01, 0xa7, 0x4e, 0x11,
0x01, 0xb0, 0x06, 0x33,
0x7f, 0x83, 0xe9, 0x08,
...
...
@@ -482,240 +509,244 @@ static uint8_t seqprog[] = {
0x00, 0x86, 0x0d, 0x23,
0x00, 0x87, 0x0f, 0x23,
0x01, 0x84, 0xc5, 0x31,
0x01, 0xa7, 0x
bc
, 0x7b,
0x01, 0xa7, 0x
f2
, 0x7b,
0x04, 0xe2, 0xc4, 0x01,
0x80, 0x83, 0x
c3
, 0x7b,
0x80, 0x83, 0x
f9
, 0x7b,
0x02, 0xe2, 0xc4, 0x01,
0xff, 0xea, 0x4c, 0x09,
0x01, 0xe2, 0x36, 0x30,
0xc8, 0x19, 0x32, 0x00,
0x88, 0x19, 0x32, 0x00,
0x01, 0xac, 0xd4, 0x99,
0x00, 0xe2, 0x
10
, 0x55,
0x00, 0xe2, 0x
4e
, 0x55,
0xfe, 0xa6, 0x4c, 0x0d,
0x0b, 0x98, 0xe1, 0x30,
0x01, 0xa0, 0x4f, 0x09,
0xfd, 0xa4, 0x49, 0x09,
0x80, 0xa3, 0x
d9, 0x7b
,
0x80, 0xa3, 0x
0f, 0x7c
,
0x02, 0xa4, 0x48, 0x01,
0x01, 0xa7, 0x
dc, 0x7b
,
0x01, 0xa7, 0x
12, 0x7c
,
0x04, 0xa4, 0x48, 0x01,
0x01, 0xa4, 0x36, 0x30,
0xa8, 0xea, 0x32, 0x00,
0xfd, 0xa4, 0x49, 0x0b,
0x05, 0xa3, 0x07, 0x33,
0x80, 0x83, 0x
e9, 0x6b
,
0x80, 0x83, 0x
1f, 0x6c
,
0x02, 0xea, 0x4c, 0x05,
0xff, 0xea, 0x4c, 0x0d,
0x00, 0xe2, 0x
f2, 0x58
,
0x02, 0xa6, 0x
7e
, 0x6b,
0x00, 0xe2, 0x
28, 0x59
,
0x02, 0xa6, 0x
b4
, 0x6b,
0x80, 0xf9, 0xf2, 0x05,
0xc0, 0x33, 0x
f7, 0x7b
,
0x03, 0xea, 0x
06
, 0x59,
0xc0, 0x33, 0x
2d, 0x7c
,
0x03, 0xea, 0x
3c
, 0x59,
0x03, 0xea, 0x04, 0x00,
0x20, 0x33, 0x
1b
, 0x7c,
0x01, 0x84, 0x
01
, 0x6c,
0x06, 0xea, 0x
06
, 0x59,
0x20, 0x33, 0x
51
, 0x7c,
0x01, 0x84, 0x
37
, 0x6c,
0x06, 0xea, 0x
3c
, 0x59,
0x06, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
1e
, 0x44,
0x00, 0xe2, 0x
54
, 0x44,
0x01, 0x00, 0x60, 0x32,
0xee, 0x00, 0x
0a
, 0x6c,
0xee, 0x00, 0x
40
, 0x6c,
0x05, 0xea, 0xb4, 0x00,
0x33, 0xea, 0x
fa, 0x58
,
0x33, 0xea, 0x
30, 0x59
,
0x33, 0xea, 0x00, 0x00,
0x80, 0x3d, 0x7a, 0x00,
0xfc, 0x42, 0x
0c
, 0x7c,
0xfc, 0x42, 0x
42
, 0x7c,
0x7f, 0x3d, 0x7a, 0x08,
0x00, 0x30, 0x
fb, 0x58
,
0x00, 0x30, 0x
31, 0x59
,
0x01, 0x30, 0x01, 0x30,
0x09, 0xea, 0x
06
, 0x59,
0x09, 0xea, 0x
3c
, 0x59,
0x09, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x01, 0xa4, 0x
01
, 0x6c,
0x00, 0xe2, 0x
ce, 0x5b
,
0x00, 0xe2, 0x
dc
, 0x41,
0x01, 0xa4, 0x
37
, 0x6c,
0x00, 0xe2, 0x
04, 0x5c
,
0x20, 0x33, 0x67, 0x02,
0x01, 0x00, 0x60, 0x32,
0x02, 0xa6, 0x
26
, 0x7c,
0x00, 0xe2, 0x
ea, 0x5b
,
0x02, 0xa6, 0x
5c
, 0x7c,
0x00, 0xe2, 0x
20, 0x5c
,
0x00, 0xe2, 0x5c, 0x58,
0x00, 0xe2, 0x6c, 0x58,
0x00, 0xe2, 0x30, 0x58,
0x00, 0x30, 0x
fb, 0x58
,
0x00, 0x30, 0x
31, 0x59
,
0x01, 0x30, 0x01, 0x30,
0x20, 0x19, 0x
26
, 0x6c,
0x00, 0xe2, 0x
4e
, 0x5c,
0x04, 0x19, 0x
40
, 0x6c,
0x20, 0x19, 0x
5c
, 0x6c,
0x00, 0xe2, 0x
84
, 0x5c,
0x04, 0x19, 0x
76
, 0x6c,
0x02, 0x19, 0x32, 0x00,
0x01, 0x84, 0x
41
, 0x7c,
0x01, 0x1b, 0x
3a
, 0x7c,
0x01, 0x1a, 0x
40
, 0x6c,
0x00, 0xe2, 0x
f0, 0x43
,
0x80, 0x4b, 0x
46
, 0x6c,
0x01, 0x4c, 0x
42
, 0x7c,
0x03, 0x42, 0x
f0, 0x6b
,
0x00, 0xe2, 0x
78
, 0x5b,
0x01, 0x84, 0x
77
, 0x7c,
0x01, 0x1b, 0x
70
, 0x7c,
0x01, 0x1a, 0x
76
, 0x6c,
0x00, 0xe2, 0x
26, 0x44
,
0x80, 0x4b, 0x
7c
, 0x6c,
0x01, 0x4c, 0x
78
, 0x7c,
0x03, 0x42, 0x
26, 0x6c
,
0x00, 0xe2, 0x
ae
, 0x5b,
0x80, 0xf9, 0xf2, 0x01,
0x04, 0x33, 0x
a7
, 0x79,
0x00, 0xe2, 0x
a6
, 0x41,
0x02, 0x1b, 0x
56
, 0x7c,
0x08, 0x5d, 0x
54
, 0x7c,
0x04, 0x33, 0x
dd
, 0x79,
0x00, 0xe2, 0x
dc
, 0x41,
0x02, 0x1b, 0x
8c
, 0x7c,
0x08, 0x5d, 0x
8a
, 0x7c,
0x03, 0x68, 0x00, 0x37,
0x01, 0x84, 0x09, 0x07,
0x08, 0x5d, 0x
60
, 0x6c,
0x08, 0x5d, 0x
96
, 0x6c,
0x00, 0xe2, 0x5c, 0x58,
0x00, 0x30, 0x
fb, 0x58
,
0x00, 0x30, 0x
31, 0x59
,
0x01, 0x30, 0x01, 0x30,
0x00, 0xe2, 0x
4e
, 0x44,
0x80, 0x1b, 0x
6a
, 0x7c,
0x80, 0x84, 0x
6b
, 0x6c,
0x00, 0xe2, 0x
84
, 0x44,
0x80, 0x1b, 0x
a0
, 0x7c,
0x80, 0x84, 0x
a1
, 0x6c,
0xff, 0x85, 0x0b, 0x1b,
0xff, 0x86, 0x0d, 0x23,
0xff, 0x87, 0x0f, 0x23,
0xf8, 0x1b, 0x08, 0x0b,
0xff, 0xea, 0x4e, 0x09,
0x04, 0x1b, 0x
72
, 0x7c,
0x04, 0x1b, 0x
a8
, 0x7c,
0x01, 0xa7, 0x4e, 0x01,
0xff, 0xea, 0x06, 0x0b,
0x03, 0x68, 0x00, 0x37,
0x00, 0xe2, 0xac, 0x58,
0x10, 0xea, 0x18, 0x00,
0xf9, 0xd9, 0xb2, 0x0d,
0x01, 0xd9, 0xb2, 0x05,
0xff, 0xea, 0xd4, 0x09,
0x
20, 0x5b, 0x84
, 0x6c,
0x
10, 0x5b, 0x8e
, 0x6c,
0x
08, 0x5b, 0x96
, 0x6c,
0x02, 0x5b, 0x
a4
, 0x6d,
0x0e, 0xea, 0x
06
, 0x59,
0x
10, 0x5b, 0xcc
, 0x6c,
0x
08, 0x5b, 0xd4
, 0x6c,
0x
20, 0x5b, 0xc2
, 0x6c,
0x02, 0x5b, 0x
e2
, 0x6d,
0x0e, 0xea, 0x
3c
, 0x59,
0x0e, 0xea, 0x04, 0x00,
0x08, 0x19, 0x
8a
, 0x7c,
0x08, 0x19, 0x
c8
, 0x7c,
0xdf, 0x5c, 0xb8, 0x08,
0x01, 0xd9, 0xb2, 0x05,
0x02, 0xea, 0xb4, 0x00,
0x01, 0xd9, 0xb2, 0x05,
0x01, 0xa4, 0x
6d
, 0x6d,
0x00, 0xe2, 0x
ce, 0x5b
,
0x00, 0xe2, 0x
b0
, 0x5c,
0x01, 0xa4, 0x
ab
, 0x6d,
0x00, 0xe2, 0x
04, 0x5c
,
0x00, 0xe2, 0x
ee
, 0x5c,
0x01, 0xd9, 0xb2, 0x05,
0x00, 0xe2, 0x
dc, 0x5a
,
0x00, 0xe2, 0x
12, 0x5b
,
0xf3, 0x92, 0xd5, 0x19,
0x00, 0xe2, 0x
a4
, 0x54,
0x80, 0x92, 0x
a5
, 0x6c,
0x0f, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
e2
, 0x54,
0x80, 0x92, 0x
e3
, 0x6c,
0x0f, 0xea, 0x
3c
, 0x59,
0x0f, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
ac
, 0x44,
0x00, 0xe2, 0x
ea
, 0x44,
0x04, 0x8c, 0xe1, 0x30,
0x01, 0xea, 0xf2, 0x00,
0x02, 0xea, 0x36, 0x00,
0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0x
32
, 0x5d,
0x00, 0xe2, 0x
70
, 0x5d,
0x01, 0xd9, 0xb2, 0x05,
0x02, 0xa8, 0xf4, 0x31,
0x02, 0xa6, 0x
c2, 0x7c
,
0x00, 0xe2, 0x
f4, 0x58
,
0x20, 0x5b, 0x
d0, 0x6c
,
0xfc, 0x42, 0x
bc
, 0x7c,
0x10, 0x40, 0x
be
, 0x6c,
0x20, 0x4d, 0x
c0
, 0x7c,
0x08, 0x5d, 0x
d0, 0x6c
,
0x02, 0xa6, 0x
7e
, 0x6b,
0x00, 0xe2, 0x
f4, 0x58
,
0x20, 0x5b, 0x
d0, 0x6c
,
0x01, 0x1b, 0x
f0, 0x6c
,
0xfc, 0x42, 0x
cc, 0x7c
,
0x10, 0x40, 0x
ce, 0x6c
,
0x20, 0x4d, 0x
10
, 0x7d,
0x08, 0x5d, 0x
10
, 0x7d,
0x02, 0xa6, 0x
00, 0x7d
,
0x00, 0xe2, 0x
2a, 0x59
,
0x20, 0x5b, 0x
0e, 0x6d
,
0xfc, 0x42, 0x
fa
, 0x7c,
0x10, 0x40, 0x
fc
, 0x6c,
0x20, 0x4d, 0x
fe
, 0x7c,
0x08, 0x5d, 0x
0e, 0x6d
,
0x02, 0xa6, 0x
b4
, 0x6b,
0x00, 0xe2, 0x
2a, 0x59
,
0x20, 0x5b, 0x
0e, 0x6d
,
0x01, 0x1b, 0x
2e, 0x6d
,
0xfc, 0x42, 0x
0a, 0x7d
,
0x10, 0x40, 0x
0c, 0x6d
,
0x20, 0x4d, 0x
4e
, 0x7d,
0x08, 0x5d, 0x
4e
, 0x7d,
0x02, 0x19, 0x32, 0x00,
0x01, 0x5b, 0x40, 0x31,
0x00, 0xe2, 0x4e, 0x5c,
0x00, 0xe2, 0x42, 0x5b,
0x20, 0xea, 0xb6, 0x00,
0x00, 0xe2, 0x84, 0x5c,
0x00, 0xe2, 0x78, 0x5b,
0x20, 0xea, 0xb6, 0x00,
0x00, 0xe2, 0xae, 0x5b,
0x20, 0x5c, 0xb8, 0x00,
0x04, 0x19, 0x
e6, 0x6c
,
0x01, 0x1a, 0x
e6, 0x6c
,
0x00, 0xe2, 0x
f4, 0x58
,
0x01, 0x1a, 0x
10
, 0x7d,
0x04, 0x19, 0x
24, 0x6d
,
0x01, 0x1a, 0x
24, 0x6d
,
0x00, 0xe2, 0x
2a, 0x59
,
0x01, 0x1a, 0x
4e
, 0x7d,
0x80, 0xf9, 0xf2, 0x01,
0x20, 0xa0, 0x
56
, 0x7d,
0x08, 0xa8, 0x
ef, 0x7c
,
0x00, 0xe2, 0x
02
, 0x45,
0x20, 0xa0, 0x
94
, 0x7d,
0x08, 0xa8, 0x
2d, 0x7d
,
0x00, 0xe2, 0x
40
, 0x45,
0x02, 0xea, 0xb4, 0x04,
0x02, 0x19, 0x32, 0x00,
0x08, 0xa8, 0x
13
, 0x7d,
0x04, 0x5d, 0x
6c
, 0x7d,
0x01, 0x1a, 0x
6c
, 0x7d,
0x08, 0xa8, 0x
51
, 0x7d,
0x04, 0x5d, 0x
aa
, 0x7d,
0x01, 0x1a, 0x
aa
, 0x7d,
0x01, 0xa4, 0x49, 0x03,
0x80, 0xf9, 0xf2, 0x01,
0x02, 0xa8, 0x84, 0x32,
0x02, 0xea, 0xb4, 0x00,
0x00, 0xe2, 0x
ec, 0x42
,
0x00, 0xe2, 0x
22, 0x43
,
0x02, 0xa8, 0x84, 0x32,
0x02, 0xea, 0xb4, 0x00,
0xff, 0xea, 0xd4, 0x19,
0x00, 0xe2, 0x
00
, 0x59,
0x00, 0xe2, 0x
36
, 0x59,
0x11, 0x00, 0x00, 0x10,
0x00, 0xe2, 0x
42
, 0x5d,
0x00, 0xe2, 0x
ec, 0x52
,
0x00, 0xe2, 0x
80
, 0x5d,
0x00, 0xe2, 0x
22, 0x53
,
0xff, 0xea, 0xd4, 0x0d,
0x00, 0xe2, 0x
f4, 0x58
,
0x40, 0x5b, 0x
1e
, 0x6d,
0x04, 0x5d, 0x
6c
, 0x7d,
0x01, 0x1a, 0x
6c
, 0x7d,
0x20, 0x4d, 0x
10
, 0x7d,
0x40, 0x5b, 0x
56
, 0x7d,
0x04, 0x5d, 0x
6c
, 0x7d,
0x01, 0x1a, 0x
6c
, 0x7d,
0x00, 0xe2, 0x
2a, 0x59
,
0x40, 0x5b, 0x
5c
, 0x6d,
0x04, 0x5d, 0x
aa
, 0x7d,
0x01, 0x1a, 0x
aa
, 0x7d,
0x20, 0x4d, 0x
4e
, 0x7d,
0x40, 0x5b, 0x
94
, 0x7d,
0x04, 0x5d, 0x
aa
, 0x7d,
0x01, 0x1a, 0x
aa
, 0x7d,
0x80, 0xf9, 0xf2, 0x01,
0x01, 0xa4, 0x49, 0x03,
0x08, 0xa8, 0x
03
, 0x6d,
0x08, 0xa8, 0x
41
, 0x6d,
0x02, 0xea, 0xb4, 0x04,
0xff, 0x6a, 0x
38
, 0x7d,
0x10, 0xea, 0x
06
, 0x59,
0xff, 0x6a, 0x
76
, 0x7d,
0x10, 0xea, 0x
3c
, 0x59,
0x10, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
38
, 0x45,
0x00, 0xe2, 0x
f2, 0x58
,
0x10, 0x5d, 0x
2a
, 0x6d,
0x40, 0x5b, 0x
10
, 0x7d,
0x00, 0xe2, 0x
76
, 0x45,
0x00, 0xe2, 0x
28, 0x59
,
0x10, 0x5d, 0x
68
, 0x6d,
0x40, 0x5b, 0x
4e
, 0x7d,
0x02, 0x19, 0x32, 0x00,
0x80, 0xf9, 0xf2, 0x01,
0xff, 0xea, 0x10, 0x03,
0x08, 0xa8, 0x51, 0x03,
0x00, 0xe2, 0x
02
, 0x45,
0x80, 0xf9, 0x
10
, 0x6d,
0x00, 0xe2, 0x
40
, 0x45,
0x80, 0xf9, 0x
4e
, 0x6d,
0x01, 0x43, 0xc1, 0x31,
0x00, 0xfb, 0x
10
, 0x65,
0x00, 0xfb, 0x
4e
, 0x65,
0x01, 0x42, 0xc1, 0x31,
0x00, 0xfa, 0x
10
, 0x65,
0x00, 0xfa, 0x
4e
, 0x65,
0x01, 0xe8, 0xd4, 0x1d,
0x30, 0x3f, 0xc0, 0x09,
0x30, 0xe0, 0x
10
, 0x65,
0x40, 0x4b, 0x
10
, 0x6d,
0x30, 0xe0, 0x
4e
, 0x65,
0x40, 0x4b, 0x
4e
, 0x6d,
0xff, 0xea, 0x52, 0x01,
0xee, 0x00, 0x
5c
, 0x6d,
0xee, 0x00, 0x
9a
, 0x6d,
0x80, 0xf9, 0xf2, 0x01,
0x02, 0xea, 0xb4, 0x00,
0x20, 0xea, 0x9a, 0x00,
0xf3, 0x42, 0x
66
, 0x6d,
0x12, 0xea, 0x
06
, 0x59,
0xf3, 0x42, 0x
a4
, 0x6d,
0x12, 0xea, 0x
3c
, 0x59,
0x12, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x0d, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
dc
, 0x41,
0x0d, 0xea, 0x
3c
, 0x59,
0x0d, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
a6
, 0x41,
0x11, 0xea, 0x
06
, 0x59,
0x00, 0xe2, 0x
dc
, 0x41,
0x11, 0xea, 0x
3c
, 0x59,
0x11, 0xea, 0x04, 0x00,
0x00, 0xe2, 0x
dc, 0x5a
,
0x00, 0xe2, 0x
12, 0x5b
,
0x08, 0x5a, 0xb4, 0x00,
0x00, 0xe2, 0x
8e
, 0x5d,
0x00, 0xe2, 0x
cc
, 0x5d,
0xa8, 0xea, 0x32, 0x00,
0x00, 0xe2, 0x
f4, 0x58
,
0x80, 0x1a, 0x
80
, 0x7d,
0x00, 0xe2, 0x
8e
, 0x5d,
0x00, 0xe2, 0x
2a, 0x59
,
0x80, 0x1a, 0x
be
, 0x7d,
0x00, 0xe2, 0x
cc
, 0x5d,
0x80, 0x19, 0x32, 0x00,
0x40, 0x5b, 0x
86
, 0x6d,
0x08, 0x5a, 0x
86
, 0x7d,
0x20, 0x4d, 0x
10
, 0x7d,
0x40, 0x5b, 0x
c4
, 0x6d,
0x08, 0x5a, 0x
c4
, 0x7d,
0x20, 0x4d, 0x
4e
, 0x7d,
0x02, 0x84, 0x09, 0x03,
0x40, 0x5b, 0x
56
, 0x7d,
0x08, 0xa8, 0x
fb, 0x6c
,
0x40, 0x5b, 0x
94
, 0x7d,
0x08, 0xa8, 0x
39, 0x6d
,
0x02, 0xea, 0xb4, 0x04,
0x01, 0x38, 0xe1, 0x30,
0x05, 0x39, 0xe3, 0x98,
...
...
@@ -727,7 +758,7 @@ static uint8_t seqprog[] = {
0x04, 0xea, 0xe8, 0x30,
0xff, 0xea, 0xf0, 0x08,
0x02, 0xea, 0xf2, 0x00,
0xff, 0xea, 0xf4, 0x0
8
0xff, 0xea, 0xf4, 0x0
c
};
typedef int ahd_patch_func_t (struct ahd_softc *ahd);
...
...
@@ -911,102 +942,104 @@ static struct patch {
{ ahd_patch0_func, 51, 1, 1 },
{ ahd_patch2_func, 54, 1, 2 },
{ ahd_patch0_func, 55, 1, 1 },
{ ahd_patch2_func, 125, 6, 1 },
{ ahd_patch1_func, 131, 2, 1 },
{ ahd_patch3_func, 133, 1, 1 },
{ ahd_patch2_func, 142, 1, 2 },
{ ahd_patch0_func, 143, 1, 1 },
{ ahd_patch4_func, 144, 2, 2 },
{ ahd_patch0_func, 146, 6, 3 },
{ ahd_patch2_func, 149, 1, 2 },
{ ahd_patch0_func, 150, 1, 1 },
{ ahd_patch2_func, 153, 1, 2 },
{ ahd_patch0_func, 154, 1, 1 },
{ ahd_patch5_func, 156, 2, 1 },
{ ahd_patch3_func, 164, 16, 2 },
{ ahd_patch0_func, 180, 1, 1 },
{ ahd_patch6_func, 200, 2, 1 },
{ ahd_patch5_func, 204, 2, 1 },
{ ahd_patch1_func, 218, 1, 2 },
{ ahd_patch0_func, 219, 1, 1 },
{ ahd_patch1_func, 222, 1, 2 },
{ ahd_patch0_func, 223, 1, 1 },
{ ahd_patch2_func, 226, 1, 2 },
{ ahd_patch0_func, 227, 1, 1 },
{ ahd_patch1_func, 282, 1, 2 },
{ ahd_patch0_func, 283, 1, 1 },
{ ahd_patch2_func, 291, 1, 2 },
{ ahd_patch0_func, 292, 1, 1 },
{ ahd_patch2_func, 295, 1, 2 },
{ ahd_patch0_func, 296, 1, 1 },
{ ahd_patch1_func, 303, 1, 2 },
{ ahd_patch0_func, 304, 1, 1 },
{ ahd_patch7_func, 323, 1, 1 },
{ ahd_patch7_func, 326, 1, 1 },
{ ahd_patch7_func, 328, 1, 1 },
{ ahd_patch7_func, 340, 1, 1 },
{ ahd_patch1_func, 350, 1, 2 },
{ ahd_patch0_func, 351, 1, 1 },
{ ahd_patch1_func, 353, 1, 2 },
{ ahd_patch0_func, 354, 1, 1 },
{ ahd_patch1_func, 362, 1, 2 },
{ ahd_patch0_func, 363, 1, 1 },
{ ahd_patch2_func, 374, 1, 2 },
{ ahd_patch0_func, 375, 1, 1 },
{ ahd_patch8_func, 377, 1, 1 },
{ ahd_patch9_func, 404, 1, 1 },
{ ahd_patch1_func, 411, 1, 2 },
{ ahd_patch0_func, 412, 1, 1 },
{ ahd_patch2_func, 424, 1, 2 },
{ ahd_patch0_func, 425, 1, 1 },
{ ahd_patch10_func, 453, 1, 1 },
{ ahd_patch11_func, 462, 1, 2 },
{ ahd_patch0_func, 463, 1, 1 },
{ ahd_patch12_func, 468, 1, 1 },
{ ahd_patch11_func, 469, 1, 1 },
{ ahd_patch13_func, 482, 1, 2 },
{ ahd_patch0_func, 483, 1, 1 },
{ ahd_patch1_func, 505, 1, 2 },
{ ahd_patch0_func, 506, 1, 1 },
{ ahd_patch1_func, 509, 1, 2 },
{ ahd_patch2_func, 152, 6, 1 },
{ ahd_patch1_func, 158, 2, 1 },
{ ahd_patch3_func, 160, 1, 1 },
{ ahd_patch2_func, 169, 1, 2 },
{ ahd_patch0_func, 170, 1, 1 },
{ ahd_patch4_func, 171, 2, 2 },
{ ahd_patch0_func, 173, 6, 3 },
{ ahd_patch2_func, 176, 1, 2 },
{ ahd_patch0_func, 177, 1, 1 },
{ ahd_patch2_func, 180, 1, 2 },
{ ahd_patch0_func, 181, 1, 1 },
{ ahd_patch5_func, 183, 2, 1 },
{ ahd_patch3_func, 191, 16, 2 },
{ ahd_patch0_func, 207, 1, 1 },
{ ahd_patch6_func, 227, 2, 1 },
{ ahd_patch5_func, 231, 2, 1 },
{ ahd_patch1_func, 245, 1, 2 },
{ ahd_patch0_func, 246, 1, 1 },
{ ahd_patch1_func, 249, 1, 2 },
{ ahd_patch0_func, 250, 1, 1 },
{ ahd_patch2_func, 253, 1, 2 },
{ ahd_patch0_func, 254, 1, 1 },
{ ahd_patch1_func, 309, 1, 2 },
{ ahd_patch0_func, 310, 1, 1 },
{ ahd_patch2_func, 318, 1, 2 },
{ ahd_patch0_func, 319, 1, 1 },
{ ahd_patch2_func, 322, 1, 2 },
{ ahd_patch0_func, 323, 1, 1 },
{ ahd_patch1_func, 330, 1, 2 },
{ ahd_patch0_func, 331, 1, 1 },
{ ahd_patch7_func, 350, 1, 1 },
{ ahd_patch7_func, 353, 1, 1 },
{ ahd_patch7_func, 355, 1, 1 },
{ ahd_patch7_func, 367, 1, 1 },
{ ahd_patch1_func, 377, 1, 2 },
{ ahd_patch0_func, 378, 1, 1 },
{ ahd_patch1_func, 380, 1, 2 },
{ ahd_patch0_func, 381, 1, 1 },
{ ahd_patch1_func, 389, 1, 2 },
{ ahd_patch0_func, 390, 1, 1 },
{ ahd_patch2_func, 401, 1, 2 },
{ ahd_patch0_func, 402, 1, 1 },
{ ahd_patch8_func, 404, 1, 1 },
{ ahd_patch9_func, 431, 1, 1 },
{ ahd_patch1_func, 438, 1, 2 },
{ ahd_patch0_func, 439, 1, 1 },
{ ahd_patch2_func, 451, 1, 2 },
{ ahd_patch0_func, 452, 1, 1 },
{ ahd_patch10_func, 480, 1, 1 },
{ ahd_patch11_func, 489, 1, 2 },
{ ahd_patch0_func, 490, 1, 1 },
{ ahd_patch12_func, 495, 1, 1 },
{ ahd_patch11_func, 496, 1, 1 },
{ ahd_patch13_func, 509, 1, 2 },
{ ahd_patch0_func, 510, 1, 1 },
{ ahd_patch2_func, 515, 1, 2 },
{ ahd_patch0_func, 516, 1, 1 },
{ ahd_patch2_func, 520, 1, 2 },
{ ahd_patch0_func, 521, 1, 1 },
{ ahd_patch1_func, 522, 1, 2 },
{ ahd_patch0_func, 523, 1, 1 },
{ ahd_patch2_func, 534, 1, 2 },
{ ahd_patch0_func, 535, 1, 1 },
{ ahd_patch14_func, 539, 1, 1 },
{ ahd_patch15_func, 544, 1, 1 },
{ ahd_patch16_func, 545, 2, 1 },
{ ahd_patch15_func, 549, 1, 2 },
{ ahd_patch1_func, 532, 1, 2 },
{ ahd_patch0_func, 533, 1, 1 },
{ ahd_patch1_func, 536, 1, 2 },
{ ahd_patch0_func, 537, 1, 1 },
{ ahd_patch2_func, 542, 1, 2 },
{ ahd_patch0_func, 543, 1, 1 },
{ ahd_patch2_func, 547, 1, 2 },
{ ahd_patch0_func, 548, 1, 1 },
{ ahd_patch1_func, 549, 1, 2 },
{ ahd_patch0_func, 550, 1, 1 },
{ ahd_patch2_func, 557, 1, 2 },
{ ahd_patch0_func, 558, 1, 1 },
{ ahd_patch1_func, 576, 1, 2 },
{ ahd_patch2_func, 561, 1, 2 },
{ ahd_patch0_func, 562, 1, 1 },
{ ahd_patch14_func, 566, 1, 1 },
{ ahd_patch15_func, 571, 1, 1 },
{ ahd_patch16_func, 572, 2, 1 },
{ ahd_patch15_func, 576, 1, 2 },
{ ahd_patch0_func, 577, 1, 1 },
{ ahd_patch1_func, 591, 1, 2 },
{ ahd_patch0_func, 592, 1, 1 },
{ ahd_patch14_func, 616, 1, 1 },
{ ahd_patch14_func, 632, 1, 1 },
{ ahd_patch2_func, 644, 1, 2 },
{ ahd_patch0_func, 645, 1, 1 },
{ ahd_patch1_func, 662, 1, 2 },
{ ahd_patch0_func, 663, 1, 1 },
{ ahd_patch14_func, 668, 1, 1 },
{ ahd_patch1_func, 688, 1, 2 },
{ ahd_patch0_func, 689, 1, 1 },
{ ahd_patch1_func, 691, 1, 2 },
{ ahd_patch0_func, 692, 1, 1 },
{ ahd_patch1_func, 694, 1, 2 },
{ ahd_patch0_func, 695, 1, 1 },
{ ahd_patch17_func, 697, 1, 2 },
{ ahd_patch0_func, 698, 2, 1 },
{ ahd_patch18_func, 701, 4, 2 },
{ ahd_patch0_func, 705, 1, 1 },
{ ahd_patch18_func, 711, 11, 1 }
{ ahd_patch2_func, 584, 1, 2 },
{ ahd_patch0_func, 585, 1, 1 },
{ ahd_patch2_func, 600, 1, 2 },
{ ahd_patch0_func, 601, 1, 1 },
{ ahd_patch1_func, 607, 1, 2 },
{ ahd_patch0_func, 608, 1, 1 },
{ ahd_patch1_func, 622, 1, 2 },
{ ahd_patch0_func, 623, 1, 1 },
{ ahd_patch14_func, 647, 1, 1 },
{ ahd_patch14_func, 663, 1, 1 },
{ ahd_patch2_func, 675, 1, 2 },
{ ahd_patch0_func, 676, 1, 1 },
{ ahd_patch1_func, 693, 1, 2 },
{ ahd_patch0_func, 694, 1, 1 },
{ ahd_patch14_func, 699, 1, 1 },
{ ahd_patch1_func, 719, 1, 2 },
{ ahd_patch0_func, 720, 1, 1 },
{ ahd_patch1_func, 722, 1, 2 },
{ ahd_patch0_func, 723, 1, 1 },
{ ahd_patch1_func, 725, 1, 2 },
{ ahd_patch0_func, 726, 1, 1 },
{ ahd_patch17_func, 728, 1, 2 },
{ ahd_patch0_func, 729, 2, 1 },
{ ahd_patch18_func, 732, 4, 2 },
{ ahd_patch0_func, 736, 1, 1 },
{ ahd_patch18_func, 742, 11, 1 }
};
static struct cs {
...
...
@@ -1017,17 +1050,17 @@ static struct cs {
{ 13, 14 },
{ 24, 32 },
{ 33, 46 },
{ 5
6, 59
},
{
68, 90
},
{
91, 119
},
{ 1
21, 125
},
{ 1
33, 141
},
{ 1
64, 197
},
{ 6
16, 632
},
{ 6
32, 650
},
{ 6
55, 661
},
{ 6
68, 673
},
{
673, 679
}
{ 5
9, 62
},
{
89, 114
},
{
115, 146
},
{ 1
48, 152
},
{ 1
60, 168
},
{ 1
91, 224
},
{ 6
47, 663
},
{ 6
63, 681
},
{ 6
86, 692
},
{ 6
99, 704
},
{
704, 710
}
};
static const int num_critical_sections = sizeof(critical_sections)
...
...
drivers/scsi/aic7xxx/aic7xxx_core.c
View file @
d8433379
...
...
@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#10
3
$
* $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#10
4
$
*
* $FreeBSD$
*/
...
...
@@ -1848,7 +1848,6 @@ ahc_update_neg_request(struct ahc_softc *ahc, struct ahc_devinfo *devinfo,
tinfo
->
curr
.
period
=
AHC_PERIOD_UNKNOWN
;
tinfo
->
curr
.
width
=
AHC_WIDTH_UNKNOWN
;
tinfo
->
curr
.
offset
=
AHC_OFFSET_UNKNOWN
;
tinfo
->
curr
.
ppr_options
=
AHC_OFFSET_UNKNOWN
;
}
if
(
tinfo
->
curr
.
period
!=
tinfo
->
goal
.
period
||
tinfo
->
curr
.
width
!=
tinfo
->
goal
.
width
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.c
View file @
d8433379
/*
* Adaptec AIC7xxx device driver for Linux.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#16
1
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#16
3
$
*
* Copyright (c) 1994 John Aycock
* The University of Calgary Department of Computer Science.
...
...
@@ -812,9 +812,10 @@ static int ahc_linux_release(struct Scsi_Host *);
static
int
ahc_linux_queue
(
Scsi_Cmnd
*
,
void
(
*
)(
Scsi_Cmnd
*
));
static
const
char
*
ahc_linux_info
(
struct
Scsi_Host
*
);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
static
int
ahc_linux_slave_alloc
(
Scsi_Device
*
);
static
int
ahc_linux_slave_configure
(
Scsi_Device
*
);
static
void
ahc_linux_slave_destroy
(
Scsi_Device
*
);
static
int
ah
d
_linux_biosparam
(
struct
scsi_device
*
,
static
int
ah
c
_linux_biosparam
(
struct
scsi_device
*
,
struct
block_device
*
,
sector_t
,
int
[]);
#else
...
...
@@ -874,15 +875,6 @@ ahc_linux_detect(Scsi_Host_Template *template)
template
->
proc_dir
=
&
proc_scsi_aic7xxx
;
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7)
/*
* We can only map 16MB per-SG
* so create a sector limit of
* "16MB" in 2K sectors.
*/
template
->
max_sectors
=
8192
;
#endif
/*
* Initialize our softc list lock prior to
* probing for any adapters.
...
...
@@ -1029,9 +1021,11 @@ ahc_linux_queue(Scsi_Cmnd * cmd, void (*scsi_done) (Scsi_Cmnd *))
static
int
ahc_linux_slave_alloc
(
Scsi_Device
*
device
)
{
/*
* Nothing to be done for now.
*/
struct
ahc_softc
*
ahc
;
ahc
=
*
((
struct
ahc_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Alloc %d
\n
"
,
ahc_name
(
ahc
),
device
->
id
);
return
(
0
);
}
...
...
@@ -1043,6 +1037,8 @@ ahc_linux_slave_configure(Scsi_Device *device)
u_long
flags
;
ahc
=
*
((
struct
ahc_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Configure %d
\n
"
,
ahc_name
(
ahc
),
device
->
id
);
ahc_midlayer_entrypoint_lock
(
ahc
,
&
flags
);
/*
* Since Linux has attached to the device, configure
...
...
@@ -1051,12 +1047,12 @@ ahc_linux_slave_configure(Scsi_Device *device)
*/
dev
=
ahc_linux_get_device
(
ahc
,
device
->
channel
,
device
->
id
,
device
->
lun
,
/*alloc*/
TRUE
);
/*alloc*/
TRUE
);
if
(
dev
!=
NULL
)
{
dev
->
flags
&=
~
AHC_DEV_UNCONFIGURED
;
dev
->
scsi_device
=
device
;
ahc_linux_device_queue_depth
(
ahc
,
dev
);
}
ahc_linux_device_queue_depth
(
ahc
,
dev
);
ahc_midlayer_entrypoint_unlock
(
ahc
,
&
flags
);
return
(
0
);
}
...
...
@@ -1069,12 +1065,26 @@ ahc_linux_slave_destroy(Scsi_Device *device)
u_long
flags
;
ahc
=
*
((
struct
ahc_softc
**
)
device
->
host
->
hostdata
);
if
(
bootverbose
)
printf
(
"%s: Slave Destroy %d
\n
"
,
ahc_name
(
ahc
),
device
->
id
);
ahc_midlayer_entrypoint_lock
(
ahc
,
&
flags
);
dev
=
ahc_linux_get_device
(
ahc
,
device
->
channel
,
device
->
id
,
device
->
lun
,
/*alloc*/
FALSE
);
if
(
dev
!=
NULL
)
/*
* Filter out "silly" deletions of real devices by only
* deleting devices that have had slave_configure()
* called on them. All other devices that have not
* been configured will automatically be deleted by
* the refcounting process.
*/
if
(
dev
!=
NULL
&&
(
dev
->
flags
&
AHC_DEV_SLAVE_CONFIGURED
)
!=
0
)
{
dev
->
flags
|=
AHC_DEV_UNCONFIGURED
;
if
(
TAILQ_EMPTY
(
&
dev
->
busyq
)
&&
dev
->
active
==
0
)
ahc_linux_free_device
(
ahc
,
dev
);
}
ahc_midlayer_entrypoint_unlock
(
ahc
,
&
flags
);
}
#else
...
...
@@ -1135,10 +1145,15 @@ static int
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
ahc_linux_biosparam
(
struct
scsi_device
*
sdev
,
struct
block_device
*
bdev
,
sector_t
capacity
,
int
geom
[])
{
uint8_t
*
bh
;
#else
ahc_linux_biosparam
(
Disk
*
disk
,
kdev_t
dev
,
int
geom
[])
#endif
{
struct
scsi_device
*
sdev
=
disk
->
device
;
u_long
capacity
=
disk
->
capacity
;
struct
buffer_head
*
bh
;
#endif
int
heads
;
int
sectors
;
int
cylinders
;
...
...
@@ -1146,23 +1161,9 @@ ahc_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
int
extended
;
struct
ahc_softc
*
ahc
;
u_int
channel
;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
uint8_t
*
bh
;
channel
=
sdev
->
channel
;
#else
u_long
capacity
;
struct
buffer_head
*
bh
;
capacity
=
disk
->
capacity
;
channel
=
disk
->
device
->
channel
;
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
ahc
=
*
((
struct
ahc_softc
**
)
sdev
->
host
->
hostdata
);
#else
ahc
=
*
((
struct
ahc_softc
**
)
disk
->
device
->
host
->
hostdata
);
#endif
channel
=
sdev
->
channel
;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
bh
=
scsi_bios_ptable
(
bdev
);
...
...
@@ -1185,7 +1186,7 @@ ahc_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
}
heads
=
64
;
sectors
=
32
;
cylinders
=
capacity
/
(
heads
*
sectors
);
cylinders
=
aic_sector_div
(
capacity
,
heads
,
sectors
);
if
(
aic7xxx_extended
!=
0
)
extended
=
1
;
...
...
@@ -1196,7 +1197,7 @@ ahc_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
if
(
extended
&&
cylinders
>=
1024
)
{
heads
=
255
;
sectors
=
63
;
cylinders
=
capacity
/
(
heads
*
sectors
);
cylinders
=
aic_sector_div
(
capacity
,
heads
,
sectors
);
}
geom
[
0
]
=
heads
;
geom
[
1
]
=
sectors
;
...
...
@@ -1288,6 +1289,14 @@ Scsi_Host_Template aic7xxx_driver_template = {
.
sg_tablesize
=
AHC_NSEG
,
.
cmd_per_lun
=
2
,
.
use_clustering
=
ENABLE_CLUSTERING
,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,7)
/*
* We can only map 16MB per-SG
* so create a sector limit of
* "16MB" in 2K sectors.
*/
.
max_sectors
=
8192
,
#endif
#if defined CONFIG_HIGHIO
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
/* Assume RedHat Distribution with its different HIGHIO conventions. */
...
...
@@ -1298,6 +1307,8 @@ Scsi_Host_Template aic7xxx_driver_template = {
#endif
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
.
name
=
"aic7xxx"
,
.
slave_alloc
=
ahc_linux_slave_alloc
,
.
slave_configure
=
ahc_linux_slave_configure
,
.
slave_destroy
=
ahc_linux_slave_destroy
,
#else
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.h
View file @
d8433379
...
...
@@ -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#1
09
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#1
11
$
*
*/
#ifndef _AIC7XXX_LINUX_H_
...
...
@@ -300,7 +300,7 @@ ahc_scb_timer_reset(struct scb *scb, u_int usec)
#include <linux/smp.h>
#endif
#define AIC7XXX_DRIVER_VERSION "6.2.2
3
"
#define AIC7XXX_DRIVER_VERSION "6.2.2
4
"
/**************************** Front End Queues ********************************/
/*
...
...
@@ -347,7 +347,8 @@ typedef enum {
AHC_DEV_ON_RUN_LIST
=
0x08
,
/* Queued to be run later */
AHC_DEV_Q_BASIC
=
0x10
,
/* Allow basic device queuing */
AHC_DEV_Q_TAGGED
=
0x20
,
/* Allow full SCSI2 command queueing */
AHC_DEV_PERIODIC_OTAG
=
0x40
/* Send OTAG to prevent starvation */
AHC_DEV_PERIODIC_OTAG
=
0x40
,
/* Send OTAG to prevent starvation */
AHC_DEV_SLAVE_CONFIGURED
=
0x80
/* slave_configure() has been called */
}
ahc_linux_dev_flags
;
struct
ahc_linux_target
;
...
...
drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
View file @
d8433379
...
...
@@ -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/aicasm/aicasm_gram.y#2
7
$
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_gram.y#2
8
$
*
* $FreeBSD$
*/
...
...
@@ -707,7 +707,7 @@ expression:
;
constant:
T_CONST T_SYMBOL
numerical_value
T_CONST T_SYMBOL
expression
{
if ($2->type != UNINITIALIZED) {
stop("Re-definition of symbol as a constant",
...
...
@@ -716,7 +716,7 @@ constant:
}
$2->type = CONST;
initialize_symbol($2);
$2->info.cinfo->value = $3;
$2->info.cinfo->value = $3
.value
;
}
| T_CONST T_SYMBOL T_DOWNLOAD
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment