⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskio.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:

; 681  :         psid->dwSerialNumOffset = pDstOffset - (PCHAR) psid;

  00068	e0450007	 sub       r0, r5, r7
  0006c	e587000c	 str       r0, [r7, #0xC]
  00070		 |$L37177|
  00070	e51ba068	 ldr       r10, [r11, #-0x68]
  00074	ea000008	 b         |$L37178|
  00078		 |$L37173|

; 683  :     SetLastError(ERROR_INVALID_PARAMETER);

  00078	e3a00057	 mov       r0, #0x57
  0007c	eb000000	 bl        SetLastError

; 684  :     return FALSE;

  00080	e3a06000	 mov       r6, #0
  00084	e1a0a006	 mov       r10, r6
  00088	e59b9008	 ldr       r9, [r11, #8]
  0008c	e59b8004	 ldr       r8, [r11, #4]
  00090	e59b7000	 ldr       r7, [r11]
  00094	e51b506c	 ldr       r5, [r11, #-0x6C]
  00098	ea00002c	 b         |$L36903|
  0009c		 |$L37178|

; 685  :     }
; 686  : 
; 687  :     pmy_geom_desc=&my_geom_desc;
; 688  : 
; 689  : 
; 690  : #if (USE_SPI || USE_SPI_EMULATION)
; 691  : 
; 692  :     if (spi_read_serial(0, pmy_geom_desc) == NO) {   

; 693  :     return FALSE;
; 694  :     }
; 695  : 
; 696  : #else
; 697  : 
; 698  : if (mmc_read_serial(0, pmy_geom_desc) == NO) {   


  0009c	e3e01063	 mvn       r1, #0x63
  000a0	e08b1001	 add       r1, r11, r1
  000a4	e3a00000	 mov       r0, #0
  000a8	eb000000	 bl        mmc_read_serial
  000ac	e3500000	 cmp       r0, #0

; 699  :     return FALSE;

  000b0	0a000022	 beq       |$L37190|

; 700  :     }
; 701  : 
; 702  : 
; 703  : #endif
; 704  : 
; 705  : 
; 706  : 
; 707  : 
; 708  : 
; 709  : 
; 710  : 
; 711  :     psid->dwFlags = MANUFACTUREID_INVALID;

  000b4	e3a0a001	 mov       r10, #1
  000b8	e587a004	 str       r10, [r7, #4]

; 712  : 
; 713  :     str_length=strlen(&my_geom_desc.serialNum[0]);

  000bc	e3e00057	 mvn       r0, #0x57
  000c0	e08b0000	 add       r0, r11, r0
  000c4	eb000000	 bl        strlen
  000c8	e1a01800	 mov       r1, r0, lsl #16
  000cc	e1a02821	 mov       r2, r1, lsr #16

; 714  :     
; 715  :     

; 716  :     if (cBytes == sizeof(*psid)) {

  000d0	e3580010	 cmp       r8, #0x10
  000d4	1a000008	 bne       |$L36914|

; 717  :     psid->dwSize = cBytes + str_length + 1;

  000d8	e1a00802	 mov       r0, r2, lsl #16
  000dc	e1a01820	 mov       r1, r0, lsr #16
  000e0	e2812011	 add       r2, r1, #0x11
  000e4	e5872000	 str       r2, [r7]

; 718  :     SetLastError(ERROR_INSUFFICIENT_BUFFER);

  000e8	e3a0007a	 mov       r0, #0x7A
  000ec	eb000000	 bl        SetLastError

; 729  : 
; 730  :     return (GetLastError() == ERROR_SUCCESS);

  000f0	e1a0a006	 mov       r10, r6

; 672  :     return FALSE;

  000f4	e1a0000a	 mov       r0, r10

; 731  : }

  000f8	e91baff0	 ldmdb     r11, {r4 - r11, sp, pc}
  000fc		 |$L36914|

; 719  :     return FALSE;
; 720  :     }
; 721  : 
; 722  :     memcpy(pDstOffset, &my_geom_desc.serialNum[0], str_length + 1);

  000fc	e1a04802	 mov       r4, r2, lsl #16
  00100	e1a00824	 mov       r0, r4, lsr #16
  00104	e2802001	 add       r2, r0, #1
  00108	e3e01057	 mvn       r1, #0x57
  0010c	e08b1001	 add       r1, r11, r1
  00110	e1a00005	 mov       r0, r5
  00114	eb000000	 bl        memcpy

; 723  : 
; 724  :     pDstOffset += (str_length + 1);

  00118	e0853824	 add       r3, r5, r4, lsr #16
  0011c	e2830001	 add       r0, r3, #1

; 725  : 
; 726  :     psid->dwSize = pDstOffset - (PCHAR)psid;    


  00120	e0401007	 sub       r1, r0, r7
  00124	e5871000	 str       r1, [r7]

; 727  : 
; 728  :     *pcBytes = min(psid->dwSize, cBytes);       


  00128	e1510008	 cmp       r1, r8
  0012c	21a01008	 movcs     r1, r8
  00130	e5891000	 str       r1, [r9]

; 729  : 
; 730  :     return (GetLastError() == ERROR_SUCCESS);

  00134	eb000000	 bl        GetLastError
  00138	e3500000	 cmp       r0, #0
  0013c	0a000003	 beq       |$L36903|
  00140		 |$L37190|
  00140	e1a0a006	 mov       r10, r6

; 672  :     return FALSE;

  00144	e1a0000a	 mov       r0, r10

; 731  : }

  00148	e91baff0	 ldmdb     r11, {r4 - r11, sp, pc}

; 729  : 
; 730  :     return (GetLastError() == ERROR_SUCCESS);

  0014c	e51ba068	 ldr       r10, [r11, #-0x68]
  00150		 |$L36903|

; 672  :     return FALSE;

  00150	e1a0000a	 mov       r0, r10

; 731  : }

  00154	e91baff0	 ldmdb     r11, {r4 - r11, sp, pc}

			 ENDP  ; |GetStorageID|

  00158		 |$L37175|
  00158		 |$L37192|
  00158		 |$L37172|

; 682  :     } __except (EXCEPTION_EXECUTE_HANDLER) {

  00158	e3a00001	 mov       r0, #1
  0015c		 |$L37174|
  0015c	e1a0f00e	 mov       pc, lr
  00160		 |$L37200|
  00160	00000000	 DCD       |??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@|
  00164		 |$L37195|
	EXPORT	|??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| [ DATA ] ; `string'
	EXPORT	|??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| [ DATA ] ; `string'
	EXPORT	|InitDisk|
	IMPORT	|mmc_init|
	IMPORT	|mmc_drive_open|
	IMPORT	|controller_s|

  00000			 AREA	 |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$InitDisk|, PDATA, SELECTION=5, ASSOC=|.text| { |InitDisk| } ; comdat associative
|$T37209| DCD	|InitDisk|
	DCD	0x40002b01

  00000			 AREA	 |.rdata| { |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| DCB "m"
	DCB	0x0, "m", 0x0, "c", 0x0, "_", 0x0, "i", 0x0, "n", 0x0, "i"
	DCB	0x0, "t", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
	DCB	0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
	DCB	0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
	DCB	0x0, 0x0, 0x0				; `string'

  00000			 AREA	 |.rdata| { |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| DCB "m"
	DCB	0x0, "m", 0x0, "c", 0x0, "_", 0x0, "d", 0x0, "r", 0x0, "i"
	DCB	0x0, "v", 0x0, "e", 0x0, "_", 0x0, "o", 0x0, "p", 0x0, "e"
	DCB	0x0, "n", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
	DCB	0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
	DCB	0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
	DCB	0x0, 0x0, 0x0				; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |InitDisk| PROC

; 739  : {

  00000	e92d4030	 stmdb     sp!, {r4, r5, lr}
  00004		 |$M37207|
  00004	e1a05000	 mov       r5, r0

; 740  : #if (USE_MEMMODE)
; 741  : 
; 742  :     ULONG virt_address;
; 743  : 
; 744  : #endif
; 745  : 
; 746  : 
; 747  :     PDEVICE_CONTROLLER pc;
; 748  : 
; 749  :     pc = &controller_s[0];

  00008	e59f4098	 ldr       r4, [pc, #0x98]

; 750  :     
; 751  : 

; 752  : 
; 753  : #if (USE_MEMMODE)
; 754  :     virtreg=NULL;
; 755  : #endif
; 756  : 
; 757  : #if (USE_MMC)
; 758  :   

; 759  :    

; 760  :    

; 761  : #endif
; 762  : 
; 763  : 
; 764  : 

; 765  : 

; 766  : 
; 767  : #if (USE_MEMMODE)
; 768  : 
; 769  :     virtreg = VirtualAlloc(
; 770  :           0,
; 771  :           4096, 
; 772  :           MEM_RESERVE,
; 773  :           PAGE_NOACCESS);
; 774  :     if (virtreg == NULL) {
; 775  :     DEBUGMSG(ZONE_WARNING,
; 776  :         (TEXT("MMCDISK:mmcinit VirtualAlloc failed %d\r\n"), GetLastError()));
; 777  :     goto init_dfail;
; 778  :     }
; 779  : 
; 780  : 
; 781  : #if (USE_MMC)
; 782  :     virt_address=myAdapters[0].portIO | 0x80000000; 

; 783  : #else
; 784  :     virt_address=SPI_BASE_ADDR | 0x80000000;                

; 785  : 
; 786  : #endif
; 787  : 
; 788  :     if (!VirtualCopy(
; 789  :         virtreg,
; 790  :         (PVOID)virt_address,
; 791  :         4096,
; 792  :         PAGE_READWRITE|PAGE_NOCACHE)) {
; 793  :     DEBUGMSG(ZONE_WARNING,
; 794  :         (TEXT("MMCDISK:mmcinit VirtualCopy failed %d\r\n"), GetLastError()));       
; 795  :     goto init_dfail;
; 796  :     }
; 797  : 
; 798  : 
; 799  : #if (USE_MMC)
; 800  :     myAdapters[0].portIO = (UINT32) virtreg;
; 801  : #else
; 802  :     pc->register_file_address = (unsigned char * ) virtreg;
; 803  : #endif
; 804  : 
; 805  : 
; 806  : #endif
; 807  : 
; 808  : 
; 809  : 
; 810  : #if (USE_SPI || USE_SPI_EMULATION)
; 811  :     if (spi_init() == FALSE) {    

; 812  :     return 1;
; 813  :     }
; 814  : 
; 815  :     if (spi_drive_open(0) == FALSE) {    
; 816  :         return 1;
; 817  :     }
; 818  : #else
; 819  : 

; 820  :     if (mmc_init() == FALSE) {    


  0000c	eb000000	 bl        mmc_init
  00010	e3500000	 cmp       r0, #0

; 821  : 	RETAILMSG(1, (TEXT("mmc_init() return FALSE\r\n")));

  00014	059f0088	 ldreq     r0, [pc, #0x88]
  00018	0a000004	 beq       |$L37206|

; 822  :     return 1;
; 823  :     }
; 824  : 
; 825  :     if (mmc_drive_open(0) == FALSE) {    

  0001c	e3a00000	 mov       r0, #0
  00020	eb000000	 bl        mmc_drive_open
  00024	e3500000	 cmp       r0, #0
  00028	1a000003	 bne       |$L36922|

; 826  : 	RETAILMSG(1, (TEXT("mmc_drive_open() return FALSE\r\n")));

  0002c	e59f006c	 ldr       r0, [pc, #0x6C]
  00030		 |$L37206|
  00030	eb000000	 bl        NKDbgPrintfW

; 827  :     return 1;

  00034	e3a00001	 mov       r0, #1

; 846  : 
; 847  : 
; 848  : #if (USE_MEMMODE)
; 849  : 
; 850  : init_dfail:
; 851  : 
; 852  : 
; 853  : 
; 855  : 
; 856  : 

; 857  : 

; 858  : 

; 859  : 
; 860  :     return 1;
; 861  : #endif
; 862  : 
; 863  : }   


  00038	e8bd8030	 ldmia     sp!, {r4, r5, pc}
  0003c		 |$L36922|

; 828  :     }
; 829  : 
; 830  : 

; 831  : 

; 832  : 
; 833  : #endif
; 834  : 
; 835  :     pDisk->d_fLBAMode = TRUE;

  0003c	e3a03001	 mov       r3, #1

; 836  : 
; 837  :     pDisk->d_DiskInfo.di_bytes_per_sect = BYTES_PER_SECTOR; 


  00040	e3a00c02	 mov       r0, #2, 24
  00044	e5853038	 str       r3, [r5, #0x38]
  00048	e5850024	 str       r0, [r5, #0x24]

; 838  :     pDisk->d_DiskInfo.di_cylinders = pc->drive[0].num_cylinders;

  0004c	e5940000	 ldr       r0, [r4]
  00050	e1d010b8	 ldrh      r1, [r0, #8]
  00054	e1a02801	 mov       r2, r1, lsl #16
  00058	e1a00822	 mov       r0, r2, lsr #16
  0005c	e5850028	 str       r0, [r5, #0x28]

; 839  :     pDisk->d_DiskInfo.di_heads = pc->drive[0].num_heads;

  00060	e5941000	 ldr       r1, [r4]
  00064	e1d100b4	 ldrh      r0, [r1, #4]
  00068	e1a02800	 mov       r2, r0, lsl #16
  0006c	e1a01822	 mov       r1, r2, lsr #16
  00070	e585102c	 str       r1, [r5, #0x2C]

; 840  :     pDisk->d_DiskInfo.di_sectors = pc->drive[0].sec_p_track;

  00074	e5940000	 ldr       r0, [r4]
  00078	e1d010b6	 ldrh      r1, [r0, #6]
  0007c	e1a02801	 mov       r2, r1, lsl #16
  00080	e1a00822	 mov       r0, r2, lsr #16
  00084	e5850030	 str       r0, [r5, #0x30]

; 841  :     pDisk->d_DiskInfo.di_total_sectors = pc->drive[0].total_lba;

  00088	e5941000	 ldr       r1, [r4]
  0008c	e5910000	 ldr       r0, [r1]

; 842  :     pDisk->d_DiskInfo.di_flags = DISK_INFO_FLAG_MBR;

  00090	e5853034	 str       r3, [r5, #0x34]
  00094	e5850020	 str       r0, [r5, #0x20]

; 843  : 
; 844  : 
; 845  :     return 0;

  00098	e3a00000	 mov       r0, #0

; 846  : 
; 847  : 
; 848  : #if (USE_MEMMODE)
; 849  : 
; 850  : init_dfail:
; 851  : 
; 852  : 
; 853  : 
; 855  : 
; 856  : 

; 857  : 

; 858  : 

; 859  : 
; 860  :     return 1;
; 861  : #endif
; 862  : 
; 863  : }   


  0009c	e8bd8030	 ldmia     sp!, {r4, r5, pc}
  000a0		 |$L37211|
  000a0	00000000	 DCD       |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@|
  000a4	00000000	 DCD       |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@|
  000a8	00000000	 DCD       |controller_s|
  000ac		 |$M37208|

			 ENDP  ; |InitDisk|

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -