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

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

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

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

