📄 ms_bot.lst
字号:
226 * input parameters : none
227 *
228 * output parameters : none
229 *
230 * global data : usbms_context.state
231 *
232 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
233 void ms_rstProgStallIn( void )
234 {
\ ms_rstProgStallIn:
\ 00000000 10B5 PUSH {R4,LR}
235 TRACE_DEBUG_H( "St In\n\r");
236 /* Send the CSW using usb_send() and set state to PROCESS_CSW */
237 usb_send((char*)&usbms_context.csw, sizeof(USBMS_CSW));
\ 00000002 .... B ?Subroutine20
238 usbms_context.state = PROCESS_CSW;
239 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine20:
\ 00000000 .... LDR R4,??DataTable15 ;; usbms_context
\ 00000002 0D21 MOV R1,#+13
\ 00000004 201C MOV R0,R4
\ 00000006 AC30 ADD R0,#+172
\ 00000008 ........ _BLF usb_send,??usb_send??rT
\ 0000000C D334 ADD R4,#+211
\ 0000000E 0520 MOV R0,#+5
\ 00000010 2070 STRB R0,[R4, #+0]
\ 00000012 10BC POP {R4}
\ 00000014 01BC POP {R0}
\ 00000016 0047 BX R0 ;; return
240
241
242 /******************************************************************
243 *
244 * SUB-ROUTINE : ms_rstProgStallOut
245 *
246 *------------------------------------------------------------------
247 *
248 * purpose : Stall of endpoint BULK OUT
249 *
250 * input parameters : none
251 *
252 * output parameters : none
253 *
254 * global data : usbms_context.state
255 *
256 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
257 void ms_rstProgStallOut( void )
258 {
259 TRACE_DEBUG_H( "St Out\n\r");
260 usbms_context.state = PROCESS_CSW;
\ ms_rstProgStallOut:
\ 00000000 .... LDR R0,??DataTable6 ;; usbms_context + 211
\ 00000002 0521 MOV R1,#+5
\ 00000004 0170 STRB R1,[R0, #+0]
261 }
\ 00000006 7047 BX LR ;; return
262
263 /******************************************************************
264 *
265 * SUB-ROUTINE spc_update_sense_data
266 *
267 *------------------------------------------------------------------
268 *
269 * purpose : Update the sense data structure
270 *
271 * input parameters : SenseKey : Sensekey value for the Sense data.
272 * ASC : ASC value for the Sense data.
273 * ASCQ : ASCQ value for the Sense data.
274 *
275 * output parameters : none
276 *
277 * global data :
278 * usbms_request_sense_data.sense_key
279 * usbms_request_sense_data.additional_sense_code
280 * usbms_request_sense_data.additional_sense_code_qualifier
281 *
282 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
283 void ms_update_sense_data(UCHAR SenseKey,UCHAR ASC,UCHAR ASCQ)
284 {
\ ms_update_sense_data:
\ 00000000 30B4 PUSH {R4,R5}
285 usbms_request_sense_data.sense_key = SenseKey;
\ 00000002 .... LDR R3,??DataTable5 ;; usbms_request_sense_data
\ 00000004 9C78 LDRB R4,[R3, #+2]
\ 00000006 F025 MOV R5,#+240
\ 00000008 2540 AND R5,R4
\ 0000000A 0007 LSL R0,R0,#+28
\ 0000000C 000F LSR R0,R0,#+28
\ 0000000E 2843 ORR R0,R5
\ 00000010 9870 STRB R0,[R3, #+2]
286 usbms_request_sense_data.additional_sense_code = ASC;
\ 00000012 1973 STRB R1,[R3, #+12]
287 usbms_request_sense_data.additional_sense_code_qualifier = ASCQ;
\ 00000014 5A73 STRB R2,[R3, #+13]
288 }
\ 00000016 30BC POP {R4,R5}
\ 00000018 7047 BX LR ;; return
289
290
291 /******************************************************************
292 *
293 * SUB-ROUTINE : ms_idleRx
294 *
295 *------------------------------------------------------------------
296 *
297 * purpose : Treatment of RBC command
298 *
299 * input parameters : none
300 *
301 * output parameters : none
302 *
303 * global data :
304 *
305 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
306 void ms_idleRx( void )
307 {
\ ms_idleRx:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 88B0 SUB SP,#+32
\ 00000004 .... LDR R4,??DataTable6 ;; usbms_context + 211
\ 00000006 8027 MOV R7,#+128
\ 00000008 1F21 MOV R1,#+31
\ 0000000A 6846 MOV R0,SP
308 char _buff[CBW_SIZE];
309 USBMS_CBW *_cbw = NULL;
310 USBMS_BOT_CDB *_bot_cdb = NULL;
311 USBMS_RETURN _status;
312
313 if( CBW_SIZE == ms_retreiveTb( _buff, CBW_SIZE ) )
\ 0000000C ........ _BLF ms_retreiveTb,??ms_retreiveTb??rT
\ 00000010 1F28 CMP R0,#+31
\ 00000012 .... BEQ .+5
\ 00000014 E3E0 B ??ms_idleRx_0
314 {
315 _cbw = (USBMS_CBW*)_buff;
316
317 usbms_context.csw.dCSWTag_0 = _cbw->dCBWTag_0;
\ 00000016 .... LDR R5,??Subroutine21_0 ;; usbms_context + 176
\ 00000018 6E46 MOV R6,SP
\ 0000001A 3079 LDRB R0,[R6, #+4]
\ 0000001C 2870 STRB R0,[R5, #+0]
318 usbms_context.csw.dCSWTag_1 = _cbw->dCBWTag_1;
\ 0000001E 7079 LDRB R0,[R6, #+5]
\ 00000020 6870 STRB R0,[R5, #+1]
319 usbms_context.csw.dCSWTag_2 = _cbw->dCBWTag_2;
\ 00000022 B079 LDRB R0,[R6, #+6]
\ 00000024 A870 STRB R0,[R5, #+2]
320 usbms_context.csw.dCSWTag_3 = _cbw->dCBWTag_3;
\ 00000026 F079 LDRB R0,[R6, #+7]
\ 00000028 E870 STRB R0,[R5, #+3]
321
322 _bot_cdb = (USBMS_BOT_CDB*)&_cbw->CBWCB;
323 usbms_context.current_lun = _cbw->bCBWLUN;
\ 0000002A 707B LDRB R0,[R6, #+13]
\ 0000002C 6872 STRB R0,[R5, #+9]
324
325 TRACE_DEBUG_H( "RBC:0x%X ",_bot_cdb->generic_rbc.operation_code);
326
327 /* Process the RBC request */
328 switch (_bot_cdb->generic_rbc.operation_code)
\ 0000002E F17B LDRB R1,[R6, #+15]
\ 00000030 0029 CMP R1,#+0
\ 00000032 .... BNE .+5
\ 00000034 83E0 B ??ms_idleRx_1
\ 00000036 0329 CMP R1,#+3
\ 00000038 .... BNE .+5
\ 0000003A A6E0 B ??ms_idleRx_2
\ 0000003C 1229 CMP R1,#+18
\ 0000003E 4BD0 BEQ ??ms_idleRx_3
\ 00000040 1529 CMP R1,#+21
\ 00000042 78D0 BEQ ??ms_idleRx_4
\ 00000044 1A29 CMP R1,#+26
\ 00000046 .... BNE .+5
\ 00000048 7FE0 B ??ms_idleRx_5
\ 0000004A 1B29 CMP R1,#+27
\ 0000004C .... BNE .+5
\ 0000004E 8BE0 B ??ms_idleRx_6
\ 00000050 1E29 CMP R1,#+30
\ 00000052 .... BNE .+5
\ 00000054 7EE0 B ??ms_idleRx_7
\ 00000056 2529 CMP R1,#+37
\ 00000058 .... BNE .+5
\ 0000005A 8CE0 B ??ms_idleRx_8
\ 0000005C 2829 CMP R1,#+40
\ 0000005E 20D0 BEQ ??ms_idleRx_9
\ 00000060 2A29 CMP R1,#+42
\ 00000062 03D0 BEQ ??ms_idleRx_10
\ 00000064 2F29 CMP R1,#+47
\ 00000066 .... BNE .+5
\ 00000068 8CE0 B ??ms_idleRx_11
\ 0000006A 91E0 B ??ms_idleRx_12
329 {
330
331
332
333 case RBC_WRITE_10:
334 /* Process the RBC WRITE_10 command */
335 TRACE_DEBUG_H( "WRITE_10\n\r");
336 usbms_context.usb_lun[usbms_context.current_lun].cur_request.transferred_size = 0L;
\ ??ms_idleRx_10:
\ 0000006C 3821 MOV R1,#+56
\ 0000006E 4843 MUL R0,R1
\ 00000070 .... LDR R1,??DataTable15 ;; usbms_context
\ 00000072 0818 ADD R0,R1,R0
\ 00000074 0021 MOV R1,#+0
\ 00000076 4163 STR R1,[R0, #+52]
337 usbms_context.usb_lun[usbms_context.current_lun].cur_request.buffer_size = (_cbw->dCBWDataTransferLength_3<<24)
338 |(_cbw->dCBWDataTransferLength_2<<16)
339 |(_cbw->dCBWDataTransferLength_1<<8)
340 |(_cbw->dCBWDataTransferLength_0);
\ 00000078 687A LDRB R0,[R5, #+9]
\ 0000007A 3821 MOV R1,#+56
\ 0000007C 4843 MUL R0,R1
\ 0000007E .... LDR R1,??DataTable15 ;; usbms_context
\ 00000080 0818 ADD R0,R1,R0
\ 00000082 F17A LDRB R1,[R6, #+11]
\ 00000084 0906 LSL R1,R1,#+24
\ 00000086 B27A LDRB R2,[R6, #+10]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -