11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Workbit NinjaSCSI-32Bi/UDE PCI/CardBus SCSI Host Bus Adapter driver
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Debug routine
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This software may be used and distributed according to the terms of
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the GNU General Public License.
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Show the command data of a command
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char unknown[] = "UNKNOWN";
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char * group_0_commands[] = {
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 00-03 */ "Test Unit Ready", "Rezero Unit", unknown, "Request Sense",
1670f23fd66bc821a0e99647f70a809e277cc93c4cJustin P. Mattock/* 04-07 */ "Format Unit", "Read Block Limits", unknown, "Reassign Blocks",
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 08-0d */ "Read (6)", unknown, "Write (6)", "Seek (6)", unknown, unknown,
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 0e-12 */ unknown, "Read Reverse", "Write Filemarks", "Space", "Inquiry",
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 13-16 */ unknown, "Recover Buffered Data", "Mode Select", "Reserve",
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 17-1b */ "Release", "Copy", "Erase", "Mode Sense", "Start/Stop Unit",
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1c-1d */ "Receive Diagnostic", "Send Diagnostic",
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1e-1f */ "Prevent/Allow Medium Removal", unknown,
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char *group_1_commands[] = {
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 20-22 */  unknown, unknown, unknown,
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 23-28 */ unknown, unknown, "Read Capacity", unknown, unknown, "Read (10)",
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 29-2d */ unknown, "Write (10)", "Seek (10)", unknown, unknown,
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2e-31 */ "Write Verify","Verify", "Search High", "Search Equal",
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 32-34 */ "Search Low", "Set Limits", "Prefetch or Read Position",
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 35-37 */ "Synchronize Cache","Lock/Unlock Cache", "Read Defect Data",
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 38-3c */ "Medium Scan", "Compare","Copy Verify", "Write Buffer", "Read Buffer",
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3d-3f */ "Update Block", "Read Long",  "Write Long",
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char *group_2_commands[] = {
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 40-41 */ "Change Definition", "Write Same",
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 42-48 */ "Read Sub-Ch(cd)", "Read TOC", "Read Header(cd)", "Play Audio(cd)", unknown, "Play Audio MSF(cd)", "Play Audio Track/Index(cd)",
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 49-4f */ "Play Track Relative(10)(cd)", unknown, "Pause/Resume(cd)", "Log Select", "Log Sense", unknown, unknown,
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 50-55 */ unknown, unknown, unknown, unknown, unknown, "Mode Select (10)",
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 56-5b */ unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown,
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 5c-5f */ unknown, unknown, unknown,
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define group(opcode) (((opcode) >> 5) & 7)
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESERVED_GROUP  0
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VENDOR_GROUP    1
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NOTEXT_GROUP    2
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char **commands[] = {
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    group_0_commands, group_1_commands, group_2_commands,
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (const char **) RESERVED_GROUP, (const char **) RESERVED_GROUP,
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (const char **) NOTEXT_GROUP, (const char **) VENDOR_GROUP,
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (const char **) VENDOR_GROUP
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char reserved[] = "RESERVED";
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const char vendor[] = "VENDOR SPECIFIC";
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void print_opcodek(unsigned char opcode)
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	const char **table = commands[ group(opcode) ];
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch ((unsigned long) table) {
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case RESERVED_GROUP:
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("%s[%02x] ", reserved, opcode);
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case NOTEXT_GROUP:
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("%s(notext)[%02x] ", unknown, opcode);
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case VENDOR_GROUP:
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("%s[%02x] ", vendor, opcode);
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	default:
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (table[opcode & 0x1f] != unknown)
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			printk("%s[%02x] ", table[opcode & 0x1f], opcode);
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		else
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			printk("%s[%02x] ", unknown, opcode);
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void print_commandk (unsigned char *command)
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int i,s;
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//	printk(KERN_DEBUG);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	print_opcodek(command[0]);
91cadbd4a5e36dde7e6c49b587b2c419103c0b7218Harvey Harrison	/*printk(KERN_DEBUG "%s ", __func__);*/
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if ((command[0] >> 5) == 6 ||
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    (command[0] >> 5) == 7 ) {
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		s = 12; /* vender specific */
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		s = COMMAND_SIZE(command[0]);
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	for ( i = 1; i < s; ++i) {
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("%02x ", command[i]);
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch (s) {
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case 6:
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("LBA=%d len=%d",
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       (((unsigned int)command[1] & 0x0f) << 16) |
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ( (unsigned int)command[2]         <<  8) |
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ( (unsigned int)command[3]              ),
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       (unsigned int)command[4]
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			);
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case 10:
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("LBA=%d len=%d",
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[2] << 24) |
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[3] << 16) |
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[4] <<  8) |
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[5]      ),
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[7] <<  8) |
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[8]      )
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       );
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case 12:
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("LBA=%d len=%d",
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[2] << 24) |
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[3] << 16) |
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[4] <<  8) |
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[5]      ),
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[6] << 24) |
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[7] << 16) |
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[8] <<  8) |
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       ((unsigned int)command[9]      )
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		       );
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	default:
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("\n");
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void show_command(Scsi_Cmnd *SCpnt)
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	print_commandk(SCpnt->cmnd);
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void show_busphase(unsigned char stat)
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch(stat) {
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_COMMAND:
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_COMMAND\n");
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_MESSAGE_IN:
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_MESSAGE_IN\n");
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_MESSAGE_OUT:
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_MESSAGE_OUT\n");
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_DATA_IN:
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_DATA_IN\n");
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_DATA_OUT:
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_DATA_OUT\n");
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_STATUS:
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_STATUS\n");
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case BUSPHASE_SELECT:
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_SELECT\n");
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	default:
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk( "BUSPHASE_other: 0x%x\n", stat);
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void show_autophase(unsigned short i)
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("auto: 0x%x,", i);
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & COMMAND_PHASE) {
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" cmd");
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & DATA_IN_PHASE) {
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" din");
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & DATA_OUT_PHASE) {
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" dout");
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSGOUT_PHASE) {
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" mout");
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & STATUS_PHASE) {
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" stat");
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & ILLEGAL_PHASE) {
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" ill");
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & BUS_FREE_OCCUER) {
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" bfree-o");
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSG_IN_OCCUER) {
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" min-o");
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSG_OUT_OCCUER) {
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" mout-o");
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & SELECTION_TIMEOUT) {
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" sel");
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSGIN_00_VALID) {
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" m0");
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSGIN_02_VALID) {
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" m2");
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSGIN_03_VALID) {
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" m3");
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & MSGIN_04_VALID) {
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" m4");
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(i & AUTOSCSI_BUSY) {
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk(" busy");
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("\n");
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void nsp32_print_register(int base)
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!(NSP32_DEBUG_MASK & NSP32_SPECIAL_PRINT_REGISTER))
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("Phase=0x%x, ", nsp32_read1(base, SCSI_BUS_MONITOR));
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("OldPhase=0x%x, ", nsp32_index_read1(base, OLD_SCSI_PHASE));
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("syncreg=0x%x, ", nsp32_read1(base, SYNC_REG));
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("ackwidth=0x%x, ", nsp32_read1(base, ACK_WIDTH));
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("sgtpaddr=0x%lx, ", nsp32_read4(base, SGT_ADR));
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("scsioutlatch=0x%x, ", nsp32_read1(base, SCSI_OUT_LATCH_TARGET_ID));
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("msgout=0x%lx, ", nsp32_read4(base, SCSI_MSG_OUT));
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("miscrd=0x%x, ", nsp32_index_read2(base, MISC_WR));
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("seltimeout=0x%x, ", nsp32_read2(base, SEL_TIME_OUT));
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("sreqrate=0x%x, ", nsp32_read1(base, SREQ_SMPL_RATE));
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("transStatus=0x%x, ", nsp32_read2(base, TRANSFER_STATUS));
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("reselectid=0x%x, ", nsp32_read2(base, COMMAND_CONTROL));
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("arbit=0x%x, ", nsp32_read1(base, ARBIT_STATUS));
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("BmStart=0x%lx, ", nsp32_read4(base, BM_START_ADR));
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("BmCount=0x%lx, ", nsp32_read4(base, BM_CNT));
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("SackCnt=0x%lx, ", nsp32_read4(base, SACK_CNT));
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("SReqCnt=0x%lx, ", nsp32_read4(base, SREQ_CNT));
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("SavedSackCnt=0x%lx, ", nsp32_read4(base, SAVED_SACK_CNT));
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("ScsiBusControl=0x%x, ", nsp32_read1(base, SCSI_BUS_CONTROL));
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("FifoRestCnt=0x%x, ", nsp32_read2(base, FIFO_REST_CNT));
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("CdbIn=0x%x, ", nsp32_read1(base, SCSI_CSB_IN));
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	printk("\n");
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (0) {
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("execph=0x%x, ", nsp32_read2(base, SCSI_EXECUTE_PHASE));
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("IrqStatus=0x%x, ", nsp32_read2(base, IRQ_STATUS));
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		printk("\n");
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* end */
264