Commit bebe7cd8 authored by Justin T. Gibbs's avatar Justin T. Gibbs

Aic79xx Driver Update

 o Perform a few firmware optimizations
 o Correct the packetized status handler so that
   it can handle CRC errors during status data packets.
parent 03b84f47
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#88 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.h#89 $
* *
* $FreeBSD$ * $FreeBSD$
*/ */
...@@ -494,13 +494,11 @@ struct hardware_scb { ...@@ -494,13 +494,11 @@ struct hardware_scb {
* transfer. * transfer.
*/ */
#define SG_PTR_MASK 0xFFFFFFF8 #define SG_PTR_MASK 0xFFFFFFF8
/*16*/ uint16_t tag; /*16*/ uint64_t dataptr;
/*18*/ uint8_t cdb_len; /*24*/ uint32_t datacnt; /* Byte 3 is spare. */
/*19*/ uint8_t task_management; /*28*/ uint32_t sgptr;
/*20*/ uint32_t next_hscb_busaddr; /*32*/ uint32_t hscb_busaddr;
/*24*/ uint64_t dataptr; /*36*/ uint32_t next_hscb_busaddr;
/*32*/ uint32_t datacnt; /* Byte 3 is spare. */
/*36*/ uint32_t sgptr;
/*40*/ uint8_t control; /* See SCB_CONTROL in aic79xx.reg for details */ /*40*/ uint8_t control; /* See SCB_CONTROL in aic79xx.reg for details */
/*41*/ uint8_t scsiid; /* /*41*/ uint8_t scsiid; /*
* Selection out Id * Selection out Id
...@@ -508,8 +506,10 @@ struct hardware_scb { ...@@ -508,8 +506,10 @@ struct hardware_scb {
*/ */
/*42*/ uint8_t lun; /*42*/ uint8_t lun;
/*43*/ uint8_t task_attribute; /*43*/ uint8_t task_attribute;
/*44*/ uint32_t hscb_busaddr; /*44*/ uint8_t cdb_len;
/******* Long lun field only downloaded for full 8 byte lun support *******/ /*45*/ uint8_t task_management;
/*46*/ uint16_t tag; /* Reused by Sequencer. */
/********** Long lun field only downloaded for full 8 byte lun support ********/
/*48*/ uint8_t pkt_long_lun[8]; /*48*/ uint8_t pkt_long_lun[8];
/******* Fields below are not Downloaded (Sequencer may use for scratch) ******/ /******* Fields below are not Downloaded (Sequencer may use for scratch) ******/
/*56*/ uint8_t spare[8]; /*56*/ uint8_t spare[8];
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
* *
* $FreeBSD$ * $FreeBSD$
*/ */
VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $" VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $"
/* /*
* This file is processed by the aic7xxx_asm utility for use in assembling * This file is processed by the aic7xxx_asm utility for use in assembling
...@@ -3484,9 +3484,6 @@ scratch_ram { ...@@ -3484,9 +3484,6 @@ scratch_ram {
LONGJMP_ADDR { LONGJMP_ADDR {
size 2 size 2
} }
LONGJMP_SCB {
size 2
}
ACCUM_SAVE { ACCUM_SAVE {
size 1 size 1
} }
...@@ -3799,23 +3796,6 @@ scb { ...@@ -3799,23 +3796,6 @@ scb {
size 4 size 4
alias SCB_NEXT_COMPLETE alias SCB_NEXT_COMPLETE
} }
SCB_TAG {
size 2
}
SCB_CDB_LEN {
size 1
field SCB_CDB_LEN_PTR 0x80 /* CDB in host memory */
}
SCB_TASK_MANAGEMENT {
size 1
}
SCB_NEXT {
alias SCB_NEXT_SCB_BUSADDR
size 2
}
SCB_NEXT2 {
size 2
}
SCB_DATAPTR { SCB_DATAPTR {
size 8 size 8
} }
...@@ -3834,6 +3814,16 @@ scb { ...@@ -3834,6 +3814,16 @@ scb {
field SG_FULL_RESID 0x02 /* In the first byte */ field SG_FULL_RESID 0x02 /* In the first byte */
field SG_LIST_NULL 0x01 /* In the first byte */ field SG_LIST_NULL 0x01 /* In the first byte */
} }
SCB_BUSADDR {
size 4
}
SCB_NEXT {
alias SCB_NEXT_SCB_BUSADDR
size 2
}
SCB_NEXT2 {
size 2
}
SCB_CONTROL { SCB_CONTROL {
size 1 size 1
field TARGET_SCB 0x80 field TARGET_SCB 0x80
...@@ -3856,8 +3846,16 @@ scb { ...@@ -3856,8 +3846,16 @@ scb {
SCB_TASK_ATTRIBUTE { SCB_TASK_ATTRIBUTE {
size 1 size 1
} }
SCB_BUSADDR { SCB_CDB_LEN {
size 4 size 1
field SCB_CDB_LEN_PTR 0x80 /* CDB in host memory */
}
SCB_TASK_MANAGEMENT {
size 1
}
SCB_TAG {
alias SCB_FIFO_USE_COUNT
size 2
} }
SCB_SPARE { SCB_SPARE {
size 8 size 8
......
This diff is collapsed.
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES. * POSSIBILITY OF SUCH DAMAGES.
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#183 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.c#184 $
* *
* $FreeBSD$ * $FreeBSD$
*/ */
...@@ -604,7 +604,16 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat) ...@@ -604,7 +604,16 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
break; break;
case STATUS_OVERRUN: case STATUS_OVERRUN:
{ {
printf("%s: Status Overrun", ahd_name(ahd)); struct scb *scb;
u_int scbid;
scbid = ahd_get_scbptr(ahd);
scb = ahd_lookup_scb(ahd, scbid);
if (scb != NULL)
ahd_print_path(ahd, scb);
else
printf("%s: ", ahd_name(ahd));
printf("SCB %d Packetized Status Overrun", scbid);
ahd_dump_card_state(ahd); ahd_dump_card_state(ahd);
ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE); ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
break; break;
...@@ -6056,7 +6065,6 @@ ahd_chip_init(struct ahd_softc *ahd) ...@@ -6056,7 +6065,6 @@ ahd_chip_init(struct ahd_softc *ahd)
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i); ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i);
ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR); ahd_outb(ahd, LONGJMP_ADDR + 1, INVALID_ADDR);
ahd_outw(ahd, LONGJMP_SCB, SCB_LIST_NULL);
ahd_outb(ahd, SG_STATE, 0); ahd_outb(ahd, SG_STATE, 0);
ahd_outb(ahd, CLRSEQINTSRC, 0xFF); ahd_outb(ahd, CLRSEQINTSRC, 0xFF);
ahd_outb(ahd, SEQIMODE, ahd_outb(ahd, SEQIMODE,
...@@ -8611,11 +8619,11 @@ ahd_dump_card_state(struct ahd_softc *ahd) ...@@ -8611,11 +8619,11 @@ ahd_dump_card_state(struct ahd_softc *ahd)
LIST_FOREACH(scb, &ahd->pending_scbs, pending_links) { LIST_FOREACH(scb, &ahd->pending_scbs, pending_links) {
if (i++ > AHD_SCB_MAX) if (i++ > AHD_SCB_MAX)
break; break;
cur_col = printf("\n%3d ", SCB_GET_TAG(scb)); cur_col = printf("\n%3d FIFO_USE[0x%x] ", SCB_GET_TAG(scb),
ahd_inb(ahd, SCB_FIFO_USE_COUNT));
ahd_set_scbptr(ahd, SCB_GET_TAG(scb)); ahd_set_scbptr(ahd, SCB_GET_TAG(scb));
ahd_scb_control_print(ahd_inb(ahd, SCB_CONTROL), &cur_col, 60); ahd_scb_control_print(ahd_inb(ahd, SCB_CONTROL), &cur_col, 60);
ahd_scb_scsiid_print(ahd_inb(ahd, SCB_SCSIID), &cur_col, 60); 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("\nTotal %d\n", i); printf("\nTotal %d\n", i);
...@@ -8678,12 +8686,10 @@ ahd_dump_card_state(struct ahd_softc *ahd) ...@@ -8678,12 +8686,10 @@ ahd_dump_card_state(struct ahd_softc *ahd)
ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i); ahd_set_modes(ahd, AHD_MODE_DFF0 + i, AHD_MODE_DFF0 + i);
fifo_scbptr = ahd_get_scbptr(ahd); fifo_scbptr = ahd_get_scbptr(ahd);
printf("\n%s: FIFO%d %s, LONGJMP == 0x%x, " printf("\n%s: FIFO%d %s, LONGJMP == 0x%x, SCB 0x%x\n",
"SCB 0x%x, LJSCB 0x%x\n",
ahd_name(ahd), i, ahd_name(ahd), i,
(dffstat & (FIFO0FREE << i)) ? "Free" : "Active", (dffstat & (FIFO0FREE << i)) ? "Free" : "Active",
ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr, ahd_inw(ahd, LONGJMP_ADDR), fifo_scbptr);
ahd_inw(ahd, LONGJMP_SCB));
cur_col = 0; cur_col = 0;
ahd_seqimode_print(ahd_inb(ahd, SEQIMODE), &cur_col, 50); ahd_seqimode_print(ahd_inb(ahd, SEQIMODE), &cur_col, 50);
ahd_seqintsrc_print(ahd_inb(ahd, SEQINTSRC), &cur_col, 50); ahd_seqintsrc_print(ahd_inb(ahd, SEQINTSRC), &cur_col, 50);
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated * DO NOT EDIT - This file is automatically generated
* from the following source files: * from the following source files:
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $
*/ */
typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef int (ahd_reg_print_t)(u_int, u_int *, u_int);
typedef struct ahd_reg_parse_entry { typedef struct ahd_reg_parse_entry {
...@@ -1923,18 +1923,11 @@ ahd_reg_print_t ahd_longjmp_addr_print; ...@@ -1923,18 +1923,11 @@ ahd_reg_print_t ahd_longjmp_addr_print;
ahd_print_register(NULL, 0, "LONGJMP_ADDR", 0xf8, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "LONGJMP_ADDR", 0xf8, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_longjmp_scb_print;
#else
#define ahd_longjmp_scb_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "LONGJMP_SCB", 0xfa, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_accum_save_print; ahd_reg_print_t ahd_accum_save_print;
#else #else
#define ahd_accum_save_print(regvalue, cur_col, wrap) \ #define ahd_accum_save_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "ACCUM_SAVE", 0xfc, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "ACCUM_SAVE", 0xfa, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -2246,59 +2239,45 @@ ahd_reg_print_t ahd_scb_sense_busaddr_print; ...@@ -2246,59 +2239,45 @@ ahd_reg_print_t ahd_scb_sense_busaddr_print;
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_tag_print; ahd_reg_print_t ahd_scb_dataptr_print;
#else
#define ahd_scb_tag_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TAG", 0x190, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_cdb_len_print;
#else
#define ahd_scb_cdb_len_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_CDB_LEN", 0x192, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_task_management_print;
#else #else
#define ahd_scb_task_management_print(regvalue, cur_col, wrap) \ #define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT", 0x193, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x190, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_next_print; ahd_reg_print_t ahd_scb_datacnt_print;
#else #else
#define ahd_scb_next_print(regvalue, cur_col, wrap) \ #define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_NEXT", 0x194, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_DATACNT", 0x198, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_next2_print; ahd_reg_print_t ahd_scb_sgptr_print;
#else #else
#define ahd_scb_next2_print(regvalue, cur_col, wrap) \ #define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_NEXT2", 0x196, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_SGPTR", 0x19c, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_dataptr_print; ahd_reg_print_t ahd_scb_busaddr_print;
#else #else
#define ahd_scb_dataptr_print(regvalue, cur_col, wrap) \ #define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_DATAPTR", 0x198, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1a0, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_datacnt_print; ahd_reg_print_t ahd_scb_next_print;
#else #else
#define ahd_scb_datacnt_print(regvalue, cur_col, wrap) \ #define ahd_scb_next_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_DATACNT", 0x1a0, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_NEXT", 0x1a4, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_sgptr_print; ahd_reg_print_t ahd_scb_next2_print;
#else #else
#define ahd_scb_sgptr_print(regvalue, cur_col, wrap) \ #define ahd_scb_next2_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_SGPTR", 0x1a4, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_NEXT2", 0x1a6, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -2330,10 +2309,24 @@ ahd_reg_print_t ahd_scb_task_attribute_print; ...@@ -2330,10 +2309,24 @@ ahd_reg_print_t ahd_scb_task_attribute_print;
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_busaddr_print; ahd_reg_print_t ahd_scb_cdb_len_print;
#else #else
#define ahd_scb_busaddr_print(regvalue, cur_col, wrap) \ #define ahd_scb_cdb_len_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_BUSADDR", 0x1ac, regvalue, cur_col, wrap) ahd_print_register(NULL, 0, "SCB_CDB_LEN", 0x1ac, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_task_management_print;
#else
#define ahd_scb_task_management_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT", 0x1ad, regvalue, cur_col, wrap)
#endif
#if AIC_DEBUG_REGISTERS
ahd_reg_print_t ahd_scb_tag_print;
#else
#define ahd_scb_tag_print(regvalue, cur_col, wrap) \
ahd_print_register(NULL, 0, "SCB_TAG", 0x1ae, regvalue, cur_col, wrap)
#endif #endif
#if AIC_DEBUG_REGISTERS #if AIC_DEBUG_REGISTERS
...@@ -3508,9 +3501,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3508,9 +3501,7 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define LONGJMP_ADDR 0xf8 #define LONGJMP_ADDR 0xf8
#define LONGJMP_SCB 0xfa #define ACCUM_SAVE 0xfa
#define ACCUM_SAVE 0xfc
#define WAITING_SCB_TAILS 0x100 #define WAITING_SCB_TAILS 0x100
...@@ -3656,29 +3647,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3656,29 +3647,24 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SCB_SENSE_BUSADDR 0x18c #define SCB_SENSE_BUSADDR 0x18c
#define SCB_NEXT_COMPLETE 0x18c #define SCB_NEXT_COMPLETE 0x18c
#define SCB_TAG 0x190 #define SCB_DATAPTR 0x190
#define SCB_CDB_LEN 0x192
#define SCB_CDB_LEN_PTR 0x80
#define SCB_TASK_MANAGEMENT 0x193
#define SCB_NEXT 0x194
#define SCB_NEXT_SCB_BUSADDR 0x194
#define SCB_NEXT2 0x196 #define SCB_DATACNT 0x198
#define SCB_DATAPTR 0x198
#define SCB_DATACNT 0x1a0
#define SG_LAST_SEG 0x80 #define SG_LAST_SEG 0x80
#define SG_HIGH_ADDR_BITS 0x7f #define SG_HIGH_ADDR_BITS 0x7f
#define SCB_SGPTR 0x1a4 #define SCB_SGPTR 0x19c
#define SG_STATUS_VALID 0x04 #define SG_STATUS_VALID 0x04
#define SG_FULL_RESID 0x02 #define SG_FULL_RESID 0x02
#define SG_LIST_NULL 0x01 #define SG_LIST_NULL 0x01
#define SCB_BUSADDR 0x1a0
#define SCB_NEXT 0x1a4
#define SCB_NEXT_SCB_BUSADDR 0x1a4
#define SCB_NEXT2 0x1a6
#define SCB_CONTROL 0x1a8 #define SCB_CONTROL 0x1a8
#define TARGET_SCB 0x80 #define TARGET_SCB 0x80
#define DISCENB 0x40 #define DISCENB 0x40
...@@ -3697,7 +3683,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3697,7 +3683,13 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
#define SCB_TASK_ATTRIBUTE 0x1ab #define SCB_TASK_ATTRIBUTE 0x1ab
#define SCB_BUSADDR 0x1ac #define SCB_CDB_LEN 0x1ac
#define SCB_CDB_LEN_PTR 0x80
#define SCB_TASK_MANAGEMENT 0x1ad
#define SCB_TAG 0x1ae
#define SCB_FIFO_USE_COUNT 0x1ae
#define SCB_SPARE 0x1b0 #define SCB_SPARE 0x1b0
#define SCB_PKT_LUN 0x1b0 #define SCB_PKT_LUN 0x1b0
...@@ -3775,5 +3767,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print; ...@@ -3775,5 +3767,5 @@ ahd_reg_print_t ahd_scb_disconnected_lists_print;
/* Exported Labels */ /* Exported Labels */
#define LABEL_seq_isr 0x26d #define LABEL_seq_isr 0x264
#define LABEL_timer_isr 0x269 #define LABEL_timer_isr 0x260
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
* DO NOT EDIT - This file is automatically generated * DO NOT EDIT - This file is automatically generated
* from the following source files: * from the following source files:
* *
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#89 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#90 $
* $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#65 $ * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#66 $
*/ */
#include "aic79xx_osm.h" #include "aic79xx_osm.h"
...@@ -3097,18 +3097,11 @@ ahd_longjmp_addr_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3097,18 +3097,11 @@ ahd_longjmp_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
0xf8, regvalue, cur_col, wrap)); 0xf8, regvalue, cur_col, wrap));
} }
int
ahd_longjmp_scb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "LONGJMP_SCB",
0xfa, regvalue, cur_col, wrap));
}
int int
ahd_accum_save_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_accum_save_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "ACCUM_SAVE", return (ahd_print_register(NULL, 0, "ACCUM_SAVE",
0xfc, regvalue, cur_col, wrap)); 0xfa, regvalue, cur_col, wrap));
} }
int int
...@@ -3491,50 +3484,11 @@ ahd_scb_sense_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3491,50 +3484,11 @@ ahd_scb_sense_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x18c, regvalue, cur_col, wrap)); 0x18c, regvalue, cur_col, wrap));
} }
int
ahd_scb_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TAG",
0x190, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t SCB_CDB_LEN_parse_table[] = {
{ "SCB_CDB_LEN_PTR", 0x80, 0x80 }
};
int
ahd_scb_cdb_len_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(SCB_CDB_LEN_parse_table, 1, "SCB_CDB_LEN",
0x192, regvalue, cur_col, wrap));
}
int
ahd_scb_task_management_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT",
0x193, regvalue, cur_col, wrap));
}
int
ahd_scb_next_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT",
0x194, regvalue, cur_col, wrap));
}
int
ahd_scb_next2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT2",
0x196, regvalue, cur_col, wrap));
}
int int
ahd_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "SCB_DATAPTR", return (ahd_print_register(NULL, 0, "SCB_DATAPTR",
0x198, regvalue, cur_col, wrap)); 0x190, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_DATACNT_parse_table[] = { static ahd_reg_parse_entry_t SCB_DATACNT_parse_table[] = {
...@@ -3546,7 +3500,7 @@ int ...@@ -3546,7 +3500,7 @@ int
ahd_scb_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(SCB_DATACNT_parse_table, 2, "SCB_DATACNT", return (ahd_print_register(SCB_DATACNT_parse_table, 2, "SCB_DATACNT",
0x1a0, regvalue, cur_col, wrap)); 0x198, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_SGPTR_parse_table[] = { static ahd_reg_parse_entry_t SCB_SGPTR_parse_table[] = {
...@@ -3559,9 +3513,30 @@ int ...@@ -3559,9 +3513,30 @@ int
ahd_scb_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(SCB_SGPTR_parse_table, 3, "SCB_SGPTR", return (ahd_print_register(SCB_SGPTR_parse_table, 3, "SCB_SGPTR",
0x19c, regvalue, cur_col, wrap));
}
int
ahd_scb_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_BUSADDR",
0x1a0, regvalue, cur_col, wrap));
}
int
ahd_scb_next_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT",
0x1a4, regvalue, cur_col, wrap)); 0x1a4, regvalue, cur_col, wrap));
} }
int
ahd_scb_next2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_NEXT2",
0x1a6, regvalue, cur_col, wrap));
}
static ahd_reg_parse_entry_t SCB_CONTROL_parse_table[] = { static ahd_reg_parse_entry_t SCB_CONTROL_parse_table[] = {
{ "SCB_TAG_TYPE", 0x03, 0x03 }, { "SCB_TAG_TYPE", 0x03, 0x03 },
{ "DISCONNECTED", 0x04, 0x04 }, { "DISCONNECTED", 0x04, 0x04 },
...@@ -3609,13 +3584,31 @@ ahd_scb_task_attribute_print(u_int regvalue, u_int *cur_col, u_int wrap) ...@@ -3609,13 +3584,31 @@ ahd_scb_task_attribute_print(u_int regvalue, u_int *cur_col, u_int wrap)
0x1ab, regvalue, cur_col, wrap)); 0x1ab, regvalue, cur_col, wrap));
} }
static ahd_reg_parse_entry_t SCB_CDB_LEN_parse_table[] = {
{ "SCB_CDB_LEN_PTR", 0x80, 0x80 }
};
int int
ahd_scb_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_cdb_len_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
return (ahd_print_register(NULL, 0, "SCB_BUSADDR", return (ahd_print_register(SCB_CDB_LEN_parse_table, 1, "SCB_CDB_LEN",
0x1ac, regvalue, cur_col, wrap)); 0x1ac, regvalue, cur_col, wrap));
} }
int
ahd_scb_task_management_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TASK_MANAGEMENT",
0x1ad, regvalue, cur_col, wrap));
}
int
ahd_scb_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
return (ahd_print_register(NULL, 0, "SCB_TAG",
0x1ae, regvalue, cur_col, wrap));
}
int int
ahd_scb_spare_print(u_int regvalue, u_int *cur_col, u_int wrap) ahd_scb_spare_print(u_int regvalue, u_int *cur_col, u_int wrap)
{ {
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment