📄 ms_bot.lst
字号:
\ ??ms_send_bot_status_0:
\ 00000014 ........ DC32 usbms_context + 172
116
117
118 /******************************************************************
119 *
120 * SUB-ROUTINE : ms_plugInit
121 *
122 *------------------------------------------------------------------
123 *
124 * purpose : Init the data structure specific to the Mass Storage driver
125 *
126 * input parameters : none
127 *
128 * output parameters : none
129 *
130 * global data :
131 * usbms_context
132 * usbms_request_sense_data
133 *
134 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
135 void ms_plugInit( void )
136 {
\ ms_plugInit:
\ 00000000 30B5 PUSH {R4,R5,LR}
137 UCHAR _counter = 0;
138
139 usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber = (ULONG)NB_BLOCK;
\ 00000002 .... LDR R4,??DataTable1 ;; usbms_context
\ 00000004 201C MOV R0,R4
\ 00000006 B930 ADD R0,#+185
\ 00000008 0178 LDRB R1,[R0, #+0]
\ 0000000A 3822 MOV R2,#+56
\ 0000000C 5143 MUL R1,R2
\ 0000000E 6118 ADD R1,R4,R1
\ 00000010 314A LDR R2,??ms_plugInit_0 ;; 0x1e8480
\ 00000012 4A60 STR R2,[R1, #+4]
140 usbms_context.usb_lun[usbms_context.current_lun].BlockSize = SIZEONESECTOR;
\ 00000014 0178 LDRB R1,[R0, #+0]
\ 00000016 3822 MOV R2,#+56
\ 00000018 5143 MUL R1,R2
\ 0000001A 8022 MOV R2,#+128
\ 0000001C 9200 LSL R2,R2,#+2 ;; #+512
\ 0000001E 6250 STR R2,[R4, R1]
141 usbms_context.usb_lun[usbms_context.current_lun].fail_reason = 0;
\ 00000020 0021 MOV R1,#+0
\ 00000022 0278 LDRB R2,[R0, #+0]
\ 00000024 3823 MOV R3,#+56
\ 00000026 5A43 MUL R2,R3
\ 00000028 A218 ADD R2,R4,R2
\ 0000002A 1181 STRH R1,[R2, #+8]
142 usbms_context.usb_lun[usbms_context.current_lun].media_state = 0;
\ 0000002C 0278 LDRB R2,[R0, #+0]
\ 0000002E 5A43 MUL R2,R3
\ 00000030 A218 ADD R2,R4,R2
\ 00000032 5181 STRH R1,[R2, #+10]
143 usbms_context.usb_lun[usbms_context.current_lun].fail_request = 0;
\ 00000034 0278 LDRB R2,[R0, #+0]
\ 00000036 5A43 MUL R2,R3
\ 00000038 A218 ADD R2,R4,R2
\ 0000003A 0023 MOV R3,#+0
\ 0000003C 1173 STRB R1,[R2, #+12]
144
145 for( _counter=0; _counter<MAX_LUN_NUM; _counter++ )
146 {
147 usbms_context.usb_lun[_counter].media_state = 0;
\ 0000003E 6181 STRH R1,[R4, #+10]
148 }
149
150 usbms_context.state = IDLE;
\ 00000040 8176 STRB R1,[R0, #+26]
151
152 /* Initialize the sense data */
153 usbms_request_sense_data.response_code = 0x70; /* response code : set to 0x70 */
154 usbms_request_sense_data.valid = 0x01; /* set to one; specifies the infirmation fields contains valid informations as defined in the scp3 standard or a command set standard*/
\ 00000042 .... LDR R0,??DataTable5 ;; usbms_request_sense_data
\ 00000044 F021 MOV R1,#+240
\ 00000046 0170 STRB R1,[R0, #+0]
155 usbms_request_sense_data.segmentNum = 0x00; /* */
\ 00000048 4370 STRB R3,[R0, #+1]
156 usbms_request_sense_data.sense_key = 0x00; /* generic error specified in enum T_SENSE_KEY */
157 usbms_request_sense_data.wrongLenIndicator = 0x00; /* */
158 usbms_request_sense_data.endOfMedia = 0x00; /* */
159 usbms_request_sense_data.filemark = 0x00; /* */
\ 0000004A 8178 LDRB R1,[R0, #+2]
\ 0000004C 1022 MOV R2,#+16
\ 0000004E 0A40 AND R2,R1
\ 00000050 8270 STRB R2,[R0, #+2]
160 usbms_request_sense_data.information_0 = 0x00; /* */
\ 00000052 C370 STRB R3,[R0, #+3]
161 usbms_request_sense_data.information_1 = 0x00; /* */
\ 00000054 8380 STRH R3,[R0, #+4]
162 usbms_request_sense_data.information_2 = 0x00; /* */
163 usbms_request_sense_data.information_3 = 0x00; /* */
\ 00000056 8371 STRB R3,[R0, #+6]
164 usbms_request_sense_data.additional_sense_length = sizeof(USBMS_REQUEST_SENSE_DATA)-8; /* Must be set to sizeof(T_REQUEST_SENSE_DATA)-8 */
\ 00000058 0A21 MOV R1,#+10
\ 0000005A C171 STRB R1,[R0, #+7]
165 usbms_request_sense_data.command_specific_information_0 = 0x00; /* */
\ 0000005C 8360 STR R3,[R0, #+8]
166 usbms_request_sense_data.command_specific_information_1 = 0x00; /* */
167 usbms_request_sense_data.command_specific_information_2 = 0x00; /* */
168 usbms_request_sense_data.command_specific_information_3 = 0x00; /* */
169 usbms_request_sense_data.additional_sense_code = 0x00; /* ASC */
\ 0000005E C360 STR R3,[R0, #+12]
170 usbms_request_sense_data.additional_sense_code_qualifier = 0x00; /* ASCQ */
171 usbms_request_sense_data.field_replaceable_unit_code = 0x00; /* */
172 usbms_request_sense_data.sense_key_specific_0 = 0x00; /* */
173 usbms_request_sense_data.sksv = 0x00; /* sense key specific valid; set to one */
174 usbms_request_sense_data.sense_key_specific_1 = 0x00; /* for an accurate definition of the content */
\ 00000060 0382 STRH R3,[R0, #+16]
175 usbms_request_sense_data.sense_key_specific_2 = 0x00; /* of this fields please refer to spc3r17, chapter 4.5.2.4 */
176
177 /* Standart INQUIRY data */
178 /* Fill the inquiry structure */
179 usbms_context.inquiry_data.device_type = 0x00; /* SBC Direct-access device (e.g., UHD Floppy disk) */
\ 00000062 201C MOV R0,R4
\ 00000064 3830 ADD R0,#+56
\ 00000066 0178 LDRB R1,[R0, #+0]
\ 00000068 E022 MOV R2,#+224
\ 0000006A 0A40 AND R2,R1
\ 0000006C 0270 STRB R2,[R0, #+0]
180 usbms_context.inquiry_data.version = 0x05; /* */
\ 0000006E 0521 MOV R1,#+5
\ 00000070 8170 STRB R1,[R0, #+2]
181 usbms_context.inquiry_data.removable = 0x01; /* We pretend that the Device is Removable, in order to get the "TEST_UNIT_READY" */
\ 00000072 4178 LDRB R1,[R0, #+1]
\ 00000074 8022 MOV R2,#+128
\ 00000076 0A43 ORR R2,R1
\ 00000078 4270 STRB R2,[R0, #+1]
182 usbms_context.inquiry_data.NACA = 0x00;
183 usbms_context.inquiry_data.AERC = 0x00;
\ 0000007A C178 LDRB R1,[R0, #+3]
\ 0000007C 5F22 MOV R2,#+95
\ 0000007E 0A40 AND R2,R1
\ 00000080 C270 STRB R2,[R0, #+3]
184 usbms_context.inquiry_data.Linked = 0x00;
185 usbms_context.inquiry_data.Synch = 0x00;
186 usbms_context.inquiry_data.Wide16 = 0x00;
\ 00000082 C179 LDRB R1,[R0, #+7]
\ 00000084 C722 MOV R2,#+199
\ 00000086 0A40 AND R2,R1
\ 00000088 C271 STRB R2,[R0, #+7]
187
188 po_memcpy( usbms_context.inquiry_data.vendor_id, VENDOR_ID, VENDOR_ID_LENGTH);
\ 0000008A 144D LDR R5,??ms_plugInit_0+0x4 ;; `?<Constant "ATMEL ">`
\ 0000008C 0822 MOV R2,#+8
\ 0000008E 291C MOV R1,R5
\ 00000090 201C MOV R0,R4
\ 00000092 4030 ADD R0,#+64
\ 00000094 ........ _BLF po_memcpy,??po_memcpy??rT
189 po_memcpy( usbms_context.inquiry_data.product_id, PRODUCT_ID, PRODUCT_ID_LENGTH);
\ 00000098 1022 MOV R2,#+16
\ 0000009A 291C MOV R1,R5
\ 0000009C 0C31 ADD R1,#+12
\ 0000009E 201C MOV R0,R4
\ 000000A0 4830 ADD R0,#+72
\ 000000A2 ........ _BLF po_memcpy,??po_memcpy??rT
190 po_memcpy( usbms_context.inquiry_data.product_revision_level, PRODUCT_REVISION_LEVEL, PRODUCT_REVISION_LEVEL_LENGTH);
\ 000000A6 0422 MOV R2,#+4
\ 000000A8 291C MOV R1,R5
\ 000000AA 2031 ADD R1,#+32
\ 000000AC 201C MOV R0,R4
\ 000000AE 5830 ADD R0,#+88
\ 000000B0 ........ _BLF po_memcpy,??po_memcpy??rT
191 po_memcpy( usbms_context.inquiry_data.vendor_specific, VENDOR_SPECIFIC, VENDOR_SPECIFIC_LENGTH);
\ 000000B4 1422 MOV R2,#+20
\ 000000B6 291C MOV R1,R5
\ 000000B8 2831 ADD R1,#+40
\ 000000BA 201C MOV R0,R4
\ 000000BC 5C30 ADD R0,#+92
\ 000000BE ........ _BLF po_memcpy,??po_memcpy??rT
192 po_memcpy( usbms_context.inquiry_data.version_descriptor, VERSION_DESCRIPTOR, VERSION_DESCRIPTOR_LENGTH);
\ 000000C2 0822 MOV R2,#+8
\ 000000C4 4035 ADD R5,#+64
\ 000000C6 291C MOV R1,R5
\ 000000C8 7434 ADD R4,#+116
\ 000000CA 201C MOV R0,R4
\ 000000CC ........ _BLF po_memcpy,??po_memcpy??rT
193 }
\ 000000D0 30BC POP {R4,R5}
\ 000000D2 01BC POP {R0}
\ 000000D4 0047 BX R0 ;; return
\ 000000D6 C046 NOP
\ ??ms_plugInit_0:
\ 000000D8 80841E00 DC32 0x1e8480
\ 000000DC ........ DC32 `?<Constant "ATMEL ">`
194
195
196 /******************************************************************
197 *
198 * SUB-ROUTINE : ms_goToInit
199 *
200 *------------------------------------------------------------------
201 *
202 * purpose : Go to state INIT
203 *
204 * input parameters : none
205 *
206 * output parameters : none
207 *
208 * global data : usbms_context.state
209 *
210 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
211 void ms_goToInit( void )
212 {
213 /* Set state to INIT */
214 usbms_context.state = INIT;
\ ms_goToInit:
\ 00000000 .... LDR R0,??DataTable6 ;; usbms_context + 211
\ 00000002 0621 MOV R1,#+6
\ 00000004 0170 STRB R1,[R0, #+0]
215 }
\ 00000006 7047 BX LR ;; return
216
217
218 /******************************************************************
219 *
220 * SUB-ROUTINE : ms_rstProgStallIn
221 *
222 *------------------------------------------------------------------
223 *
224 * purpose : Stall of endpoint BULK IN
225 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -