/*
 * DO NOT EDIT - This file is automatically generated
 *		 from the following source files:
 *
 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#94 $
 * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#70 $
 */

#include "aic79xx_osm.h"

static ahd_reg_parse_entry_t MODE_PTR_parse_table[] = {
	{ "SRC_MODE",		0x07, 0x07 },
	{ "DST_MODE",		0x70, 0x70 }
};

int
ahd_mode_ptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(MODE_PTR_parse_table, 2, "MODE_PTR",
	    0x00, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t INTSTAT_parse_table[] = {
	{ "SPLTINT",		0x01, 0x01 },
	{ "CMDCMPLT",		0x02, 0x02 },
	{ "SEQINT",		0x04, 0x04 },
	{ "SCSIINT",		0x08, 0x08 },
	{ "PCIINT",		0x10, 0x10 },
	{ "SWTMINT",		0x20, 0x20 },
	{ "BRKADRINT",		0x40, 0x40 },
	{ "HWERRINT",		0x80, 0x80 },
	{ "INT_PEND",		0xff, 0xff }
};

int
ahd_intstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(INTSTAT_parse_table, 9, "INTSTAT",
	    0x01, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQINTCODE_parse_table[] = {
	{ "NO_SEQINT",		0x00, 0xff },
	{ "BAD_PHASE",		0x01, 0xff },
	{ "SEND_REJECT",	0x02, 0xff },
	{ "PROTO_VIOLATION",	0x03, 0xff },
	{ "NO_MATCH",		0x04, 0xff },
	{ "IGN_WIDE_RES",	0x05, 0xff },
	{ "PDATA_REINIT",	0x06, 0xff },
	{ "HOST_MSG_LOOP",	0x07, 0xff },
	{ "BAD_STATUS",		0x08, 0xff },
	{ "DATA_OVERRUN",	0x09, 0xff },
	{ "MKMSG_FAILED",	0x0a, 0xff },
	{ "MISSED_BUSFREE",	0x0b, 0xff },
	{ "DUMP_CARD_STATE",	0x0c, 0xff },
	{ "ILLEGAL_PHASE",	0x0d, 0xff },
	{ "INVALID_SEQINT",	0x0e, 0xff },
	{ "CFG4ISTAT_INTR",	0x0f, 0xff },
	{ "STATUS_OVERRUN",	0x10, 0xff },
	{ "CFG4OVERRUN",	0x11, 0xff },
	{ "ENTERING_NONPACK",	0x12, 0xff },
	{ "TASKMGMT_FUNC_COMPLETE",0x13, 0xff },
	{ "TASKMGMT_CMD_CMPLT_OKAY",0x14, 0xff },
	{ "TRACEPOINT0",	0x15, 0xff },
	{ "TRACEPOINT1",	0x16, 0xff },
	{ "TRACEPOINT2",	0x17, 0xff },
	{ "TRACEPOINT3",	0x18, 0xff },
	{ "SAW_HWERR",		0x19, 0xff },
	{ "BAD_SCB_STATUS",	0x1a, 0xff }
};

int
ahd_seqintcode_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQINTCODE_parse_table, 27, "SEQINTCODE",
	    0x02, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRINT_parse_table[] = {
	{ "CLRSPLTINT",		0x01, 0x01 },
	{ "CLRCMDINT",		0x02, 0x02 },
	{ "CLRSEQINT",		0x04, 0x04 },
	{ "CLRSCSIINT",		0x08, 0x08 },
	{ "CLRPCIINT",		0x10, 0x10 },
	{ "CLRSWTMINT",		0x20, 0x20 },
	{ "CLRBRKADRINT",	0x40, 0x40 },
	{ "CLRHWERRINT",	0x80, 0x80 }
};

int
ahd_clrint_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRINT_parse_table, 8, "CLRINT",
	    0x03, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t ERROR_parse_table[] = {
	{ "DSCTMOUT",		0x02, 0x02 },
	{ "ILLOPCODE",		0x04, 0x04 },
	{ "SQPARERR",		0x08, 0x08 },
	{ "DPARERR",		0x10, 0x10 },
	{ "MPARERR",		0x20, 0x20 },
	{ "CIOACCESFAIL",	0x40, 0x40 },
	{ "CIOPARERR",		0x80, 0x80 }
};

int
ahd_error_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(ERROR_parse_table, 7, "ERROR",
	    0x04, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRERR_parse_table[] = {
	{ "CLRDSCTMOUT",	0x02, 0x02 },
	{ "CLRILLOPCODE",	0x04, 0x04 },
	{ "CLRSQPARERR",	0x08, 0x08 },
	{ "CLRDPARERR",		0x10, 0x10 },
	{ "CLRMPARERR",		0x20, 0x20 },
	{ "CLRCIOACCESFAIL",	0x40, 0x40 },
	{ "CLRCIOPARERR",	0x80, 0x80 }
};

int
ahd_clrerr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRERR_parse_table, 7, "CLRERR",
	    0x04, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t HCNTRL_parse_table[] = {
	{ "CHIPRST",		0x01, 0x01 },
	{ "CHIPRSTACK",		0x01, 0x01 },
	{ "INTEN",		0x02, 0x02 },
	{ "PAUSE",		0x04, 0x04 },
	{ "SWTIMER_START_B",	0x08, 0x08 },
	{ "SWINT",		0x10, 0x10 },
	{ "POWRDN",		0x40, 0x40 },
	{ "SEQ_RESET",		0x80, 0x80 }
};

int
ahd_hcntrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(HCNTRL_parse_table, 8, "HCNTRL",
	    0x05, regvalue, cur_col, wrap));
}

int
ahd_hnscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HNSCB_QOFF",
	    0x06, regvalue, cur_col, wrap));
}

int
ahd_hescb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HESCB_QOFF",
	    0x08, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t HS_MAILBOX_parse_table[] = {
	{ "ENINT_COALESCE",	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, 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 },
	{ "SEQ_SCSIINT",	0x04, 0x04 },
	{ "SEQ_SEQINT",		0x08, 0x08 },
	{ "SEQ_SWTMRTO",	0x10, 0x10 }
};

int
ahd_seqintstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQINTSTAT_parse_table, 5, "SEQINTSTAT",
	    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)
{
	return (ahd_print_register(NULL, 0, "SNSCB_QOFF",
	    0x10, regvalue, cur_col, wrap));
}

int
ahd_sescb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SESCB_QOFF",
	    0x12, regvalue, cur_col, wrap));
}

int
ahd_sdscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SDSCB_QOFF",
	    0x14, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t QOFF_CTLSTA_parse_table[] = {
	{ "SCB_QSIZE_4",	0x00, 0x0f },
	{ "SCB_QSIZE_8",	0x01, 0x0f },
	{ "SCB_QSIZE_16",	0x02, 0x0f },
	{ "SCB_QSIZE_32",	0x03, 0x0f },
	{ "SCB_QSIZE_64",	0x04, 0x0f },
	{ "SCB_QSIZE_128",	0x05, 0x0f },
	{ "SCB_QSIZE_256",	0x06, 0x0f },
	{ "SCB_QSIZE_512",	0x07, 0x0f },
	{ "SCB_QSIZE_1024",	0x08, 0x0f },
	{ "SCB_QSIZE_2048",	0x09, 0x0f },
	{ "SCB_QSIZE_4096",	0x0a, 0x0f },
	{ "SCB_QSIZE_8192",	0x0b, 0x0f },
	{ "SCB_QSIZE_16384",	0x0c, 0x0f },
	{ "SCB_QSIZE",		0x0f, 0x0f },
	{ "HS_MAILBOX_ACT",	0x10, 0x10 },
	{ "SDSCB_ROLLOVR",	0x20, 0x20 },
	{ "NEW_SCB_AVAIL",	0x40, 0x40 },
	{ "EMPTY_SCB_AVAIL",	0x80, 0x80 }
};

int
ahd_qoff_ctlsta_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(QOFF_CTLSTA_parse_table, 18, "QOFF_CTLSTA",
	    0x16, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t INTCTL_parse_table[] = {
	{ "SPLTINTEN",		0x01, 0x01 },
	{ "SEQINTEN",		0x02, 0x02 },
	{ "SCSIINTEN",		0x04, 0x04 },
	{ "PCIINTEN",		0x08, 0x08 },
	{ "AUTOCLRCMDINT",	0x10, 0x10 },
	{ "SWTIMER_START",	0x20, 0x20 },
	{ "SWTMINTEN",		0x40, 0x40 },
	{ "SWTMINTMASK",	0x80, 0x80 }
};

int
ahd_intctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(INTCTL_parse_table, 8, "INTCTL",
	    0x18, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DFCNTRL_parse_table[] = {
	{ "DIRECTIONEN",	0x01, 0x01 },
	{ "FIFOFLUSH",		0x02, 0x02 },
	{ "FIFOFLUSHACK",	0x02, 0x02 },
	{ "DIRECTION",		0x04, 0x04 },
	{ "DIRECTIONACK",	0x04, 0x04 },
	{ "HDMAEN",		0x08, 0x08 },
	{ "HDMAENACK",		0x08, 0x08 },
	{ "SCSIEN",		0x20, 0x20 },
	{ "SCSIENACK",		0x20, 0x20 },
	{ "SCSIENWRDIS",	0x40, 0x40 },
	{ "PRELOADEN",		0x80, 0x80 }
};

int
ahd_dfcntrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFCNTRL_parse_table, 11, "DFCNTRL",
	    0x19, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSCOMMAND0_parse_table[] = {
	{ "CIOPARCKEN",		0x01, 0x01 },
	{ "DISABLE_TWATE",	0x02, 0x02 },
	{ "EXTREQLCK",		0x10, 0x10 },
	{ "MPARCKEN",		0x20, 0x20 },
	{ "DPARCKEN",		0x40, 0x40 },
	{ "CACHETHEN",		0x80, 0x80 }
};

int
ahd_dscommand0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSCOMMAND0_parse_table, 6, "DSCOMMAND0",
	    0x19, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DFSTATUS_parse_table[] = {
	{ "FIFOEMP",		0x01, 0x01 },
	{ "FIFOFULL",		0x02, 0x02 },
	{ "DFTHRESH",		0x04, 0x04 },
	{ "HDONE",		0x08, 0x08 },
	{ "MREQPEND",		0x10, 0x10 },
	{ "PKT_PRELOAD_AVAIL",	0x40, 0x40 },
	{ "PRELOAD_AVAIL",	0x80, 0x80 }
};

int
ahd_dfstatus_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFSTATUS_parse_table, 7, "DFSTATUS",
	    0x1a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SG_CACHE_SHADOW_parse_table[] = {
	{ "LAST_SEG_DONE",	0x01, 0x01 },
	{ "LAST_SEG",		0x02, 0x02 },
	{ "ODD_SEG",		0x04, 0x04 },
	{ "SG_ADDR_MASK",	0xf8, 0xf8 }
};

int
ahd_sg_cache_shadow_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SG_CACHE_SHADOW_parse_table, 4, "SG_CACHE_SHADOW",
	    0x1b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t ARBCTL_parse_table[] = {
	{ "USE_TIME",		0x07, 0x07 },
	{ "RETRY_SWEN",		0x08, 0x08 },
	{ "RESET_HARB",		0x80, 0x80 }
};

int
ahd_arbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(ARBCTL_parse_table, 3, "ARBCTL",
	    0x1b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SG_CACHE_PRE_parse_table[] = {
	{ "LAST_SEG",		0x02, 0x02 },
	{ "ODD_SEG",		0x04, 0x04 },
	{ "SG_ADDR_MASK",	0xf8, 0xf8 }
};

int
ahd_sg_cache_pre_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SG_CACHE_PRE_parse_table, 3, "SG_CACHE_PRE",
	    0x1b, regvalue, cur_col, wrap));
}

int
ahd_lqin_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQIN",
	    0x20, regvalue, cur_col, wrap));
}

int
ahd_typeptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "TYPEPTR",
	    0x20, regvalue, cur_col, wrap));
}

int
ahd_tagptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "TAGPTR",
	    0x21, regvalue, cur_col, wrap));
}

int
ahd_lunptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LUNPTR",
	    0x22, regvalue, cur_col, wrap));
}

int
ahd_datalenptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DATALENPTR",
	    0x23, regvalue, cur_col, wrap));
}

int
ahd_statlenptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "STATLENPTR",
	    0x24, regvalue, cur_col, wrap));
}

int
ahd_cmdlenptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CMDLENPTR",
	    0x25, regvalue, cur_col, wrap));
}

int
ahd_attrptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ATTRPTR",
	    0x26, regvalue, cur_col, wrap));
}

int
ahd_flagptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FLAGPTR",
	    0x27, regvalue, cur_col, wrap));
}

int
ahd_cmdptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CMDPTR",
	    0x28, regvalue, cur_col, wrap));
}

int
ahd_qnextptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "QNEXTPTR",
	    0x29, regvalue, cur_col, wrap));
}

int
ahd_idptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "IDPTR",
	    0x2a, regvalue, cur_col, wrap));
}

int
ahd_abrtbyteptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ABRTBYTEPTR",
	    0x2b, regvalue, cur_col, wrap));
}

int
ahd_abrtbitptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ABRTBITPTR",
	    0x2c, regvalue, cur_col, wrap));
}

int
ahd_maxcmdbytes_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MAXCMDBYTES",
	    0x2d, regvalue, cur_col, wrap));
}

int
ahd_maxcmd2rcv_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MAXCMD2RCV",
	    0x2e, regvalue, cur_col, wrap));
}

int
ahd_shortthresh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SHORTTHRESH",
	    0x2f, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LUNLEN_parse_table[] = {
	{ "ILUNLEN",		0x0f, 0x0f },
	{ "TLUNLEN",		0xf0, 0xf0 }
};

int
ahd_lunlen_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LUNLEN_parse_table, 2, "LUNLEN",
	    0x30, regvalue, cur_col, wrap));
}

int
ahd_cdblimit_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CDBLIMIT",
	    0x31, regvalue, cur_col, wrap));
}

int
ahd_maxcmd_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MAXCMD",
	    0x32, regvalue, cur_col, wrap));
}

int
ahd_maxcmdcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MAXCMDCNT",
	    0x33, regvalue, cur_col, wrap));
}

int
ahd_lqrsvd01_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQRSVD01",
	    0x34, regvalue, cur_col, wrap));
}

int
ahd_lqrsvd16_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQRSVD16",
	    0x35, regvalue, cur_col, wrap));
}

int
ahd_lqrsvd17_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQRSVD17",
	    0x36, regvalue, cur_col, wrap));
}

int
ahd_cmdrsvd0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CMDRSVD0",
	    0x37, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQCTL0_parse_table[] = {
	{ "LQ0INITGCLT",	0x03, 0x03 },
	{ "LQ0TARGCLT",		0x0c, 0x0c },
	{ "LQIINITGCLT",	0x30, 0x30 },
	{ "LQITARGCLT",		0xc0, 0xc0 }
};

int
ahd_lqctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQCTL0_parse_table, 4, "LQCTL0",
	    0x38, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQCTL1_parse_table[] = {
	{ "ABORTPENDING",	0x01, 0x01 },
	{ "SINGLECMD",		0x02, 0x02 },
	{ "PCI2PCI",		0x04, 0x04 }
};

int
ahd_lqctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQCTL1_parse_table, 3, "LQCTL1",
	    0x38, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSBIST0_parse_table[] = {
	{ "OSBISTRUN",		0x01, 0x01 },
	{ "OSBISTDONE",		0x02, 0x02 },
	{ "OSBISTERR",		0x04, 0x04 },
	{ "GSBISTRUN",		0x10, 0x10 },
	{ "GSBISTDONE",		0x20, 0x20 },
	{ "GSBISTERR",		0x40, 0x40 }
};

int
ahd_scsbist0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSBIST0_parse_table, 6, "SCSBIST0",
	    0x39, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQCTL2_parse_table[] = {
	{ "LQOPAUSE",		0x01, 0x01 },
	{ "LQOTOIDLE",		0x02, 0x02 },
	{ "LQOCONTINUE",	0x04, 0x04 },
	{ "LQORETRY",		0x08, 0x08 },
	{ "LQIPAUSE",		0x10, 0x10 },
	{ "LQITOIDLE",		0x20, 0x20 },
	{ "LQICONTINUE",	0x40, 0x40 },
	{ "LQIRETRY",		0x80, 0x80 }
};

int
ahd_lqctl2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQCTL2_parse_table, 8, "LQCTL2",
	    0x39, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSBIST1_parse_table[] = {
	{ "NTBISTRUN",		0x01, 0x01 },
	{ "NTBISTDONE",		0x02, 0x02 },
	{ "NTBISTERR",		0x04, 0x04 }
};

int
ahd_scsbist1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSBIST1_parse_table, 3, "SCSBIST1",
	    0x3a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSISEQ0_parse_table[] = {
	{ "SCSIRSTO",		0x01, 0x01 },
	{ "FORCEBUSFREE",	0x10, 0x10 },
	{ "ENARBO",		0x20, 0x20 },
	{ "ENSELO",		0x40, 0x40 },
	{ "TEMODEO",		0x80, 0x80 }
};

int
ahd_scsiseq0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSISEQ0_parse_table, 5, "SCSISEQ0",
	    0x3a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSISEQ1_parse_table[] = {
	{ "ALTSTIM",		0x01, 0x01 },
	{ "ENAUTOATNP",		0x02, 0x02 },
	{ "MANUALP",		0x0c, 0x0c },
	{ "ENRSELI",		0x10, 0x10 },
	{ "ENSELI",		0x20, 0x20 },
	{ "MANUALCTL",		0x40, 0x40 }
};

int
ahd_scsiseq1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSISEQ1_parse_table, 6, "SCSISEQ1",
	    0x3b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SXFRCTL0_parse_table[] = {
	{ "SPIOEN",		0x08, 0x08 },
	{ "BIOSCANCELEN",	0x10, 0x10 },
	{ "DFPEXP",		0x40, 0x40 },
	{ "DFON",		0x80, 0x80 }
};

int
ahd_sxfrctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SXFRCTL0_parse_table, 4, "SXFRCTL0",
	    0x3c, regvalue, cur_col, wrap));
}

int
ahd_businitid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "BUSINITID",
	    0x3c, regvalue, cur_col, wrap));
}

int
ahd_dlcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DLCOUNT",
	    0x3c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SXFRCTL1_parse_table[] = {
	{ "STPWEN",		0x01, 0x01 },
	{ "ACTNEGEN",		0x02, 0x02 },
	{ "ENSTIMER",		0x04, 0x04 },
	{ "STIMESEL",		0x18, 0x18 },
	{ "ENSPCHK",		0x20, 0x20 },
	{ "ENSACHK",		0x40, 0x40 },
	{ "BITBUCKET",		0x80, 0x80 }
};

int
ahd_sxfrctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SXFRCTL1_parse_table, 7, "SXFRCTL1",
	    0x3d, regvalue, cur_col, wrap));
}

int
ahd_bustargid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "BUSTARGID",
	    0x3e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SXFRCTL2_parse_table[] = {
	{ "ASU",		0x07, 0x07 },
	{ "CMDDMAEN",		0x08, 0x08 },
	{ "AUTORSTDIS",		0x10, 0x10 }
};

int
ahd_sxfrctl2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SXFRCTL2_parse_table, 3, "SXFRCTL2",
	    0x3e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DFFSTAT_parse_table[] = {
	{ "CURRFIFO_0",		0x00, 0x03 },
	{ "CURRFIFO_1",		0x01, 0x03 },
	{ "CURRFIFO_NONE",	0x03, 0x03 },
	{ "FIFO0FREE",		0x10, 0x10 },
	{ "FIFO1FREE",		0x20, 0x20 },
	{ "CURRFIFO",		0x03, 0x03 }
};

int
ahd_dffstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFFSTAT_parse_table, 6, "DFFSTAT",
	    0x3f, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSISIGO_parse_table[] = {
	{ "P_DATAOUT",		0x00, 0xe0 },
	{ "P_DATAOUT_DT",	0x20, 0xe0 },
	{ "P_DATAIN",		0x40, 0xe0 },
	{ "P_DATAIN_DT",	0x60, 0xe0 },
	{ "P_COMMAND",		0x80, 0xe0 },
	{ "P_MESGOUT",		0xa0, 0xe0 },
	{ "P_STATUS",		0xc0, 0xe0 },
	{ "P_MESGIN",		0xe0, 0xe0 },
	{ "ACKO",		0x01, 0x01 },
	{ "REQO",		0x02, 0x02 },
	{ "BSYO",		0x04, 0x04 },
	{ "SELO",		0x08, 0x08 },
	{ "ATNO",		0x10, 0x10 },
	{ "MSGO",		0x20, 0x20 },
	{ "IOO",		0x40, 0x40 },
	{ "CDO",		0x80, 0x80 },
	{ "PHASE_MASK",		0xe0, 0xe0 }
};

int
ahd_scsisigo_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSISIGO_parse_table, 17, "SCSISIGO",
	    0x40, regvalue, cur_col, wrap));
}

int
ahd_multargid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MULTARGID",
	    0x40, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSISIGI_parse_table[] = {
	{ "P_DATAOUT",		0x00, 0xe0 },
	{ "P_DATAOUT_DT",	0x20, 0xe0 },
	{ "P_DATAIN",		0x40, 0xe0 },
	{ "P_DATAIN_DT",	0x60, 0xe0 },
	{ "P_COMMAND",		0x80, 0xe0 },
	{ "P_MESGOUT",		0xa0, 0xe0 },
	{ "P_STATUS",		0xc0, 0xe0 },
	{ "P_MESGIN",		0xe0, 0xe0 },
	{ "ACKI",		0x01, 0x01 },
	{ "REQI",		0x02, 0x02 },
	{ "BSYI",		0x04, 0x04 },
	{ "SELI",		0x08, 0x08 },
	{ "ATNI",		0x10, 0x10 },
	{ "MSGI",		0x20, 0x20 },
	{ "IOI",		0x40, 0x40 },
	{ "CDI",		0x80, 0x80 },
	{ "PHASE_MASK",		0xe0, 0xe0 }
};

int
ahd_scsisigi_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSISIGI_parse_table, 17, "SCSISIGI",
	    0x41, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSIPHASE_parse_table[] = {
	{ "DATA_OUT_PHASE",	0x01, 0x03 },
	{ "DATA_IN_PHASE",	0x02, 0x03 },
	{ "DATA_PHASE_MASK",	0x03, 0x03 },
	{ "MSG_OUT_PHASE",	0x04, 0x04 },
	{ "MSG_IN_PHASE",	0x08, 0x08 },
	{ "COMMAND_PHASE",	0x10, 0x10 },
	{ "STATUS_PHASE",	0x20, 0x20 }
};

int
ahd_scsiphase_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSIPHASE_parse_table, 7, "SCSIPHASE",
	    0x42, regvalue, cur_col, wrap));
}

int
ahd_scsidat0_img_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCSIDAT0_IMG",
	    0x43, regvalue, cur_col, wrap));
}

int
ahd_scsidat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCSIDAT",
	    0x44, regvalue, cur_col, wrap));
}

int
ahd_scsibus_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCSIBUS",
	    0x46, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t TARGIDIN_parse_table[] = {
	{ "TARGID",		0x0f, 0x0f },
	{ "CLKOUT",		0x80, 0x80 }
};

int
ahd_targidin_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(TARGIDIN_parse_table, 2, "TARGIDIN",
	    0x48, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SELID_parse_table[] = {
	{ "ONEBIT",		0x08, 0x08 },
	{ "SELID_MASK",		0xf0, 0xf0 }
};

int
ahd_selid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SELID_parse_table, 2, "SELID",
	    0x49, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SBLKCTL_parse_table[] = {
	{ "SELWIDE",		0x02, 0x02 },
	{ "ENAB20",		0x04, 0x04 },
	{ "ENAB40",		0x08, 0x08 },
	{ "DIAGLEDON",		0x40, 0x40 },
	{ "DIAGLEDEN",		0x80, 0x80 }
};

int
ahd_sblkctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SBLKCTL_parse_table, 5, "SBLKCTL",
	    0x4a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OPTIONMODE_parse_table[] = {
	{ "AUTO_MSGOUT_DE",	0x02, 0x02 },
	{ "ENDGFORMCHK",	0x04, 0x04 },
	{ "BUSFREEREV",		0x10, 0x10 },
	{ "BIASCANCTL",		0x20, 0x20 },
	{ "AUTOACKEN",		0x40, 0x40 },
	{ "BIOSCANCTL",		0x80, 0x80 },
	{ "OPTIONMODE_DEFAULTS",0x02, 0x02 }
};

int
ahd_optionmode_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OPTIONMODE_parse_table, 7, "OPTIONMODE",
	    0x4a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SSTAT0_parse_table[] = {
	{ "ARBDO",		0x01, 0x01 },
	{ "SPIORDY",		0x02, 0x02 },
	{ "OVERRUN",		0x04, 0x04 },
	{ "IOERR",		0x08, 0x08 },
	{ "SELINGO",		0x10, 0x10 },
	{ "SELDI",		0x20, 0x20 },
	{ "SELDO",		0x40, 0x40 },
	{ "TARGET",		0x80, 0x80 }
};

int
ahd_sstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SSTAT0_parse_table, 8, "SSTAT0",
	    0x4b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRSINT0_parse_table[] = {
	{ "CLRARBDO",		0x01, 0x01 },
	{ "CLRSPIORDY",		0x02, 0x02 },
	{ "CLROVERRUN",		0x04, 0x04 },
	{ "CLRIOERR",		0x08, 0x08 },
	{ "CLRSELINGO",		0x10, 0x10 },
	{ "CLRSELDI",		0x20, 0x20 },
	{ "CLRSELDO",		0x40, 0x40 }
};

int
ahd_clrsint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRSINT0_parse_table, 7, "CLRSINT0",
	    0x4b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SIMODE0_parse_table[] = {
	{ "ENARBDO",		0x01, 0x01 },
	{ "ENSPIORDY",		0x02, 0x02 },
	{ "ENOVERRUN",		0x04, 0x04 },
	{ "ENIOERR",		0x08, 0x08 },
	{ "ENSELINGO",		0x10, 0x10 },
	{ "ENSELDI",		0x20, 0x20 },
	{ "ENSELDO",		0x40, 0x40 }
};

int
ahd_simode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SIMODE0_parse_table, 7, "SIMODE0",
	    0x4b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRSINT1_parse_table[] = {
	{ "CLRREQINIT",		0x01, 0x01 },
	{ "CLRSTRB2FAST",	0x02, 0x02 },
	{ "CLRSCSIPERR",	0x04, 0x04 },
	{ "CLRBUSFREE",		0x08, 0x08 },
	{ "CLRSCSIRSTI",	0x20, 0x20 },
	{ "CLRATNO",		0x40, 0x40 },
	{ "CLRSELTIMEO",	0x80, 0x80 }
};

int
ahd_clrsint1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRSINT1_parse_table, 7, "CLRSINT1",
	    0x4c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SSTAT1_parse_table[] = {
	{ "REQINIT",		0x01, 0x01 },
	{ "STRB2FAST",		0x02, 0x02 },
	{ "SCSIPERR",		0x04, 0x04 },
	{ "BUSFREE",		0x08, 0x08 },
	{ "PHASEMIS",		0x10, 0x10 },
	{ "SCSIRSTI",		0x20, 0x20 },
	{ "ATNTARG",		0x40, 0x40 },
	{ "SELTO",		0x80, 0x80 }
};

int
ahd_sstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SSTAT1_parse_table, 8, "SSTAT1",
	    0x4c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SSTAT2_parse_table[] = {
	{ "BUSFREE_LQO",	0x40, 0xc0 },
	{ "BUSFREE_DFF0",	0x80, 0xc0 },
	{ "BUSFREE_DFF1",	0xc0, 0xc0 },
	{ "DMADONE",		0x01, 0x01 },
	{ "SDONE",		0x02, 0x02 },
	{ "WIDE_RES",		0x04, 0x04 },
	{ "BSYX",		0x08, 0x08 },
	{ "EXP_ACTIVE",		0x10, 0x10 },
	{ "NONPACKREQ",		0x20, 0x20 },
	{ "BUSFREETIME",	0xc0, 0xc0 }
};

int
ahd_sstat2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SSTAT2_parse_table, 10, "SSTAT2",
	    0x4d, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRSINT2_parse_table[] = {
	{ "CLRDMADONE",		0x01, 0x01 },
	{ "CLRSDONE",		0x02, 0x02 },
	{ "CLRWIDE_RES",	0x04, 0x04 },
	{ "CLRNONPACKREQ",	0x20, 0x20 }
};

int
ahd_clrsint2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRSINT2_parse_table, 4, "CLRSINT2",
	    0x4d, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SIMODE2_parse_table[] = {
	{ "ENDMADONE",		0x01, 0x01 },
	{ "ENSDONE",		0x02, 0x02 },
	{ "ENWIDE_RES",		0x04, 0x04 }
};

int
ahd_simode2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SIMODE2_parse_table, 3, "SIMODE2",
	    0x4d, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PERRDIAG_parse_table[] = {
	{ "DTERR",		0x01, 0x01 },
	{ "DGFORMERR",		0x02, 0x02 },
	{ "CRCERR",		0x04, 0x04 },
	{ "AIPERR",		0x08, 0x08 },
	{ "PARITYERR",		0x10, 0x10 },
	{ "PREVPHASE",		0x20, 0x20 },
	{ "HIPERR",		0x40, 0x40 },
	{ "HIZERO",		0x80, 0x80 }
};

int
ahd_perrdiag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PERRDIAG_parse_table, 8, "PERRDIAG",
	    0x4e, regvalue, cur_col, wrap));
}

int
ahd_lqistate_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQISTATE",
	    0x4e, regvalue, cur_col, wrap));
}

int
ahd_soffcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SOFFCNT",
	    0x4f, regvalue, cur_col, wrap));
}

int
ahd_lqostate_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LQOSTATE",
	    0x4f, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQISTAT0_parse_table[] = {
	{ "LQIATNCMD",		0x01, 0x01 },
	{ "LQIATNLQ",		0x02, 0x02 },
	{ "LQIBADLQT",		0x04, 0x04 },
	{ "LQICRCT2",		0x08, 0x08 },
	{ "LQICRCT1",		0x10, 0x10 },
	{ "LQIATNQAS",		0x20, 0x20 }
};

int
ahd_lqistat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQISTAT0_parse_table, 6, "LQISTAT0",
	    0x50, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRLQIINT0_parse_table[] = {
	{ "CLRLQIATNCMD",	0x01, 0x01 },
	{ "CLRLQIATNLQ",	0x02, 0x02 },
	{ "CLRLQIBADLQT",	0x04, 0x04 },
	{ "CLRLQICRCT2",	0x08, 0x08 },
	{ "CLRLQICRCT1",	0x10, 0x10 },
	{ "CLRLQIATNQAS",	0x20, 0x20 }
};

int
ahd_clrlqiint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRLQIINT0_parse_table, 6, "CLRLQIINT0",
	    0x50, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQIMODE0_parse_table[] = {
	{ "ENLQIATNCMD",	0x01, 0x01 },
	{ "ENLQIATNLQ",		0x02, 0x02 },
	{ "ENLQIBADLQT",	0x04, 0x04 },
	{ "ENLQICRCT2",		0x08, 0x08 },
	{ "ENLQICRCT1",		0x10, 0x10 },
	{ "ENLQIATNQASK",	0x20, 0x20 }
};

int
ahd_lqimode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQIMODE0_parse_table, 6, "LQIMODE0",
	    0x50, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQIMODE1_parse_table[] = {
	{ "ENLQIOVERI_NLQ",	0x01, 0x01 },
	{ "ENLQIOVERI_LQ",	0x02, 0x02 },
	{ "ENLQIBADLQI",	0x04, 0x04 },
	{ "ENLQICRCI_NLQ",	0x08, 0x08 },
	{ "ENLQICRCI_LQ",	0x10, 0x10 },
	{ "ENLIQABORT",		0x20, 0x20 },
	{ "ENLQIPHASE_NLQ",	0x40, 0x40 },
	{ "ENLQIPHASE_LQ",	0x80, 0x80 }
};

int
ahd_lqimode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQIMODE1_parse_table, 8, "LQIMODE1",
	    0x51, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQISTAT1_parse_table[] = {
	{ "LQIOVERI_NLQ",	0x01, 0x01 },
	{ "LQIOVERI_LQ",	0x02, 0x02 },
	{ "LQIBADLQI",		0x04, 0x04 },
	{ "LQICRCI_NLQ",	0x08, 0x08 },
	{ "LQICRCI_LQ",		0x10, 0x10 },
	{ "LQIABORT",		0x20, 0x20 },
	{ "LQIPHASE_NLQ",	0x40, 0x40 },
	{ "LQIPHASE_LQ",	0x80, 0x80 }
};

int
ahd_lqistat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQISTAT1_parse_table, 8, "LQISTAT1",
	    0x51, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRLQIINT1_parse_table[] = {
	{ "CLRLQIOVERI_NLQ",	0x01, 0x01 },
	{ "CLRLQIOVERI_LQ",	0x02, 0x02 },
	{ "CLRLQIBADLQI",	0x04, 0x04 },
	{ "CLRLQICRCI_NLQ",	0x08, 0x08 },
	{ "CLRLQICRCI_LQ",	0x10, 0x10 },
	{ "CLRLIQABORT",	0x20, 0x20 },
	{ "CLRLQIPHASE_NLQ",	0x40, 0x40 },
	{ "CLRLQIPHASE_LQ",	0x80, 0x80 }
};

int
ahd_clrlqiint1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRLQIINT1_parse_table, 8, "CLRLQIINT1",
	    0x51, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQISTAT2_parse_table[] = {
	{ "LQIGSAVAIL",		0x01, 0x01 },
	{ "LQISTOPCMD",		0x02, 0x02 },
	{ "LQISTOPLQ",		0x04, 0x04 },
	{ "LQISTOPPKT",		0x08, 0x08 },
	{ "LQIWAITFIFO",	0x10, 0x10 },
	{ "LQIWORKONLQ",	0x20, 0x20 },
	{ "LQIPHASE_OUTPKT",	0x40, 0x40 },
	{ "PACKETIZED",		0x80, 0x80 }
};

int
ahd_lqistat2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQISTAT2_parse_table, 8, "LQISTAT2",
	    0x52, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SSTAT3_parse_table[] = {
	{ "OSRAMPERR",		0x01, 0x01 },
	{ "NTRAMPERR",		0x02, 0x02 }
};

int
ahd_sstat3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SSTAT3_parse_table, 2, "SSTAT3",
	    0x53, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SIMODE3_parse_table[] = {
	{ "ENOSRAMPERR",	0x01, 0x01 },
	{ "ENNTRAMPERR",	0x02, 0x02 }
};

int
ahd_simode3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SIMODE3_parse_table, 2, "SIMODE3",
	    0x53, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRSINT3_parse_table[] = {
	{ "CLROSRAMPERR",	0x01, 0x01 },
	{ "CLRNTRAMPERR",	0x02, 0x02 }
};

int
ahd_clrsint3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRSINT3_parse_table, 2, "CLRSINT3",
	    0x53, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOMODE0_parse_table[] = {
	{ "ENLQOTCRC",		0x01, 0x01 },
	{ "ENLQOATNPKT",	0x02, 0x02 },
	{ "ENLQOATNLQ",		0x04, 0x04 },
	{ "ENLQOSTOPT2",	0x08, 0x08 },
	{ "ENLQOTARGSCBPERR",	0x10, 0x10 }
};

int
ahd_lqomode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOMODE0_parse_table, 5, "LQOMODE0",
	    0x54, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOSTAT0_parse_table[] = {
	{ "LQOTCRC",		0x01, 0x01 },
	{ "LQOATNPKT",		0x02, 0x02 },
	{ "LQOATNLQ",		0x04, 0x04 },
	{ "LQOSTOPT2",		0x08, 0x08 },
	{ "LQOTARGSCBPERR",	0x10, 0x10 }
};

int
ahd_lqostat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOSTAT0_parse_table, 5, "LQOSTAT0",
	    0x54, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRLQOINT0_parse_table[] = {
	{ "CLRLQOTCRC",		0x01, 0x01 },
	{ "CLRLQOATNPKT",	0x02, 0x02 },
	{ "CLRLQOATNLQ",	0x04, 0x04 },
	{ "CLRLQOSTOPT2",	0x08, 0x08 },
	{ "CLRLQOTARGSCBPERR",	0x10, 0x10 }
};

int
ahd_clrlqoint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRLQOINT0_parse_table, 5, "CLRLQOINT0",
	    0x54, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOSTAT1_parse_table[] = {
	{ "LQOPHACHGINPKT",	0x01, 0x01 },
	{ "LQOBUSFREE",		0x02, 0x02 },
	{ "LQOBADQAS",		0x04, 0x04 },
	{ "LQOSTOPI2",		0x08, 0x08 },
	{ "LQOINITSCBPERR",	0x10, 0x10 }
};

int
ahd_lqostat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOSTAT1_parse_table, 5, "LQOSTAT1",
	    0x55, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRLQOINT1_parse_table[] = {
	{ "CLRLQOPHACHGINPKT",	0x01, 0x01 },
	{ "CLRLQOBUSFREE",	0x02, 0x02 },
	{ "CLRLQOBADQAS",	0x04, 0x04 },
	{ "CLRLQOSTOPI2",	0x08, 0x08 },
	{ "CLRLQOINITSCBPERR",	0x10, 0x10 }
};

int
ahd_clrlqoint1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRLQOINT1_parse_table, 5, "CLRLQOINT1",
	    0x55, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOMODE1_parse_table[] = {
	{ "ENLQOPHACHGINPKT",	0x01, 0x01 },
	{ "ENLQOBUSFREE",	0x02, 0x02 },
	{ "ENLQOBADQAS",	0x04, 0x04 },
	{ "ENLQOSTOPI2",	0x08, 0x08 },
	{ "ENLQOINITSCBPERR",	0x10, 0x10 }
};

int
ahd_lqomode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOMODE1_parse_table, 5, "LQOMODE1",
	    0x55, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOSTAT2_parse_table[] = {
	{ "LQOSTOP0",		0x01, 0x01 },
	{ "LQOPHACHGOUTPKT",	0x02, 0x02 },
	{ "LQOWAITFIFO",	0x10, 0x10 },
	{ "LQOPKT",		0xe0, 0xe0 }
};

int
ahd_lqostat2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOSTAT2_parse_table, 4, "LQOSTAT2",
	    0x56, regvalue, cur_col, wrap));
}

int
ahd_os_space_cnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "OS_SPACE_CNT",
	    0x56, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SIMODE1_parse_table[] = {
	{ "ENREQINIT",		0x01, 0x01 },
	{ "ENSTRB2FAST",	0x02, 0x02 },
	{ "ENSCSIPERR",		0x04, 0x04 },
	{ "ENBUSFREE",		0x08, 0x08 },
	{ "ENPHASEMIS",		0x10, 0x10 },
	{ "ENSCSIRST",		0x20, 0x20 },
	{ "ENATNTARG",		0x40, 0x40 },
	{ "ENSELTIMO",		0x80, 0x80 }
};

int
ahd_simode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SIMODE1_parse_table, 8, "SIMODE1",
	    0x57, regvalue, cur_col, wrap));
}

int
ahd_gsfifo_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "GSFIFO",
	    0x58, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DFFSXFRCTL_parse_table[] = {
	{ "RSTCHN",		0x01, 0x01 },
	{ "CLRCHN",		0x02, 0x02 },
	{ "CLRSHCNT",		0x04, 0x04 },
	{ "DFFBITBUCKET",	0x08, 0x08 }
};

int
ahd_dffsxfrctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFFSXFRCTL_parse_table, 4, "DFFSXFRCTL",
	    0x5a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LQOSCSCTL_parse_table[] = {
	{ "LQONOCHKOVER",	0x01, 0x01 },
	{ "LQOH2A_VERSION",	0x80, 0x80 }
};

int
ahd_lqoscsctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LQOSCSCTL_parse_table, 2, "LQOSCSCTL",
	    0x5a, regvalue, cur_col, wrap));
}

int
ahd_nextscb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NEXTSCB",
	    0x5a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CLRSEQINTSRC_parse_table[] = {
	{ "CLRCFG4TCMD",	0x01, 0x01 },
	{ "CLRCFG4ICMD",	0x02, 0x02 },
	{ "CLRCFG4TSTAT",	0x04, 0x04 },
	{ "CLRCFG4ISTAT",	0x08, 0x08 },
	{ "CLRCFG4DATA",	0x10, 0x10 },
	{ "CLRSAVEPTRS",	0x20, 0x20 },
	{ "CLRCTXTDONE",	0x40, 0x40 }
};

int
ahd_clrseqintsrc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CLRSEQINTSRC_parse_table, 7, "CLRSEQINTSRC",
	    0x5b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQINTSRC_parse_table[] = {
	{ "CFG4TCMD",		0x01, 0x01 },
	{ "CFG4ICMD",		0x02, 0x02 },
	{ "CFG4TSTAT",		0x04, 0x04 },
	{ "CFG4ISTAT",		0x08, 0x08 },
	{ "CFG4DATA",		0x10, 0x10 },
	{ "SAVEPTRS",		0x20, 0x20 },
	{ "CTXTDONE",		0x40, 0x40 }
};

int
ahd_seqintsrc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQINTSRC_parse_table, 7, "SEQINTSRC",
	    0x5b, regvalue, cur_col, wrap));
}

int
ahd_currscb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CURRSCB",
	    0x5c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQIMODE_parse_table[] = {
	{ "ENCFG4TCMD",		0x01, 0x01 },
	{ "ENCFG4ICMD",		0x02, 0x02 },
	{ "ENCFG4TSTAT",	0x04, 0x04 },
	{ "ENCFG4ISTAT",	0x08, 0x08 },
	{ "ENCFG4DATA",		0x10, 0x10 },
	{ "ENSAVEPTRS",		0x20, 0x20 },
	{ "ENCTXTDONE",		0x40, 0x40 }
};

int
ahd_seqimode_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQIMODE_parse_table, 7, "SEQIMODE",
	    0x5c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t MDFFSTAT_parse_table[] = {
	{ "FIFOFREE",		0x01, 0x01 },
	{ "DATAINFIFO",		0x02, 0x02 },
	{ "DLZERO",		0x04, 0x04 },
	{ "SHVALID",		0x08, 0x08 },
	{ "LASTSDONE",		0x10, 0x10 },
	{ "SHCNTMINUS1",	0x20, 0x20 },
	{ "SHCNTNEGATIVE",	0x40, 0x40 }
};

int
ahd_mdffstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(MDFFSTAT_parse_table, 7, "MDFFSTAT",
	    0x5d, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CRCCONTROL_parse_table[] = {
	{ "CRCVALCHKEN",	0x40, 0x40 }
};

int
ahd_crccontrol_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CRCCONTROL_parse_table, 1, "CRCCONTROL",
	    0x5d, regvalue, cur_col, wrap));
}

int
ahd_dfftag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFFTAG",
	    0x5e, regvalue, cur_col, wrap));
}

int
ahd_lastscb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LASTSCB",
	    0x5e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSITEST_parse_table[] = {
	{ "SEL_TXPLL_DEBUG",	0x04, 0x04 },
	{ "CNTRTEST",		0x08, 0x08 }
};

int
ahd_scsitest_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSITEST_parse_table, 2, "SCSITEST",
	    0x5e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t IOPDNCTL_parse_table[] = {
	{ "PDN_DIFFSENSE",	0x01, 0x01 },
	{ "PDN_IDIST",		0x04, 0x04 },
	{ "DISABLE_OE",		0x80, 0x80 }
};

int
ahd_iopdnctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(IOPDNCTL_parse_table, 3, "IOPDNCTL",
	    0x5f, regvalue, cur_col, wrap));
}

int
ahd_shaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SHADDR",
	    0x60, regvalue, cur_col, wrap));
}

int
ahd_negoaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NEGOADDR",
	    0x60, regvalue, cur_col, wrap));
}

int
ahd_dgrpcrci_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DGRPCRCI",
	    0x60, regvalue, cur_col, wrap));
}

int
ahd_negperiod_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NEGPERIOD",
	    0x61, regvalue, cur_col, wrap));
}

int
ahd_packcrci_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "PACKCRCI",
	    0x62, regvalue, cur_col, wrap));
}

int
ahd_negoffset_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NEGOFFSET",
	    0x62, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t NEGPPROPTS_parse_table[] = {
	{ "PPROPT_IUT",		0x01, 0x01 },
	{ "PPROPT_DT",		0x02, 0x02 },
	{ "PPROPT_QAS",		0x04, 0x04 },
	{ "PPROPT_PACE",	0x08, 0x08 }
};

int
ahd_negppropts_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NEGPPROPTS_parse_table, 4, "NEGPPROPTS",
	    0x63, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t NEGCONOPTS_parse_table[] = {
	{ "WIDEXFER",		0x01, 0x01 },
	{ "ENAUTOATNO",		0x02, 0x02 },
	{ "ENAUTOATNI",		0x04, 0x04 },
	{ "ENSLOWCRC",		0x08, 0x08 },
	{ "RTI_OVRDTRN",	0x10, 0x10 },
	{ "RTI_WRTDIS",		0x20, 0x20 },
	{ "ENSNAPSHOT",		0x40, 0x40 }
};

int
ahd_negconopts_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NEGCONOPTS_parse_table, 7, "NEGCONOPTS",
	    0x64, regvalue, cur_col, wrap));
}

int
ahd_annexcol_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ANNEXCOL",
	    0x65, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSCHKN_parse_table[] = {
	{ "LSTSGCLRDIS",	0x01, 0x01 },
	{ "SHVALIDSTDIS",	0x02, 0x02 },
	{ "DFFACTCLR",		0x04, 0x04 },
	{ "SDONEMSKDIS",	0x08, 0x08 },
	{ "WIDERESEN",		0x10, 0x10 },
	{ "CURRFIFODEF",	0x20, 0x20 },
	{ "STSELSKIDDIS",	0x40, 0x40 }
};

int
ahd_scschkn_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSCHKN_parse_table, 7, "SCSCHKN",
	    0x66, regvalue, cur_col, wrap));
}

int
ahd_annexdat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ANNEXDAT",
	    0x66, regvalue, cur_col, wrap));
}

int
ahd_iownid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "IOWNID",
	    0x67, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PLL960CTL0_parse_table[] = {
	{ "PLL_ENFBM",		0x01, 0x01 },
	{ "PLL_DLPF",		0x02, 0x02 },
	{ "PLL_ENLPF",		0x04, 0x04 },
	{ "PLL_ENLUD",		0x08, 0x08 },
	{ "PLL_NS",		0x30, 0x30 },
	{ "PLL_PWDN",		0x40, 0x40 },
	{ "PLL_VCOSEL",		0x80, 0x80 }
};

int
ahd_pll960ctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PLL960CTL0_parse_table, 7, "PLL960CTL0",
	    0x68, regvalue, cur_col, wrap));
}

int
ahd_shcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SHCNT",
	    0x68, regvalue, cur_col, wrap));
}

int
ahd_townid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "TOWNID",
	    0x69, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PLL960CTL1_parse_table[] = {
	{ "PLL_RST",		0x01, 0x01 },
	{ "PLL_CNTCLR",		0x40, 0x40 },
	{ "PLL_CNTEN",		0x80, 0x80 }
};

int
ahd_pll960ctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PLL960CTL1_parse_table, 3, "PLL960CTL1",
	    0x69, regvalue, cur_col, wrap));
}

int
ahd_pll960cnt0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "PLL960CNT0",
	    0x6a, regvalue, cur_col, wrap));
}

int
ahd_xsig_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "XSIG",
	    0x6a, regvalue, cur_col, wrap));
}

int
ahd_seloid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SELOID",
	    0x6b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PLL400CTL0_parse_table[] = {
	{ "PLL_ENFBM",		0x01, 0x01 },
	{ "PLL_DLPF",		0x02, 0x02 },
	{ "PLL_ENLPF",		0x04, 0x04 },
	{ "PLL_ENLUD",		0x08, 0x08 },
	{ "PLL_NS",		0x30, 0x30 },
	{ "PLL_PWDN",		0x40, 0x40 },
	{ "PLL_VCOSEL",		0x80, 0x80 }
};

int
ahd_pll400ctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PLL400CTL0_parse_table, 7, "PLL400CTL0",
	    0x6c, regvalue, cur_col, wrap));
}

int
ahd_fairness_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FAIRNESS",
	    0x6c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PLL400CTL1_parse_table[] = {
	{ "PLL_RST",		0x01, 0x01 },
	{ "PLL_CNTCLR",		0x40, 0x40 },
	{ "PLL_CNTEN",		0x80, 0x80 }
};

int
ahd_pll400ctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PLL400CTL1_parse_table, 3, "PLL400CTL1",
	    0x6d, regvalue, cur_col, wrap));
}

int
ahd_pll400cnt0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "PLL400CNT0",
	    0x6e, regvalue, cur_col, wrap));
}

int
ahd_unfairness_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "UNFAIRNESS",
	    0x6e, regvalue, cur_col, wrap));
}

int
ahd_haddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HADDR",
	    0x70, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PLLDELAY_parse_table[] = {
	{ "SPLIT_DROP_REQ",	0x80, 0x80 }
};

int
ahd_plldelay_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PLLDELAY_parse_table, 1, "PLLDELAY",
	    0x70, regvalue, cur_col, wrap));
}

int
ahd_hodmaadr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HODMAADR",
	    0x70, regvalue, cur_col, wrap));
}

int
ahd_hodmacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HODMACNT",
	    0x78, regvalue, cur_col, wrap));
}

int
ahd_hcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HCNT",
	    0x78, regvalue, cur_col, wrap));
}

int
ahd_hodmaen_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "HODMAEN",
	    0x7a, regvalue, cur_col, wrap));
}

int
ahd_sghaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SGHADDR",
	    0x7c, regvalue, cur_col, wrap));
}

int
ahd_scbhaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCBHADDR",
	    0x7c, regvalue, cur_col, wrap));
}

int
ahd_sghcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SGHCNT",
	    0x84, regvalue, cur_col, wrap));
}

int
ahd_scbhcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCBHCNT",
	    0x84, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DFF_THRSH_parse_table[] = {
	{ "WR_DFTHRSH_MIN",	0x00, 0x70 },
	{ "RD_DFTHRSH_MIN",	0x00, 0x07 },
	{ "RD_DFTHRSH_25",	0x01, 0x07 },
	{ "RD_DFTHRSH_50",	0x02, 0x07 },
	{ "RD_DFTHRSH_63",	0x03, 0x07 },
	{ "RD_DFTHRSH_75",	0x04, 0x07 },
	{ "RD_DFTHRSH_85",	0x05, 0x07 },
	{ "RD_DFTHRSH_90",	0x06, 0x07 },
	{ "RD_DFTHRSH_MAX",	0x07, 0x07 },
	{ "WR_DFTHRSH_25",	0x10, 0x70 },
	{ "WR_DFTHRSH_50",	0x20, 0x70 },
	{ "WR_DFTHRSH_63",	0x30, 0x70 },
	{ "WR_DFTHRSH_75",	0x40, 0x70 },
	{ "WR_DFTHRSH_85",	0x50, 0x70 },
	{ "WR_DFTHRSH_90",	0x60, 0x70 },
	{ "WR_DFTHRSH_MAX",	0x70, 0x70 },
	{ "RD_DFTHRSH",		0x07, 0x07 },
	{ "WR_DFTHRSH",		0x70, 0x70 }
};

int
ahd_dff_thrsh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFF_THRSH_parse_table, 18, "DFF_THRSH",
	    0x88, regvalue, cur_col, wrap));
}

int
ahd_romaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ROMADDR",
	    0x8a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t ROMCNTRL_parse_table[] = {
	{ "RDY",		0x01, 0x01 },
	{ "REPEAT",		0x02, 0x02 },
	{ "ROMSPD",		0x18, 0x18 },
	{ "ROMOP",		0xe0, 0xe0 }
};

int
ahd_romcntrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(ROMCNTRL_parse_table, 4, "ROMCNTRL",
	    0x8d, regvalue, cur_col, wrap));
}

int
ahd_romdata_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ROMDATA",
	    0x8e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCRXMSG0_parse_table[] = {
	{ "CFNUM",		0x07, 0x07 },
	{ "CDNUM",		0xf8, 0xf8 }
};

int
ahd_cmcrxmsg0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCRXMSG0_parse_table, 2, "CMCRXMSG0",
	    0x90, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t ROENABLE_parse_table[] = {
	{ "DCH0ROEN",		0x01, 0x01 },
	{ "DCH1ROEN",		0x02, 0x02 },
	{ "SGROEN",		0x04, 0x04 },
	{ "CMCROEN",		0x08, 0x08 },
	{ "OVLYROEN",		0x10, 0x10 },
	{ "MSIROEN",		0x20, 0x20 }
};

int
ahd_roenable_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(ROENABLE_parse_table, 6, "ROENABLE",
	    0x90, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYRXMSG0_parse_table[] = {
	{ "CFNUM",		0x07, 0x07 },
	{ "CDNUM",		0xf8, 0xf8 }
};

int
ahd_ovlyrxmsg0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYRXMSG0_parse_table, 2, "OVLYRXMSG0",
	    0x90, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHRXMSG0_parse_table[] = {
	{ "CFNUM",		0x07, 0x07 },
	{ "CDNUM",		0xf8, 0xf8 }
};

int
ahd_dchrxmsg0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHRXMSG0_parse_table, 2, "DCHRXMSG0",
	    0x90, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYRXMSG1_parse_table[] = {
	{ "CBNUM",		0xff, 0xff }
};

int
ahd_ovlyrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYRXMSG1_parse_table, 1, "OVLYRXMSG1",
	    0x91, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t NSENABLE_parse_table[] = {
	{ "DCH0NSEN",		0x01, 0x01 },
	{ "DCH1NSEN",		0x02, 0x02 },
	{ "SGNSEN",		0x04, 0x04 },
	{ "CMCNSEN",		0x08, 0x08 },
	{ "OVLYNSEN",		0x10, 0x10 },
	{ "MSINSEN",		0x20, 0x20 }
};

int
ahd_nsenable_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NSENABLE_parse_table, 6, "NSENABLE",
	    0x91, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHRXMSG1_parse_table[] = {
	{ "CBNUM",		0xff, 0xff }
};

int
ahd_dchrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHRXMSG1_parse_table, 1, "DCHRXMSG1",
	    0x91, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCRXMSG1_parse_table[] = {
	{ "CBNUM",		0xff, 0xff }
};

int
ahd_cmcrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCRXMSG1_parse_table, 1, "CMCRXMSG1",
	    0x91, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHRXMSG2_parse_table[] = {
	{ "MINDEX",		0xff, 0xff }
};

int
ahd_dchrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHRXMSG2_parse_table, 1, "DCHRXMSG2",
	    0x92, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYRXMSG2_parse_table[] = {
	{ "MINDEX",		0xff, 0xff }
};

int
ahd_ovlyrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYRXMSG2_parse_table, 1, "OVLYRXMSG2",
	    0x92, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCRXMSG2_parse_table[] = {
	{ "MINDEX",		0xff, 0xff }
};

int
ahd_cmcrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCRXMSG2_parse_table, 1, "CMCRXMSG2",
	    0x92, regvalue, cur_col, wrap));
}

int
ahd_ost_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "OST",
	    0x92, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHRXMSG3_parse_table[] = {
	{ "MCLASS",		0x0f, 0x0f }
};

int
ahd_dchrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHRXMSG3_parse_table, 1, "DCHRXMSG3",
	    0x93, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCRXMSG3_parse_table[] = {
	{ "MCLASS",		0x0f, 0x0f }
};

int
ahd_cmcrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCRXMSG3_parse_table, 1, "CMCRXMSG3",
	    0x93, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t PCIXCTL_parse_table[] = {
	{ "CMPABCDIS",		0x01, 0x01 },
	{ "TSCSERREN",		0x02, 0x02 },
	{ "SRSPDPEEN",		0x04, 0x04 },
	{ "SPLTSTADIS",		0x08, 0x08 },
	{ "SPLTSMADIS",		0x10, 0x10 },
	{ "UNEXPSCIEN",		0x20, 0x20 },
	{ "SERRPULSE",		0x80, 0x80 }
};

int
ahd_pcixctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(PCIXCTL_parse_table, 7, "PCIXCTL",
	    0x93, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYRXMSG3_parse_table[] = {
	{ "MCLASS",		0x0f, 0x0f }
};

int
ahd_ovlyrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYRXMSG3_parse_table, 1, "OVLYRXMSG3",
	    0x93, regvalue, cur_col, wrap));
}

int
ahd_ovlyseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "OVLYSEQBCNT",
	    0x94, regvalue, cur_col, wrap));
}

int
ahd_cmcseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CMCSEQBCNT",
	    0x94, regvalue, cur_col, wrap));
}

int
ahd_dchseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DCHSEQBCNT",
	    0x94, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCSPLTSTAT0_parse_table[] = {
	{ "RXSPLTRSP",		0x01, 0x01 },
	{ "RXSCEMSG",		0x02, 0x02 },
	{ "RXOVRUN",		0x04, 0x04 },
	{ "CNTNOTCMPLT",	0x08, 0x08 },
	{ "SCDATBUCKET",	0x10, 0x10 },
	{ "SCADERR",		0x20, 0x20 },
	{ "SCBCERR",		0x40, 0x40 },
	{ "STAETERM",		0x80, 0x80 }
};

int
ahd_cmcspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCSPLTSTAT0_parse_table, 8, "CMCSPLTSTAT0",
	    0x96, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYSPLTSTAT0_parse_table[] = {
	{ "RXSPLTRSP",		0x01, 0x01 },
	{ "RXSCEMSG",		0x02, 0x02 },
	{ "RXOVRUN",		0x04, 0x04 },
	{ "CNTNOTCMPLT",	0x08, 0x08 },
	{ "SCDATBUCKET",	0x10, 0x10 },
	{ "SCADERR",		0x20, 0x20 },
	{ "SCBCERR",		0x40, 0x40 },
	{ "STAETERM",		0x80, 0x80 }
};

int
ahd_ovlyspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYSPLTSTAT0_parse_table, 8, "OVLYSPLTSTAT0",
	    0x96, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHSPLTSTAT0_parse_table[] = {
	{ "RXSPLTRSP",		0x01, 0x01 },
	{ "RXSCEMSG",		0x02, 0x02 },
	{ "RXOVRUN",		0x04, 0x04 },
	{ "CNTNOTCMPLT",	0x08, 0x08 },
	{ "SCDATBUCKET",	0x10, 0x10 },
	{ "SCADERR",		0x20, 0x20 },
	{ "SCBCERR",		0x40, 0x40 },
	{ "STAETERM",		0x80, 0x80 }
};

int
ahd_dchspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHSPLTSTAT0_parse_table, 8, "DCHSPLTSTAT0",
	    0x96, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DCHSPLTSTAT1_parse_table[] = {
	{ "RXDATABUCKET",	0x01, 0x01 }
};

int
ahd_dchspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DCHSPLTSTAT1_parse_table, 1, "DCHSPLTSTAT1",
	    0x97, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCSPLTSTAT1_parse_table[] = {
	{ "RXDATABUCKET",	0x01, 0x01 }
};

int
ahd_cmcspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCSPLTSTAT1_parse_table, 1, "CMCSPLTSTAT1",
	    0x97, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYSPLTSTAT1_parse_table[] = {
	{ "RXDATABUCKET",	0x01, 0x01 }
};

int
ahd_ovlyspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYSPLTSTAT1_parse_table, 1, "OVLYSPLTSTAT1",
	    0x97, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGRXMSG0_parse_table[] = {
	{ "CFNUM",		0x07, 0x07 },
	{ "CDNUM",		0xf8, 0xf8 }
};

int
ahd_sgrxmsg0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGRXMSG0_parse_table, 2, "SGRXMSG0",
	    0x98, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTADR0_parse_table[] = {
	{ "LOWER_ADDR",		0x7f, 0x7f }
};

int
ahd_slvspltoutadr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTADR0_parse_table, 1, "SLVSPLTOUTADR0",
	    0x98, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGRXMSG1_parse_table[] = {
	{ "CBNUM",		0xff, 0xff }
};

int
ahd_sgrxmsg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGRXMSG1_parse_table, 1, "SGRXMSG1",
	    0x99, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTADR1_parse_table[] = {
	{ "REQ_FNUM",		0x07, 0x07 },
	{ "REQ_DNUM",		0xf8, 0xf8 }
};

int
ahd_slvspltoutadr1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTADR1_parse_table, 2, "SLVSPLTOUTADR1",
	    0x99, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGRXMSG2_parse_table[] = {
	{ "MINDEX",		0xff, 0xff }
};

int
ahd_sgrxmsg2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGRXMSG2_parse_table, 1, "SGRXMSG2",
	    0x9a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTADR2_parse_table[] = {
	{ "REQ_BNUM",		0xff, 0xff }
};

int
ahd_slvspltoutadr2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTADR2_parse_table, 1, "SLVSPLTOUTADR2",
	    0x9a, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGRXMSG3_parse_table[] = {
	{ "MCLASS",		0x0f, 0x0f }
};

int
ahd_sgrxmsg3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGRXMSG3_parse_table, 1, "SGRXMSG3",
	    0x9b, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTADR3_parse_table[] = {
	{ "RLXORD",		0x10, 0x10 },
	{ "TAG_NUM",		0x1f, 0x1f }
};

int
ahd_slvspltoutadr3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTADR3_parse_table, 2, "SLVSPLTOUTADR3",
	    0x9b, regvalue, cur_col, wrap));
}

int
ahd_sgseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SGSEQBCNT",
	    0x9c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTATTR0_parse_table[] = {
	{ "LOWER_BCNT",		0xff, 0xff }
};

int
ahd_slvspltoutattr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTATTR0_parse_table, 1, "SLVSPLTOUTATTR0",
	    0x9c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTATTR1_parse_table[] = {
	{ "CMPLT_FNUM",		0x07, 0x07 },
	{ "CMPLT_DNUM",		0xf8, 0xf8 }
};

int
ahd_slvspltoutattr1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTATTR1_parse_table, 2, "SLVSPLTOUTATTR1",
	    0x9d, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SLVSPLTOUTATTR2_parse_table[] = {
	{ "CMPLT_BNUM",		0xff, 0xff }
};

int
ahd_slvspltoutattr2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SLVSPLTOUTATTR2_parse_table, 1, "SLVSPLTOUTATTR2",
	    0x9e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGSPLTSTAT0_parse_table[] = {
	{ "RXSPLTRSP",		0x01, 0x01 },
	{ "RXSCEMSG",		0x02, 0x02 },
	{ "RXOVRUN",		0x04, 0x04 },
	{ "CNTNOTCMPLT",	0x08, 0x08 },
	{ "SCDATBUCKET",	0x10, 0x10 },
	{ "SCADERR",		0x20, 0x20 },
	{ "SCBCERR",		0x40, 0x40 },
	{ "STAETERM",		0x80, 0x80 }
};

int
ahd_sgspltstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGSPLTSTAT0_parse_table, 8, "SGSPLTSTAT0",
	    0x9e, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SFUNCT_parse_table[] = {
	{ "TEST_NUM",		0x0f, 0x0f },
	{ "TEST_GROUP",		0xf0, 0xf0 }
};

int
ahd_sfunct_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SFUNCT_parse_table, 2, "SFUNCT",
	    0x9f, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGSPLTSTAT1_parse_table[] = {
	{ "RXDATABUCKET",	0x01, 0x01 }
};

int
ahd_sgspltstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGSPLTSTAT1_parse_table, 1, "SGSPLTSTAT1",
	    0x9f, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DF0PCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "TWATERR",		0x02, 0x02 },
	{ "RDPERR",		0x04, 0x04 },
	{ "SCAAPERR",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_df0pcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DF0PCISTAT_parse_table, 8, "DF0PCISTAT",
	    0xa0, regvalue, cur_col, wrap));
}

int
ahd_reg0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "REG0",
	    0xa0, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DF1PCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "TWATERR",		0x02, 0x02 },
	{ "RDPERR",		0x04, 0x04 },
	{ "SCAAPERR",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_df1pcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DF1PCISTAT_parse_table, 8, "DF1PCISTAT",
	    0xa1, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SGPCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "RDPERR",		0x04, 0x04 },
	{ "SCAAPERR",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_sgpcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SGPCISTAT_parse_table, 7, "SGPCISTAT",
	    0xa2, regvalue, cur_col, wrap));
}

int
ahd_reg1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "REG1",
	    0xa2, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMCPCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "TWATERR",		0x02, 0x02 },
	{ "RDPERR",		0x04, 0x04 },
	{ "SCAAPERR",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_cmcpcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMCPCISTAT_parse_table, 8, "CMCPCISTAT",
	    0xa3, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t OVLYPCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "RDPERR",		0x04, 0x04 },
	{ "SCAAPERR",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_ovlypcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(OVLYPCISTAT_parse_table, 7, "OVLYPCISTAT",
	    0xa4, regvalue, cur_col, wrap));
}

int
ahd_reg_isr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "REG_ISR",
	    0xa4, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SG_STATE_parse_table[] = {
	{ "SEGS_AVAIL",		0x01, 0x01 },
	{ "LOADING_NEEDED",	0x02, 0x02 },
	{ "FETCH_INPROG",	0x04, 0x04 }
};

int
ahd_sg_state_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SG_STATE_parse_table, 3, "SG_STATE",
	    0xa6, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t MSIPCISTAT_parse_table[] = {
	{ "DPR",		0x01, 0x01 },
	{ "TWATERR",		0x02, 0x02 },
	{ "CLRPENDMSI",		0x08, 0x08 },
	{ "RTA",		0x10, 0x10 },
	{ "RMA",		0x20, 0x20 },
	{ "SSE",		0x40, 0x40 }
};

int
ahd_msipcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(MSIPCISTAT_parse_table, 6, "MSIPCISTAT",
	    0xa6, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t TARGPCISTAT_parse_table[] = {
	{ "TWATERR",		0x02, 0x02 },
	{ "STA",		0x08, 0x08 },
	{ "SSE",		0x40, 0x40 },
	{ "DPE",		0x80, 0x80 }
};

int
ahd_targpcistat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(TARGPCISTAT_parse_table, 4, "TARGPCISTAT",
	    0xa7, regvalue, cur_col, wrap));
}

int
ahd_data_count_odd_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DATA_COUNT_ODD",
	    0xa7, regvalue, cur_col, wrap));
}

int
ahd_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCBPTR",
	    0xa8, regvalue, cur_col, wrap));
}

int
ahd_ccscbacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSCBACNT",
	    0xab, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCBAUTOPTR_parse_table[] = {
	{ "SCBPTR_OFF",		0x07, 0x07 },
	{ "SCBPTR_ADDR",	0x38, 0x38 },
	{ "AUSCBPTR_EN",	0x80, 0x80 }
};

int
ahd_scbautoptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCBAUTOPTR_parse_table, 3, "SCBAUTOPTR",
	    0xab, regvalue, cur_col, wrap));
}

int
ahd_ccsgaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSGADDR",
	    0xac, regvalue, cur_col, wrap));
}

int
ahd_ccscbaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSCBADDR",
	    0xac, regvalue, cur_col, wrap));
}

int
ahd_ccscbadr_bk_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSCBADR_BK",
	    0xac, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CMC_RAMBIST_parse_table[] = {
	{ "CMC_BUFFER_BIST_EN",	0x01, 0x01 },
	{ "CMC_BUFFER_BIST_FAIL",0x02, 0x02 },
	{ "SG_BIST_EN",		0x10, 0x10 },
	{ "SG_BIST_FAIL",	0x20, 0x20 },
	{ "SCBRAMBIST_FAIL",	0x40, 0x40 },
	{ "SG_ELEMENT_SIZE",	0x80, 0x80 }
};

int
ahd_cmc_rambist_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CMC_RAMBIST_parse_table, 6, "CMC_RAMBIST",
	    0xad, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CCSGCTL_parse_table[] = {
	{ "CCSGRESET",		0x01, 0x01 },
	{ "SG_FETCH_REQ",	0x02, 0x02 },
	{ "CCSGENACK",		0x08, 0x08 },
	{ "SG_CACHE_AVAIL",	0x10, 0x10 },
	{ "CCSGDONE",		0x80, 0x80 },
	{ "CCSGEN",		0x0c, 0x0c }
};

int
ahd_ccsgctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CCSGCTL_parse_table, 6, "CCSGCTL",
	    0xad, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t CCSCBCTL_parse_table[] = {
	{ "CCSCBRESET",		0x01, 0x01 },
	{ "CCSCBDIR",		0x04, 0x04 },
	{ "CCSCBEN",		0x08, 0x08 },
	{ "CCARREN",		0x10, 0x10 },
	{ "ARRDONE",		0x40, 0x40 },
	{ "CCSCBDONE",		0x80, 0x80 }
};

int
ahd_ccscbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(CCSCBCTL_parse_table, 6, "CCSCBCTL",
	    0xad, regvalue, cur_col, wrap));
}

int
ahd_ccsgram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSGRAM",
	    0xb0, regvalue, cur_col, wrap));
}

int
ahd_flexadr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FLEXADR",
	    0xb0, regvalue, cur_col, wrap));
}

int
ahd_ccscbram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CCSCBRAM",
	    0xb0, regvalue, cur_col, wrap));
}

int
ahd_flexcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FLEXCNT",
	    0xb3, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t FLEXDMASTAT_parse_table[] = {
	{ "FLEXDMADONE",	0x01, 0x01 },
	{ "FLEXDMAERR",		0x02, 0x02 }
};

int
ahd_flexdmastat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(FLEXDMASTAT_parse_table, 2, "FLEXDMASTAT",
	    0xb5, regvalue, cur_col, wrap));
}

int
ahd_flexdata_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FLEXDATA",
	    0xb6, regvalue, cur_col, wrap));
}

int
ahd_brddat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "BRDDAT",
	    0xb8, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t BRDCTL_parse_table[] = {
	{ "BRDSTB",		0x01, 0x01 },
	{ "BRDRW",		0x02, 0x02 },
	{ "BRDEN",		0x04, 0x04 },
	{ "BRDADDR",		0x38, 0x38 },
	{ "FLXARBREQ",		0x40, 0x40 },
	{ "FLXARBACK",		0x80, 0x80 }
};

int
ahd_brdctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(BRDCTL_parse_table, 6, "BRDCTL",
	    0xb9, regvalue, cur_col, wrap));
}

int
ahd_seeadr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SEEADR",
	    0xba, regvalue, cur_col, wrap));
}

int
ahd_seedat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SEEDAT",
	    0xbc, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEECTL_parse_table[] = {
	{ "SEEOP_ERAL",		0x40, 0x70 },
	{ "SEEOP_WRITE",	0x50, 0x70 },
	{ "SEEOP_READ",		0x60, 0x70 },
	{ "SEEOP_ERASE",	0x70, 0x70 },
	{ "SEESTART",		0x01, 0x01 },
	{ "SEERST",		0x02, 0x02 },
	{ "SEEOPCODE",		0x70, 0x70 },
	{ "SEEOP_EWEN",		0x40, 0x40 },
	{ "SEEOP_WALL",		0x40, 0x40 },
	{ "SEEOP_EWDS",		0x40, 0x40 }
};

int
ahd_seectl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEECTL_parse_table, 10, "SEECTL",
	    0xbe, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEESTAT_parse_table[] = {
	{ "SEESTART",		0x01, 0x01 },
	{ "SEEBUSY",		0x02, 0x02 },
	{ "SEEARBACK",		0x04, 0x04 },
	{ "LDALTID_L",		0x08, 0x08 },
	{ "SEEOPCODE",		0x70, 0x70 },
	{ "INIT_DONE",		0x80, 0x80 }
};

int
ahd_seestat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEESTAT_parse_table, 6, "SEESTAT",
	    0xbe, regvalue, cur_col, wrap));
}

int
ahd_scbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCBCNT",
	    0xbf, regvalue, cur_col, wrap));
}

int
ahd_dfwaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFWADDR",
	    0xc0, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSPFLTRCTL_parse_table[] = {
	{ "DSPFCNTSEL",		0x0f, 0x0f },
	{ "EDGESENSE",		0x10, 0x10 },
	{ "FLTRDISABLE",	0x20, 0x20 }
};

int
ahd_dspfltrctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSPFLTRCTL_parse_table, 3, "DSPFLTRCTL",
	    0xc0, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSPDATACTL_parse_table[] = {
	{ "XMITOFFSTDIS",	0x02, 0x02 },
	{ "RCVROFFSTDIS",	0x04, 0x04 },
	{ "DESQDIS",		0x10, 0x10 },
	{ "BYPASSENAB",		0x80, 0x80 }
};

int
ahd_dspdatactl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSPDATACTL_parse_table, 4, "DSPDATACTL",
	    0xc1, regvalue, cur_col, wrap));
}

int
ahd_dfraddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFRADDR",
	    0xc2, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSPREQCTL_parse_table[] = {
	{ "MANREQDLY",		0x3f, 0x3f },
	{ "MANREQCTL",		0xc0, 0xc0 }
};

int
ahd_dspreqctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSPREQCTL_parse_table, 2, "DSPREQCTL",
	    0xc2, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSPACKCTL_parse_table[] = {
	{ "MANACKDLY",		0x3f, 0x3f },
	{ "MANACKCTL",		0xc0, 0xc0 }
};

int
ahd_dspackctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSPACKCTL_parse_table, 2, "DSPACKCTL",
	    0xc3, regvalue, cur_col, wrap));
}

int
ahd_dfdat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFDAT",
	    0xc4, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DSPSELECT_parse_table[] = {
	{ "DSPSEL",		0x1f, 0x1f },
	{ "AUTOINCEN",		0x80, 0x80 }
};

int
ahd_dspselect_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DSPSELECT_parse_table, 2, "DSPSELECT",
	    0xc4, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t WRTBIASCTL_parse_table[] = {
	{ "XMITMANVAL",		0x3f, 0x3f },
	{ "AUTOXBCDIS",		0x80, 0x80 }
};

int
ahd_wrtbiasctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(WRTBIASCTL_parse_table, 2, "WRTBIASCTL",
	    0xc5, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t RCVRBIOSCTL_parse_table[] = {
	{ "RCVRMANVAL",		0x3f, 0x3f },
	{ "AUTORBCDIS",		0x80, 0x80 }
};

int
ahd_rcvrbiosctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(RCVRBIOSCTL_parse_table, 2, "RCVRBIOSCTL",
	    0xc6, regvalue, cur_col, wrap));
}

int
ahd_wrtbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "WRTBIASCALC",
	    0xc7, regvalue, cur_col, wrap));
}

int
ahd_dfptrs_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFPTRS",
	    0xc8, regvalue, cur_col, wrap));
}

int
ahd_rcvrbiascalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "RCVRBIASCALC",
	    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 },
	{ "DFF_RAMBIST_FAIL",	0x04, 0x04 },
	{ "DFF_DIR_ERR",	0x08, 0x08 },
	{ "DFF_CIO_RD_RDY",	0x10, 0x10 },
	{ "DFF_CIO_WR_RDY",	0x20, 0x20 }
};

int
ahd_dfdbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DFDBCTL_parse_table, 6, "DFDBCTL",
	    0xcb, regvalue, cur_col, wrap));
}

int
ahd_dfscnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFSCNT",
	    0xcc, regvalue, cur_col, wrap));
}

int
ahd_dfbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DFBCNT",
	    0xce, regvalue, cur_col, wrap));
}

int
ahd_ovlyaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "OVLYADDR",
	    0xd4, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQCTL0_parse_table[] = {
	{ "LOADRAM",		0x01, 0x01 },
	{ "SEQRESET",		0x02, 0x02 },
	{ "STEP",		0x04, 0x04 },
	{ "BRKADRINTEN",	0x08, 0x08 },
	{ "FASTMODE",		0x10, 0x10 },
	{ "FAILDIS",		0x20, 0x20 },
	{ "PAUSEDIS",		0x40, 0x40 },
	{ "PERRORDIS",		0x80, 0x80 }
};

int
ahd_seqctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQCTL0_parse_table, 8, "SEQCTL0",
	    0xd6, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQCTL1_parse_table[] = {
	{ "RAMBIST_EN",		0x01, 0x01 },
	{ "RAMBIST_FAIL",	0x02, 0x02 },
	{ "RAMBIST_DONE",	0x04, 0x04 },
	{ "OVRLAY_DATA_CHK",	0x08, 0x08 }
};

int
ahd_seqctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQCTL1_parse_table, 4, "SEQCTL1",
	    0xd7, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t FLAGS_parse_table[] = {
	{ "CARRY",		0x01, 0x01 },
	{ "ZERO",		0x02, 0x02 }
};

int
ahd_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(FLAGS_parse_table, 2, "FLAGS",
	    0xd8, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQINTCTL_parse_table[] = {
	{ "IRET",		0x01, 0x01 },
	{ "INTMASK1",		0x02, 0x02 },
	{ "INTMASK2",		0x04, 0x04 },
	{ "SCS_SEQ_INT1M0",	0x08, 0x08 },
	{ "SCS_SEQ_INT1M1",	0x10, 0x10 },
	{ "INT1_CONTEXT",	0x20, 0x20 },
	{ "INTVEC1DSL",		0x80, 0x80 }
};

int
ahd_seqintctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQINTCTL_parse_table, 7, "SEQINTCTL",
	    0xd9, regvalue, cur_col, wrap));
}

int
ahd_seqram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SEQRAM",
	    0xda, regvalue, cur_col, wrap));
}

int
ahd_prgmcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "PRGMCNT",
	    0xde, regvalue, cur_col, wrap));
}

int
ahd_accum_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ACCUM",
	    0xe0, regvalue, cur_col, wrap));
}

int
ahd_sindex_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SINDEX",
	    0xe2, regvalue, cur_col, wrap));
}

int
ahd_dindex_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DINDEX",
	    0xe4, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t BRKADDR1_parse_table[] = {
	{ "BRKDIS",		0x80, 0x80 }
};

int
ahd_brkaddr1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(BRKADDR1_parse_table, 1, "BRKADDR1",
	    0xe6, regvalue, cur_col, wrap));
}

int
ahd_brkaddr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "BRKADDR0",
	    0xe6, regvalue, cur_col, wrap));
}

int
ahd_allones_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ALLONES",
	    0xe8, regvalue, cur_col, wrap));
}

int
ahd_allzeros_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ALLZEROS",
	    0xea, regvalue, cur_col, wrap));
}

int
ahd_none_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NONE",
	    0xea, regvalue, cur_col, wrap));
}

int
ahd_sindir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SINDIR",
	    0xec, regvalue, cur_col, wrap));
}

int
ahd_dindir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DINDIR",
	    0xed, regvalue, cur_col, wrap));
}

int
ahd_function1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "FUNCTION1",
	    0xf0, regvalue, cur_col, wrap));
}

int
ahd_stack_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "STACK",
	    0xf2, regvalue, cur_col, wrap));
}

int
ahd_curaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "CURADDR",
	    0xf4, regvalue, cur_col, wrap));
}

int
ahd_intvec1_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INTVEC1_ADDR",
	    0xf4, regvalue, cur_col, wrap));
}

int
ahd_intvec2_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INTVEC2_ADDR",
	    0xf6, regvalue, cur_col, wrap));
}

int
ahd_lastaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LASTADDR",
	    0xf6, regvalue, cur_col, wrap));
}

int
ahd_longjmp_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LONGJMP_ADDR",
	    0xf8, regvalue, cur_col, wrap));
}

int
ahd_accum_save_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ACCUM_SAVE",
	    0xfa, regvalue, cur_col, wrap));
}

int
ahd_waiting_scb_tails_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "WAITING_SCB_TAILS",
	    0x100, regvalue, cur_col, wrap));
}

int
ahd_ahd_pci_config_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "AHD_PCI_CONFIG_BASE",
	    0x100, regvalue, cur_col, wrap));
}

int
ahd_sram_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SRAM_BASE",
	    0x100, regvalue, cur_col, wrap));
}

int
ahd_waiting_tid_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "WAITING_TID_HEAD",
	    0x120, regvalue, cur_col, wrap));
}

int
ahd_waiting_tid_tail_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "WAITING_TID_TAIL",
	    0x122, regvalue, cur_col, wrap));
}

int
ahd_next_queued_scb_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "NEXT_QUEUED_SCB_ADDR",
	    0x124, regvalue, cur_col, wrap));
}

int
ahd_complete_scb_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "COMPLETE_SCB_HEAD",
	    0x128, regvalue, cur_col, wrap));
}

int
ahd_complete_scb_dmainprog_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "COMPLETE_SCB_DMAINPROG_HEAD",
	    0x12a, regvalue, cur_col, wrap));
}

int
ahd_complete_dma_scb_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "COMPLETE_DMA_SCB_HEAD",
	    0x12c, regvalue, cur_col, wrap));
}

int
ahd_qfreeze_count_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "QFREEZE_COUNT",
	    0x12e, regvalue, cur_col, wrap));
}

int
ahd_saved_mode_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SAVED_MODE",
	    0x130, regvalue, cur_col, wrap));
}

int
ahd_msg_out_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MSG_OUT",
	    0x131, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t DMAPARAMS_parse_table[] = {
	{ "FIFORESET",		0x01, 0x01 },
	{ "FIFOFLUSH",		0x02, 0x02 },
	{ "DIRECTION",		0x04, 0x04 },
	{ "HDMAEN",		0x08, 0x08 },
	{ "HDMAENACK",		0x08, 0x08 },
	{ "SDMAEN",		0x10, 0x10 },
	{ "SDMAENACK",		0x10, 0x10 },
	{ "SCSIEN",		0x20, 0x20 },
	{ "WIDEODD",		0x40, 0x40 },
	{ "PRELOADEN",		0x80, 0x80 }
};

int
ahd_dmaparams_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(DMAPARAMS_parse_table, 10, "DMAPARAMS",
	    0x132, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQ_FLAGS_parse_table[] = {
	{ "NO_DISCONNECT",	0x01, 0x01 },
	{ "SPHASE_PENDING",	0x02, 0x02 },
	{ "DPHASE_PENDING",	0x04, 0x04 },
	{ "CMDPHASE_PENDING",	0x08, 0x08 },
	{ "TARG_CMD_PENDING",	0x10, 0x10 },
	{ "DPHASE",		0x20, 0x20 },
	{ "NO_CDB_SENT",	0x40, 0x40 },
	{ "TARGET_CMD_IS_TAGGED",0x40, 0x40 },
	{ "NOT_IDENTIFIED",	0x80, 0x80 }
};

int
ahd_seq_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQ_FLAGS_parse_table, 9, "SEQ_FLAGS",
	    0x133, regvalue, cur_col, wrap));
}

int
ahd_saved_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SAVED_SCSIID",
	    0x134, regvalue, cur_col, wrap));
}

int
ahd_saved_lun_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SAVED_LUN",
	    0x135, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t LASTPHASE_parse_table[] = {
	{ "P_DATAOUT",		0x00, 0xe0 },
	{ "P_DATAOUT_DT",	0x20, 0xe0 },
	{ "P_DATAIN",		0x40, 0xe0 },
	{ "P_DATAIN_DT",	0x60, 0xe0 },
	{ "P_COMMAND",		0x80, 0xe0 },
	{ "P_MESGOUT",		0xa0, 0xe0 },
	{ "P_STATUS",		0xc0, 0xe0 },
	{ "P_MESGIN",		0xe0, 0xe0 },
	{ "P_BUSFREE",		0x01, 0x01 },
	{ "MSGI",		0x20, 0x20 },
	{ "IOI",		0x40, 0x40 },
	{ "CDI",		0x80, 0x80 },
	{ "PHASE_MASK",		0xe0, 0xe0 }
};

int
ahd_lastphase_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(LASTPHASE_parse_table, 13, "LASTPHASE",
	    0x136, regvalue, cur_col, wrap));
}

int
ahd_qoutfifo_entry_valid_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "QOUTFIFO_ENTRY_VALID_TAG",
	    0x137, regvalue, cur_col, wrap));
}

int
ahd_shared_data_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SHARED_DATA_ADDR",
	    0x138, regvalue, cur_col, wrap));
}

int
ahd_qoutfifo_next_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "QOUTFIFO_NEXT_ADDR",
	    0x13c, regvalue, cur_col, wrap));
}

int
ahd_kernel_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "KERNEL_TQINPOS",
	    0x140, regvalue, cur_col, wrap));
}

int
ahd_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "TQINPOS",
	    0x141, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t ARG_1_parse_table[] = {
	{ "CONT_MSG_LOOP_TARG",	0x02, 0x02 },
	{ "CONT_MSG_LOOP_READ",	0x03, 0x03 },
	{ "CONT_MSG_LOOP_WRITE",0x04, 0x04 },
	{ "EXIT_MSG_LOOP",	0x08, 0x08 },
	{ "MSGOUT_PHASEMIS",	0x10, 0x10 },
	{ "SEND_REJ",		0x20, 0x20 },
	{ "SEND_SENSE",		0x40, 0x40 },
	{ "SEND_MSG",		0x80, 0x80 }
};

int
ahd_arg_1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(ARG_1_parse_table, 8, "ARG_1",
	    0x142, regvalue, cur_col, wrap));
}

int
ahd_arg_2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ARG_2",
	    0x143, regvalue, cur_col, wrap));
}

int
ahd_last_msg_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "LAST_MSG",
	    0x144, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCSISEQ_TEMPLATE_parse_table[] = {
	{ "ALTSTIM",		0x01, 0x01 },
	{ "ENAUTOATNP",		0x02, 0x02 },
	{ "MANUALP",		0x0c, 0x0c },
	{ "ENRSELI",		0x10, 0x10 },
	{ "ENSELI",		0x20, 0x20 },
	{ "MANUALCTL",		0x40, 0x40 }
};

int
ahd_scsiseq_template_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCSISEQ_TEMPLATE_parse_table, 6, "SCSISEQ_TEMPLATE",
	    0x145, regvalue, cur_col, wrap));
}

int
ahd_initiator_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INITIATOR_TAG",
	    0x146, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
	{ "TARGET_MSG_PENDING",	0x02, 0x02 },
	{ "SELECTOUT_QFROZEN",	0x04, 0x04 }
};

int
ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2",
	    0x147, regvalue, cur_col, wrap));
}

int
ahd_allocfifo_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "ALLOCFIFO_SCBPTR",
	    0x148, regvalue, cur_col, wrap));
}

int
ahd_int_coalescing_timer_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INT_COALESCING_TIMER",
	    0x14a, regvalue, cur_col, wrap));
}

int
ahd_int_coalescing_maxcmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INT_COALESCING_MAXCMDS",
	    0x14c, regvalue, cur_col, wrap));
}

int
ahd_int_coalescing_mincmds_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INT_COALESCING_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_coalescing_cmdcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "INT_COALESCING_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",
	    0x152, regvalue, cur_col, wrap));
}

int
ahd_scb_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_BASE",
	    0x180, regvalue, cur_col, wrap));
}

int
ahd_scb_residual_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_RESIDUAL_DATACNT",
	    0x180, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_RESIDUAL_SGPTR_parse_table[] = {
	{ "SG_LIST_NULL",	0x01, 0x01 },
	{ "SG_OVERRUN_RESID",	0x02, 0x02 },
	{ "SG_ADDR_MASK",	0xf8, 0xf8 }
};

int
ahd_scb_residual_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCB_RESIDUAL_SGPTR_parse_table, 3, "SCB_RESIDUAL_SGPTR",
	    0x184, regvalue, cur_col, wrap));
}

int
ahd_scb_scsi_status_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_SCSI_STATUS",
	    0x188, regvalue, cur_col, wrap));
}

int
ahd_scb_target_phases_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_TARGET_PHASES",
	    0x189, regvalue, cur_col, wrap));
}

int
ahd_scb_target_data_dir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_TARGET_DATA_DIR",
	    0x18a, regvalue, cur_col, wrap));
}

int
ahd_scb_target_itag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_TARGET_ITAG",
	    0x18b, regvalue, cur_col, wrap));
}

int
ahd_scb_sense_busaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_SENSE_BUSADDR",
	    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_CONTROL_parse_table[] = {
	{ "SCB_TAG_TYPE",	0x03, 0x03 },
	{ "DISCONNECTED",	0x04, 0x04 },
	{ "STATUS_RCVD",	0x08, 0x08 },
	{ "MK_MESSAGE",		0x10, 0x10 },
	{ "TAG_ENB",		0x20, 0x20 },
	{ "DISCENB",		0x40, 0x40 },
	{ "TARGET_SCB",		0x80, 0x80 }
};

int
ahd_scb_control_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCB_CONTROL_parse_table, 7, "SCB_CONTROL",
	    0x192, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_SCSIID_parse_table[] = {
	{ "OID",		0x0f, 0x0f },
	{ "TID",		0xf0, 0xf0 }
};

int
ahd_scb_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCB_SCSIID_parse_table, 2, "SCB_SCSIID",
	    0x193, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_LUN_parse_table[] = {
	{ "LID",		0xff, 0xff }
};

int
ahd_scb_lun_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCB_LUN_parse_table, 1, "SCB_LUN",
	    0x194, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_TASK_ATTRIBUTE_parse_table[] = {
	{ "SCB_XFERLEN_ODD",	0x01, 0x01 }
};

int
ahd_scb_task_attribute_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(SCB_TASK_ATTRIBUTE_parse_table, 1, "SCB_TASK_ATTRIBUTE",
	    0x195, 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",
	    0x196, 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",
	    0x197, regvalue, cur_col, wrap));
}

int
ahd_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_DATAPTR",
	    0x198, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_DATACNT_parse_table[] = {
	{ "SG_HIGH_ADDR_BITS",	0x7f, 0x7f },
	{ "SG_LAST_SEG",	0x80, 0x80 }
};

int
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",
	    0x1a0, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SCB_SGPTR_parse_table[] = {
	{ "SG_LIST_NULL",	0x01, 0x01 },
	{ "SG_FULL_RESID",	0x02, 0x02 },
	{ "SG_STATUS_VALID",	0x04, 0x04 }
};

int
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",
	    0x1a4, 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",
	    0x1a8, 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",
	    0x1ac, 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",
	    0x1ae, regvalue, cur_col, wrap));
}

int
ahd_scb_spare_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_SPARE",
	    0x1b0, regvalue, cur_col, wrap));
}

int
ahd_scb_disconnected_lists_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCB_DISCONNECTED_LISTS",
	    0x1b8, regvalue, cur_col, wrap));
}

