📄 ms_rbc.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION 29/Nov/2007 16:53:54 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\ms_rbc #
# .c #
# Command line = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\ms_rbc #
# .c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED -lC #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\List\" -o #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\" -z9 --debug --cpu_mode #
# thumb --endian little --cpu ARM7TDMI --stack_align #
# 4 --interwork -e --fpu None --dlib_config #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Evaluation\ARM\LIB\dl4tptinl8f.h" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\srcIAR\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\src\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\FILESYSTEM\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\MASSSTORAGE\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\AT91SAM7X256\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\mmc_sd\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\COMMON_FS_MS\" -I "C:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Evaluation\ARM\INC\" #
# List file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\List\ms_rbc.lst #
# Object file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\ms_rbc.r79 #
# #
# #
##############################################################################
G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\ms_rbc.c
1 // ----------------------------------------------------------------------------
2 // ATMEL Microcontroller Software Support - ROUSSET -
3 // ----------------------------------------------------------------------------
4 // DISCLAIMER: CONDITIONS AS PER SIGNED LIMITED LICENSE AGREEMENT (AT91
5 // SOFTWARE AND USER DOCUMENTATION)
6 // ALL SOFTWARE IS PROVIDED AS IS, WITH ALL FAULTS, AND WITH NO WARRANTY
7 // WHATSOEVER. ATMEL EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED,
8 // OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTIES OF MERCHANTABILITY,
9 // FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.
10 // ----------------------------------------------------------------------------
11 // File Name : ms_rbc.c
12 // Object : Reduced Block commands
13 // Ref: rbc-r10a.pdf, NCITS-330 T10/1240-D,
14 // revision 10a, August 18,1999
15 // Creation : JCB 15/apr/2005
16 // Modif :
17 // ----------------------------------------------------------------------------
18 #include "po_types.h"
19 #include "trace.h"
20 //#include "bfsa_flash.h"
21 #include "fw_usb.h"
22 #include "po_kernel.h"
23 #include "ms_device.h"
24 #include "ms_rbc.h"
25 #include "mmc.h"
26
27 #define VALUE_32(p1,p2,p3,p4) ((p1)|(p2<<8)|(p3<<16)|(p4<<24))
28
29
30 /*****************************************************************
31 *
32 * ROUTINE : rbc_inquiry
33 *
34 *-----------------------------------------------------------------
35 *
36 * Purpose : processes the rbc inquiry command
37 *
38 * Input Parameters : Structure defining the inquiry command
39 *
40 * Output Parameters : status of the operation.
41 *
42 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
43 USBMS_RETURN rbc_inquiry(USBMS_INQUIRY *inquiry)
44 {
\ rbc_inquiry:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 011C MOV R1,R0
45 USBMS_RETURN _status = USBMS_OK;
46 USHORT _size;
47
48 /* define in ms_plugInit */
49 if( (inquiry->enable_vpd==0) && (inquiry->page_code==0) )
\ 00000004 0024 MOV R4,#+0
\ 00000006 E443 MVN R4,R4 ;; #-1
\ 00000008 4078 LDRB R0,[R0, #+1]
\ 0000000A C007 LSL R0,R0,#+31
\ 0000000C 2BD4 BMI ??rbc_inquiry_0
\ 0000000E 8878 LDRB R0,[R1, #+2]
\ 00000010 0028 CMP R0,#+0
\ 00000012 28D1 BNE ??rbc_inquiry_0
50 {
51 usbms_context.usb_lun[usbms_context.current_lun].cur_request.current_block = 0;
\ 00000014 .... LDR R0,??DataTable5 ;; usbms_context
\ 00000016 021C MOV R2,R0
\ 00000018 B932 ADD R2,#+185
\ 0000001A 1378 LDRB R3,[R2, #+0]
\ 0000001C 3825 MOV R5,#+56
\ 0000001E 6B43 MUL R3,R5
\ 00000020 C318 ADD R3,R0,R3
\ 00000022 0025 MOV R5,#+0
\ 00000024 1D82 STRH R5,[R3, #+16]
52 usbms_context.usb_lun[usbms_context.current_lun].cur_request.buffer_size = 0;
\ 00000026 0023 MOV R3,#+0
\ 00000028 1578 LDRB R5,[R2, #+0]
\ 0000002A 3826 MOV R6,#+56
\ 0000002C 7543 MUL R5,R6
\ 0000002E 4519 ADD R5,R0,R5
\ 00000030 EB62 STR R3,[R5, #+44]
53 usbms_context.usb_lun[usbms_context.current_lun].cur_request.command_size = 0;
\ 00000032 1578 LDRB R5,[R2, #+0]
\ 00000034 7543 MUL R5,R6
\ 00000036 4519 ADD R5,R0,R5
\ 00000038 2B63 STR R3,[R5, #+48]
54 usbms_context.usb_lun[usbms_context.current_lun].cur_request.transferred_size = 0;
\ 0000003A 1578 LDRB R5,[R2, #+0]
\ 0000003C 7543 MUL R5,R6
\ 0000003E 4519 ADD R5,R0,R5
\ 00000040 6B63 STR R3,[R5, #+52]
55 usbms_context.usb_lun[usbms_context.current_lun].fail_reason = GOOD_STATUS;
\ 00000042 1278 LDRB R2,[R2, #+0]
\ 00000044 7243 MUL R2,R6
\ 00000046 8218 ADD R2,R0,R2
\ 00000048 1381 STRH R3,[R2, #+8]
56
57 /* standard inquiry data are required */
58 _size = (inquiry->length_0)+((inquiry->length_1)<<8);
\ 0000004A 0A79 LDRB R2,[R1, #+4]
\ 0000004C C978 LDRB R1,[R1, #+3]
\ 0000004E 0902 LSL R1,R1,#+8
\ 00000050 5118 ADD R1,R2,R1
\ 00000052 0904 LSL R1,R1,#+16
\ 00000054 090C LSR R1,R1,#+16
59 if( _size == usb_send((char*)&usbms_context.inquiry_data, _size) )
\ 00000056 0D1C MOV R5,R1
\ 00000058 3830 ADD R0,#+56
\ 0000005A ........ _BLF usb_send,??usb_send??rT
\ 0000005E 8542 CMP R5,R0
\ 00000060 01D1 BNE ??rbc_inquiry_0
60 {
61 _status = USBMS_OK;
\ 00000062 0020 MOV R0,#+0
\ 00000064 00E0 B ??rbc_inquiry_1
62 }
63 else
64 {
65 _status = USBMS_ERROR;
66 }
67 }
68 else
69 {
70 _status = USBMS_ERROR;
\ ??rbc_inquiry_0:
\ 00000066 201C MOV R0,R4
71 }
72 return _status;
\ ??rbc_inquiry_1:
\ 00000068 REQUIRE ?Subroutine11
\ 00000068 ;; // Fall through to label ?Subroutine11
73 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine11:
\ 00000000 70BC POP {R4-R6}
\ 00000002 02BC POP {R1}
\ 00000004 0847 BX R1 ;; return
74
75
76 /*****************************************************************
77 *
78 * ROUTINE : rbc_mode_select
79 *
80 *-----------------------------------------------------------------
81 *
82 * Purpose : processes the rbc MODE_SELECT command
83 *
84 * Input Parameters : Structure defining the MODE_SELECT command
85 *
86 * Output Parameters : status of the operation
87 *
88 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
89 USBMS_RETURN rbc_mode_select(void)
90 {
91 return USBMS_OK;
\ rbc_mode_select:
\ 00000000 0020 MOV R0,#+0
\ 00000002 7047 BX LR ;; return
92 }
93
94
95 /*****************************************************************
96 *
97 * ROUTINE : rbc_mode_sense
98 *
99 *-----------------------------------------------------------------
100 *
101 * Purpose : processes the rbc MODE_SENSE command
102 *
103 * Input Parameters : Structure defining the MODE_SENSE command
104 *
105 * Output Parameters : status of the operation
106 *
107 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
108 USBMS_RETURN rbc_mode_sense(USBMS_MODE_SENSE *mode_sense)
109 {
\ rbc_mode_sense:
\ 00000000 70B5 PUSH {R4-R6,LR}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -