0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 static const char unknown[] = "UNKNOWN";
0013
0014 static const char * group_0_commands[] = {
0015 "Test Unit Ready", "Rezero Unit", unknown, "Request Sense",
0016 "Format Unit", "Read Block Limits", unknown, "Reassign Blocks",
0017 "Read (6)", unknown, "Write (6)", "Seek (6)", unknown, unknown,
0018 unknown, "Read Reverse", "Write Filemarks", "Space", "Inquiry",
0019 unknown, "Recover Buffered Data", "Mode Select", "Reserve",
0020 "Release", "Copy", "Erase", "Mode Sense", "Start/Stop Unit",
0021 "Receive Diagnostic", "Send Diagnostic",
0022 "Prevent/Allow Medium Removal", unknown,
0023 };
0024
0025
0026 static const char *group_1_commands[] = {
0027 unknown, unknown, unknown,
0028 unknown, unknown, "Read Capacity", unknown, unknown, "Read (10)",
0029 unknown, "Write (10)", "Seek (10)", unknown, unknown,
0030 "Write Verify","Verify", "Search High", "Search Equal",
0031 "Search Low", "Set Limits", "Prefetch or Read Position",
0032 "Synchronize Cache","Lock/Unlock Cache", "Read Defect Data",
0033 "Medium Scan", "Compare","Copy Verify", "Write Buffer", "Read Buffer",
0034 "Update Block", "Read Long", "Write Long",
0035 };
0036
0037
0038 static const char *group_2_commands[] = {
0039 "Change Definition", "Write Same",
0040 "Read Sub-Ch(cd)", "Read TOC", "Read Header(cd)", "Play Audio(cd)", unknown, "Play Audio MSF(cd)", "Play Audio Track/Index(cd)",
0041 "Play Track Relative(10)(cd)", unknown, "Pause/Resume(cd)", "Log Select", "Log Sense", unknown, unknown,
0042 unknown, unknown, unknown, unknown, unknown, "Mode Select (10)",
0043 unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown,
0044 unknown, unknown, unknown,
0045 };
0046
0047 #define group(opcode) (((opcode) >> 5) & 7)
0048
0049 #define RESERVED_GROUP 0
0050 #define VENDOR_GROUP 1
0051 #define NOTEXT_GROUP 2
0052
0053 static const char **commands[] = {
0054 group_0_commands, group_1_commands, group_2_commands,
0055 (const char **) RESERVED_GROUP, (const char **) RESERVED_GROUP,
0056 (const char **) NOTEXT_GROUP, (const char **) VENDOR_GROUP,
0057 (const char **) VENDOR_GROUP
0058 };
0059
0060 static const char reserved[] = "RESERVED";
0061 static const char vendor[] = "VENDOR SPECIFIC";
0062
0063 static void print_opcodek(unsigned char opcode)
0064 {
0065 const char **table = commands[ group(opcode) ];
0066
0067 switch ((unsigned long) table) {
0068 case RESERVED_GROUP:
0069 printk("%s[%02x] ", reserved, opcode);
0070 break;
0071 case NOTEXT_GROUP:
0072 printk("%s(notext)[%02x] ", unknown, opcode);
0073 break;
0074 case VENDOR_GROUP:
0075 printk("%s[%02x] ", vendor, opcode);
0076 break;
0077 default:
0078 if (table[opcode & 0x1f] != unknown)
0079 printk("%s[%02x] ", table[opcode & 0x1f], opcode);
0080 else
0081 printk("%s[%02x] ", unknown, opcode);
0082 break;
0083 }
0084 }
0085
0086 static void print_commandk (unsigned char *command)
0087 {
0088 int i,s;
0089
0090 print_opcodek(command[0]);
0091
0092 if ((command[0] >> 5) == 6 ||
0093 (command[0] >> 5) == 7 ) {
0094 s = 12;
0095 } else {
0096 s = COMMAND_SIZE(command[0]);
0097 }
0098
0099 for ( i = 1; i < s; ++i) {
0100 printk("%02x ", command[i]);
0101 }
0102
0103 switch (s) {
0104 case 6:
0105 printk("LBA=%d len=%d",
0106 (((unsigned int)command[1] & 0x0f) << 16) |
0107 ( (unsigned int)command[2] << 8) |
0108 ( (unsigned int)command[3] ),
0109 (unsigned int)command[4]
0110 );
0111 break;
0112 case 10:
0113 printk("LBA=%d len=%d",
0114 ((unsigned int)command[2] << 24) |
0115 ((unsigned int)command[3] << 16) |
0116 ((unsigned int)command[4] << 8) |
0117 ((unsigned int)command[5] ),
0118 ((unsigned int)command[7] << 8) |
0119 ((unsigned int)command[8] )
0120 );
0121 break;
0122 case 12:
0123 printk("LBA=%d len=%d",
0124 ((unsigned int)command[2] << 24) |
0125 ((unsigned int)command[3] << 16) |
0126 ((unsigned int)command[4] << 8) |
0127 ((unsigned int)command[5] ),
0128 ((unsigned int)command[6] << 24) |
0129 ((unsigned int)command[7] << 16) |
0130 ((unsigned int)command[8] << 8) |
0131 ((unsigned int)command[9] )
0132 );
0133 break;
0134 default:
0135 break;
0136 }
0137 printk("\n");
0138 }
0139
0140 static void show_command(struct scsi_cmnd *SCpnt)
0141 {
0142 print_commandk(SCpnt->cmnd);
0143 }
0144
0145 static void show_busphase(unsigned char stat)
0146 {
0147 switch(stat) {
0148 case BUSPHASE_COMMAND:
0149 printk( "BUSPHASE_COMMAND\n");
0150 break;
0151 case BUSPHASE_MESSAGE_IN:
0152 printk( "BUSPHASE_MESSAGE_IN\n");
0153 break;
0154 case BUSPHASE_MESSAGE_OUT:
0155 printk( "BUSPHASE_MESSAGE_OUT\n");
0156 break;
0157 case BUSPHASE_DATA_IN:
0158 printk( "BUSPHASE_DATA_IN\n");
0159 break;
0160 case BUSPHASE_DATA_OUT:
0161 printk( "BUSPHASE_DATA_OUT\n");
0162 break;
0163 case BUSPHASE_STATUS:
0164 printk( "BUSPHASE_STATUS\n");
0165 break;
0166 case BUSPHASE_SELECT:
0167 printk( "BUSPHASE_SELECT\n");
0168 break;
0169 default:
0170 printk( "BUSPHASE_other: 0x%x\n", stat);
0171 break;
0172 }
0173 }
0174
0175 static void show_autophase(unsigned short i)
0176 {
0177 printk("auto: 0x%x,", i);
0178
0179 if(i & COMMAND_PHASE) {
0180 printk(" cmd");
0181 }
0182 if(i & DATA_IN_PHASE) {
0183 printk(" din");
0184 }
0185 if(i & DATA_OUT_PHASE) {
0186 printk(" dout");
0187 }
0188 if(i & MSGOUT_PHASE) {
0189 printk(" mout");
0190 }
0191 if(i & STATUS_PHASE) {
0192 printk(" stat");
0193 }
0194 if(i & ILLEGAL_PHASE) {
0195 printk(" ill");
0196 }
0197 if(i & BUS_FREE_OCCUER) {
0198 printk(" bfree-o");
0199 }
0200 if(i & MSG_IN_OCCUER) {
0201 printk(" min-o");
0202 }
0203 if(i & MSG_OUT_OCCUER) {
0204 printk(" mout-o");
0205 }
0206 if(i & SELECTION_TIMEOUT) {
0207 printk(" sel");
0208 }
0209 if(i & MSGIN_00_VALID) {
0210 printk(" m0");
0211 }
0212 if(i & MSGIN_02_VALID) {
0213 printk(" m2");
0214 }
0215 if(i & MSGIN_03_VALID) {
0216 printk(" m3");
0217 }
0218 if(i & MSGIN_04_VALID) {
0219 printk(" m4");
0220 }
0221 if(i & AUTOSCSI_BUSY) {
0222 printk(" busy");
0223 }
0224
0225 printk("\n");
0226 }
0227
0228 static void nsp32_print_register(int base)
0229 {
0230 if (!(NSP32_DEBUG_MASK & NSP32_SPECIAL_PRINT_REGISTER))
0231 return;
0232
0233 printk("Phase=0x%x, ", nsp32_read1(base, SCSI_BUS_MONITOR));
0234 printk("OldPhase=0x%x, ", nsp32_index_read1(base, OLD_SCSI_PHASE));
0235 printk("syncreg=0x%x, ", nsp32_read1(base, SYNC_REG));
0236 printk("ackwidth=0x%x, ", nsp32_read1(base, ACK_WIDTH));
0237 printk("sgtpaddr=0x%lx, ", nsp32_read4(base, SGT_ADR));
0238 printk("scsioutlatch=0x%x, ", nsp32_read1(base, SCSI_OUT_LATCH_TARGET_ID));
0239 printk("msgout=0x%lx, ", nsp32_read4(base, SCSI_MSG_OUT));
0240 printk("miscrd=0x%x, ", nsp32_index_read2(base, MISC_WR));
0241 printk("seltimeout=0x%x, ", nsp32_read2(base, SEL_TIME_OUT));
0242 printk("sreqrate=0x%x, ", nsp32_read1(base, SREQ_SMPL_RATE));
0243 printk("transStatus=0x%x, ", nsp32_read2(base, TRANSFER_STATUS));
0244 printk("reselectid=0x%x, ", nsp32_read2(base, COMMAND_CONTROL));
0245 printk("arbit=0x%x, ", nsp32_read1(base, ARBIT_STATUS));
0246 printk("BmStart=0x%lx, ", nsp32_read4(base, BM_START_ADR));
0247 printk("BmCount=0x%lx, ", nsp32_read4(base, BM_CNT));
0248 printk("SackCnt=0x%lx, ", nsp32_read4(base, SACK_CNT));
0249 printk("SReqCnt=0x%lx, ", nsp32_read4(base, SREQ_CNT));
0250 printk("SavedSackCnt=0x%lx, ", nsp32_read4(base, SAVED_SACK_CNT));
0251 printk("ScsiBusControl=0x%x, ", nsp32_read1(base, SCSI_BUS_CONTROL));
0252 printk("FifoRestCnt=0x%x, ", nsp32_read2(base, FIFO_REST_CNT));
0253 printk("CdbIn=0x%x, ", nsp32_read1(base, SCSI_CSB_IN));
0254 printk("\n");
0255
0256 if (0) {
0257 printk("execph=0x%x, ", nsp32_read2(base, SCSI_EXECUTE_PHASE));
0258 printk("IrqStatus=0x%x, ", nsp32_read2(base, IRQ_STATUS));
0259 printk("\n");
0260 }
0261 }
0262
0263