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

#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 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));
}

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));
}

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_dlcount_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DLCOUNT",
	    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));
}

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 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 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 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 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 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 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 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 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 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 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 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 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 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));
}

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));
}

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_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_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_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_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_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_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_scbhcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SCBHCNT",
	    0x84, 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));
}

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 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 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 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 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 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 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 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));
}

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));
}

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_dchseqbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "DCHSEQBCNT",
	    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));
}

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 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 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 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 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 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 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 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 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_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));
}

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));
}

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 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));
}

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));
}

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_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_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_skewcalc_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "SKEWCALC",
	    0xc9, 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));
}

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));
}

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));
}

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_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_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_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_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_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_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_complete_dma_scb_tail_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "COMPLETE_DMA_SCB_TAIL",
	    0x12e, regvalue, cur_col, wrap));
}

int
ahd_complete_on_qfreeze_head_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "COMPLETE_ON_QFREEZE_HEAD",
	    0x130, 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",
	    0x132, regvalue, cur_col, wrap));
}

int
ahd_kernel_qfreeze_count_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "KERNEL_QFREEZE_COUNT",
	    0x134, 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",
	    0x136, 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",
	    0x137, 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",
	    0x138, 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",
	    0x139, 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",
	    0x13a, 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",
	    0x13b, 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",
	    0x13c, 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",
	    0x13d, 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",
	    0x13e, 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",
	    0x13f, 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",
	    0x140, 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",
	    0x144, 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",
	    0x148, 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",
	    0x149, 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",
	    0x14a, 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",
	    0x14b, 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",
	    0x14c, regvalue, cur_col, wrap));
}

static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
	{ "PENDING_MK_MESSAGE",	0x01, 0x01 },
	{ "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, 3, "SEQ_FLAGS2",
	    0x14d, 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",
	    0x14e, 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",
	    0x150, 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",
	    0x152, 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",
	    0x153, 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",
	    0x154, 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",
	    0x156, 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",
	    0x157, 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",
	    0x158, regvalue, cur_col, wrap));
}

int
ahd_mk_message_scb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCB",
	    0x160, regvalue, cur_col, wrap));
}

int
ahd_mk_message_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCSIID",
	    0x162, 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));
}

