This source file includes following definitions.
- print_opcodek
- print_commandk
- show_command
- show_busphase
- show_autophase
- nsp32_print_register
1
2
3
4
5
6
7
8
9
10
11
12 static const char unknown[] = "UNKNOWN";
13
14 static const char * group_0_commands[] = {
15 "Test Unit Ready", "Rezero Unit", unknown, "Request Sense",
16 "Format Unit", "Read Block Limits", unknown, "Reassign Blocks",
17 "Read (6)", unknown, "Write (6)", "Seek (6)", unknown, unknown,
18 unknown, "Read Reverse", "Write Filemarks", "Space", "Inquiry",
19 unknown, "Recover Buffered Data", "Mode Select", "Reserve",
20 "Release", "Copy", "Erase", "Mode Sense", "Start/Stop Unit",
21 "Receive Diagnostic", "Send Diagnostic",
22 "Prevent/Allow Medium Removal", unknown,
23 };
24
25
26 static const char *group_1_commands[] = {
27 unknown, unknown, unknown,
28 unknown, unknown, "Read Capacity", unknown, unknown, "Read (10)",
29 unknown, "Write (10)", "Seek (10)", unknown, unknown,
30 "Write Verify","Verify", "Search High", "Search Equal",
31 "Search Low", "Set Limits", "Prefetch or Read Position",
32 "Synchronize Cache","Lock/Unlock Cache", "Read Defect Data",
33 "Medium Scan", "Compare","Copy Verify", "Write Buffer", "Read Buffer",
34 "Update Block", "Read Long", "Write Long",
35 };
36
37
38 static const char *group_2_commands[] = {
39 "Change Definition", "Write Same",
40 "Read Sub-Ch(cd)", "Read TOC", "Read Header(cd)", "Play Audio(cd)", unknown, "Play Audio MSF(cd)", "Play Audio Track/Index(cd)",
41 "Play Track Relative(10)(cd)", unknown, "Pause/Resume(cd)", "Log Select", "Log Sense", unknown, unknown,
42 unknown, unknown, unknown, unknown, unknown, "Mode Select (10)",
43 unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown,
44 unknown, unknown, unknown,
45 };
46
47 #define group(opcode) (((opcode) >> 5) & 7)
48
49 #define RESERVED_GROUP 0
50 #define VENDOR_GROUP 1
51 #define NOTEXT_GROUP 2
52
53 static const char **commands[] = {
54 group_0_commands, group_1_commands, group_2_commands,
55 (const char **) RESERVED_GROUP, (const char **) RESERVED_GROUP,
56 (const char **) NOTEXT_GROUP, (const char **) VENDOR_GROUP,
57 (const char **) VENDOR_GROUP
58 };
59
60 static const char reserved[] = "RESERVED";
61 static const char vendor[] = "VENDOR SPECIFIC";
62
63 static void print_opcodek(unsigned char opcode)
64 {
65 const char **table = commands[ group(opcode) ];
66
67 switch ((unsigned long) table) {
68 case RESERVED_GROUP:
69 printk("%s[%02x] ", reserved, opcode);
70 break;
71 case NOTEXT_GROUP:
72 printk("%s(notext)[%02x] ", unknown, opcode);
73 break;
74 case VENDOR_GROUP:
75 printk("%s[%02x] ", vendor, opcode);
76 break;
77 default:
78 if (table[opcode & 0x1f] != unknown)
79 printk("%s[%02x] ", table[opcode & 0x1f], opcode);
80 else
81 printk("%s[%02x] ", unknown, opcode);
82 break;
83 }
84 }
85
86 static void print_commandk (unsigned char *command)
87 {
88 int i,s;
89
90 print_opcodek(command[0]);
91
92 if ((command[0] >> 5) == 6 ||
93 (command[0] >> 5) == 7 ) {
94 s = 12;
95 } else {
96 s = COMMAND_SIZE(command[0]);
97 }
98
99 for ( i = 1; i < s; ++i) {
100 printk("%02x ", command[i]);
101 }
102
103 switch (s) {
104 case 6:
105 printk("LBA=%d len=%d",
106 (((unsigned int)command[1] & 0x0f) << 16) |
107 ( (unsigned int)command[2] << 8) |
108 ( (unsigned int)command[3] ),
109 (unsigned int)command[4]
110 );
111 break;
112 case 10:
113 printk("LBA=%d len=%d",
114 ((unsigned int)command[2] << 24) |
115 ((unsigned int)command[3] << 16) |
116 ((unsigned int)command[4] << 8) |
117 ((unsigned int)command[5] ),
118 ((unsigned int)command[7] << 8) |
119 ((unsigned int)command[8] )
120 );
121 break;
122 case 12:
123 printk("LBA=%d len=%d",
124 ((unsigned int)command[2] << 24) |
125 ((unsigned int)command[3] << 16) |
126 ((unsigned int)command[4] << 8) |
127 ((unsigned int)command[5] ),
128 ((unsigned int)command[6] << 24) |
129 ((unsigned int)command[7] << 16) |
130 ((unsigned int)command[8] << 8) |
131 ((unsigned int)command[9] )
132 );
133 break;
134 default:
135 break;
136 }
137 printk("\n");
138 }
139
140 static void show_command(struct scsi_cmnd *SCpnt)
141 {
142 print_commandk(SCpnt->cmnd);
143 }
144
145 static void show_busphase(unsigned char stat)
146 {
147 switch(stat) {
148 case BUSPHASE_COMMAND:
149 printk( "BUSPHASE_COMMAND\n");
150 break;
151 case BUSPHASE_MESSAGE_IN:
152 printk( "BUSPHASE_MESSAGE_IN\n");
153 break;
154 case BUSPHASE_MESSAGE_OUT:
155 printk( "BUSPHASE_MESSAGE_OUT\n");
156 break;
157 case BUSPHASE_DATA_IN:
158 printk( "BUSPHASE_DATA_IN\n");
159 break;
160 case BUSPHASE_DATA_OUT:
161 printk( "BUSPHASE_DATA_OUT\n");
162 break;
163 case BUSPHASE_STATUS:
164 printk( "BUSPHASE_STATUS\n");
165 break;
166 case BUSPHASE_SELECT:
167 printk( "BUSPHASE_SELECT\n");
168 break;
169 default:
170 printk( "BUSPHASE_other: 0x%x\n", stat);
171 break;
172 }
173 }
174
175 static void show_autophase(unsigned short i)
176 {
177 printk("auto: 0x%x,", i);
178
179 if(i & COMMAND_PHASE) {
180 printk(" cmd");
181 }
182 if(i & DATA_IN_PHASE) {
183 printk(" din");
184 }
185 if(i & DATA_OUT_PHASE) {
186 printk(" dout");
187 }
188 if(i & MSGOUT_PHASE) {
189 printk(" mout");
190 }
191 if(i & STATUS_PHASE) {
192 printk(" stat");
193 }
194 if(i & ILLEGAL_PHASE) {
195 printk(" ill");
196 }
197 if(i & BUS_FREE_OCCUER) {
198 printk(" bfree-o");
199 }
200 if(i & MSG_IN_OCCUER) {
201 printk(" min-o");
202 }
203 if(i & MSG_OUT_OCCUER) {
204 printk(" mout-o");
205 }
206 if(i & SELECTION_TIMEOUT) {
207 printk(" sel");
208 }
209 if(i & MSGIN_00_VALID) {
210 printk(" m0");
211 }
212 if(i & MSGIN_02_VALID) {
213 printk(" m2");
214 }
215 if(i & MSGIN_03_VALID) {
216 printk(" m3");
217 }
218 if(i & MSGIN_04_VALID) {
219 printk(" m4");
220 }
221 if(i & AUTOSCSI_BUSY) {
222 printk(" busy");
223 }
224
225 printk("\n");
226 }
227
228 static void nsp32_print_register(int base)
229 {
230 if (!(NSP32_DEBUG_MASK & NSP32_SPECIAL_PRINT_REGISTER))
231 return;
232
233 printk("Phase=0x%x, ", nsp32_read1(base, SCSI_BUS_MONITOR));
234 printk("OldPhase=0x%x, ", nsp32_index_read1(base, OLD_SCSI_PHASE));
235 printk("syncreg=0x%x, ", nsp32_read1(base, SYNC_REG));
236 printk("ackwidth=0x%x, ", nsp32_read1(base, ACK_WIDTH));
237 printk("sgtpaddr=0x%lx, ", nsp32_read4(base, SGT_ADR));
238 printk("scsioutlatch=0x%x, ", nsp32_read1(base, SCSI_OUT_LATCH_TARGET_ID));
239 printk("msgout=0x%lx, ", nsp32_read4(base, SCSI_MSG_OUT));
240 printk("miscrd=0x%x, ", nsp32_index_read2(base, MISC_WR));
241 printk("seltimeout=0x%x, ", nsp32_read2(base, SEL_TIME_OUT));
242 printk("sreqrate=0x%x, ", nsp32_read1(base, SREQ_SMPL_RATE));
243 printk("transStatus=0x%x, ", nsp32_read2(base, TRANSFER_STATUS));
244 printk("reselectid=0x%x, ", nsp32_read2(base, COMMAND_CONTROL));
245 printk("arbit=0x%x, ", nsp32_read1(base, ARBIT_STATUS));
246 printk("BmStart=0x%lx, ", nsp32_read4(base, BM_START_ADR));
247 printk("BmCount=0x%lx, ", nsp32_read4(base, BM_CNT));
248 printk("SackCnt=0x%lx, ", nsp32_read4(base, SACK_CNT));
249 printk("SReqCnt=0x%lx, ", nsp32_read4(base, SREQ_CNT));
250 printk("SavedSackCnt=0x%lx, ", nsp32_read4(base, SAVED_SACK_CNT));
251 printk("ScsiBusControl=0x%x, ", nsp32_read1(base, SCSI_BUS_CONTROL));
252 printk("FifoRestCnt=0x%x, ", nsp32_read2(base, FIFO_REST_CNT));
253 printk("CdbIn=0x%x, ", nsp32_read1(base, SCSI_CSB_IN));
254 printk("\n");
255
256 if (0) {
257 printk("execph=0x%x, ", nsp32_read2(base, SCSI_EXECUTE_PHASE));
258 printk("IrqStatus=0x%x, ", nsp32_read2(base, IRQ_STATUS));
259 printk("\n");
260 }
261 }
262
263