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

#include "aic7xxx_osm.h"

static ahc_reg_parse_entry_t SCSISEQ_parse_table[] = {
	{ "SCSIRSTO",		0x01, 0x01 },
	{ "ENAUTOATNP",		0x02, 0x02 },
	{ "ENAUTOATNI",		0x04, 0x04 },
	{ "ENAUTOATNO",		0x08, 0x08 },
	{ "ENRSELI",		0x10, 0x10 },
	{ "ENSELI",		0x20, 0x20 },
	{ "ENSELO",		0x40, 0x40 },
	{ "TEMODE",		0x80, 0x80 }
};

int
ahc_scsiseq_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSISEQ_parse_table, 8, "SCSISEQ",
	    0x00, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SXFRCTL0_parse_table[] = {
	{ "CLRCHN",		0x02, 0x02 },
	{ "SCAMEN",		0x04, 0x04 },
	{ "SPIOEN",		0x08, 0x08 },
	{ "CLRSTCNT",		0x10, 0x10 },
	{ "FAST20",		0x20, 0x20 },
	{ "DFPEXP",		0x40, 0x40 },
	{ "DFON",		0x80, 0x80 }
};

int
ahc_sxfrctl0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SXFRCTL0_parse_table, 7, "SXFRCTL0",
	    0x01, regvalue, cur_col, wrap));
}

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

int
ahc_sxfrctl1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SXFRCTL1_parse_table, 7, "SXFRCTL1",
	    0x02, regvalue, cur_col, wrap));
}

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

int
ahc_scsisigo_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSISIGO_parse_table, 15, "SCSISIGO",
	    0x03, regvalue, cur_col, wrap));
}

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

int
ahc_scsisigi_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSISIGI_parse_table, 17, "SCSISIGI",
	    0x03, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCSIRATE_parse_table[] = {
	{ "SINGLE_EDGE",	0x10, 0x10 },
	{ "ENABLE_CRC",		0x40, 0x40 },
	{ "WIDEXFER",		0x80, 0x80 },
	{ "SXFR_ULTRA2",	0x0f, 0x0f },
	{ "SOFS",		0x0f, 0x0f },
	{ "SXFR",		0x70, 0x70 }
};

int
ahc_scsirate_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSIRATE_parse_table, 6, "SCSIRATE",
	    0x04, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCSIID_parse_table[] = {
	{ "TWIN_CHNLB",		0x80, 0x80 },
	{ "OID",		0x0f, 0x0f },
	{ "TWIN_TID",		0x70, 0x70 },
	{ "SOFS_ULTRA2",	0x7f, 0x7f },
	{ "TID",		0xf0, 0xf0 }
};

int
ahc_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSIID_parse_table, 5, "SCSIID",
	    0x05, regvalue, cur_col, wrap));
}

int
ahc_scsidatl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCSIDATL",
	    0x06, regvalue, cur_col, wrap));
}

int
ahc_scsidath_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCSIDATH",
	    0x07, regvalue, cur_col, wrap));
}

int
ahc_stcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "STCNT",
	    0x08, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t OPTIONMODE_parse_table[] = {
	{ "DIS_MSGIN_DUALEDGE",	0x01, 0x01 },
	{ "AUTO_MSGOUT_DE",	0x02, 0x02 },
	{ "SCSIDATL_IMGEN",	0x04, 0x04 },
	{ "EXPPHASEDIS",	0x08, 0x08 },
	{ "BUSFREEREV",		0x10, 0x10 },
	{ "ATNMGMNTEN",		0x20, 0x20 },
	{ "AUTOACKEN",		0x40, 0x40 },
	{ "AUTORATEEN",		0x80, 0x80 },
	{ "OPTIONMODE_DEFAULTS",0x03, 0x03 }
};

int
ahc_optionmode_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(OPTIONMODE_parse_table, 9, "OPTIONMODE",
	    0x08, regvalue, cur_col, wrap));
}

int
ahc_targcrccnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "TARGCRCCNT",
	    0x0a, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t CLRSINT0_parse_table[] = {
	{ "CLRSPIORDY",		0x02, 0x02 },
	{ "CLRSWRAP",		0x08, 0x08 },
	{ "CLRIOERR",		0x08, 0x08 },
	{ "CLRSELINGO",		0x10, 0x10 },
	{ "CLRSELDI",		0x20, 0x20 },
	{ "CLRSELDO",		0x40, 0x40 }
};

int
ahc_clrsint0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CLRSINT0_parse_table, 6, "CLRSINT0",
	    0x0b, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SSTAT0_parse_table[] = {
	{ "DMADONE",		0x01, 0x01 },
	{ "SPIORDY",		0x02, 0x02 },
	{ "SDONE",		0x04, 0x04 },
	{ "SWRAP",		0x08, 0x08 },
	{ "IOERR",		0x08, 0x08 },
	{ "SELINGO",		0x10, 0x10 },
	{ "SELDI",		0x20, 0x20 },
	{ "SELDO",		0x40, 0x40 },
	{ "TARGET",		0x80, 0x80 }
};

int
ahc_sstat0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SSTAT0_parse_table, 9, "SSTAT0",
	    0x0b, regvalue, cur_col, wrap));
}

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

int
ahc_clrsint1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CLRSINT1_parse_table, 7, "CLRSINT1",
	    0x0c, regvalue, cur_col, wrap));
}

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

int
ahc_sstat1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SSTAT1_parse_table, 8, "SSTAT1",
	    0x0c, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SSTAT2_parse_table[] = {
	{ "DUAL_EDGE_ERR",	0x01, 0x01 },
	{ "CRCREQERR",		0x02, 0x02 },
	{ "CRCENDERR",		0x04, 0x04 },
	{ "CRCVALERR",		0x08, 0x08 },
	{ "EXP_ACTIVE",		0x10, 0x10 },
	{ "SHVALID",		0x40, 0x40 },
	{ "OVERRUN",		0x80, 0x80 },
	{ "SFCNT",		0x1f, 0x1f }
};

int
ahc_sstat2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SSTAT2_parse_table, 8, "SSTAT2",
	    0x0d, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SSTAT3_parse_table[] = {
	{ "OFFCNT",		0x0f, 0x0f },
	{ "U2OFFCNT",		0x7f, 0x7f },
	{ "SCSICNT",		0xf0, 0xf0 }
};

int
ahc_sstat3_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SSTAT3_parse_table, 3, "SSTAT3",
	    0x0e, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCSIID_ULTRA2_parse_table[] = {
	{ "OID",		0x0f, 0x0f },
	{ "TID",		0xf0, 0xf0 }
};

int
ahc_scsiid_ultra2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSIID_ULTRA2_parse_table, 2, "SCSIID_ULTRA2",
	    0x0f, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SIMODE0_parse_table[] = {
	{ "ENDMADONE",		0x01, 0x01 },
	{ "ENSPIORDY",		0x02, 0x02 },
	{ "ENSDONE",		0x04, 0x04 },
	{ "ENSWRAP",		0x08, 0x08 },
	{ "ENIOERR",		0x08, 0x08 },
	{ "ENSELINGO",		0x10, 0x10 },
	{ "ENSELDI",		0x20, 0x20 },
	{ "ENSELDO",		0x40, 0x40 }
};

int
ahc_simode0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SIMODE0_parse_table, 8, "SIMODE0",
	    0x10, regvalue, cur_col, wrap));
}

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

int
ahc_simode1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SIMODE1_parse_table, 8, "SIMODE1",
	    0x11, regvalue, cur_col, wrap));
}

int
ahc_scsibusl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCSIBUSL",
	    0x12, regvalue, cur_col, wrap));
}

int
ahc_scsibush_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCSIBUSH",
	    0x13, regvalue, cur_col, wrap));
}

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

int
ahc_sxfrctl2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SXFRCTL2_parse_table, 3, "SXFRCTL2",
	    0x13, regvalue, cur_col, wrap));
}

int
ahc_shaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SHADDR",
	    0x14, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SELTIMER_parse_table[] = {
	{ "STAGE1",		0x01, 0x01 },
	{ "STAGE2",		0x02, 0x02 },
	{ "STAGE3",		0x04, 0x04 },
	{ "STAGE4",		0x08, 0x08 },
	{ "STAGE5",		0x10, 0x10 },
	{ "STAGE6",		0x20, 0x20 }
};

int
ahc_seltimer_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SELTIMER_parse_table, 6, "SELTIMER",
	    0x18, regvalue, cur_col, wrap));
}

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

int
ahc_selid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SELID_parse_table, 2, "SELID",
	    0x19, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCAMCTL_parse_table[] = {
	{ "DFLTTID",		0x10, 0x10 },
	{ "ALTSTIM",		0x20, 0x20 },
	{ "CLRSCAMSELID",	0x40, 0x40 },
	{ "ENSCAMSELO",		0x80, 0x80 },
	{ "SCAMLVL",		0x03, 0x03 }
};

int
ahc_scamctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCAMCTL_parse_table, 5, "SCAMCTL",
	    0x1a, regvalue, cur_col, wrap));
}

int
ahc_targid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "TARGID",
	    0x1b, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SPIOCAP_parse_table[] = {
	{ "SSPIOCPS",		0x01, 0x01 },
	{ "ROM",		0x02, 0x02 },
	{ "EEPROM",		0x04, 0x04 },
	{ "SEEPROM",		0x08, 0x08 },
	{ "EXT_BRDCTL",		0x10, 0x10 },
	{ "SOFTCMDEN",		0x20, 0x20 },
	{ "SOFT0",		0x40, 0x40 },
	{ "SOFT1",		0x80, 0x80 }
};

int
ahc_spiocap_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SPIOCAP_parse_table, 8, "SPIOCAP",
	    0x1b, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t BRDCTL_parse_table[] = {
	{ "BRDCTL0",		0x01, 0x01 },
	{ "BRDSTB_ULTRA2",	0x01, 0x01 },
	{ "BRDCTL1",		0x02, 0x02 },
	{ "BRDRW_ULTRA2",	0x02, 0x02 },
	{ "BRDRW",		0x04, 0x04 },
	{ "BRDDAT2",		0x04, 0x04 },
	{ "BRDCS",		0x08, 0x08 },
	{ "BRDDAT3",		0x08, 0x08 },
	{ "BRDSTB",		0x10, 0x10 },
	{ "BRDDAT4",		0x10, 0x10 },
	{ "BRDDAT5",		0x20, 0x20 },
	{ "BRDDAT6",		0x40, 0x40 },
	{ "BRDDAT7",		0x80, 0x80 }
};

int
ahc_brdctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(BRDCTL_parse_table, 13, "BRDCTL",
	    0x1d, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SEECTL_parse_table[] = {
	{ "SEEDI",		0x01, 0x01 },
	{ "SEEDO",		0x02, 0x02 },
	{ "SEECK",		0x04, 0x04 },
	{ "SEECS",		0x08, 0x08 },
	{ "SEERDY",		0x10, 0x10 },
	{ "SEEMS",		0x20, 0x20 },
	{ "EXTARBREQ",		0x40, 0x40 },
	{ "EXTARBACK",		0x80, 0x80 }
};

int
ahc_seectl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEECTL_parse_table, 8, "SEECTL",
	    0x1e, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SBLKCTL_parse_table[] = {
	{ "XCVR",		0x01, 0x01 },
	{ "SELWIDE",		0x02, 0x02 },
	{ "ENAB20",		0x04, 0x04 },
	{ "SELBUSB",		0x08, 0x08 },
	{ "ENAB40",		0x08, 0x08 },
	{ "AUTOFLUSHDIS",	0x20, 0x20 },
	{ "DIAGLEDON",		0x40, 0x40 },
	{ "DIAGLEDEN",		0x80, 0x80 }
};

int
ahc_sblkctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SBLKCTL_parse_table, 8, "SBLKCTL",
	    0x1f, regvalue, cur_col, wrap));
}

int
ahc_busy_targets_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "BUSY_TARGETS",
	    0x20, regvalue, cur_col, wrap));
}

int
ahc_ultra_enb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "ULTRA_ENB",
	    0x30, regvalue, cur_col, wrap));
}

int
ahc_disc_dsb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DISC_DSB",
	    0x32, regvalue, cur_col, wrap));
}

int
ahc_cmdsize_table_tail_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CMDSIZE_TABLE_TAIL",
	    0x34, regvalue, cur_col, wrap));
}

int
ahc_mwi_residual_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "MWI_RESIDUAL",
	    0x38, regvalue, cur_col, wrap));
}

int
ahc_next_queued_scb_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "NEXT_QUEUED_SCB",
	    0x39, regvalue, cur_col, wrap));
}

int
ahc_msg_out_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "MSG_OUT",
	    0x3a, regvalue, cur_col, wrap));
}

static ahc_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
ahc_dmaparams_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DMAPARAMS_parse_table, 10, "DMAPARAMS",
	    0x3b, regvalue, cur_col, wrap));
}

static ahc_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
ahc_seq_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEQ_FLAGS_parse_table, 9, "SEQ_FLAGS",
	    0x3c, regvalue, cur_col, wrap));
}

int
ahc_saved_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SAVED_SCSIID",
	    0x3d, regvalue, cur_col, wrap));
}

int
ahc_saved_lun_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SAVED_LUN",
	    0x3e, regvalue, cur_col, wrap));
}

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

int
ahc_lastphase_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(LASTPHASE_parse_table, 11, "LASTPHASE",
	    0x3f, regvalue, cur_col, wrap));
}

int
ahc_waiting_scbh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "WAITING_SCBH",
	    0x40, regvalue, cur_col, wrap));
}

int
ahc_disconnected_scbh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DISCONNECTED_SCBH",
	    0x41, regvalue, cur_col, wrap));
}

int
ahc_free_scbh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "FREE_SCBH",
	    0x42, regvalue, cur_col, wrap));
}

int
ahc_complete_scbh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "COMPLETE_SCBH",
	    0x43, regvalue, cur_col, wrap));
}

int
ahc_hscb_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "HSCB_ADDR",
	    0x44, regvalue, cur_col, wrap));
}

int
ahc_shared_data_addr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SHARED_DATA_ADDR",
	    0x48, regvalue, cur_col, wrap));
}

int
ahc_kernel_qinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "KERNEL_QINPOS",
	    0x4c, regvalue, cur_col, wrap));
}

int
ahc_qinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QINPOS",
	    0x4d, regvalue, cur_col, wrap));
}

int
ahc_qoutpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QOUTPOS",
	    0x4e, regvalue, cur_col, wrap));
}

int
ahc_kernel_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "KERNEL_TQINPOS",
	    0x4f, regvalue, cur_col, wrap));
}

int
ahc_tqinpos_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "TQINPOS",
	    0x50, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t ARG_1_parse_table[] = {
	{ "CONT_TARG_SESSION",	0x02, 0x02 },
	{ "CONT_MSG_LOOP",	0x04, 0x04 },
	{ "EXIT_MSG_LOOP",	0x08, 0x08 },
	{ "MSGOUT_PHASEMIS",	0x10, 0x10 },
	{ "SEND_REJ",		0x20, 0x20 },
	{ "SEND_SENSE",		0x40, 0x40 },
	{ "SEND_MSG",		0x80, 0x80 }
};

int
ahc_arg_1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(ARG_1_parse_table, 7, "ARG_1",
	    0x51, regvalue, cur_col, wrap));
}

int
ahc_arg_2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "ARG_2",
	    0x52, regvalue, cur_col, wrap));
}

int
ahc_last_msg_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "LAST_MSG",
	    0x53, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCSISEQ_TEMPLATE_parse_table[] = {
	{ "ENAUTOATNP",		0x02, 0x02 },
	{ "ENAUTOATNI",		0x04, 0x04 },
	{ "ENAUTOATNO",		0x08, 0x08 },
	{ "ENRSELI",		0x10, 0x10 },
	{ "ENSELI",		0x20, 0x20 },
	{ "ENSELO",		0x40, 0x40 }
};

int
ahc_scsiseq_template_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSISEQ_TEMPLATE_parse_table, 6, "SCSISEQ_TEMPLATE",
	    0x54, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t HA_274_BIOSGLOBAL_parse_table[] = {
	{ "HA_274_EXTENDED_TRANS",0x01, 0x01 }
};

int
ahc_ha_274_biosglobal_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(HA_274_BIOSGLOBAL_parse_table, 1, "HA_274_BIOSGLOBAL",
	    0x56, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = {
	{ "SCB_DMA",		0x01, 0x01 },
	{ "TARGET_MSG_PENDING",	0x02, 0x02 }
};

int
ahc_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2",
	    0x57, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCSICONF_parse_table[] = {
	{ "ENSPCHK",		0x20, 0x20 },
	{ "RESET_SCSI",		0x40, 0x40 },
	{ "TERM_ENB",		0x80, 0x80 },
	{ "HSCSIID",		0x07, 0x07 },
	{ "HWSCSIID",		0x0f, 0x0f }
};

int
ahc_scsiconf_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSICONF_parse_table, 5, "SCSICONF",
	    0x5a, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t INTDEF_parse_table[] = {
	{ "EDGE_TRIG",		0x80, 0x80 },
	{ "VECTOR",		0x0f, 0x0f }
};

int
ahc_intdef_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(INTDEF_parse_table, 2, "INTDEF",
	    0x5c, regvalue, cur_col, wrap));
}

int
ahc_hostconf_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "HOSTCONF",
	    0x5d, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t HA_274_BIOSCTRL_parse_table[] = {
	{ "CHANNEL_B_PRIMARY",	0x08, 0x08 },
	{ "BIOSMODE",		0x30, 0x30 },
	{ "BIOSDISABLED",	0x30, 0x30 }
};

int
ahc_ha_274_biosctrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(HA_274_BIOSCTRL_parse_table, 3, "HA_274_BIOSCTRL",
	    0x5f, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SEQCTL_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
ahc_seqctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEQCTL_parse_table, 8, "SEQCTL",
	    0x60, regvalue, cur_col, wrap));
}

int
ahc_seqram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SEQRAM",
	    0x61, regvalue, cur_col, wrap));
}

int
ahc_seqaddr0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SEQADDR0",
	    0x62, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SEQADDR1_parse_table[] = {
	{ "SEQADDR1_MASK",	0x01, 0x01 }
};

int
ahc_seqaddr1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEQADDR1_parse_table, 1, "SEQADDR1",
	    0x63, regvalue, cur_col, wrap));
}

int
ahc_accum_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "ACCUM",
	    0x64, regvalue, cur_col, wrap));
}

int
ahc_sindex_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SINDEX",
	    0x65, regvalue, cur_col, wrap));
}

int
ahc_dindex_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DINDEX",
	    0x66, regvalue, cur_col, wrap));
}

int
ahc_allones_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "ALLONES",
	    0x69, regvalue, cur_col, wrap));
}

int
ahc_allzeros_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "ALLZEROS",
	    0x6a, regvalue, cur_col, wrap));
}

int
ahc_none_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "NONE",
	    0x6a, regvalue, cur_col, wrap));
}

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

int
ahc_flags_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(FLAGS_parse_table, 2, "FLAGS",
	    0x6b, regvalue, cur_col, wrap));
}

int
ahc_sindir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SINDIR",
	    0x6c, regvalue, cur_col, wrap));
}

int
ahc_dindir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DINDIR",
	    0x6d, regvalue, cur_col, wrap));
}

int
ahc_function1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "FUNCTION1",
	    0x6e, regvalue, cur_col, wrap));
}

int
ahc_stack_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "STACK",
	    0x6f, regvalue, cur_col, wrap));
}

int
ahc_targ_offset_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "TARG_OFFSET",
	    0x70, regvalue, cur_col, wrap));
}

int
ahc_sram_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SRAM_BASE",
	    0x70, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t BCTL_parse_table[] = {
	{ "ENABLE",		0x01, 0x01 },
	{ "ACE",		0x08, 0x08 }
};

int
ahc_bctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(BCTL_parse_table, 2, "BCTL",
	    0x84, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t DSCOMMAND0_parse_table[] = {
	{ "CIOPARCKEN",		0x01, 0x01 },
	{ "USCBSIZE32",		0x02, 0x02 },
	{ "RAMPS",		0x04, 0x04 },
	{ "INTSCBRAMSEL",	0x08, 0x08 },
	{ "EXTREQLCK",		0x10, 0x10 },
	{ "MPARCKEN",		0x20, 0x20 },
	{ "DPARCKEN",		0x40, 0x40 },
	{ "CACHETHEN",		0x80, 0x80 }
};

int
ahc_dscommand0_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DSCOMMAND0_parse_table, 8, "DSCOMMAND0",
	    0x84, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t BUSTIME_parse_table[] = {
	{ "BON",		0x0f, 0x0f },
	{ "BOFF",		0xf0, 0xf0 }
};

int
ahc_bustime_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(BUSTIME_parse_table, 2, "BUSTIME",
	    0x85, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t DSCOMMAND1_parse_table[] = {
	{ "HADDLDSEL0",		0x01, 0x01 },
	{ "HADDLDSEL1",		0x02, 0x02 },
	{ "DSLATT",		0xfc, 0xfc }
};

int
ahc_dscommand1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DSCOMMAND1_parse_table, 3, "DSCOMMAND1",
	    0x85, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t BUSSPD_parse_table[] = {
	{ "STBON",		0x07, 0x07 },
	{ "STBOFF",		0x38, 0x38 },
	{ "DFTHRSH_75",		0x80, 0x80 },
	{ "DFTHRSH",		0xc0, 0xc0 },
	{ "DFTHRSH_100",	0xc0, 0xc0 }
};

int
ahc_busspd_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(BUSSPD_parse_table, 5, "BUSSPD",
	    0x86, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t HS_MAILBOX_parse_table[] = {
	{ "SEQ_MAILBOX",	0x0f, 0x0f },
	{ "HOST_TQINPOS",	0x80, 0x80 },
	{ "HOST_MAILBOX",	0xf0, 0xf0 }
};

int
ahc_hs_mailbox_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(HS_MAILBOX_parse_table, 3, "HS_MAILBOX",
	    0x86, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t DSPCISTATUS_parse_table[] = {
	{ "DFTHRSH_100",	0xc0, 0xc0 }
};

int
ahc_dspcistatus_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DSPCISTATUS_parse_table, 1, "DSPCISTATUS",
	    0x86, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t HCNTRL_parse_table[] = {
	{ "CHIPRST",		0x01, 0x01 },
	{ "CHIPRSTACK",		0x01, 0x01 },
	{ "INTEN",		0x02, 0x02 },
	{ "PAUSE",		0x04, 0x04 },
	{ "IRQMS",		0x08, 0x08 },
	{ "SWINT",		0x10, 0x10 },
	{ "POWRDN",		0x40, 0x40 }
};

int
ahc_hcntrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(HCNTRL_parse_table, 7, "HCNTRL",
	    0x87, regvalue, cur_col, wrap));
}

int
ahc_haddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "HADDR",
	    0x88, regvalue, cur_col, wrap));
}

int
ahc_hcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "HCNT",
	    0x8c, regvalue, cur_col, wrap));
}

int
ahc_scbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCBPTR",
	    0x90, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t INTSTAT_parse_table[] = {
	{ "SEQINT",		0x01, 0x01 },
	{ "CMDCMPLT",		0x02, 0x02 },
	{ "SCSIINT",		0x04, 0x04 },
	{ "BRKADRINT",		0x08, 0x08 },
	{ "BAD_PHASE",		0x01, 0x01 },
	{ "INT_PEND",		0x0f, 0x0f },
	{ "SEND_REJECT",	0x11, 0x11 },
	{ "PROTO_VIOLATION",	0x21, 0x21 },
	{ "NO_MATCH",		0x31, 0x31 },
	{ "IGN_WIDE_RES",	0x41, 0x41 },
	{ "PDATA_REINIT",	0x51, 0x51 },
	{ "HOST_MSG_LOOP",	0x61, 0x61 },
	{ "BAD_STATUS",		0x71, 0x71 },
	{ "PERR_DETECTED",	0x81, 0x81 },
	{ "DATA_OVERRUN",	0x91, 0x91 },
	{ "MKMSG_FAILED",	0xa1, 0xa1 },
	{ "MISSED_BUSFREE",	0xb1, 0xb1 },
	{ "SCB_MISMATCH",	0xc1, 0xc1 },
	{ "NO_FREE_SCB",	0xd1, 0xd1 },
	{ "OUT_OF_RANGE",	0xe1, 0xe1 },
	{ "SEQINT_MASK",	0xf1, 0xf1 }
};

int
ahc_intstat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(INTSTAT_parse_table, 21, "INTSTAT",
	    0x91, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t CLRINT_parse_table[] = {
	{ "CLRSEQINT",		0x01, 0x01 },
	{ "CLRCMDINT",		0x02, 0x02 },
	{ "CLRSCSIINT",		0x04, 0x04 },
	{ "CLRBRKADRINT",	0x08, 0x08 },
	{ "CLRPARERR",		0x10, 0x10 }
};

int
ahc_clrint_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CLRINT_parse_table, 5, "CLRINT",
	    0x92, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t ERROR_parse_table[] = {
	{ "ILLHADDR",		0x01, 0x01 },
	{ "ILLSADDR",		0x02, 0x02 },
	{ "ILLOPCODE",		0x04, 0x04 },
	{ "SQPARERR",		0x08, 0x08 },
	{ "DPARERR",		0x10, 0x10 },
	{ "MPARERR",		0x20, 0x20 },
	{ "PCIERRSTAT",		0x40, 0x40 },
	{ "CIOPARERR",		0x80, 0x80 }
};

int
ahc_error_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(ERROR_parse_table, 8, "ERROR",
	    0x92, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t DFCNTRL_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
ahc_dfcntrl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DFCNTRL_parse_table, 10, "DFCNTRL",
	    0x93, regvalue, cur_col, wrap));
}

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

int
ahc_dfstatus_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DFSTATUS_parse_table, 8, "DFSTATUS",
	    0x94, regvalue, cur_col, wrap));
}

int
ahc_dfwaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DFWADDR",
	    0x95, regvalue, cur_col, wrap));
}

int
ahc_dfraddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DFRADDR",
	    0x97, regvalue, cur_col, wrap));
}

int
ahc_dfdat_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "DFDAT",
	    0x99, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCBCNT_parse_table[] = {
	{ "SCBAUTO",		0x80, 0x80 },
	{ "SCBCNT_MASK",	0x1f, 0x1f }
};

int
ahc_scbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCBCNT_parse_table, 2, "SCBCNT",
	    0x9a, regvalue, cur_col, wrap));
}

int
ahc_qinfifo_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QINFIFO",
	    0x9b, regvalue, cur_col, wrap));
}

int
ahc_qincnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QINCNT",
	    0x9c, regvalue, cur_col, wrap));
}

int
ahc_qoutfifo_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QOUTFIFO",
	    0x9d, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t CRCCONTROL1_parse_table[] = {
	{ "TARGCRCCNTEN",	0x04, 0x04 },
	{ "TARGCRCENDEN",	0x08, 0x08 },
	{ "CRCREQCHKEN",	0x10, 0x10 },
	{ "CRCENDCHKEN",	0x20, 0x20 },
	{ "CRCVALCHKEN",	0x40, 0x40 },
	{ "CRCONSEEN",		0x80, 0x80 }
};

int
ahc_crccontrol1_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CRCCONTROL1_parse_table, 6, "CRCCONTROL1",
	    0x9d, regvalue, cur_col, wrap));
}

int
ahc_qoutcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "QOUTCNT",
	    0x9e, regvalue, cur_col, wrap));
}

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

int
ahc_scsiphase_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCSIPHASE_parse_table, 7, "SCSIPHASE",
	    0x9e, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SFUNCT_parse_table[] = {
	{ "ALT_MODE",		0x80, 0x80 }
};

int
ahc_sfunct_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SFUNCT_parse_table, 1, "SFUNCT",
	    0x9f, regvalue, cur_col, wrap));
}

int
ahc_scb_base_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_BASE",
	    0xa0, regvalue, cur_col, wrap));
}

int
ahc_scb_cdb_ptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_CDB_PTR",
	    0xa0, regvalue, cur_col, wrap));
}

int
ahc_scb_residual_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_RESIDUAL_SGPTR",
	    0xa4, regvalue, cur_col, wrap));
}

int
ahc_scb_scsi_status_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_SCSI_STATUS",
	    0xa8, regvalue, cur_col, wrap));
}

int
ahc_scb_target_phases_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_TARGET_PHASES",
	    0xa9, regvalue, cur_col, wrap));
}

int
ahc_scb_target_data_dir_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_TARGET_DATA_DIR",
	    0xaa, regvalue, cur_col, wrap));
}

int
ahc_scb_target_itag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_TARGET_ITAG",
	    0xab, regvalue, cur_col, wrap));
}

int
ahc_scb_dataptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_DATAPTR",
	    0xac, regvalue, cur_col, wrap));
}

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

int
ahc_scb_datacnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCB_DATACNT_parse_table, 2, "SCB_DATACNT",
	    0xb0, regvalue, cur_col, wrap));
}

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

int
ahc_scb_sgptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCB_SGPTR_parse_table, 3, "SCB_SGPTR",
	    0xb4, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCB_CONTROL_parse_table[] = {
	{ "DISCONNECTED",	0x04, 0x04 },
	{ "ULTRAENB",		0x08, 0x08 },
	{ "MK_MESSAGE",		0x10, 0x10 },
	{ "TAG_ENB",		0x20, 0x20 },
	{ "DISCENB",		0x40, 0x40 },
	{ "TARGET_SCB",		0x80, 0x80 },
	{ "STATUS_RCVD",	0x80, 0x80 },
	{ "SCB_TAG_TYPE",	0x03, 0x03 }
};

int
ahc_scb_control_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCB_CONTROL_parse_table, 8, "SCB_CONTROL",
	    0xb8, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCB_SCSIID_parse_table[] = {
	{ "TWIN_CHNLB",		0x80, 0x80 },
	{ "OID",		0x0f, 0x0f },
	{ "TWIN_TID",		0x70, 0x70 },
	{ "TID",		0xf0, 0xf0 }
};

int
ahc_scb_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCB_SCSIID_parse_table, 4, "SCB_SCSIID",
	    0xb9, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SCB_LUN_parse_table[] = {
	{ "SCB_XFERLEN_ODD",	0x80, 0x80 },
	{ "LID",		0x3f, 0x3f }
};

int
ahc_scb_lun_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SCB_LUN_parse_table, 2, "SCB_LUN",
	    0xba, regvalue, cur_col, wrap));
}

int
ahc_scb_tag_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_TAG",
	    0xbb, regvalue, cur_col, wrap));
}

int
ahc_scb_cdb_len_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_CDB_LEN",
	    0xbc, regvalue, cur_col, wrap));
}

int
ahc_scb_scsirate_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_SCSIRATE",
	    0xbd, regvalue, cur_col, wrap));
}

int
ahc_scb_scsioffset_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_SCSIOFFSET",
	    0xbe, regvalue, cur_col, wrap));
}

int
ahc_scb_next_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_NEXT",
	    0xbf, regvalue, cur_col, wrap));
}

int
ahc_scb_64_spare_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_64_SPARE",
	    0xc0, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SEECTL_2840_parse_table[] = {
	{ "DO_2840",		0x01, 0x01 },
	{ "CK_2840",		0x02, 0x02 },
	{ "CS_2840",		0x04, 0x04 }
};

int
ahc_seectl_2840_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SEECTL_2840_parse_table, 3, "SEECTL_2840",
	    0xc0, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t STATUS_2840_parse_table[] = {
	{ "DI_2840",		0x01, 0x01 },
	{ "EEPROM_TF",		0x80, 0x80 },
	{ "ADSEL",		0x1e, 0x1e },
	{ "BIOS_SEL",		0x60, 0x60 }
};

int
ahc_status_2840_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(STATUS_2840_parse_table, 4, "STATUS_2840",
	    0xc1, regvalue, cur_col, wrap));
}

int
ahc_scb_64_btt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCB_64_BTT",
	    0xd0, regvalue, cur_col, wrap));
}

int
ahc_cchaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCHADDR",
	    0xe0, regvalue, cur_col, wrap));
}

int
ahc_cchcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCHCNT",
	    0xe8, regvalue, cur_col, wrap));
}

int
ahc_ccsgram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSGRAM",
	    0xe9, regvalue, cur_col, wrap));
}

int
ahc_ccsgaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSGADDR",
	    0xea, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t CCSGCTL_parse_table[] = {
	{ "CCSGRESET",		0x01, 0x01 },
	{ "SG_FETCH_NEEDED",	0x02, 0x02 },
	{ "CCSGEN",		0x08, 0x08 },
	{ "CCSGDONE",		0x80, 0x80 }
};

int
ahc_ccsgctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CCSGCTL_parse_table, 4, "CCSGCTL",
	    0xeb, regvalue, cur_col, wrap));
}

int
ahc_ccscbram_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSCBRAM",
	    0xec, regvalue, cur_col, wrap));
}

int
ahc_ccscbaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSCBADDR",
	    0xed, regvalue, cur_col, wrap));
}

static ahc_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
ahc_ccscbctl_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(CCSCBCTL_parse_table, 6, "CCSCBCTL",
	    0xee, regvalue, cur_col, wrap));
}

int
ahc_ccscbcnt_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSCBCNT",
	    0xef, regvalue, cur_col, wrap));
}

int
ahc_scbbaddr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SCBBADDR",
	    0xf0, regvalue, cur_col, wrap));
}

int
ahc_ccscbptr_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "CCSCBPTR",
	    0xf1, regvalue, cur_col, wrap));
}

int
ahc_hnscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "HNSCB_QOFF",
	    0xf4, regvalue, cur_col, wrap));
}

int
ahc_snscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SNSCB_QOFF",
	    0xf6, regvalue, cur_col, wrap));
}

int
ahc_sdscb_qoff_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(NULL, 0, "SDSCB_QOFF",
	    0xf8, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t QOFF_CTLSTA_parse_table[] = {
	{ "SDSCB_ROLLOVER",	0x10, 0x10 },
	{ "SNSCB_ROLLOVER",	0x20, 0x20 },
	{ "SCB_AVAIL",		0x40, 0x40 },
	{ "SCB_QSIZE_256",	0x06, 0x06 },
	{ "SCB_QSIZE",		0x07, 0x07 }
};

int
ahc_qoff_ctlsta_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(QOFF_CTLSTA_parse_table, 5, "QOFF_CTLSTA",
	    0xfa, regvalue, cur_col, wrap));
}

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

int
ahc_dff_thrsh_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(DFF_THRSH_parse_table, 18, "DFF_THRSH",
	    0xfb, regvalue, cur_col, wrap));
}

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

int
ahc_sg_cache_shadow_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SG_CACHE_SHADOW_parse_table, 3, "SG_CACHE_SHADOW",
	    0xfc, regvalue, cur_col, wrap));
}

static ahc_reg_parse_entry_t SG_CACHE_PRE_parse_table[] = {
	{ "LAST_SEG_DONE",	0x01, 0x01 },
	{ "LAST_SEG",		0x02, 0x02 },
	{ "SG_ADDR_MASK",	0xf8, 0xf8 }
};

int
ahc_sg_cache_pre_print(u_int regvalue, u_int *cur_col, u_int wrap)
{
	return (ahc_print_register(SG_CACHE_PRE_parse_table, 3, "SG_CACHE_PRE",
	    0xfc, regvalue, cur_col, wrap));
}

