📄 ms_rbc.lst
字号:
232 /* 0 0 1 Make medium ready */
233 /* 0 1 0 Unload medium */
234 /* 0 1 1 Load medium */
235 if( start_stop_unit->Flags.bits0.Start == 0 )
236 {
237 if( start_stop_unit->Flags.bits0.Load_Eject == 0 )
238 {
239 /* Stop the medium */
240 }
241 else
242 {
243 /* Make medium ready */
244 }
245 }
246 else
247 {
248 if( start_stop_unit->Flags.bits0.Load_Eject == 0 )
249 {
250 /* Unload medium */
251 }
252 else
253 {
254 /* Load medium */
255 }
256 }
257 }
258 else
259 {
260 if( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_ACTIVE )
261 {
262 /* M No change in power condition. */
263 }
264 else
265 {
266 if( ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_IDLE )
267 || ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_STDBY )
268 || ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_SLEEP ) )
269 {
270 /* lower power */
271 }
272 else
273 {
274 /* Reserved or Device Control */
275 }
276 }
277 }
278 status = USBMS_OK;
279 return status;
\ rbc_start_stop_unit:
\ 00000000 0020 MOV R0,#+0
\ 00000002 7047 BX LR ;; return
280 }
281
282
283 /*****************************************************************
284 *
285 * ROUTINE : rbc_read_capacity
286 *
287 *-----------------------------------------------------------------
288 *
289 * Purpose : processes the rbc READ_CAPACITY command
290 *
291 * Input Parameters : Structure defining the READ_CAPACITY command
292 *
293 * Output Parameters : status of the operation
294 *
295 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
296 USBMS_RETURN rbc_read_capacity(void)
297 {
\ rbc_read_capacity:
\ 00000000 10B5 PUSH {R4,LR}
298 ULONG _last_block_nmb;
299 USHORT _block_size;
300
301 /* fill the read capability structure */
302 _last_block_nmb = usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber-1;
\ 00000002 .... LDR R0,??DataTable5 ;; usbms_context
\ 00000004 041C MOV R4,R0
\ 00000006 B934 ADD R4,#+185
\ 00000008 2178 LDRB R1,[R4, #+0]
\ 0000000A 3822 MOV R2,#+56
\ 0000000C 5143 MUL R1,R2
\ 0000000E 4118 ADD R1,R0,R1
\ 00000010 4A68 LDR R2,[R1, #+4]
\ 00000012 521E SUB R2,R2,#+1
303
304 _block_size = usbms_context.usb_lun[usbms_context.current_lun].BlockSize;
\ 00000014 0968 LDR R1,[R1, #+0]
\ 00000016 0904 LSL R1,R1,#+16
\ 00000018 090C LSR R1,R1,#+16
305
306 usbms_context.read_capacity_data.block_address_0 = (UCHAR)(_last_block_nmb);
\ 0000001A 6275 STRB R2,[R4, #+21]
307 usbms_context.read_capacity_data.block_address_1 = (UCHAR)(_last_block_nmb>>8);
\ 0000001C 130A LSR R3,R2,#+8
\ 0000001E 2375 STRB R3,[R4, #+20]
308 usbms_context.read_capacity_data.block_address_2 = (UCHAR)(_last_block_nmb>>16);
\ 00000020 130C LSR R3,R2,#+16
\ 00000022 E374 STRB R3,[R4, #+19]
309 usbms_context.read_capacity_data.block_address_3 = (UCHAR)(_last_block_nmb>>24);
\ 00000024 120E LSR R2,R2,#+24
\ 00000026 A274 STRB R2,[R4, #+18]
310 usbms_context.read_capacity_data.block_len_0 = (UCHAR)(_block_size);
\ 00000028 6176 STRB R1,[R4, #+25]
311 usbms_context.read_capacity_data.block_len_1 = (UCHAR)(_block_size>>8);
\ 0000002A 090A LSR R1,R1,#+8
\ 0000002C 2176 STRB R1,[R4, #+24]
312 usbms_context.read_capacity_data.block_len_2 = 0;
\ 0000002E 0021 MOV R1,#+0
\ 00000030 E175 STRB R1,[R4, #+23]
313 usbms_context.read_capacity_data.block_len_3 = 0;
\ 00000032 A175 STRB R1,[R4, #+22]
314
315 TRACE_DEBUG_L( "RC:dba0 0x%X \n\r", usbms_context.read_capacity_data.block_address_0);
316 TRACE_DEBUG_L( "RC:dba1 0x%X \n\r", usbms_context.read_capacity_data.block_address_1);
317 TRACE_DEBUG_L( "RC:dba2 0x%X \n\r", usbms_context.read_capacity_data.block_address_2);
318 TRACE_DEBUG_L( "RC:dba3 0x%X \n\r", usbms_context.read_capacity_data.block_address_3);
319 TRACE_DEBUG_L( "RC:dbl0 0x%X \n\r", usbms_context.read_capacity_data.block_len_0);
320 TRACE_DEBUG_L( "RC:dbl1 0x%X \n\r", usbms_context.read_capacity_data.block_len_1);
321 TRACE_DEBUG_L( "RC:dbl2 0x%X \n\r", usbms_context.read_capacity_data.block_len_2);
322 TRACE_DEBUG_L( "RC:dbl3 0x%X \n\r", usbms_context.read_capacity_data.block_len_3);
323
324 usb_send((char*)&usbms_context.read_capacity_data, sizeof(USBMS_READ_CAPACITY_DATA) );
\ 00000034 0821 MOV R1,#+8
\ 00000036 CB30 ADD R0,#+203
\ 00000038 ........ _BLF usb_send,??usb_send??rT
325 usbms_context.state = USB_SEND_NO_FLASH;
\ 0000003C 0320 MOV R0,#+3
\ 0000003E A076 STRB R0,[R4, #+26]
326
327 return USBMS_OK;
\ 00000040 .... B ?Subroutine12
328 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine12:
\ 00000000 0020 MOV R0,#+0
\ 00000002 10BC POP {R4}
\ 00000004 02BC POP {R1}
\ 00000006 0847 BX R1 ;; return
329
330
331 /*****************************************************************
332 *
333 * ROUTINE : rbc_read_10
334 *
335 *-----------------------------------------------------------------
336 *
337 * Purpose : processes the rbc READ_10 command
338 *
339 * Input Parameters : Structure defining the READ_10 command
340 *
341 * Output Parameters : status of the operation
342 *
343 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
344 USBMS_RETURN rbc_read_10(USBMS_READ_10 *read_10)
345 {
\ rbc_read_10:
\ 00000000 00B5 PUSH {LR}
346 USBMS_XFER *_request = NULL;
347
348 /* initialize the temporary variables */
349 _request = &usbms_context.usb_lun[usbms_context.current_lun].cur_request;
350
351 /* Initialization of the request parameter */
352 _request->current_block = VALUE_32( read_10->block_address_0,
353 read_10->block_address_1,
354 read_10->block_address_2,
355 read_10->block_address_3 );
\ 00000002 .... LDR R1,??DataTable5 ;; usbms_context
\ 00000004 B922 MOV R2,#+185
\ 00000006 8A5C LDRB R2,[R1, R2]
\ 00000008 3823 MOV R3,#+56
\ 0000000A 5A43 MUL R2,R3
\ 0000000C 8918 ADD R1,R1,R2
\ 0000000E 4279 LDRB R2,[R0, #+5]
\ 00000010 0079 LDRB R0,[R0, #+4]
\ 00000012 0002 LSL R0,R0,#+8
\ 00000014 1043 ORR R0,R2
\ 00000016 0882 STRH R0,[R1, #+16]
356 /* request processing */
357 ms_sendTx();
\ 00000018 ........ _BLF ms_sendTx,??ms_sendTx??rT
358 return USBMS_OK;
\ 0000001C .... B ?Subroutine13
359 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine13:
\ 00000000 0020 MOV R0,#+0
\ 00000002 02BC POP {R1}
\ 00000004 0847 BX R1 ;; return
\ 00000006 C046 NOP
\ ??Subroutine13_0:
\ 00000008 ........ DC32 usbms_request_sense_data
360
361
362 /*****************************************************************
363 *
364 * ROUTINE : rbc_commun_write
365 *
366 *-----------------------------------------------------------------
367 *
368 * Purpose : retreive data from the USB module and write to flash
369 *
370 * Input Parameters :
371 * USBMS_XFER *request, the current SCSI request being processed
372 * USB_LUN *lun, the targetted LUN associated with the request
373 *
374 * Output Parameters :
375 *
376 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
377 USBMS_RETURN rbc_commun_write( USBMS_XFER *request, USB_LUN *lun )
378 {
\ rbc_commun_write:
\ 00000000 F2B5 PUSH {R1,R4-R7,LR}
\ 00000002 83B0 SUB SP,#+12
\ 00000004 041C MOV R4,R0
379 USHORT _recLength;
380 USBMS_RETURN _status = USBMS_ERROR;
381 UCHAR* _buff;
382 USHORT _length;
383 ULONG _expected,_nbBlock;
384
385 /* How much data do we want from USB */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -