1 .syntax unified 2 .cpu cortex-m3 3 .fpu softvfp 4 .eabi_attribute 20, 1 5 .eabi_attribute 21, 1 6 .eabi_attribute 23, 3 7 .eabi_attribute 24, 1 8 .eabi_attribute 25, 1 9 .eabi_attribute 26, 1 10 .eabi_attribute 30, 1 11 .eabi_attribute 34, 1 12 .eabi_attribute 18, 4 13 .thumb 14 .file "ff.c" 15 .text 16 .Ltext0: 17 .cfi_sections .debug_frame 18 .section .text.mem_cpy,"ax",%progbits 19 .align 2 20 .thumb 21 .thumb_func 23 mem_cpy: 24 .LFB0: 25 .file 1 "../../../Source/third_party/fatfs/src/ff.c" 1:../../../Source/third_party/fatfs/src/ff.c **** /*----------------------------------------------------------------------------/ 2:../../../Source/third_party/fatfs/src/ff.c **** / FatFs - FAT file system module R0.09b (C)ChaN, 2013 3:../../../Source/third_party/fatfs/src/ff.c **** /-----------------------------------------------------------------------------/ 4:../../../Source/third_party/fatfs/src/ff.c **** / FatFs module is a generic FAT file system module for small embedded systems. 5:../../../Source/third_party/fatfs/src/ff.c **** / This is a free software that opened for education, research and commercial 6:../../../Source/third_party/fatfs/src/ff.c **** / developments under license policy of following terms. 7:../../../Source/third_party/fatfs/src/ff.c **** / 8:../../../Source/third_party/fatfs/src/ff.c **** / Copyright (C) 2013, ChaN, all right reserved. 9:../../../Source/third_party/fatfs/src/ff.c **** / 10:../../../Source/third_party/fatfs/src/ff.c **** / * The FatFs module is a free software and there is NO WARRANTY. 11:../../../Source/third_party/fatfs/src/ff.c **** / * No restriction on use. You can use, modify and redistribute it for 12:../../../Source/third_party/fatfs/src/ff.c **** / personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. 13:../../../Source/third_party/fatfs/src/ff.c **** / * Redistributions of source code must retain the above copyright notice. 14:../../../Source/third_party/fatfs/src/ff.c **** / 15:../../../Source/third_party/fatfs/src/ff.c **** /-----------------------------------------------------------------------------/ 16:../../../Source/third_party/fatfs/src/ff.c **** / Feb 26,'06 R0.00 Prototype. 17:../../../Source/third_party/fatfs/src/ff.c **** / 18:../../../Source/third_party/fatfs/src/ff.c **** / Apr 29,'06 R0.01 First stable version. 19:../../../Source/third_party/fatfs/src/ff.c **** / 20:../../../Source/third_party/fatfs/src/ff.c **** / Jun 01,'06 R0.02 Added FAT12 support. 21:../../../Source/third_party/fatfs/src/ff.c **** / Removed unbuffered mode. 22:../../../Source/third_party/fatfs/src/ff.c **** / Fixed a problem on small (<32M) partition. 23:../../../Source/third_party/fatfs/src/ff.c **** / Jun 10,'06 R0.02a Added a configuration option (_FS_MINIMUM). 24:../../../Source/third_party/fatfs/src/ff.c **** / 25:../../../Source/third_party/fatfs/src/ff.c **** / Sep 22,'06 R0.03 Added f_rename(). 26:../../../Source/third_party/fatfs/src/ff.c **** / Changed option _FS_MINIMUM to _FS_MINIMIZE. 27:../../../Source/third_party/fatfs/src/ff.c **** / Dec 11,'06 R0.03a Improved cluster scan algorithm to write files fast. 28:../../../Source/third_party/fatfs/src/ff.c **** / Fixed f_mkdir() creates incorrect directory on FAT32. 29:../../../Source/third_party/fatfs/src/ff.c **** / 30:../../../Source/third_party/fatfs/src/ff.c **** / Feb 04,'07 R0.04 Supported multiple drive system. 31:../../../Source/third_party/fatfs/src/ff.c **** / Changed some interfaces for multiple drive system. 32:../../../Source/third_party/fatfs/src/ff.c **** / Changed f_mountdrv() to f_mount(). 33:../../../Source/third_party/fatfs/src/ff.c **** / Added f_mkfs(). 34:../../../Source/third_party/fatfs/src/ff.c **** / Apr 01,'07 R0.04a Supported multiple partitions on a physical drive. 35:../../../Source/third_party/fatfs/src/ff.c **** / Added a capability of extending file size to f_lseek(). 36:../../../Source/third_party/fatfs/src/ff.c **** / Added minimization level 3. 37:../../../Source/third_party/fatfs/src/ff.c **** / Fixed an endian sensitive code in f_mkfs(). 38:../../../Source/third_party/fatfs/src/ff.c **** / May 05,'07 R0.04b Added a configuration option _USE_NTFLAG. 39:../../../Source/third_party/fatfs/src/ff.c **** / Added FSInfo support. 40:../../../Source/third_party/fatfs/src/ff.c **** / Fixed DBCS name can result FR_INVALID_NAME. 41:../../../Source/third_party/fatfs/src/ff.c **** / Fixed short seek (<= csize) collapses the file object. 42:../../../Source/third_party/fatfs/src/ff.c **** / 43:../../../Source/third_party/fatfs/src/ff.c **** / Aug 25,'07 R0.05 Changed arguments of f_read(), f_write() and f_mkfs(). 44:../../../Source/third_party/fatfs/src/ff.c **** / Fixed f_mkfs() on FAT32 creates incorrect FSInfo. 45:../../../Source/third_party/fatfs/src/ff.c **** / Fixed f_mkdir() on FAT32 creates incorrect directory. 46:../../../Source/third_party/fatfs/src/ff.c **** / Feb 03,'08 R0.05a Added f_truncate() and f_utime(). 47:../../../Source/third_party/fatfs/src/ff.c **** / Fixed off by one error at FAT sub-type determination. 48:../../../Source/third_party/fatfs/src/ff.c **** / Fixed btr in f_read() can be mistruncated. 49:../../../Source/third_party/fatfs/src/ff.c **** / Fixed cached sector is not flushed when create and close without write. 50:../../../Source/third_party/fatfs/src/ff.c **** / 51:../../../Source/third_party/fatfs/src/ff.c **** / Apr 01,'08 R0.06 Added fputc(), fputs(), fprintf() and fgets(). 52:../../../Source/third_party/fatfs/src/ff.c **** / Improved performance of f_lseek() on moving to the same or following cluster. 53:../../../Source/third_party/fatfs/src/ff.c **** / 54:../../../Source/third_party/fatfs/src/ff.c **** / Apr 01,'09 R0.07 Merged Tiny-FatFs as a configuration option. (_FS_TINY) 55:../../../Source/third_party/fatfs/src/ff.c **** / Added long file name feature. 56:../../../Source/third_party/fatfs/src/ff.c **** / Added multiple code page feature. 57:../../../Source/third_party/fatfs/src/ff.c **** / Added re-entrancy for multitask operation. 58:../../../Source/third_party/fatfs/src/ff.c **** / Added auto cluster size selection to f_mkfs(). 59:../../../Source/third_party/fatfs/src/ff.c **** / Added rewind option to f_readdir(). 60:../../../Source/third_party/fatfs/src/ff.c **** / Changed result code of critical errors. 61:../../../Source/third_party/fatfs/src/ff.c **** / Renamed string functions to avoid name collision. 62:../../../Source/third_party/fatfs/src/ff.c **** / Apr 14,'09 R0.07a Separated out OS dependent code on reentrant cfg. 63:../../../Source/third_party/fatfs/src/ff.c **** / Added multiple sector size feature. 64:../../../Source/third_party/fatfs/src/ff.c **** / Jun 21,'09 R0.07c Fixed f_unlink() can return FR_OK on error. 65:../../../Source/third_party/fatfs/src/ff.c **** / Fixed wrong cache control in f_lseek(). 66:../../../Source/third_party/fatfs/src/ff.c **** / Added relative path feature. 67:../../../Source/third_party/fatfs/src/ff.c **** / Added f_chdir() and f_chdrive(). 68:../../../Source/third_party/fatfs/src/ff.c **** / Added proper case conversion to extended char. 69:../../../Source/third_party/fatfs/src/ff.c **** / Nov 03,'09 R0.07e Separated out configuration options from ff.h to ffconf.h. 70:../../../Source/third_party/fatfs/src/ff.c **** / Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. 71:../../../Source/third_party/fatfs/src/ff.c **** / Fixed name matching error on the 13 char boundary. 72:../../../Source/third_party/fatfs/src/ff.c **** / Added a configuration option, _LFN_UNICODE. 73:../../../Source/third_party/fatfs/src/ff.c **** / Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. 74:../../../Source/third_party/fatfs/src/ff.c **** / 75:../../../Source/third_party/fatfs/src/ff.c **** / May 15,'10 R0.08 Added a memory configuration option. (_USE_LFN = 3) 76:../../../Source/third_party/fatfs/src/ff.c **** / Added file lock feature. (_FS_SHARE) 77:../../../Source/third_party/fatfs/src/ff.c **** / Added fast seek feature. (_USE_FASTSEEK) 78:../../../Source/third_party/fatfs/src/ff.c **** / Changed some types on the API, XCHAR->TCHAR. 79:../../../Source/third_party/fatfs/src/ff.c **** / Changed fname member in the FILINFO structure on Unicode cfg. 80:../../../Source/third_party/fatfs/src/ff.c **** / String functions support UTF-8 encoding files on Unicode cfg. 81:../../../Source/third_party/fatfs/src/ff.c **** / Aug 16,'10 R0.08a Added f_getcwd(). (_FS_RPATH = 2) 82:../../../Source/third_party/fatfs/src/ff.c **** / Added sector erase feature. (_USE_ERASE) 83:../../../Source/third_party/fatfs/src/ff.c **** / Moved file lock semaphore table from fs object to the bss. 84:../../../Source/third_party/fatfs/src/ff.c **** / Fixed a wrong directory entry is created on non-LFN cfg when the given name con 85:../../../Source/third_party/fatfs/src/ff.c **** / Fixed f_mkfs() creates wrong FAT32 volume. 86:../../../Source/third_party/fatfs/src/ff.c **** / Jan 15,'11 R0.08b Fast seek feature is also applied to f_read() and f_write(). 87:../../../Source/third_party/fatfs/src/ff.c **** / f_lseek() reports required table size on creating CLMP. 88:../../../Source/third_party/fatfs/src/ff.c **** / Extended format syntax of f_printf function. 89:../../../Source/third_party/fatfs/src/ff.c **** / Ignores duplicated directory separators in given path name. 90:../../../Source/third_party/fatfs/src/ff.c **** / 91:../../../Source/third_party/fatfs/src/ff.c **** / Sep 06,'11 R0.09 f_mkfs() supports multiple partition to finish the multiple partition feature. 92:../../../Source/third_party/fatfs/src/ff.c **** / Added f_fdisk(). (_MULTI_PARTITION = 2) 93:../../../Source/third_party/fatfs/src/ff.c **** / Aug 27,'12 R0.09a Fixed assertion failure due to OS/2 EA on FAT12/16 volume. 94:../../../Source/third_party/fatfs/src/ff.c **** / Changed f_open() and f_opendir reject null object pointer to avoid crash. 95:../../../Source/third_party/fatfs/src/ff.c **** / Changed option name _FS_SHARE to _FS_LOCK. 96:../../../Source/third_party/fatfs/src/ff.c **** / Jan 24,'13 R0.09b Added f_setlabel() and f_getlabel(). (_USE_LABEL = 1) 97:../../../Source/third_party/fatfs/src/ff.c **** /---------------------------------------------------------------------------*/ 98:../../../Source/third_party/fatfs/src/ff.c **** 99:../../../Source/third_party/fatfs/src/ff.c **** #include "ff.h" /* FatFs configurations and declarations */ 100:../../../Source/third_party/fatfs/src/ff.c **** #include "diskio.h" /* Declarations of low level disk I/O functions */ 101:../../../Source/third_party/fatfs/src/ff.c **** 102:../../../Source/third_party/fatfs/src/ff.c **** 103:../../../Source/third_party/fatfs/src/ff.c **** /*-------------------------------------------------------------------------- 104:../../../Source/third_party/fatfs/src/ff.c **** 105:../../../Source/third_party/fatfs/src/ff.c **** Module Private Definitions 106:../../../Source/third_party/fatfs/src/ff.c **** 107:../../../Source/third_party/fatfs/src/ff.c **** ---------------------------------------------------------------------------*/ 108:../../../Source/third_party/fatfs/src/ff.c **** 109:../../../Source/third_party/fatfs/src/ff.c **** #if _FATFS != 82786 /* Revision ID */ 110:../../../Source/third_party/fatfs/src/ff.c **** #error Wrong include file (ff.h). 111:../../../Source/third_party/fatfs/src/ff.c **** #endif 112:../../../Source/third_party/fatfs/src/ff.c **** 113:../../../Source/third_party/fatfs/src/ff.c **** 114:../../../Source/third_party/fatfs/src/ff.c **** /* Definitions on sector size */ 115:../../../Source/third_party/fatfs/src/ff.c **** #if _MAX_SS != 512 && _MAX_SS != 1024 && _MAX_SS != 2048 && _MAX_SS != 4096 116:../../../Source/third_party/fatfs/src/ff.c **** #error Wrong sector size. 117:../../../Source/third_party/fatfs/src/ff.c **** #endif 118:../../../Source/third_party/fatfs/src/ff.c **** #if _MAX_SS != 512 119:../../../Source/third_party/fatfs/src/ff.c **** #define SS(fs) ((fs)->ssize) /* Variable sector size */ 120:../../../Source/third_party/fatfs/src/ff.c **** #else 121:../../../Source/third_party/fatfs/src/ff.c **** #define SS(fs) 512U /* Fixed sector size */ 122:../../../Source/third_party/fatfs/src/ff.c **** #endif 123:../../../Source/third_party/fatfs/src/ff.c **** 124:../../../Source/third_party/fatfs/src/ff.c **** 125:../../../Source/third_party/fatfs/src/ff.c **** /* Reentrancy related */ 126:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT 127:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN == 1 128:../../../Source/third_party/fatfs/src/ff.c **** #error Static LFN work area must not be used in re-entrant configuration. 129:../../../Source/third_party/fatfs/src/ff.c **** #endif 130:../../../Source/third_party/fatfs/src/ff.c **** #define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_TIMEOUT; } 131:../../../Source/third_party/fatfs/src/ff.c **** #define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } 132:../../../Source/third_party/fatfs/src/ff.c **** #else 133:../../../Source/third_party/fatfs/src/ff.c **** #define ENTER_FF(fs) 134:../../../Source/third_party/fatfs/src/ff.c **** #define LEAVE_FF(fs, res) return res 135:../../../Source/third_party/fatfs/src/ff.c **** #endif 136:../../../Source/third_party/fatfs/src/ff.c **** 137:../../../Source/third_party/fatfs/src/ff.c **** #define ABORT(fs, res) { fp->flag |= FA__ERROR; LEAVE_FF(fs, res); } 138:../../../Source/third_party/fatfs/src/ff.c **** 139:../../../Source/third_party/fatfs/src/ff.c **** 140:../../../Source/third_party/fatfs/src/ff.c **** /* File access control feature */ 141:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 142:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_READONLY 143:../../../Source/third_party/fatfs/src/ff.c **** #error _FS_LOCK must be 0 on read-only cfg. 144:../../../Source/third_party/fatfs/src/ff.c **** #endif 145:../../../Source/third_party/fatfs/src/ff.c **** typedef struct { 146:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; /* File ID 1, volume (NULL:blank entry) */ 147:../../../Source/third_party/fatfs/src/ff.c **** DWORD clu; /* File ID 2, directory */ 148:../../../Source/third_party/fatfs/src/ff.c **** WORD idx; /* File ID 3, directory index */ 149:../../../Source/third_party/fatfs/src/ff.c **** WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:write mode */ 150:../../../Source/third_party/fatfs/src/ff.c **** } FILESEM; 151:../../../Source/third_party/fatfs/src/ff.c **** #endif 152:../../../Source/third_party/fatfs/src/ff.c **** 153:../../../Source/third_party/fatfs/src/ff.c **** 154:../../../Source/third_party/fatfs/src/ff.c **** 155:../../../Source/third_party/fatfs/src/ff.c **** /* DBCS code ranges and SBCS extend char conversion table */ 156:../../../Source/third_party/fatfs/src/ff.c **** 157:../../../Source/third_party/fatfs/src/ff.c **** #if _CODE_PAGE == 932 /* Japanese Shift-JIS */ 158:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0x81 /* DBC 1st byte range 1 start */ 159:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1E 0x9F /* DBC 1st byte range 1 end */ 160:../../../Source/third_party/fatfs/src/ff.c **** #define _DF2S 0xE0 /* DBC 1st byte range 2 start */ 161:../../../Source/third_party/fatfs/src/ff.c **** #define _DF2E 0xFC /* DBC 1st byte range 2 end */ 162:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1S 0x40 /* DBC 2nd byte range 1 start */ 163:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1E 0x7E /* DBC 2nd byte range 1 end */ 164:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2S 0x80 /* DBC 2nd byte range 2 start */ 165:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2E 0xFC /* DBC 2nd byte range 2 end */ 166:../../../Source/third_party/fatfs/src/ff.c **** 167:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ 168:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0x81 169:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1E 0xFE 170:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1S 0x40 171:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1E 0x7E 172:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2S 0x80 173:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2E 0xFE 174:../../../Source/third_party/fatfs/src/ff.c **** 175:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 949 /* Korean */ 176:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0x81 177:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1E 0xFE 178:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1S 0x41 179:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1E 0x5A 180:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2S 0x61 181:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2E 0x7A 182:../../../Source/third_party/fatfs/src/ff.c **** #define _DS3S 0x81 183:../../../Source/third_party/fatfs/src/ff.c **** #define _DS3E 0xFE 184:../../../Source/third_party/fatfs/src/ff.c **** 185:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ 186:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0x81 187:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1E 0xFE 188:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1S 0x40 189:../../../Source/third_party/fatfs/src/ff.c **** #define _DS1E 0x7E 190:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2S 0xA1 191:../../../Source/third_party/fatfs/src/ff.c **** #define _DS2E 0xFE 192:../../../Source/third_party/fatfs/src/ff.c **** 193:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 437 /* U.S. (OEM) */ 194:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 195:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x9 196:../../../Source/third_party/fatfs/src/ff.c **** 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2, 197:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 198:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 199:../../../Source/third_party/fatfs/src/ff.c **** 200:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 720 /* Arabic (OEM) */ 201:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 202:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x9 203:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 204:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 205:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 206:../../../Source/third_party/fatfs/src/ff.c **** 207:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 737 /* Greek (OEM) */ 208:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 209:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 210:../../../Source/third_party/fatfs/src/ff.c **** 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2, 211:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 212:../../../Source/third_party/fatfs/src/ff.c **** 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 213:../../../Source/third_party/fatfs/src/ff.c **** 214:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 775 /* Baltic (OEM) */ 215:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 216:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x9 217:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 218:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7, 219:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 220:../../../Source/third_party/fatfs/src/ff.c **** 221:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ 222:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 223:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x9 224:../../../Source/third_party/fatfs/src/ff.c **** 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2, 225:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 226:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 227:../../../Source/third_party/fatfs/src/ff.c **** 228:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ 229:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 230:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x9 231:../../../Source/third_party/fatfs/src/ff.c **** 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2, 232:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2, 233:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2, 234:../../../Source/third_party/fatfs/src/ff.c **** 235:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ 236:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 237:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x9 238:../../../Source/third_party/fatfs/src/ff.c **** 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 239:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3, 240:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2, 241:../../../Source/third_party/fatfs/src/ff.c **** 242:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 857 /* Turkish (OEM) */ 243:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 244:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x9 245:../../../Source/third_party/fatfs/src/ff.c **** 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2, 246:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 247:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2, 248:../../../Source/third_party/fatfs/src/ff.c **** 249:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ 250:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 251:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x9 252:../../../Source/third_party/fatfs/src/ff.c **** 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2, 253:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2, 254:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 255:../../../Source/third_party/fatfs/src/ff.c **** 256:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ 257:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 258:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 259:../../../Source/third_party/fatfs/src/ff.c **** 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2, 260:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 261:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 262:../../../Source/third_party/fatfs/src/ff.c **** 263:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 866 /* Russian (OEM) */ 264:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 265:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 266:../../../Source/third_party/fatfs/src/ff.c **** 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2, 267:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 268:../../../Source/third_party/fatfs/src/ff.c **** 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2, 269:../../../Source/third_party/fatfs/src/ff.c **** 270:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ 271:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 272:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 273:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 274:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 275:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 276:../../../Source/third_party/fatfs/src/ff.c **** 277:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ 278:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 279:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 280:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 281:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 282:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 283:../../../Source/third_party/fatfs/src/ff.c **** 284:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ 285:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 286:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x8 287:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 288:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 289:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 290:../../../Source/third_party/fatfs/src/ff.c **** 291:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ 292:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 293:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 294:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 295:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 296:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 297:../../../Source/third_party/fatfs/src/ff.c **** 298:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1253 /* Greek (Windows) */ 299:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 300:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 301:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 302:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 303:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2, 304:../../../Source/third_party/fatfs/src/ff.c **** 305:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ 306:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 307:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 308:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 309:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 310:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 311:../../../Source/third_party/fatfs/src/ff.c **** 312:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ 313:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 314:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 315:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 316:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 317:../../../Source/third_party/fatfs/src/ff.c **** 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2, 318:../../../Source/third_party/fatfs/src/ff.c **** 319:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ 320:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 321:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 322:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 323:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 324:../../../Source/third_party/fatfs/src/ff.c **** 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2, 325:../../../Source/third_party/fatfs/src/ff.c **** 326:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ 327:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 328:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 329:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 330:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 331:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 332:../../../Source/third_party/fatfs/src/ff.c **** 333:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ 334:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 335:../../../Source/third_party/fatfs/src/ff.c **** #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x9 336:../../../Source/third_party/fatfs/src/ff.c **** 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2, 337:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2, 338:../../../Source/third_party/fatfs/src/ff.c **** 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2, 339:../../../Source/third_party/fatfs/src/ff.c **** 340:../../../Source/third_party/fatfs/src/ff.c **** #elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ 341:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 342:../../../Source/third_party/fatfs/src/ff.c **** #error Cannot use LFN feature without valid code page. 343:../../../Source/third_party/fatfs/src/ff.c **** #endif 344:../../../Source/third_party/fatfs/src/ff.c **** #define _DF1S 0 345:../../../Source/third_party/fatfs/src/ff.c **** 346:../../../Source/third_party/fatfs/src/ff.c **** #else 347:../../../Source/third_party/fatfs/src/ff.c **** #error Unknown code page 348:../../../Source/third_party/fatfs/src/ff.c **** 349:../../../Source/third_party/fatfs/src/ff.c **** #endif 350:../../../Source/third_party/fatfs/src/ff.c **** 351:../../../Source/third_party/fatfs/src/ff.c **** 352:../../../Source/third_party/fatfs/src/ff.c **** /* Character code support macros */ 353:../../../Source/third_party/fatfs/src/ff.c **** #define IsUpper(c) (((c)>='A')&&((c)<='Z')) 354:../../../Source/third_party/fatfs/src/ff.c **** #define IsLower(c) (((c)>='a')&&((c)<='z')) 355:../../../Source/third_party/fatfs/src/ff.c **** #define IsDigit(c) (((c)>='0')&&((c)<='9')) 356:../../../Source/third_party/fatfs/src/ff.c **** 357:../../../Source/third_party/fatfs/src/ff.c **** #if _DF1S /* Code page is DBCS */ 358:../../../Source/third_party/fatfs/src/ff.c **** 359:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _DF2S /* Two 1st byte areas */ 360:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) 361:../../../Source/third_party/fatfs/src/ff.c **** #else /* One 1st byte area */ 362:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) 363:../../../Source/third_party/fatfs/src/ff.c **** #endif 364:../../../Source/third_party/fatfs/src/ff.c **** 365:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _DS3S /* Three 2nd byte areas */ 366:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) 367:../../../Source/third_party/fatfs/src/ff.c **** #else /* Two 2nd byte areas */ 368:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) 369:../../../Source/third_party/fatfs/src/ff.c **** #endif 370:../../../Source/third_party/fatfs/src/ff.c **** 371:../../../Source/third_party/fatfs/src/ff.c **** #else /* Code page is SBCS */ 372:../../../Source/third_party/fatfs/src/ff.c **** 373:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS1(c) 0 374:../../../Source/third_party/fatfs/src/ff.c **** #define IsDBCS2(c) 0 375:../../../Source/third_party/fatfs/src/ff.c **** 376:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _DF1S */ 377:../../../Source/third_party/fatfs/src/ff.c **** 378:../../../Source/third_party/fatfs/src/ff.c **** 379:../../../Source/third_party/fatfs/src/ff.c **** /* Name status flags */ 380:../../../Source/third_party/fatfs/src/ff.c **** #define NS 11 /* Index of name status byte in fn[] */ 381:../../../Source/third_party/fatfs/src/ff.c **** #define NS_LOSS 0x01 /* Out of 8.3 format */ 382:../../../Source/third_party/fatfs/src/ff.c **** #define NS_LFN 0x02 /* Force to create LFN entry */ 383:../../../Source/third_party/fatfs/src/ff.c **** #define NS_LAST 0x04 /* Last segment */ 384:../../../Source/third_party/fatfs/src/ff.c **** #define NS_BODY 0x08 /* Lower case flag (body) */ 385:../../../Source/third_party/fatfs/src/ff.c **** #define NS_EXT 0x10 /* Lower case flag (ext) */ 386:../../../Source/third_party/fatfs/src/ff.c **** #define NS_DOT 0x20 /* Dot entry */ 387:../../../Source/third_party/fatfs/src/ff.c **** 388:../../../Source/third_party/fatfs/src/ff.c **** 389:../../../Source/third_party/fatfs/src/ff.c **** /* FAT sub-type boundaries */ 390:../../../Source/third_party/fatfs/src/ff.c **** /* Note that the FAT spec by Microsoft says 4085 but Windows works with 4087! */ 391:../../../Source/third_party/fatfs/src/ff.c **** #define MIN_FAT16 4086 /* Minimum number of clusters for FAT16 */ 392:../../../Source/third_party/fatfs/src/ff.c **** #define MIN_FAT32 65526 /* Minimum number of clusters for FAT32 */ 393:../../../Source/third_party/fatfs/src/ff.c **** 394:../../../Source/third_party/fatfs/src/ff.c **** 395:../../../Source/third_party/fatfs/src/ff.c **** /* FatFs refers the members in the FAT structures as byte array instead of 396:../../../Source/third_party/fatfs/src/ff.c **** / structure member because the structure is not binary compatible between 397:../../../Source/third_party/fatfs/src/ff.c **** / different platforms */ 398:../../../Source/third_party/fatfs/src/ff.c **** 399:../../../Source/third_party/fatfs/src/ff.c **** #define BS_jmpBoot 0 /* Jump instruction (3) */ 400:../../../Source/third_party/fatfs/src/ff.c **** #define BS_OEMName 3 /* OEM name (8) */ 401:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_BytsPerSec 11 /* Sector size [byte] (2) */ 402:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_SecPerClus 13 /* Cluster size [sector] (1) */ 403:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (2) */ 404:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_NumFATs 16 /* Number of FAT copies (1) */ 405:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_RootEntCnt 17 /* Number of root dir entries for FAT12/16 (2) */ 406:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_TotSec16 19 /* Volume size [sector] (2) */ 407:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_Media 21 /* Media descriptor (1) */ 408:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_FATSz16 22 /* FAT size [sector] (2) */ 409:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_SecPerTrk 24 /* Track size [sector] (2) */ 410:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_NumHeads 26 /* Number of heads (2) */ 411:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_HiddSec 28 /* Number of special hidden sectors (4) */ 412:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_TotSec32 32 /* Volume size [sector] (4) */ 413:../../../Source/third_party/fatfs/src/ff.c **** #define BS_DrvNum 36 /* Physical drive number (2) */ 414:../../../Source/third_party/fatfs/src/ff.c **** #define BS_BootSig 38 /* Extended boot signature (1) */ 415:../../../Source/third_party/fatfs/src/ff.c **** #define BS_VolID 39 /* Volume serial number (4) */ 416:../../../Source/third_party/fatfs/src/ff.c **** #define BS_VolLab 43 /* Volume label (8) */ 417:../../../Source/third_party/fatfs/src/ff.c **** #define BS_FilSysType 54 /* File system type (1) */ 418:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_FATSz32 36 /* FAT size [sector] (4) */ 419:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_ExtFlags 40 /* Extended flags (2) */ 420:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_FSVer 42 /* File system version (2) */ 421:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_RootClus 44 /* Root dir first cluster (4) */ 422:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_FSInfo 48 /* Offset of FSInfo sector (2) */ 423:../../../Source/third_party/fatfs/src/ff.c **** #define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */ 424:../../../Source/third_party/fatfs/src/ff.c **** #define BS_DrvNum32 64 /* Physical drive number (2) */ 425:../../../Source/third_party/fatfs/src/ff.c **** #define BS_BootSig32 66 /* Extended boot signature (1) */ 426:../../../Source/third_party/fatfs/src/ff.c **** #define BS_VolID32 67 /* Volume serial number (4) */ 427:../../../Source/third_party/fatfs/src/ff.c **** #define BS_VolLab32 71 /* Volume label (8) */ 428:../../../Source/third_party/fatfs/src/ff.c **** #define BS_FilSysType32 82 /* File system type (1) */ 429:../../../Source/third_party/fatfs/src/ff.c **** #define FSI_LeadSig 0 /* FSI: Leading signature (4) */ 430:../../../Source/third_party/fatfs/src/ff.c **** #define FSI_StrucSig 484 /* FSI: Structure signature (4) */ 431:../../../Source/third_party/fatfs/src/ff.c **** #define FSI_Free_Count 488 /* FSI: Number of free clusters (4) */ 432:../../../Source/third_party/fatfs/src/ff.c **** #define FSI_Nxt_Free 492 /* FSI: Last allocated cluster (4) */ 433:../../../Source/third_party/fatfs/src/ff.c **** #define MBR_Table 446 /* MBR: Partition table offset (2) */ 434:../../../Source/third_party/fatfs/src/ff.c **** #define SZ_PTE 16 /* MBR: Size of a partition table entry */ 435:../../../Source/third_party/fatfs/src/ff.c **** #define BS_55AA 510 /* Boot sector signature (2) */ 436:../../../Source/third_party/fatfs/src/ff.c **** 437:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_Name 0 /* Short file name (11) */ 438:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_Attr 11 /* Attribute (1) */ 439:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_NTres 12 /* NT flag (1) */ 440:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_CrtTimeTenth 13 /* Created time sub-second (1) */ 441:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_CrtTime 14 /* Created time (2) */ 442:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_CrtDate 16 /* Created date (2) */ 443:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_LstAccDate 18 /* Last accessed date (2) */ 444:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (2) */ 445:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_WrtTime 22 /* Modified time (2) */ 446:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_WrtDate 24 /* Modified date (2) */ 447:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (2) */ 448:../../../Source/third_party/fatfs/src/ff.c **** #define DIR_FileSize 28 /* File size (4) */ 449:../../../Source/third_party/fatfs/src/ff.c **** #define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */ 450:../../../Source/third_party/fatfs/src/ff.c **** #define LDIR_Attr 11 /* LFN attribute (1) */ 451:../../../Source/third_party/fatfs/src/ff.c **** #define LDIR_Type 12 /* LFN type (1) */ 452:../../../Source/third_party/fatfs/src/ff.c **** #define LDIR_Chksum 13 /* Sum of corresponding SFN entry */ 453:../../../Source/third_party/fatfs/src/ff.c **** #define LDIR_FstClusLO 26 /* Filled by zero (0) */ 454:../../../Source/third_party/fatfs/src/ff.c **** #define SZ_DIR 32 /* Size of a directory entry */ 455:../../../Source/third_party/fatfs/src/ff.c **** #define LLE 0x40 /* Last long entry flag in LDIR_Ord */ 456:../../../Source/third_party/fatfs/src/ff.c **** #define DDE 0xE5 /* Deleted directory entry mark in DIR_Name[0] */ 457:../../../Source/third_party/fatfs/src/ff.c **** #define NDDE 0x05 /* Replacement of the character collides with DDE */ 458:../../../Source/third_party/fatfs/src/ff.c **** 459:../../../Source/third_party/fatfs/src/ff.c **** 460:../../../Source/third_party/fatfs/src/ff.c **** /*------------------------------------------------------------*/ 461:../../../Source/third_party/fatfs/src/ff.c **** /* Module private work area */ 462:../../../Source/third_party/fatfs/src/ff.c **** /*------------------------------------------------------------*/ 463:../../../Source/third_party/fatfs/src/ff.c **** /* Note that uninitialized variables with static duration are 464:../../../Source/third_party/fatfs/src/ff.c **** / zeroed/nulled at start-up. If not, the compiler or start-up 465:../../../Source/third_party/fatfs/src/ff.c **** / routine is out of ANSI-C standard. 466:../../../Source/third_party/fatfs/src/ff.c **** */ 467:../../../Source/third_party/fatfs/src/ff.c **** 468:../../../Source/third_party/fatfs/src/ff.c **** #if _VOLUMES 469:../../../Source/third_party/fatfs/src/ff.c **** static 470:../../../Source/third_party/fatfs/src/ff.c **** FATFS *FatFs[_VOLUMES]; /* Pointer to the file system objects (logical drives) */ 471:../../../Source/third_party/fatfs/src/ff.c **** #else 472:../../../Source/third_party/fatfs/src/ff.c **** #error Number of volumes must not be 0. 473:../../../Source/third_party/fatfs/src/ff.c **** #endif 474:../../../Source/third_party/fatfs/src/ff.c **** 475:../../../Source/third_party/fatfs/src/ff.c **** static 476:../../../Source/third_party/fatfs/src/ff.c **** WORD Fsid; /* File system mount ID */ 477:../../../Source/third_party/fatfs/src/ff.c **** 478:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 479:../../../Source/third_party/fatfs/src/ff.c **** static 480:../../../Source/third_party/fatfs/src/ff.c **** BYTE CurrVol; /* Current drive */ 481:../../../Source/third_party/fatfs/src/ff.c **** #endif 482:../../../Source/third_party/fatfs/src/ff.c **** 483:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 484:../../../Source/third_party/fatfs/src/ff.c **** static 485:../../../Source/third_party/fatfs/src/ff.c **** FILESEM Files[_FS_LOCK]; /* File lock semaphores */ 486:../../../Source/third_party/fatfs/src/ff.c **** #endif 487:../../../Source/third_party/fatfs/src/ff.c **** 488:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN == 0 /* No LFN feature */ 489:../../../Source/third_party/fatfs/src/ff.c **** #define DEF_NAMEBUF BYTE sfn[12] 490:../../../Source/third_party/fatfs/src/ff.c **** #define INIT_BUF(dobj) (dobj).fn = sfn 491:../../../Source/third_party/fatfs/src/ff.c **** #define FREE_BUF() 492:../../../Source/third_party/fatfs/src/ff.c **** 493:../../../Source/third_party/fatfs/src/ff.c **** #elif _USE_LFN == 1 /* LFN feature with static working buffer */ 494:../../../Source/third_party/fatfs/src/ff.c **** static WCHAR LfnBuf[_MAX_LFN+1]; 495:../../../Source/third_party/fatfs/src/ff.c **** #define DEF_NAMEBUF BYTE sfn[12] 496:../../../Source/third_party/fatfs/src/ff.c **** #define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = LfnBuf; } 497:../../../Source/third_party/fatfs/src/ff.c **** #define FREE_BUF() 498:../../../Source/third_party/fatfs/src/ff.c **** 499:../../../Source/third_party/fatfs/src/ff.c **** #elif _USE_LFN == 2 /* LFN feature with dynamic working buffer on the stack */ 500:../../../Source/third_party/fatfs/src/ff.c **** #define DEF_NAMEBUF BYTE sfn[12]; WCHAR lbuf[_MAX_LFN+1] 501:../../../Source/third_party/fatfs/src/ff.c **** #define INIT_BUF(dobj) { (dobj).fn = sfn; (dobj).lfn = lbuf; } 502:../../../Source/third_party/fatfs/src/ff.c **** #define FREE_BUF() 503:../../../Source/third_party/fatfs/src/ff.c **** 504:../../../Source/third_party/fatfs/src/ff.c **** #elif _USE_LFN == 3 /* LFN feature with dynamic working buffer on the heap */ 505:../../../Source/third_party/fatfs/src/ff.c **** #define DEF_NAMEBUF BYTE sfn[12]; WCHAR *lfn 506:../../../Source/third_party/fatfs/src/ff.c **** #define INIT_BUF(dobj) { lfn = ff_memalloc((_MAX_LFN + 1) * 2); \ 507:../../../Source/third_party/fatfs/src/ff.c **** if (!lfn) LEAVE_FF((dobj).fs, FR_NOT_ENOUGH_CORE); \ 508:../../../Source/third_party/fatfs/src/ff.c **** (dobj).lfn = lfn; (dobj).fn = sfn; } 509:../../../Source/third_party/fatfs/src/ff.c **** #define FREE_BUF() ff_memfree(lfn) 510:../../../Source/third_party/fatfs/src/ff.c **** 511:../../../Source/third_party/fatfs/src/ff.c **** #else 512:../../../Source/third_party/fatfs/src/ff.c **** #error Wrong LFN configuration. 513:../../../Source/third_party/fatfs/src/ff.c **** #endif 514:../../../Source/third_party/fatfs/src/ff.c **** 515:../../../Source/third_party/fatfs/src/ff.c **** 516:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _EXCVT 517:../../../Source/third_party/fatfs/src/ff.c **** static 518:../../../Source/third_party/fatfs/src/ff.c **** const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended chars */ 519:../../../Source/third_party/fatfs/src/ff.c **** #endif 520:../../../Source/third_party/fatfs/src/ff.c **** 521:../../../Source/third_party/fatfs/src/ff.c **** 522:../../../Source/third_party/fatfs/src/ff.c **** 523:../../../Source/third_party/fatfs/src/ff.c **** 524:../../../Source/third_party/fatfs/src/ff.c **** 525:../../../Source/third_party/fatfs/src/ff.c **** 526:../../../Source/third_party/fatfs/src/ff.c **** /*-------------------------------------------------------------------------- 527:../../../Source/third_party/fatfs/src/ff.c **** 528:../../../Source/third_party/fatfs/src/ff.c **** Module Private Functions 529:../../../Source/third_party/fatfs/src/ff.c **** 530:../../../Source/third_party/fatfs/src/ff.c **** ---------------------------------------------------------------------------*/ 531:../../../Source/third_party/fatfs/src/ff.c **** 532:../../../Source/third_party/fatfs/src/ff.c **** 533:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 534:../../../Source/third_party/fatfs/src/ff.c **** /* String functions */ 535:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 536:../../../Source/third_party/fatfs/src/ff.c **** 537:../../../Source/third_party/fatfs/src/ff.c **** /* Copy memory to memory */ 538:../../../Source/third_party/fatfs/src/ff.c **** static 539:../../../Source/third_party/fatfs/src/ff.c **** void mem_cpy (void* dst, const void* src, UINT cnt) { 26 .loc 1 539 0 27 .cfi_startproc 28 @ args = 0, pretend = 0, frame = 0 29 @ frame_needed = 0, uses_anonymous_args = 0 30 @ link register save eliminated. 31 .LVL0: 540:../../../Source/third_party/fatfs/src/ff.c **** BYTE *d = (BYTE*)dst; 541:../../../Source/third_party/fatfs/src/ff.c **** const BYTE *s = (const BYTE*)src; 542:../../../Source/third_party/fatfs/src/ff.c **** 543:../../../Source/third_party/fatfs/src/ff.c **** #if _WORD_ACCESS == 1 544:../../../Source/third_party/fatfs/src/ff.c **** while (cnt >= sizeof (int)) { 545:../../../Source/third_party/fatfs/src/ff.c **** *(int*)d = *(int*)s; 546:../../../Source/third_party/fatfs/src/ff.c **** d += sizeof (int); s += sizeof (int); 547:../../../Source/third_party/fatfs/src/ff.c **** cnt -= sizeof (int); 548:../../../Source/third_party/fatfs/src/ff.c **** } 549:../../../Source/third_party/fatfs/src/ff.c **** #endif 550:../../../Source/third_party/fatfs/src/ff.c **** while (cnt--) 32 .loc 1 550 0 33 0000 3AB1 cbz r2, .L1 34 0002 0138 subs r0, r0, #1 35 .LVL1: 36 0004 8A18 adds r2, r1, r2 37 .LVL2: 38 .L3: 551:../../../Source/third_party/fatfs/src/ff.c **** *d++ = *s++; 39 .loc 1 551 0 40 0006 11F8013B ldrb r3, [r1], #1 @ zero_extendqisi2 41 .LVL3: 42 000a 00F8013F strb r3, [r0, #1]! 43 .LVL4: 550:../../../Source/third_party/fatfs/src/ff.c **** *d++ = *s++; 44 .loc 1 550 0 45 000e 9142 cmp r1, r2 46 0010 F9D1 bne .L3 47 .LVL5: 48 .L1: 49 0012 7047 bx lr 50 .cfi_endproc 51 .LFE0: 53 .section .text.ld_clust,"ax",%progbits 54 .align 2 55 .thumb 56 .thumb_func 58 ld_clust: 59 .LFB15: 552:../../../Source/third_party/fatfs/src/ff.c **** } 553:../../../Source/third_party/fatfs/src/ff.c **** 554:../../../Source/third_party/fatfs/src/ff.c **** /* Fill memory */ 555:../../../Source/third_party/fatfs/src/ff.c **** static 556:../../../Source/third_party/fatfs/src/ff.c **** void mem_set (void* dst, int val, UINT cnt) { 557:../../../Source/third_party/fatfs/src/ff.c **** BYTE *d = (BYTE*)dst; 558:../../../Source/third_party/fatfs/src/ff.c **** 559:../../../Source/third_party/fatfs/src/ff.c **** while (cnt--) 560:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 561:../../../Source/third_party/fatfs/src/ff.c **** } 562:../../../Source/third_party/fatfs/src/ff.c **** 563:../../../Source/third_party/fatfs/src/ff.c **** /* Compare memory to memory */ 564:../../../Source/third_party/fatfs/src/ff.c **** static 565:../../../Source/third_party/fatfs/src/ff.c **** int mem_cmp (const void* dst, const void* src, UINT cnt) { 566:../../../Source/third_party/fatfs/src/ff.c **** const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; 567:../../../Source/third_party/fatfs/src/ff.c **** int r = 0; 568:../../../Source/third_party/fatfs/src/ff.c **** 569:../../../Source/third_party/fatfs/src/ff.c **** while (cnt-- && (r = *d++ - *s++) == 0) ; 570:../../../Source/third_party/fatfs/src/ff.c **** return r; 571:../../../Source/third_party/fatfs/src/ff.c **** } 572:../../../Source/third_party/fatfs/src/ff.c **** 573:../../../Source/third_party/fatfs/src/ff.c **** /* Check if chr is contained in the string */ 574:../../../Source/third_party/fatfs/src/ff.c **** static 575:../../../Source/third_party/fatfs/src/ff.c **** int chk_chr (const char* str, int chr) { 576:../../../Source/third_party/fatfs/src/ff.c **** while (*str && *str != chr) str++; 577:../../../Source/third_party/fatfs/src/ff.c **** return *str; 578:../../../Source/third_party/fatfs/src/ff.c **** } 579:../../../Source/third_party/fatfs/src/ff.c **** 580:../../../Source/third_party/fatfs/src/ff.c **** 581:../../../Source/third_party/fatfs/src/ff.c **** 582:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 583:../../../Source/third_party/fatfs/src/ff.c **** /* Request/Release grant to access the volume */ 584:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 585:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT 586:../../../Source/third_party/fatfs/src/ff.c **** 587:../../../Source/third_party/fatfs/src/ff.c **** static 588:../../../Source/third_party/fatfs/src/ff.c **** int lock_fs ( 589:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs /* File system object */ 590:../../../Source/third_party/fatfs/src/ff.c **** ) 591:../../../Source/third_party/fatfs/src/ff.c **** { 592:../../../Source/third_party/fatfs/src/ff.c **** return ff_req_grant(fs->sobj); 593:../../../Source/third_party/fatfs/src/ff.c **** } 594:../../../Source/third_party/fatfs/src/ff.c **** 595:../../../Source/third_party/fatfs/src/ff.c **** 596:../../../Source/third_party/fatfs/src/ff.c **** static 597:../../../Source/third_party/fatfs/src/ff.c **** void unlock_fs ( 598:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 599:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res /* Result code to be returned */ 600:../../../Source/third_party/fatfs/src/ff.c **** ) 601:../../../Source/third_party/fatfs/src/ff.c **** { 602:../../../Source/third_party/fatfs/src/ff.c **** if (fs && 603:../../../Source/third_party/fatfs/src/ff.c **** res != FR_NOT_ENABLED && 604:../../../Source/third_party/fatfs/src/ff.c **** res != FR_INVALID_DRIVE && 605:../../../Source/third_party/fatfs/src/ff.c **** res != FR_INVALID_OBJECT && 606:../../../Source/third_party/fatfs/src/ff.c **** res != FR_TIMEOUT) { 607:../../../Source/third_party/fatfs/src/ff.c **** ff_rel_grant(fs->sobj); 608:../../../Source/third_party/fatfs/src/ff.c **** } 609:../../../Source/third_party/fatfs/src/ff.c **** } 610:../../../Source/third_party/fatfs/src/ff.c **** #endif 611:../../../Source/third_party/fatfs/src/ff.c **** 612:../../../Source/third_party/fatfs/src/ff.c **** 613:../../../Source/third_party/fatfs/src/ff.c **** 614:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 615:../../../Source/third_party/fatfs/src/ff.c **** /* File lock control functions */ 616:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 617:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 618:../../../Source/third_party/fatfs/src/ff.c **** 619:../../../Source/third_party/fatfs/src/ff.c **** static 620:../../../Source/third_party/fatfs/src/ff.c **** FRESULT chk_lock ( /* Check if the file can be accessed */ 621:../../../Source/third_party/fatfs/src/ff.c **** DIR* dj, /* Directory object pointing the file to be checked */ 622:../../../Source/third_party/fatfs/src/ff.c **** int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ 623:../../../Source/third_party/fatfs/src/ff.c **** ) 624:../../../Source/third_party/fatfs/src/ff.c **** { 625:../../../Source/third_party/fatfs/src/ff.c **** UINT i, be; 626:../../../Source/third_party/fatfs/src/ff.c **** 627:../../../Source/third_party/fatfs/src/ff.c **** /* Search file semaphore table */ 628:../../../Source/third_party/fatfs/src/ff.c **** for (i = be = 0; i < _FS_LOCK; i++) { 629:../../../Source/third_party/fatfs/src/ff.c **** if (Files[i].fs) { /* Existing entry */ 630:../../../Source/third_party/fatfs/src/ff.c **** if (Files[i].fs == dj->fs && /* Check if the file matched with an open file */ 631:../../../Source/third_party/fatfs/src/ff.c **** Files[i].clu == dj->sclust && 632:../../../Source/third_party/fatfs/src/ff.c **** Files[i].idx == dj->index) break; 633:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Blank entry */ 634:../../../Source/third_party/fatfs/src/ff.c **** be++; 635:../../../Source/third_party/fatfs/src/ff.c **** } 636:../../../Source/third_party/fatfs/src/ff.c **** } 637:../../../Source/third_party/fatfs/src/ff.c **** if (i == _FS_LOCK) /* The file is not opened */ 638:../../../Source/third_party/fatfs/src/ff.c **** return (be || acc == 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new file? 639:../../../Source/third_party/fatfs/src/ff.c **** 640:../../../Source/third_party/fatfs/src/ff.c **** /* The file has been opened. Reject any open against writing file and all write mode open */ 641:../../../Source/third_party/fatfs/src/ff.c **** return (acc || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; 642:../../../Source/third_party/fatfs/src/ff.c **** } 643:../../../Source/third_party/fatfs/src/ff.c **** 644:../../../Source/third_party/fatfs/src/ff.c **** 645:../../../Source/third_party/fatfs/src/ff.c **** static 646:../../../Source/third_party/fatfs/src/ff.c **** int enq_lock (void) /* Check if an entry is available for a new file */ 647:../../../Source/third_party/fatfs/src/ff.c **** { 648:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 649:../../../Source/third_party/fatfs/src/ff.c **** 650:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; 651:../../../Source/third_party/fatfs/src/ff.c **** return (i == _FS_LOCK) ? 0 : 1; 652:../../../Source/third_party/fatfs/src/ff.c **** } 653:../../../Source/third_party/fatfs/src/ff.c **** 654:../../../Source/third_party/fatfs/src/ff.c **** 655:../../../Source/third_party/fatfs/src/ff.c **** static 656:../../../Source/third_party/fatfs/src/ff.c **** UINT inc_lock ( /* Increment file open counter and returns its index (0:int error) */ 657:../../../Source/third_party/fatfs/src/ff.c **** DIR* dj, /* Directory object pointing the file to register or increment */ 658:../../../Source/third_party/fatfs/src/ff.c **** int acc /* Desired access mode (0:Read, !0:Write) */ 659:../../../Source/third_party/fatfs/src/ff.c **** ) 660:../../../Source/third_party/fatfs/src/ff.c **** { 661:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 662:../../../Source/third_party/fatfs/src/ff.c **** 663:../../../Source/third_party/fatfs/src/ff.c **** 664:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < _FS_LOCK; i++) { /* Find the file */ 665:../../../Source/third_party/fatfs/src/ff.c **** if (Files[i].fs == dj->fs && 666:../../../Source/third_party/fatfs/src/ff.c **** Files[i].clu == dj->sclust && 667:../../../Source/third_party/fatfs/src/ff.c **** Files[i].idx == dj->index) break; 668:../../../Source/third_party/fatfs/src/ff.c **** } 669:../../../Source/third_party/fatfs/src/ff.c **** 670:../../../Source/third_party/fatfs/src/ff.c **** if (i == _FS_LOCK) { /* Not opened. Register it as new. */ 671:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; 672:../../../Source/third_party/fatfs/src/ff.c **** if (i == _FS_LOCK) return 0; /* No space to register (int err) */ 673:../../../Source/third_party/fatfs/src/ff.c **** Files[i].fs = dj->fs; 674:../../../Source/third_party/fatfs/src/ff.c **** Files[i].clu = dj->sclust; 675:../../../Source/third_party/fatfs/src/ff.c **** Files[i].idx = dj->index; 676:../../../Source/third_party/fatfs/src/ff.c **** Files[i].ctr = 0; 677:../../../Source/third_party/fatfs/src/ff.c **** } 678:../../../Source/third_party/fatfs/src/ff.c **** 679:../../../Source/third_party/fatfs/src/ff.c **** if (acc && Files[i].ctr) return 0; /* Access violation (int err) */ 680:../../../Source/third_party/fatfs/src/ff.c **** 681:../../../Source/third_party/fatfs/src/ff.c **** Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ 682:../../../Source/third_party/fatfs/src/ff.c **** 683:../../../Source/third_party/fatfs/src/ff.c **** return i + 1; 684:../../../Source/third_party/fatfs/src/ff.c **** } 685:../../../Source/third_party/fatfs/src/ff.c **** 686:../../../Source/third_party/fatfs/src/ff.c **** 687:../../../Source/third_party/fatfs/src/ff.c **** static 688:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dec_lock ( /* Decrement file open counter */ 689:../../../Source/third_party/fatfs/src/ff.c **** UINT i /* Semaphore index */ 690:../../../Source/third_party/fatfs/src/ff.c **** ) 691:../../../Source/third_party/fatfs/src/ff.c **** { 692:../../../Source/third_party/fatfs/src/ff.c **** WORD n; 693:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 694:../../../Source/third_party/fatfs/src/ff.c **** 695:../../../Source/third_party/fatfs/src/ff.c **** 696:../../../Source/third_party/fatfs/src/ff.c **** if (--i < _FS_LOCK) { 697:../../../Source/third_party/fatfs/src/ff.c **** n = Files[i].ctr; 698:../../../Source/third_party/fatfs/src/ff.c **** if (n == 0x100) n = 0; 699:../../../Source/third_party/fatfs/src/ff.c **** if (n) n--; 700:../../../Source/third_party/fatfs/src/ff.c **** Files[i].ctr = n; 701:../../../Source/third_party/fatfs/src/ff.c **** if (!n) Files[i].fs = 0; 702:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 703:../../../Source/third_party/fatfs/src/ff.c **** } else { 704:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 705:../../../Source/third_party/fatfs/src/ff.c **** } 706:../../../Source/third_party/fatfs/src/ff.c **** return res; 707:../../../Source/third_party/fatfs/src/ff.c **** } 708:../../../Source/third_party/fatfs/src/ff.c **** 709:../../../Source/third_party/fatfs/src/ff.c **** 710:../../../Source/third_party/fatfs/src/ff.c **** static 711:../../../Source/third_party/fatfs/src/ff.c **** void clear_lock ( /* Clear lock entries of the volume */ 712:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs 713:../../../Source/third_party/fatfs/src/ff.c **** ) 714:../../../Source/third_party/fatfs/src/ff.c **** { 715:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 716:../../../Source/third_party/fatfs/src/ff.c **** 717:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < _FS_LOCK; i++) { 718:../../../Source/third_party/fatfs/src/ff.c **** if (Files[i].fs == fs) Files[i].fs = 0; 719:../../../Source/third_party/fatfs/src/ff.c **** } 720:../../../Source/third_party/fatfs/src/ff.c **** } 721:../../../Source/third_party/fatfs/src/ff.c **** #endif 722:../../../Source/third_party/fatfs/src/ff.c **** 723:../../../Source/third_party/fatfs/src/ff.c **** 724:../../../Source/third_party/fatfs/src/ff.c **** 725:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 726:../../../Source/third_party/fatfs/src/ff.c **** /* Move/Flush disk access window */ 727:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 728:../../../Source/third_party/fatfs/src/ff.c **** 729:../../../Source/third_party/fatfs/src/ff.c **** 730:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 731:../../../Source/third_party/fatfs/src/ff.c **** static 732:../../../Source/third_party/fatfs/src/ff.c **** FRESULT sync_window ( 733:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs /* File system object */ 734:../../../Source/third_party/fatfs/src/ff.c **** ) 735:../../../Source/third_party/fatfs/src/ff.c **** { 736:../../../Source/third_party/fatfs/src/ff.c **** DWORD wsect; 737:../../../Source/third_party/fatfs/src/ff.c **** UINT nf; 738:../../../Source/third_party/fatfs/src/ff.c **** 739:../../../Source/third_party/fatfs/src/ff.c **** 740:../../../Source/third_party/fatfs/src/ff.c **** if (fs->wflag) { /* Write back the sector if it is dirty */ 741:../../../Source/third_party/fatfs/src/ff.c **** wsect = fs->winsect; /* Current sector number */ 742:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fs->drv, fs->win, wsect, 1) != RES_OK) 743:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 744:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 0; 745:../../../Source/third_party/fatfs/src/ff.c **** if (wsect >= fs->fatbase && wsect < (fs->fatbase + fs->fsize)) { /* In FAT area? */ 746:../../../Source/third_party/fatfs/src/ff.c **** for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ 747:../../../Source/third_party/fatfs/src/ff.c **** wsect += fs->fsize; 748:../../../Source/third_party/fatfs/src/ff.c **** disk_write(fs->drv, fs->win, wsect, 1); 749:../../../Source/third_party/fatfs/src/ff.c **** } 750:../../../Source/third_party/fatfs/src/ff.c **** } 751:../../../Source/third_party/fatfs/src/ff.c **** } 752:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 753:../../../Source/third_party/fatfs/src/ff.c **** } 754:../../../Source/third_party/fatfs/src/ff.c **** #endif 755:../../../Source/third_party/fatfs/src/ff.c **** 756:../../../Source/third_party/fatfs/src/ff.c **** 757:../../../Source/third_party/fatfs/src/ff.c **** static 758:../../../Source/third_party/fatfs/src/ff.c **** FRESULT move_window ( 759:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 760:../../../Source/third_party/fatfs/src/ff.c **** DWORD sector /* Sector number to make appearance in the fs->win[] */ 761:../../../Source/third_party/fatfs/src/ff.c **** ) 762:../../../Source/third_party/fatfs/src/ff.c **** { 763:../../../Source/third_party/fatfs/src/ff.c **** if (sector != fs->winsect) { /* Changed current window */ 764:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 765:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(fs) != FR_OK) 766:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 767:../../../Source/third_party/fatfs/src/ff.c **** #endif 768:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fs->drv, fs->win, sector, 1) != RES_OK) 769:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 770:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = sector; 771:../../../Source/third_party/fatfs/src/ff.c **** } 772:../../../Source/third_party/fatfs/src/ff.c **** 773:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 774:../../../Source/third_party/fatfs/src/ff.c **** } 775:../../../Source/third_party/fatfs/src/ff.c **** 776:../../../Source/third_party/fatfs/src/ff.c **** 777:../../../Source/third_party/fatfs/src/ff.c **** 778:../../../Source/third_party/fatfs/src/ff.c **** 779:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 780:../../../Source/third_party/fatfs/src/ff.c **** /* Synchronize file system and strage device */ 781:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 782:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 783:../../../Source/third_party/fatfs/src/ff.c **** static 784:../../../Source/third_party/fatfs/src/ff.c **** FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */ 785:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs /* File system object */ 786:../../../Source/third_party/fatfs/src/ff.c **** ) 787:../../../Source/third_party/fatfs/src/ff.c **** { 788:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 789:../../../Source/third_party/fatfs/src/ff.c **** 790:../../../Source/third_party/fatfs/src/ff.c **** 791:../../../Source/third_party/fatfs/src/ff.c **** res = sync_window(fs); 792:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 793:../../../Source/third_party/fatfs/src/ff.c **** /* Update FSInfo sector if needed */ 794:../../../Source/third_party/fatfs/src/ff.c **** if (fs->fs_type == FS_FAT32 && fs->fsi_flag) { 795:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = 0; 796:../../../Source/third_party/fatfs/src/ff.c **** /* Create FSInfo structure */ 797:../../../Source/third_party/fatfs/src/ff.c **** mem_set(fs->win, 0, 512); 798:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(fs->win+BS_55AA, 0xAA55); 799:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); 800:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); 801:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); 802:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); 803:../../../Source/third_party/fatfs/src/ff.c **** /* Write it into the FSInfo sector */ 804:../../../Source/third_party/fatfs/src/ff.c **** disk_write(fs->drv, fs->win, fs->fsi_sector, 1); 805:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 0; 806:../../../Source/third_party/fatfs/src/ff.c **** } 807:../../../Source/third_party/fatfs/src/ff.c **** /* Make sure that no pending write process in the physical drive */ 808:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(fs->drv, CTRL_SYNC, 0) != RES_OK) 809:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DISK_ERR; 810:../../../Source/third_party/fatfs/src/ff.c **** } 811:../../../Source/third_party/fatfs/src/ff.c **** 812:../../../Source/third_party/fatfs/src/ff.c **** return res; 813:../../../Source/third_party/fatfs/src/ff.c **** } 814:../../../Source/third_party/fatfs/src/ff.c **** #endif 815:../../../Source/third_party/fatfs/src/ff.c **** 816:../../../Source/third_party/fatfs/src/ff.c **** 817:../../../Source/third_party/fatfs/src/ff.c **** 818:../../../Source/third_party/fatfs/src/ff.c **** 819:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 820:../../../Source/third_party/fatfs/src/ff.c **** /* Get sector# from cluster# */ 821:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 822:../../../Source/third_party/fatfs/src/ff.c **** 823:../../../Source/third_party/fatfs/src/ff.c **** 824:../../../Source/third_party/fatfs/src/ff.c **** DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ 825:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 826:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst /* Cluster# to be converted */ 827:../../../Source/third_party/fatfs/src/ff.c **** ) 828:../../../Source/third_party/fatfs/src/ff.c **** { 829:../../../Source/third_party/fatfs/src/ff.c **** clst -= 2; 830:../../../Source/third_party/fatfs/src/ff.c **** if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ 831:../../../Source/third_party/fatfs/src/ff.c **** return clst * fs->csize + fs->database; 832:../../../Source/third_party/fatfs/src/ff.c **** } 833:../../../Source/third_party/fatfs/src/ff.c **** 834:../../../Source/third_party/fatfs/src/ff.c **** 835:../../../Source/third_party/fatfs/src/ff.c **** 836:../../../Source/third_party/fatfs/src/ff.c **** 837:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 838:../../../Source/third_party/fatfs/src/ff.c **** /* FAT access - Read value of a FAT entry */ 839:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 840:../../../Source/third_party/fatfs/src/ff.c **** 841:../../../Source/third_party/fatfs/src/ff.c **** 842:../../../Source/third_party/fatfs/src/ff.c **** DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, Else:Cluster status */ 843:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 844:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst /* Cluster# to get the link information */ 845:../../../Source/third_party/fatfs/src/ff.c **** ) 846:../../../Source/third_party/fatfs/src/ff.c **** { 847:../../../Source/third_party/fatfs/src/ff.c **** UINT wc, bc; 848:../../../Source/third_party/fatfs/src/ff.c **** BYTE *p; 849:../../../Source/third_party/fatfs/src/ff.c **** 850:../../../Source/third_party/fatfs/src/ff.c **** 851:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= fs->n_fatent) /* Check range */ 852:../../../Source/third_party/fatfs/src/ff.c **** return 1; 853:../../../Source/third_party/fatfs/src/ff.c **** 854:../../../Source/third_party/fatfs/src/ff.c **** switch (fs->fs_type) { 855:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT12 : 856:../../../Source/third_party/fatfs/src/ff.c **** bc = (UINT)clst; bc += bc / 2; 857:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; 858:../../../Source/third_party/fatfs/src/ff.c **** wc = fs->win[bc % SS(fs)]; bc++; 859:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; 860:../../../Source/third_party/fatfs/src/ff.c **** wc |= fs->win[bc % SS(fs)] << 8; 861:../../../Source/third_party/fatfs/src/ff.c **** return (clst & 1) ? (wc >> 4) : (wc & 0xFFF); 862:../../../Source/third_party/fatfs/src/ff.c **** 863:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT16 : 864:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; 865:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 2 % SS(fs)]; 866:../../../Source/third_party/fatfs/src/ff.c **** return LD_WORD(p); 867:../../../Source/third_party/fatfs/src/ff.c **** 868:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT32 : 869:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break; 870:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 4 % SS(fs)]; 871:../../../Source/third_party/fatfs/src/ff.c **** return LD_DWORD(p) & 0x0FFFFFFF; 872:../../../Source/third_party/fatfs/src/ff.c **** } 873:../../../Source/third_party/fatfs/src/ff.c **** 874:../../../Source/third_party/fatfs/src/ff.c **** return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */ 875:../../../Source/third_party/fatfs/src/ff.c **** } 876:../../../Source/third_party/fatfs/src/ff.c **** 877:../../../Source/third_party/fatfs/src/ff.c **** 878:../../../Source/third_party/fatfs/src/ff.c **** 879:../../../Source/third_party/fatfs/src/ff.c **** 880:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 881:../../../Source/third_party/fatfs/src/ff.c **** /* FAT access - Change value of a FAT entry */ 882:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 883:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 884:../../../Source/third_party/fatfs/src/ff.c **** 885:../../../Source/third_party/fatfs/src/ff.c **** FRESULT put_fat ( 886:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 887:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst, /* Cluster# to be changed in range of 2 to fs->n_fatent - 1 */ 888:../../../Source/third_party/fatfs/src/ff.c **** DWORD val /* New value to mark the cluster */ 889:../../../Source/third_party/fatfs/src/ff.c **** ) 890:../../../Source/third_party/fatfs/src/ff.c **** { 891:../../../Source/third_party/fatfs/src/ff.c **** UINT bc; 892:../../../Source/third_party/fatfs/src/ff.c **** BYTE *p; 893:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 894:../../../Source/third_party/fatfs/src/ff.c **** 895:../../../Source/third_party/fatfs/src/ff.c **** 896:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ 897:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 898:../../../Source/third_party/fatfs/src/ff.c **** 899:../../../Source/third_party/fatfs/src/ff.c **** } else { 900:../../../Source/third_party/fatfs/src/ff.c **** switch (fs->fs_type) { 901:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT12 : 902:../../../Source/third_party/fatfs/src/ff.c **** bc = (UINT)clst; bc += bc / 2; 903:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (bc / SS(fs))); 904:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 905:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[bc % SS(fs)]; 906:../../../Source/third_party/fatfs/src/ff.c **** *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; 907:../../../Source/third_party/fatfs/src/ff.c **** bc++; 908:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 1; 909:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (bc / SS(fs))); 910:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 911:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[bc % SS(fs)]; 912:../../../Source/third_party/fatfs/src/ff.c **** *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); 913:../../../Source/third_party/fatfs/src/ff.c **** break; 914:../../../Source/third_party/fatfs/src/ff.c **** 915:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT16 : 916:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); 917:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 918:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 2 % SS(fs)]; 919:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(p, (WORD)val); 920:../../../Source/third_party/fatfs/src/ff.c **** break; 921:../../../Source/third_party/fatfs/src/ff.c **** 922:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT32 : 923:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); 924:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 925:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 4 % SS(fs)]; 926:../../../Source/third_party/fatfs/src/ff.c **** val |= LD_DWORD(p) & 0xF0000000; 927:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(p, val); 928:../../../Source/third_party/fatfs/src/ff.c **** break; 929:../../../Source/third_party/fatfs/src/ff.c **** 930:../../../Source/third_party/fatfs/src/ff.c **** default : 931:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 932:../../../Source/third_party/fatfs/src/ff.c **** } 933:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 1; 934:../../../Source/third_party/fatfs/src/ff.c **** } 935:../../../Source/third_party/fatfs/src/ff.c **** 936:../../../Source/third_party/fatfs/src/ff.c **** return res; 937:../../../Source/third_party/fatfs/src/ff.c **** } 938:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 939:../../../Source/third_party/fatfs/src/ff.c **** 940:../../../Source/third_party/fatfs/src/ff.c **** 941:../../../Source/third_party/fatfs/src/ff.c **** 942:../../../Source/third_party/fatfs/src/ff.c **** 943:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 944:../../../Source/third_party/fatfs/src/ff.c **** /* FAT handling - Remove a cluster chain */ 945:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 946:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 947:../../../Source/third_party/fatfs/src/ff.c **** static 948:../../../Source/third_party/fatfs/src/ff.c **** FRESULT remove_chain ( 949:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 950:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst /* Cluster# to remove a chain from */ 951:../../../Source/third_party/fatfs/src/ff.c **** ) 952:../../../Source/third_party/fatfs/src/ff.c **** { 953:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 954:../../../Source/third_party/fatfs/src/ff.c **** DWORD nxt; 955:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_ERASE 956:../../../Source/third_party/fatfs/src/ff.c **** DWORD scl = clst, ecl = clst, rt[2]; 957:../../../Source/third_party/fatfs/src/ff.c **** #endif 958:../../../Source/third_party/fatfs/src/ff.c **** 959:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ 960:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 961:../../../Source/third_party/fatfs/src/ff.c **** 962:../../../Source/third_party/fatfs/src/ff.c **** } else { 963:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 964:../../../Source/third_party/fatfs/src/ff.c **** while (clst < fs->n_fatent) { /* Not a last link? */ 965:../../../Source/third_party/fatfs/src/ff.c **** nxt = get_fat(fs, clst); /* Get cluster status */ 966:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 0) break; /* Empty cluster? */ 967:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ 968:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ 969:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ 970:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 971:../../../Source/third_party/fatfs/src/ff.c **** if (fs->free_clust != 0xFFFFFFFF) { /* Update FSInfo */ 972:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust++; 973:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 1; 974:../../../Source/third_party/fatfs/src/ff.c **** } 975:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_ERASE 976:../../../Source/third_party/fatfs/src/ff.c **** if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ 977:../../../Source/third_party/fatfs/src/ff.c **** ecl = nxt; 978:../../../Source/third_party/fatfs/src/ff.c **** } else { /* End of contiguous clusters */ 979:../../../Source/third_party/fatfs/src/ff.c **** rt[0] = clust2sect(fs, scl); /* Start sector */ 980:../../../Source/third_party/fatfs/src/ff.c **** rt[1] = clust2sect(fs, ecl) + fs->csize - 1; /* End sector */ 981:../../../Source/third_party/fatfs/src/ff.c **** disk_ioctl(fs->drv, CTRL_ERASE_SECTOR, rt); /* Erase the block */ 982:../../../Source/third_party/fatfs/src/ff.c **** scl = ecl = nxt; 983:../../../Source/third_party/fatfs/src/ff.c **** } 984:../../../Source/third_party/fatfs/src/ff.c **** #endif 985:../../../Source/third_party/fatfs/src/ff.c **** clst = nxt; /* Next cluster */ 986:../../../Source/third_party/fatfs/src/ff.c **** } 987:../../../Source/third_party/fatfs/src/ff.c **** } 988:../../../Source/third_party/fatfs/src/ff.c **** 989:../../../Source/third_party/fatfs/src/ff.c **** return res; 990:../../../Source/third_party/fatfs/src/ff.c **** } 991:../../../Source/third_party/fatfs/src/ff.c **** #endif 992:../../../Source/third_party/fatfs/src/ff.c **** 993:../../../Source/third_party/fatfs/src/ff.c **** 994:../../../Source/third_party/fatfs/src/ff.c **** 995:../../../Source/third_party/fatfs/src/ff.c **** 996:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 997:../../../Source/third_party/fatfs/src/ff.c **** /* FAT handling - Stretch or Create a cluster chain */ 998:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 999:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1000:../../../Source/third_party/fatfs/src/ff.c **** static 1001:../../../Source/third_party/fatfs/src/ff.c **** DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster 1002:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 1003:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ 1004:../../../Source/third_party/fatfs/src/ff.c **** ) 1005:../../../Source/third_party/fatfs/src/ff.c **** { 1006:../../../Source/third_party/fatfs/src/ff.c **** DWORD cs, ncl, scl; 1007:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1008:../../../Source/third_party/fatfs/src/ff.c **** 1009:../../../Source/third_party/fatfs/src/ff.c **** 1010:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) { /* Create a new chain */ 1011:../../../Source/third_party/fatfs/src/ff.c **** scl = fs->last_clust; /* Get suggested start point */ 1012:../../../Source/third_party/fatfs/src/ff.c **** if (!scl || scl >= fs->n_fatent) scl = 1; 1013:../../../Source/third_party/fatfs/src/ff.c **** } 1014:../../../Source/third_party/fatfs/src/ff.c **** else { /* Stretch the current chain */ 1015:../../../Source/third_party/fatfs/src/ff.c **** cs = get_fat(fs, clst); /* Check the cluster status */ 1016:../../../Source/third_party/fatfs/src/ff.c **** if (cs < 2) return 1; /* It is an invalid cluster */ 1017:../../../Source/third_party/fatfs/src/ff.c **** if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ 1018:../../../Source/third_party/fatfs/src/ff.c **** scl = clst; 1019:../../../Source/third_party/fatfs/src/ff.c **** } 1020:../../../Source/third_party/fatfs/src/ff.c **** 1021:../../../Source/third_party/fatfs/src/ff.c **** ncl = scl; /* Start cluster */ 1022:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1023:../../../Source/third_party/fatfs/src/ff.c **** ncl++; /* Next cluster */ 1024:../../../Source/third_party/fatfs/src/ff.c **** if (ncl >= fs->n_fatent) { /* Wrap around */ 1025:../../../Source/third_party/fatfs/src/ff.c **** ncl = 2; 1026:../../../Source/third_party/fatfs/src/ff.c **** if (ncl > scl) return 0; /* No free cluster */ 1027:../../../Source/third_party/fatfs/src/ff.c **** } 1028:../../../Source/third_party/fatfs/src/ff.c **** cs = get_fat(fs, ncl); /* Get the cluster status */ 1029:../../../Source/third_party/fatfs/src/ff.c **** if (cs == 0) break; /* Found a free cluster */ 1030:../../../Source/third_party/fatfs/src/ff.c **** if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ 1031:../../../Source/third_party/fatfs/src/ff.c **** return cs; 1032:../../../Source/third_party/fatfs/src/ff.c **** if (ncl == scl) return 0; /* No free cluster */ 1033:../../../Source/third_party/fatfs/src/ff.c **** } 1034:../../../Source/third_party/fatfs/src/ff.c **** 1035:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ 1036:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && clst != 0) { 1037:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ 1038:../../../Source/third_party/fatfs/src/ff.c **** } 1039:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1040:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = ncl; /* Update FSINFO */ 1041:../../../Source/third_party/fatfs/src/ff.c **** if (fs->free_clust != 0xFFFFFFFF) { 1042:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust--; 1043:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 1; 1044:../../../Source/third_party/fatfs/src/ff.c **** } 1045:../../../Source/third_party/fatfs/src/ff.c **** } else { 1046:../../../Source/third_party/fatfs/src/ff.c **** ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; 1047:../../../Source/third_party/fatfs/src/ff.c **** } 1048:../../../Source/third_party/fatfs/src/ff.c **** 1049:../../../Source/third_party/fatfs/src/ff.c **** return ncl; /* Return new cluster number or error code */ 1050:../../../Source/third_party/fatfs/src/ff.c **** } 1051:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 1052:../../../Source/third_party/fatfs/src/ff.c **** 1053:../../../Source/third_party/fatfs/src/ff.c **** 1054:../../../Source/third_party/fatfs/src/ff.c **** 1055:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1056:../../../Source/third_party/fatfs/src/ff.c **** /* FAT handling - Convert offset into cluster with link map table */ 1057:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1058:../../../Source/third_party/fatfs/src/ff.c **** 1059:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FASTSEEK 1060:../../../Source/third_party/fatfs/src/ff.c **** static 1061:../../../Source/third_party/fatfs/src/ff.c **** DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ 1062:../../../Source/third_party/fatfs/src/ff.c **** FIL* fp, /* Pointer to the file object */ 1063:../../../Source/third_party/fatfs/src/ff.c **** DWORD ofs /* File offset to be converted to cluster# */ 1064:../../../Source/third_party/fatfs/src/ff.c **** ) 1065:../../../Source/third_party/fatfs/src/ff.c **** { 1066:../../../Source/third_party/fatfs/src/ff.c **** DWORD cl, ncl, *tbl; 1067:../../../Source/third_party/fatfs/src/ff.c **** 1068:../../../Source/third_party/fatfs/src/ff.c **** 1069:../../../Source/third_party/fatfs/src/ff.c **** tbl = fp->cltbl + 1; /* Top of CLMT */ 1070:../../../Source/third_party/fatfs/src/ff.c **** cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ 1071:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1072:../../../Source/third_party/fatfs/src/ff.c **** ncl = *tbl++; /* Number of cluters in the fragment */ 1073:../../../Source/third_party/fatfs/src/ff.c **** if (!ncl) return 0; /* End of table? (error) */ 1074:../../../Source/third_party/fatfs/src/ff.c **** if (cl < ncl) break; /* In this fragment? */ 1075:../../../Source/third_party/fatfs/src/ff.c **** cl -= ncl; tbl++; /* Next fragment */ 1076:../../../Source/third_party/fatfs/src/ff.c **** } 1077:../../../Source/third_party/fatfs/src/ff.c **** return cl + *tbl; /* Return the cluster number */ 1078:../../../Source/third_party/fatfs/src/ff.c **** } 1079:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _USE_FASTSEEK */ 1080:../../../Source/third_party/fatfs/src/ff.c **** 1081:../../../Source/third_party/fatfs/src/ff.c **** 1082:../../../Source/third_party/fatfs/src/ff.c **** 1083:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1084:../../../Source/third_party/fatfs/src/ff.c **** /* Directory handling - Set directory index */ 1085:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1086:../../../Source/third_party/fatfs/src/ff.c **** 1087:../../../Source/third_party/fatfs/src/ff.c **** static 1088:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_sdi ( 1089:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to directory object */ 1090:../../../Source/third_party/fatfs/src/ff.c **** WORD idx /* Index of directory table */ 1091:../../../Source/third_party/fatfs/src/ff.c **** ) 1092:../../../Source/third_party/fatfs/src/ff.c **** { 1093:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst; 1094:../../../Source/third_party/fatfs/src/ff.c **** WORD ic; 1095:../../../Source/third_party/fatfs/src/ff.c **** 1096:../../../Source/third_party/fatfs/src/ff.c **** 1097:../../../Source/third_party/fatfs/src/ff.c **** dj->index = idx; 1098:../../../Source/third_party/fatfs/src/ff.c **** clst = dj->sclust; 1099:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1 || clst >= dj->fs->n_fatent) /* Check start cluster range */ 1100:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1101:../../../Source/third_party/fatfs/src/ff.c **** if (!clst && dj->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ 1102:../../../Source/third_party/fatfs/src/ff.c **** clst = dj->fs->dirbase; 1103:../../../Source/third_party/fatfs/src/ff.c **** 1104:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) { /* Static table (root-dir in FAT12/16) */ 1105:../../../Source/third_party/fatfs/src/ff.c **** dj->clust = clst; 1106:../../../Source/third_party/fatfs/src/ff.c **** if (idx >= dj->fs->n_rootdir) /* Index is out of range */ 1107:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1108:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = dj->fs->dirbase + idx / (SS(dj->fs) / SZ_DIR); /* Sector# */ 1109:../../../Source/third_party/fatfs/src/ff.c **** } 1110:../../../Source/third_party/fatfs/src/ff.c **** else { /* Dynamic table (sub-dirs or root-dir in FAT32) */ 1111:../../../Source/third_party/fatfs/src/ff.c **** ic = SS(dj->fs) / SZ_DIR * dj->fs->csize; /* Entries per cluster */ 1112:../../../Source/third_party/fatfs/src/ff.c **** while (idx >= ic) { /* Follow cluster chain */ 1113:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(dj->fs, clst); /* Get next cluster */ 1114:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ 1115:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= dj->fs->n_fatent) /* Reached to end of table or int error */ 1116:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1117:../../../Source/third_party/fatfs/src/ff.c **** idx -= ic; 1118:../../../Source/third_party/fatfs/src/ff.c **** } 1119:../../../Source/third_party/fatfs/src/ff.c **** dj->clust = clst; 1120:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = clust2sect(dj->fs, clst) + idx / (SS(dj->fs) / SZ_DIR); /* Sector# */ 1121:../../../Source/third_party/fatfs/src/ff.c **** } 1122:../../../Source/third_party/fatfs/src/ff.c **** 1123:../../../Source/third_party/fatfs/src/ff.c **** dj->dir = dj->fs->win + (idx % (SS(dj->fs) / SZ_DIR)) * SZ_DIR; /* Ptr to the entry in the sector 1124:../../../Source/third_party/fatfs/src/ff.c **** 1125:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; /* Seek succeeded */ 1126:../../../Source/third_party/fatfs/src/ff.c **** } 1127:../../../Source/third_party/fatfs/src/ff.c **** 1128:../../../Source/third_party/fatfs/src/ff.c **** 1129:../../../Source/third_party/fatfs/src/ff.c **** 1130:../../../Source/third_party/fatfs/src/ff.c **** 1131:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1132:../../../Source/third_party/fatfs/src/ff.c **** /* Directory handling - Move directory table index next */ 1133:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1134:../../../Source/third_party/fatfs/src/ff.c **** 1135:../../../Source/third_party/fatfs/src/ff.c **** static 1136:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ 1137:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to the directory object */ 1138:../../../Source/third_party/fatfs/src/ff.c **** int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ 1139:../../../Source/third_party/fatfs/src/ff.c **** ) 1140:../../../Source/third_party/fatfs/src/ff.c **** { 1141:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst; 1142:../../../Source/third_party/fatfs/src/ff.c **** WORD i; 1143:../../../Source/third_party/fatfs/src/ff.c **** 1144:../../../Source/third_party/fatfs/src/ff.c **** 1145:../../../Source/third_party/fatfs/src/ff.c **** stretch = stretch; /* To suppress warning on read-only cfg. */ 1146:../../../Source/third_party/fatfs/src/ff.c **** i = dj->index + 1; 1147:../../../Source/third_party/fatfs/src/ff.c **** if (!i || !dj->sect) /* Report EOT when index has reached 65535 */ 1148:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; 1149:../../../Source/third_party/fatfs/src/ff.c **** 1150:../../../Source/third_party/fatfs/src/ff.c **** if (!(i % (SS(dj->fs) / SZ_DIR))) { /* Sector changed? */ 1151:../../../Source/third_party/fatfs/src/ff.c **** dj->sect++; /* Next sector */ 1152:../../../Source/third_party/fatfs/src/ff.c **** 1153:../../../Source/third_party/fatfs/src/ff.c **** if (dj->clust == 0) { /* Static table */ 1154:../../../Source/third_party/fatfs/src/ff.c **** if (i >= dj->fs->n_rootdir) /* Report EOT when end of table */ 1155:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; 1156:../../../Source/third_party/fatfs/src/ff.c **** } 1157:../../../Source/third_party/fatfs/src/ff.c **** else { /* Dynamic table */ 1158:../../../Source/third_party/fatfs/src/ff.c **** if (((i / (SS(dj->fs) / SZ_DIR)) & (dj->fs->csize - 1)) == 0) { /* Cluster changed? */ 1159:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(dj->fs, dj->clust); /* Get next cluster */ 1160:../../../Source/third_party/fatfs/src/ff.c **** if (clst <= 1) return FR_INT_ERR; 1161:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 1162:../../../Source/third_party/fatfs/src/ff.c **** if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */ 1163:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1164:../../../Source/third_party/fatfs/src/ff.c **** BYTE c; 1165:../../../Source/third_party/fatfs/src/ff.c **** if (!stretch) return FR_NO_FILE; /* When do not stretch, report EOT */ 1166:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */ 1167:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) return FR_DENIED; /* No free cluster */ 1168:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) return FR_INT_ERR; 1169:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 1170:../../../Source/third_party/fatfs/src/ff.c **** /* Clean-up stretched table */ 1171:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(dj->fs)) return FR_DISK_ERR; /* Flush active window */ 1172:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */ 1173:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect = clust2sect(dj->fs, clst); /* Cluster start sector */ 1174:../../../Source/third_party/fatfs/src/ff.c **** for (c = 0; c < dj->fs->csize; c++) { /* Fill the new cluster with 0 */ 1175:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 1176:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(dj->fs)) return FR_DISK_ERR; 1177:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect++; 1178:../../../Source/third_party/fatfs/src/ff.c **** } 1179:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect -= c; /* Rewind window address */ 1180:../../../Source/third_party/fatfs/src/ff.c **** #else 1181:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; /* Report EOT */ 1182:../../../Source/third_party/fatfs/src/ff.c **** #endif 1183:../../../Source/third_party/fatfs/src/ff.c **** } 1184:../../../Source/third_party/fatfs/src/ff.c **** dj->clust = clst; /* Initialize data for new cluster */ 1185:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = clust2sect(dj->fs, clst); 1186:../../../Source/third_party/fatfs/src/ff.c **** } 1187:../../../Source/third_party/fatfs/src/ff.c **** } 1188:../../../Source/third_party/fatfs/src/ff.c **** } 1189:../../../Source/third_party/fatfs/src/ff.c **** 1190:../../../Source/third_party/fatfs/src/ff.c **** dj->index = i; 1191:../../../Source/third_party/fatfs/src/ff.c **** dj->dir = dj->fs->win + (i % (SS(dj->fs) / SZ_DIR)) * SZ_DIR; 1192:../../../Source/third_party/fatfs/src/ff.c **** 1193:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 1194:../../../Source/third_party/fatfs/src/ff.c **** } 1195:../../../Source/third_party/fatfs/src/ff.c **** 1196:../../../Source/third_party/fatfs/src/ff.c **** 1197:../../../Source/third_party/fatfs/src/ff.c **** 1198:../../../Source/third_party/fatfs/src/ff.c **** 1199:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1200:../../../Source/third_party/fatfs/src/ff.c **** /* Directory handling - Reserve directory entry */ 1201:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1202:../../../Source/third_party/fatfs/src/ff.c **** 1203:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1204:../../../Source/third_party/fatfs/src/ff.c **** static 1205:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_alloc ( 1206:../../../Source/third_party/fatfs/src/ff.c **** DIR* dj, /* Pointer to the directory object */ 1207:../../../Source/third_party/fatfs/src/ff.c **** UINT nent /* Number of contiguous entries to allocate (1-21) */ 1208:../../../Source/third_party/fatfs/src/ff.c **** ) 1209:../../../Source/third_party/fatfs/src/ff.c **** { 1210:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1211:../../../Source/third_party/fatfs/src/ff.c **** UINT n; 1212:../../../Source/third_party/fatfs/src/ff.c **** 1213:../../../Source/third_party/fatfs/src/ff.c **** 1214:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); 1215:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1216:../../../Source/third_party/fatfs/src/ff.c **** n = 0; 1217:../../../Source/third_party/fatfs/src/ff.c **** do { 1218:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1219:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1220:../../../Source/third_party/fatfs/src/ff.c **** if (dj->dir[0] == DDE || dj->dir[0] == 0) { /* Is it a blank entry? */ 1221:../../../Source/third_party/fatfs/src/ff.c **** if (++n == nent) break; /* A block of contiguous entry is found */ 1222:../../../Source/third_party/fatfs/src/ff.c **** } else { 1223:../../../Source/third_party/fatfs/src/ff.c **** n = 0; /* Not a blank entry. Restart to search */ 1224:../../../Source/third_party/fatfs/src/ff.c **** } 1225:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 1); /* Next entry with table stretch enabled */ 1226:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 1227:../../../Source/third_party/fatfs/src/ff.c **** } 1228:../../../Source/third_party/fatfs/src/ff.c **** return res; 1229:../../../Source/third_party/fatfs/src/ff.c **** } 1230:../../../Source/third_party/fatfs/src/ff.c **** #endif 1231:../../../Source/third_party/fatfs/src/ff.c **** 1232:../../../Source/third_party/fatfs/src/ff.c **** 1233:../../../Source/third_party/fatfs/src/ff.c **** 1234:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1235:../../../Source/third_party/fatfs/src/ff.c **** /* Directory handling - Load/Store start cluster number */ 1236:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1237:../../../Source/third_party/fatfs/src/ff.c **** 1238:../../../Source/third_party/fatfs/src/ff.c **** static 1239:../../../Source/third_party/fatfs/src/ff.c **** DWORD ld_clust ( 1240:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* Pointer to the fs object */ 1241:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir /* Pointer to the directory entry */ 1242:../../../Source/third_party/fatfs/src/ff.c **** ) 1243:../../../Source/third_party/fatfs/src/ff.c **** { 60 .loc 1 1243 0 61 .cfi_startproc 62 @ args = 0, pretend = 0, frame = 0 63 @ frame_needed = 0, uses_anonymous_args = 0 64 @ link register save eliminated. 65 .LVL6: 1244:../../../Source/third_party/fatfs/src/ff.c **** DWORD cl; 1245:../../../Source/third_party/fatfs/src/ff.c **** 1246:../../../Source/third_party/fatfs/src/ff.c **** cl = LD_WORD(dir+DIR_FstClusLO); 66 .loc 1 1246 0 67 0000 CA7E ldrb r2, [r1, #27] @ zero_extendqisi2 68 0002 8B7E ldrb r3, [r1, #26] @ zero_extendqisi2 69 0004 43EA0223 orr r3, r3, r2, lsl #8 70 .LVL7: 1247:../../../Source/third_party/fatfs/src/ff.c **** if (fs->fs_type == FS_FAT32) 71 .loc 1 1247 0 72 0008 0278 ldrb r2, [r0] @ zero_extendqisi2 73 000a 032A cmp r2, #3 74 000c 05D1 bne .L6 1248:../../../Source/third_party/fatfs/src/ff.c **** cl |= (DWORD)LD_WORD(dir+DIR_FstClusHI) << 16; 75 .loc 1 1248 0 76 000e 487D ldrb r0, [r1, #21] @ zero_extendqisi2 77 .LVL8: 78 0010 0A7D ldrb r2, [r1, #20] @ zero_extendqisi2 79 0012 42EA0022 orr r2, r2, r0, lsl #8 80 0016 43EA0243 orr r3, r3, r2, lsl #16 81 .LVL9: 82 .L6: 1249:../../../Source/third_party/fatfs/src/ff.c **** 1250:../../../Source/third_party/fatfs/src/ff.c **** return cl; 1251:../../../Source/third_party/fatfs/src/ff.c **** } 83 .loc 1 1251 0 84 001a 1846 mov r0, r3 85 001c 7047 bx lr 86 .cfi_endproc 87 .LFE15: 89 001e 00BF .section .text.sum_sfn,"ax",%progbits 90 .align 2 91 .thumb 92 .thumb_func 94 sum_sfn: 95 .LFB21: 1252:../../../Source/third_party/fatfs/src/ff.c **** 1253:../../../Source/third_party/fatfs/src/ff.c **** 1254:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1255:../../../Source/third_party/fatfs/src/ff.c **** static 1256:../../../Source/third_party/fatfs/src/ff.c **** void st_clust ( 1257:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir, /* Pointer to the directory entry */ 1258:../../../Source/third_party/fatfs/src/ff.c **** DWORD cl /* Value to be set */ 1259:../../../Source/third_party/fatfs/src/ff.c **** ) 1260:../../../Source/third_party/fatfs/src/ff.c **** { 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusLO, cl); 1262:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 1263:../../../Source/third_party/fatfs/src/ff.c **** } 1264:../../../Source/third_party/fatfs/src/ff.c **** #endif 1265:../../../Source/third_party/fatfs/src/ff.c **** 1266:../../../Source/third_party/fatfs/src/ff.c **** 1267:../../../Source/third_party/fatfs/src/ff.c **** 1268:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1269:../../../Source/third_party/fatfs/src/ff.c **** /* LFN handling - Test/Pick/Fit an LFN segment from/to directory entry */ 1270:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1271:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1272:../../../Source/third_party/fatfs/src/ff.c **** static 1273:../../../Source/third_party/fatfs/src/ff.c **** const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN chars in the directory 1274:../../../Source/third_party/fatfs/src/ff.c **** 1275:../../../Source/third_party/fatfs/src/ff.c **** 1276:../../../Source/third_party/fatfs/src/ff.c **** static 1277:../../../Source/third_party/fatfs/src/ff.c **** int cmp_lfn ( /* 1:Matched, 0:Not matched */ 1278:../../../Source/third_party/fatfs/src/ff.c **** WCHAR *lfnbuf, /* Pointer to the LFN to be compared */ 1279:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir /* Pointer to the directory entry containing a part of LFN */ 1280:../../../Source/third_party/fatfs/src/ff.c **** ) 1281:../../../Source/third_party/fatfs/src/ff.c **** { 1282:../../../Source/third_party/fatfs/src/ff.c **** UINT i, s; 1283:../../../Source/third_party/fatfs/src/ff.c **** WCHAR wc, uc; 1284:../../../Source/third_party/fatfs/src/ff.c **** 1285:../../../Source/third_party/fatfs/src/ff.c **** 1286:../../../Source/third_party/fatfs/src/ff.c **** i = ((dir[LDIR_Ord] & ~LLE) - 1) * 13; /* Get offset in the LFN buffer */ 1287:../../../Source/third_party/fatfs/src/ff.c **** s = 0; wc = 1; 1288:../../../Source/third_party/fatfs/src/ff.c **** do { 1289:../../../Source/third_party/fatfs/src/ff.c **** uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ 1290:../../../Source/third_party/fatfs/src/ff.c **** if (wc) { /* Last char has not been processed */ 1291:../../../Source/third_party/fatfs/src/ff.c **** wc = ff_wtoupper(uc); /* Convert it to upper case */ 1292:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ 1293:../../../Source/third_party/fatfs/src/ff.c **** return 0; /* Not matched */ 1294:../../../Source/third_party/fatfs/src/ff.c **** } else { 1295:../../../Source/third_party/fatfs/src/ff.c **** if (uc != 0xFFFF) return 0; /* Check filler */ 1296:../../../Source/third_party/fatfs/src/ff.c **** } 1297:../../../Source/third_party/fatfs/src/ff.c **** } while (++s < 13); /* Repeat until all chars in the entry are checked */ 1298:../../../Source/third_party/fatfs/src/ff.c **** 1299:../../../Source/third_party/fatfs/src/ff.c **** if ((dir[LDIR_Ord] & LLE) && wc && lfnbuf[i]) /* Last segment matched but different length */ 1300:../../../Source/third_party/fatfs/src/ff.c **** return 0; 1301:../../../Source/third_party/fatfs/src/ff.c **** 1302:../../../Source/third_party/fatfs/src/ff.c **** return 1; /* The part of LFN matched */ 1303:../../../Source/third_party/fatfs/src/ff.c **** } 1304:../../../Source/third_party/fatfs/src/ff.c **** 1305:../../../Source/third_party/fatfs/src/ff.c **** 1306:../../../Source/third_party/fatfs/src/ff.c **** 1307:../../../Source/third_party/fatfs/src/ff.c **** static 1308:../../../Source/third_party/fatfs/src/ff.c **** int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ 1309:../../../Source/third_party/fatfs/src/ff.c **** WCHAR *lfnbuf, /* Pointer to the Unicode-LFN buffer */ 1310:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir /* Pointer to the directory entry */ 1311:../../../Source/third_party/fatfs/src/ff.c **** ) 1312:../../../Source/third_party/fatfs/src/ff.c **** { 1313:../../../Source/third_party/fatfs/src/ff.c **** UINT i, s; 1314:../../../Source/third_party/fatfs/src/ff.c **** WCHAR wc, uc; 1315:../../../Source/third_party/fatfs/src/ff.c **** 1316:../../../Source/third_party/fatfs/src/ff.c **** 1317:../../../Source/third_party/fatfs/src/ff.c **** i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ 1318:../../../Source/third_party/fatfs/src/ff.c **** 1319:../../../Source/third_party/fatfs/src/ff.c **** s = 0; wc = 1; 1320:../../../Source/third_party/fatfs/src/ff.c **** do { 1321:../../../Source/third_party/fatfs/src/ff.c **** uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ 1322:../../../Source/third_party/fatfs/src/ff.c **** if (wc) { /* Last char has not been processed */ 1323:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ 1324:../../../Source/third_party/fatfs/src/ff.c **** lfnbuf[i++] = wc = uc; /* Store it */ 1325:../../../Source/third_party/fatfs/src/ff.c **** } else { 1326:../../../Source/third_party/fatfs/src/ff.c **** if (uc != 0xFFFF) return 0; /* Check filler */ 1327:../../../Source/third_party/fatfs/src/ff.c **** } 1328:../../../Source/third_party/fatfs/src/ff.c **** } while (++s < 13); /* Read all character in the entry */ 1329:../../../Source/third_party/fatfs/src/ff.c **** 1330:../../../Source/third_party/fatfs/src/ff.c **** if (dir[LDIR_Ord] & LLE) { /* Put terminator if it is the last LFN part */ 1331:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ 1332:../../../Source/third_party/fatfs/src/ff.c **** lfnbuf[i] = 0; 1333:../../../Source/third_party/fatfs/src/ff.c **** } 1334:../../../Source/third_party/fatfs/src/ff.c **** 1335:../../../Source/third_party/fatfs/src/ff.c **** return 1; 1336:../../../Source/third_party/fatfs/src/ff.c **** } 1337:../../../Source/third_party/fatfs/src/ff.c **** 1338:../../../Source/third_party/fatfs/src/ff.c **** 1339:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1340:../../../Source/third_party/fatfs/src/ff.c **** static 1341:../../../Source/third_party/fatfs/src/ff.c **** void fit_lfn ( 1342:../../../Source/third_party/fatfs/src/ff.c **** const WCHAR *lfnbuf, /* Pointer to the LFN buffer */ 1343:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir, /* Pointer to the directory entry */ 1344:../../../Source/third_party/fatfs/src/ff.c **** BYTE ord, /* LFN order (1-20) */ 1345:../../../Source/third_party/fatfs/src/ff.c **** BYTE sum /* SFN sum */ 1346:../../../Source/third_party/fatfs/src/ff.c **** ) 1347:../../../Source/third_party/fatfs/src/ff.c **** { 1348:../../../Source/third_party/fatfs/src/ff.c **** UINT i, s; 1349:../../../Source/third_party/fatfs/src/ff.c **** WCHAR wc; 1350:../../../Source/third_party/fatfs/src/ff.c **** 1351:../../../Source/third_party/fatfs/src/ff.c **** 1352:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Chksum] = sum; /* Set check sum */ 1353:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ 1354:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Type] = 0; 1355:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LDIR_FstClusLO, 0); 1356:../../../Source/third_party/fatfs/src/ff.c **** 1357:../../../Source/third_party/fatfs/src/ff.c **** i = (ord - 1) * 13; /* Get offset in the LFN buffer */ 1358:../../../Source/third_party/fatfs/src/ff.c **** s = wc = 0; 1359:../../../Source/third_party/fatfs/src/ff.c **** do { 1360:../../../Source/third_party/fatfs/src/ff.c **** if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective char */ 1361:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LfnOfs[s], wc); /* Put it */ 1362:../../../Source/third_party/fatfs/src/ff.c **** if (!wc) wc = 0xFFFF; /* Padding chars following last char */ 1363:../../../Source/third_party/fatfs/src/ff.c **** } while (++s < 13); 1364:../../../Source/third_party/fatfs/src/ff.c **** if (wc == 0xFFFF || !lfnbuf[i]) ord |= LLE; /* Bottom LFN part is the start of LFN sequence */ 1365:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Ord] = ord; /* Set the LFN order */ 1366:../../../Source/third_party/fatfs/src/ff.c **** } 1367:../../../Source/third_party/fatfs/src/ff.c **** 1368:../../../Source/third_party/fatfs/src/ff.c **** #endif 1369:../../../Source/third_party/fatfs/src/ff.c **** #endif 1370:../../../Source/third_party/fatfs/src/ff.c **** 1371:../../../Source/third_party/fatfs/src/ff.c **** 1372:../../../Source/third_party/fatfs/src/ff.c **** 1373:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1374:../../../Source/third_party/fatfs/src/ff.c **** /* Create numbered name */ 1375:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1376:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1377:../../../Source/third_party/fatfs/src/ff.c **** void gen_numname ( 1378:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dst, /* Pointer to generated SFN */ 1379:../../../Source/third_party/fatfs/src/ff.c **** const BYTE *src, /* Pointer to source SFN to be modified */ 1380:../../../Source/third_party/fatfs/src/ff.c **** const WCHAR *lfn, /* Pointer to LFN */ 1381:../../../Source/third_party/fatfs/src/ff.c **** WORD seq /* Sequence number */ 1382:../../../Source/third_party/fatfs/src/ff.c **** ) 1383:../../../Source/third_party/fatfs/src/ff.c **** { 1384:../../../Source/third_party/fatfs/src/ff.c **** BYTE ns[8], c; 1385:../../../Source/third_party/fatfs/src/ff.c **** UINT i, j; 1386:../../../Source/third_party/fatfs/src/ff.c **** 1387:../../../Source/third_party/fatfs/src/ff.c **** 1388:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dst, src, 11); 1389:../../../Source/third_party/fatfs/src/ff.c **** 1390:../../../Source/third_party/fatfs/src/ff.c **** if (seq > 5) { /* On many collisions, generate a hash number instead of sequential number */ 1391:../../../Source/third_party/fatfs/src/ff.c **** do seq = (seq >> 1) + (seq << 15) + (WORD)*lfn++; while (*lfn); 1392:../../../Source/third_party/fatfs/src/ff.c **** } 1393:../../../Source/third_party/fatfs/src/ff.c **** 1394:../../../Source/third_party/fatfs/src/ff.c **** /* itoa (hexdecimal) */ 1395:../../../Source/third_party/fatfs/src/ff.c **** i = 7; 1396:../../../Source/third_party/fatfs/src/ff.c **** do { 1397:../../../Source/third_party/fatfs/src/ff.c **** c = (seq % 16) + '0'; 1398:../../../Source/third_party/fatfs/src/ff.c **** if (c > '9') c += 7; 1399:../../../Source/third_party/fatfs/src/ff.c **** ns[i--] = c; 1400:../../../Source/third_party/fatfs/src/ff.c **** seq /= 16; 1401:../../../Source/third_party/fatfs/src/ff.c **** } while (seq); 1402:../../../Source/third_party/fatfs/src/ff.c **** ns[i] = '~'; 1403:../../../Source/third_party/fatfs/src/ff.c **** 1404:../../../Source/third_party/fatfs/src/ff.c **** /* Append the number */ 1405:../../../Source/third_party/fatfs/src/ff.c **** for (j = 0; j < i && dst[j] != ' '; j++) { 1406:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(dst[j])) { 1407:../../../Source/third_party/fatfs/src/ff.c **** if (j == i - 1) break; 1408:../../../Source/third_party/fatfs/src/ff.c **** j++; 1409:../../../Source/third_party/fatfs/src/ff.c **** } 1410:../../../Source/third_party/fatfs/src/ff.c **** } 1411:../../../Source/third_party/fatfs/src/ff.c **** do { 1412:../../../Source/third_party/fatfs/src/ff.c **** dst[j++] = (i < 8) ? ns[i++] : ' '; 1413:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 8); 1414:../../../Source/third_party/fatfs/src/ff.c **** } 1415:../../../Source/third_party/fatfs/src/ff.c **** #endif 1416:../../../Source/third_party/fatfs/src/ff.c **** 1417:../../../Source/third_party/fatfs/src/ff.c **** 1418:../../../Source/third_party/fatfs/src/ff.c **** 1419:../../../Source/third_party/fatfs/src/ff.c **** 1420:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1421:../../../Source/third_party/fatfs/src/ff.c **** /* Calculate sum of an SFN */ 1422:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1423:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1424:../../../Source/third_party/fatfs/src/ff.c **** static 1425:../../../Source/third_party/fatfs/src/ff.c **** BYTE sum_sfn ( 1426:../../../Source/third_party/fatfs/src/ff.c **** const BYTE *dir /* Ptr to directory entry */ 1427:../../../Source/third_party/fatfs/src/ff.c **** ) 1428:../../../Source/third_party/fatfs/src/ff.c **** { 96 .loc 1 1428 0 97 .cfi_startproc 98 @ args = 0, pretend = 0, frame = 0 99 @ frame_needed = 0, uses_anonymous_args = 0 100 @ link register save eliminated. 101 .LVL10: 102 0000 00F10B01 add r1, r0, #11 1429:../../../Source/third_party/fatfs/src/ff.c **** BYTE sum = 0; 103 .loc 1 1429 0 104 0004 0023 movs r3, #0 105 .LVL11: 106 .L8: 1430:../../../Source/third_party/fatfs/src/ff.c **** UINT n = 11; 1431:../../../Source/third_party/fatfs/src/ff.c **** 1432:../../../Source/third_party/fatfs/src/ff.c **** do sum = (sum >> 1) + (sum << 7) + *dir++; while (--n); 107 .loc 1 1432 0 discriminator 1 108 0006 DA01 lsls r2, r3, #7 109 0008 42EA5303 orr r3, r2, r3, lsr #1 110 .LVL12: 111 000c 10F8012B ldrb r2, [r0], #1 @ zero_extendqisi2 112 .LVL13: 113 0010 1344 add r3, r3, r2 114 0012 03F0FF03 and r3, r3, #255 115 .LVL14: 116 0016 8842 cmp r0, r1 117 0018 F5D1 bne .L8 1433:../../../Source/third_party/fatfs/src/ff.c **** return sum; 1434:../../../Source/third_party/fatfs/src/ff.c **** } 118 .loc 1 1434 0 119 001a 1846 mov r0, r3 120 .LVL15: 121 001c 7047 bx lr 122 .cfi_endproc 123 .LFE21: 125 001e 00BF .section .text.check_fs,"ax",%progbits 126 .align 2 127 .thumb 128 .thumb_func 130 check_fs: 131 .LFB29: 1435:../../../Source/third_party/fatfs/src/ff.c **** #endif 1436:../../../Source/third_party/fatfs/src/ff.c **** 1437:../../../Source/third_party/fatfs/src/ff.c **** 1438:../../../Source/third_party/fatfs/src/ff.c **** 1439:../../../Source/third_party/fatfs/src/ff.c **** 1440:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1441:../../../Source/third_party/fatfs/src/ff.c **** /* Directory handling - Find an object in the directory */ 1442:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1443:../../../Source/third_party/fatfs/src/ff.c **** 1444:../../../Source/third_party/fatfs/src/ff.c **** static 1445:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_find ( 1446:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj /* Pointer to the directory object linked to the file name */ 1447:../../../Source/third_party/fatfs/src/ff.c **** ) 1448:../../../Source/third_party/fatfs/src/ff.c **** { 1449:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1450:../../../Source/third_party/fatfs/src/ff.c **** BYTE c, *dir; 1451:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1452:../../../Source/third_party/fatfs/src/ff.c **** BYTE a, ord, sum; 1453:../../../Source/third_party/fatfs/src/ff.c **** #endif 1454:../../../Source/third_party/fatfs/src/ff.c **** 1455:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); /* Rewind directory object */ 1456:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) return res; 1457:../../../Source/third_party/fatfs/src/ff.c **** 1458:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1459:../../../Source/third_party/fatfs/src/ff.c **** ord = sum = 0xFF; 1460:../../../Source/third_party/fatfs/src/ff.c **** #endif 1461:../../../Source/third_party/fatfs/src/ff.c **** do { 1462:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1463:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1464:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* Ptr to the directory entry of current index */ 1465:../../../Source/third_party/fatfs/src/ff.c **** c = dir[DIR_Name]; 1466:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ 1467:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 1468:../../../Source/third_party/fatfs/src/ff.c **** a = dir[DIR_Attr] & AM_MASK; 1469:../../../Source/third_party/fatfs/src/ff.c **** if (c == DDE || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ 1470:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 1471:../../../Source/third_party/fatfs/src/ff.c **** } else { 1472:../../../Source/third_party/fatfs/src/ff.c **** if (a == AM_LFN) { /* An LFN entry is found */ 1473:../../../Source/third_party/fatfs/src/ff.c **** if (dj->lfn) { 1474:../../../Source/third_party/fatfs/src/ff.c **** if (c & LLE) { /* Is it start of LFN sequence? */ 1475:../../../Source/third_party/fatfs/src/ff.c **** sum = dir[LDIR_Chksum]; 1476:../../../Source/third_party/fatfs/src/ff.c **** c &= ~LLE; ord = c; /* LFN start order */ 1477:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = dj->index; 1478:../../../Source/third_party/fatfs/src/ff.c **** } 1479:../../../Source/third_party/fatfs/src/ff.c **** /* Check validity of the LFN entry and compare it with given name */ 1480:../../../Source/third_party/fatfs/src/ff.c **** ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; 1481:../../../Source/third_party/fatfs/src/ff.c **** } 1482:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 1483:../../../Source/third_party/fatfs/src/ff.c **** if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */ 1484:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */ 1485:../../../Source/third_party/fatfs/src/ff.c **** if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ 1486:../../../Source/third_party/fatfs/src/ff.c **** } 1487:../../../Source/third_party/fatfs/src/ff.c **** } 1488:../../../Source/third_party/fatfs/src/ff.c **** #else /* Non LFN configuration */ 1489:../../../Source/third_party/fatfs/src/ff.c **** if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dj->fn, 11)) /* Is it a valid entry? */ 1490:../../../Source/third_party/fatfs/src/ff.c **** break; 1491:../../../Source/third_party/fatfs/src/ff.c **** #endif 1492:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 1493:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 1494:../../../Source/third_party/fatfs/src/ff.c **** 1495:../../../Source/third_party/fatfs/src/ff.c **** return res; 1496:../../../Source/third_party/fatfs/src/ff.c **** } 1497:../../../Source/third_party/fatfs/src/ff.c **** 1498:../../../Source/third_party/fatfs/src/ff.c **** 1499:../../../Source/third_party/fatfs/src/ff.c **** 1500:../../../Source/third_party/fatfs/src/ff.c **** 1501:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1502:../../../Source/third_party/fatfs/src/ff.c **** /* Read an object from the directory */ 1503:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1504:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 1505:../../../Source/third_party/fatfs/src/ff.c **** static 1506:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_read ( 1507:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to the directory object */ 1508:../../../Source/third_party/fatfs/src/ff.c **** int vol /* Filtered by 0:file/dir or 1:volume label */ 1509:../../../Source/third_party/fatfs/src/ff.c **** ) 1510:../../../Source/third_party/fatfs/src/ff.c **** { 1511:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1512:../../../Source/third_party/fatfs/src/ff.c **** BYTE a, c, *dir; 1513:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1514:../../../Source/third_party/fatfs/src/ff.c **** BYTE ord = 0xFF, sum = 0xFF; 1515:../../../Source/third_party/fatfs/src/ff.c **** #endif 1516:../../../Source/third_party/fatfs/src/ff.c **** 1517:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_FILE; 1518:../../../Source/third_party/fatfs/src/ff.c **** while (dj->sect) { 1519:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1520:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1521:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* Ptr to the directory entry of current index */ 1522:../../../Source/third_party/fatfs/src/ff.c **** c = dir[DIR_Name]; 1523:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ 1524:../../../Source/third_party/fatfs/src/ff.c **** a = dir[DIR_Attr] & AM_MASK; 1525:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 1526:../../../Source/third_party/fatfs/src/ff.c **** if (c == DDE || (!_FS_RPATH && c == '.') || (a == AM_VOL) != vol) { /* An entry without valid dat 1527:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 1528:../../../Source/third_party/fatfs/src/ff.c **** } else { 1529:../../../Source/third_party/fatfs/src/ff.c **** if (a == AM_LFN) { /* An LFN entry is found */ 1530:../../../Source/third_party/fatfs/src/ff.c **** if (c & LLE) { /* Is it start of LFN sequence? */ 1531:../../../Source/third_party/fatfs/src/ff.c **** sum = dir[LDIR_Chksum]; 1532:../../../Source/third_party/fatfs/src/ff.c **** c &= ~LLE; ord = c; 1533:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = dj->index; 1534:../../../Source/third_party/fatfs/src/ff.c **** } 1535:../../../Source/third_party/fatfs/src/ff.c **** /* Check LFN validity and capture it */ 1536:../../../Source/third_party/fatfs/src/ff.c **** ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dj->lfn, dir)) ? ord - 1 : 0xFF; 1537:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 1538:../../../Source/third_party/fatfs/src/ff.c **** if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ 1539:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = 0xFFFF; /* It has no LFN. */ 1540:../../../Source/third_party/fatfs/src/ff.c **** break; 1541:../../../Source/third_party/fatfs/src/ff.c **** } 1542:../../../Source/third_party/fatfs/src/ff.c **** } 1543:../../../Source/third_party/fatfs/src/ff.c **** #else /* Non LFN configuration */ 1544:../../../Source/third_party/fatfs/src/ff.c **** if (c != DDE && (_FS_RPATH || c != '.') && a != AM_LFN && (a == AM_VOL) == vol) /* Is it a valid 1545:../../../Source/third_party/fatfs/src/ff.c **** break; 1546:../../../Source/third_party/fatfs/src/ff.c **** #endif 1547:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 1548:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1549:../../../Source/third_party/fatfs/src/ff.c **** } 1550:../../../Source/third_party/fatfs/src/ff.c **** 1551:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) dj->sect = 0; 1552:../../../Source/third_party/fatfs/src/ff.c **** 1553:../../../Source/third_party/fatfs/src/ff.c **** return res; 1554:../../../Source/third_party/fatfs/src/ff.c **** } 1555:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 */ 1556:../../../Source/third_party/fatfs/src/ff.c **** 1557:../../../Source/third_party/fatfs/src/ff.c **** 1558:../../../Source/third_party/fatfs/src/ff.c **** 1559:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1560:../../../Source/third_party/fatfs/src/ff.c **** /* Register an object to the directory */ 1561:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1562:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 1563:../../../Source/third_party/fatfs/src/ff.c **** static 1564:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_D 1565:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj /* Target directory with object name to be created */ 1566:../../../Source/third_party/fatfs/src/ff.c **** ) 1567:../../../Source/third_party/fatfs/src/ff.c **** { 1568:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1569:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 1570:../../../Source/third_party/fatfs/src/ff.c **** WORD n, ne; 1571:../../../Source/third_party/fatfs/src/ff.c **** BYTE sn[12], *fn, sum; 1572:../../../Source/third_party/fatfs/src/ff.c **** WCHAR *lfn; 1573:../../../Source/third_party/fatfs/src/ff.c **** 1574:../../../Source/third_party/fatfs/src/ff.c **** 1575:../../../Source/third_party/fatfs/src/ff.c **** fn = dj->fn; lfn = dj->lfn; 1576:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(sn, fn, 12); 1577:../../../Source/third_party/fatfs/src/ff.c **** 1578:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && (sn[NS] & NS_DOT)) /* Cannot create dot entry */ 1579:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 1580:../../../Source/third_party/fatfs/src/ff.c **** 1581:../../../Source/third_party/fatfs/src/ff.c **** if (sn[NS] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ 1582:../../../Source/third_party/fatfs/src/ff.c **** fn[NS] = 0; dj->lfn = 0; /* Find only SFN */ 1583:../../../Source/third_party/fatfs/src/ff.c **** for (n = 1; n < 100; n++) { 1584:../../../Source/third_party/fatfs/src/ff.c **** gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ 1585:../../../Source/third_party/fatfs/src/ff.c **** res = dir_find(dj); /* Check if the name collides with existing SFN */ 1586:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1587:../../../Source/third_party/fatfs/src/ff.c **** } 1588:../../../Source/third_party/fatfs/src/ff.c **** if (n == 100) return FR_DENIED; /* Abort if too many collisions */ 1589:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ 1590:../../../Source/third_party/fatfs/src/ff.c **** fn[NS] = sn[NS]; dj->lfn = lfn; 1591:../../../Source/third_party/fatfs/src/ff.c **** } 1592:../../../Source/third_party/fatfs/src/ff.c **** 1593:../../../Source/third_party/fatfs/src/ff.c **** if (sn[NS] & NS_LFN) { /* When LFN is to be created, allocate entries for an SFN + LFNs. */ 1594:../../../Source/third_party/fatfs/src/ff.c **** for (n = 0; lfn[n]; n++) ; 1595:../../../Source/third_party/fatfs/src/ff.c **** ne = (n + 25) / 13; 1596:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Otherwise allocate an entry for an SFN */ 1597:../../../Source/third_party/fatfs/src/ff.c **** ne = 1; 1598:../../../Source/third_party/fatfs/src/ff.c **** } 1599:../../../Source/third_party/fatfs/src/ff.c **** res = dir_alloc(dj, ne); /* Allocate entries */ 1600:../../../Source/third_party/fatfs/src/ff.c **** 1601:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && --ne) { /* Set LFN entry if needed */ 1602:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, (WORD)(dj->index - ne)); 1603:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1604:../../../Source/third_party/fatfs/src/ff.c **** sum = sum_sfn(dj->fn); /* Sum value of the SFN tied to the LFN */ 1605:../../../Source/third_party/fatfs/src/ff.c **** do { /* Store LFN entries in bottom first */ 1606:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1607:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1608:../../../Source/third_party/fatfs/src/ff.c **** fit_lfn(dj->lfn, dj->dir, (BYTE)ne, sum); 1609:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 1610:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 1611:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK && --ne); 1612:../../../Source/third_party/fatfs/src/ff.c **** } 1613:../../../Source/third_party/fatfs/src/ff.c **** } 1614:../../../Source/third_party/fatfs/src/ff.c **** #else /* Non LFN configuration */ 1615:../../../Source/third_party/fatfs/src/ff.c **** res = dir_alloc(dj, 1); /* Allocate an entry for SFN */ 1616:../../../Source/third_party/fatfs/src/ff.c **** #endif 1617:../../../Source/third_party/fatfs/src/ff.c **** 1618:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Set SFN entry */ 1619:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1620:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1621:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->dir, 0, SZ_DIR); /* Clean the entry */ 1622:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dj->dir, dj->fn, 11); /* Put SFN */ 1623:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1624:../../../Source/third_party/fatfs/src/ff.c **** dj->dir[DIR_NTres] = *(dj->fn+NS) & (NS_BODY | NS_EXT); /* Put NT flag */ 1625:../../../Source/third_party/fatfs/src/ff.c **** #endif 1626:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 1627:../../../Source/third_party/fatfs/src/ff.c **** } 1628:../../../Source/third_party/fatfs/src/ff.c **** } 1629:../../../Source/third_party/fatfs/src/ff.c **** 1630:../../../Source/third_party/fatfs/src/ff.c **** return res; 1631:../../../Source/third_party/fatfs/src/ff.c **** } 1632:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 1633:../../../Source/third_party/fatfs/src/ff.c **** 1634:../../../Source/third_party/fatfs/src/ff.c **** 1635:../../../Source/third_party/fatfs/src/ff.c **** 1636:../../../Source/third_party/fatfs/src/ff.c **** 1637:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1638:../../../Source/third_party/fatfs/src/ff.c **** /* Remove an object from the directory */ 1639:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1640:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY && !_FS_MINIMIZE 1641:../../../Source/third_party/fatfs/src/ff.c **** static 1642:../../../Source/third_party/fatfs/src/ff.c **** FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ 1643:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj /* Directory object pointing the entry to be removed */ 1644:../../../Source/third_party/fatfs/src/ff.c **** ) 1645:../../../Source/third_party/fatfs/src/ff.c **** { 1646:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1647:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 1648:../../../Source/third_party/fatfs/src/ff.c **** WORD i; 1649:../../../Source/third_party/fatfs/src/ff.c **** 1650:../../../Source/third_party/fatfs/src/ff.c **** i = dj->index; /* SFN index */ 1651:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, (WORD)((dj->lfn_idx == 0xFFFF) ? i : dj->lfn_idx)); /* Goto the SFN or top of th 1652:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1653:../../../Source/third_party/fatfs/src/ff.c **** do { 1654:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1655:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1656:../../../Source/third_party/fatfs/src/ff.c **** *dj->dir = DDE; /* Mark the entry "deleted" */ 1657:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 1658:../../../Source/third_party/fatfs/src/ff.c **** if (dj->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ 1659:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 1660:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 1661:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_INT_ERR; 1662:../../../Source/third_party/fatfs/src/ff.c **** } 1663:../../../Source/third_party/fatfs/src/ff.c **** 1664:../../../Source/third_party/fatfs/src/ff.c **** #else /* Non LFN configuration */ 1665:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, dj->index); 1666:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1667:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 1668:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1669:../../../Source/third_party/fatfs/src/ff.c **** *dj->dir = DDE; /* Mark the entry "deleted" */ 1670:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 1671:../../../Source/third_party/fatfs/src/ff.c **** } 1672:../../../Source/third_party/fatfs/src/ff.c **** } 1673:../../../Source/third_party/fatfs/src/ff.c **** #endif 1674:../../../Source/third_party/fatfs/src/ff.c **** 1675:../../../Source/third_party/fatfs/src/ff.c **** return res; 1676:../../../Source/third_party/fatfs/src/ff.c **** } 1677:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 1678:../../../Source/third_party/fatfs/src/ff.c **** 1679:../../../Source/third_party/fatfs/src/ff.c **** 1680:../../../Source/third_party/fatfs/src/ff.c **** 1681:../../../Source/third_party/fatfs/src/ff.c **** 1682:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1683:../../../Source/third_party/fatfs/src/ff.c **** /* Pick a segment and create the object name in directory form */ 1684:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1685:../../../Source/third_party/fatfs/src/ff.c **** 1686:../../../Source/third_party/fatfs/src/ff.c **** static 1687:../../../Source/third_party/fatfs/src/ff.c **** FRESULT create_name ( 1688:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to the directory object */ 1689:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR **path /* Pointer to pointer to the segment in the path string */ 1690:../../../Source/third_party/fatfs/src/ff.c **** ) 1691:../../../Source/third_party/fatfs/src/ff.c **** { 1692:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 1693:../../../Source/third_party/fatfs/src/ff.c **** BYTE b, cf; 1694:../../../Source/third_party/fatfs/src/ff.c **** WCHAR w, *lfn; 1695:../../../Source/third_party/fatfs/src/ff.c **** UINT i, ni, si, di; 1696:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *p; 1697:../../../Source/third_party/fatfs/src/ff.c **** 1698:../../../Source/third_party/fatfs/src/ff.c **** /* Create LFN in Unicode */ 1699:../../../Source/third_party/fatfs/src/ff.c **** for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ 1700:../../../Source/third_party/fatfs/src/ff.c **** lfn = dj->lfn; 1701:../../../Source/third_party/fatfs/src/ff.c **** si = di = 0; 1702:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1703:../../../Source/third_party/fatfs/src/ff.c **** w = p[si++]; /* Get a character */ 1704:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 1705:../../../Source/third_party/fatfs/src/ff.c **** if (di >= _MAX_LFN) /* Reject too long name */ 1706:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 1707:../../../Source/third_party/fatfs/src/ff.c **** #if !_LFN_UNICODE 1708:../../../Source/third_party/fatfs/src/ff.c **** w &= 0xFF; 1709:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(w)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ 1710:../../../Source/third_party/fatfs/src/ff.c **** b = (BYTE)p[si++]; /* Get 2nd byte */ 1711:../../../Source/third_party/fatfs/src/ff.c **** if (!IsDBCS2(b)) 1712:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; /* Reject invalid sequence */ 1713:../../../Source/third_party/fatfs/src/ff.c **** w = (w << 8) + b; /* Create a DBC */ 1714:../../../Source/third_party/fatfs/src/ff.c **** } 1715:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(w, 1); /* Convert ANSI/OEM to Unicode */ 1716:../../../Source/third_party/fatfs/src/ff.c **** if (!w) return FR_INVALID_NAME; /* Reject invalid code */ 1717:../../../Source/third_party/fatfs/src/ff.c **** #endif 1718:../../../Source/third_party/fatfs/src/ff.c **** if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal chars for LFN */ 1719:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 1720:../../../Source/third_party/fatfs/src/ff.c **** lfn[di++] = w; /* Store the Unicode char */ 1721:../../../Source/third_party/fatfs/src/ff.c **** } 1722:../../../Source/third_party/fatfs/src/ff.c **** *path = &p[si]; /* Return pointer to the next segment */ 1723:../../../Source/third_party/fatfs/src/ff.c **** cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ 1724:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 1725:../../../Source/third_party/fatfs/src/ff.c **** if ((di == 1 && lfn[di-1] == '.') || /* Is this a dot entry? */ 1726:../../../Source/third_party/fatfs/src/ff.c **** (di == 2 && lfn[di-1] == '.' && lfn[di-2] == '.')) { 1727:../../../Source/third_party/fatfs/src/ff.c **** lfn[di] = 0; 1728:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < 11; i++) 1729:../../../Source/third_party/fatfs/src/ff.c **** dj->fn[i] = (i < di) ? '.' : ' '; 1730:../../../Source/third_party/fatfs/src/ff.c **** dj->fn[i] = cf | NS_DOT; /* This is a dot entry */ 1731:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 1732:../../../Source/third_party/fatfs/src/ff.c **** } 1733:../../../Source/third_party/fatfs/src/ff.c **** #endif 1734:../../../Source/third_party/fatfs/src/ff.c **** while (di) { /* Strip trailing spaces and dots */ 1735:../../../Source/third_party/fatfs/src/ff.c **** w = lfn[di-1]; 1736:../../../Source/third_party/fatfs/src/ff.c **** if (w != ' ' && w != '.') break; 1737:../../../Source/third_party/fatfs/src/ff.c **** di--; 1738:../../../Source/third_party/fatfs/src/ff.c **** } 1739:../../../Source/third_party/fatfs/src/ff.c **** if (!di) return FR_INVALID_NAME; /* Reject nul string */ 1740:../../../Source/third_party/fatfs/src/ff.c **** 1741:../../../Source/third_party/fatfs/src/ff.c **** lfn[di] = 0; /* LFN is created */ 1742:../../../Source/third_party/fatfs/src/ff.c **** 1743:../../../Source/third_party/fatfs/src/ff.c **** /* Create SFN in directory form */ 1744:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->fn, ' ', 11); 1745:../../../Source/third_party/fatfs/src/ff.c **** for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ 1746:../../../Source/third_party/fatfs/src/ff.c **** if (si) cf |= NS_LOSS | NS_LFN; 1747:../../../Source/third_party/fatfs/src/ff.c **** while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ 1748:../../../Source/third_party/fatfs/src/ff.c **** 1749:../../../Source/third_party/fatfs/src/ff.c **** b = i = 0; ni = 8; 1750:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1751:../../../Source/third_party/fatfs/src/ff.c **** w = lfn[si++]; /* Get an LFN char */ 1752:../../../Source/third_party/fatfs/src/ff.c **** if (!w) break; /* Break on end of the LFN */ 1753:../../../Source/third_party/fatfs/src/ff.c **** if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ 1754:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; continue; 1755:../../../Source/third_party/fatfs/src/ff.c **** } 1756:../../../Source/third_party/fatfs/src/ff.c **** 1757:../../../Source/third_party/fatfs/src/ff.c **** if (i >= ni || si == di) { /* Extension or end of SFN */ 1758:../../../Source/third_party/fatfs/src/ff.c **** if (ni == 11) { /* Long extension */ 1759:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; break; 1760:../../../Source/third_party/fatfs/src/ff.c **** } 1761:../../../Source/third_party/fatfs/src/ff.c **** if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ 1762:../../../Source/third_party/fatfs/src/ff.c **** if (si > di) break; /* No extension */ 1763:../../../Source/third_party/fatfs/src/ff.c **** si = di; i = 8; ni = 11; /* Enter extension section */ 1764:../../../Source/third_party/fatfs/src/ff.c **** b <<= 2; continue; 1765:../../../Source/third_party/fatfs/src/ff.c **** } 1766:../../../Source/third_party/fatfs/src/ff.c **** 1767:../../../Source/third_party/fatfs/src/ff.c **** if (w >= 0x80) { /* Non ASCII char */ 1768:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _EXCVT 1769:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(w, 0); /* Unicode -> OEM code */ 1770:../../../Source/third_party/fatfs/src/ff.c **** if (w) w = ExCvt[w - 0x80]; /* Convert extended char to upper (SBCS) */ 1771:../../../Source/third_party/fatfs/src/ff.c **** #else 1772:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ 1773:../../../Source/third_party/fatfs/src/ff.c **** #endif 1774:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LFN; /* Force create LFN entry */ 1775:../../../Source/third_party/fatfs/src/ff.c **** } 1776:../../../Source/third_party/fatfs/src/ff.c **** 1777:../../../Source/third_party/fatfs/src/ff.c **** if (_DF1S && w >= 0x100) { /* Double byte char (always false on SBCS cfg) */ 1778:../../../Source/third_party/fatfs/src/ff.c **** if (i >= ni - 1) { 1779:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; i = ni; continue; 1780:../../../Source/third_party/fatfs/src/ff.c **** } 1781:../../../Source/third_party/fatfs/src/ff.c **** dj->fn[i++] = (BYTE)(w >> 8); 1782:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Single byte char */ 1783:../../../Source/third_party/fatfs/src/ff.c **** if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal chars for SFN */ 1784:../../../Source/third_party/fatfs/src/ff.c **** w = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ 1785:../../../Source/third_party/fatfs/src/ff.c **** } else { 1786:../../../Source/third_party/fatfs/src/ff.c **** if (IsUpper(w)) { /* ASCII large capital */ 1787:../../../Source/third_party/fatfs/src/ff.c **** b |= 2; 1788:../../../Source/third_party/fatfs/src/ff.c **** } else { 1789:../../../Source/third_party/fatfs/src/ff.c **** if (IsLower(w)) { /* ASCII small capital */ 1790:../../../Source/third_party/fatfs/src/ff.c **** b |= 1; w -= 0x20; 1791:../../../Source/third_party/fatfs/src/ff.c **** } 1792:../../../Source/third_party/fatfs/src/ff.c **** } 1793:../../../Source/third_party/fatfs/src/ff.c **** } 1794:../../../Source/third_party/fatfs/src/ff.c **** } 1795:../../../Source/third_party/fatfs/src/ff.c **** dj->fn[i++] = (BYTE)w; 1796:../../../Source/third_party/fatfs/src/ff.c **** } 1797:../../../Source/third_party/fatfs/src/ff.c **** 1798:../../../Source/third_party/fatfs/src/ff.c **** if (dj->fn[0] == DDE) dj->fn[0] = NDDE; /* If the first char collides with deleted mark, replace i 1799:../../../Source/third_party/fatfs/src/ff.c **** 1800:../../../Source/third_party/fatfs/src/ff.c **** if (ni == 8) b <<= 2; 1801:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capital 1802:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LFN; 1803:../../../Source/third_party/fatfs/src/ff.c **** if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended char, NT flags are create 1804:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ 1805:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ 1806:../../../Source/third_party/fatfs/src/ff.c **** } 1807:../../../Source/third_party/fatfs/src/ff.c **** 1808:../../../Source/third_party/fatfs/src/ff.c **** dj->fn[NS] = cf; /* SFN is created */ 1809:../../../Source/third_party/fatfs/src/ff.c **** 1810:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 1811:../../../Source/third_party/fatfs/src/ff.c **** 1812:../../../Source/third_party/fatfs/src/ff.c **** 1813:../../../Source/third_party/fatfs/src/ff.c **** #else /* Non-LFN configuration */ 1814:../../../Source/third_party/fatfs/src/ff.c **** BYTE b, c, d, *sfn; 1815:../../../Source/third_party/fatfs/src/ff.c **** UINT ni, si, i; 1816:../../../Source/third_party/fatfs/src/ff.c **** const char *p; 1817:../../../Source/third_party/fatfs/src/ff.c **** 1818:../../../Source/third_party/fatfs/src/ff.c **** /* Create file name in directory form */ 1819:../../../Source/third_party/fatfs/src/ff.c **** for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ 1820:../../../Source/third_party/fatfs/src/ff.c **** sfn = dj->fn; 1821:../../../Source/third_party/fatfs/src/ff.c **** mem_set(sfn, ' ', 11); 1822:../../../Source/third_party/fatfs/src/ff.c **** si = i = b = 0; ni = 8; 1823:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 1824:../../../Source/third_party/fatfs/src/ff.c **** if (p[si] == '.') { /* Is this a dot entry? */ 1825:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1826:../../../Source/third_party/fatfs/src/ff.c **** c = (BYTE)p[si++]; 1827:../../../Source/third_party/fatfs/src/ff.c **** if (c != '.' || si >= 3) break; 1828:../../../Source/third_party/fatfs/src/ff.c **** sfn[i++] = c; 1829:../../../Source/third_party/fatfs/src/ff.c **** } 1830:../../../Source/third_party/fatfs/src/ff.c **** if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; 1831:../../../Source/third_party/fatfs/src/ff.c **** *path = &p[si]; /* Return pointer to the next segment */ 1832:../../../Source/third_party/fatfs/src/ff.c **** sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ 1833:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 1834:../../../Source/third_party/fatfs/src/ff.c **** } 1835:../../../Source/third_party/fatfs/src/ff.c **** #endif 1836:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 1837:../../../Source/third_party/fatfs/src/ff.c **** c = (BYTE)p[si++]; 1838:../../../Source/third_party/fatfs/src/ff.c **** if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ 1839:../../../Source/third_party/fatfs/src/ff.c **** if (c == '.' || i >= ni) { 1840:../../../Source/third_party/fatfs/src/ff.c **** if (ni != 8 || c != '.') return FR_INVALID_NAME; 1841:../../../Source/third_party/fatfs/src/ff.c **** i = 8; ni = 11; 1842:../../../Source/third_party/fatfs/src/ff.c **** b <<= 2; continue; 1843:../../../Source/third_party/fatfs/src/ff.c **** } 1844:../../../Source/third_party/fatfs/src/ff.c **** if (c >= 0x80) { /* Extended char? */ 1845:../../../Source/third_party/fatfs/src/ff.c **** b |= 3; /* Eliminate NT flag */ 1846:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _EXCVT 1847:../../../Source/third_party/fatfs/src/ff.c **** c = ExCvt[c - 0x80]; /* To upper extended chars (SBCS cfg) */ 1848:../../../Source/third_party/fatfs/src/ff.c **** #else 1849:../../../Source/third_party/fatfs/src/ff.c **** #if !_DF1S 1850:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; /* Reject extended chars (ASCII cfg) */ 1851:../../../Source/third_party/fatfs/src/ff.c **** #endif 1852:../../../Source/third_party/fatfs/src/ff.c **** #endif 1853:../../../Source/third_party/fatfs/src/ff.c **** } 1854:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ 1855:../../../Source/third_party/fatfs/src/ff.c **** d = (BYTE)p[si++]; /* Get 2nd byte */ 1856:../../../Source/third_party/fatfs/src/ff.c **** if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ 1857:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 1858:../../../Source/third_party/fatfs/src/ff.c **** sfn[i++] = c; 1859:../../../Source/third_party/fatfs/src/ff.c **** sfn[i++] = d; 1860:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Single byte code */ 1861:../../../Source/third_party/fatfs/src/ff.c **** if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ 1862:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 1863:../../../Source/third_party/fatfs/src/ff.c **** if (IsUpper(c)) { /* ASCII large capital? */ 1864:../../../Source/third_party/fatfs/src/ff.c **** b |= 2; 1865:../../../Source/third_party/fatfs/src/ff.c **** } else { 1866:../../../Source/third_party/fatfs/src/ff.c **** if (IsLower(c)) { /* ASCII small capital? */ 1867:../../../Source/third_party/fatfs/src/ff.c **** b |= 1; c -= 0x20; 1868:../../../Source/third_party/fatfs/src/ff.c **** } 1869:../../../Source/third_party/fatfs/src/ff.c **** } 1870:../../../Source/third_party/fatfs/src/ff.c **** sfn[i++] = c; 1871:../../../Source/third_party/fatfs/src/ff.c **** } 1872:../../../Source/third_party/fatfs/src/ff.c **** } 1873:../../../Source/third_party/fatfs/src/ff.c **** *path = &p[si]; /* Return pointer to the next segment */ 1874:../../../Source/third_party/fatfs/src/ff.c **** c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ 1875:../../../Source/third_party/fatfs/src/ff.c **** 1876:../../../Source/third_party/fatfs/src/ff.c **** if (!i) return FR_INVALID_NAME; /* Reject nul string */ 1877:../../../Source/third_party/fatfs/src/ff.c **** if (sfn[0] == DDE) sfn[0] = NDDE; /* When first char collides with DDE, replace it with 0x05 */ 1878:../../../Source/third_party/fatfs/src/ff.c **** 1879:../../../Source/third_party/fatfs/src/ff.c **** if (ni == 8) b <<= 2; 1880:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ 1881:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ 1882:../../../Source/third_party/fatfs/src/ff.c **** 1883:../../../Source/third_party/fatfs/src/ff.c **** sfn[NS] = c; /* Store NT flag, File name is created */ 1884:../../../Source/third_party/fatfs/src/ff.c **** 1885:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 1886:../../../Source/third_party/fatfs/src/ff.c **** #endif 1887:../../../Source/third_party/fatfs/src/ff.c **** } 1888:../../../Source/third_party/fatfs/src/ff.c **** 1889:../../../Source/third_party/fatfs/src/ff.c **** 1890:../../../Source/third_party/fatfs/src/ff.c **** 1891:../../../Source/third_party/fatfs/src/ff.c **** 1892:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1893:../../../Source/third_party/fatfs/src/ff.c **** /* Get file information from directory entry */ 1894:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1895:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_MINIMIZE <= 1 || _FS_RPATH >= 2 1896:../../../Source/third_party/fatfs/src/ff.c **** static 1897:../../../Source/third_party/fatfs/src/ff.c **** void get_fileinfo ( /* No return code */ 1898:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to the directory object */ 1899:../../../Source/third_party/fatfs/src/ff.c **** FILINFO *fno /* Pointer to the file information to be filled */ 1900:../../../Source/third_party/fatfs/src/ff.c **** ) 1901:../../../Source/third_party/fatfs/src/ff.c **** { 1902:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 1903:../../../Source/third_party/fatfs/src/ff.c **** BYTE nt, *dir; 1904:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *p, c; 1905:../../../Source/third_party/fatfs/src/ff.c **** 1906:../../../Source/third_party/fatfs/src/ff.c **** 1907:../../../Source/third_party/fatfs/src/ff.c **** p = fno->fname; 1908:../../../Source/third_party/fatfs/src/ff.c **** if (dj->sect) { 1909:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; 1910:../../../Source/third_party/fatfs/src/ff.c **** nt = dir[DIR_NTres]; /* NT flag */ 1911:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < 8; i++) { /* Copy name body */ 1912:../../../Source/third_party/fatfs/src/ff.c **** c = dir[i]; 1913:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1914:../../../Source/third_party/fatfs/src/ff.c **** if (c == NDDE) c = (TCHAR)DDE; 1915:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; 1916:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1917:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(c) && i < 7 && IsDBCS2(dir[i+1])) 1918:../../../Source/third_party/fatfs/src/ff.c **** c = (c << 8) | dir[++i]; 1919:../../../Source/third_party/fatfs/src/ff.c **** c = ff_convert(c, 1); 1920:../../../Source/third_party/fatfs/src/ff.c **** if (!c) c = '?'; 1921:../../../Source/third_party/fatfs/src/ff.c **** #endif 1922:../../../Source/third_party/fatfs/src/ff.c **** *p++ = c; 1923:../../../Source/third_party/fatfs/src/ff.c **** } 1924:../../../Source/third_party/fatfs/src/ff.c **** if (dir[8] != ' ') { /* Copy name extension */ 1925:../../../Source/third_party/fatfs/src/ff.c **** *p++ = '.'; 1926:../../../Source/third_party/fatfs/src/ff.c **** for (i = 8; i < 11; i++) { 1927:../../../Source/third_party/fatfs/src/ff.c **** c = dir[i]; 1928:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1929:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_EXT) && IsUpper(c)) c += 0x20; 1930:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1931:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(c) && i < 10 && IsDBCS2(dir[i+1])) 1932:../../../Source/third_party/fatfs/src/ff.c **** c = (c << 8) | dir[++i]; 1933:../../../Source/third_party/fatfs/src/ff.c **** c = ff_convert(c, 1); 1934:../../../Source/third_party/fatfs/src/ff.c **** if (!c) c = '?'; 1935:../../../Source/third_party/fatfs/src/ff.c **** #endif 1936:../../../Source/third_party/fatfs/src/ff.c **** *p++ = c; 1937:../../../Source/third_party/fatfs/src/ff.c **** } 1938:../../../Source/third_party/fatfs/src/ff.c **** } 1939:../../../Source/third_party/fatfs/src/ff.c **** fno->fattrib = dir[DIR_Attr]; /* Attribute */ 1940:../../../Source/third_party/fatfs/src/ff.c **** fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ 1941:../../../Source/third_party/fatfs/src/ff.c **** fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ 1942:../../../Source/third_party/fatfs/src/ff.c **** fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ 1943:../../../Source/third_party/fatfs/src/ff.c **** } 1944:../../../Source/third_party/fatfs/src/ff.c **** *p = 0; /* Terminate SFN str by a \0 */ 1945:../../../Source/third_party/fatfs/src/ff.c **** 1946:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 1947:../../../Source/third_party/fatfs/src/ff.c **** if (fno->lfname && fno->lfsize) { 1948:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *tp = fno->lfname; 1949:../../../Source/third_party/fatfs/src/ff.c **** WCHAR w, *lfn; 1950:../../../Source/third_party/fatfs/src/ff.c **** 1951:../../../Source/third_party/fatfs/src/ff.c **** i = 0; 1952:../../../Source/third_party/fatfs/src/ff.c **** if (dj->sect && dj->lfn_idx != 0xFFFF) {/* Get LFN if available */ 1953:../../../Source/third_party/fatfs/src/ff.c **** lfn = dj->lfn; 1954:../../../Source/third_party/fatfs/src/ff.c **** while ((w = *lfn++) != 0) { /* Get an LFN char */ 1955:../../../Source/third_party/fatfs/src/ff.c **** #if !_LFN_UNICODE 1956:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(w, 0); /* Unicode -> OEM conversion */ 1957:../../../Source/third_party/fatfs/src/ff.c **** if (!w) { i = 0; break; } /* Could not convert, no LFN */ 1958:../../../Source/third_party/fatfs/src/ff.c **** if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ 1959:../../../Source/third_party/fatfs/src/ff.c **** tp[i++] = (TCHAR)(w >> 8); 1960:../../../Source/third_party/fatfs/src/ff.c **** #endif 1961:../../../Source/third_party/fatfs/src/ff.c **** if (i >= fno->lfsize - 1) { i = 0; break; } /* Buffer overflow, no LFN */ 1962:../../../Source/third_party/fatfs/src/ff.c **** tp[i++] = (TCHAR)w; 1963:../../../Source/third_party/fatfs/src/ff.c **** } 1964:../../../Source/third_party/fatfs/src/ff.c **** } 1965:../../../Source/third_party/fatfs/src/ff.c **** tp[i] = 0; /* Terminate the LFN str by a \0 */ 1966:../../../Source/third_party/fatfs/src/ff.c **** } 1967:../../../Source/third_party/fatfs/src/ff.c **** #endif 1968:../../../Source/third_party/fatfs/src/ff.c **** } 1969:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE <= 1 || _FS_RPATH >= 2*/ 1970:../../../Source/third_party/fatfs/src/ff.c **** 1971:../../../Source/third_party/fatfs/src/ff.c **** 1972:../../../Source/third_party/fatfs/src/ff.c **** 1973:../../../Source/third_party/fatfs/src/ff.c **** 1974:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1975:../../../Source/third_party/fatfs/src/ff.c **** /* Follow a file path */ 1976:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 1977:../../../Source/third_party/fatfs/src/ff.c **** 1978:../../../Source/third_party/fatfs/src/ff.c **** static 1979:../../../Source/third_party/fatfs/src/ff.c **** FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ 1980:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Directory object to return last directory and found object */ 1981:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path /* Full-path string to find a file or directory */ 1982:../../../Source/third_party/fatfs/src/ff.c **** ) 1983:../../../Source/third_party/fatfs/src/ff.c **** { 1984:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1985:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir, ns; 1986:../../../Source/third_party/fatfs/src/ff.c **** 1987:../../../Source/third_party/fatfs/src/ff.c **** 1988:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 1989:../../../Source/third_party/fatfs/src/ff.c **** if (*path == '/' || *path == '\\') { /* There is a heading separator */ 1990:../../../Source/third_party/fatfs/src/ff.c **** path++; dj->sclust = 0; /* Strip it and start from the root dir */ 1991:../../../Source/third_party/fatfs/src/ff.c **** } else { /* No heading separator */ 1992:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = dj->fs->cdir; /* Start from the current dir */ 1993:../../../Source/third_party/fatfs/src/ff.c **** } 1994:../../../Source/third_party/fatfs/src/ff.c **** #else 1995:../../../Source/third_party/fatfs/src/ff.c **** if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ 1996:../../../Source/third_party/fatfs/src/ff.c **** path++; 1997:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = 0; /* Start from the root dir */ 1998:../../../Source/third_party/fatfs/src/ff.c **** #endif 1999:../../../Source/third_party/fatfs/src/ff.c **** 2000:../../../Source/third_party/fatfs/src/ff.c **** if ((UINT)*path < ' ') { /* Nul path means the start directory itself */ 2001:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); 2002:../../../Source/third_party/fatfs/src/ff.c **** dj->dir = 0; 2003:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Follow path */ 2004:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 2005:../../../Source/third_party/fatfs/src/ff.c **** res = create_name(dj, &path); /* Get a segment */ 2006:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2007:../../../Source/third_party/fatfs/src/ff.c **** res = dir_find(dj); /* Find it */ 2008:../../../Source/third_party/fatfs/src/ff.c **** ns = *(dj->fn+NS); 2009:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) { /* Failed to find the object */ 2010:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_NO_FILE) break; /* Abort if any hard error occurred */ 2011:../../../Source/third_party/fatfs/src/ff.c **** /* Object not found */ 2012:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exit */ 2013:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = 0; dj->dir = 0; /* It is the root dir */ 2014:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 2015:../../../Source/third_party/fatfs/src/ff.c **** if (!(ns & NS_LAST)) continue; 2016:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Could not find the object */ 2017:../../../Source/third_party/fatfs/src/ff.c **** if (!(ns & NS_LAST)) res = FR_NO_PATH; 2018:../../../Source/third_party/fatfs/src/ff.c **** } 2019:../../../Source/third_party/fatfs/src/ff.c **** break; 2020:../../../Source/third_party/fatfs/src/ff.c **** } 2021:../../../Source/third_party/fatfs/src/ff.c **** if (ns & NS_LAST) break; /* Last segment match. Function completed. */ 2022:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* There is next segment. Follow the sub directory */ 2023:../../../Source/third_party/fatfs/src/ff.c **** if (!(dir[DIR_Attr] & AM_DIR)) { /* Cannot follow because it is a file */ 2024:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_PATH; break; 2025:../../../Source/third_party/fatfs/src/ff.c **** } 2026:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = ld_clust(dj->fs, dir); 2027:../../../Source/third_party/fatfs/src/ff.c **** } 2028:../../../Source/third_party/fatfs/src/ff.c **** } 2029:../../../Source/third_party/fatfs/src/ff.c **** 2030:../../../Source/third_party/fatfs/src/ff.c **** return res; 2031:../../../Source/third_party/fatfs/src/ff.c **** } 2032:../../../Source/third_party/fatfs/src/ff.c **** 2033:../../../Source/third_party/fatfs/src/ff.c **** 2034:../../../Source/third_party/fatfs/src/ff.c **** 2035:../../../Source/third_party/fatfs/src/ff.c **** 2036:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2037:../../../Source/third_party/fatfs/src/ff.c **** /* Load a sector and check if it is an FAT Volume Boot Record */ 2038:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2039:../../../Source/third_party/fatfs/src/ff.c **** 2040:../../../Source/third_party/fatfs/src/ff.c **** static 2041:../../../Source/third_party/fatfs/src/ff.c **** BYTE check_fs ( /* 0:FAT-VBR, 1:Any BR but not FAT, 2:Not a BR, 3:Disk error */ 2042:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs, /* File system object */ 2043:../../../Source/third_party/fatfs/src/ff.c **** DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ 2044:../../../Source/third_party/fatfs/src/ff.c **** ) 2045:../../../Source/third_party/fatfs/src/ff.c **** { 132 .loc 1 2045 0 133 .cfi_startproc 134 @ args = 0, pretend = 0, frame = 0 135 @ frame_needed = 0, uses_anonymous_args = 0 136 .LVL16: 137 0000 10B5 push {r4, lr} 138 .cfi_def_cfa_offset 8 139 .cfi_offset 4, -8 140 .cfi_offset 14, -4 141 0002 0446 mov r4, r0 142 0004 0A46 mov r2, r1 2046:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK) /* Load boot record */ 143 .loc 1 2046 0 144 0006 4078 ldrb r0, [r0, #1] @ zero_extendqisi2 145 .LVL17: 146 0008 04F13401 add r1, r4, #52 147 .LVL18: 148 000c 0123 movs r3, #1 149 000e FFF7FEFF bl disk_read 150 .LVL19: 151 0012 80BB cbnz r0, .L12 2047:../../../Source/third_party/fatfs/src/ff.c **** return 3; 2048:../../../Source/third_party/fatfs/src/ff.c **** if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 152 .loc 1 2048 0 153 0014 94F83322 ldrb r2, [r4, #563] @ zero_extendqisi2 154 0018 94F83232 ldrb r3, [r4, #562] @ zero_extendqisi2 155 001c 43EA0223 orr r3, r3, r2, lsl #8 156 0020 1BB2 sxth r3, r3 157 0022 184A ldr r2, .L16 158 0024 9342 cmp r3, r2 159 0026 28D1 bne .L13 2049:../../../Source/third_party/fatfs/src/ff.c **** return 2; 2050:../../../Source/third_party/fatfs/src/ff.c **** 2051:../../../Source/third_party/fatfs/src/ff.c **** if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ 160 .loc 1 2051 0 161 0028 94F86D10 ldrb r1, [r4, #109] @ zero_extendqisi2 162 002c 94F86C20 ldrb r2, [r4, #108] @ zero_extendqisi2 163 0030 1304 lsls r3, r2, #16 164 0032 43EA0162 orr r2, r3, r1, lsl #24 165 0036 94F86A30 ldrb r3, [r4, #106] @ zero_extendqisi2 166 003a 1343 orrs r3, r3, r2 167 003c 94F86B20 ldrb r2, [r4, #107] @ zero_extendqisi2 168 0040 43EA0223 orr r3, r3, r2, lsl #8 169 0044 23F07F43 bic r3, r3, #-16777216 170 0048 0F4A ldr r2, .L16+4 171 004a 9342 cmp r3, r2 172 004c 17D0 beq .L14 2052:../../../Source/third_party/fatfs/src/ff.c **** return 0; 2053:../../../Source/third_party/fatfs/src/ff.c **** if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) 173 .loc 1 2053 0 174 004e 94F88900 ldrb r0, [r4, #137] @ zero_extendqisi2 175 0052 94F88830 ldrb r3, [r4, #136] @ zero_extendqisi2 176 0056 1B04 lsls r3, r3, #16 177 0058 43EA0060 orr r0, r3, r0, lsl #24 178 005c 94F88630 ldrb r3, [r4, #134] @ zero_extendqisi2 179 0060 0343 orrs r3, r3, r0 180 0062 94F88700 ldrb r0, [r4, #135] @ zero_extendqisi2 181 0066 43EA0020 orr r0, r3, r0, lsl #8 182 006a 20F07F43 bic r3, r0, #-16777216 2047:../../../Source/third_party/fatfs/src/ff.c **** if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 183 .loc 1 2047 0 184 006e 981A subs r0, r3, r2 185 0070 18BF it ne 186 0072 0120 movne r0, #1 187 0074 10BD pop {r4, pc} 188 .LVL20: 189 .L12: 190 0076 0320 movs r0, #3 191 0078 10BD pop {r4, pc} 192 .LVL21: 193 .L13: 2049:../../../Source/third_party/fatfs/src/ff.c **** return 2; 194 .loc 1 2049 0 195 007a 0220 movs r0, #2 196 007c 10BD pop {r4, pc} 197 .LVL22: 198 .L14: 2052:../../../Source/third_party/fatfs/src/ff.c **** return 0; 199 .loc 1 2052 0 200 007e 0020 movs r0, #0 2054:../../../Source/third_party/fatfs/src/ff.c **** return 0; 2055:../../../Source/third_party/fatfs/src/ff.c **** 2056:../../../Source/third_party/fatfs/src/ff.c **** return 1; 2057:../../../Source/third_party/fatfs/src/ff.c **** } 201 .loc 1 2057 0 202 0080 10BD pop {r4, pc} 203 .LVL23: 204 .L17: 205 0082 00BF .align 2 206 .L16: 207 0084 55AAFFFF .word -21931 208 0088 46415400 .word 5521734 209 .cfi_endproc 210 .LFE29: 212 .section .text.sync_window,"ax",%progbits 213 .align 2 214 .thumb 215 .thumb_func 217 sync_window: 218 .LFB4: 735:../../../Source/third_party/fatfs/src/ff.c **** DWORD wsect; 219 .loc 1 735 0 220 .cfi_startproc 221 @ args = 0, pretend = 0, frame = 0 222 @ frame_needed = 0, uses_anonymous_args = 0 223 .LVL24: 740:../../../Source/third_party/fatfs/src/ff.c **** wsect = fs->winsect; /* Current sector number */ 224 .loc 1 740 0 225 0000 0379 ldrb r3, [r0, #4] @ zero_extendqisi2 226 0002 43B3 cbz r3, .L21 735:../../../Source/third_party/fatfs/src/ff.c **** DWORD wsect; 227 .loc 1 735 0 228 0004 2DE9F041 push {r4, r5, r6, r7, r8, lr} 229 .cfi_def_cfa_offset 24 230 .cfi_offset 4, -24 231 .cfi_offset 5, -20 232 .cfi_offset 6, -16 233 .cfi_offset 7, -12 234 .cfi_offset 8, -8 235 .cfi_offset 14, -4 236 0008 0446 mov r4, r0 741:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fs->drv, fs->win, wsect, 1) != RES_OK) 237 .loc 1 741 0 238 000a 056B ldr r5, [r0, #48] 239 .LVL25: 742:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 240 .loc 1 742 0 241 000c 00F13407 add r7, r0, #52 242 0010 4078 ldrb r0, [r0, #1] @ zero_extendqisi2 243 .LVL26: 244 0012 3946 mov r1, r7 245 0014 2A46 mov r2, r5 246 0016 0123 movs r3, #1 247 0018 FFF7FEFF bl disk_write 248 .LVL27: 249 001c E8B9 cbnz r0, .L22 744:../../../Source/third_party/fatfs/src/ff.c **** if (wsect >= fs->fatbase && wsect < (fs->fatbase + fs->fsize)) { /* In FAT area? */ 250 .loc 1 744 0 251 001e 0023 movs r3, #0 252 0020 2371 strb r3, [r4, #4] 745:../../../Source/third_party/fatfs/src/ff.c **** for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ 253 .loc 1 745 0 254 0022 636A ldr r3, [r4, #36] 255 0024 9D42 cmp r5, r3 256 0026 1BD3 bcc .L23 745:../../../Source/third_party/fatfs/src/ff.c **** for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ 257 .loc 1 745 0 is_stmt 0 discriminator 1 258 0028 E269 ldr r2, [r4, #28] 259 002a 1344 add r3, r3, r2 260 002c 9D42 cmp r5, r3 261 002e 1AD2 bcs .L24 746:../../../Source/third_party/fatfs/src/ff.c **** wsect += fs->fsize; 262 .loc 1 746 0 is_stmt 1 263 0030 E678 ldrb r6, [r4, #3] @ zero_extendqisi2 264 .LVL28: 265 0032 012E cmp r6, #1 266 0034 1AD9 bls .L25 748:../../../Source/third_party/fatfs/src/ff.c **** } 267 .loc 1 748 0 discriminator 3 268 0036 4FF00108 mov r8, #1 269 .L26: 747:../../../Source/third_party/fatfs/src/ff.c **** disk_write(fs->drv, fs->win, wsect, 1); 270 .loc 1 747 0 discriminator 3 271 003a E369 ldr r3, [r4, #28] 272 003c 1D44 add r5, r5, r3 273 .LVL29: 748:../../../Source/third_party/fatfs/src/ff.c **** } 274 .loc 1 748 0 discriminator 3 275 003e 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 276 0040 3946 mov r1, r7 277 0042 2A46 mov r2, r5 278 0044 4346 mov r3, r8 279 0046 FFF7FEFF bl disk_write 280 .LVL30: 746:../../../Source/third_party/fatfs/src/ff.c **** wsect += fs->fsize; 281 .loc 1 746 0 discriminator 3 282 004a 013E subs r6, r6, #1 283 .LVL31: 284 004c 012E cmp r6, #1 285 004e F4D1 bne .L26 752:../../../Source/third_party/fatfs/src/ff.c **** } 286 .loc 1 752 0 287 0050 0020 movs r0, #0 288 0052 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 289 .LVL32: 290 .L21: 291 .cfi_def_cfa_offset 0 292 .cfi_restore 4 293 .cfi_restore 5 294 .cfi_restore 6 295 .cfi_restore 7 296 .cfi_restore 8 297 .cfi_restore 14 298 0056 0020 movs r0, #0 299 .LVL33: 753:../../../Source/third_party/fatfs/src/ff.c **** #endif 300 .loc 1 753 0 301 0058 7047 bx lr 302 .LVL34: 303 .L22: 304 .cfi_def_cfa_offset 24 305 .cfi_offset 4, -24 306 .cfi_offset 5, -20 307 .cfi_offset 6, -16 308 .cfi_offset 7, -12 309 .cfi_offset 8, -8 310 .cfi_offset 14, -4 743:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 0; 311 .loc 1 743 0 312 005a 0120 movs r0, #1 313 005c BDE8F081 pop {r4, r5, r6, r7, r8, pc} 314 .LVL35: 315 .L23: 752:../../../Source/third_party/fatfs/src/ff.c **** } 316 .loc 1 752 0 317 0060 0020 movs r0, #0 318 0062 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 319 .LVL36: 320 .L24: 321 0066 0020 movs r0, #0 322 0068 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 323 .LVL37: 324 .L25: 325 006c 0020 movs r0, #0 753:../../../Source/third_party/fatfs/src/ff.c **** #endif 326 .loc 1 753 0 327 006e BDE8F081 pop {r4, r5, r6, r7, r8, pc} 328 .cfi_endproc 329 .LFE4: 331 0072 00BF .section .text.move_window,"ax",%progbits 332 .align 2 333 .thumb 334 .thumb_func 336 move_window: 337 .LFB5: 762:../../../Source/third_party/fatfs/src/ff.c **** if (sector != fs->winsect) { /* Changed current window */ 338 .loc 1 762 0 339 .cfi_startproc 340 @ args = 0, pretend = 0, frame = 0 341 @ frame_needed = 0, uses_anonymous_args = 0 342 .LVL38: 343 0000 70B5 push {r4, r5, r6, lr} 344 .cfi_def_cfa_offset 16 345 .cfi_offset 4, -16 346 .cfi_offset 5, -12 347 .cfi_offset 6, -8 348 .cfi_offset 14, -4 763:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 349 .loc 1 763 0 350 0002 036B ldr r3, [r0, #48] 351 0004 8B42 cmp r3, r1 352 0006 0FD0 beq .L31 353 0008 0D46 mov r5, r1 354 000a 0446 mov r4, r0 765:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 355 .loc 1 765 0 356 000c FFF7FEFF bl sync_window 357 .LVL39: 358 0010 0646 mov r6, r0 359 0012 58B9 cbnz r0, .L32 768:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 360 .loc 1 768 0 361 0014 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 362 0016 04F13401 add r1, r4, #52 363 001a 2A46 mov r2, r5 364 001c 0123 movs r3, #1 365 001e FFF7FEFF bl disk_read 366 .LVL40: 367 0022 28B9 cbnz r0, .L33 770:../../../Source/third_party/fatfs/src/ff.c **** } 368 .loc 1 770 0 369 0024 2563 str r5, [r4, #48] 370 0026 04E0 b .L30 371 .LVL41: 372 .L31: 773:../../../Source/third_party/fatfs/src/ff.c **** } 373 .loc 1 773 0 374 0028 0026 movs r6, #0 375 002a 02E0 b .L30 376 .LVL42: 377 .L32: 766:../../../Source/third_party/fatfs/src/ff.c **** #endif 378 .loc 1 766 0 379 002c 0126 movs r6, #1 380 002e 00E0 b .L30 381 .L33: 769:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = sector; 382 .loc 1 769 0 383 0030 0126 movs r6, #1 384 .LVL43: 385 .L30: 774:../../../Source/third_party/fatfs/src/ff.c **** 386 .loc 1 774 0 387 0032 3046 mov r0, r6 388 0034 70BD pop {r4, r5, r6, pc} 389 .cfi_endproc 390 .LFE5: 392 0036 00BF .section .text.validate,"ax",%progbits 393 .align 2 394 .thumb 395 .thumb_func 397 validate: 398 .LFB31: 2058:../../../Source/third_party/fatfs/src/ff.c **** 2059:../../../Source/third_party/fatfs/src/ff.c **** 2060:../../../Source/third_party/fatfs/src/ff.c **** 2061:../../../Source/third_party/fatfs/src/ff.c **** 2062:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2063:../../../Source/third_party/fatfs/src/ff.c **** /* Check if the file system object is valid or not */ 2064:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2065:../../../Source/third_party/fatfs/src/ff.c **** 2066:../../../Source/third_party/fatfs/src/ff.c **** static 2067:../../../Source/third_party/fatfs/src/ff.c **** FRESULT chk_mounted ( /* FR_OK(0): successful, !=0: any error occurred */ 2068:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR **path, /* Pointer to pointer to the path name (drive number) */ 2069:../../../Source/third_party/fatfs/src/ff.c **** FATFS **rfs, /* Pointer to pointer to the found file system object */ 2070:../../../Source/third_party/fatfs/src/ff.c **** BYTE wmode /* !=0: Check write protection for write access */ 2071:../../../Source/third_party/fatfs/src/ff.c **** ) 2072:../../../Source/third_party/fatfs/src/ff.c **** { 2073:../../../Source/third_party/fatfs/src/ff.c **** BYTE fmt, b, pi, *tbl; 2074:../../../Source/third_party/fatfs/src/ff.c **** UINT vol; 2075:../../../Source/third_party/fatfs/src/ff.c **** DSTATUS stat; 2076:../../../Source/third_party/fatfs/src/ff.c **** DWORD bsect, fasize, tsect, sysect, nclst, szbfat; 2077:../../../Source/third_party/fatfs/src/ff.c **** WORD nrsv; 2078:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *p = *path; 2079:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; 2080:../../../Source/third_party/fatfs/src/ff.c **** 2081:../../../Source/third_party/fatfs/src/ff.c **** 2082:../../../Source/third_party/fatfs/src/ff.c **** /* Get logical drive number from the path name */ 2083:../../../Source/third_party/fatfs/src/ff.c **** vol = p[0] - '0'; /* Is there a drive number? */ 2084:../../../Source/third_party/fatfs/src/ff.c **** if (vol <= 9 && p[1] == ':') { /* Found a drive number, get and strip it */ 2085:../../../Source/third_party/fatfs/src/ff.c **** p += 2; *path = p; /* Return pointer to the path name */ 2086:../../../Source/third_party/fatfs/src/ff.c **** } else { /* No drive number, use default drive */ 2087:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 2088:../../../Source/third_party/fatfs/src/ff.c **** vol = CurrVol; /* Use current drive */ 2089:../../../Source/third_party/fatfs/src/ff.c **** #else 2090:../../../Source/third_party/fatfs/src/ff.c **** vol = 0; /* Use drive 0 */ 2091:../../../Source/third_party/fatfs/src/ff.c **** #endif 2092:../../../Source/third_party/fatfs/src/ff.c **** } 2093:../../../Source/third_party/fatfs/src/ff.c **** 2094:../../../Source/third_party/fatfs/src/ff.c **** /* Check if the file system object is valid or not */ 2095:../../../Source/third_party/fatfs/src/ff.c **** *rfs = 0; 2096:../../../Source/third_party/fatfs/src/ff.c **** if (vol >= _VOLUMES) /* Is the drive number valid? */ 2097:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_DRIVE; 2098:../../../Source/third_party/fatfs/src/ff.c **** fs = FatFs[vol]; /* Get corresponding file system object */ 2099:../../../Source/third_party/fatfs/src/ff.c **** if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ 2100:../../../Source/third_party/fatfs/src/ff.c **** 2101:../../../Source/third_party/fatfs/src/ff.c **** ENTER_FF(fs); /* Lock volume */ 2102:../../../Source/third_party/fatfs/src/ff.c **** 2103:../../../Source/third_party/fatfs/src/ff.c **** *rfs = fs; /* Return pointer to the corresponding file system object */ 2104:../../../Source/third_party/fatfs/src/ff.c **** if (fs->fs_type) { /* If the volume has been mounted */ 2105:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_status(fs->drv); 2106:../../../Source/third_party/fatfs/src/ff.c **** if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized (has not been changed) 2107:../../../Source/third_party/fatfs/src/ff.c **** if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ 2108:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 2109:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; /* The file system object is valid */ 2110:../../../Source/third_party/fatfs/src/ff.c **** } 2111:../../../Source/third_party/fatfs/src/ff.c **** } 2112:../../../Source/third_party/fatfs/src/ff.c **** 2113:../../../Source/third_party/fatfs/src/ff.c **** /* The file system object is not valid. */ 2114:../../../Source/third_party/fatfs/src/ff.c **** /* Following code attempts to mount the volume. (analyze BPB and initialize the fs object) */ 2115:../../../Source/third_party/fatfs/src/ff.c **** 2116:../../../Source/third_party/fatfs/src/ff.c **** fs->fs_type = 0; /* Clear the file system object */ 2117:../../../Source/third_party/fatfs/src/ff.c **** fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ 2118:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_initialize(fs->drv); /* Initialize the physical drive */ 2119:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_NOINIT) /* Check if the initialization succeeded */ 2120:../../../Source/third_party/fatfs/src/ff.c **** return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ 2121:../../../Source/third_party/fatfs/src/ff.c **** if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ 2122:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 2123:../../../Source/third_party/fatfs/src/ff.c **** #if _MAX_SS != 512 /* Get disk sector size (variable sector size cfg only) */ 2124:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &fs->ssize) != RES_OK) 2125:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 2126:../../../Source/third_party/fatfs/src/ff.c **** #endif 2127:../../../Source/third_party/fatfs/src/ff.c **** /* Search FAT partition on the drive. Supports only generic partitions, FDISK and SFD. */ 2128:../../../Source/third_party/fatfs/src/ff.c **** fmt = check_fs(fs, bsect = 0); /* Load sector 0 and check if it is an FAT-VBR (in SFD) */ 2129:../../../Source/third_party/fatfs/src/ff.c **** if (LD2PT(vol) && !fmt) fmt = 1; /* Force non-SFD if the volume is forced partition */ 2130:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == 1) { /* Not an FAT-VBR, the physical drive can be partitioned */ 2131:../../../Source/third_party/fatfs/src/ff.c **** /* Check the partition listed in the partition table */ 2132:../../../Source/third_party/fatfs/src/ff.c **** pi = LD2PT(vol); 2133:../../../Source/third_party/fatfs/src/ff.c **** if (pi) pi--; 2134:../../../Source/third_party/fatfs/src/ff.c **** tbl = &fs->win[MBR_Table + pi * SZ_PTE];/* Partition table */ 2135:../../../Source/third_party/fatfs/src/ff.c **** if (tbl[4]) { /* Is the partition existing? */ 2136:../../../Source/third_party/fatfs/src/ff.c **** bsect = LD_DWORD(&tbl[8]); /* Partition offset in LBA */ 2137:../../../Source/third_party/fatfs/src/ff.c **** fmt = check_fs(fs, bsect); /* Check the partition */ 2138:../../../Source/third_party/fatfs/src/ff.c **** } 2139:../../../Source/third_party/fatfs/src/ff.c **** } 2140:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == 3) return FR_DISK_ERR; 2141:../../../Source/third_party/fatfs/src/ff.c **** if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ 2142:../../../Source/third_party/fatfs/src/ff.c **** 2143:../../../Source/third_party/fatfs/src/ff.c **** /* An FAT volume is found. Following code initializes the file system object */ 2144:../../../Source/third_party/fatfs/src/ff.c **** 2145:../../../Source/third_party/fatfs/src/ff.c **** if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical s 2146:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILESYSTEM; 2147:../../../Source/third_party/fatfs/src/ff.c **** 2148:../../../Source/third_party/fatfs/src/ff.c **** fasize = LD_WORD(fs->win+BPB_FATSz16); /* Number of sectors per FAT */ 2149:../../../Source/third_party/fatfs/src/ff.c **** if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); 2150:../../../Source/third_party/fatfs/src/ff.c **** fs->fsize = fasize; 2151:../../../Source/third_party/fatfs/src/ff.c **** 2152:../../../Source/third_party/fatfs/src/ff.c **** fs->n_fats = b = fs->win[BPB_NumFATs]; /* Number of FAT copies */ 2153:../../../Source/third_party/fatfs/src/ff.c **** if (b != 1 && b != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ 2154:../../../Source/third_party/fatfs/src/ff.c **** fasize *= b; /* Number of sectors for FAT area */ 2155:../../../Source/third_party/fatfs/src/ff.c **** 2156:../../../Source/third_party/fatfs/src/ff.c **** fs->csize = b = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ 2157:../../../Source/third_party/fatfs/src/ff.c **** if (!b || (b & (b - 1))) return FR_NO_FILESYSTEM; /* (Must be power of 2) */ 2158:../../../Source/third_party/fatfs/src/ff.c **** 2159:../../../Source/third_party/fatfs/src/ff.c **** fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt); /* Number of root directory entries */ 2160:../../../Source/third_party/fatfs/src/ff.c **** if (fs->n_rootdir % (SS(fs) / SZ_DIR)) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be sector 2161:../../../Source/third_party/fatfs/src/ff.c **** 2162:../../../Source/third_party/fatfs/src/ff.c **** tsect = LD_WORD(fs->win+BPB_TotSec16); /* Number of sectors on the volume */ 2163:../../../Source/third_party/fatfs/src/ff.c **** if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); 2164:../../../Source/third_party/fatfs/src/ff.c **** 2165:../../../Source/third_party/fatfs/src/ff.c **** nrsv = LD_WORD(fs->win+BPB_RsvdSecCnt); /* Number of reserved sectors */ 2166:../../../Source/third_party/fatfs/src/ff.c **** if (!nrsv) return FR_NO_FILESYSTEM; /* (BPB_RsvdSecCnt must not be 0) */ 2167:../../../Source/third_party/fatfs/src/ff.c **** 2168:../../../Source/third_party/fatfs/src/ff.c **** /* Determine the FAT sub type */ 2169:../../../Source/third_party/fatfs/src/ff.c **** sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIR); /* RSV+FAT+DIR */ 2170:../../../Source/third_party/fatfs/src/ff.c **** if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ 2171:../../../Source/third_party/fatfs/src/ff.c **** nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ 2172:../../../Source/third_party/fatfs/src/ff.c **** if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ 2173:../../../Source/third_party/fatfs/src/ff.c **** fmt = FS_FAT12; 2174:../../../Source/third_party/fatfs/src/ff.c **** if (nclst >= MIN_FAT16) fmt = FS_FAT16; 2175:../../../Source/third_party/fatfs/src/ff.c **** if (nclst >= MIN_FAT32) fmt = FS_FAT32; 2176:../../../Source/third_party/fatfs/src/ff.c **** 2177:../../../Source/third_party/fatfs/src/ff.c **** /* Boundaries and Limits */ 2178:../../../Source/third_party/fatfs/src/ff.c **** fs->n_fatent = nclst + 2; /* Number of FAT entries */ 2179:../../../Source/third_party/fatfs/src/ff.c **** fs->volbase = bsect; /* Volume start sector */ 2180:../../../Source/third_party/fatfs/src/ff.c **** fs->fatbase = bsect + nrsv; /* FAT start sector */ 2181:../../../Source/third_party/fatfs/src/ff.c **** fs->database = bsect + sysect; /* Data start sector */ 2182:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 2183:../../../Source/third_party/fatfs/src/ff.c **** if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ 2184:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ 2185:../../../Source/third_party/fatfs/src/ff.c **** szbfat = fs->n_fatent * 4; /* (Required FAT size) */ 2186:../../../Source/third_party/fatfs/src/ff.c **** } else { 2187:../../../Source/third_party/fatfs/src/ff.c **** if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ 2188:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ 2189:../../../Source/third_party/fatfs/src/ff.c **** szbfat = (fmt == FS_FAT16) ? /* (Required FAT size) */ 2190:../../../Source/third_party/fatfs/src/ff.c **** fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); 2191:../../../Source/third_party/fatfs/src/ff.c **** } 2192:../../../Source/third_party/fatfs/src/ff.c **** if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than required) */ 2193:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILESYSTEM; 2194:../../../Source/third_party/fatfs/src/ff.c **** 2195:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2196:../../../Source/third_party/fatfs/src/ff.c **** /* Initialize cluster allocation information */ 2197:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust = 0xFFFFFFFF; 2198:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = 0; 2199:../../../Source/third_party/fatfs/src/ff.c **** 2200:../../../Source/third_party/fatfs/src/ff.c **** /* Get fsinfo if available */ 2201:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 2202:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 0; 2203:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo); 2204:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fs->drv, fs->win, fs->fsi_sector, 1) == RES_OK && 2205:../../../Source/third_party/fatfs/src/ff.c **** LD_WORD(fs->win+BS_55AA) == 0xAA55 && 2206:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 && 2207:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) { 2208:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free); 2209:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); 2210:../../../Source/third_party/fatfs/src/ff.c **** } 2211:../../../Source/third_party/fatfs/src/ff.c **** } 2212:../../../Source/third_party/fatfs/src/ff.c **** #endif 2213:../../../Source/third_party/fatfs/src/ff.c **** fs->fs_type = fmt; /* FAT sub-type */ 2214:../../../Source/third_party/fatfs/src/ff.c **** fs->id = ++Fsid; /* File system mount ID */ 2215:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = 0; /* Invalidate sector cache */ 2216:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 0; 2217:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 2218:../../../Source/third_party/fatfs/src/ff.c **** fs->cdir = 0; /* Current directory (root dir) */ 2219:../../../Source/third_party/fatfs/src/ff.c **** #endif 2220:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK /* Clear file lock semaphores */ 2221:../../../Source/third_party/fatfs/src/ff.c **** clear_lock(fs); 2222:../../../Source/third_party/fatfs/src/ff.c **** #endif 2223:../../../Source/third_party/fatfs/src/ff.c **** 2224:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 2225:../../../Source/third_party/fatfs/src/ff.c **** } 2226:../../../Source/third_party/fatfs/src/ff.c **** 2227:../../../Source/third_party/fatfs/src/ff.c **** 2228:../../../Source/third_party/fatfs/src/ff.c **** 2229:../../../Source/third_party/fatfs/src/ff.c **** 2230:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2231:../../../Source/third_party/fatfs/src/ff.c **** /* Check if the file/dir object is valid or not */ 2232:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2233:../../../Source/third_party/fatfs/src/ff.c **** 2234:../../../Source/third_party/fatfs/src/ff.c **** static 2235:../../../Source/third_party/fatfs/src/ff.c **** FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ 2236:../../../Source/third_party/fatfs/src/ff.c **** void* obj /* Pointer to the object FIL/DIR to check validity */ 2237:../../../Source/third_party/fatfs/src/ff.c **** ) 2238:../../../Source/third_party/fatfs/src/ff.c **** { 399 .loc 1 2238 0 400 .cfi_startproc 401 @ args = 0, pretend = 0, frame = 0 402 @ frame_needed = 0, uses_anonymous_args = 0 403 .LVL44: 2239:../../../Source/third_party/fatfs/src/ff.c **** FIL *fil = (FIL*)obj; /* Assuming offset of fs and id in the FIL/DIR is identical */ 2240:../../../Source/third_party/fatfs/src/ff.c **** 2241:../../../Source/third_party/fatfs/src/ff.c **** 2242:../../../Source/third_party/fatfs/src/ff.c **** if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id) 404 .loc 1 2242 0 405 0000 90B1 cbz r0, .L37 2238:../../../Source/third_party/fatfs/src/ff.c **** FIL *fil = (FIL*)obj; /* Assuming offset of fs and id in the FIL/DIR is identical */ 406 .loc 1 2238 0 discriminator 1 407 0002 08B5 push {r3, lr} 408 .cfi_def_cfa_offset 8 409 .cfi_offset 3, -8 410 .cfi_offset 14, -4 411 .loc 1 2242 0 discriminator 1 412 0004 0368 ldr r3, [r0] 413 0006 8BB1 cbz r3, .L38 414 .loc 1 2242 0 is_stmt 0 discriminator 2 415 0008 1978 ldrb r1, [r3] @ zero_extendqisi2 416 000a 89B1 cbz r1, .L39 417 .loc 1 2242 0 discriminator 3 418 000c D988 ldrh r1, [r3, #6] 419 000e 8288 ldrh r2, [r0, #4] 420 0010 9142 cmp r1, r2 421 0012 0FD1 bne .L40 2243:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_OBJECT; 2244:../../../Source/third_party/fatfs/src/ff.c **** 2245:../../../Source/third_party/fatfs/src/ff.c **** ENTER_FF(fil->fs); /* Lock file system */ 2246:../../../Source/third_party/fatfs/src/ff.c **** 2247:../../../Source/third_party/fatfs/src/ff.c **** if (disk_status(fil->fs->drv) & STA_NOINIT) 422 .loc 1 2247 0 is_stmt 1 423 0014 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 424 .LVL45: 425 0016 FFF7FEFF bl disk_status 426 .LVL46: 427 001a 00F00100 and r0, r0, #1 2248:../../../Source/third_party/fatfs/src/ff.c **** return FR_NOT_READY; 2249:../../../Source/third_party/fatfs/src/ff.c **** 2250:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 428 .loc 1 2250 0 429 001e 0028 cmp r0, #0 430 0020 14BF ite ne 431 0022 0320 movne r0, #3 432 0024 0020 moveq r0, #0 433 0026 08BD pop {r3, pc} 434 .LVL47: 435 .L37: 436 .cfi_def_cfa_offset 0 437 .cfi_restore 3 438 .cfi_restore 14 2243:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_OBJECT; 439 .loc 1 2243 0 440 0028 0920 movs r0, #9 441 .LVL48: 2251:../../../Source/third_party/fatfs/src/ff.c **** } 442 .loc 1 2251 0 443 002a 7047 bx lr 444 .LVL49: 445 .L38: 446 .cfi_def_cfa_offset 8 447 .cfi_offset 3, -8 448 .cfi_offset 14, -4 2243:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_OBJECT; 449 .loc 1 2243 0 450 002c 0920 movs r0, #9 451 .LVL50: 452 002e 08BD pop {r3, pc} 453 .LVL51: 454 .L39: 455 0030 0920 movs r0, #9 456 .LVL52: 457 0032 08BD pop {r3, pc} 458 .LVL53: 459 .L40: 460 0034 0920 movs r0, #9 461 .LVL54: 462 .loc 1 2251 0 463 0036 08BD pop {r3, pc} 464 .cfi_endproc 465 .LFE31: 467 .section .text.chk_mounted,"ax",%progbits 468 .align 2 469 .thumb 470 .thumb_func 472 chk_mounted: 473 .LFB30: 2072:../../../Source/third_party/fatfs/src/ff.c **** BYTE fmt, b, pi, *tbl; 474 .loc 1 2072 0 475 .cfi_startproc 476 @ args = 0, pretend = 0, frame = 0 477 @ frame_needed = 0, uses_anonymous_args = 0 478 .LVL55: 479 0000 F8B5 push {r3, r4, r5, r6, r7, lr} 480 .cfi_def_cfa_offset 24 481 .cfi_offset 3, -24 482 .cfi_offset 4, -20 483 .cfi_offset 5, -16 484 .cfi_offset 6, -12 485 .cfi_offset 7, -8 486 .cfi_offset 14, -4 2078:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; 487 .loc 1 2078 0 488 0002 0468 ldr r4, [r0] 489 .LVL56: 2083:../../../Source/third_party/fatfs/src/ff.c **** if (vol <= 9 && p[1] == ':') { /* Found a drive number, get and strip it */ 490 .loc 1 2083 0 491 0004 2378 ldrb r3, [r4] @ zero_extendqisi2 492 0006 303B subs r3, r3, #48 493 .LVL57: 2084:../../../Source/third_party/fatfs/src/ff.c **** p += 2; *path = p; /* Return pointer to the path name */ 494 .loc 1 2084 0 495 0008 092B cmp r3, #9 496 000a 00F28D81 bhi .L44 2084:../../../Source/third_party/fatfs/src/ff.c **** p += 2; *path = p; /* Return pointer to the path name */ 497 .loc 1 2084 0 is_stmt 0 discriminator 1 498 000e 6578 ldrb r5, [r4, #1] @ zero_extendqisi2 499 0010 3A2D cmp r5, #58 500 0012 40F08981 bne .L44 501 .LVL58: 2085:../../../Source/third_party/fatfs/src/ff.c **** } else { /* No drive number, use default drive */ 502 .loc 1 2085 0 is_stmt 1 503 0016 0234 adds r4, r4, #2 504 .LVL59: 505 0018 0460 str r4, [r0] 2095:../../../Source/third_party/fatfs/src/ff.c **** if (vol >= _VOLUMES) /* Is the drive number valid? */ 506 .loc 1 2095 0 507 001a 0020 movs r0, #0 508 .LVL60: 509 001c 0860 str r0, [r1] 2096:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_DRIVE; 510 .loc 1 2096 0 511 001e 002B cmp r3, #0 512 0020 40F05A81 bne .L62 513 .LVL61: 514 .L58: 2098:../../../Source/third_party/fatfs/src/ff.c **** if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ 515 .loc 1 2098 0 516 0024 C94B ldr r3, .L92 517 0026 1C68 ldr r4, [r3] 518 .LVL62: 2099:../../../Source/third_party/fatfs/src/ff.c **** 519 .loc 1 2099 0 520 0028 002C cmp r4, #0 521 002a 00F05781 beq .L63 522 002e 1546 mov r5, r2 2103:../../../Source/third_party/fatfs/src/ff.c **** if (fs->fs_type) { /* If the volume has been mounted */ 523 .loc 1 2103 0 524 0030 0C60 str r4, [r1] 2104:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_status(fs->drv); 525 .loc 1 2104 0 526 0032 2378 ldrb r3, [r4] @ zero_extendqisi2 527 0034 83B1 cbz r3, .L46 2105:../../../Source/third_party/fatfs/src/ff.c **** if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized (has not been changed) 528 .loc 1 2105 0 529 0036 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 530 0038 FFF7FEFF bl disk_status 531 .LVL63: 2106:../../../Source/third_party/fatfs/src/ff.c **** if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ 532 .loc 1 2106 0 533 003c 10F0010F tst r0, #1 534 0040 0AD1 bne .L46 2107:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 535 .loc 1 2107 0 536 0042 002D cmp r5, #0 537 0044 00F04C81 beq .L64 2107:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 538 .loc 1 2107 0 is_stmt 0 discriminator 1 539 0048 00F00400 and r0, r0, #4 540 .LVL64: 541 004c C0B2 uxtb r0, r0 2108:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; /* The file system object is valid */ 542 .loc 1 2108 0 is_stmt 1 discriminator 1 543 004e 0028 cmp r0, #0 544 0050 0CBF ite eq 545 0052 0020 moveq r0, #0 546 0054 0A20 movne r0, #10 547 0056 F8BD pop {r3, r4, r5, r6, r7, pc} 548 .LVL65: 549 .L46: 2116:../../../Source/third_party/fatfs/src/ff.c **** fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ 550 .loc 1 2116 0 551 0058 0020 movs r0, #0 552 005a 2070 strb r0, [r4] 2117:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_initialize(fs->drv); /* Initialize the physical drive */ 553 .loc 1 2117 0 554 005c 6070 strb r0, [r4, #1] 2118:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_NOINIT) /* Check if the initialization succeeded */ 555 .loc 1 2118 0 556 005e FFF7FEFF bl disk_initialize 557 .LVL66: 2119:../../../Source/third_party/fatfs/src/ff.c **** return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ 558 .loc 1 2119 0 559 0062 10F0010F tst r0, #1 560 0066 40F03D81 bne .L66 2121:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 561 .loc 1 2121 0 562 006a 1DB1 cbz r5, .L47 2121:../../../Source/third_party/fatfs/src/ff.c **** return FR_WRITE_PROTECTED; 563 .loc 1 2121 0 is_stmt 0 discriminator 1 564 006c 10F0040F tst r0, #4 565 0070 40F03A81 bne .L67 566 .L47: 567 .LVL67: 2128:../../../Source/third_party/fatfs/src/ff.c **** if (LD2PT(vol) && !fmt) fmt = 1; /* Force non-SFD if the volume is forced partition */ 568 .loc 1 2128 0 is_stmt 1 569 0074 2046 mov r0, r4 570 .LVL68: 571 0076 0021 movs r1, #0 572 0078 FFF7FEFF bl check_fs 573 .LVL69: 2130:../../../Source/third_party/fatfs/src/ff.c **** /* Check the partition listed in the partition table */ 574 .loc 1 2130 0 575 007c 0128 cmp r0, #1 576 007e 17D1 bne .L68 577 .LVL70: 2135:../../../Source/third_party/fatfs/src/ff.c **** bsect = LD_DWORD(&tbl[8]); /* Partition offset in LBA */ 578 .loc 1 2135 0 579 0080 94F8F631 ldrb r3, [r4, #502] @ zero_extendqisi2 580 0084 002B cmp r3, #0 581 0086 00F03181 beq .L69 2136:../../../Source/third_party/fatfs/src/ff.c **** fmt = check_fs(fs, bsect); /* Check the partition */ 582 .loc 1 2136 0 583 008a 94F8FD21 ldrb r2, [r4, #509] @ zero_extendqisi2 584 008e 94F8FC31 ldrb r3, [r4, #508] @ zero_extendqisi2 585 0092 1B04 lsls r3, r3, #16 586 0094 43EA0263 orr r3, r3, r2, lsl #24 587 0098 94F8FA51 ldrb r5, [r4, #506] @ zero_extendqisi2 588 009c 2B43 orrs r3, r3, r5 589 009e 94F8FB51 ldrb r5, [r4, #507] @ zero_extendqisi2 590 00a2 43EA0525 orr r5, r3, r5, lsl #8 591 .LVL71: 2137:../../../Source/third_party/fatfs/src/ff.c **** } 592 .loc 1 2137 0 593 00a6 2046 mov r0, r4 594 .LVL72: 595 00a8 2946 mov r1, r5 596 00aa FFF7FEFF bl check_fs 597 .LVL73: 598 00ae 00E0 b .L48 599 .LVL74: 600 .L68: 2128:../../../Source/third_party/fatfs/src/ff.c **** if (LD2PT(vol) && !fmt) fmt = 1; /* Force non-SFD if the volume is forced partition */ 601 .loc 1 2128 0 602 00b0 0025 movs r5, #0 603 .LVL75: 604 .L48: 2140:../../../Source/third_party/fatfs/src/ff.c **** if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ 605 .loc 1 2140 0 606 00b2 0328 cmp r0, #3 607 00b4 00F01C81 beq .L70 2141:../../../Source/third_party/fatfs/src/ff.c **** 608 .loc 1 2141 0 609 00b8 0028 cmp r0, #0 610 00ba 40F01B81 bne .L71 2145:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILESYSTEM; 611 .loc 1 2145 0 612 00be 94F84020 ldrb r2, [r4, #64] @ zero_extendqisi2 613 00c2 94F83F30 ldrb r3, [r4, #63] @ zero_extendqisi2 614 00c6 43EA0223 orr r3, r3, r2, lsl #8 615 00ca 1BB2 sxth r3, r3 616 00cc B3F5007F cmp r3, #512 617 00d0 40F01281 bne .L72 2148:../../../Source/third_party/fatfs/src/ff.c **** if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); 618 .loc 1 2148 0 619 00d4 94F84B00 ldrb r0, [r4, #75] @ zero_extendqisi2 620 .LVL76: 621 00d8 94F84A30 ldrb r3, [r4, #74] @ zero_extendqisi2 622 .LVL77: 2149:../../../Source/third_party/fatfs/src/ff.c **** fs->fsize = fasize; 623 .loc 1 2149 0 624 00dc 53EA0020 orrs r0, r3, r0, lsl #8 625 .LVL78: 626 00e0 0DD1 bne .L49 2149:../../../Source/third_party/fatfs/src/ff.c **** fs->fsize = fasize; 627 .loc 1 2149 0 is_stmt 0 discriminator 1 628 00e2 94F85B20 ldrb r2, [r4, #91] @ zero_extendqisi2 629 00e6 94F85A30 ldrb r3, [r4, #90] @ zero_extendqisi2 630 00ea 1B04 lsls r3, r3, #16 631 00ec 43EA0263 orr r3, r3, r2, lsl #24 632 00f0 94F85800 ldrb r0, [r4, #88] @ zero_extendqisi2 633 .LVL79: 634 00f4 0343 orrs r3, r3, r0 635 00f6 94F85900 ldrb r0, [r4, #89] @ zero_extendqisi2 636 00fa 43EA0020 orr r0, r3, r0, lsl #8 637 .LVL80: 638 .L49: 2150:../../../Source/third_party/fatfs/src/ff.c **** 639 .loc 1 2150 0 is_stmt 1 640 00fe E061 str r0, [r4, #28] 2152:../../../Source/third_party/fatfs/src/ff.c **** if (b != 1 && b != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ 641 .loc 1 2152 0 642 0100 94F84470 ldrb r7, [r4, #68] @ zero_extendqisi2 643 .LVL81: 644 0104 E770 strb r7, [r4, #3] 2153:../../../Source/third_party/fatfs/src/ff.c **** fasize *= b; /* Number of sectors for FAT area */ 645 .loc 1 2153 0 646 0106 7B1E subs r3, r7, #1 647 0108 DBB2 uxtb r3, r3 648 010a 012B cmp r3, #1 649 010c 00F2F680 bhi .L73 650 .LVL82: 2156:../../../Source/third_party/fatfs/src/ff.c **** if (!b || (b & (b - 1))) return FR_NO_FILESYSTEM; /* (Must be power of 2) */ 651 .loc 1 2156 0 652 0110 94F84130 ldrb r3, [r4, #65] @ zero_extendqisi2 653 .LVL83: 654 0114 A370 strb r3, [r4, #2] 2157:../../../Source/third_party/fatfs/src/ff.c **** 655 .loc 1 2157 0 656 0116 002B cmp r3, #0 657 0118 00F0F280 beq .L74 2157:../../../Source/third_party/fatfs/src/ff.c **** 658 .loc 1 2157 0 is_stmt 0 discriminator 2 659 011c 5A1E subs r2, r3, #1 660 011e 1A42 tst r2, r3 661 0120 40F0F080 bne .L75 2159:../../../Source/third_party/fatfs/src/ff.c **** if (fs->n_rootdir % (SS(fs) / SZ_DIR)) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be sector 662 .loc 1 2159 0 is_stmt 1 663 0124 94F84660 ldrb r6, [r4, #70] @ zero_extendqisi2 664 0128 94F84520 ldrb r2, [r4, #69] @ zero_extendqisi2 665 012c 42EA0626 orr r6, r2, r6, lsl #8 666 0130 2681 strh r6, [r4, #8] @ movhi 2160:../../../Source/third_party/fatfs/src/ff.c **** 667 .loc 1 2160 0 668 0132 16F00F0F tst r6, #15 669 0136 40F0E780 bne .L76 2162:../../../Source/third_party/fatfs/src/ff.c **** if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); 670 .loc 1 2162 0 671 013a 94F84810 ldrb r1, [r4, #72] @ zero_extendqisi2 672 013e 94F84720 ldrb r2, [r4, #71] @ zero_extendqisi2 673 .LVL84: 2163:../../../Source/third_party/fatfs/src/ff.c **** 674 .loc 1 2163 0 675 0142 52EA0122 orrs r2, r2, r1, lsl #8 676 .LVL85: 677 0146 0DD1 bne .L50 2163:../../../Source/third_party/fatfs/src/ff.c **** 678 .loc 1 2163 0 is_stmt 0 discriminator 1 679 0148 94F85710 ldrb r1, [r4, #87] @ zero_extendqisi2 680 014c 94F85620 ldrb r2, [r4, #86] @ zero_extendqisi2 681 .LVL86: 682 0150 1204 lsls r2, r2, #16 683 0152 42EA0161 orr r1, r2, r1, lsl #24 684 0156 94F85420 ldrb r2, [r4, #84] @ zero_extendqisi2 685 015a 0A43 orrs r2, r2, r1 686 015c 94F85510 ldrb r1, [r4, #85] @ zero_extendqisi2 687 0160 42EA0122 orr r2, r2, r1, lsl #8 688 .LVL87: 689 .L50: 2165:../../../Source/third_party/fatfs/src/ff.c **** if (!nrsv) return FR_NO_FILESYSTEM; /* (BPB_RsvdSecCnt must not be 0) */ 690 .loc 1 2165 0 is_stmt 1 691 0164 94F843E0 ldrb lr, [r4, #67] @ zero_extendqisi2 692 0168 94F84210 ldrb r1, [r4, #66] @ zero_extendqisi2 693 .LVL88: 2166:../../../Source/third_party/fatfs/src/ff.c **** 694 .loc 1 2166 0 695 016c 51EA0E21 orrs r1, r1, lr, lsl #8 696 .LVL89: 697 0170 00F0CC80 beq .L77 2154:../../../Source/third_party/fatfs/src/ff.c **** 698 .loc 1 2154 0 699 0174 07FB00F7 mul r7, r7, r0 700 .LVL90: 701 0178 01EB161C add ip, r1, r6, lsr #4 2169:../../../Source/third_party/fatfs/src/ff.c **** if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ 702 .loc 1 2169 0 703 017c BC44 add ip, ip, r7 704 .LVL91: 2170:../../../Source/third_party/fatfs/src/ff.c **** nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ 705 .loc 1 2170 0 706 017e 6245 cmp r2, ip 707 0180 C0F0C680 bcc .L78 2171:../../../Source/third_party/fatfs/src/ff.c **** if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ 708 .loc 1 2171 0 709 0184 CCEB0202 rsb r2, ip, r2 710 .LVL92: 711 0188 B2FBF3F3 udiv r3, r2, r3 712 .LVL93: 2172:../../../Source/third_party/fatfs/src/ff.c **** fmt = FS_FAT12; 713 .loc 1 2172 0 714 018c 002B cmp r3, #0 715 018e 00F0C180 beq .L79 716 .LVL94: 2174:../../../Source/third_party/fatfs/src/ff.c **** if (nclst >= MIN_FAT32) fmt = FS_FAT32; 717 .loc 1 2174 0 718 0192 40F6F57E movw lr, #4085 719 .LVL95: 720 0196 7345 cmp r3, lr 721 0198 94BF ite ls 722 019a 4FF0010E movls lr, #1 723 019e 4FF0020E movhi lr, #2 724 .LVL96: 2175:../../../Source/third_party/fatfs/src/ff.c **** 725 .loc 1 2175 0 726 01a2 4FF6F572 movw r2, #65525 727 01a6 9342 cmp r3, r2 728 01a8 00F2C180 bhi .L52 2178:../../../Source/third_party/fatfs/src/ff.c **** fs->volbase = bsect; /* Volume start sector */ 729 .loc 1 2178 0 730 01ac 0233 adds r3, r3, #2 731 .LVL97: 732 01ae A361 str r3, [r4, #24] 2179:../../../Source/third_party/fatfs/src/ff.c **** fs->fatbase = bsect + nrsv; /* FAT start sector */ 733 .loc 1 2179 0 734 01b0 2562 str r5, [r4, #32] 2180:../../../Source/third_party/fatfs/src/ff.c **** fs->database = bsect + sysect; /* Data start sector */ 735 .loc 1 2180 0 736 01b2 2944 add r1, r1, r5 737 01b4 6162 str r1, [r4, #36] 2181:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 738 .loc 1 2181 0 739 01b6 0CEB0502 add r2, ip, r5 740 01ba E262 str r2, [r4, #44] 2182:../../../Source/third_party/fatfs/src/ff.c **** if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ 741 .loc 1 2182 0 742 01bc BEF1030F cmp lr, #3 743 01c0 19D1 bne .L53 744 .LVL98: 745 .L59: 2183:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ 746 .loc 1 2183 0 747 01c2 002E cmp r6, #0 748 01c4 40F0A880 bne .L81 2184:../../../Source/third_party/fatfs/src/ff.c **** szbfat = fs->n_fatent * 4; /* (Required FAT size) */ 749 .loc 1 2184 0 750 01c8 94F86310 ldrb r1, [r4, #99] @ zero_extendqisi2 751 01cc 94F86220 ldrb r2, [r4, #98] @ zero_extendqisi2 752 01d0 1204 lsls r2, r2, #16 753 01d2 42EA0161 orr r1, r2, r1, lsl #24 754 01d6 94F86020 ldrb r2, [r4, #96] @ zero_extendqisi2 755 01da 0A43 orrs r2, r2, r1 756 01dc 94F86110 ldrb r1, [r4, #97] @ zero_extendqisi2 757 01e0 42EA0122 orr r2, r2, r1, lsl #8 758 01e4 A262 str r2, [r4, #40] 759 .LVL99: 2185:../../../Source/third_party/fatfs/src/ff.c **** } else { 760 .loc 1 2185 0 761 01e6 9B00 lsls r3, r3, #2 762 .LVL100: 2192:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILESYSTEM; 763 .loc 1 2192 0 764 01e8 03F2FF13 addw r3, r3, #511 765 .LVL101: 766 01ec B0EB532F cmp r0, r3, lsr #9 767 01f0 C0F09480 bcc .L82 768 01f4 BAE0 b .L89 769 .LVL102: 770 .L53: 2187:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ 771 .loc 1 2187 0 772 01f6 002E cmp r6, #0 773 01f8 00F09280 beq .L83 2188:../../../Source/third_party/fatfs/src/ff.c **** szbfat = (fmt == FS_FAT16) ? /* (Required FAT size) */ 774 .loc 1 2188 0 775 01fc 3944 add r1, r1, r7 776 01fe A162 str r1, [r4, #40] 2190:../../../Source/third_party/fatfs/src/ff.c **** } 777 .loc 1 2190 0 778 0200 BEF1020F cmp lr, #2 779 0204 0FBF iteee eq 780 0206 5B00 lsleq r3, r3, #1 781 .LVL103: 782 0208 03EB4302 addne r2, r3, r3, lsl #1 783 020c 03F00103 andne r3, r3, #1 784 0210 03EB5203 addne r3, r3, r2, lsr #1 785 0214 A4E0 b .L56 786 .LVL104: 787 .L61: 2205:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 && 788 .loc 1 2205 0 discriminator 1 789 0216 94F83322 ldrb r2, [r4, #563] @ zero_extendqisi2 790 021a 94F83232 ldrb r3, [r4, #562] @ zero_extendqisi2 791 021e 43EA0223 orr r3, r3, r2, lsl #8 2204:../../../Source/third_party/fatfs/src/ff.c **** LD_WORD(fs->win+BS_55AA) == 0xAA55 && 792 .loc 1 2204 0 discriminator 1 793 0222 1BB2 sxth r3, r3 794 0224 4A4A ldr r2, .L92+4 795 0226 9342 cmp r3, r2 796 0228 42D1 bne .L84 2206:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) { 797 .loc 1 2206 0 798 022a 94F83720 ldrb r2, [r4, #55] @ zero_extendqisi2 799 022e 94F83630 ldrb r3, [r4, #54] @ zero_extendqisi2 800 0232 1B04 lsls r3, r3, #16 801 0234 43EA0262 orr r2, r3, r2, lsl #24 802 0238 94F83430 ldrb r3, [r4, #52] @ zero_extendqisi2 803 023c 1343 orrs r3, r3, r2 804 023e 94F83520 ldrb r2, [r4, #53] @ zero_extendqisi2 805 0242 43EA0223 orr r3, r3, r2, lsl #8 2205:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 && 806 .loc 1 2205 0 807 0246 434A ldr r2, .L92+8 808 0248 9342 cmp r3, r2 809 024a 34D1 bne .L85 2207:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free); 810 .loc 1 2207 0 811 024c 94F81B22 ldrb r2, [r4, #539] @ zero_extendqisi2 812 0250 94F81A32 ldrb r3, [r4, #538] @ zero_extendqisi2 813 0254 1B04 lsls r3, r3, #16 814 0256 43EA0262 orr r2, r3, r2, lsl #24 815 025a 94F81832 ldrb r3, [r4, #536] @ zero_extendqisi2 816 025e 1343 orrs r3, r3, r2 817 0260 94F81922 ldrb r2, [r4, #537] @ zero_extendqisi2 818 0264 43EA0223 orr r3, r3, r2, lsl #8 2206:../../../Source/third_party/fatfs/src/ff.c **** LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) { 819 .loc 1 2206 0 820 0268 3B4A ldr r2, .L92+12 821 026a 9342 cmp r3, r2 822 026c 26D1 bne .L86 2208:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); 823 .loc 1 2208 0 824 026e 94F82322 ldrb r2, [r4, #547] @ zero_extendqisi2 825 0272 94F82232 ldrb r3, [r4, #546] @ zero_extendqisi2 826 0276 1B04 lsls r3, r3, #16 827 0278 43EA0262 orr r2, r3, r2, lsl #24 828 027c 94F82032 ldrb r3, [r4, #544] @ zero_extendqisi2 829 0280 1343 orrs r3, r3, r2 830 0282 94F82122 ldrb r2, [r4, #545] @ zero_extendqisi2 831 0286 43EA0223 orr r3, r3, r2, lsl #8 832 028a E360 str r3, [r4, #12] 2209:../../../Source/third_party/fatfs/src/ff.c **** } 833 .loc 1 2209 0 834 028c 94F81F22 ldrb r2, [r4, #543] @ zero_extendqisi2 835 0290 94F81E32 ldrb r3, [r4, #542] @ zero_extendqisi2 836 0294 1B04 lsls r3, r3, #16 837 0296 43EA0262 orr r2, r3, r2, lsl #24 838 029a 94F81C32 ldrb r3, [r4, #540] @ zero_extendqisi2 839 029e 1343 orrs r3, r3, r2 840 02a0 94F81D22 ldrb r2, [r4, #541] @ zero_extendqisi2 841 02a4 43EA0223 orr r3, r3, r2, lsl #8 842 02a8 2361 str r3, [r4, #16] 843 02aa 4FF0030E mov lr, #3 844 02ae 07E0 b .L57 845 .L84: 846 02b0 4FF0030E mov lr, #3 847 02b4 04E0 b .L57 848 .L85: 849 02b6 4FF0030E mov lr, #3 850 02ba 01E0 b .L57 851 .L86: 852 02bc 4FF0030E mov lr, #3 853 .LVL105: 854 .L57: 2213:../../../Source/third_party/fatfs/src/ff.c **** fs->id = ++Fsid; /* File system mount ID */ 855 .loc 1 2213 0 856 02c0 84F800E0 strb lr, [r4] 2214:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = 0; /* Invalidate sector cache */ 857 .loc 1 2214 0 858 02c4 254A ldr r2, .L92+16 859 02c6 1388 ldrh r3, [r2] 860 02c8 0133 adds r3, r3, #1 861 02ca 9BB2 uxth r3, r3 862 02cc 1380 strh r3, [r2] @ movhi 863 02ce E380 strh r3, [r4, #6] @ movhi 2215:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 0; 864 .loc 1 2215 0 865 02d0 0020 movs r0, #0 866 02d2 2063 str r0, [r4, #48] 2216:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 867 .loc 1 2216 0 868 02d4 2071 strb r0, [r4, #4] 2224:../../../Source/third_party/fatfs/src/ff.c **** } 869 .loc 1 2224 0 870 02d6 F8BD pop {r3, r4, r5, r6, r7, pc} 871 .LVL106: 872 .L62: 2097:../../../Source/third_party/fatfs/src/ff.c **** fs = FatFs[vol]; /* Get corresponding file system object */ 873 .loc 1 2097 0 874 02d8 0B20 movs r0, #11 875 02da F8BD pop {r3, r4, r5, r6, r7, pc} 876 .LVL107: 877 .L63: 2099:../../../Source/third_party/fatfs/src/ff.c **** 878 .loc 1 2099 0 879 02dc 0C20 movs r0, #12 880 02de F8BD pop {r3, r4, r5, r6, r7, pc} 881 .LVL108: 882 .L64: 2109:../../../Source/third_party/fatfs/src/ff.c **** } 883 .loc 1 2109 0 884 02e0 0020 movs r0, #0 885 .LVL109: 886 02e2 F8BD pop {r3, r4, r5, r6, r7, pc} 887 .LVL110: 888 .L66: 2120:../../../Source/third_party/fatfs/src/ff.c **** if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ 889 .loc 1 2120 0 890 02e4 0320 movs r0, #3 891 .LVL111: 892 02e6 F8BD pop {r3, r4, r5, r6, r7, pc} 893 .LVL112: 894 .L67: 2122:../../../Source/third_party/fatfs/src/ff.c **** #if _MAX_SS != 512 /* Get disk sector size (variable sector size cfg only) */ 895 .loc 1 2122 0 896 02e8 0A20 movs r0, #10 897 .LVL113: 898 02ea F8BD pop {r3, r4, r5, r6, r7, pc} 899 .LVL114: 900 .L69: 2141:../../../Source/third_party/fatfs/src/ff.c **** 901 .loc 1 2141 0 902 02ec 0D20 movs r0, #13 903 .LVL115: 904 02ee F8BD pop {r3, r4, r5, r6, r7, pc} 905 .LVL116: 906 .L70: 2140:../../../Source/third_party/fatfs/src/ff.c **** if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ 907 .loc 1 2140 0 908 02f0 0120 movs r0, #1 909 .LVL117: 910 02f2 F8BD pop {r3, r4, r5, r6, r7, pc} 911 .LVL118: 912 .L71: 2141:../../../Source/third_party/fatfs/src/ff.c **** 913 .loc 1 2141 0 914 02f4 0D20 movs r0, #13 915 .LVL119: 916 02f6 F8BD pop {r3, r4, r5, r6, r7, pc} 917 .LVL120: 918 .L72: 2146:../../../Source/third_party/fatfs/src/ff.c **** 919 .loc 1 2146 0 920 02f8 0D20 movs r0, #13 921 .LVL121: 922 02fa F8BD pop {r3, r4, r5, r6, r7, pc} 923 .LVL122: 924 .L73: 2153:../../../Source/third_party/fatfs/src/ff.c **** fasize *= b; /* Number of sectors for FAT area */ 925 .loc 1 2153 0 926 02fc 0D20 movs r0, #13 927 .LVL123: 928 02fe F8BD pop {r3, r4, r5, r6, r7, pc} 929 .LVL124: 930 .L74: 2157:../../../Source/third_party/fatfs/src/ff.c **** 931 .loc 1 2157 0 932 0300 0D20 movs r0, #13 933 .LVL125: 934 0302 F8BD pop {r3, r4, r5, r6, r7, pc} 935 .LVL126: 936 .L75: 937 0304 0D20 movs r0, #13 938 .LVL127: 939 0306 F8BD pop {r3, r4, r5, r6, r7, pc} 940 .LVL128: 941 .L76: 2160:../../../Source/third_party/fatfs/src/ff.c **** 942 .loc 1 2160 0 943 0308 0D20 movs r0, #13 944 .LVL129: 945 030a F8BD pop {r3, r4, r5, r6, r7, pc} 946 .LVL130: 947 .L77: 2166:../../../Source/third_party/fatfs/src/ff.c **** 948 .loc 1 2166 0 949 030c 0D20 movs r0, #13 950 .LVL131: 951 030e F8BD pop {r3, r4, r5, r6, r7, pc} 952 .LVL132: 953 .L78: 2170:../../../Source/third_party/fatfs/src/ff.c **** nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ 954 .loc 1 2170 0 955 0310 0D20 movs r0, #13 956 .LVL133: 957 0312 F8BD pop {r3, r4, r5, r6, r7, pc} 958 .LVL134: 959 .L79: 2172:../../../Source/third_party/fatfs/src/ff.c **** fmt = FS_FAT12; 960 .loc 1 2172 0 961 0314 0D20 movs r0, #13 962 .LVL135: 963 0316 F8BD pop {r3, r4, r5, r6, r7, pc} 964 .LVL136: 965 .L81: 2183:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ 966 .loc 1 2183 0 967 0318 0D20 movs r0, #13 968 .LVL137: 969 031a F8BD pop {r3, r4, r5, r6, r7, pc} 970 .LVL138: 971 .L82: 2193:../../../Source/third_party/fatfs/src/ff.c **** 972 .loc 1 2193 0 973 031c 0D20 movs r0, #13 974 .LVL139: 975 031e F8BD pop {r3, r4, r5, r6, r7, pc} 976 .LVL140: 977 .L83: 2187:../../../Source/third_party/fatfs/src/ff.c **** fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ 978 .loc 1 2187 0 979 0320 0D20 movs r0, #13 980 .LVL141: 981 0322 F8BD pop {r3, r4, r5, r6, r7, pc} 982 .LVL142: 983 .L87: 2193:../../../Source/third_party/fatfs/src/ff.c **** 984 .loc 1 2193 0 985 0324 0D20 movs r0, #13 986 .LVL143: 987 0326 F8BD pop {r3, r4, r5, r6, r7, pc} 988 .LVL144: 989 .L44: 2095:../../../Source/third_party/fatfs/src/ff.c **** if (vol >= _VOLUMES) /* Is the drive number valid? */ 990 .loc 1 2095 0 991 0328 0023 movs r3, #0 992 032a 0B60 str r3, [r1] 993 032c 7AE6 b .L58 994 .LVL145: 995 .L52: 2178:../../../Source/third_party/fatfs/src/ff.c **** fs->volbase = bsect; /* Volume start sector */ 996 .loc 1 2178 0 997 032e 0233 adds r3, r3, #2 998 .LVL146: 999 0330 A361 str r3, [r4, #24] 2179:../../../Source/third_party/fatfs/src/ff.c **** fs->fatbase = bsect + nrsv; /* FAT start sector */ 1000 .loc 1 2179 0 1001 0332 2562 str r5, [r4, #32] 2180:../../../Source/third_party/fatfs/src/ff.c **** fs->database = bsect + sysect; /* Data start sector */ 1002 .loc 1 2180 0 1003 0334 2944 add r1, r1, r5 1004 0336 6162 str r1, [r4, #36] 2181:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 1005 .loc 1 2181 0 1006 0338 0CEB0502 add r2, ip, r5 1007 033c E262 str r2, [r4, #44] 1008 033e 40E7 b .L59 1009 .LVL147: 1010 .L90: 2197:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = 0; 1011 .loc 1 2197 0 1012 0340 4FF0FF33 mov r3, #-1 1013 0344 2361 str r3, [r4, #16] 2198:../../../Source/third_party/fatfs/src/ff.c **** 1014 .loc 1 2198 0 1015 0346 0023 movs r3, #0 1016 0348 E360 str r3, [r4, #12] 1017 034a B9E7 b .L57 1018 .L93: 1019 .align 2 1020 .L92: 1021 034c 00000000 .word .LANCHOR0 1022 0350 55AAFFFF .word -21931 1023 0354 52526141 .word 1096897106 1024 0358 72724161 .word 1631679090 1025 035c 00000000 .word .LANCHOR1 1026 .LVL148: 1027 .L56: 2192:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILESYSTEM; 1028 .loc 1 2192 0 1029 0360 03F2FF13 addw r3, r3, #511 1030 .LVL149: 1031 0364 B0EB532F cmp r0, r3, lsr #9 1032 .LVL150: 1033 0368 DCD3 bcc .L87 1034 036a E9E7 b .L90 1035 .LVL151: 1036 .L89: 2197:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = 0; 1037 .loc 1 2197 0 1038 036c 4FF0FF33 mov r3, #-1 1039 .LVL152: 1040 0370 2361 str r3, [r4, #16] 2198:../../../Source/third_party/fatfs/src/ff.c **** 1041 .loc 1 2198 0 1042 0372 0023 movs r3, #0 1043 0374 E360 str r3, [r4, #12] 2202:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo); 1044 .loc 1 2202 0 1045 0376 6371 strb r3, [r4, #5] 2203:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fs->drv, fs->win, fs->fsi_sector, 1) == RES_OK && 1046 .loc 1 2203 0 1047 0378 94F86520 ldrb r2, [r4, #101] @ zero_extendqisi2 1048 037c 94F86430 ldrb r3, [r4, #100] @ zero_extendqisi2 1049 0380 43EA0222 orr r2, r3, r2, lsl #8 1050 0384 2A44 add r2, r2, r5 1051 0386 6261 str r2, [r4, #20] 2204:../../../Source/third_party/fatfs/src/ff.c **** LD_WORD(fs->win+BS_55AA) == 0xAA55 && 1052 .loc 1 2204 0 1053 0388 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 1054 .LVL153: 1055 038a 04F13401 add r1, r4, #52 1056 038e 0123 movs r3, #1 1057 0390 FFF7FEFF bl disk_read 1058 .LVL154: 1059 0394 0028 cmp r0, #0 1060 0396 3FF43EAF beq .L61 1061 039a 4FF0030E mov lr, #3 1062 039e 8FE7 b .L57 1063 .cfi_endproc 1064 .LFE30: 1066 .section .text.get_fileinfo,"ax",%progbits 1067 .align 2 1068 .thumb 1069 .thumb_func 1071 get_fileinfo: 1072 .LFB27: 1901:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 1073 .loc 1 1901 0 1074 .cfi_startproc 1075 @ args = 0, pretend = 0, frame = 0 1076 @ frame_needed = 0, uses_anonymous_args = 0 1077 .LVL155: 1078 0000 2DE9F843 push {r3, r4, r5, r6, r7, r8, r9, lr} 1079 .cfi_def_cfa_offset 32 1080 .cfi_offset 3, -32 1081 .cfi_offset 4, -28 1082 .cfi_offset 5, -24 1083 .cfi_offset 6, -20 1084 .cfi_offset 7, -16 1085 .cfi_offset 8, -12 1086 .cfi_offset 9, -8 1087 .cfi_offset 14, -4 1907:../../../Source/third_party/fatfs/src/ff.c **** if (dj->sect) { 1088 .loc 1 1907 0 1089 0004 01F10902 add r2, r1, #9 1090 .LVL156: 1908:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; 1091 .loc 1 1908 0 1092 0008 0369 ldr r3, [r0, #16] 1093 000a 002B cmp r3, #0 1094 000c 67D0 beq .L95 1909:../../../Source/third_party/fatfs/src/ff.c **** nt = dir[DIR_NTres]; /* NT flag */ 1095 .loc 1 1909 0 1096 000e 4469 ldr r4, [r0, #20] 1097 .LVL157: 1910:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < 8; i++) { /* Copy name body */ 1098 .loc 1 1910 0 1099 0010 94F80CC0 ldrb ip, [r4, #12] @ zero_extendqisi2 1100 .LVL158: 1912:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1101 .loc 1 1912 0 1102 0014 2378 ldrb r3, [r4] @ zero_extendqisi2 1103 .LVL159: 1913:../../../Source/third_party/fatfs/src/ff.c **** if (c == NDDE) c = (TCHAR)DDE; 1104 .loc 1 1913 0 1105 0016 202B cmp r3, #32 1106 0018 20D0 beq .L107 1107 001a 2646 mov r6, r4 1108 001c 01F11107 add r7, r1, #17 1914:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; 1109 .loc 1 1914 0 1110 0020 4FF0E508 mov r8, #229 1915:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1111 .loc 1 1915 0 1112 0024 0CF0080E and lr, ip, #8 1113 0028 5FFA8EFE uxtb lr, lr 1114 002c 03E0 b .L97 1115 .L99: 1912:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1116 .loc 1 1912 0 1117 002e 16F8013F ldrb r3, [r6, #1]! @ zero_extendqisi2 1118 .LVL160: 1913:../../../Source/third_party/fatfs/src/ff.c **** if (c == NDDE) c = (TCHAR)DDE; 1119 .loc 1 1913 0 1120 0032 202B cmp r3, #32 1121 0034 14D0 beq .L108 1122 .LVL161: 1123 .L97: 1914:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; 1124 .loc 1 1914 0 1125 0036 052B cmp r3, #5 1126 0038 0AD0 beq .L109 1915:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1127 .loc 1 1915 0 1128 003a BEF1000F cmp lr, #0 1129 003e 08D0 beq .L98 1915:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1130 .loc 1 1915 0 is_stmt 0 discriminator 1 1131 0040 A3F14105 sub r5, r3, #65 1132 0044 EDB2 uxtb r5, r5 1133 0046 192D cmp r5, #25 1134 0048 03D8 bhi .L98 1915:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1135 .loc 1 1915 0 discriminator 2 1136 004a 2033 adds r3, r3, #32 1137 .LVL162: 1138 004c DBB2 uxtb r3, r3 1139 .LVL163: 1140 004e 00E0 b .L98 1141 .L109: 1914:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_BODY) && IsUpper(c)) c += 0x20; 1142 .loc 1 1914 0 is_stmt 1 1143 0050 4346 mov r3, r8 1144 .LVL164: 1145 .L98: 1922:../../../Source/third_party/fatfs/src/ff.c **** } 1146 .loc 1 1922 0 discriminator 2 1147 0052 02F8013B strb r3, [r2], #1 1148 .LVL165: 1911:../../../Source/third_party/fatfs/src/ff.c **** c = dir[i]; 1149 .loc 1 1911 0 discriminator 2 1150 0056 BA42 cmp r2, r7 1151 0058 E9D1 bne .L99 1152 005a 02E0 b .L96 1153 .L107: 1907:../../../Source/third_party/fatfs/src/ff.c **** if (dj->sect) { 1154 .loc 1 1907 0 1155 005c 1746 mov r7, r2 1156 005e 00E0 b .L96 1157 .L108: 1922:../../../Source/third_party/fatfs/src/ff.c **** } 1158 .loc 1 1922 0 1159 0060 1746 mov r7, r2 1160 .LVL166: 1161 .L96: 1924:../../../Source/third_party/fatfs/src/ff.c **** *p++ = '.'; 1162 .loc 1 1924 0 1163 0062 237A ldrb r3, [r4, #8] @ zero_extendqisi2 1164 .LVL167: 1165 0064 202B cmp r3, #32 1166 0066 1ED0 beq .L110 1925:../../../Source/third_party/fatfs/src/ff.c **** for (i = 8; i < 11; i++) { 1167 .loc 1 1925 0 1168 0068 7E1C adds r6, r7, #1 1169 .LVL168: 1170 006a 2E23 movs r3, #46 1171 006c 3B70 strb r3, [r7] 1172 .LVL169: 1927:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1173 .loc 1 1927 0 1174 006e 237A ldrb r3, [r4, #8] @ zero_extendqisi2 1175 .LVL170: 1928:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_EXT) && IsUpper(c)) c += 0x20; 1176 .loc 1 1928 0 1177 0070 202B cmp r3, #32 1178 0072 1AD0 beq .L111 1179 0074 04F1080E add lr, r4, #8 1180 0078 3A1D adds r2, r7, #4 1929:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1181 .loc 1 1929 0 1182 007a 0CF0100C and ip, ip, #16 1183 .LVL171: 1184 007e 5FFA8CF5 uxtb r5, ip 1185 0082 03E0 b .L101 1186 .LVL172: 1187 .L103: 1927:../../../Source/third_party/fatfs/src/ff.c **** if (c == ' ') break; 1188 .loc 1 1927 0 1189 0084 1EF8013F ldrb r3, [lr, #1]! @ zero_extendqisi2 1190 .LVL173: 1928:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && (nt & NS_EXT) && IsUpper(c)) c += 0x20; 1191 .loc 1 1928 0 1192 0088 202B cmp r3, #32 1193 008a 10D0 beq .L112 1194 .LVL174: 1195 .L101: 1929:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1196 .loc 1 1929 0 1197 008c 35B1 cbz r5, .L102 1929:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 1198 .loc 1 1929 0 is_stmt 0 discriminator 1 1199 008e A3F14107 sub r7, r3, #65 1200 0092 FFB2 uxtb r7, r7 1201 0094 192F cmp r7, #25 1202 0096 9CBF itt ls 1203 0098 2033 addls r3, r3, #32 1204 .LVL175: 1205 009a DBB2 uxtbls r3, r3 1206 .LVL176: 1207 .L102: 1936:../../../Source/third_party/fatfs/src/ff.c **** } 1208 .loc 1 1936 0 is_stmt 1 discriminator 2 1209 009c 06F8013B strb r3, [r6], #1 1210 .LVL177: 1926:../../../Source/third_party/fatfs/src/ff.c **** c = dir[i]; 1211 .loc 1 1926 0 discriminator 2 1212 00a0 9642 cmp r6, r2 1213 00a2 EFD1 bne .L103 1214 00a4 04E0 b .L100 1215 .LVL178: 1216 .L110: 1217 00a6 3A46 mov r2, r7 1218 .LVL179: 1219 00a8 02E0 b .L100 1220 .LVL180: 1221 .L111: 1925:../../../Source/third_party/fatfs/src/ff.c **** for (i = 8; i < 11; i++) { 1222 .loc 1 1925 0 1223 00aa 3246 mov r2, r6 1224 00ac 00E0 b .L100 1225 .LVL181: 1226 .L112: 1936:../../../Source/third_party/fatfs/src/ff.c **** } 1227 .loc 1 1936 0 1228 00ae 3246 mov r2, r6 1229 .LVL182: 1230 .L100: 1939:../../../Source/third_party/fatfs/src/ff.c **** fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ 1231 .loc 1 1939 0 1232 00b0 E37A ldrb r3, [r4, #11] @ zero_extendqisi2 1233 00b2 0B72 strb r3, [r1, #8] 1940:../../../Source/third_party/fatfs/src/ff.c **** fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ 1234 .loc 1 1940 0 1235 00b4 E67F ldrb r6, [r4, #31] @ zero_extendqisi2 1236 00b6 A57F ldrb r5, [r4, #30] @ zero_extendqisi2 1237 00b8 2B04 lsls r3, r5, #16 1238 00ba 43EA0665 orr r5, r3, r6, lsl #24 1239 00be 237F ldrb r3, [r4, #28] @ zero_extendqisi2 1240 00c0 2B43 orrs r3, r3, r5 1241 00c2 657F ldrb r5, [r4, #29] @ zero_extendqisi2 1242 00c4 43EA0523 orr r3, r3, r5, lsl #8 1243 00c8 0B60 str r3, [r1] 1941:../../../Source/third_party/fatfs/src/ff.c **** fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ 1244 .loc 1 1941 0 1245 00ca 657E ldrb r5, [r4, #25] @ zero_extendqisi2 1246 00cc 237E ldrb r3, [r4, #24] @ zero_extendqisi2 1247 00ce 43EA0523 orr r3, r3, r5, lsl #8 1248 00d2 8B80 strh r3, [r1, #4] @ movhi 1942:../../../Source/third_party/fatfs/src/ff.c **** } 1249 .loc 1 1942 0 1250 00d4 E57D ldrb r5, [r4, #23] @ zero_extendqisi2 1251 00d6 A37D ldrb r3, [r4, #22] @ zero_extendqisi2 1252 00d8 43EA0523 orr r3, r3, r5, lsl #8 1253 00dc CB80 strh r3, [r1, #6] @ movhi 1254 .LVL183: 1255 .L95: 1944:../../../Source/third_party/fatfs/src/ff.c **** 1256 .loc 1 1944 0 1257 00de 0023 movs r3, #0 1258 00e0 1370 strb r3, [r2] 1947:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *tp = fno->lfname; 1259 .loc 1 1947 0 1260 00e2 8F69 ldr r7, [r1, #24] 1261 00e4 67B3 cbz r7, .L94 1947:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *tp = fno->lfname; 1262 .loc 1 1947 0 is_stmt 0 discriminator 1 1263 00e6 CB69 ldr r3, [r1, #28] 1264 00e8 53B3 cbz r3, .L94 1265 .LVL184: 1266 .LBB2: 1952:../../../Source/third_party/fatfs/src/ff.c **** lfn = dj->lfn; 1267 .loc 1 1952 0 is_stmt 1 1268 00ea 0369 ldr r3, [r0, #16] 1269 00ec EBB1 cbz r3, .L113 1952:../../../Source/third_party/fatfs/src/ff.c **** lfn = dj->lfn; 1270 .loc 1 1952 0 is_stmt 0 discriminator 1 1271 00ee 028C ldrh r2, [r0, #32] 1272 .LVL185: 1273 00f0 4FF6FF73 movw r3, #65535 1274 00f4 9A42 cmp r2, r3 1275 00f6 1AD0 beq .L114 1953:../../../Source/third_party/fatfs/src/ff.c **** while ((w = *lfn++) != 0) { /* Get an LFN char */ 1276 .loc 1 1953 0 is_stmt 1 1277 00f8 D0F81C80 ldr r8, [r0, #28] 1278 .LVL186: 1954:../../../Source/third_party/fatfs/src/ff.c **** #if !_LFN_UNICODE 1279 .loc 1 1954 0 1280 00fc B8F80000 ldrh r0, [r8] 1281 .LVL187: 1282 0100 B8B1 cbz r0, .L115 1283 0102 0D46 mov r5, r1 1284 0104 7E1E subs r6, r7, #1 1285 0106 0024 movs r4, #0 1956:../../../Source/third_party/fatfs/src/ff.c **** if (!w) { i = 0; break; } /* Could not convert, no LFN */ 1286 .loc 1 1956 0 1287 0108 A146 mov r9, r4 1288 .LVL188: 1289 .L106: 1290 010a 4946 mov r1, r9 1291 010c FFF7FEFF bl ff_convert 1292 .LVL189: 1957:../../../Source/third_party/fatfs/src/ff.c **** if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ 1293 .loc 1 1957 0 1294 0110 88B1 cbz r0, .L116 1961:../../../Source/third_party/fatfs/src/ff.c **** tp[i++] = (TCHAR)w; 1295 .loc 1 1961 0 1296 0112 EB69 ldr r3, [r5, #28] 1297 0114 013B subs r3, r3, #1 1298 0116 A342 cmp r3, r4 1299 0118 0FD9 bls .L117 1962:../../../Source/third_party/fatfs/src/ff.c **** } 1300 .loc 1 1962 0 1301 011a 0134 adds r4, r4, #1 1302 .LVL190: 1303 011c 06F8010F strb r0, [r6, #1]! 1304 .LVL191: 1954:../../../Source/third_party/fatfs/src/ff.c **** #if !_LFN_UNICODE 1305 .loc 1 1954 0 1306 0120 38F81400 ldrh r0, [r8, r4, lsl #1] 1307 .LVL192: 1308 0124 0028 cmp r0, #0 1309 0126 F0D1 bne .L106 1310 0128 08E0 b .L105 1311 .LVL193: 1312 .L113: 1951:../../../Source/third_party/fatfs/src/ff.c **** if (dj->sect && dj->lfn_idx != 0xFFFF) {/* Get LFN if available */ 1313 .loc 1 1951 0 1314 012a 0024 movs r4, #0 1315 012c 06E0 b .L105 1316 .LVL194: 1317 .L114: 1318 012e 0024 movs r4, #0 1319 0130 04E0 b .L105 1320 .LVL195: 1321 .L115: 1322 0132 0024 movs r4, #0 1323 0134 02E0 b .L105 1324 .LVL196: 1325 .L116: 1957:../../../Source/third_party/fatfs/src/ff.c **** if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ 1326 .loc 1 1957 0 1327 0136 0024 movs r4, #0 1328 .LVL197: 1329 0138 00E0 b .L105 1330 .LVL198: 1331 .L117: 1961:../../../Source/third_party/fatfs/src/ff.c **** tp[i++] = (TCHAR)w; 1332 .loc 1 1961 0 1333 013a 0024 movs r4, #0 1334 .LVL199: 1335 .L105: 1965:../../../Source/third_party/fatfs/src/ff.c **** } 1336 .loc 1 1965 0 1337 013c 0023 movs r3, #0 1338 013e 3B55 strb r3, [r7, r4] 1339 .LVL200: 1340 .L94: 1341 0140 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 1342 .LBE2: 1343 .cfi_endproc 1344 .LFE27: 1346 .section .text.sync_fs,"ax",%progbits 1347 .align 2 1348 .thumb 1349 .thumb_func 1351 sync_fs: 1352 .LFB6: 787:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 1353 .loc 1 787 0 1354 .cfi_startproc 1355 @ args = 0, pretend = 0, frame = 0 1356 @ frame_needed = 0, uses_anonymous_args = 0 1357 .LVL201: 1358 0000 10B5 push {r4, lr} 1359 .cfi_def_cfa_offset 8 1360 .cfi_offset 4, -8 1361 .cfi_offset 14, -4 1362 0002 0446 mov r4, r0 791:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1363 .loc 1 791 0 1364 0004 FFF7FEFF bl sync_window 1365 .LVL202: 792:../../../Source/third_party/fatfs/src/ff.c **** /* Update FSInfo sector if needed */ 1366 .loc 1 792 0 1367 0008 0346 mov r3, r0 1368 000a 0028 cmp r0, #0 1369 000c 54D1 bne .L121 794:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = 0; 1370 .loc 1 794 0 1371 000e 2378 ldrb r3, [r4] @ zero_extendqisi2 1372 0010 032B cmp r3, #3 1373 0012 49D1 bne .L122 794:../../../Source/third_party/fatfs/src/ff.c **** fs->winsect = 0; 1374 .loc 1 794 0 is_stmt 0 discriminator 1 1375 0014 6379 ldrb r3, [r4, #5] @ zero_extendqisi2 1376 0016 002B cmp r3, #0 1377 0018 46D0 beq .L122 795:../../../Source/third_party/fatfs/src/ff.c **** /* Create FSInfo structure */ 1378 .loc 1 795 0 is_stmt 1 1379 001a 0023 movs r3, #0 1380 001c 2363 str r3, [r4, #48] 797:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(fs->win+BS_55AA, 0xAA55); 1381 .loc 1 797 0 1382 001e 04F13401 add r1, r4, #52 1383 .LVL203: 1384 0022 04F50D70 add r0, r4, #564 1385 .LVL204: 1386 .LBB5: 1387 .LBB6: 557:../../../Source/third_party/fatfs/src/ff.c **** 1388 .loc 1 557 0 1389 0026 0B46 mov r3, r1 560:../../../Source/third_party/fatfs/src/ff.c **** } 1390 .loc 1 560 0 1391 0028 0022 movs r2, #0 1392 .LVL205: 1393 .L123: 1394 002a 03F8012B strb r2, [r3], #1 1395 .LVL206: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 1396 .loc 1 559 0 1397 002e 8342 cmp r3, r0 1398 0030 FBD1 bne .L123 1399 .LBE6: 1400 .LBE5: 798:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); 1401 .loc 1 798 0 1402 0032 5523 movs r3, #85 1403 .LVL207: 1404 0034 84F83232 strb r3, [r4, #562] 1405 0038 AA23 movs r3, #170 1406 003a 84F83332 strb r3, [r4, #563] 799:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); 1407 .loc 1 799 0 1408 003e 5223 movs r3, #82 1409 0040 84F83430 strb r3, [r4, #52] 1410 0044 84F83530 strb r3, [r4, #53] 1411 0048 6123 movs r3, #97 1412 004a 84F83630 strb r3, [r4, #54] 1413 004e 4122 movs r2, #65 1414 0050 84F83720 strb r2, [r4, #55] 800:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); 1415 .loc 1 800 0 1416 0054 7220 movs r0, #114 1417 0056 84F81802 strb r0, [r4, #536] 1418 005a 84F81902 strb r0, [r4, #537] 1419 005e 84F81A22 strb r2, [r4, #538] 1420 0062 84F81B32 strb r3, [r4, #539] 801:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); 1421 .loc 1 801 0 1422 0066 2369 ldr r3, [r4, #16] 1423 0068 84F81C32 strb r3, [r4, #540] 1424 006c C3F30722 ubfx r2, r3, #8, #8 1425 0070 84F81D22 strb r2, [r4, #541] 1426 0074 1A0C lsrs r2, r3, #16 1427 0076 84F81E22 strb r2, [r4, #542] 1428 007a 1B0E lsrs r3, r3, #24 1429 007c 84F81F32 strb r3, [r4, #543] 802:../../../Source/third_party/fatfs/src/ff.c **** /* Write it into the FSInfo sector */ 1430 .loc 1 802 0 1431 0080 E368 ldr r3, [r4, #12] 1432 0082 84F82032 strb r3, [r4, #544] 1433 0086 C3F30722 ubfx r2, r3, #8, #8 1434 008a 84F82122 strb r2, [r4, #545] 1435 008e 1A0C lsrs r2, r3, #16 1436 0090 84F82222 strb r2, [r4, #546] 1437 0094 1B0E lsrs r3, r3, #24 1438 0096 84F82332 strb r3, [r4, #547] 804:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 0; 1439 .loc 1 804 0 1440 009a 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 1441 009c 6269 ldr r2, [r4, #20] 1442 009e 0123 movs r3, #1 1443 00a0 FFF7FEFF bl disk_write 1444 .LVL208: 805:../../../Source/third_party/fatfs/src/ff.c **** } 1445 .loc 1 805 0 1446 00a4 0023 movs r3, #0 1447 00a6 6371 strb r3, [r4, #5] 1448 .LVL209: 1449 .L122: 808:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DISK_ERR; 1450 .loc 1 808 0 1451 00a8 6078 ldrb r0, [r4, #1] @ zero_extendqisi2 1452 00aa 0021 movs r1, #0 1453 00ac 0A46 mov r2, r1 1454 00ae FFF7FEFF bl disk_ioctl 1455 .LVL210: 791:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 1456 .loc 1 791 0 1457 00b2 031C adds r3, r0, #0 1458 00b4 18BF it ne 1459 00b6 0123 movne r3, #1 1460 .L121: 1461 .LVL211: 813:../../../Source/third_party/fatfs/src/ff.c **** #endif 1462 .loc 1 813 0 1463 00b8 1846 mov r0, r3 1464 00ba 10BD pop {r4, pc} 1465 .cfi_endproc 1466 .LFE6: 1468 .section .text.clust2sect,"ax",%progbits 1469 .align 2 1470 .global clust2sect 1471 .thumb 1472 .thumb_func 1474 clust2sect: 1475 .LFB7: 828:../../../Source/third_party/fatfs/src/ff.c **** clst -= 2; 1476 .loc 1 828 0 1477 .cfi_startproc 1478 @ args = 0, pretend = 0, frame = 0 1479 @ frame_needed = 0, uses_anonymous_args = 0 1480 @ link register save eliminated. 1481 .LVL212: 829:../../../Source/third_party/fatfs/src/ff.c **** if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ 1482 .loc 1 829 0 1483 0000 0239 subs r1, r1, #2 1484 .LVL213: 830:../../../Source/third_party/fatfs/src/ff.c **** return clst * fs->csize + fs->database; 1485 .loc 1 830 0 1486 0002 8369 ldr r3, [r0, #24] 1487 0004 023B subs r3, r3, #2 1488 0006 9942 cmp r1, r3 831:../../../Source/third_party/fatfs/src/ff.c **** } 1489 .loc 1 831 0 1490 0008 3DBF ittte cc 1491 000a 8278 ldrbcc r2, [r0, #2] @ zero_extendqisi2 1492 000c C36A ldrcc r3, [r0, #44] 1493 000e 02FB0130 mlacc r0, r2, r1, r3 1494 .LVL214: 830:../../../Source/third_party/fatfs/src/ff.c **** return clst * fs->csize + fs->database; 1495 .loc 1 830 0 1496 0012 0020 movcs r0, #0 832:../../../Source/third_party/fatfs/src/ff.c **** 1497 .loc 1 832 0 1498 0014 7047 bx lr 1499 .cfi_endproc 1500 .LFE7: 1502 0016 00BF .section .text.get_fat,"ax",%progbits 1503 .align 2 1504 .global get_fat 1505 .thumb 1506 .thumb_func 1508 get_fat: 1509 .LFB8: 846:../../../Source/third_party/fatfs/src/ff.c **** UINT wc, bc; 1510 .loc 1 846 0 1511 .cfi_startproc 1512 @ args = 0, pretend = 0, frame = 0 1513 @ frame_needed = 0, uses_anonymous_args = 0 1514 .LVL215: 851:../../../Source/third_party/fatfs/src/ff.c **** return 1; 1515 .loc 1 851 0 1516 0000 0129 cmp r1, #1 1517 0002 5FD9 bls .L135 846:../../../Source/third_party/fatfs/src/ff.c **** UINT wc, bc; 1518 .loc 1 846 0 discriminator 1 1519 0004 F8B5 push {r3, r4, r5, r6, r7, lr} 1520 .cfi_def_cfa_offset 24 1521 .cfi_offset 3, -24 1522 .cfi_offset 4, -20 1523 .cfi_offset 5, -16 1524 .cfi_offset 6, -12 1525 .cfi_offset 7, -8 1526 .cfi_offset 14, -4 851:../../../Source/third_party/fatfs/src/ff.c **** return 1; 1527 .loc 1 851 0 discriminator 1 1528 0006 8369 ldr r3, [r0, #24] 1529 0008 9942 cmp r1, r3 1530 000a 5DD2 bcs .L136 1531 000c 0C46 mov r4, r1 1532 000e 0646 mov r6, r0 854:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT12 : 1533 .loc 1 854 0 1534 0010 0378 ldrb r3, [r0] @ zero_extendqisi2 1535 0012 022B cmp r3, #2 1536 0014 28D0 beq .L131 1537 0016 032B cmp r3, #3 1538 0018 38D0 beq .L132 1539 001a 012B cmp r3, #1 1540 001c 56D1 bne .L142 1541 .LVL216: 856:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; 1542 .loc 1 856 0 1543 001e 01EB5107 add r7, r1, r1, lsr #1 1544 .LVL217: 857:../../../Source/third_party/fatfs/src/ff.c **** wc = fs->win[bc % SS(fs)]; bc++; 1545 .loc 1 857 0 1546 0022 416A ldr r1, [r0, #36] 1547 .LVL218: 1548 0024 01EB5721 add r1, r1, r7, lsr #9 1549 0028 FFF7FEFF bl move_window 1550 .LVL219: 1551 002c 0028 cmp r0, #0 1552 002e 50D1 bne .L138 858:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; 1553 .loc 1 858 0 1554 0030 C7F30803 ubfx r3, r7, #0, #9 1555 0034 3344 add r3, r3, r6 1556 0036 93F83450 ldrb r5, [r3, #52] @ zero_extendqisi2 1557 .LVL220: 1558 003a 0137 adds r7, r7, #1 1559 .LVL221: 859:../../../Source/third_party/fatfs/src/ff.c **** wc |= fs->win[bc % SS(fs)] << 8; 1560 .loc 1 859 0 1561 003c 716A ldr r1, [r6, #36] 1562 003e 3046 mov r0, r6 1563 0040 01EB5721 add r1, r1, r7, lsr #9 1564 0044 FFF7FEFF bl move_window 1565 .LVL222: 1566 0048 0028 cmp r0, #0 1567 004a 45D1 bne .L139 860:../../../Source/third_party/fatfs/src/ff.c **** return (clst & 1) ? (wc >> 4) : (wc & 0xFFF); 1568 .loc 1 860 0 1569 004c C7F30807 ubfx r7, r7, #0, #9 1570 .LVL223: 1571 0050 F119 adds r1, r6, r7 1572 0052 91F83400 ldrb r0, [r1, #52] @ zero_extendqisi2 1573 0056 45EA0020 orr r0, r5, r0, lsl #8 1574 .LVL224: 861:../../../Source/third_party/fatfs/src/ff.c **** 1575 .loc 1 861 0 1576 005a 14F0010F tst r4, #1 1577 005e 14BF ite ne 1578 0060 0009 lsrne r0, r0, #4 1579 .LVL225: 1580 0062 C0F30B00 ubfxeq r0, r0, #0, #12 1581 0066 F8BD pop {r3, r4, r5, r6, r7, pc} 1582 .LVL226: 1583 .L131: 864:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 2 % SS(fs)]; 1584 .loc 1 864 0 1585 0068 416A ldr r1, [r0, #36] 1586 .LVL227: 1587 006a 01EB1421 add r1, r1, r4, lsr #8 1588 006e FFF7FEFF bl move_window 1589 .LVL228: 1590 0072 A0BB cbnz r0, .L140 865:../../../Source/third_party/fatfs/src/ff.c **** return LD_WORD(p); 1591 .loc 1 865 0 1592 0074 6100 lsls r1, r4, #1 1593 0076 01F4FF71 and r1, r1, #510 1594 .LVL229: 866:../../../Source/third_party/fatfs/src/ff.c **** 1595 .loc 1 866 0 1596 007a 7318 adds r3, r6, r1 1597 007c 93F83430 ldrb r3, [r3, #52] @ zero_extendqisi2 1598 0080 3144 add r1, r1, r6 1599 .LVL230: 1600 0082 91F83500 ldrb r0, [r1, #53] @ zero_extendqisi2 1601 0086 43EA0020 orr r0, r3, r0, lsl #8 1602 008a F8BD pop {r3, r4, r5, r6, r7, pc} 1603 .LVL231: 1604 .L132: 869:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 4 % SS(fs)]; 1605 .loc 1 869 0 1606 008c 416A ldr r1, [r0, #36] 1607 .LVL232: 1608 008e 01EBD411 add r1, r1, r4, lsr #7 1609 0092 FFF7FEFF bl move_window 1610 .LVL233: 1611 0096 28BB cbnz r0, .L141 870:../../../Source/third_party/fatfs/src/ff.c **** return LD_DWORD(p) & 0x0FFFFFFF; 1612 .loc 1 870 0 1613 0098 A100 lsls r1, r4, #2 1614 009a 01F4FE71 and r1, r1, #508 1615 009e 7218 adds r2, r6, r1 1616 .LVL234: 871:../../../Source/third_party/fatfs/src/ff.c **** } 1617 .loc 1 871 0 1618 00a0 92F83600 ldrb r0, [r2, #54] @ zero_extendqisi2 1619 00a4 92F83730 ldrb r3, [r2, #55] @ zero_extendqisi2 1620 00a8 1B06 lsls r3, r3, #24 1621 00aa 43EA0043 orr r3, r3, r0, lsl #16 1622 00ae 92F83500 ldrb r0, [r2, #53] @ zero_extendqisi2 1623 00b2 43EA0020 orr r0, r3, r0, lsl #8 1624 00b6 3144 add r1, r1, r6 1625 00b8 91F83430 ldrb r3, [r1, #52] @ zero_extendqisi2 1626 00bc 1843 orrs r0, r0, r3 1627 00be 20F07040 bic r0, r0, #-268435456 1628 00c2 F8BD pop {r3, r4, r5, r6, r7, pc} 1629 .LVL235: 1630 .L135: 1631 .cfi_def_cfa_offset 0 1632 .cfi_restore 3 1633 .cfi_restore 4 1634 .cfi_restore 5 1635 .cfi_restore 6 1636 .cfi_restore 7 1637 .cfi_restore 14 852:../../../Source/third_party/fatfs/src/ff.c **** 1638 .loc 1 852 0 1639 00c4 0120 movs r0, #1 1640 .LVL236: 875:../../../Source/third_party/fatfs/src/ff.c **** 1641 .loc 1 875 0 1642 00c6 7047 bx lr 1643 .LVL237: 1644 .L136: 1645 .cfi_def_cfa_offset 24 1646 .cfi_offset 3, -24 1647 .cfi_offset 4, -20 1648 .cfi_offset 5, -16 1649 .cfi_offset 6, -12 1650 .cfi_offset 7, -8 1651 .cfi_offset 14, -4 852:../../../Source/third_party/fatfs/src/ff.c **** 1652 .loc 1 852 0 1653 00c8 0120 movs r0, #1 1654 .LVL238: 1655 00ca F8BD pop {r3, r4, r5, r6, r7, pc} 1656 .LVL239: 1657 .L142: 874:../../../Source/third_party/fatfs/src/ff.c **** } 1658 .loc 1 874 0 1659 00cc 4FF0FF30 mov r0, #-1 1660 .LVL240: 1661 00d0 F8BD pop {r3, r4, r5, r6, r7, pc} 1662 .LVL241: 1663 .L138: 1664 00d2 4FF0FF30 mov r0, #-1 1665 00d6 F8BD pop {r3, r4, r5, r6, r7, pc} 1666 .LVL242: 1667 .L139: 1668 00d8 4FF0FF30 mov r0, #-1 1669 00dc F8BD pop {r3, r4, r5, r6, r7, pc} 1670 .LVL243: 1671 .L140: 1672 00de 4FF0FF30 mov r0, #-1 1673 00e2 F8BD pop {r3, r4, r5, r6, r7, pc} 1674 .LVL244: 1675 .L141: 1676 00e4 4FF0FF30 mov r0, #-1 875:../../../Source/third_party/fatfs/src/ff.c **** 1677 .loc 1 875 0 1678 00e8 F8BD pop {r3, r4, r5, r6, r7, pc} 1679 .cfi_endproc 1680 .LFE8: 1682 00ea 00BF .section .text.dir_sdi,"ax",%progbits 1683 .align 2 1684 .thumb 1685 .thumb_func 1687 dir_sdi: 1688 .LFB12: 1092:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst; 1689 .loc 1 1092 0 1690 .cfi_startproc 1691 @ args = 0, pretend = 0, frame = 0 1692 @ frame_needed = 0, uses_anonymous_args = 0 1693 .LVL245: 1694 0000 70B5 push {r4, r5, r6, lr} 1695 .cfi_def_cfa_offset 16 1696 .cfi_offset 4, -16 1697 .cfi_offset 5, -12 1698 .cfi_offset 6, -8 1699 .cfi_offset 14, -4 1700 0002 0546 mov r5, r0 1701 0004 0C46 mov r4, r1 1097:../../../Source/third_party/fatfs/src/ff.c **** clst = dj->sclust; 1702 .loc 1 1097 0 1703 0006 E980 strh r1, [r5, #6] @ movhi 1098:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1 || clst >= dj->fs->n_fatent) /* Check start cluster range */ 1704 .loc 1 1098 0 1705 0008 8168 ldr r1, [r0, #8] 1706 .LVL246: 1099:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1707 .loc 1 1099 0 1708 000a 0129 cmp r1, #1 1709 000c 38D0 beq .L151 1099:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1710 .loc 1 1099 0 is_stmt 0 discriminator 1 1711 000e 0368 ldr r3, [r0] 1712 0010 9A69 ldr r2, [r3, #24] 1713 0012 9142 cmp r1, r2 1714 0014 36D2 bcs .L152 1101:../../../Source/third_party/fatfs/src/ff.c **** clst = dj->fs->dirbase; 1715 .loc 1 1101 0 is_stmt 1 1716 0016 71B9 cbnz r1, .L146 1101:../../../Source/third_party/fatfs/src/ff.c **** clst = dj->fs->dirbase; 1717 .loc 1 1101 0 is_stmt 0 discriminator 1 1718 0018 1A78 ldrb r2, [r3] @ zero_extendqisi2 1719 001a 032A cmp r2, #3 1720 001c 01D1 bne .L147 1102:../../../Source/third_party/fatfs/src/ff.c **** 1721 .loc 1 1102 0 is_stmt 1 1722 001e 996A ldr r1, [r3, #40] 1723 .LVL247: 1104:../../../Source/third_party/fatfs/src/ff.c **** dj->clust = clst; 1724 .loc 1 1104 0 1725 0020 49B9 cbnz r1, .L146 1726 .L147: 1727 .LVL248: 1105:../../../Source/third_party/fatfs/src/ff.c **** if (idx >= dj->fs->n_rootdir) /* Index is out of range */ 1728 .loc 1 1105 0 1729 0022 0022 movs r2, #0 1730 0024 EA60 str r2, [r5, #12] 1106:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1731 .loc 1 1106 0 1732 0026 1A89 ldrh r2, [r3, #8] 1733 0028 A242 cmp r2, r4 1734 002a 2DD9 bls .L153 1108:../../../Source/third_party/fatfs/src/ff.c **** } 1735 .loc 1 1108 0 1736 002c 9B6A ldr r3, [r3, #40] 1737 002e 03EB1413 add r3, r3, r4, lsr #4 1738 0032 2B61 str r3, [r5, #16] 1739 0034 1BE0 b .L148 1740 .LVL249: 1741 .L146: 1111:../../../Source/third_party/fatfs/src/ff.c **** while (idx >= ic) { /* Follow cluster chain */ 1742 .loc 1 1111 0 1743 0036 9E78 ldrb r6, [r3, #2] @ zero_extendqisi2 1744 0038 3601 lsls r6, r6, #4 1745 .LVL250: 1112:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(dj->fs, clst); /* Get next cluster */ 1746 .loc 1 1112 0 1747 003a B442 cmp r4, r6 1748 003c 10D3 bcc .L149 1749 .LVL251: 1750 .L157: 1113:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ 1751 .loc 1 1113 0 1752 003e 2868 ldr r0, [r5] 1753 0040 FFF7FEFF bl get_fat 1754 .LVL252: 1755 0044 0146 mov r1, r0 1756 .LVL253: 1114:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= dj->fs->n_fatent) /* Reached to end of table or int error */ 1757 .loc 1 1114 0 1758 0046 B0F1FF3F cmp r0, #-1 1759 004a 1FD0 beq .L154 1115:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1760 .loc 1 1115 0 1761 004c 0128 cmp r0, #1 1762 004e 1FD9 bls .L155 1115:../../../Source/third_party/fatfs/src/ff.c **** return FR_INT_ERR; 1763 .loc 1 1115 0 is_stmt 0 discriminator 1 1764 0050 2B68 ldr r3, [r5] 1765 0052 9B69 ldr r3, [r3, #24] 1766 0054 9842 cmp r0, r3 1767 0056 1DD2 bcs .L156 1117:../../../Source/third_party/fatfs/src/ff.c **** } 1768 .loc 1 1117 0 is_stmt 1 1769 0058 A41B subs r4, r4, r6 1770 .LVL254: 1771 005a A4B2 uxth r4, r4 1772 .LVL255: 1112:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(dj->fs, clst); /* Get next cluster */ 1773 .loc 1 1112 0 1774 005c A642 cmp r6, r4 1775 005e EED9 bls .L157 1776 .LVL256: 1777 .L149: 1119:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = clust2sect(dj->fs, clst) + idx / (SS(dj->fs) / SZ_DIR); /* Sector# */ 1778 .loc 1 1119 0 1779 0060 E960 str r1, [r5, #12] 1120:../../../Source/third_party/fatfs/src/ff.c **** } 1780 .loc 1 1120 0 1781 0062 2868 ldr r0, [r5] 1782 0064 FFF7FEFF bl clust2sect 1783 .LVL257: 1784 0068 00EB1410 add r0, r0, r4, lsr #4 1785 006c 2861 str r0, [r5, #16] 1786 .LVL258: 1787 .L148: 1123:../../../Source/third_party/fatfs/src/ff.c **** 1788 .loc 1 1123 0 1789 006e 04F00F04 and r4, r4, #15 1790 .LVL259: 1791 0072 2B68 ldr r3, [r5] 1792 0074 03EB4414 add r4, r3, r4, lsl #5 1793 0078 3434 adds r4, r4, #52 1794 007a 6C61 str r4, [r5, #20] 1125:../../../Source/third_party/fatfs/src/ff.c **** } 1795 .loc 1 1125 0 1796 007c 0020 movs r0, #0 1797 007e 70BD pop {r4, r5, r6, pc} 1798 .LVL260: 1799 .L151: 1100:../../../Source/third_party/fatfs/src/ff.c **** if (!clst && dj->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ 1800 .loc 1 1100 0 1801 0080 0220 movs r0, #2 1802 .LVL261: 1803 0082 70BD pop {r4, r5, r6, pc} 1804 .LVL262: 1805 .L152: 1806 0084 0220 movs r0, #2 1807 .LVL263: 1808 0086 70BD pop {r4, r5, r6, pc} 1809 .LVL264: 1810 .L153: 1107:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = dj->fs->dirbase + idx / (SS(dj->fs) / SZ_DIR); /* Sector# */ 1811 .loc 1 1107 0 1812 0088 0220 movs r0, #2 1813 .LVL265: 1814 008a 70BD pop {r4, r5, r6, pc} 1815 .LVL266: 1816 .L154: 1114:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2 || clst >= dj->fs->n_fatent) /* Reached to end of table or int error */ 1817 .loc 1 1114 0 1818 008c 0120 movs r0, #1 1819 .LVL267: 1820 008e 70BD pop {r4, r5, r6, pc} 1821 .LVL268: 1822 .L155: 1116:../../../Source/third_party/fatfs/src/ff.c **** idx -= ic; 1823 .loc 1 1116 0 1824 0090 0220 movs r0, #2 1825 .LVL269: 1826 0092 70BD pop {r4, r5, r6, pc} 1827 .LVL270: 1828 .L156: 1829 0094 0220 movs r0, #2 1830 .LVL271: 1126:../../../Source/third_party/fatfs/src/ff.c **** 1831 .loc 1 1126 0 1832 0096 70BD pop {r4, r5, r6, pc} 1833 .cfi_endproc 1834 .LFE12: 1836 .section .text.put_fat,"ax",%progbits 1837 .align 2 1838 .global put_fat 1839 .thumb 1840 .thumb_func 1842 put_fat: 1843 .LFB9: 890:../../../Source/third_party/fatfs/src/ff.c **** UINT bc; 1844 .loc 1 890 0 1845 .cfi_startproc 1846 @ args = 0, pretend = 0, frame = 0 1847 @ frame_needed = 0, uses_anonymous_args = 0 1848 .LVL272: 1849 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 1850 .cfi_def_cfa_offset 24 1851 .cfi_offset 4, -24 1852 .cfi_offset 5, -20 1853 .cfi_offset 6, -16 1854 .cfi_offset 7, -12 1855 .cfi_offset 8, -8 1856 .cfi_offset 14, -4 1857 0004 0C46 mov r4, r1 896:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 1858 .loc 1 896 0 1859 0006 0129 cmp r1, #1 1860 0008 7ED9 bls .L170 1861 000a 0546 mov r5, r0 1862 000c 1746 mov r7, r2 896:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 1863 .loc 1 896 0 is_stmt 0 discriminator 1 1864 000e 8369 ldr r3, [r0, #24] 1865 0010 9942 cmp r1, r3 1866 0012 7BD2 bcs .L171 900:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT12 : 1867 .loc 1 900 0 is_stmt 1 1868 0014 0378 ldrb r3, [r0] @ zero_extendqisi2 1869 0016 022B cmp r3, #2 1870 0018 3DD0 beq .L163 1871 001a 032B cmp r3, #3 1872 001c 4DD0 beq .L164 1873 001e 012B cmp r3, #1 1874 0020 6AD1 bne .L175 1875 .LVL273: 902:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (bc / SS(fs))); 1876 .loc 1 902 0 1877 0022 01EB5108 add r8, r1, r1, lsr #1 1878 .LVL274: 903:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1879 .loc 1 903 0 1880 0026 416A ldr r1, [r0, #36] 1881 .LVL275: 1882 0028 01EB5821 add r1, r1, r8, lsr #9 1883 002c FFF7FEFF bl move_window 1884 .LVL276: 904:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[bc % SS(fs)]; 1885 .loc 1 904 0 1886 0030 0646 mov r6, r0 1887 0032 0028 cmp r0, #0 1888 0034 65D1 bne .L162 905:../../../Source/third_party/fatfs/src/ff.c **** *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; 1889 .loc 1 905 0 1890 0036 C8F30803 ubfx r3, r8, #0, #9 1891 .LVL277: 906:../../../Source/third_party/fatfs/src/ff.c **** bc++; 1892 .loc 1 906 0 1893 003a 14F0010F tst r4, #1 1894 003e 16D0 beq .L166 906:../../../Source/third_party/fatfs/src/ff.c **** bc++; 1895 .loc 1 906 0 is_stmt 0 discriminator 1 1896 0040 2B44 add r3, r3, r5 1897 .LVL278: 1898 0042 93F83420 ldrb r2, [r3, #52] @ zero_extendqisi2 1899 0046 02F00F02 and r2, r2, #15 1900 004a F9B2 uxtb r1, r7 1901 004c 42EA0112 orr r2, r2, r1, lsl #4 1902 0050 83F83420 strb r2, [r3, #52] 907:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 1; 1903 .loc 1 907 0 is_stmt 1 discriminator 1 1904 0054 08F10108 add r8, r8, #1 1905 .LVL279: 908:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (bc / SS(fs))); 1906 .loc 1 908 0 discriminator 1 1907 0058 0123 movs r3, #1 1908 005a 2B71 strb r3, [r5, #4] 909:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1909 .loc 1 909 0 discriminator 1 1910 005c 696A ldr r1, [r5, #36] 1911 005e 2846 mov r0, r5 1912 .LVL280: 1913 0060 01EB5821 add r1, r1, r8, lsr #9 1914 0064 FFF7FEFF bl move_window 1915 .LVL281: 910:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[bc % SS(fs)]; 1916 .loc 1 910 0 discriminator 1 1917 0068 0028 cmp r0, #0 1918 006a 47D1 bne .L173 1919 006c 50E0 b .L176 1920 .LVL282: 1921 .L166: 906:../../../Source/third_party/fatfs/src/ff.c **** bc++; 1922 .loc 1 906 0 discriminator 2 1923 006e 2B44 add r3, r3, r5 1924 .LVL283: 1925 0070 83F83470 strb r7, [r3, #52] 907:../../../Source/third_party/fatfs/src/ff.c **** fs->wflag = 1; 1926 .loc 1 907 0 discriminator 2 1927 0074 08F10108 add r8, r8, #1 1928 .LVL284: 908:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, fs->fatbase + (bc / SS(fs))); 1929 .loc 1 908 0 discriminator 2 1930 0078 0123 movs r3, #1 1931 007a 2B71 strb r3, [r5, #4] 909:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1932 .loc 1 909 0 discriminator 2 1933 007c 696A ldr r1, [r5, #36] 1934 007e 2846 mov r0, r5 1935 .LVL285: 1936 0080 01EB5821 add r1, r1, r8, lsr #9 1937 0084 FFF7FEFF bl move_window 1938 .LVL286: 910:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[bc % SS(fs)]; 1939 .loc 1 910 0 discriminator 2 1940 0088 D0BB cbnz r0, .L174 1941 008a 46E0 b .L177 1942 .LVL287: 1943 .L169: 912:../../../Source/third_party/fatfs/src/ff.c **** break; 1944 .loc 1 912 0 discriminator 4 1945 008c 05EB0803 add r3, r5, r8 1946 0090 83F83470 strb r7, [r3, #52] 913:../../../Source/third_party/fatfs/src/ff.c **** 1947 .loc 1 913 0 discriminator 4 1948 0094 35E0 b .L162 1949 .LVL288: 1950 .L163: 916:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1951 .loc 1 916 0 1952 0096 416A ldr r1, [r0, #36] 1953 .LVL289: 1954 0098 01EB1421 add r1, r1, r4, lsr #8 1955 009c FFF7FEFF bl move_window 1956 .LVL290: 917:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 2 % SS(fs)]; 1957 .loc 1 917 0 1958 00a0 0646 mov r6, r0 1959 00a2 70BB cbnz r0, .L162 918:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(p, (WORD)val); 1960 .loc 1 918 0 1961 00a4 6400 lsls r4, r4, #1 1962 .LVL291: 1963 00a6 04F4FF74 and r4, r4, #510 1964 .LVL292: 919:../../../Source/third_party/fatfs/src/ff.c **** break; 1965 .loc 1 919 0 1966 00aa 2B19 adds r3, r5, r4 1967 00ac 83F83470 strb r7, [r3, #52] 1968 00b0 C7F30727 ubfx r7, r7, #8, #8 1969 .LVL293: 1970 00b4 83F83570 strb r7, [r3, #53] 920:../../../Source/third_party/fatfs/src/ff.c **** 1971 .loc 1 920 0 1972 00b8 23E0 b .L162 1973 .LVL294: 1974 .L164: 923:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 1975 .loc 1 923 0 1976 00ba 416A ldr r1, [r0, #36] 1977 .LVL295: 1978 00bc 01EBD411 add r1, r1, r4, lsr #7 1979 00c0 FFF7FEFF bl move_window 1980 .LVL296: 924:../../../Source/third_party/fatfs/src/ff.c **** p = &fs->win[clst * 4 % SS(fs)]; 1981 .loc 1 924 0 1982 00c4 0646 mov r6, r0 1983 00c6 E0B9 cbnz r0, .L162 925:../../../Source/third_party/fatfs/src/ff.c **** val |= LD_DWORD(p) & 0xF0000000; 1984 .loc 1 925 0 1985 00c8 A400 lsls r4, r4, #2 1986 .LVL297: 1987 00ca 04F4FE74 and r4, r4, #508 1988 00ce 2A19 adds r2, r5, r4 1989 .LVL298: 926:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(p, val); 1990 .loc 1 926 0 1991 00d0 92F83730 ldrb r3, [r2, #55] @ zero_extendqisi2 1992 00d4 1B06 lsls r3, r3, #24 1993 00d6 2C44 add r4, r4, r5 1994 00d8 03F07043 and r3, r3, #-268435456 1995 00dc 1F43 orrs r7, r7, r3 1996 .LVL299: 927:../../../Source/third_party/fatfs/src/ff.c **** break; 1997 .loc 1 927 0 1998 00de 84F83470 strb r7, [r4, #52] 1999 00e2 C7F30723 ubfx r3, r7, #8, #8 2000 00e6 82F83530 strb r3, [r2, #53] 2001 00ea 3B0C lsrs r3, r7, #16 2002 00ec 82F83630 strb r3, [r2, #54] 2003 00f0 3F0E lsrs r7, r7, #24 2004 .LVL300: 2005 00f2 82F83770 strb r7, [r2, #55] 2006 .LVL301: 928:../../../Source/third_party/fatfs/src/ff.c **** 2007 .loc 1 928 0 2008 00f6 04E0 b .L162 2009 .LVL302: 2010 .L175: 931:../../../Source/third_party/fatfs/src/ff.c **** } 2011 .loc 1 931 0 2012 00f8 0226 movs r6, #2 2013 00fa 02E0 b .L162 2014 .LVL303: 2015 .L173: 909:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2016 .loc 1 909 0 2017 00fc 0646 mov r6, r0 2018 00fe 00E0 b .L162 2019 .L174: 2020 0100 0646 mov r6, r0 2021 .LVL304: 2022 .L162: 933:../../../Source/third_party/fatfs/src/ff.c **** } 2023 .loc 1 933 0 2024 0102 0123 movs r3, #1 2025 0104 2B71 strb r3, [r5, #4] 2026 0106 14E0 b .L178 2027 .LVL305: 2028 .L170: 897:../../../Source/third_party/fatfs/src/ff.c **** 2029 .loc 1 897 0 2030 0108 0226 movs r6, #2 2031 010a 12E0 b .L178 2032 .L171: 2033 010c 0226 movs r6, #2 2034 .LVL306: 2035 010e 10E0 b .L178 2036 .LVL307: 2037 .L176: 911:../../../Source/third_party/fatfs/src/ff.c **** *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); 2038 .loc 1 911 0 2039 0110 C8F30808 ubfx r8, r8, #0, #9 2040 .LVL308: 912:../../../Source/third_party/fatfs/src/ff.c **** break; 2041 .loc 1 912 0 2042 0114 C7F30717 ubfx r7, r7, #4, #8 2043 .LVL309: 2044 0118 B8E7 b .L169 2045 .LVL310: 2046 .L177: 911:../../../Source/third_party/fatfs/src/ff.c **** *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); 2047 .loc 1 911 0 2048 011a C8F30808 ubfx r8, r8, #0, #9 2049 .LVL311: 912:../../../Source/third_party/fatfs/src/ff.c **** break; 2050 .loc 1 912 0 2051 011e 05EB0803 add r3, r5, r8 2052 0122 93F83430 ldrb r3, [r3, #52] @ zero_extendqisi2 2053 0126 23F00F03 bic r3, r3, #15 2054 012a C7F30327 ubfx r7, r7, #8, #4 2055 .LVL312: 2056 012e 1F43 orrs r7, r7, r3 2057 0130 ACE7 b .L169 2058 .LVL313: 2059 .L178: 937:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 2060 .loc 1 937 0 2061 0132 3046 mov r0, r6 2062 0134 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2063 .cfi_endproc 2064 .LFE9: 2066 .section .text.create_chain,"ax",%progbits 2067 .align 2 2068 .thumb 2069 .thumb_func 2071 create_chain: 2072 .LFB11: 1005:../../../Source/third_party/fatfs/src/ff.c **** DWORD cs, ncl, scl; 2073 .loc 1 1005 0 2074 .cfi_startproc 2075 @ args = 0, pretend = 0, frame = 0 2076 @ frame_needed = 0, uses_anonymous_args = 0 2077 .LVL314: 2078 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 2079 .cfi_def_cfa_offset 24 2080 .cfi_offset 4, -24 2081 .cfi_offset 5, -20 2082 .cfi_offset 6, -16 2083 .cfi_offset 7, -12 2084 .cfi_offset 8, -8 2085 .cfi_offset 14, -4 2086 0004 0546 mov r5, r0 1010:../../../Source/third_party/fatfs/src/ff.c **** scl = fs->last_clust; /* Get suggested start point */ 2087 .loc 1 1010 0 2088 0006 8846 mov r8, r1 2089 0008 31B9 cbnz r1, .L181 1011:../../../Source/third_party/fatfs/src/ff.c **** if (!scl || scl >= fs->n_fatent) scl = 1; 2090 .loc 1 1011 0 2091 000a C668 ldr r6, [r0, #12] 2092 .LVL315: 1012:../../../Source/third_party/fatfs/src/ff.c **** } 2093 .loc 1 1012 0 2094 000c 6EB1 cbz r6, .L189 1012:../../../Source/third_party/fatfs/src/ff.c **** } 2095 .loc 1 1012 0 is_stmt 0 discriminator 2 2096 000e 8369 ldr r3, [r0, #24] 2097 0010 9E42 cmp r6, r3 2098 0012 28BF it cs 2099 0014 0126 movcs r6, #1 2100 .LVL316: 2101 0016 09E0 b .L182 2102 .LVL317: 2103 .L181: 1015:../../../Source/third_party/fatfs/src/ff.c **** if (cs < 2) return 1; /* It is an invalid cluster */ 2104 .loc 1 1015 0 is_stmt 1 2105 0018 FFF7FEFF bl get_fat 2106 .LVL318: 1016:../../../Source/third_party/fatfs/src/ff.c **** if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ 2107 .loc 1 1016 0 2108 001c 0128 cmp r0, #1 2109 001e 41D9 bls .L190 1017:../../../Source/third_party/fatfs/src/ff.c **** scl = clst; 2110 .loc 1 1017 0 2111 0020 AB69 ldr r3, [r5, #24] 2112 0022 9842 cmp r0, r3 2113 0024 4FD3 bcc .L183 1018:../../../Source/third_party/fatfs/src/ff.c **** } 2114 .loc 1 1018 0 2115 0026 4646 mov r6, r8 2116 0028 00E0 b .L182 2117 .LVL319: 2118 .L189: 1012:../../../Source/third_party/fatfs/src/ff.c **** } 2119 .loc 1 1012 0 2120 002a 0126 movs r6, #1 2121 .LVL320: 2122 .L182: 1021:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 2123 .loc 1 1021 0 2124 002c 3446 mov r4, r6 1025:../../../Source/third_party/fatfs/src/ff.c **** if (ncl > scl) return 0; /* No free cluster */ 2125 .loc 1 1025 0 2126 002e 0227 movs r7, #2 2127 .LVL321: 2128 .L186: 1023:../../../Source/third_party/fatfs/src/ff.c **** if (ncl >= fs->n_fatent) { /* Wrap around */ 2129 .loc 1 1023 0 2130 0030 0134 adds r4, r4, #1 2131 .LVL322: 1024:../../../Source/third_party/fatfs/src/ff.c **** ncl = 2; 2132 .loc 1 1024 0 2133 0032 AB69 ldr r3, [r5, #24] 2134 0034 9C42 cmp r4, r3 2135 0036 02D3 bcc .L184 2136 .LVL323: 1026:../../../Source/third_party/fatfs/src/ff.c **** } 2137 .loc 1 1026 0 2138 0038 012E cmp r6, #1 2139 003a 36D9 bls .L192 1025:../../../Source/third_party/fatfs/src/ff.c **** if (ncl > scl) return 0; /* No free cluster */ 2140 .loc 1 1025 0 2141 003c 3C46 mov r4, r7 2142 .LVL324: 2143 .L184: 1028:../../../Source/third_party/fatfs/src/ff.c **** if (cs == 0) break; /* Found a free cluster */ 2144 .loc 1 1028 0 2145 003e 2846 mov r0, r5 2146 0040 2146 mov r1, r4 2147 0042 FFF7FEFF bl get_fat 2148 .LVL325: 1029:../../../Source/third_party/fatfs/src/ff.c **** if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ 2149 .loc 1 1029 0 2150 0046 38B1 cbz r0, .L185 1030:../../../Source/third_party/fatfs/src/ff.c **** return cs; 2151 .loc 1 1030 0 2152 0048 B0F1FF3F cmp r0, #-1 2153 004c 30D0 beq .L193 1030:../../../Source/third_party/fatfs/src/ff.c **** return cs; 2154 .loc 1 1030 0 is_stmt 0 discriminator 1 2155 004e 0128 cmp r0, #1 2156 0050 32D0 beq .L194 1032:../../../Source/third_party/fatfs/src/ff.c **** } 2157 .loc 1 1032 0 is_stmt 1 2158 0052 B442 cmp r4, r6 2159 0054 ECD1 bne .L186 2160 0056 32E0 b .L195 2161 .L185: 2162 0058 2646 mov r6, r4 2163 .LVL326: 1035:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && clst != 0) { 2164 .loc 1 1035 0 2165 005a 2846 mov r0, r5 2166 .LVL327: 2167 005c 2146 mov r1, r4 2168 005e 6FF07042 mvn r2, #-268435456 2169 0062 FFF7FEFF bl put_fat 2170 .LVL328: 1036:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ 2171 .loc 1 1036 0 2172 0066 0346 mov r3, r0 2173 0068 A8B9 cbnz r0, .L187 1036:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ 2174 .loc 1 1036 0 is_stmt 0 discriminator 1 2175 006a B8F1000F cmp r8, #0 2176 006e 06D0 beq .L188 1037:../../../Source/third_party/fatfs/src/ff.c **** } 2177 .loc 1 1037 0 is_stmt 1 2178 0070 2846 mov r0, r5 2179 .LVL329: 2180 0072 4146 mov r1, r8 2181 0074 2246 mov r2, r4 2182 0076 FFF7FEFF bl put_fat 2183 .LVL330: 1039:../../../Source/third_party/fatfs/src/ff.c **** fs->last_clust = ncl; /* Update FSINFO */ 2184 .loc 1 1039 0 2185 007a 0346 mov r3, r0 2186 007c 58B9 cbnz r0, .L187 2187 .L188: 2188 .LVL331: 1040:../../../Source/third_party/fatfs/src/ff.c **** if (fs->free_clust != 0xFFFFFFFF) { 2189 .loc 1 1040 0 2190 007e EE60 str r6, [r5, #12] 1041:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust--; 2191 .loc 1 1041 0 2192 0080 2B69 ldr r3, [r5, #16] 2193 0082 B3F1FF3F cmp r3, #-1 2194 0086 1DD0 beq .L196 1042:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 1; 2195 .loc 1 1042 0 2196 0088 013B subs r3, r3, #1 2197 008a 2B61 str r3, [r5, #16] 1043:../../../Source/third_party/fatfs/src/ff.c **** } 2198 .loc 1 1043 0 2199 008c 0123 movs r3, #1 2200 008e 6B71 strb r3, [r5, #5] 2201 0090 2046 mov r0, r4 2202 0092 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2203 .LVL332: 2204 .L187: 1046:../../../Source/third_party/fatfs/src/ff.c **** } 2205 .loc 1 1046 0 2206 0096 012B cmp r3, #1 2207 0098 0CBF ite eq 2208 009a 4FF0FF30 moveq r0, #-1 2209 009e 0120 movne r0, #1 2210 00a0 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2211 .LVL333: 2212 .L190: 1016:../../../Source/third_party/fatfs/src/ff.c **** if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ 2213 .loc 1 1016 0 2214 00a4 0120 movs r0, #1 2215 .LVL334: 2216 00a6 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2217 .LVL335: 2218 .L192: 1026:../../../Source/third_party/fatfs/src/ff.c **** } 2219 .loc 1 1026 0 2220 00aa 0020 movs r0, #0 2221 00ac BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2222 .LVL336: 2223 .L193: 1028:../../../Source/third_party/fatfs/src/ff.c **** if (cs == 0) break; /* Found a free cluster */ 2224 .loc 1 1028 0 2225 00b0 4FF0FF30 mov r0, #-1 2226 .LVL337: 2227 00b4 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2228 .LVL338: 2229 .L194: 2230 00b8 0120 movs r0, #1 2231 .LVL339: 2232 00ba BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2233 .LVL340: 2234 .L195: 1032:../../../Source/third_party/fatfs/src/ff.c **** } 2235 .loc 1 1032 0 2236 00be 0020 movs r0, #0 2237 .LVL341: 2238 00c0 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2239 .LVL342: 2240 .L196: 2241 00c4 2046 mov r0, r4 2242 .LVL343: 2243 .L183: 1050:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 2244 .loc 1 1050 0 2245 00c6 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 2246 .cfi_endproc 2247 .LFE11: 2249 00ca 00BF .section .text.dir_next,"ax",%progbits 2250 .align 2 2251 .thumb 2252 .thumb_func 2254 dir_next: 2255 .LFB13: 1140:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst; 2256 .loc 1 1140 0 2257 .cfi_startproc 2258 @ args = 0, pretend = 0, frame = 0 2259 @ frame_needed = 0, uses_anonymous_args = 0 2260 .LVL344: 2261 0000 2DE9F843 push {r3, r4, r5, r6, r7, r8, r9, lr} 2262 .cfi_def_cfa_offset 32 2263 .cfi_offset 3, -32 2264 .cfi_offset 4, -28 2265 .cfi_offset 5, -24 2266 .cfi_offset 6, -20 2267 .cfi_offset 7, -16 2268 .cfi_offset 8, -12 2269 .cfi_offset 9, -8 2270 .cfi_offset 14, -4 1146:../../../Source/third_party/fatfs/src/ff.c **** if (!i || !dj->sect) /* Report EOT when index has reached 65535 */ 2271 .loc 1 1146 0 2272 0004 C488 ldrh r4, [r0, #6] 2273 0006 0134 adds r4, r4, #1 2274 0008 A4B2 uxth r4, r4 2275 .LVL345: 1147:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; 2276 .loc 1 1147 0 2277 000a 002C cmp r4, #0 2278 000c 6CD0 beq .L207 1147:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; 2279 .loc 1 1147 0 is_stmt 0 discriminator 1 2280 000e 0369 ldr r3, [r0, #16] 2281 0010 002B cmp r3, #0 2282 0012 6CD0 beq .L208 2283 0014 0E46 mov r6, r1 2284 0016 0546 mov r5, r0 1150:../../../Source/third_party/fatfs/src/ff.c **** dj->sect++; /* Next sector */ 2285 .loc 1 1150 0 is_stmt 1 2286 0018 14F00F07 ands r7, r4, #15 2287 001c 5BD1 bne .L201 1151:../../../Source/third_party/fatfs/src/ff.c **** 2288 .loc 1 1151 0 2289 001e 0133 adds r3, r3, #1 2290 0020 0361 str r3, [r0, #16] 1153:../../../Source/third_party/fatfs/src/ff.c **** if (i >= dj->fs->n_rootdir) /* Report EOT when end of table */ 2291 .loc 1 1153 0 2292 0022 C168 ldr r1, [r0, #12] 2293 .LVL346: 2294 0024 21B9 cbnz r1, .L202 1154:../../../Source/third_party/fatfs/src/ff.c **** return FR_NO_FILE; 2295 .loc 1 1154 0 2296 0026 0368 ldr r3, [r0] 2297 0028 1B89 ldrh r3, [r3, #8] 2298 002a A342 cmp r3, r4 2299 002c 62D9 bls .L209 2300 002e 52E0 b .L201 2301 .L202: 1158:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(dj->fs, dj->clust); /* Get next cluster */ 2302 .loc 1 1158 0 2303 0030 0068 ldr r0, [r0] 2304 .LVL347: 2305 0032 8378 ldrb r3, [r0, #2] @ zero_extendqisi2 2306 0034 013B subs r3, r3, #1 2307 0036 13EA1413 ands r3, r3, r4, lsr #4 2308 003a 4CD1 bne .L201 1159:../../../Source/third_party/fatfs/src/ff.c **** if (clst <= 1) return FR_INT_ERR; 2309 .loc 1 1159 0 2310 003c FFF7FEFF bl get_fat 2311 .LVL348: 2312 0040 8046 mov r8, r0 2313 .LVL349: 1160:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 2314 .loc 1 1160 0 2315 0042 0128 cmp r0, #1 2316 0044 59D9 bls .L210 1161:../../../Source/third_party/fatfs/src/ff.c **** if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */ 2317 .loc 1 1161 0 2318 0046 B0F1FF3F cmp r0, #-1 2319 004a 59D0 beq .L211 1162:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2320 .loc 1 1162 0 2321 004c 2868 ldr r0, [r5] 2322 .LVL350: 2323 004e 8369 ldr r3, [r0, #24] 2324 0050 9845 cmp r8, r3 2325 0052 39D3 bcc .L203 2326 .LBB10: 1165:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */ 2327 .loc 1 1165 0 2328 0054 002E cmp r6, #0 2329 0056 56D0 beq .L212 1166:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) return FR_DENIED; /* No free cluster */ 2330 .loc 1 1166 0 2331 0058 E968 ldr r1, [r5, #12] 2332 005a FFF7FEFF bl create_chain 2333 .LVL351: 1167:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) return FR_INT_ERR; 2334 .loc 1 1167 0 2335 005e 8046 mov r8, r0 2336 0060 0028 cmp r0, #0 2337 0062 53D0 beq .L213 1168:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 2338 .loc 1 1168 0 2339 0064 0128 cmp r0, #1 2340 0066 54D0 beq .L214 1169:../../../Source/third_party/fatfs/src/ff.c **** /* Clean-up stretched table */ 2341 .loc 1 1169 0 2342 0068 B0F1FF3F cmp r0, #-1 2343 006c 54D0 beq .L215 1171:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */ 2344 .loc 1 1171 0 2345 006e 2868 ldr r0, [r5] 2346 .LVL352: 2347 0070 FFF7FEFF bl sync_window 2348 .LVL353: 2349 0074 0028 cmp r0, #0 2350 0076 52D1 bne .L216 1172:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect = clust2sect(dj->fs, clst); /* Cluster start sector */ 2351 .loc 1 1172 0 2352 0078 2B68 ldr r3, [r5] 2353 007a 03F13402 add r2, r3, #52 2354 .LVL354: 2355 007e 03F50D73 add r3, r3, #564 2356 .LBB11: 2357 .LBB12: 560:../../../Source/third_party/fatfs/src/ff.c **** } 2358 .loc 1 560 0 2359 0082 0021 movs r1, #0 2360 .LVL355: 2361 .L204: 2362 0084 02F8011B strb r1, [r2], #1 2363 .LVL356: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 2364 .loc 1 559 0 2365 0088 9A42 cmp r2, r3 2366 008a FBD1 bne .L204 2367 .LBE12: 2368 .LBE11: 1173:../../../Source/third_party/fatfs/src/ff.c **** for (c = 0; c < dj->fs->csize; c++) { /* Fill the new cluster with 0 */ 2369 .loc 1 1173 0 2370 008c 2E68 ldr r6, [r5] 2371 .LVL357: 2372 008e 3046 mov r0, r6 2373 0090 4146 mov r1, r8 2374 0092 FFF7FEFF bl clust2sect 2375 .LVL358: 2376 0096 3063 str r0, [r6, #48] 2377 .LVL359: 1174:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 2378 .loc 1 1174 0 2379 0098 0026 movs r6, #0 1175:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(dj->fs)) return FR_DISK_ERR; 2380 .loc 1 1175 0 2381 009a 4FF00109 mov r9, #1 1174:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 2382 .loc 1 1174 0 2383 009e 0BE0 b .L205 2384 .LVL360: 2385 .L206: 1175:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(dj->fs)) return FR_DISK_ERR; 2386 .loc 1 1175 0 2387 00a0 83F80490 strb r9, [r3, #4] 1176:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect++; 2388 .loc 1 1176 0 2389 00a4 2868 ldr r0, [r5] 2390 00a6 FFF7FEFF bl sync_window 2391 .LVL361: 2392 00aa 0136 adds r6, r6, #1 2393 .LVL362: 2394 00ac 0028 cmp r0, #0 2395 00ae 39D1 bne .L217 1177:../../../Source/third_party/fatfs/src/ff.c **** } 2396 .loc 1 1177 0 discriminator 2 2397 00b0 2A68 ldr r2, [r5] 2398 00b2 136B ldr r3, [r2, #48] 2399 00b4 0133 adds r3, r3, #1 2400 00b6 1363 str r3, [r2, #48] 2401 .LVL363: 2402 .L205: 2403 00b8 F1B2 uxtb r1, r6 2404 .LVL364: 1174:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 2405 .loc 1 1174 0 discriminator 1 2406 00ba 2B68 ldr r3, [r5] 2407 00bc 9A78 ldrb r2, [r3, #2] @ zero_extendqisi2 2408 00be 8A42 cmp r2, r1 2409 00c0 EED8 bhi .L206 1179:../../../Source/third_party/fatfs/src/ff.c **** #else 2410 .loc 1 1179 0 2411 00c2 1A6B ldr r2, [r3, #48] 2412 00c4 521A subs r2, r2, r1 2413 00c6 1A63 str r2, [r3, #48] 2414 .LVL365: 2415 .L203: 2416 .LBE10: 1184:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = clust2sect(dj->fs, clst); 2417 .loc 1 1184 0 2418 00c8 C5F80C80 str r8, [r5, #12] 1185:../../../Source/third_party/fatfs/src/ff.c **** } 2419 .loc 1 1185 0 2420 00cc 2868 ldr r0, [r5] 2421 00ce 4146 mov r1, r8 2422 00d0 FFF7FEFF bl clust2sect 2423 .LVL366: 2424 00d4 2861 str r0, [r5, #16] 2425 .LVL367: 2426 .L201: 1190:../../../Source/third_party/fatfs/src/ff.c **** dj->dir = dj->fs->win + (i % (SS(dj->fs) / SZ_DIR)) * SZ_DIR; 2427 .loc 1 1190 0 2428 00d6 EC80 strh r4, [r5, #6] @ movhi 1191:../../../Source/third_party/fatfs/src/ff.c **** 2429 .loc 1 1191 0 2430 00d8 2B68 ldr r3, [r5] 2431 00da 03EB4713 add r3, r3, r7, lsl #5 2432 00de 3433 adds r3, r3, #52 2433 00e0 6B61 str r3, [r5, #20] 1193:../../../Source/third_party/fatfs/src/ff.c **** } 2434 .loc 1 1193 0 2435 00e2 0020 movs r0, #0 2436 00e4 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2437 .LVL368: 2438 .L207: 1148:../../../Source/third_party/fatfs/src/ff.c **** 2439 .loc 1 1148 0 2440 00e8 0420 movs r0, #4 2441 .LVL369: 2442 00ea BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2443 .LVL370: 2444 .L208: 2445 00ee 0420 movs r0, #4 2446 .LVL371: 2447 00f0 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2448 .LVL372: 2449 .L209: 1155:../../../Source/third_party/fatfs/src/ff.c **** } 2450 .loc 1 1155 0 2451 00f4 0420 movs r0, #4 2452 .LVL373: 2453 00f6 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2454 .LVL374: 2455 .L210: 1160:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 2456 .loc 1 1160 0 2457 00fa 0220 movs r0, #2 2458 .LVL375: 2459 00fc BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2460 .LVL376: 2461 .L211: 1161:../../../Source/third_party/fatfs/src/ff.c **** if (clst >= dj->fs->n_fatent) { /* When it reached end of dynamic table */ 2462 .loc 1 1161 0 2463 0100 0120 movs r0, #1 2464 .LVL377: 2465 0102 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2466 .LVL378: 2467 .L212: 2468 .LBB13: 1165:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(dj->fs, dj->clust); /* Stretch cluster chain */ 2469 .loc 1 1165 0 2470 0106 0420 movs r0, #4 2471 0108 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2472 .LVL379: 2473 .L213: 1167:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) return FR_INT_ERR; 2474 .loc 1 1167 0 2475 010c 0720 movs r0, #7 2476 .LVL380: 2477 010e BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2478 .LVL381: 2479 .L214: 1168:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) return FR_DISK_ERR; 2480 .loc 1 1168 0 2481 0112 0220 movs r0, #2 2482 .LVL382: 2483 0114 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2484 .LVL383: 2485 .L215: 1169:../../../Source/third_party/fatfs/src/ff.c **** /* Clean-up stretched table */ 2486 .loc 1 1169 0 2487 0118 0120 movs r0, #1 2488 .LVL384: 2489 011a BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2490 .LVL385: 2491 .L216: 1171:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->fs->win, 0, SS(dj->fs)); /* Clear window buffer */ 2492 .loc 1 1171 0 2493 011e 0120 movs r0, #1 2494 0120 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2495 .LVL386: 2496 .L217: 1176:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->winsect++; 2497 .loc 1 1176 0 2498 0124 0120 movs r0, #1 2499 .LBE13: 1194:../../../Source/third_party/fatfs/src/ff.c **** 2500 .loc 1 1194 0 2501 0126 BDE8F883 pop {r3, r4, r5, r6, r7, r8, r9, pc} 2502 .cfi_endproc 2503 .LFE13: 2505 012a 00BF .section .text.dir_find,"ax",%progbits 2506 .align 2 2507 .thumb 2508 .thumb_func 2510 dir_find: 2511 .LFB22: 1448:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2512 .loc 1 1448 0 2513 .cfi_startproc 2514 @ args = 0, pretend = 0, frame = 16 2515 @ frame_needed = 0, uses_anonymous_args = 0 2516 .LVL387: 2517 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 2518 .cfi_def_cfa_offset 36 2519 .cfi_offset 4, -36 2520 .cfi_offset 5, -32 2521 .cfi_offset 6, -28 2522 .cfi_offset 7, -24 2523 .cfi_offset 8, -20 2524 .cfi_offset 9, -16 2525 .cfi_offset 10, -12 2526 .cfi_offset 11, -8 2527 .cfi_offset 14, -4 2528 0004 85B0 sub sp, sp, #20 2529 .cfi_def_cfa_offset 56 2530 0006 0546 mov r5, r0 1455:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) return res; 2531 .loc 1 1455 0 2532 0008 0021 movs r1, #0 2533 000a FFF7FEFF bl dir_sdi 2534 .LVL388: 1456:../../../Source/third_party/fatfs/src/ff.c **** 2535 .loc 1 1456 0 2536 000e 0028 cmp r0, #0 2537 0010 40F09680 bne .L237 2538 0014 4FF0FF09 mov r9, #255 2539 0018 4F46 mov r7, r9 1470:../../../Source/third_party/fatfs/src/ff.c **** } else { 2540 .loc 1 1470 0 2541 001a C846 mov r8, r9 2542 001c 524B ldr r3, .L252 2543 001e 03F10D0B add fp, r3, #13 2544 .L236: 2545 .LVL389: 1462:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2546 .loc 1 1462 0 2547 0022 2868 ldr r0, [r5] 2548 .LVL390: 2549 0024 2969 ldr r1, [r5, #16] 2550 0026 FFF7FEFF bl move_window 2551 .LVL391: 1463:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* Ptr to the directory entry of current index */ 2552 .loc 1 1463 0 2553 002a 0028 cmp r0, #0 2554 002c 40F08980 bne .L238 1464:../../../Source/third_party/fatfs/src/ff.c **** c = dir[DIR_Name]; 2555 .loc 1 1464 0 2556 0030 6C69 ldr r4, [r5, #20] 2557 .LVL392: 1465:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ 2558 .loc 1 1465 0 2559 0032 2678 ldrb r6, [r4] @ zero_extendqisi2 2560 .LVL393: 1466:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 2561 .loc 1 1466 0 2562 0034 002E cmp r6, #0 2563 0036 00F08580 beq .L239 1468:../../../Source/third_party/fatfs/src/ff.c **** if (c == DDE || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ 2564 .loc 1 1468 0 2565 003a E37A ldrb r3, [r4, #11] @ zero_extendqisi2 2566 003c 03F03F02 and r2, r3, #63 2567 .LVL394: 1469:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 2568 .loc 1 1469 0 2569 0040 E52E cmp r6, #229 2570 0042 6ED0 beq .L240 1469:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 2571 .loc 1 1469 0 is_stmt 0 discriminator 1 2572 0044 13F0080F tst r3, #8 2573 0048 02D0 beq .L223 1469:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 2574 .loc 1 1469 0 discriminator 2 2575 004a 0F2A cmp r2, #15 2576 004c 6BD1 bne .L241 2577 004e 01E0 b .L224 2578 .L223: 1472:../../../Source/third_party/fatfs/src/ff.c **** if (dj->lfn) { 2579 .loc 1 1472 0 is_stmt 1 2580 0050 0F2A cmp r2, #15 2581 0052 4BD1 bne .L225 2582 .L224: 1473:../../../Source/third_party/fatfs/src/ff.c **** if (c & LLE) { /* Is it start of LFN sequence? */ 2583 .loc 1 1473 0 2584 0054 D5F81CA0 ldr r10, [r5, #28] 2585 0058 BAF1000F cmp r10, #0 2586 005c 68D0 beq .L222 1474:../../../Source/third_party/fatfs/src/ff.c **** sum = dir[LDIR_Chksum]; 2587 .loc 1 1474 0 2588 005e 16F0400F tst r6, #64 2589 0062 06D0 beq .L226 1475:../../../Source/third_party/fatfs/src/ff.c **** c &= ~LLE; ord = c; /* LFN start order */ 2590 .loc 1 1475 0 2591 0064 94F80D90 ldrb r9, [r4, #13] @ zero_extendqisi2 2592 .LVL395: 1476:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = dj->index; 2593 .loc 1 1476 0 2594 0068 06F0BF06 and r6, r6, #191 2595 .LVL396: 1477:../../../Source/third_party/fatfs/src/ff.c **** } 2596 .loc 1 1477 0 2597 006c EB88 ldrh r3, [r5, #6] 2598 006e 2B84 strh r3, [r5, #32] @ movhi 2599 0070 03E0 b .L227 2600 .LVL397: 2601 .L226: 1480:../../../Source/third_party/fatfs/src/ff.c **** } 2602 .loc 1 1480 0 2603 0072 B742 cmp r7, r6 2604 0074 18BF it ne 2605 0076 4746 movne r7, r8 2606 .LVL398: 2607 0078 5AD1 bne .L222 2608 .L227: 2609 .LVL399: 1480:../../../Source/third_party/fatfs/src/ff.c **** } 2610 .loc 1 1480 0 is_stmt 0 discriminator 1 2611 007a 637B ldrb r3, [r4, #13] @ zero_extendqisi2 2612 007c 0193 str r3, [sp, #4] 2613 007e 4B45 cmp r3, r9 2614 0080 53D1 bne .L243 2615 .LVL400: 2616 .LBB18: 2617 .LBB19: 1286:../../../Source/third_party/fatfs/src/ff.c **** s = 0; wc = 1; 2618 .loc 1 1286 0 is_stmt 1 2619 0082 2378 ldrb r3, [r4] @ zero_extendqisi2 2620 0084 23F04003 bic r3, r3, #64 2621 0088 013B subs r3, r3, #1 2622 008a 03EB4309 add r9, r3, r3, lsl #1 2623 .LVL401: 2624 008e 03EB8909 add r9, r3, r9, lsl #2 2625 .LVL402: 2626 0092 354F ldr r7, .L252 1287:../../../Source/third_party/fatfs/src/ff.c **** do { 2627 .loc 1 1287 0 2628 0094 0120 movs r0, #1 2629 .LVL403: 2630 .L231: 1289:../../../Source/third_party/fatfs/src/ff.c **** if (wc) { /* Last char has not been processed */ 2631 .loc 1 1289 0 2632 0096 17F8012B ldrb r2, [r7], #1 @ zero_extendqisi2 2633 .LVL404: 2634 009a A318 adds r3, r4, r2 2635 009c 5978 ldrb r1, [r3, #1] @ zero_extendqisi2 2636 009e A35C ldrb r3, [r4, r2] @ zero_extendqisi2 2637 00a0 43EA0123 orr r3, r3, r1, lsl #8 2638 .LVL405: 1290:../../../Source/third_party/fatfs/src/ff.c **** wc = ff_wtoupper(uc); /* Convert it to upper case */ 2639 .loc 1 1290 0 2640 00a4 98B1 cbz r0, .L228 1291:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ 2641 .loc 1 1291 0 2642 00a6 1846 mov r0, r3 2643 .LVL406: 2644 00a8 FFF7FEFF bl ff_wtoupper 2645 .LVL407: 2646 00ac 0290 str r0, [sp, #8] 2647 .LVL408: 1292:../../../Source/third_party/fatfs/src/ff.c **** return 0; /* Not matched */ 2648 .loc 1 1292 0 2649 00ae B9F1FE0F cmp r9, #254 2650 00b2 52D8 bhi .L229 2651 00b4 09F10103 add r3, r9, #1 2652 00b8 0393 str r3, [sp, #12] 2653 .LVL409: 2654 00ba 3AF81900 ldrh r0, [r10, r9, lsl #1] 2655 00be FFF7FEFF bl ff_wtoupper 2656 .LVL410: 2657 00c2 029A ldr r2, [sp, #8] 2658 00c4 8242 cmp r2, r0 2659 00c6 48D1 bne .L229 2660 00c8 DDF80C90 ldr r9, [sp, #12] 2661 00cc 03E0 b .L230 2662 .LVL411: 2663 .L228: 1295:../../../Source/third_party/fatfs/src/ff.c **** } 2664 .loc 1 1295 0 2665 00ce 4FF6FF72 movw r2, #65535 2666 00d2 9342 cmp r3, r2 2667 00d4 41D1 bne .L229 2668 .LVL412: 2669 .L230: 1297:../../../Source/third_party/fatfs/src/ff.c **** 2670 .loc 1 1297 0 2671 00d6 5F45 cmp r7, fp 2672 00d8 DDD1 bne .L231 1299:../../../Source/third_party/fatfs/src/ff.c **** return 0; 2673 .loc 1 1299 0 2674 00da 2378 ldrb r3, [r4] @ zero_extendqisi2 2675 00dc 13F0400F tst r3, #64 2676 00e0 36D0 beq .L232 2677 00e2 A8B3 cbz r0, .L232 2678 00e4 3AF81930 ldrh r3, [r10, r9, lsl #1] 2679 00e8 93B3 cbz r3, .L232 2680 00ea 36E0 b .L229 2681 .LVL413: 2682 .L225: 2683 .LBE19: 2684 .LBE18: 1483:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */ 2685 .loc 1 1483 0 2686 00ec 27B9 cbnz r7, .L233 1483:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; dj->lfn_idx = 0xFFFF; /* Reset LFN sequence */ 2687 .loc 1 1483 0 is_stmt 0 discriminator 1 2688 00ee 2046 mov r0, r4 2689 .LVL414: 2690 00f0 FFF7FEFF bl sum_sfn 2691 .LVL415: 2692 00f4 4845 cmp r0, r9 2693 00f6 27D0 beq .L244 2694 .L233: 2695 .LVL416: 1484:../../../Source/third_party/fatfs/src/ff.c **** if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ 2696 .loc 1 1484 0 is_stmt 1 2697 00f8 4FF6FF73 movw r3, #65535 2698 00fc 2B84 strh r3, [r5, #32] @ movhi 1485:../../../Source/third_party/fatfs/src/ff.c **** } 2699 .loc 1 1485 0 2700 00fe AB69 ldr r3, [r5, #24] 2701 0100 DA7A ldrb r2, [r3, #11] @ zero_extendqisi2 2702 0102 12F0010F tst r2, #1 2703 0106 12D1 bne .L245 2704 0108 04F10B00 add r0, r4, #11 2705 010c 01E0 b .L234 2706 .LVL417: 2707 .L235: 2708 .LBB20: 2709 .LBB21: 569:../../../Source/third_party/fatfs/src/ff.c **** return r; 2710 .loc 1 569 0 2711 010e 8442 cmp r4, r0 2712 0110 1CD0 beq .L246 2713 .LVL418: 2714 .L234: 2715 0112 14F8011B ldrb r1, [r4], #1 @ zero_extendqisi2 2716 .LVL419: 2717 0116 13F8012B ldrb r2, [r3], #1 @ zero_extendqisi2 2718 .LVL420: 2719 011a 9142 cmp r1, r2 2720 011c F7D0 beq .L235 2721 .LBE21: 2722 .LBE20: 1484:../../../Source/third_party/fatfs/src/ff.c **** if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ 2723 .loc 1 1484 0 2724 011e 4746 mov r7, r8 2725 0120 06E0 b .L222 2726 .LVL421: 2727 .L240: 1470:../../../Source/third_party/fatfs/src/ff.c **** } else { 2728 .loc 1 1470 0 2729 0122 4746 mov r7, r8 2730 .LVL422: 2731 0124 04E0 b .L222 2732 .LVL423: 2733 .L241: 2734 0126 4746 mov r7, r8 2735 .LVL424: 2736 0128 02E0 b .L222 2737 .LVL425: 2738 .L243: 1480:../../../Source/third_party/fatfs/src/ff.c **** } 2739 .loc 1 1480 0 2740 012a 4746 mov r7, r8 2741 012c 00E0 b .L222 2742 .LVL426: 2743 .L245: 1484:../../../Source/third_party/fatfs/src/ff.c **** if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ 2744 .loc 1 1484 0 2745 012e 4746 mov r7, r8 2746 .LVL427: 2747 .L222: 1492:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 2748 .loc 1 1492 0 2749 0130 2846 mov r0, r5 2750 0132 0021 movs r1, #0 2751 0134 FFF7FEFF bl dir_next 2752 .LVL428: 1493:../../../Source/third_party/fatfs/src/ff.c **** 2753 .loc 1 1493 0 2754 0138 0028 cmp r0, #0 2755 013a 3FF472AF beq .L236 2756 013e 10E0 b .L250 2757 .LVL429: 2758 .L237: 2759 0140 0FE0 b .L250 2760 .LVL430: 2761 .L238: 2762 0142 0EE0 b .L250 2763 .LVL431: 2764 .L239: 1466:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 2765 .loc 1 1466 0 2766 0144 0420 movs r0, #4 2767 .LVL432: 2768 0146 0CE0 b .L250 2769 .L244: 1462:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2770 .loc 1 1462 0 2771 0148 0020 movs r0, #0 2772 014a 0AE0 b .L250 2773 .LVL433: 2774 .L246: 2775 014c 0020 movs r0, #0 2776 .LVL434: 2777 014e 08E0 b .L250 2778 .LVL435: 2779 .L232: 1480:../../../Source/third_party/fatfs/src/ff.c **** } 2780 .loc 1 1480 0 2781 0150 013E subs r6, r6, #1 2782 .LVL436: 2783 0152 F7B2 uxtb r7, r6 2784 .LVL437: 2785 0154 DDF80490 ldr r9, [sp, #4] 2786 .LVL438: 2787 0158 EAE7 b .L222 2788 .LVL439: 2789 .L229: 1484:../../../Source/third_party/fatfs/src/ff.c **** if (!(dj->fn[NS] & NS_LOSS) && !mem_cmp(dir, dj->fn, 11)) break; /* SFN matched? */ 2790 .loc 1 1484 0 2791 015a DDF80490 ldr r9, [sp, #4] 1480:../../../Source/third_party/fatfs/src/ff.c **** } 2792 .loc 1 1480 0 2793 015e 4746 mov r7, r8 2794 0160 E6E7 b .L222 2795 .LVL440: 2796 .L250: 1496:../../../Source/third_party/fatfs/src/ff.c **** 2797 .loc 1 1496 0 2798 0162 05B0 add sp, sp, #20 2799 .cfi_def_cfa_offset 36 2800 @ sp needed 2801 0164 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 2802 .LVL441: 2803 .L253: 2804 .align 2 2805 .L252: 2806 0168 00000000 .word .LANCHOR2 2807 .cfi_endproc 2808 .LFE22: 2810 .section .text.follow_path,"ax",%progbits 2811 .align 2 2812 .thumb 2813 .thumb_func 2815 follow_path: 2816 .LFB28: 1983:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2817 .loc 1 1983 0 2818 .cfi_startproc 2819 @ args = 0, pretend = 0, frame = 8 2820 @ frame_needed = 0, uses_anonymous_args = 0 2821 .LVL442: 2822 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 2823 .cfi_def_cfa_offset 36 2824 .cfi_offset 4, -36 2825 .cfi_offset 5, -32 2826 .cfi_offset 6, -28 2827 .cfi_offset 7, -24 2828 .cfi_offset 8, -20 2829 .cfi_offset 9, -16 2830 .cfi_offset 10, -12 2831 .cfi_offset 11, -8 2832 .cfi_offset 14, -4 2833 0004 83B0 sub sp, sp, #12 2834 .cfi_def_cfa_offset 48 2835 0006 0546 mov r5, r0 2836 0008 8946 mov r9, r1 1995:../../../Source/third_party/fatfs/src/ff.c **** path++; 2837 .loc 1 1995 0 2838 000a 0B78 ldrb r3, [r1] @ zero_extendqisi2 2839 000c 2F2B cmp r3, #47 2840 000e 01D0 beq .L255 1995:../../../Source/third_party/fatfs/src/ff.c **** path++; 2841 .loc 1 1995 0 is_stmt 0 discriminator 1 2842 0010 5C2B cmp r3, #92 2843 0012 01D1 bne .L256 2844 .L255: 1996:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = 0; /* Start from the root dir */ 2845 .loc 1 1996 0 is_stmt 1 2846 0014 09F10109 add r9, r9, #1 2847 .LVL443: 2848 .L256: 1997:../../../Source/third_party/fatfs/src/ff.c **** #endif 2849 .loc 1 1997 0 2850 0018 0023 movs r3, #0 2851 001a AB60 str r3, [r5, #8] 2000:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); 2852 .loc 1 2000 0 2853 001c 99F80030 ldrb r3, [r9] @ zero_extendqisi2 2854 0020 1F2B cmp r3, #31 2855 0022 07D8 bhi .L322 2001:../../../Source/third_party/fatfs/src/ff.c **** dj->dir = 0; 2856 .loc 1 2001 0 2857 0024 2846 mov r0, r5 2858 .LVL444: 2859 0026 0021 movs r1, #0 2860 0028 FFF7FEFF bl dir_sdi 2861 .LVL445: 2862 002c 0346 mov r3, r0 2863 .LVL446: 2002:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Follow path */ 2864 .loc 1 2002 0 2865 002e 0022 movs r2, #0 2866 0030 6A61 str r2, [r5, #20] 2867 0032 5CE1 b .L316 2868 .LVL447: 2869 .L322: 2870 0034 CA46 mov r10, r9 2871 .LVL448: 2872 .LBB30: 2873 .LBB31: 1699:../../../Source/third_party/fatfs/src/ff.c **** lfn = dj->lfn; 2874 .loc 1 1699 0 2875 0036 19F8013B ldrb r3, [r9], #1 @ zero_extendqisi2 2876 .LVL449: 2877 003a 2F2B cmp r3, #47 2878 003c FAD0 beq .L322 2879 003e 5C2B cmp r3, #92 2880 0040 F8D0 beq .L322 1700:../../../Source/third_party/fatfs/src/ff.c **** si = di = 0; 2881 .loc 1 1700 0 2882 0042 EE69 ldr r6, [r5, #28] 2883 .LVL450: 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 2884 .loc 1 1703 0 2885 0044 9AF80000 ldrb r0, [r10] @ zero_extendqisi2 2886 .LVL451: 1704:../../../Source/third_party/fatfs/src/ff.c **** if (di >= _MAX_LFN) /* Reject too long name */ 2887 .loc 1 1704 0 2888 0048 1F28 cmp r0, #31 2889 004a 40F22681 bls .L309 2890 004e 2F28 cmp r0, #47 2891 0050 00F02981 beq .L310 2892 0054 5C28 cmp r0, #92 2893 0056 00F02A81 beq .L311 2894 005a A6F10208 sub r8, r6, #2 2895 005e 5746 mov r7, r10 2896 0060 0124 movs r4, #1 1715:../../../Source/third_party/fatfs/src/ff.c **** if (!w) return FR_INVALID_NAME; /* Reject invalid code */ 2897 .loc 1 1715 0 2898 0062 A346 mov fp, r4 2899 0064 0AE0 b .L262 2900 .LVL452: 2901 .L323: 1704:../../../Source/third_party/fatfs/src/ff.c **** if (di >= _MAX_LFN) /* Reject too long name */ 2902 .loc 1 1704 0 2903 0066 2F28 cmp r0, #47 2904 0068 00F02481 beq .L261 2905 006c 5C28 cmp r0, #92 2906 006e 00F02181 beq .L261 1705:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 2907 .loc 1 1705 0 2908 0072 B9F5807F cmp r9, #256 2909 0076 00F03081 beq .L263 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 2910 .loc 1 1703 0 2911 007a 4C46 mov r4, r9 2912 .LVL453: 2913 .L262: 1715:../../../Source/third_party/fatfs/src/ff.c **** if (!w) return FR_INVALID_NAME; /* Reject invalid code */ 2914 .loc 1 1715 0 2915 007c 5946 mov r1, fp 2916 007e FFF7FEFF bl ff_convert 2917 .LVL454: 1716:../../../Source/third_party/fatfs/src/ff.c **** #endif 2918 .loc 1 1716 0 2919 0082 0146 mov r1, r0 2920 0084 0028 cmp r0, #0 2921 0086 00F02881 beq .L263 1718:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_NAME; 2922 .loc 1 1718 0 2923 008a 7F28 cmp r0, #127 2924 008c 09D8 bhi .L264 2925 .LVL455: 2926 .LBB32: 2927 .LBB33: 576:../../../Source/third_party/fatfs/src/ff.c **** return *str; 2928 .loc 1 576 0 2929 008e 2229 cmp r1, #34 2930 0090 00F0E880 beq .L265 2931 0094 984A ldr r2, .L334 2932 .LVL456: 2933 .L266: 2934 0096 12F8013F ldrb r3, [r2, #1]! @ zero_extendqisi2 2935 .LVL457: 2936 009a 13B1 cbz r3, .L264 2937 009c 9842 cmp r0, r3 2938 009e FAD1 bne .L266 2939 00a0 E0E0 b .L265 2940 .LVL458: 2941 .L264: 2942 .LBE33: 2943 .LBE32: 1720:../../../Source/third_party/fatfs/src/ff.c **** } 2944 .loc 1 1720 0 2945 00a2 28F8021F strh r1, [r8, #2]! @ movhi 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 2946 .loc 1 1703 0 2947 00a6 04F10109 add r9, r4, #1 2948 .LVL459: 2949 00aa 17F8010F ldrb r0, [r7, #1]! @ zero_extendqisi2 2950 .LVL460: 1704:../../../Source/third_party/fatfs/src/ff.c **** if (di >= _MAX_LFN) /* Reject too long name */ 2951 .loc 1 1704 0 2952 00ae 1F28 cmp r0, #31 2953 00b0 D9D8 bhi .L323 2954 00b2 F5E0 b .L260 2955 .LVL461: 2956 .L304: 1734:../../../Source/third_party/fatfs/src/ff.c **** w = lfn[di-1]; 2957 .loc 1 1734 0 2958 00b4 002C cmp r4, #0 2959 00b6 00F0D580 beq .L265 2960 00ba 06EB4402 add r2, r6, r4, lsl #1 2961 .LVL462: 2962 .L270: 1735:../../../Source/third_party/fatfs/src/ff.c **** if (w != ' ' && w != '.') break; 2963 .loc 1 1735 0 2964 00be 32F8023D ldrh r3, [r2, #-2]! 2965 .LVL463: 1736:../../../Source/third_party/fatfs/src/ff.c **** di--; 2966 .loc 1 1736 0 2967 00c2 202B cmp r3, #32 2968 00c4 01D0 beq .L268 2969 00c6 2E2B cmp r3, #46 2970 00c8 02D1 bne .L269 2971 .L268: 2972 .LVL464: 1734:../../../Source/third_party/fatfs/src/ff.c **** w = lfn[di-1]; 2973 .loc 1 1734 0 2974 00ca 013C subs r4, r4, #1 2975 .LVL465: 2976 00cc F7D1 bne .L270 2977 00ce C9E0 b .L265 2978 .L269: 1739:../../../Source/third_party/fatfs/src/ff.c **** 2979 .loc 1 1739 0 2980 00d0 002C cmp r4, #0 2981 00d2 00F00281 beq .L263 1741:../../../Source/third_party/fatfs/src/ff.c **** 2982 .loc 1 1741 0 2983 00d6 6000 lsls r0, r4, #1 2984 00d8 0023 movs r3, #0 2985 .LVL466: 2986 00da 26F81430 strh r3, [r6, r4, lsl #1] @ movhi 2987 .LVL467: 1744:../../../Source/third_party/fatfs/src/ff.c **** for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ 2988 .loc 1 1744 0 2989 00de AB69 ldr r3, [r5, #24] 2990 .LVL468: 2991 00e0 03F10B01 add r1, r3, #11 2992 .LBB34: 2993 .LBB35: 560:../../../Source/third_party/fatfs/src/ff.c **** } 2994 .loc 1 560 0 2995 00e4 2022 movs r2, #32 2996 .LVL469: 2997 .L271: 2998 00e6 03F8012B strb r2, [r3], #1 2999 .LVL470: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 3000 .loc 1 559 0 3001 00ea 8B42 cmp r3, r1 3002 00ec FBD1 bne .L271 3003 00ee B11E subs r1, r6, #2 3004 .LVL471: 3005 00f0 0023 movs r3, #0 3006 .LVL472: 3007 00f2 00E0 b .L272 3008 .LVL473: 3009 .L273: 3010 .LBE35: 3011 .LBE34: 1745:../../../Source/third_party/fatfs/src/ff.c **** if (si) cf |= NS_LOSS | NS_LFN; 3012 .loc 1 1745 0 3013 00f4 0133 adds r3, r3, #1 3014 .LVL474: 3015 .L272: 3016 00f6 31F8022F ldrh r2, [r1, #2]! 3017 00fa 202A cmp r2, #32 3018 00fc FAD0 beq .L273 3019 00fe 2E2A cmp r2, #46 3020 0100 F8D0 beq .L273 1746:../../../Source/third_party/fatfs/src/ff.c **** while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ 3021 .loc 1 1746 0 3022 0102 002B cmp r3, #0 3023 0104 00F0D980 beq .L274 3024 0108 47F00307 orr r7, r7, #3 3025 .LVL475: 3026 010c D5E0 b .L274 3027 .LVL476: 3028 .L277: 1747:../../../Source/third_party/fatfs/src/ff.c **** 3029 .loc 1 1747 0 3030 010e 013C subs r4, r4, #1 3031 .LVL477: 3032 0110 07D1 bne .L275 3033 .LVL478: 3034 .L278: 1751:../../../Source/third_party/fatfs/src/ff.c **** if (!w) break; /* Break on end of the LFN */ 3035 .loc 1 1751 0 3036 0112 4FF0080B mov fp, #8 3037 0116 4FF0000A mov r10, #0 3038 .LVL479: 3039 011a CDF800A0 str r10, [sp] 1764:../../../Source/third_party/fatfs/src/ff.c **** } 3040 .loc 1 1764 0 3041 011e 0194 str r4, [sp, #4] 3042 0120 04E0 b .L276 3043 .LVL480: 3044 .L275: 1747:../../../Source/third_party/fatfs/src/ff.c **** 3045 .loc 1 1747 0 3046 0122 32F8021D ldrh r1, [r2, #-2]! 3047 0126 2E29 cmp r1, #46 3048 0128 F1D1 bne .L277 3049 012a F2E7 b .L278 3050 .LVL481: 3051 .L276: 1751:../../../Source/third_party/fatfs/src/ff.c **** if (!w) break; /* Break on end of the LFN */ 3052 .loc 1 1751 0 3053 012c 03F10108 add r8, r3, #1 3054 .LVL482: 3055 0130 36F81300 ldrh r0, [r6, r3, lsl #1] 3056 .LVL483: 1752:../../../Source/third_party/fatfs/src/ff.c **** if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ 3057 .loc 1 1752 0 3058 0134 0028 cmp r0, #0 3059 0136 60D0 beq .L279 1753:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; continue; 3060 .loc 1 1753 0 3061 0138 2028 cmp r0, #32 3062 013a 04D0 beq .L280 3063 013c 2E28 cmp r0, #46 3064 013e 06D1 bne .L281 3065 0140 4445 cmp r4, r8 3066 0142 00F0CC80 beq .L282 3067 .L280: 1754:../../../Source/third_party/fatfs/src/ff.c **** } 3068 .loc 1 1754 0 3069 0146 47F00307 orr r7, r7, #3 3070 .LVL484: 1751:../../../Source/third_party/fatfs/src/ff.c **** if (!w) break; /* Break on end of the LFN */ 3071 .loc 1 1751 0 3072 014a 4346 mov r3, r8 3073 014c EEE7 b .L276 3074 .L281: 1757:../../../Source/third_party/fatfs/src/ff.c **** if (ni == 11) { /* Long extension */ 3075 .loc 1 1757 0 3076 014e DA45 cmp r10, fp 3077 0150 02D2 bcs .L284 3078 0152 4445 cmp r4, r8 3079 0154 1AD1 bne .L324 3080 0156 C2E0 b .L282 3081 .L284: 1758:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; break; 3082 .loc 1 1758 0 3083 0158 BBF10B0F cmp fp, #11 3084 015c 06D1 bne .L286 3085 .L308: 1759:../../../Source/third_party/fatfs/src/ff.c **** } 3086 .loc 1 1759 0 3087 015e 47F00307 orr r7, r7, #3 3088 .LVL485: 1798:../../../Source/third_party/fatfs/src/ff.c **** 3089 .loc 1 1798 0 3090 0162 AB69 ldr r3, [r5, #24] 3091 0164 1A78 ldrb r2, [r3] @ zero_extendqisi2 3092 0166 E52A cmp r2, #229 3093 0168 59D1 bne .L288 3094 016a 4BE0 b .L312 3095 .L286: 1761:../../../Source/third_party/fatfs/src/ff.c **** if (si > di) break; /* No extension */ 3096 .loc 1 1761 0 3097 016c 4445 cmp r4, r8 3098 016e 03D0 beq .L289 3099 0170 47F00307 orr r7, r7, #3 3100 .LVL486: 1762:../../../Source/third_party/fatfs/src/ff.c **** si = di; i = 8; ni = 11; /* Enter extension section */ 3101 .loc 1 1762 0 3102 0174 A045 cmp r8, r4 3103 0176 40D8 bhi .L279 3104 .L289: 3105 .LVL487: 1764:../../../Source/third_party/fatfs/src/ff.c **** } 3106 .loc 1 1764 0 3107 0178 009B ldr r3, [sp] 3108 017a 9B00 lsls r3, r3, #2 3109 017c DBB2 uxtb r3, r3 3110 017e 0093 str r3, [sp] 3111 .LVL488: 3112 0180 019B ldr r3, [sp, #4] 1763:../../../Source/third_party/fatfs/src/ff.c **** b <<= 2; continue; 3113 .loc 1 1763 0 3114 0182 4FF00B0B mov fp, #11 3115 0186 4FF0080A mov r10, #8 3116 018a CFE7 b .L276 3117 .LVL489: 3118 .L324: 1767:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _EXCVT 3119 .loc 1 1767 0 3120 018c 7F28 cmp r0, #127 3121 018e 40F29B80 bls .L290 1769:../../../Source/third_party/fatfs/src/ff.c **** if (w) w = ExCvt[w - 0x80]; /* Convert extended char to upper (SBCS) */ 3122 .loc 1 1769 0 3123 0192 0021 movs r1, #0 3124 0194 FFF7FEFF bl ff_convert 3125 .LVL490: 1770:../../../Source/third_party/fatfs/src/ff.c **** #else 3126 .loc 1 1770 0 3127 0198 0346 mov r3, r0 3128 019a 0028 cmp r0, #0 3129 019c 00F0A480 beq .L291 3130 01a0 564A ldr r2, .L334+4 3131 01a2 1344 add r3, r3, r2 3132 01a4 13F8801C ldrb r1, [r3, #-128] @ zero_extendqisi2 3133 01a8 88B2 uxth r0, r1 3134 .LVL491: 1774:../../../Source/third_party/fatfs/src/ff.c **** } 3135 .loc 1 1774 0 3136 01aa 47F00207 orr r7, r7, #2 3137 .LVL492: 1783:../../../Source/third_party/fatfs/src/ff.c **** w = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ 3138 .loc 1 1783 0 3139 01ae 48B1 cbz r0, .L292 3140 .L305: 3141 .LVL493: 3142 .LBB36: 3143 .LBB37: 576:../../../Source/third_party/fatfs/src/ff.c **** return *str; 3144 .loc 1 576 0 3145 01b0 2B29 cmp r1, #43 3146 01b2 07D0 beq .L292 3147 01b4 524A ldr r2, .L334+8 3148 .LVL494: 3149 .L295: 3150 01b6 12F8013F ldrb r3, [r2, #1]! @ zero_extendqisi2 3151 .LVL495: 3152 01ba 002B cmp r3, #0 3153 01bc 00F08680 beq .L294 3154 01c0 9942 cmp r1, r3 3155 01c2 F8D1 bne .L295 3156 .LVL496: 3157 .L292: 3158 .LBE37: 3159 .LBE36: 1784:../../../Source/third_party/fatfs/src/ff.c **** } else { 3160 .loc 1 1784 0 3161 01c4 47F00307 orr r7, r7, #3 3162 .LVL497: 3163 01c8 5F20 movs r0, #95 3164 01ca 0FE0 b .L296 3165 .LVL498: 3166 .L306: 1787:../../../Source/third_party/fatfs/src/ff.c **** } else { 3167 .loc 1 1787 0 3168 01cc 009B ldr r3, [sp] 3169 01ce 43F00203 orr r3, r3, #2 3170 01d2 0093 str r3, [sp] 3171 .LVL499: 3172 01d4 0AE0 b .L296 3173 .L328: 1789:../../../Source/third_party/fatfs/src/ff.c **** b |= 1; w -= 0x20; 3174 .loc 1 1789 0 3175 01d6 A0F16103 sub r3, r0, #97 3176 01da 9BB2 uxth r3, r3 3177 01dc 192B cmp r3, #25 3178 01de 05D8 bhi .L296 1790:../../../Source/third_party/fatfs/src/ff.c **** } 3179 .loc 1 1790 0 3180 01e0 009B ldr r3, [sp] 3181 01e2 43F00103 orr r3, r3, #1 3182 01e6 0093 str r3, [sp] 3183 .LVL500: 3184 01e8 2038 subs r0, r0, #32 3185 .LVL501: 3186 01ea 80B2 uxth r0, r0 3187 .LVL502: 3188 .L296: 1795:../../../Source/third_party/fatfs/src/ff.c **** } 3189 .loc 1 1795 0 3190 01ec AB69 ldr r3, [r5, #24] 3191 01ee 03F80A00 strb r0, [r3, r10] 1751:../../../Source/third_party/fatfs/src/ff.c **** if (!w) break; /* Break on end of the LFN */ 3192 .loc 1 1751 0 3193 01f2 4346 mov r3, r8 1795:../../../Source/third_party/fatfs/src/ff.c **** } 3194 .loc 1 1795 0 3195 01f4 0AF1010A add r10, r10, #1 3196 .LVL503: 3197 01f8 98E7 b .L276 3198 .L279: 1798:../../../Source/third_party/fatfs/src/ff.c **** 3199 .loc 1 1798 0 3200 01fa AB69 ldr r3, [r5, #24] 3201 01fc 1A78 ldrb r2, [r3] @ zero_extendqisi2 3202 01fe E52A cmp r2, #229 3203 0200 06D1 bne .L313 3204 0202 01E0 b .L287 3205 .L312: 3206 0204 4FF00B0B mov fp, #11 3207 .LVL504: 3208 .L287: 3209 0208 0522 movs r2, #5 3210 020a 1A70 strb r2, [r3] 3211 020c 009B ldr r3, [sp] 3212 020e 00E0 b .L297 3213 .LVL505: 3214 .L313: 3215 0210 009B ldr r3, [sp] 3216 .LVL506: 3217 .L297: 1800:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capital 3218 .loc 1 1800 0 3219 0212 BBF1080F cmp fp, #8 3220 0216 02D1 bne .L288 3221 0218 9B00 lsls r3, r3, #2 3222 021a DBB2 uxtb r3, r3 3223 021c 0093 str r3, [sp] 3224 .LVL507: 3225 .L288: 1801:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LFN; 3226 .loc 1 1801 0 3227 021e 009A ldr r2, [sp] 3228 0220 02F00C03 and r3, r2, #12 3229 0224 0C2B cmp r3, #12 3230 0226 03D0 beq .L298 3231 0228 02F00302 and r2, r2, #3 3232 022c 032A cmp r2, #3 3233 022e 01D1 bne .L299 3234 .L298: 1802:../../../Source/third_party/fatfs/src/ff.c **** if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended char, NT flags are create 3235 .loc 1 1802 0 3236 0230 47F00207 orr r7, r7, #2 3237 .LVL508: 3238 .L299: 1803:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ 3239 .loc 1 1803 0 3240 0234 17F0020F tst r7, #2 3241 0238 0AD1 bne .L300 1804:../../../Source/third_party/fatfs/src/ff.c **** if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ 3242 .loc 1 1804 0 3243 023a 009A ldr r2, [sp] 3244 023c 02F00302 and r2, r2, #3 3245 0240 012A cmp r2, #1 3246 0242 08BF it eq 3247 0244 47F01007 orreq r7, r7, #16 3248 .LVL509: 1805:../../../Source/third_party/fatfs/src/ff.c **** } 3249 .loc 1 1805 0 3250 0248 042B cmp r3, #4 3251 024a 08BF it eq 3252 024c 47F00807 orreq r7, r7, #8 3253 .LVL510: 3254 .L300: 1808:../../../Source/third_party/fatfs/src/ff.c **** 3255 .loc 1 1808 0 3256 0250 AB69 ldr r3, [r5, #24] 3257 0252 DF72 strb r7, [r3, #11] 3258 .LBE31: 3259 .LBE30: 2007:../../../Source/third_party/fatfs/src/ff.c **** ns = *(dj->fn+NS); 3260 .loc 1 2007 0 3261 0254 2846 mov r0, r5 3262 .LVL511: 3263 0256 FFF7FEFF bl dir_find 3264 .LVL512: 2008:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) { /* Failed to find the object */ 3265 .loc 1 2008 0 3266 025a AB69 ldr r3, [r5, #24] 3267 025c DA7A ldrb r2, [r3, #11] @ zero_extendqisi2 3268 .LVL513: 2009:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_NO_FILE) break; /* Abort if any hard error occurred */ 3269 .loc 1 2009 0 3270 025e 0346 mov r3, r0 3271 0260 60B1 cbz r0, .L326 3272 0262 01E0 b .L302 3273 .LVL514: 3274 .L265: 3275 0264 0623 movs r3, #6 3276 0266 42E0 b .L316 3277 .LVL515: 3278 .L302: 2010:../../../Source/third_party/fatfs/src/ff.c **** /* Object not found */ 3279 .loc 1 2010 0 3280 0268 0428 cmp r0, #4 3281 026a 40D1 bne .L316 2017:../../../Source/third_party/fatfs/src/ff.c **** } 3282 .loc 1 2017 0 3283 026c 02F00403 and r3, r2, #4 3284 0270 DBB2 uxtb r3, r3 3285 0272 002B cmp r3, #0 3286 0274 14BF ite ne 3287 0276 0346 movne r3, r0 3288 0278 0523 moveq r3, #5 3289 027a 38E0 b .L316 3290 .L326: 2021:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* There is next segment. Follow the sub directory */ 3291 .loc 1 2021 0 3292 027c 12F0040F tst r2, #4 3293 0280 35D1 bne .L316 2022:../../../Source/third_party/fatfs/src/ff.c **** if (!(dir[DIR_Attr] & AM_DIR)) { /* Cannot follow because it is a file */ 3294 .loc 1 2022 0 3295 0282 6969 ldr r1, [r5, #20] 3296 .LVL516: 2023:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_PATH; break; 3297 .loc 1 2023 0 3298 0284 CB7A ldrb r3, [r1, #11] @ zero_extendqisi2 3299 0286 13F0100F tst r3, #16 3300 028a 04D0 beq .L315 2026:../../../Source/third_party/fatfs/src/ff.c **** } 3301 .loc 1 2026 0 3302 028c 2868 ldr r0, [r5] 3303 .LVL517: 3304 028e FFF7FEFF bl ld_clust 3305 .LVL518: 3306 0292 A860 str r0, [r5, #8] 2027:../../../Source/third_party/fatfs/src/ff.c **** } 3307 .loc 1 2027 0 3308 0294 CEE6 b .L322 3309 .LVL519: 3310 .L315: 2024:../../../Source/third_party/fatfs/src/ff.c **** } 3311 .loc 1 2024 0 3312 0296 0523 movs r3, #5 3313 0298 29E0 b .L316 3314 .LVL520: 3315 .L309: 3316 .LBB40: 3317 .LBB38: 1701:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 3318 .loc 1 1701 0 3319 029a 0024 movs r4, #0 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 3320 .loc 1 1703 0 3321 029c 4FF00109 mov r9, #1 3322 .LVL521: 3323 .L260: 1722:../../../Source/third_party/fatfs/src/ff.c **** cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ 3324 .loc 1 1722 0 3325 02a0 D144 add r9, r9, r10 3326 .LVL522: 1723:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 3327 .loc 1 1723 0 3328 02a2 0427 movs r7, #4 3329 02a4 06E7 b .L304 3330 .LVL523: 3331 .L310: 1701:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 3332 .loc 1 1701 0 3333 02a6 0024 movs r4, #0 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 3334 .loc 1 1703 0 3335 02a8 4FF00109 mov r9, #1 3336 02ac 02E0 b .L261 3337 .L311: 1701:../../../Source/third_party/fatfs/src/ff.c **** for (;;) { 3338 .loc 1 1701 0 3339 02ae 0024 movs r4, #0 1703:../../../Source/third_party/fatfs/src/ff.c **** if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ 3340 .loc 1 1703 0 3341 02b0 4FF00109 mov r9, #1 3342 .LVL524: 3343 .L261: 1722:../../../Source/third_party/fatfs/src/ff.c **** cf = (w < ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ 3344 .loc 1 1722 0 3345 02b4 D144 add r9, r9, r10 3346 .LVL525: 1723:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 3347 .loc 1 1723 0 3348 02b6 0027 movs r7, #0 3349 02b8 FCE6 b .L304 3350 .LVL526: 3351 .L274: 1747:../../../Source/third_party/fatfs/src/ff.c **** 3352 .loc 1 1747 0 3353 02ba 811E subs r1, r0, #2 3354 02bc 7218 adds r2, r6, r1 3355 02be 715A ldrh r1, [r6, r1] 3356 02c0 2E29 cmp r1, #46 3357 02c2 3FF426AF beq .L278 3358 02c6 22E7 b .L277 3359 .LVL527: 3360 .L290: 1783:../../../Source/third_party/fatfs/src/ff.c **** w = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ 3361 .loc 1 1783 0 3362 02c8 0146 mov r1, r0 3363 .LVL528: 3364 02ca 71E7 b .L305 3365 .LVL529: 3366 .L294: 1786:../../../Source/third_party/fatfs/src/ff.c **** b |= 2; 3367 .loc 1 1786 0 3368 02cc A0F14103 sub r3, r0, #65 3369 02d0 9BB2 uxth r3, r3 3370 02d2 192B cmp r3, #25 3371 02d4 7FF67AAF bls .L306 3372 02d8 7DE7 b .L328 3373 .LVL530: 3374 .L263: 3375 .LBE38: 3376 .LBE40: 2017:../../../Source/third_party/fatfs/src/ff.c **** } 3377 .loc 1 2017 0 3378 02da 0623 movs r3, #6 3379 .LVL531: 3380 02dc 07E0 b .L316 3381 .LVL532: 3382 .L282: 3383 .LBB41: 3384 .LBB39: 1758:../../../Source/third_party/fatfs/src/ff.c **** cf |= NS_LOSS | NS_LFN; break; 3385 .loc 1 1758 0 3386 02de BBF10B0F cmp fp, #11 3387 02e2 7FF449AF bne .L289 3388 02e6 3AE7 b .L308 3389 .L291: 3390 .LVL533: 1774:../../../Source/third_party/fatfs/src/ff.c **** } 3391 .loc 1 1774 0 3392 02e8 47F00207 orr r7, r7, #2 3393 .LVL534: 3394 02ec 6AE7 b .L292 3395 .LVL535: 3396 .L316: 3397 .LBE39: 3398 .LBE41: 2031:../../../Source/third_party/fatfs/src/ff.c **** 3399 .loc 1 2031 0 3400 02ee 1846 mov r0, r3 3401 02f0 03B0 add sp, sp, #12 3402 .cfi_def_cfa_offset 36 3403 @ sp needed 3404 02f2 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 3405 .LVL536: 3406 .L335: 3407 02f6 00BF .align 2 3408 .L334: 3409 02f8 00000000 .word .LC0 3410 02fc 00000000 .word .LANCHOR3 3411 0300 0C000000 .word .LC1 3412 .cfi_endproc 3413 .LFE28: 3415 .section .text.dir_read,"ax",%progbits 3416 .align 2 3417 .thumb 3418 .thumb_func 3420 dir_read: 3421 .LFB23: 1510:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3422 .loc 1 1510 0 3423 .cfi_startproc 3424 @ args = 0, pretend = 0, frame = 0 3425 @ frame_needed = 0, uses_anonymous_args = 0 3426 .LVL537: 3427 0000 2DE9F84F push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} 3428 .cfi_def_cfa_offset 40 3429 .cfi_offset 3, -40 3430 .cfi_offset 4, -36 3431 .cfi_offset 5, -32 3432 .cfi_offset 6, -28 3433 .cfi_offset 7, -24 3434 .cfi_offset 8, -20 3435 .cfi_offset 9, -16 3436 .cfi_offset 10, -12 3437 .cfi_offset 11, -8 3438 .cfi_offset 14, -4 3439 0004 0446 mov r4, r0 3440 0006 8846 mov r8, r1 3441 .LVL538: 1514:../../../Source/third_party/fatfs/src/ff.c **** #endif 3442 .loc 1 1514 0 3443 0008 4FF0FF09 mov r9, #255 3444 000c 4D46 mov r5, r9 1517:../../../Source/third_party/fatfs/src/ff.c **** while (dj->sect) { 3445 .loc 1 1517 0 3446 000e 0423 movs r3, #4 1527:../../../Source/third_party/fatfs/src/ff.c **** } else { 3447 .loc 1 1527 0 3448 0010 4F46 mov r7, r9 3449 0012 DFF814B1 ldr fp, .L366 3450 0016 0BF10D0A add r10, fp, #13 1518:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 3451 .loc 1 1518 0 3452 001a 6FE0 b .L337 3453 .LVL539: 3454 .L350: 1519:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3455 .loc 1 1519 0 3456 001c 2068 ldr r0, [r4] 3457 001e FFF7FEFF bl move_window 3458 .LVL540: 1520:../../../Source/third_party/fatfs/src/ff.c **** dir = dj->dir; /* Ptr to the directory entry of current index */ 3459 .loc 1 1520 0 3460 0022 0646 mov r6, r0 3461 0024 0028 cmp r0, #0 3462 0026 6ED1 bne .L352 1521:../../../Source/third_party/fatfs/src/ff.c **** c = dir[DIR_Name]; 3463 .loc 1 1521 0 3464 0028 6069 ldr r0, [r4, #20] 3465 .LVL541: 1522:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ 3466 .loc 1 1522 0 3467 002a 0378 ldrb r3, [r0] @ zero_extendqisi2 3468 .LVL542: 1523:../../../Source/third_party/fatfs/src/ff.c **** a = dir[DIR_Attr] & AM_MASK; 3469 .loc 1 1523 0 3470 002c 002B cmp r3, #0 3471 002e 74D0 beq .L353 1524:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 3472 .loc 1 1524 0 3473 0030 C27A ldrb r2, [r0, #11] @ zero_extendqisi2 3474 .LVL543: 1526:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 3475 .loc 1 1526 0 3476 0032 E52B cmp r3, #229 3477 0034 55D0 beq .L354 1526:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 3478 .loc 1 1526 0 is_stmt 0 discriminator 1 3479 0036 2E2B cmp r3, #46 3480 0038 55D0 beq .L355 1524:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN /* LFN configuration */ 3481 .loc 1 1524 0 is_stmt 1 discriminator 2 3482 003a 02F03F02 and r2, r2, #63 3483 .LVL544: 1526:../../../Source/third_party/fatfs/src/ff.c **** ord = 0xFF; 3484 .loc 1 1526 0 discriminator 2 3485 003e 082A cmp r2, #8 3486 0040 14BF ite ne 3487 0042 0021 movne r1, #0 3488 0044 0121 moveq r1, #1 3489 0046 4145 cmp r1, r8 3490 0048 4FD1 bne .L356 1529:../../../Source/third_party/fatfs/src/ff.c **** if (c & LLE) { /* Is it start of LFN sequence? */ 3491 .loc 1 1529 0 3492 004a 0F2A cmp r2, #15 3493 004c 40D1 bne .L340 1530:../../../Source/third_party/fatfs/src/ff.c **** sum = dir[LDIR_Chksum]; 3494 .loc 1 1530 0 3495 004e 13F0400F tst r3, #64 3496 0052 06D0 beq .L341 1531:../../../Source/third_party/fatfs/src/ff.c **** c &= ~LLE; ord = c; 3497 .loc 1 1531 0 3498 0054 90F80D90 ldrb r9, [r0, #13] @ zero_extendqisi2 3499 .LVL545: 1532:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = dj->index; 3500 .loc 1 1532 0 3501 0058 03F0BF03 and r3, r3, #191 3502 .LVL546: 1533:../../../Source/third_party/fatfs/src/ff.c **** } 3503 .loc 1 1533 0 3504 005c E288 ldrh r2, [r4, #6] 3505 005e 2284 strh r2, [r4, #32] @ movhi 3506 .LVL547: 3507 0060 03E0 b .L342 3508 .LVL548: 3509 .L341: 1536:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 3510 .loc 1 1536 0 3511 0062 9D42 cmp r5, r3 3512 0064 18BF it ne 3513 0066 3D46 movne r5, r7 3514 .LVL549: 3515 0068 42D1 bne .L339 3516 .LVL550: 3517 .L342: 1536:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 3518 .loc 1 1536 0 is_stmt 0 discriminator 1 3519 006a 90F80DE0 ldrb lr, [r0, #13] @ zero_extendqisi2 3520 006e CE45 cmp lr, r9 3521 0070 3DD1 bne .L358 1536:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 3522 .loc 1 1536 0 discriminator 3 3523 0072 D4F81C90 ldr r9, [r4, #28] 3524 .LVL551: 3525 .LBB44: 3526 .LBB45: 1317:../../../Source/third_party/fatfs/src/ff.c **** 3527 .loc 1 1317 0 is_stmt 1 discriminator 3 3528 0076 0278 ldrb r2, [r0] @ zero_extendqisi2 3529 0078 02F03F02 and r2, r2, #63 3530 007c 013A subs r2, r2, #1 3531 007e 02EB4206 add r6, r2, r2, lsl #1 3532 0082 02EB8606 add r6, r2, r6, lsl #2 3533 .LVL552: 3534 0086 5D46 mov r5, fp 1319:../../../Source/third_party/fatfs/src/ff.c **** do { 3535 .loc 1 1319 0 discriminator 3 3536 0088 4FF0010C mov ip, #1 1326:../../../Source/third_party/fatfs/src/ff.c **** } 3537 .loc 1 1326 0 discriminator 3 3538 008c 6146 mov r1, ip 3539 .LVL553: 3540 .L346: 1321:../../../Source/third_party/fatfs/src/ff.c **** if (wc) { /* Last char has not been processed */ 3541 .loc 1 1321 0 3542 008e 15F8012B ldrb r2, [r5], #1 @ zero_extendqisi2 3543 .LVL554: 3544 0092 00EB020C add ip, r0, r2 3545 0096 9CF801C0 ldrb ip, [ip, #1] @ zero_extendqisi2 3546 009a 825C ldrb r2, [r0, r2] @ zero_extendqisi2 3547 009c 42EA0C22 orr r2, r2, ip, lsl #8 3548 .LVL555: 1322:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ 3549 .loc 1 1322 0 3550 00a0 31B1 cbz r1, .L343 1323:../../../Source/third_party/fatfs/src/ff.c **** lfnbuf[i++] = wc = uc; /* Store it */ 3551 .loc 1 1323 0 3552 00a2 FE2E cmp r6, #254 3553 00a4 36D8 bhi .L344 3554 .LVL556: 1324:../../../Source/third_party/fatfs/src/ff.c **** } else { 3555 .loc 1 1324 0 3556 00a6 29F81620 strh r2, [r9, r6, lsl #1] @ movhi 3557 00aa 1146 mov r1, r2 3558 00ac 0136 adds r6, r6, #1 3559 .LVL557: 3560 00ae 03E0 b .L345 3561 .LVL558: 3562 .L343: 1326:../../../Source/third_party/fatfs/src/ff.c **** } 3563 .loc 1 1326 0 3564 00b0 4FF6FF7C movw ip, #65535 3565 00b4 6245 cmp r2, ip 3566 00b6 2DD1 bne .L344 3567 .LVL559: 3568 .L345: 1328:../../../Source/third_party/fatfs/src/ff.c **** 3569 .loc 1 1328 0 3570 00b8 5545 cmp r5, r10 3571 00ba E8D1 bne .L346 1330:../../../Source/third_party/fatfs/src/ff.c **** if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ 3572 .loc 1 1330 0 3573 00bc 0278 ldrb r2, [r0] @ zero_extendqisi2 3574 .LVL560: 3575 00be 12F0400F tst r2, #64 3576 00c2 23D0 beq .L347 1331:../../../Source/third_party/fatfs/src/ff.c **** lfnbuf[i] = 0; 3577 .loc 1 1331 0 3578 00c4 FE2E cmp r6, #254 3579 00c6 25D8 bhi .L344 1332:../../../Source/third_party/fatfs/src/ff.c **** } 3580 .loc 1 1332 0 3581 00c8 0022 movs r2, #0 3582 00ca 29F81620 strh r2, [r9, r6, lsl #1] @ movhi 3583 00ce 1DE0 b .L347 3584 .LVL561: 3585 .L340: 3586 .LBE45: 3587 .LBE44: 1538:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = 0xFFFF; /* It has no LFN. */ 3588 .loc 1 1538 0 3589 00d0 1DB9 cbnz r5, .L348 1538:../../../Source/third_party/fatfs/src/ff.c **** dj->lfn_idx = 0xFFFF; /* It has no LFN. */ 3590 .loc 1 1538 0 is_stmt 0 discriminator 1 3591 00d2 FFF7FEFF bl sum_sfn 3592 .LVL562: 3593 00d6 4845 cmp r0, r9 3594 00d8 23D0 beq .L360 3595 .L348: 1539:../../../Source/third_party/fatfs/src/ff.c **** break; 3596 .loc 1 1539 0 is_stmt 1 3597 00da 4FF6FF73 movw r3, #65535 3598 00de 2384 strh r3, [r4, #32] @ movhi 3599 00e0 1FE0 b .L360 3600 .LVL563: 3601 .L354: 1527:../../../Source/third_party/fatfs/src/ff.c **** } else { 3602 .loc 1 1527 0 3603 00e2 3D46 mov r5, r7 3604 .LVL564: 3605 00e4 04E0 b .L339 3606 .LVL565: 3607 .L355: 3608 00e6 3D46 mov r5, r7 3609 .LVL566: 3610 00e8 02E0 b .L339 3611 .LVL567: 3612 .L356: 3613 00ea 3D46 mov r5, r7 3614 .LVL568: 3615 00ec 00E0 b .L339 3616 .LVL569: 3617 .L358: 1536:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 3618 .loc 1 1536 0 3619 00ee 3D46 mov r5, r7 3620 .LVL570: 3621 .L339: 1547:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3622 .loc 1 1547 0 3623 00f0 2046 mov r0, r4 3624 .LVL571: 3625 00f2 0021 movs r1, #0 3626 00f4 FFF7FEFF bl dir_next 3627 .LVL572: 1548:../../../Source/third_party/fatfs/src/ff.c **** } 3628 .loc 1 1548 0 3629 00f8 0346 mov r3, r0 3630 00fa 80B9 cbnz r0, .L359 3631 .LVL573: 3632 .L337: 1518:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj->fs, dj->sect); 3633 .loc 1 1518 0 3634 00fc 2169 ldr r1, [r4, #16] 3635 00fe 0029 cmp r1, #0 3636 0100 8CD1 bne .L350 3637 0102 1E46 mov r6, r3 1551:../../../Source/third_party/fatfs/src/ff.c **** 3638 .loc 1 1551 0 3639 0104 6BB1 cbz r3, .L360 3640 .L352: 3641 .LVL574: 1551:../../../Source/third_party/fatfs/src/ff.c **** 3642 .loc 1 1551 0 is_stmt 0 discriminator 1 3643 0106 0023 movs r3, #0 3644 0108 2361 str r3, [r4, #16] 3645 010a 0AE0 b .L360 3646 .LVL575: 3647 .L347: 1536:../../../Source/third_party/fatfs/src/ff.c **** } else { /* An SFN entry is found */ 3648 .loc 1 1536 0 is_stmt 1 3649 010c 013B subs r3, r3, #1 3650 .LVL576: 3651 010e DDB2 uxtb r5, r3 3652 .LVL577: 3653 0110 F146 mov r9, lr 3654 .LVL578: 3655 0112 EDE7 b .L339 3656 .LVL579: 3657 .L344: 3658 0114 F146 mov r9, lr 3659 .LVL580: 3660 0116 3D46 mov r5, r7 3661 0118 EAE7 b .L339 3662 .LVL581: 3663 .L353: 1523:../../../Source/third_party/fatfs/src/ff.c **** a = dir[DIR_Attr] & AM_MASK; 3664 .loc 1 1523 0 3665 011a 0426 movs r6, #4 3666 011c F3E7 b .L352 3667 .LVL582: 3668 .L359: 1547:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3669 .loc 1 1547 0 3670 011e 0646 mov r6, r0 3671 0120 F1E7 b .L352 3672 .LVL583: 3673 .L360: 1554:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE <= 1 || _USE_LABEL || _FS_RPATH >= 2 */ 3674 .loc 1 1554 0 3675 0122 3046 mov r0, r6 3676 0124 BDE8F88F pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} 3677 .LVL584: 3678 .L367: 3679 .align 2 3680 .L366: 3681 0128 00000000 .word .LANCHOR2 3682 .cfi_endproc 3683 .LFE23: 3685 .section .text.dir_remove,"ax",%progbits 3686 .align 2 3687 .thumb 3688 .thumb_func 3690 dir_remove: 3691 .LFB25: 1645:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3692 .loc 1 1645 0 3693 .cfi_startproc 3694 @ args = 0, pretend = 0, frame = 0 3695 @ frame_needed = 0, uses_anonymous_args = 0 3696 .LVL585: 3697 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 3698 .cfi_def_cfa_offset 24 3699 .cfi_offset 4, -24 3700 .cfi_offset 5, -20 3701 .cfi_offset 6, -16 3702 .cfi_offset 7, -12 3703 .cfi_offset 8, -8 3704 .cfi_offset 14, -4 3705 0004 0446 mov r4, r0 1650:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, (WORD)((dj->lfn_idx == 0xFFFF) ? i : dj->lfn_idx)); /* Goto the SFN or top of th 3706 .loc 1 1650 0 3707 0006 C588 ldrh r5, [r0, #6] 3708 .LVL586: 1651:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3709 .loc 1 1651 0 3710 0008 018C ldrh r1, [r0, #32] 3711 000a 4FF6FF73 movw r3, #65535 3712 000e 9942 cmp r1, r3 3713 0010 08BF it eq 3714 0012 2946 moveq r1, r5 3715 0014 FFF7FEFF bl dir_sdi 3716 .LVL587: 1652:../../../Source/third_party/fatfs/src/ff.c **** do { 3717 .loc 1 1652 0 3718 0018 0346 mov r3, r0 3719 001a D0B9 cbnz r0, .L370 1656:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 3720 .loc 1 1656 0 3721 001c E527 movs r7, #229 1657:../../../Source/third_party/fatfs/src/ff.c **** if (dj->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ 3722 .loc 1 1657 0 3723 001e 0126 movs r6, #1 1659:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 3724 .loc 1 1659 0 3725 0020 4FF00008 mov r8, #0 3726 .L373: 1654:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3727 .loc 1 1654 0 3728 0024 2068 ldr r0, [r4] 3729 .LVL588: 3730 0026 2169 ldr r1, [r4, #16] 3731 0028 FFF7FEFF bl move_window 3732 .LVL589: 1655:../../../Source/third_party/fatfs/src/ff.c **** *dj->dir = DDE; /* Mark the entry "deleted" */ 3733 .loc 1 1655 0 3734 002c 0346 mov r3, r0 3735 002e 68B9 cbnz r0, .L371 1656:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 3736 .loc 1 1656 0 3737 0030 6269 ldr r2, [r4, #20] 3738 0032 1770 strb r7, [r2] 1657:../../../Source/third_party/fatfs/src/ff.c **** if (dj->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ 3739 .loc 1 1657 0 3740 0034 2268 ldr r2, [r4] 3741 0036 1671 strb r6, [r2, #4] 1658:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 3742 .loc 1 1658 0 3743 0038 E288 ldrh r2, [r4, #6] 3744 003a AA42 cmp r2, r5 3745 003c 09D2 bcs .L370 1659:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 3746 .loc 1 1659 0 3747 003e 2046 mov r0, r4 3748 .LVL590: 3749 0040 4146 mov r1, r8 3750 0042 FFF7FEFF bl dir_next 3751 .LVL591: 1660:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_INT_ERR; 3752 .loc 1 1660 0 3753 0046 0346 mov r3, r0 3754 0048 0028 cmp r0, #0 3755 004a EBD0 beq .L373 3756 .L371: 3757 .LVL592: 1661:../../../Source/third_party/fatfs/src/ff.c **** } 3758 .loc 1 1661 0 3759 004c 042B cmp r3, #4 3760 004e 08BF it eq 3761 0050 0223 moveq r3, #2 3762 .LVL593: 3763 .L370: 1676:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 3764 .loc 1 1676 0 3765 0052 1846 mov r0, r3 3766 0054 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 3767 .cfi_endproc 3768 .LFE25: 3770 .section .text.remove_chain,"ax",%progbits 3771 .align 2 3772 .thumb 3773 .thumb_func 3775 remove_chain: 3776 .LFB10: 952:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3777 .loc 1 952 0 3778 .cfi_startproc 3779 @ args = 0, pretend = 0, frame = 0 3780 @ frame_needed = 0, uses_anonymous_args = 0 3781 .LVL594: 3782 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 3783 .cfi_def_cfa_offset 24 3784 .cfi_offset 4, -24 3785 .cfi_offset 5, -20 3786 .cfi_offset 6, -16 3787 .cfi_offset 7, -12 3788 .cfi_offset 8, -8 3789 .cfi_offset 14, -4 3790 0004 0D46 mov r5, r1 959:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 3791 .loc 1 959 0 3792 0006 0129 cmp r1, #1 3793 0008 27D9 bls .L381 3794 000a 0446 mov r4, r0 959:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 3795 .loc 1 959 0 is_stmt 0 discriminator 1 3796 000c 8369 ldr r3, [r0, #24] 3797 000e 9942 cmp r1, r3 3798 0010 25D2 bcs .L382 969:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3799 .loc 1 969 0 is_stmt 1 3800 0012 0027 movs r7, #0 973:../../../Source/third_party/fatfs/src/ff.c **** } 3801 .loc 1 973 0 3802 0014 4FF00108 mov r8, #1 3803 0018 1AE0 b .L378 3804 .LVL595: 3805 .L380: 965:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 0) break; /* Empty cluster? */ 3806 .loc 1 965 0 3807 001a 2046 mov r0, r4 3808 001c 2946 mov r1, r5 3809 001e FFF7FEFF bl get_fat 3810 .LVL596: 966:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ 3811 .loc 1 966 0 3812 0022 0646 mov r6, r0 3813 0024 E8B1 cbz r0, .L383 967:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ 3814 .loc 1 967 0 3815 0026 0128 cmp r0, #1 3816 0028 1DD0 beq .L384 968:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ 3817 .loc 1 968 0 3818 002a B0F1FF3F cmp r0, #-1 3819 002e 1CD0 beq .L385 969:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3820 .loc 1 969 0 3821 0030 2046 mov r0, r4 3822 .LVL597: 3823 0032 2946 mov r1, r5 3824 0034 3A46 mov r2, r7 3825 0036 FFF7FEFF bl put_fat 3826 .LVL598: 970:../../../Source/third_party/fatfs/src/ff.c **** if (fs->free_clust != 0xFFFFFFFF) { /* Update FSInfo */ 3827 .loc 1 970 0 3828 003a 0346 mov r3, r0 3829 003c B0B9 cbnz r0, .L377 971:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust++; 3830 .loc 1 971 0 3831 003e 2369 ldr r3, [r4, #16] 3832 0040 B3F1FF3F cmp r3, #-1 3833 0044 03D0 beq .L379 972:../../../Source/third_party/fatfs/src/ff.c **** fs->fsi_flag = 1; 3834 .loc 1 972 0 3835 0046 0133 adds r3, r3, #1 3836 0048 2361 str r3, [r4, #16] 973:../../../Source/third_party/fatfs/src/ff.c **** } 3837 .loc 1 973 0 3838 004a 84F80580 strb r8, [r4, #5] 3839 .L379: 952:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3840 .loc 1 952 0 3841 004e 3546 mov r5, r6 3842 .LVL599: 3843 .L378: 964:../../../Source/third_party/fatfs/src/ff.c **** nxt = get_fat(fs, clst); /* Get cluster status */ 3844 .loc 1 964 0 3845 0050 A369 ldr r3, [r4, #24] 3846 0052 9D42 cmp r5, r3 3847 0054 E1D3 bcc .L380 3848 0056 0023 movs r3, #0 3849 0058 08E0 b .L377 3850 .LVL600: 3851 .L381: 960:../../../Source/third_party/fatfs/src/ff.c **** 3852 .loc 1 960 0 3853 005a 0223 movs r3, #2 3854 005c 06E0 b .L377 3855 .L382: 3856 005e 0223 movs r3, #2 3857 0060 04E0 b .L377 3858 .LVL601: 3859 .L383: 3860 0062 0023 movs r3, #0 3861 0064 02E0 b .L377 3862 .L384: 967:../../../Source/third_party/fatfs/src/ff.c **** if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ 3863 .loc 1 967 0 3864 0066 0223 movs r3, #2 3865 0068 00E0 b .L377 3866 .L385: 968:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ 3867 .loc 1 968 0 3868 006a 0123 movs r3, #1 3869 .LVL602: 3870 .L377: 990:../../../Source/third_party/fatfs/src/ff.c **** #endif 3871 .loc 1 990 0 3872 006c 1846 mov r0, r3 3873 006e BDE8F081 pop {r4, r5, r6, r7, r8, pc} 3874 .cfi_endproc 3875 .LFE10: 3877 0072 00BF .section .text.gen_numname,"ax",%progbits 3878 .align 2 3879 .global gen_numname 3880 .thumb 3881 .thumb_func 3883 gen_numname: 3884 .LFB20: 1383:../../../Source/third_party/fatfs/src/ff.c **** BYTE ns[8], c; 3885 .loc 1 1383 0 3886 .cfi_startproc 3887 @ args = 0, pretend = 0, frame = 8 3888 @ frame_needed = 0, uses_anonymous_args = 0 3889 .LVL603: 3890 0000 70B5 push {r4, r5, r6, lr} 3891 .cfi_def_cfa_offset 16 3892 .cfi_offset 4, -16 3893 .cfi_offset 5, -12 3894 .cfi_offset 6, -8 3895 .cfi_offset 14, -4 3896 0002 82B0 sub sp, sp, #8 3897 .cfi_def_cfa_offset 24 3898 0004 0546 mov r5, r0 3899 0006 1646 mov r6, r2 3900 0008 1C46 mov r4, r3 1388:../../../Source/third_party/fatfs/src/ff.c **** 3901 .loc 1 1388 0 3902 000a 0B22 movs r2, #11 3903 .LVL604: 3904 000c FFF7FEFF bl mem_cpy 3905 .LVL605: 1390:../../../Source/third_party/fatfs/src/ff.c **** do seq = (seq >> 1) + (seq << 15) + (WORD)*lfn++; while (*lfn); 3906 .loc 1 1390 0 3907 0010 052C cmp r4, #5 3908 0012 09D9 bls .L388 3909 .LVL606: 3910 .L400: 1391:../../../Source/third_party/fatfs/src/ff.c **** } 3911 .loc 1 1391 0 discriminator 1 3912 0014 E303 lsls r3, r4, #15 3913 0016 43EA5404 orr r4, r3, r4, lsr #1 3914 .LVL607: 3915 001a 36F8023B ldrh r3, [r6], #2 3916 .LVL608: 3917 001e 1C44 add r4, r4, r3 3918 0020 A4B2 uxth r4, r4 3919 .LVL609: 3920 0022 3388 ldrh r3, [r6] 3921 0024 002B cmp r3, #0 3922 0026 F5D1 bne .L400 3923 .LVL610: 3924 .L388: 3925 0028 02A8 add r0, sp, #8 1383:../../../Source/third_party/fatfs/src/ff.c **** BYTE ns[8], c; 3926 .loc 1 1383 0 3927 002a 0722 movs r2, #7 3928 .L391: 3929 .LVL611: 1397:../../../Source/third_party/fatfs/src/ff.c **** if (c > '9') c += 7; 3930 .loc 1 1397 0 3931 002c 04F00F01 and r1, r4, #15 3932 0030 01F13003 add r3, r1, #48 3933 .LVL612: 1398:../../../Source/third_party/fatfs/src/ff.c **** ns[i--] = c; 3934 .loc 1 1398 0 3935 0034 392B cmp r3, #57 3936 0036 88BF it hi 3937 0038 01F13703 addhi r3, r1, #55 3938 .LVL613: 1399:../../../Source/third_party/fatfs/src/ff.c **** seq /= 16; 3939 .loc 1 1399 0 3940 003c 013A subs r2, r2, #1 3941 .LVL614: 3942 003e 00F8013D strb r3, [r0, #-1]! 3943 .LVL615: 1401:../../../Source/third_party/fatfs/src/ff.c **** ns[i] = '~'; 3944 .loc 1 1401 0 3945 0042 2409 lsrs r4, r4, #4 3946 .LVL616: 3947 0044 F2D1 bne .L391 1399:../../../Source/third_party/fatfs/src/ff.c **** seq /= 16; 3948 .loc 1 1399 0 3949 0046 1446 mov r4, r2 1402:../../../Source/third_party/fatfs/src/ff.c **** 3950 .loc 1 1402 0 3951 0048 7E21 movs r1, #126 3952 004a 02AB add r3, sp, #8 3953 .LVL617: 3954 004c 1344 add r3, r3, r2 3955 004e 03F8081C strb r1, [r3, #-8] 3956 .LVL618: 1405:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(dst[j])) { 3957 .loc 1 1405 0 3958 0052 62B1 cbz r2, .L396 3959 0054 2B78 ldrb r3, [r5] @ zero_extendqisi2 3960 0056 202B cmp r3, #32 3961 0058 0BD0 beq .L397 3962 005a 2946 mov r1, r5 3963 005c 0023 movs r3, #0 3964 .LVL619: 3965 .L393: 1405:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(dst[j])) { 3966 .loc 1 1405 0 is_stmt 0 discriminator 2 3967 005e 0133 adds r3, r3, #1 3968 .LVL620: 3969 0060 A342 cmp r3, r4 3970 0062 08D0 beq .L398 1405:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(dst[j])) { 3971 .loc 1 1405 0 discriminator 3 3972 0064 11F8010F ldrb r0, [r1, #1]! @ zero_extendqisi2 3973 0068 2028 cmp r0, #32 3974 006a F8D1 bne .L393 3975 006c 04E0 b .L392 3976 .LVL621: 3977 .L396: 1405:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(dst[j])) { 3978 .loc 1 1405 0 3979 006e 1346 mov r3, r2 3980 0070 02E0 b .L392 3981 .L397: 3982 0072 0023 movs r3, #0 3983 0074 00E0 b .L392 3984 .LVL622: 3985 .L398: 3986 0076 1346 mov r3, r2 3987 .LVL623: 3988 .L392: 3989 0078 E818 adds r0, r5, r3 1412:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 8); 3990 .loc 1 1412 0 is_stmt 1 3991 007a 2024 movs r4, #32 3992 .L395: 3993 .LVL624: 3994 007c 0133 adds r3, r3, #1 3995 .LVL625: 3996 007e 072A cmp r2, #7 3997 0080 05D8 bhi .L399 3998 .LVL626: 1412:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 8); 3999 .loc 1 1412 0 is_stmt 0 discriminator 1 4000 0082 02A9 add r1, sp, #8 4001 0084 1144 add r1, r1, r2 4002 0086 11F8081C ldrb r1, [r1, #-8] @ zero_extendqisi2 4003 008a 0132 adds r2, r2, #1 4004 .LVL627: 4005 008c 00E0 b .L394 4006 .L399: 1412:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 8); 4007 .loc 1 1412 0 4008 008e 2146 mov r1, r4 4009 .L394: 1412:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 8); 4010 .loc 1 1412 0 discriminator 4 4011 0090 00F8011B strb r1, [r0], #1 1413:../../../Source/third_party/fatfs/src/ff.c **** } 4012 .loc 1 1413 0 is_stmt 1 discriminator 4 4013 0094 072B cmp r3, #7 4014 0096 F1D9 bls .L395 1414:../../../Source/third_party/fatfs/src/ff.c **** #endif 4015 .loc 1 1414 0 4016 0098 02B0 add sp, sp, #8 4017 .cfi_def_cfa_offset 16 4018 @ sp needed 4019 009a 70BD pop {r4, r5, r6, pc} 4020 .cfi_endproc 4021 .LFE20: 4023 .section .text.dir_register,"ax",%progbits 4024 .align 2 4025 .thumb 4026 .thumb_func 4028 dir_register: 4029 .LFB24: 1567:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 4030 .loc 1 1567 0 4031 .cfi_startproc 4032 @ args = 0, pretend = 0, frame = 24 4033 @ frame_needed = 0, uses_anonymous_args = 0 4034 .LVL628: 4035 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 4036 .cfi_def_cfa_offset 36 4037 .cfi_offset 4, -36 4038 .cfi_offset 5, -32 4039 .cfi_offset 6, -28 4040 .cfi_offset 7, -24 4041 .cfi_offset 8, -20 4042 .cfi_offset 9, -16 4043 .cfi_offset 10, -12 4044 .cfi_offset 11, -8 4045 .cfi_offset 14, -4 4046 0004 87B0 sub sp, sp, #28 4047 .cfi_def_cfa_offset 64 4048 0006 0446 mov r4, r0 1575:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(sn, fn, 12); 4049 .loc 1 1575 0 4050 0008 8769 ldr r7, [r0, #24] 4051 .LVL629: 4052 000a C669 ldr r6, [r0, #28] 4053 .LVL630: 1576:../../../Source/third_party/fatfs/src/ff.c **** 4054 .loc 1 1576 0 4055 000c 03A8 add r0, sp, #12 4056 .LVL631: 4057 000e 3946 mov r1, r7 4058 0010 0C22 movs r2, #12 4059 0012 FFF7FEFF bl mem_cpy 4060 .LVL632: 1581:../../../Source/third_party/fatfs/src/ff.c **** fn[NS] = 0; dj->lfn = 0; /* Find only SFN */ 4061 .loc 1 1581 0 4062 0016 9DF81730 ldrb r3, [sp, #23] @ zero_extendqisi2 4063 001a 13F0010F tst r3, #1 4064 001e 1DD0 beq .L408 1582:../../../Source/third_party/fatfs/src/ff.c **** for (n = 1; n < 100; n++) { 4065 .loc 1 1582 0 4066 0020 0023 movs r3, #0 4067 0022 FB72 strb r3, [r7, #11] 4068 0024 E361 str r3, [r4, #28] 4069 .LVL633: 1583:../../../Source/third_party/fatfs/src/ff.c **** gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ 4070 .loc 1 1583 0 4071 0026 0125 movs r5, #1 4072 .LVL634: 4073 .L410: 1584:../../../Source/third_party/fatfs/src/ff.c **** res = dir_find(dj); /* Check if the name collides with existing SFN */ 4074 .loc 1 1584 0 4075 0028 3846 mov r0, r7 4076 002a 03A9 add r1, sp, #12 4077 002c 3246 mov r2, r6 4078 002e 2B46 mov r3, r5 4079 0030 FFF7FEFF bl gen_numname 4080 .LVL635: 1585:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 4081 .loc 1 1585 0 4082 0034 2046 mov r0, r4 4083 0036 FFF7FEFF bl dir_find 4084 .LVL636: 1586:../../../Source/third_party/fatfs/src/ff.c **** } 4085 .loc 1 1586 0 4086 003a 28B9 cbnz r0, .L409 1583:../../../Source/third_party/fatfs/src/ff.c **** gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ 4087 .loc 1 1583 0 discriminator 2 4088 003c 0135 adds r5, r5, #1 4089 .LVL637: 4090 003e ADB2 uxth r5, r5 4091 .LVL638: 4092 0040 642D cmp r5, #100 4093 0042 F1D1 bne .L410 1588:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ 4094 .loc 1 1588 0 4095 0044 0720 movs r0, #7 4096 0046 D9E0 b .L443 4097 .LVL639: 4098 .L409: 4099 0048 642D cmp r5, #100 4100 004a 00F0BE80 beq .L431 1589:../../../Source/third_party/fatfs/src/ff.c **** fn[NS] = sn[NS]; dj->lfn = lfn; 4101 .loc 1 1589 0 4102 004e 0428 cmp r0, #4 4103 0050 40F0BD80 bne .L432 1590:../../../Source/third_party/fatfs/src/ff.c **** } 4104 .loc 1 1590 0 4105 0054 9DF81730 ldrb r3, [sp, #23] @ zero_extendqisi2 4106 0058 FB72 strb r3, [r7, #11] 4107 005a E661 str r6, [r4, #28] 4108 .LVL640: 4109 .L408: 1593:../../../Source/third_party/fatfs/src/ff.c **** for (n = 0; lfn[n]; n++) ; 4110 .loc 1 1593 0 4111 005c 9DF81730 ldrb r3, [sp, #23] @ zero_extendqisi2 4112 0060 13F0020F tst r3, #2 4113 0064 13D0 beq .L433 4114 .LVL641: 1594:../../../Source/third_party/fatfs/src/ff.c **** ne = (n + 25) / 13; 4115 .loc 1 1594 0 discriminator 1 4116 0066 3388 ldrh r3, [r6] 4117 0068 3BB1 cbz r3, .L434 1594:../../../Source/third_party/fatfs/src/ff.c **** ne = (n + 25) / 13; 4118 .loc 1 1594 0 is_stmt 0 4119 006a 0023 movs r3, #0 4120 .LVL642: 4121 .L414: 1594:../../../Source/third_party/fatfs/src/ff.c **** ne = (n + 25) / 13; 4122 .loc 1 1594 0 discriminator 3 4123 006c 0133 adds r3, r3, #1 4124 .LVL643: 4125 006e 9BB2 uxth r3, r3 4126 .LVL644: 4127 0070 36F81320 ldrh r2, [r6, r3, lsl #1] 4128 0074 002A cmp r2, #0 4129 0076 F9D1 bne .L414 4130 0078 00E0 b .L413 4131 .LVL645: 4132 .L434: 1594:../../../Source/third_party/fatfs/src/ff.c **** ne = (n + 25) / 13; 4133 .loc 1 1594 0 4134 007a 0023 movs r3, #0 4135 .LVL646: 4136 .L413: 1595:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Otherwise allocate an entry for an SFN */ 4137 .loc 1 1595 0 is_stmt 1 4138 007c 1933 adds r3, r3, #25 4139 007e 614D ldr r5, .L448 4140 0080 85FB0325 smull r2, r5, r5, r3 4141 0084 DB17 asrs r3, r3, #31 4142 0086 C3EBA505 rsb r5, r3, r5, asr #2 4143 008a ADB2 uxth r5, r5 4144 .LVL647: 4145 008c 00E0 b .L412 4146 .LVL648: 4147 .L433: 1597:../../../Source/third_party/fatfs/src/ff.c **** } 4148 .loc 1 1597 0 4149 008e 0125 movs r5, #1 4150 .L412: 4151 .LVL649: 4152 .LBB52: 4153 .LBB53: 1214:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4154 .loc 1 1214 0 4155 0090 2046 mov r0, r4 4156 0092 0021 movs r1, #0 4157 0094 FFF7FEFF bl dir_sdi 4158 .LVL650: 1215:../../../Source/third_party/fatfs/src/ff.c **** n = 0; 4159 .loc 1 1215 0 4160 0098 0346 mov r3, r0 4161 009a 0028 cmp r0, #0 4162 009c 40F0AD80 bne .L415 4163 00a0 0026 movs r6, #0 4164 .LVL651: 1223:../../../Source/third_party/fatfs/src/ff.c **** } 4165 .loc 1 1223 0 4166 00a2 B046 mov r8, r6 1225:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 4167 .loc 1 1225 0 4168 00a4 0127 movs r7, #1 4169 .LVL652: 4170 .L419: 1218:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 4171 .loc 1 1218 0 4172 00a6 2068 ldr r0, [r4] 4173 .LVL653: 4174 00a8 2169 ldr r1, [r4, #16] 4175 00aa FFF7FEFF bl move_window 4176 .LVL654: 1219:../../../Source/third_party/fatfs/src/ff.c **** if (dj->dir[0] == DDE || dj->dir[0] == 0) { /* Is it a blank entry? */ 4177 .loc 1 1219 0 4178 00ae 0346 mov r3, r0 4179 00b0 0028 cmp r0, #0 4180 00b2 40F0A280 bne .L415 1220:../../../Source/third_party/fatfs/src/ff.c **** if (++n == nent) break; /* A block of contiguous entry is found */ 4181 .loc 1 1220 0 4182 00b6 6369 ldr r3, [r4, #20] 4183 00b8 1B78 ldrb r3, [r3] @ zero_extendqisi2 4184 00ba E52B cmp r3, #229 4185 00bc 00D0 beq .L416 4186 00be 1BB9 cbnz r3, .L435 4187 .L416: 1221:../../../Source/third_party/fatfs/src/ff.c **** } else { 4188 .loc 1 1221 0 4189 00c0 0136 adds r6, r6, #1 4190 .LVL655: 4191 00c2 B542 cmp r5, r6 4192 00c4 01D1 bne .L417 4193 00c6 83E0 b .L418 4194 .L435: 1223:../../../Source/third_party/fatfs/src/ff.c **** } 4195 .loc 1 1223 0 4196 00c8 4646 mov r6, r8 4197 .LVL656: 4198 .L417: 1225:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 4199 .loc 1 1225 0 4200 00ca 2046 mov r0, r4 4201 .LVL657: 4202 00cc 3946 mov r1, r7 4203 00ce FFF7FEFF bl dir_next 4204 .LVL658: 1226:../../../Source/third_party/fatfs/src/ff.c **** } 4205 .loc 1 1226 0 4206 00d2 0346 mov r3, r0 4207 00d4 0028 cmp r0, #0 4208 00d6 E6D0 beq .L419 4209 00d8 8FE0 b .L415 4210 .LVL659: 4211 .L429: 4212 .LBE53: 4213 .LBE52: 1602:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4214 .loc 1 1602 0 4215 00da E188 ldrh r1, [r4, #6] 4216 00dc 491B subs r1, r1, r5 4217 00de 2046 mov r0, r4 4218 00e0 89B2 uxth r1, r1 4219 00e2 FFF7FEFF bl dir_sdi 4220 .LVL660: 1603:../../../Source/third_party/fatfs/src/ff.c **** sum = sum_sfn(dj->fn); /* Sum value of the SFN tied to the LFN */ 4221 .loc 1 1603 0 4222 00e6 0346 mov r3, r0 4223 00e8 0028 cmp r0, #0 4224 00ea 40F08480 bne .L420 1604:../../../Source/third_party/fatfs/src/ff.c **** do { /* Store LFN entries in bottom first */ 4225 .loc 1 1604 0 4226 00ee A069 ldr r0, [r4, #24] 4227 .LVL661: 4228 00f0 FFF7FEFF bl sum_sfn 4229 .LVL662: 4230 00f4 0190 str r0, [sp, #4] 4231 .LVL663: 4232 .LBB54: 4233 .LBB55: 1353:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Type] = 0; 4234 .loc 1 1353 0 4235 00f6 0F27 movs r7, #15 4236 00f8 434B ldr r3, .L448+4 4237 00fa 03F10D06 add r6, r3, #13 4238 .LVL664: 4239 .L426: 4240 .LBE55: 4241 .LBE54: 1606:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 4242 .loc 1 1606 0 4243 00fe 2068 ldr r0, [r4] 4244 0100 2169 ldr r1, [r4, #16] 4245 0102 FFF7FEFF bl move_window 4246 .LVL665: 1607:../../../Source/third_party/fatfs/src/ff.c **** fit_lfn(dj->lfn, dj->dir, (BYTE)ne, sum); 4247 .loc 1 1607 0 4248 0106 0346 mov r3, r0 4249 0108 0028 cmp r0, #0 4250 010a 74D1 bne .L420 1608:../../../Source/third_party/fatfs/src/ff.c **** dj->fs->wflag = 1; 4251 .loc 1 1608 0 4252 010c D4F81C90 ldr r9, [r4, #28] 4253 0110 6069 ldr r0, [r4, #20] 4254 .LVL666: 4255 0112 5FFA85FB uxtb fp, r5 4256 .LVL667: 4257 .LBB58: 4258 .LBB56: 1352:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ 4259 .loc 1 1352 0 4260 0116 9DF80430 ldrb r3, [sp, #4] @ zero_extendqisi2 4261 011a 4373 strb r3, [r0, #13] 1353:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Type] = 0; 4262 .loc 1 1353 0 4263 011c C772 strb r7, [r0, #11] 1354:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LDIR_FstClusLO, 0); 4264 .loc 1 1354 0 4265 011e 0023 movs r3, #0 4266 0120 0373 strb r3, [r0, #12] 1355:../../../Source/third_party/fatfs/src/ff.c **** 4267 .loc 1 1355 0 4268 0122 8376 strb r3, [r0, #26] 4269 0124 C376 strb r3, [r0, #27] 1357:../../../Source/third_party/fatfs/src/ff.c **** s = wc = 0; 4270 .loc 1 1357 0 4271 0126 0BF1FF32 add r2, fp, #-1 4272 012a 02EB4201 add r1, r2, r2, lsl #1 4273 012e 02EB8101 add r1, r2, r1, lsl #2 4274 .LVL668: 4275 0132 354A ldr r2, .L448+4 1360:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LfnOfs[s], wc); /* Put it */ 4276 .loc 1 1360 0 4277 0134 4FF6FF7E movw lr, #65535 1361:../../../Source/third_party/fatfs/src/ff.c **** if (!wc) wc = 0xFFFF; /* Padding chars following last char */ 4278 .loc 1 1361 0 4279 0138 4FF0FF0A mov r10, #255 4280 .LVL669: 4281 .L423: 1360:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LfnOfs[s], wc); /* Put it */ 4282 .loc 1 1360 0 4283 013c 7345 cmp r3, lr 4284 013e 4BD0 beq .L421 4285 0140 01F1010C add ip, r1, #1 4286 .LVL670: 4287 0144 39F81130 ldrh r3, [r9, r1, lsl #1] 4288 .LVL671: 1361:../../../Source/third_party/fatfs/src/ff.c **** if (!wc) wc = 0xFFFF; /* Padding chars following last char */ 4289 .loc 1 1361 0 4290 0148 1178 ldrb r1, [r2] @ zero_extendqisi2 4291 014a 4354 strb r3, [r0, r1] 4292 014c 0144 add r1, r1, r0 4293 014e 4FEA1328 lsr r8, r3, #8 4294 0152 81F80180 strb r8, [r1, #1] 1362:../../../Source/third_party/fatfs/src/ff.c **** } while (++s < 13); 4295 .loc 1 1362 0 4296 0156 13B9 cbnz r3, .L436 1360:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LfnOfs[s], wc); /* Put it */ 4297 .loc 1 1360 0 4298 0158 6146 mov r1, ip 4299 .LVL672: 1362:../../../Source/third_party/fatfs/src/ff.c **** } while (++s < 13); 4300 .loc 1 1362 0 4301 015a 7346 mov r3, lr 4302 015c 00E0 b .L422 4303 .LVL673: 4304 .L436: 1360:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+LfnOfs[s], wc); /* Put it */ 4305 .loc 1 1360 0 4306 015e 6146 mov r1, ip 4307 .LVL674: 4308 .L422: 4309 0160 0132 adds r2, r2, #1 4310 .LVL675: 1363:../../../Source/third_party/fatfs/src/ff.c **** if (wc == 0xFFFF || !lfnbuf[i]) ord |= LLE; /* Bottom LFN part is the start of LFN sequence */ 4311 .loc 1 1363 0 4312 0162 B242 cmp r2, r6 4313 0164 EAD1 bne .L423 1364:../../../Source/third_party/fatfs/src/ff.c **** dir[LDIR_Ord] = ord; /* Set the LFN order */ 4314 .loc 1 1364 0 4315 0166 4FF6FF72 movw r2, #65535 4316 .LVL676: 4317 016a 9342 cmp r3, r2 4318 016c 02D0 beq .L424 4319 016e 39F81130 ldrh r3, [r9, r1, lsl #1] 4320 0172 0BB9 cbnz r3, .L425 4321 .L424: 4322 0174 4BF0400B orr fp, fp, #64 4323 .LVL677: 4324 .L425: 1365:../../../Source/third_party/fatfs/src/ff.c **** } 4325 .loc 1 1365 0 4326 0178 80F800B0 strb fp, [r0] 4327 .LBE56: 4328 .LBE58: 1609:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Next entry */ 4329 .loc 1 1609 0 4330 017c 2368 ldr r3, [r4] 4331 017e 0122 movs r2, #1 4332 0180 1A71 strb r2, [r3, #4] 1610:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK && --ne); 4333 .loc 1 1610 0 4334 0182 2046 mov r0, r4 4335 .LVL678: 4336 0184 0021 movs r1, #0 4337 .LVL679: 4338 0186 FFF7FEFF bl dir_next 4339 .LVL680: 1611:../../../Source/third_party/fatfs/src/ff.c **** } 4340 .loc 1 1611 0 4341 018a 0346 mov r3, r0 4342 018c 0028 cmp r0, #0 4343 018e 32D1 bne .L420 1611:../../../Source/third_party/fatfs/src/ff.c **** } 4344 .loc 1 1611 0 is_stmt 0 discriminator 1 4345 0190 013D subs r5, r5, #1 4346 .LVL681: 4347 0192 ADB2 uxth r5, r5 4348 .LVL682: 4349 0194 002D cmp r5, #0 4350 0196 B2D1 bne .L426 4351 0198 26E0 b .L427 4352 .LVL683: 4353 .L430: 1621:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dj->dir, dj->fn, 11); /* Put SFN */ 4354 .loc 1 1621 0 is_stmt 1 4355 019a 6369 ldr r3, [r4, #20] 4356 .LVL684: 4357 019c 03F12001 add r1, r3, #32 4358 .LBB59: 4359 .LBB60: 560:../../../Source/third_party/fatfs/src/ff.c **** } 4360 .loc 1 560 0 4361 01a0 0022 movs r2, #0 4362 .LVL685: 4363 .L428: 4364 01a2 03F8012B strb r2, [r3], #1 4365 .LVL686: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 4366 .loc 1 559 0 4367 01a6 8B42 cmp r3, r1 4368 01a8 FBD1 bne .L428 4369 .LBE60: 4370 .LBE59: 1622:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 4371 .loc 1 1622 0 4372 01aa 6069 ldr r0, [r4, #20] 4373 .LVL687: 4374 01ac A169 ldr r1, [r4, #24] 4375 .LVL688: 4376 01ae 0B22 movs r2, #11 4377 01b0 FFF7FEFF bl mem_cpy 4378 .LVL689: 1624:../../../Source/third_party/fatfs/src/ff.c **** #endif 4379 .loc 1 1624 0 4380 01b4 6269 ldr r2, [r4, #20] 4381 01b6 A369 ldr r3, [r4, #24] 4382 01b8 DB7A ldrb r3, [r3, #11] @ zero_extendqisi2 4383 01ba 03F01803 and r3, r3, #24 4384 01be 1373 strb r3, [r2, #12] 1626:../../../Source/third_party/fatfs/src/ff.c **** } 4385 .loc 1 1626 0 4386 01c0 2368 ldr r3, [r4] 4387 01c2 0122 movs r2, #1 4388 01c4 1A71 strb r2, [r3, #4] 1619:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4389 .loc 1 1619 0 4390 01c6 0020 movs r0, #0 4391 01c8 18E0 b .L443 4392 .LVL690: 4393 .L431: 1588:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ 4394 .loc 1 1588 0 4395 01ca 0720 movs r0, #7 4396 .LVL691: 4397 01cc 16E0 b .L443 4398 .LVL692: 4399 .L432: 4400 01ce 15E0 b .L443 4401 .LVL693: 4402 .L418: 1601:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, (WORD)(dj->index - ne)); 4403 .loc 1 1601 0 4404 01d0 013D subs r5, r5, #1 4405 .LVL694: 4406 01d2 ADB2 uxth r5, r5 4407 .LVL695: 4408 01d4 45B1 cbz r5, .L427 4409 01d6 80E7 b .L429 4410 .LVL696: 4411 .L421: 4412 .LBB61: 4413 .LBB57: 1361:../../../Source/third_party/fatfs/src/ff.c **** if (!wc) wc = 0xFFFF; /* Padding chars following last char */ 4414 .loc 1 1361 0 4415 01d8 92F800C0 ldrb ip, [r2] @ zero_extendqisi2 4416 01dc 00F80CA0 strb r10, [r0, ip] 4417 01e0 8444 add ip, ip, r0 4418 01e2 8CF801A0 strb r10, [ip, #1] 4419 01e6 BBE7 b .L422 4420 .LVL697: 4421 .L427: 4422 .LBE57: 4423 .LBE61: 1619:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4424 .loc 1 1619 0 4425 01e8 2068 ldr r0, [r4] 4426 01ea 2169 ldr r1, [r4, #16] 4427 01ec FFF7FEFF bl move_window 4428 .LVL698: 1620:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj->dir, 0, SZ_DIR); /* Clean the entry */ 4429 .loc 1 1620 0 4430 01f0 0028 cmp r0, #0 4431 01f2 D2D0 beq .L430 4432 01f4 02E0 b .L443 4433 .L420: 4434 .LVL699: 1619:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4435 .loc 1 1619 0 4436 01f6 1846 mov r0, r3 4437 01f8 00E0 b .L443 4438 .LVL700: 4439 .L415: 1585:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 4440 .loc 1 1585 0 4441 01fa 1846 mov r0, r3 4442 .LVL701: 4443 .L443: 1631:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 4444 .loc 1 1631 0 4445 01fc 07B0 add sp, sp, #28 4446 .cfi_def_cfa_offset 36 4447 @ sp needed 4448 01fe BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 4449 .LVL702: 4450 .L449: 4451 0202 00BF .align 2 4452 .L448: 4453 0204 4FECC44E .word 1321528399 4454 0208 00000000 .word .LANCHOR2 4455 .cfi_endproc 4456 .LFE24: 4458 .section .text.f_mount,"ax",%progbits 4459 .align 2 4460 .global f_mount 4461 .thumb 4462 .thumb_func 4464 f_mount: 4465 .LFB32: 2252:../../../Source/third_party/fatfs/src/ff.c **** 2253:../../../Source/third_party/fatfs/src/ff.c **** 2254:../../../Source/third_party/fatfs/src/ff.c **** 2255:../../../Source/third_party/fatfs/src/ff.c **** 2256:../../../Source/third_party/fatfs/src/ff.c **** /*-------------------------------------------------------------------------- 2257:../../../Source/third_party/fatfs/src/ff.c **** 2258:../../../Source/third_party/fatfs/src/ff.c **** Public Functions 2259:../../../Source/third_party/fatfs/src/ff.c **** 2260:../../../Source/third_party/fatfs/src/ff.c **** --------------------------------------------------------------------------*/ 2261:../../../Source/third_party/fatfs/src/ff.c **** 2262:../../../Source/third_party/fatfs/src/ff.c **** 2263:../../../Source/third_party/fatfs/src/ff.c **** 2264:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2265:../../../Source/third_party/fatfs/src/ff.c **** /* Mount/Unmount a Logical Drive */ 2266:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2267:../../../Source/third_party/fatfs/src/ff.c **** 2268:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_mount ( 2269:../../../Source/third_party/fatfs/src/ff.c **** BYTE vol, /* Logical drive number to be mounted/unmounted */ 2270:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs /* Pointer to new file system object (NULL for unmount)*/ 2271:../../../Source/third_party/fatfs/src/ff.c **** ) 2272:../../../Source/third_party/fatfs/src/ff.c **** { 4466 .loc 1 2272 0 4467 .cfi_startproc 4468 @ args = 0, pretend = 0, frame = 0 4469 @ frame_needed = 0, uses_anonymous_args = 0 4470 @ link register save eliminated. 4471 .LVL703: 2273:../../../Source/third_party/fatfs/src/ff.c **** FATFS *rfs; 2274:../../../Source/third_party/fatfs/src/ff.c **** 2275:../../../Source/third_party/fatfs/src/ff.c **** 2276:../../../Source/third_party/fatfs/src/ff.c **** if (vol >= _VOLUMES) /* Check if the drive number is valid */ 4472 .loc 1 2276 0 4473 0000 58B9 cbnz r0, .L454 2277:../../../Source/third_party/fatfs/src/ff.c **** return FR_INVALID_DRIVE; 2278:../../../Source/third_party/fatfs/src/ff.c **** rfs = FatFs[vol]; /* Get current fs object */ 4474 .loc 1 2278 0 4475 0002 074B ldr r3, .L455 4476 0004 1B68 ldr r3, [r3] 4477 .LVL704: 2279:../../../Source/third_party/fatfs/src/ff.c **** 2280:../../../Source/third_party/fatfs/src/ff.c **** if (rfs) { 4478 .loc 1 2280 0 4479 0006 0BB1 cbz r3, .L452 2281:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 2282:../../../Source/third_party/fatfs/src/ff.c **** clear_lock(rfs); 2283:../../../Source/third_party/fatfs/src/ff.c **** #endif 2284:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT /* Discard sync object of the current volume */ 2285:../../../Source/third_party/fatfs/src/ff.c **** if (!ff_del_syncobj(rfs->sobj)) return FR_INT_ERR; 2286:../../../Source/third_party/fatfs/src/ff.c **** #endif 2287:../../../Source/third_party/fatfs/src/ff.c **** rfs->fs_type = 0; /* Clear old fs object */ 4480 .loc 1 2287 0 4481 0008 0022 movs r2, #0 4482 000a 1A70 strb r2, [r3] 4483 .L452: 2288:../../../Source/third_party/fatfs/src/ff.c **** } 2289:../../../Source/third_party/fatfs/src/ff.c **** 2290:../../../Source/third_party/fatfs/src/ff.c **** if (fs) { 4484 .loc 1 2290 0 4485 000c 09B1 cbz r1, .L453 2291:../../../Source/third_party/fatfs/src/ff.c **** fs->fs_type = 0; /* Clear new fs object */ 4486 .loc 1 2291 0 4487 000e 0023 movs r3, #0 4488 .LVL705: 4489 0010 0B70 strb r3, [r1] 4490 .L453: 2292:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT /* Create sync object for the new volume */ 2293:../../../Source/third_party/fatfs/src/ff.c **** if (!ff_cre_syncobj(vol, &fs->sobj)) return FR_INT_ERR; 2294:../../../Source/third_party/fatfs/src/ff.c **** #endif 2295:../../../Source/third_party/fatfs/src/ff.c **** } 2296:../../../Source/third_party/fatfs/src/ff.c **** FatFs[vol] = fs; /* Register new fs object */ 4491 .loc 1 2296 0 4492 0012 034B ldr r3, .L455 4493 0014 1960 str r1, [r3] 2297:../../../Source/third_party/fatfs/src/ff.c **** 2298:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 4494 .loc 1 2298 0 4495 0016 0020 movs r0, #0 4496 .LVL706: 4497 0018 7047 bx lr 4498 .LVL707: 4499 .L454: 2277:../../../Source/third_party/fatfs/src/ff.c **** rfs = FatFs[vol]; /* Get current fs object */ 4500 .loc 1 2277 0 4501 001a 0B20 movs r0, #11 4502 .LVL708: 2299:../../../Source/third_party/fatfs/src/ff.c **** } 4503 .loc 1 2299 0 4504 001c 7047 bx lr 4505 .L456: 4506 001e 00BF .align 2 4507 .L455: 4508 0020 00000000 .word .LANCHOR0 4509 .cfi_endproc 4510 .LFE32: 4512 .section .text.f_open,"ax",%progbits 4513 .align 2 4514 .global f_open 4515 .thumb 4516 .thumb_func 4518 f_open: 4519 .LFB33: 2300:../../../Source/third_party/fatfs/src/ff.c **** 2301:../../../Source/third_party/fatfs/src/ff.c **** 2302:../../../Source/third_party/fatfs/src/ff.c **** 2303:../../../Source/third_party/fatfs/src/ff.c **** 2304:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2305:../../../Source/third_party/fatfs/src/ff.c **** /* Open or Create a File */ 2306:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2307:../../../Source/third_party/fatfs/src/ff.c **** 2308:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_open ( 2309:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp, /* Pointer to the blank file object */ 2310:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path, /* Pointer to the file name */ 2311:../../../Source/third_party/fatfs/src/ff.c **** BYTE mode /* Access mode and file open mode flags */ 2312:../../../Source/third_party/fatfs/src/ff.c **** ) 2313:../../../Source/third_party/fatfs/src/ff.c **** { 4520 .loc 1 2313 0 4521 .cfi_startproc 4522 @ args = 0, pretend = 0, frame = 56 4523 @ frame_needed = 0, uses_anonymous_args = 0 4524 .LVL709: 4525 0000 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr} 4526 .cfi_def_cfa_offset 28 4527 .cfi_offset 4, -28 4528 .cfi_offset 5, -24 4529 .cfi_offset 6, -20 4530 .cfi_offset 7, -16 4531 .cfi_offset 8, -12 4532 .cfi_offset 9, -8 4533 .cfi_offset 14, -4 4534 0004 8FB0 sub sp, sp, #60 4535 .cfi_def_cfa_offset 88 4536 0006 0191 str r1, [sp, #4] 2314:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2315:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 2316:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir; 2317:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 2318:../../../Source/third_party/fatfs/src/ff.c **** 2319:../../../Source/third_party/fatfs/src/ff.c **** 2320:../../../Source/third_party/fatfs/src/ff.c **** if (!fp) return FR_INVALID_OBJECT; 4537 .loc 1 2320 0 4538 0008 0028 cmp r0, #0 4539 000a 00F08D80 beq .L475 4540 000e 0446 mov r4, r0 4541 0010 1546 mov r5, r2 2321:../../../Source/third_party/fatfs/src/ff.c **** fp->fs = 0; /* Clear file object */ 4542 .loc 1 2321 0 4543 0012 0023 movs r3, #0 4544 0014 0360 str r3, [r0] 4545 .LVL710: 2322:../../../Source/third_party/fatfs/src/ff.c **** 2323:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2324:../../../Source/third_party/fatfs/src/ff.c **** mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; 2325:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ)); 4546 .loc 1 2325 0 4547 0016 01A8 add r0, sp, #4 4548 .LVL711: 4549 0018 05A9 add r1, sp, #20 4550 .LVL712: 4551 001a 02F01E02 and r2, r2, #30 4552 .LVL713: 4553 001e FFF7FEFF bl chk_mounted 4554 .LVL714: 2326:../../../Source/third_party/fatfs/src/ff.c **** #else 2327:../../../Source/third_party/fatfs/src/ff.c **** mode &= FA_READ; 2328:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 0); 2329:../../../Source/third_party/fatfs/src/ff.c **** #endif 2330:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4555 .loc 1 2330 0 4556 0022 0028 cmp r0, #0 4557 0024 40F08280 bne .L476 2324:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ)); 4558 .loc 1 2324 0 4559 0028 05F01F07 and r7, r5, #31 2331:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 4560 .loc 1 2331 0 4561 002c 02AB add r3, sp, #8 4562 002e 0B93 str r3, [sp, #44] 4563 0030 534B ldr r3, .L487 4564 0032 0C93 str r3, [sp, #48] 2332:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 4565 .loc 1 2332 0 4566 0034 05A8 add r0, sp, #20 4567 .LVL715: 4568 0036 0199 ldr r1, [sp, #4] 4569 0038 FFF7FEFF bl follow_path 4570 .LVL716: 2333:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 4571 .loc 1 2333 0 4572 003c 0A9E ldr r6, [sp, #40] 4573 .LVL717: 2334:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY /* R/W configuration */ 2335:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4574 .loc 1 2335 0 4575 003e 0346 mov r3, r0 4576 0040 0028 cmp r0, #0 4577 0042 74D1 bne .L459 2336:../../../Source/third_party/fatfs/src/ff.c **** if (!dir) /* Current dir itself */ 4578 .loc 1 2336 0 4579 0044 002E cmp r6, #0 4580 0046 7BD1 bne .L482 4581 0048 75E0 b .L460 4582 .LVL718: 4583 .L468: 4584 .LBB65: 2337:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 2338:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 2339:../../../Source/third_party/fatfs/src/ff.c **** else 2340:../../../Source/third_party/fatfs/src/ff.c **** res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); 2341:../../../Source/third_party/fatfs/src/ff.c **** #endif 2342:../../../Source/third_party/fatfs/src/ff.c **** } 2343:../../../Source/third_party/fatfs/src/ff.c **** /* Create or Open a file */ 2344:../../../Source/third_party/fatfs/src/ff.c **** if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { 2345:../../../Source/third_party/fatfs/src/ff.c **** DWORD dw, cl; 2346:../../../Source/third_party/fatfs/src/ff.c **** 2347:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) { /* No file, create new */ 2348:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ 4585 .loc 1 2348 0 4586 004a 042B cmp r3, #4 4587 004c 40F08880 bne .L462 2349:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 2350:../../../Source/third_party/fatfs/src/ff.c **** res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; 2351:../../../Source/third_party/fatfs/src/ff.c **** #else 2352:../../../Source/third_party/fatfs/src/ff.c **** res = dir_register(&dj); 4588 .loc 1 2352 0 4589 0050 05A8 add r0, sp, #20 4590 0052 FFF7FEFF bl dir_register 4591 .LVL719: 2353:../../../Source/third_party/fatfs/src/ff.c **** #endif 2354:../../../Source/third_party/fatfs/src/ff.c **** mode |= FA_CREATE_ALWAYS; /* File is created */ 4592 .loc 1 2354 0 4593 0056 47F00807 orr r7, r7, #8 4594 .LVL720: 2355:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; /* New entry */ 4595 .loc 1 2355 0 4596 005a 0A9E ldr r6, [sp, #40] 2356:../../../Source/third_party/fatfs/src/ff.c **** } 2357:../../../Source/third_party/fatfs/src/ff.c **** else { /* Any object is already existing */ 2358:../../../Source/third_party/fatfs/src/ff.c **** if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ 2359:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 2360:../../../Source/third_party/fatfs/src/ff.c **** } else { 2361:../../../Source/third_party/fatfs/src/ff.c **** if (mode & FA_CREATE_NEW) /* Cannot create as new file */ 2362:../../../Source/third_party/fatfs/src/ff.c **** res = FR_EXIST; 2363:../../../Source/third_party/fatfs/src/ff.c **** } 2364:../../../Source/third_party/fatfs/src/ff.c **** } 2365:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ 4597 .loc 1 2365 0 4598 005c 0346 mov r3, r0 4599 005e 48B1 cbz r0, .L463 4600 0060 75E0 b .L464 4601 .LVL721: 4602 .L470: 2358:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 4603 .loc 1 2358 0 4604 0062 F37A ldrb r3, [r6, #11] @ zero_extendqisi2 4605 0064 13F0110F tst r3, #17 4606 0068 40F08380 bne .L477 2361:../../../Source/third_party/fatfs/src/ff.c **** res = FR_EXIST; 4607 .loc 1 2361 0 4608 006c 15F0040F tst r5, #4 4609 0070 40F08180 bne .L478 4610 .LVL722: 4611 .L463: 4612 .loc 1 2365 0 discriminator 1 4613 0074 17F0080F tst r7, #8 4614 0078 6DD0 beq .L466 2366:../../../Source/third_party/fatfs/src/ff.c **** dw = get_fattime(); /* Created time */ 4615 .loc 1 2366 0 4616 007a FFF7FEFF bl get_fattime 4617 .LVL723: 2367:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_CrtTime, dw); 4618 .loc 1 2367 0 4619 007e B073 strb r0, [r6, #14] 4620 0080 C0F30723 ubfx r3, r0, #8, #8 4621 0084 F373 strb r3, [r6, #15] 4622 0086 030C lsrs r3, r0, #16 4623 0088 3374 strb r3, [r6, #16] 4624 008a 000E lsrs r0, r0, #24 4625 .LVL724: 4626 008c 7074 strb r0, [r6, #17] 2368:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] = 0; /* Reset attribute */ 4627 .loc 1 2368 0 4628 008e 0025 movs r5, #0 4629 0090 F572 strb r5, [r6, #11] 2369:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_FileSize, 0); /* size = 0 */ 4630 .loc 1 2369 0 4631 0092 3577 strb r5, [r6, #28] 4632 0094 7577 strb r5, [r6, #29] 4633 0096 B577 strb r5, [r6, #30] 4634 0098 F577 strb r5, [r6, #31] 2370:../../../Source/third_party/fatfs/src/ff.c **** cl = ld_clust(dj.fs, dir); /* Get start cluster */ 4635 .loc 1 2370 0 4636 009a DDF81480 ldr r8, [sp, #20] 4637 009e 4046 mov r0, r8 4638 00a0 3146 mov r1, r6 4639 00a2 FFF7FEFF bl ld_clust 4640 .LVL725: 4641 .LBB66: 4642 .LBB67: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 4643 .loc 1 1261 0 4644 00a6 B576 strb r5, [r6, #26] 4645 00a8 F576 strb r5, [r6, #27] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 4646 .loc 1 1262 0 4647 00aa 3575 strb r5, [r6, #20] 4648 00ac 7575 strb r5, [r6, #21] 4649 .LBE67: 4650 .LBE66: 2371:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir, 0); /* cluster = 0 */ 2372:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 4651 .loc 1 2372 0 4652 00ae 0123 movs r3, #1 4653 00b0 88F80430 strb r3, [r8, #4] 2373:../../../Source/third_party/fatfs/src/ff.c **** if (cl) { /* Remove the cluster chain if exist */ 4654 .loc 1 2373 0 4655 00b4 0546 mov r5, r0 4656 00b6 0028 cmp r0, #0 4657 00b8 4DD0 beq .L466 2374:../../../Source/third_party/fatfs/src/ff.c **** dw = dj.fs->winsect; 4658 .loc 1 2374 0 4659 00ba D8F83090 ldr r9, [r8, #48] 4660 .LVL726: 2375:../../../Source/third_party/fatfs/src/ff.c **** res = remove_chain(dj.fs, cl); 4661 .loc 1 2375 0 4662 00be 4046 mov r0, r8 4663 .LVL727: 4664 00c0 2946 mov r1, r5 4665 00c2 FFF7FEFF bl remove_chain 4666 .LVL728: 2376:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4667 .loc 1 2376 0 4668 00c6 0346 mov r3, r0 4669 00c8 0028 cmp r0, #0 4670 00ca 40D1 bne .L464 2377:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ 4671 .loc 1 2377 0 4672 00cc 0598 ldr r0, [sp, #20] 4673 .LVL729: 4674 00ce 013D subs r5, r5, #1 4675 .LVL730: 4676 00d0 C560 str r5, [r0, #12] 2378:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj.fs, dw); 4677 .loc 1 2378 0 4678 00d2 4946 mov r1, r9 4679 00d4 FFF7FEFF bl move_window 4680 .LVL731: 4681 .LBE65: 2379:../../../Source/third_party/fatfs/src/ff.c **** } 2380:../../../Source/third_party/fatfs/src/ff.c **** } 2381:../../../Source/third_party/fatfs/src/ff.c **** } 2382:../../../Source/third_party/fatfs/src/ff.c **** } 2383:../../../Source/third_party/fatfs/src/ff.c **** else { /* Open an existing file */ 2384:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Follow succeeded */ 2385:../../../Source/third_party/fatfs/src/ff.c **** if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ 2386:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_FILE; 2387:../../../Source/third_party/fatfs/src/ff.c **** } else { 2388:../../../Source/third_party/fatfs/src/ff.c **** if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ 2389:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 2390:../../../Source/third_party/fatfs/src/ff.c **** } 2391:../../../Source/third_party/fatfs/src/ff.c **** } 2392:../../../Source/third_party/fatfs/src/ff.c **** } 2393:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 4682 .loc 1 2393 0 4683 00d8 38B1 cbz r0, .L467 4684 00da 4DE0 b .L483 4685 .LVL732: 4686 .L485: 2388:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 4687 .loc 1 2388 0 4688 00dc 15F0020F tst r5, #2 4689 00e0 39D0 beq .L466 2388:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 4690 .loc 1 2388 0 is_stmt 0 discriminator 1 4691 00e2 13F0010F tst r3, #1 4692 00e6 2FD1 bne .L479 4693 00e8 35E0 b .L466 4694 .LVL733: 4695 .L467: 2394:../../../Source/third_party/fatfs/src/ff.c **** if (mode & FA_CREATE_ALWAYS) /* Set file change flag if created or overwritten */ 2395:../../../Source/third_party/fatfs/src/ff.c **** mode |= FA__WRITTEN; 4696 .loc 1 2395 0 is_stmt 1 4697 00ea 47F02007 orr r7, r7, #32 4698 .LVL734: 4699 .L473: 2396:../../../Source/third_party/fatfs/src/ff.c **** fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ 4700 .loc 1 2396 0 4701 00ee 059B ldr r3, [sp, #20] 4702 00f0 1B6B ldr r3, [r3, #48] 4703 00f2 E361 str r3, [r4, #28] 2397:../../../Source/third_party/fatfs/src/ff.c **** fp->dir_ptr = dir; 4704 .loc 1 2397 0 4705 00f4 2662 str r6, [r4, #32] 4706 .L472: 2398:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 2399:../../../Source/third_party/fatfs/src/ff.c **** fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); 2400:../../../Source/third_party/fatfs/src/ff.c **** if (!fp->lockid) res = FR_INT_ERR; 2401:../../../Source/third_party/fatfs/src/ff.c **** #endif 2402:../../../Source/third_party/fatfs/src/ff.c **** } 2403:../../../Source/third_party/fatfs/src/ff.c **** 2404:../../../Source/third_party/fatfs/src/ff.c **** #else /* R/O configuration */ 2405:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Follow succeeded */ 2406:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 2407:../../../Source/third_party/fatfs/src/ff.c **** if (!dir) { /* Current dir itself */ 2408:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 2409:../../../Source/third_party/fatfs/src/ff.c **** } else { 2410:../../../Source/third_party/fatfs/src/ff.c **** if (dir[DIR_Attr] & AM_DIR) /* It is a directory */ 2411:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_FILE; 2412:../../../Source/third_party/fatfs/src/ff.c **** } 2413:../../../Source/third_party/fatfs/src/ff.c **** } 2414:../../../Source/third_party/fatfs/src/ff.c **** #endif 2415:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 2416:../../../Source/third_party/fatfs/src/ff.c **** 2417:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 2418:../../../Source/third_party/fatfs/src/ff.c **** fp->flag = mode; /* File access mode */ 4707 .loc 1 2418 0 4708 00f6 A771 strb r7, [r4, #6] 2419:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ 4709 .loc 1 2419 0 4710 00f8 059D ldr r5, [sp, #20] 4711 00fa 2846 mov r0, r5 4712 00fc 3146 mov r1, r6 4713 00fe FFF7FEFF bl ld_clust 4714 .LVL735: 4715 0102 2061 str r0, [r4, #16] 2420:../../../Source/third_party/fatfs/src/ff.c **** fp->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */ 4716 .loc 1 2420 0 4717 0104 F17F ldrb r1, [r6, #31] @ zero_extendqisi2 4718 0106 B27F ldrb r2, [r6, #30] @ zero_extendqisi2 4719 0108 1304 lsls r3, r2, #16 4720 010a 43EA0162 orr r2, r3, r1, lsl #24 4721 010e 337F ldrb r3, [r6, #28] @ zero_extendqisi2 4722 0110 1343 orrs r3, r3, r2 4723 0112 727F ldrb r2, [r6, #29] @ zero_extendqisi2 4724 0114 43EA0223 orr r3, r3, r2, lsl #8 4725 0118 E360 str r3, [r4, #12] 2421:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr = 0; /* File pointer */ 4726 .loc 1 2421 0 4727 011a 0020 movs r0, #0 4728 011c A060 str r0, [r4, #8] 2422:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = 0; 4729 .loc 1 2422 0 4730 011e A061 str r0, [r4, #24] 2423:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FASTSEEK 2424:../../../Source/third_party/fatfs/src/ff.c **** fp->cltbl = 0; /* Normal seek mode */ 2425:../../../Source/third_party/fatfs/src/ff.c **** #endif 2426:../../../Source/third_party/fatfs/src/ff.c **** fp->fs = dj.fs; fp->id = dj.fs->id; /* Validate file object */ 4731 .loc 1 2426 0 4732 0120 2560 str r5, [r4] 4733 0122 EB88 ldrh r3, [r5, #6] 4734 0124 A380 strh r3, [r4, #4] @ movhi 4735 0126 27E0 b .L483 4736 .LVL736: 4737 .L475: 2320:../../../Source/third_party/fatfs/src/ff.c **** fp->fs = 0; /* Clear file object */ 4738 .loc 1 2320 0 4739 0128 0920 movs r0, #9 4740 .LVL737: 4741 012a 25E0 b .L483 4742 .LVL738: 4743 .L476: 4744 012c 24E0 b .L483 4745 .LVL739: 4746 .L459: 2344:../../../Source/third_party/fatfs/src/ff.c **** DWORD dw, cl; 4747 .loc 1 2344 0 4748 012e 15F01C0F tst r5, #28 4749 0132 8AD1 bne .L468 4750 0134 0BE0 b .L464 4751 .LVL740: 4752 .L460: 4753 0136 15F01C0F tst r5, #28 4754 013a 10D1 bne .L480 2337:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 4755 .loc 1 2337 0 4756 013c 0623 movs r3, #6 4757 013e 06E0 b .L464 4758 .LVL741: 4759 .L482: 2344:../../../Source/third_party/fatfs/src/ff.c **** DWORD dw, cl; 4760 .loc 1 2344 0 4761 0140 15F01C0F tst r5, #28 4762 0144 8DD1 bne .L470 4763 0146 0FE0 b .L484 4764 .L479: 2389:../../../Source/third_party/fatfs/src/ff.c **** } 4765 .loc 1 2389 0 4766 0148 0723 movs r3, #7 4767 014a 00E0 b .L464 4768 .L481: 2386:../../../Source/third_party/fatfs/src/ff.c **** } else { 4769 .loc 1 2386 0 4770 014c 0423 movs r3, #4 4771 .LVL742: 4772 .L464: 2417:../../../Source/third_party/fatfs/src/ff.c **** fp->flag = mode; /* File access mode */ 4773 .loc 1 2417 0 4774 014e 002B cmp r3, #0 4775 0150 D1D0 beq .L472 4776 0152 1846 mov r0, r3 4777 0154 10E0 b .L483 4778 .LVL743: 4779 .L466: 2394:../../../Source/third_party/fatfs/src/ff.c **** mode |= FA__WRITTEN; 4780 .loc 1 2394 0 4781 0156 17F0080F tst r7, #8 4782 015a C6D1 bne .L467 4783 015c C7E7 b .L473 4784 .LVL744: 4785 .L480: 2337:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 4786 .loc 1 2337 0 4787 015e 0623 movs r3, #6 4788 .LVL745: 4789 .L462: 4790 .LBB68: 2354:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; /* New entry */ 4791 .loc 1 2354 0 4792 0160 47F00807 orr r7, r7, #8 4793 .LVL746: 2355:../../../Source/third_party/fatfs/src/ff.c **** } 4794 .loc 1 2355 0 4795 0164 0A9E ldr r6, [sp, #40] 4796 0166 F2E7 b .L464 4797 .LVL747: 4798 .L484: 4799 .LBE68: 2385:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_FILE; 4800 .loc 1 2385 0 4801 0168 F37A ldrb r3, [r6, #11] @ zero_extendqisi2 4802 016a 13F0100F tst r3, #16 4803 016e EDD1 bne .L481 4804 0170 B4E7 b .L485 4805 .L477: 4806 .LBB69: 2359:../../../Source/third_party/fatfs/src/ff.c **** } else { 4807 .loc 1 2359 0 4808 0172 0720 movs r0, #7 4809 0174 00E0 b .L483 4810 .L478: 2362:../../../Source/third_party/fatfs/src/ff.c **** } 4811 .loc 1 2362 0 4812 0176 0820 movs r0, #8 4813 .LVL748: 4814 .L483: 4815 .LBE69: 2427:../../../Source/third_party/fatfs/src/ff.c **** } 2428:../../../Source/third_party/fatfs/src/ff.c **** } 2429:../../../Source/third_party/fatfs/src/ff.c **** 2430:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 2431:../../../Source/third_party/fatfs/src/ff.c **** } 4816 .loc 1 2431 0 4817 0178 0FB0 add sp, sp, #60 4818 .cfi_def_cfa_offset 28 4819 @ sp needed 4820 017a BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc} 4821 .LVL749: 4822 .L488: 4823 017e 00BF .align 2 4824 .L487: 4825 0180 00000000 .word .LANCHOR4 4826 .cfi_endproc 4827 .LFE33: 4829 .section .text.f_read,"ax",%progbits 4830 .align 2 4831 .global f_read 4832 .thumb 4833 .thumb_func 4835 f_read: 4836 .LFB34: 2432:../../../Source/third_party/fatfs/src/ff.c **** 2433:../../../Source/third_party/fatfs/src/ff.c **** 2434:../../../Source/third_party/fatfs/src/ff.c **** 2435:../../../Source/third_party/fatfs/src/ff.c **** 2436:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2437:../../../Source/third_party/fatfs/src/ff.c **** /* Read File */ 2438:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2439:../../../Source/third_party/fatfs/src/ff.c **** 2440:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_read ( 2441:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp, /* Pointer to the file object */ 2442:../../../Source/third_party/fatfs/src/ff.c **** void *buff, /* Pointer to data buffer */ 2443:../../../Source/third_party/fatfs/src/ff.c **** UINT btr, /* Number of bytes to read */ 2444:../../../Source/third_party/fatfs/src/ff.c **** UINT *br /* Pointer to number of bytes read */ 2445:../../../Source/third_party/fatfs/src/ff.c **** ) 2446:../../../Source/third_party/fatfs/src/ff.c **** { 4837 .loc 1 2446 0 4838 .cfi_startproc 4839 @ args = 0, pretend = 0, frame = 8 4840 @ frame_needed = 0, uses_anonymous_args = 0 4841 .LVL750: 4842 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 4843 .cfi_def_cfa_offset 36 4844 .cfi_offset 4, -36 4845 .cfi_offset 5, -32 4846 .cfi_offset 6, -28 4847 .cfi_offset 7, -24 4848 .cfi_offset 8, -20 4849 .cfi_offset 9, -16 4850 .cfi_offset 10, -12 4851 .cfi_offset 11, -8 4852 .cfi_offset 14, -4 4853 0004 83B0 sub sp, sp, #12 4854 .cfi_def_cfa_offset 48 4855 0006 0446 mov r4, r0 4856 0008 8946 mov r9, r1 4857 000a 1546 mov r5, r2 4858 000c 9846 mov r8, r3 4859 .LVL751: 2447:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2448:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst, sect, remain; 2449:../../../Source/third_party/fatfs/src/ff.c **** UINT rcnt, cc; 2450:../../../Source/third_party/fatfs/src/ff.c **** BYTE csect, *rbuff = (BYTE*)buff; 2451:../../../Source/third_party/fatfs/src/ff.c **** 2452:../../../Source/third_party/fatfs/src/ff.c **** 2453:../../../Source/third_party/fatfs/src/ff.c **** *br = 0; /* Clear read byte counter */ 4860 .loc 1 2453 0 4861 000e 0023 movs r3, #0 4862 .LVL752: 4863 0010 C8F80030 str r3, [r8] 2454:../../../Source/third_party/fatfs/src/ff.c **** 2455:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity */ 4864 .loc 1 2455 0 4865 0014 FFF7FEFF bl validate 4866 .LVL753: 2456:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) LEAVE_FF(fp->fs, res); 4867 .loc 1 2456 0 4868 0018 0028 cmp r0, #0 4869 001a 40F0B580 bne .L507 2457:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__ERROR) /* Aborted file? */ 4870 .loc 1 2457 0 4871 001e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 4872 0020 13F0800F tst r3, #128 4873 0024 40F0B180 bne .L508 2458:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_INT_ERR); 2459:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_READ)) /* Check access mode */ 4874 .loc 1 2459 0 4875 0028 13F0010F tst r3, #1 4876 002c 00F0AF80 beq .L509 2460:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_DENIED); 2461:../../../Source/third_party/fatfs/src/ff.c **** remain = fp->fsize - fp->fptr; 4877 .loc 1 2461 0 4878 0030 E368 ldr r3, [r4, #12] 4879 0032 A668 ldr r6, [r4, #8] 4880 0034 9E1B subs r6, r3, r6 4881 .LVL754: 4882 0036 AE42 cmp r6, r5 4883 0038 28BF it cs 4884 003a 2E46 movcs r6, r5 4885 .LVL755: 2462:../../../Source/third_party/fatfs/src/ff.c **** if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ 2463:../../../Source/third_party/fatfs/src/ff.c **** 2464:../../../Source/third_party/fatfs/src/ff.c **** for ( ; btr; /* Repeat until all data read */ 4886 .loc 1 2464 0 4887 003c 002E cmp r6, #0 4888 003e 00F0A880 beq .L510 2465:../../../Source/third_party/fatfs/src/ff.c **** rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { 2466:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ 2467:../../../Source/third_party/fatfs/src/ff.c **** csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ 2468:../../../Source/third_party/fatfs/src/ff.c **** if (!csect) { /* On the cluster boundary? */ 2469:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr == 0) { /* On the top of the file? */ 2470:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->sclust; /* Follow from the origin */ 2471:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Middle or end of the file */ 2472:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FASTSEEK 2473:../../../Source/third_party/fatfs/src/ff.c **** if (fp->cltbl) 2474:../../../Source/third_party/fatfs/src/ff.c **** clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ 2475:../../../Source/third_party/fatfs/src/ff.c **** else 2476:../../../Source/third_party/fatfs/src/ff.c **** #endif 2477:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ 2478:../../../Source/third_party/fatfs/src/ff.c **** } 2479:../../../Source/third_party/fatfs/src/ff.c **** if (clst < 2) ABORT(fp->fs, FR_INT_ERR); 2480:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 2481:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 2482:../../../Source/third_party/fatfs/src/ff.c **** } 2483:../../../Source/third_party/fatfs/src/ff.c **** sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ 2484:../../../Source/third_party/fatfs/src/ff.c **** if (!sect) ABORT(fp->fs, FR_INT_ERR); 2485:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 2486:../../../Source/third_party/fatfs/src/ff.c **** cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ 2487:../../../Source/third_party/fatfs/src/ff.c **** if (cc) { /* Read maximum contiguous sectors directly */ 2488:../../../Source/third_party/fatfs/src/ff.c **** if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ 2489:../../../Source/third_party/fatfs/src/ff.c **** cc = fp->fs->csize - csect; 2490:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fp->fs->drv, rbuff, sect, (BYTE)cc) != RES_OK) 2491:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2492:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it 2493:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2494:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fs->wflag && fp->fs->winsect - sect < cc) 2495:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); 2496:../../../Source/third_party/fatfs/src/ff.c **** #else 2497:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) 2498:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); 2499:../../../Source/third_party/fatfs/src/ff.c **** #endif 2500:../../../Source/third_party/fatfs/src/ff.c **** #endif 2501:../../../Source/third_party/fatfs/src/ff.c **** rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ 2502:../../../Source/third_party/fatfs/src/ff.c **** continue; 2503:../../../Source/third_party/fatfs/src/ff.c **** } 2504:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_TINY 2505:../../../Source/third_party/fatfs/src/ff.c **** if (fp->dsect != sect) { /* Load data sector if not in cache */ 2506:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2507:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ 2508:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 2509:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2510:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 2511:../../../Source/third_party/fatfs/src/ff.c **** } 2512:../../../Source/third_party/fatfs/src/ff.c **** #endif 2513:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) /* Fill sector cache */ 4889 .loc 1 2513 0 4890 0042 04F12403 add r3, r4, #36 4891 .LVL756: 4892 0046 0193 str r3, [sp, #4] 4893 .LVL757: 4894 .L511: 2466:../../../Source/third_party/fatfs/src/ff.c **** csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ 4895 .loc 1 2466 0 4896 0048 A368 ldr r3, [r4, #8] 4897 004a C3F30802 ubfx r2, r3, #0, #9 4898 004e 002A cmp r2, #0 4899 0050 7ED1 bne .L491 2467:../../../Source/third_party/fatfs/src/ff.c **** if (!csect) { /* On the cluster boundary? */ 4900 .loc 1 2467 0 4901 0052 2068 ldr r0, [r4] 4902 0054 8778 ldrb r7, [r0, #2] @ zero_extendqisi2 4903 0056 013F subs r7, r7, #1 4904 0058 07EA5327 and r7, r7, r3, lsr #9 4905 .LVL758: 2468:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr == 0) { /* On the top of the file? */ 4906 .loc 1 2468 0 4907 005c 17F0FF07 ands r7, r7, #255 4908 .LVL759: 4909 0060 17D1 bne .L492 2469:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->sclust; /* Follow from the origin */ 4910 .loc 1 2469 0 4911 0062 0BB9 cbnz r3, .L493 2470:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Middle or end of the file */ 4912 .loc 1 2470 0 4913 0064 2069 ldr r0, [r4, #16] 4914 .LVL760: 4915 0066 02E0 b .L494 4916 .LVL761: 4917 .L493: 2477:../../../Source/third_party/fatfs/src/ff.c **** } 4918 .loc 1 2477 0 4919 0068 6169 ldr r1, [r4, #20] 4920 006a FFF7FEFF bl get_fat 4921 .LVL762: 4922 .L494: 2479:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 4923 .loc 1 2479 0 4924 006e 0128 cmp r0, #1 4925 0070 05D8 bhi .L495 2479:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 4926 .loc 1 2479 0 is_stmt 0 discriminator 1 4927 0072 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 4928 0074 63F07F03 orn r3, r3, #127 4929 0078 A371 strb r3, [r4, #6] 4930 007a 0220 movs r0, #2 4931 .LVL763: 4932 007c 8AE0 b .L490 4933 .LVL764: 4934 .L495: 2480:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 4935 .loc 1 2480 0 is_stmt 1 4936 007e B0F1FF3F cmp r0, #-1 4937 0082 05D1 bne .L496 2480:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 4938 .loc 1 2480 0 is_stmt 0 discriminator 1 4939 0084 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 4940 0086 63F07F03 orn r3, r3, #127 4941 008a A371 strb r3, [r4, #6] 4942 008c 0120 movs r0, #1 4943 .LVL765: 4944 008e 81E0 b .L490 4945 .LVL766: 4946 .L496: 2481:../../../Source/third_party/fatfs/src/ff.c **** } 4947 .loc 1 2481 0 is_stmt 1 4948 0090 6061 str r0, [r4, #20] 4949 .LVL767: 4950 .L492: 2483:../../../Source/third_party/fatfs/src/ff.c **** if (!sect) ABORT(fp->fs, FR_INT_ERR); 4951 .loc 1 2483 0 4952 0092 D4F800B0 ldr fp, [r4] 4953 0096 5846 mov r0, fp 4954 0098 6169 ldr r1, [r4, #20] 4955 009a FFF7FEFF bl clust2sect 4956 .LVL768: 2484:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 4957 .loc 1 2484 0 4958 009e 8246 mov r10, r0 4959 00a0 28B9 cbnz r0, .L497 2484:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 4960 .loc 1 2484 0 is_stmt 0 discriminator 1 4961 00a2 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 4962 00a4 63F07F03 orn r3, r3, #127 4963 00a8 A371 strb r3, [r4, #6] 4964 00aa 0220 movs r0, #2 4965 .LVL769: 4966 00ac 72E0 b .L490 4967 .LVL770: 4968 .L497: 2485:../../../Source/third_party/fatfs/src/ff.c **** cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ 4969 .loc 1 2485 0 is_stmt 1 4970 00ae BA44 add r10, r10, r7 4971 .LVL771: 2487:../../../Source/third_party/fatfs/src/ff.c **** if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ 4972 .loc 1 2487 0 4973 00b0 750A lsrs r5, r6, #9 4974 .LVL772: 4975 00b2 25D0 beq .L498 2488:../../../Source/third_party/fatfs/src/ff.c **** cc = fp->fs->csize - csect; 4976 .loc 1 2488 0 4977 00b4 9BF80230 ldrb r3, [fp, #2] @ zero_extendqisi2 4978 00b8 EA19 adds r2, r5, r7 4979 00ba 9A42 cmp r2, r3 2489:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fp->fs->drv, rbuff, sect, (BYTE)cc) != RES_OK) 4980 .loc 1 2489 0 4981 00bc 88BF it hi 4982 00be DD1B subhi r5, r3, r7 4983 .LVL773: 2490:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 4984 .loc 1 2490 0 4985 00c0 9BF80100 ldrb r0, [fp, #1] @ zero_extendqisi2 4986 00c4 4946 mov r1, r9 4987 00c6 5246 mov r2, r10 4988 00c8 EBB2 uxtb r3, r5 4989 00ca FFF7FEFF bl disk_read 4990 .LVL774: 4991 00ce 28B1 cbz r0, .L500 2491:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it 4992 .loc 1 2491 0 4993 00d0 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 4994 00d2 63F07F03 orn r3, r3, #127 4995 00d6 A371 strb r3, [r4, #6] 4996 00d8 0120 movs r0, #1 4997 00da 5BE0 b .L490 4998 .L500: 2497:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); 4999 .loc 1 2497 0 5000 00dc A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5001 00de 13F0400F tst r3, #64 5002 00e2 0BD0 beq .L501 2497:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); 5003 .loc 1 2497 0 is_stmt 0 discriminator 1 5004 00e4 A069 ldr r0, [r4, #24] 5005 00e6 CAEB0000 rsb r0, r10, r0 5006 00ea 8542 cmp r5, r0 5007 00ec 06D9 bls .L501 2498:../../../Source/third_party/fatfs/src/ff.c **** #endif 5008 .loc 1 2498 0 is_stmt 1 5009 00ee 09EB4020 add r0, r9, r0, lsl #9 5010 00f2 0199 ldr r1, [sp, #4] 5011 00f4 4FF40072 mov r2, #512 5012 00f8 FFF7FEFF bl mem_cpy 5013 .LVL775: 5014 .L501: 2501:../../../Source/third_party/fatfs/src/ff.c **** continue; 5015 .loc 1 2501 0 5016 00fc 6D02 lsls r5, r5, #9 5017 .LVL776: 2502:../../../Source/third_party/fatfs/src/ff.c **** } 5018 .loc 1 2502 0 5019 00fe 35E0 b .L502 5020 .LVL777: 5021 .L498: 2505:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 5022 .loc 1 2505 0 5023 0100 A269 ldr r2, [r4, #24] 5024 0102 5245 cmp r2, r10 5025 0104 22D0 beq .L503 2507:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 5026 .loc 1 2507 0 5027 0106 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5028 0108 13F0400F tst r3, #64 5029 010c 10D0 beq .L504 2508:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5030 .loc 1 2508 0 5031 010e 9BF80100 ldrb r0, [fp, #1] @ zero_extendqisi2 5032 0112 0199 ldr r1, [sp, #4] 5033 0114 0123 movs r3, #1 5034 0116 FFF7FEFF bl disk_write 5035 .LVL778: 5036 011a 28B1 cbz r0, .L505 2509:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5037 .loc 1 2509 0 5038 011c A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5039 011e 63F07F03 orn r3, r3, #127 5040 0122 A371 strb r3, [r4, #6] 5041 0124 0120 movs r0, #1 5042 0126 35E0 b .L490 5043 .L505: 2510:../../../Source/third_party/fatfs/src/ff.c **** } 5044 .loc 1 2510 0 5045 0128 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5046 012a 23F04003 bic r3, r3, #64 5047 012e A371 strb r3, [r4, #6] 5048 .L504: 5049 .loc 1 2513 0 5050 0130 2368 ldr r3, [r4] 5051 0132 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 5052 0134 0199 ldr r1, [sp, #4] 5053 0136 5246 mov r2, r10 5054 0138 0123 movs r3, #1 5055 013a FFF7FEFF bl disk_read 5056 .LVL779: 5057 013e 28B1 cbz r0, .L503 2514:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5058 .loc 1 2514 0 5059 0140 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5060 0142 63F07F03 orn r3, r3, #127 5061 0146 A371 strb r3, [r4, #6] 5062 0148 0120 movs r0, #1 5063 014a 23E0 b .L490 5064 .L503: 2515:../../../Source/third_party/fatfs/src/ff.c **** } 2516:../../../Source/third_party/fatfs/src/ff.c **** #endif 2517:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = sect; 5065 .loc 1 2517 0 5066 014c C4F818A0 str r10, [r4, #24] 5067 .LVL780: 5068 .L491: 2518:../../../Source/third_party/fatfs/src/ff.c **** } 2519:../../../Source/third_party/fatfs/src/ff.c **** rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer 5069 .loc 1 2519 0 5070 0150 A168 ldr r1, [r4, #8] 5071 0152 C1F30801 ubfx r1, r1, #0, #9 5072 0156 C1F50075 rsb r5, r1, #512 5073 .LVL781: 5074 015a B542 cmp r5, r6 5075 015c 28BF it cs 5076 015e 3546 movcs r5, r6 5077 .LVL782: 2520:../../../Source/third_party/fatfs/src/ff.c **** if (rcnt > btr) rcnt = btr; 2521:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2522:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fp->fs, fp->dsect)) /* Move sector window */ 2523:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2524:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ 2525:../../../Source/third_party/fatfs/src/ff.c **** #else 2526:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ 5078 .loc 1 2526 0 5079 0160 2144 add r1, r1, r4 5080 0162 4846 mov r0, r9 5081 0164 2431 adds r1, r1, #36 5082 0166 2A46 mov r2, r5 5083 0168 FFF7FEFF bl mem_cpy 5084 .LVL783: 5085 .L502: 2465:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ 5086 .loc 1 2465 0 5087 016c A944 add r9, r9, r5 5088 .LVL784: 5089 016e A368 ldr r3, [r4, #8] 5090 0170 2B44 add r3, r3, r5 5091 0172 A360 str r3, [r4, #8] 5092 0174 D8F80030 ldr r3, [r8] 5093 0178 2B44 add r3, r3, r5 5094 017a C8F80030 str r3, [r8] 5095 .LVL785: 2464:../../../Source/third_party/fatfs/src/ff.c **** rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { 5096 .loc 1 2464 0 5097 017e 761B subs r6, r6, r5 5098 .LVL786: 5099 0180 7FF462AF bne .L511 2527:../../../Source/third_party/fatfs/src/ff.c **** #endif 2528:../../../Source/third_party/fatfs/src/ff.c **** } 2529:../../../Source/third_party/fatfs/src/ff.c **** 2530:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_OK); 5100 .loc 1 2530 0 5101 0184 0020 movs r0, #0 5102 0186 05E0 b .L490 5103 .LVL787: 5104 .L507: 5105 0188 04E0 b .L490 5106 .L508: 2458:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_READ)) /* Check access mode */ 5107 .loc 1 2458 0 5108 018a 0220 movs r0, #2 5109 .LVL788: 5110 018c 02E0 b .L490 5111 .LVL789: 5112 .L509: 2460:../../../Source/third_party/fatfs/src/ff.c **** remain = fp->fsize - fp->fptr; 5113 .loc 1 2460 0 5114 018e 0720 movs r0, #7 5115 .LVL790: 5116 0190 00E0 b .L490 5117 .LVL791: 5118 .L510: 5119 .loc 1 2530 0 5120 0192 0020 movs r0, #0 5121 .LVL792: 5122 .L490: 2531:../../../Source/third_party/fatfs/src/ff.c **** } 5123 .loc 1 2531 0 5124 0194 03B0 add sp, sp, #12 5125 .cfi_def_cfa_offset 36 5126 @ sp needed 5127 0196 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 5128 .cfi_endproc 5129 .LFE34: 5131 019a 00BF .section .text.f_write,"ax",%progbits 5132 .align 2 5133 .global f_write 5134 .thumb 5135 .thumb_func 5137 f_write: 5138 .LFB35: 2532:../../../Source/third_party/fatfs/src/ff.c **** 2533:../../../Source/third_party/fatfs/src/ff.c **** 2534:../../../Source/third_party/fatfs/src/ff.c **** 2535:../../../Source/third_party/fatfs/src/ff.c **** 2536:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2537:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2538:../../../Source/third_party/fatfs/src/ff.c **** /* Write File */ 2539:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2540:../../../Source/third_party/fatfs/src/ff.c **** 2541:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_write ( 2542:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp, /* Pointer to the file object */ 2543:../../../Source/third_party/fatfs/src/ff.c **** const void *buff, /* Pointer to the data to be written */ 2544:../../../Source/third_party/fatfs/src/ff.c **** UINT btw, /* Number of bytes to write */ 2545:../../../Source/third_party/fatfs/src/ff.c **** UINT *bw /* Pointer to number of bytes written */ 2546:../../../Source/third_party/fatfs/src/ff.c **** ) 2547:../../../Source/third_party/fatfs/src/ff.c **** { 5139 .loc 1 2547 0 5140 .cfi_startproc 5141 @ args = 0, pretend = 0, frame = 8 5142 @ frame_needed = 0, uses_anonymous_args = 0 5143 .LVL793: 5144 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 5145 .cfi_def_cfa_offset 36 5146 .cfi_offset 4, -36 5147 .cfi_offset 5, -32 5148 .cfi_offset 6, -28 5149 .cfi_offset 7, -24 5150 .cfi_offset 8, -20 5151 .cfi_offset 9, -16 5152 .cfi_offset 10, -12 5153 .cfi_offset 11, -8 5154 .cfi_offset 14, -4 5155 0004 83B0 sub sp, sp, #12 5156 .cfi_def_cfa_offset 48 5157 0006 0446 mov r4, r0 5158 0008 8946 mov r9, r1 5159 000a 1646 mov r6, r2 5160 000c 9846 mov r8, r3 5161 .LVL794: 2548:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2549:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst, sect; 2550:../../../Source/third_party/fatfs/src/ff.c **** UINT wcnt, cc; 2551:../../../Source/third_party/fatfs/src/ff.c **** const BYTE *wbuff = (const BYTE*)buff; 2552:../../../Source/third_party/fatfs/src/ff.c **** BYTE csect; 2553:../../../Source/third_party/fatfs/src/ff.c **** 2554:../../../Source/third_party/fatfs/src/ff.c **** 2555:../../../Source/third_party/fatfs/src/ff.c **** *bw = 0; /* Clear write byte counter */ 5162 .loc 1 2555 0 5163 000e 0023 movs r3, #0 5164 .LVL795: 5165 0010 C8F80030 str r3, [r8] 2556:../../../Source/third_party/fatfs/src/ff.c **** 2557:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity */ 5166 .loc 1 2557 0 5167 0014 FFF7FEFF bl validate 5168 .LVL796: 2558:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) LEAVE_FF(fp->fs, res); 5169 .loc 1 2558 0 5170 0018 0028 cmp r0, #0 5171 001a 40F0D080 bne .L535 2559:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__ERROR) /* Aborted file? */ 5172 .loc 1 2559 0 5173 001e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5174 0020 13F0800F tst r3, #128 5175 0024 40F0CC80 bne .L536 2560:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_INT_ERR); 2561:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_WRITE)) /* Check access mode */ 5176 .loc 1 2561 0 5177 0028 13F0020F tst r3, #2 5178 002c 00F0CA80 beq .L537 2562:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_DENIED); 2563:../../../Source/third_party/fatfs/src/ff.c **** if ((DWORD)(fp->fsize + btw) < fp->fsize) btw = 0; /* File size cannot reach 4GB */ 5179 .loc 1 2563 0 5180 0030 E368 ldr r3, [r4, #12] 5181 0032 DE42 cmn r6, r3 5182 0034 80F0B880 bcs .L516 2564:../../../Source/third_party/fatfs/src/ff.c **** 2565:../../../Source/third_party/fatfs/src/ff.c **** for ( ; btw; /* Repeat until all data written */ 5183 .loc 1 2565 0 5184 0038 002E cmp r6, #0 5185 003a 00F0B580 beq .L516 2566:../../../Source/third_party/fatfs/src/ff.c **** wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { 2567:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ 2568:../../../Source/third_party/fatfs/src/ff.c **** csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ 2569:../../../Source/third_party/fatfs/src/ff.c **** if (!csect) { /* On the cluster boundary? */ 2570:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr == 0) { /* On the top of the file? */ 2571:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->sclust; /* Follow from the origin */ 2572:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) /* When no cluster is allocated, */ 2573:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust = clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ 2574:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Middle or end of the file */ 2575:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FASTSEEK 2576:../../../Source/third_party/fatfs/src/ff.c **** if (fp->cltbl) 2577:../../../Source/third_party/fatfs/src/ff.c **** clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ 2578:../../../Source/third_party/fatfs/src/ff.c **** else 2579:../../../Source/third_party/fatfs/src/ff.c **** #endif 2580:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(fp->fs, fp->clust); /* Follow or stretch cluster chain on the FAT */ 2581:../../../Source/third_party/fatfs/src/ff.c **** } 2582:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ 2583:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) ABORT(fp->fs, FR_INT_ERR); 2584:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 2585:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 2586:../../../Source/third_party/fatfs/src/ff.c **** } 2587:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2588:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fs->winsect == fp->dsect && sync_window(fp->fs)) /* Write-back sector cache */ 2589:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2590:../../../Source/third_party/fatfs/src/ff.c **** #else 2591:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__DIRTY) { /* Write-back sector cache */ 2592:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 2593:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2594:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 2595:../../../Source/third_party/fatfs/src/ff.c **** } 2596:../../../Source/third_party/fatfs/src/ff.c **** #endif 2597:../../../Source/third_party/fatfs/src/ff.c **** sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ 2598:../../../Source/third_party/fatfs/src/ff.c **** if (!sect) ABORT(fp->fs, FR_INT_ERR); 2599:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 2600:../../../Source/third_party/fatfs/src/ff.c **** cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ 2601:../../../Source/third_party/fatfs/src/ff.c **** if (cc) { /* Write maximum contiguous sectors directly */ 2602:../../../Source/third_party/fatfs/src/ff.c **** if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ 2603:../../../Source/third_party/fatfs/src/ff.c **** cc = fp->fs->csize - csect; 2604:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, wbuff, sect, (BYTE)cc) != RES_OK) 2605:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2606:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2607:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct 2608:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); 2609:../../../Source/third_party/fatfs/src/ff.c **** fp->fs->wflag = 0; 2610:../../../Source/third_party/fatfs/src/ff.c **** } 2611:../../../Source/third_party/fatfs/src/ff.c **** #else 2612:../../../Source/third_party/fatfs/src/ff.c **** if (fp->dsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write 2613:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); 2614:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 2615:../../../Source/third_party/fatfs/src/ff.c **** } 2616:../../../Source/third_party/fatfs/src/ff.c **** #endif 2617:../../../Source/third_party/fatfs/src/ff.c **** wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ 2618:../../../Source/third_party/fatfs/src/ff.c **** continue; 2619:../../../Source/third_party/fatfs/src/ff.c **** } 2620:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2621:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr >= fp->fsize) { /* Avoid silly cache filling at growing edge */ 2622:../../../Source/third_party/fatfs/src/ff.c **** if (sync_window(fp->fs)) ABORT(fp->fs, FR_DISK_ERR); 2623:../../../Source/third_party/fatfs/src/ff.c **** fp->fs->winsect = sect; 2624:../../../Source/third_party/fatfs/src/ff.c **** } 2625:../../../Source/third_party/fatfs/src/ff.c **** #else 2626:../../../Source/third_party/fatfs/src/ff.c **** if (fp->dsect != sect) { /* Fill sector cache with file data */ 2627:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr < fp->fsize && 2628:../../../Source/third_party/fatfs/src/ff.c **** disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) 5186 .loc 1 2628 0 5187 003e 04F12403 add r3, r4, #36 5188 0042 0193 str r3, [sp, #4] 5189 .LVL797: 5190 .L538: 2567:../../../Source/third_party/fatfs/src/ff.c **** csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ 5191 .loc 1 2567 0 5192 0044 A368 ldr r3, [r4, #8] 5193 0046 C3F30802 ubfx r2, r3, #0, #9 5194 004a 002A cmp r2, #0 5195 004c 40F08E80 bne .L517 2568:../../../Source/third_party/fatfs/src/ff.c **** if (!csect) { /* On the cluster boundary? */ 5196 .loc 1 2568 0 5197 0050 2068 ldr r0, [r4] 5198 0052 8778 ldrb r7, [r0, #2] @ zero_extendqisi2 5199 0054 013F subs r7, r7, #1 5200 0056 07EA5327 and r7, r7, r3, lsr #9 5201 .LVL798: 2569:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr == 0) { /* On the top of the file? */ 5202 .loc 1 2569 0 5203 005a 17F0FF07 ands r7, r7, #255 5204 .LVL799: 5205 005e 21D1 bne .L518 2570:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->sclust; /* Follow from the origin */ 5206 .loc 1 2570 0 5207 0060 3BB9 cbnz r3, .L519 2571:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) /* When no cluster is allocated, */ 5208 .loc 1 2571 0 5209 0062 2369 ldr r3, [r4, #16] 5210 .LVL800: 2572:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust = clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ 5211 .loc 1 2572 0 5212 0064 63B9 cbnz r3, .L520 2573:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Middle or end of the file */ 5213 .loc 1 2573 0 5214 0066 0021 movs r1, #0 5215 0068 FFF7FEFF bl create_chain 5216 .LVL801: 5217 006c 0346 mov r3, r0 5218 .LVL802: 5219 006e 2061 str r0, [r4, #16] 5220 0070 03E0 b .L521 5221 .LVL803: 5222 .L519: 2580:../../../Source/third_party/fatfs/src/ff.c **** } 5223 .loc 1 2580 0 5224 0072 6169 ldr r1, [r4, #20] 5225 0074 FFF7FEFF bl create_chain 5226 .LVL804: 5227 0078 0346 mov r3, r0 5228 .LVL805: 5229 .L521: 2582:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) ABORT(fp->fs, FR_INT_ERR); 5230 .loc 1 2582 0 5231 007a 002B cmp r3, #0 5232 007c 00F09480 beq .L516 5233 .LVL806: 5234 .L520: 2583:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 5235 .loc 1 2583 0 5236 0080 012B cmp r3, #1 5237 0082 05D1 bne .L522 2583:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 5238 .loc 1 2583 0 is_stmt 0 discriminator 1 5239 0084 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5240 .LVL807: 5241 0086 63F07F03 orn r3, r3, #127 5242 008a A371 strb r3, [r4, #6] 5243 008c 0220 movs r0, #2 5244 008e 9AE0 b .L515 5245 .LVL808: 5246 .L522: 2584:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 5247 .loc 1 2584 0 is_stmt 1 5248 0090 B3F1FF3F cmp r3, #-1 5249 0094 05D1 bne .L523 2584:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 5250 .loc 1 2584 0 is_stmt 0 discriminator 1 5251 0096 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5252 .LVL809: 5253 0098 63F07F03 orn r3, r3, #127 5254 009c A371 strb r3, [r4, #6] 5255 009e 0120 movs r0, #1 5256 00a0 91E0 b .L515 5257 .LVL810: 5258 .L523: 2585:../../../Source/third_party/fatfs/src/ff.c **** } 5259 .loc 1 2585 0 is_stmt 1 5260 00a2 6361 str r3, [r4, #20] 5261 .LVL811: 5262 .L518: 2591:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 5263 .loc 1 2591 0 5264 00a4 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5265 00a6 13F0400F tst r3, #64 5266 00aa 11D0 beq .L524 2592:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5267 .loc 1 2592 0 5268 00ac 2368 ldr r3, [r4] 5269 00ae 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 5270 00b0 0199 ldr r1, [sp, #4] 5271 00b2 A269 ldr r2, [r4, #24] 5272 00b4 0123 movs r3, #1 5273 00b6 FFF7FEFF bl disk_write 5274 .LVL812: 5275 00ba 28B1 cbz r0, .L525 2593:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5276 .loc 1 2593 0 5277 00bc A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5278 00be 63F07F03 orn r3, r3, #127 5279 00c2 A371 strb r3, [r4, #6] 5280 00c4 0120 movs r0, #1 5281 00c6 7EE0 b .L515 5282 .L525: 2594:../../../Source/third_party/fatfs/src/ff.c **** } 5283 .loc 1 2594 0 5284 00c8 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5285 00ca 23F04003 bic r3, r3, #64 5286 00ce A371 strb r3, [r4, #6] 5287 .L524: 2597:../../../Source/third_party/fatfs/src/ff.c **** if (!sect) ABORT(fp->fs, FR_INT_ERR); 5288 .loc 1 2597 0 5289 00d0 D4F800B0 ldr fp, [r4] 5290 00d4 5846 mov r0, fp 5291 00d6 6169 ldr r1, [r4, #20] 5292 00d8 FFF7FEFF bl clust2sect 5293 .LVL813: 2598:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 5294 .loc 1 2598 0 5295 00dc 8246 mov r10, r0 5296 00de 28B9 cbnz r0, .L526 2598:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 5297 .loc 1 2598 0 is_stmt 0 discriminator 1 5298 00e0 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5299 00e2 63F07F03 orn r3, r3, #127 5300 00e6 A371 strb r3, [r4, #6] 5301 00e8 0220 movs r0, #2 5302 .LVL814: 5303 00ea 6CE0 b .L515 5304 .LVL815: 5305 .L526: 2599:../../../Source/third_party/fatfs/src/ff.c **** cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ 5306 .loc 1 2599 0 is_stmt 1 5307 00ec BA44 add r10, r10, r7 5308 .LVL816: 2601:../../../Source/third_party/fatfs/src/ff.c **** if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ 5309 .loc 1 2601 0 5310 00ee 750A lsrs r5, r6, #9 5311 .LVL817: 5312 00f0 25D0 beq .L527 2602:../../../Source/third_party/fatfs/src/ff.c **** cc = fp->fs->csize - csect; 5313 .loc 1 2602 0 5314 00f2 9BF80230 ldrb r3, [fp, #2] @ zero_extendqisi2 5315 00f6 EA19 adds r2, r5, r7 5316 00f8 9A42 cmp r2, r3 2603:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, wbuff, sect, (BYTE)cc) != RES_OK) 5317 .loc 1 2603 0 5318 00fa 88BF it hi 5319 00fc DD1B subhi r5, r3, r7 5320 .LVL818: 2604:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5321 .loc 1 2604 0 5322 00fe 9BF80100 ldrb r0, [fp, #1] @ zero_extendqisi2 5323 0102 4946 mov r1, r9 5324 0104 5246 mov r2, r10 5325 0106 EBB2 uxtb r3, r5 5326 0108 FFF7FEFF bl disk_write 5327 .LVL819: 5328 010c 28B1 cbz r0, .L529 2605:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 5329 .loc 1 2605 0 5330 010e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5331 0110 63F07F03 orn r3, r3, #127 5332 0114 A371 strb r3, [r4, #6] 5333 0116 0120 movs r0, #1 5334 0118 55E0 b .L515 5335 .L529: 2612:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); 5336 .loc 1 2612 0 5337 011a A169 ldr r1, [r4, #24] 5338 011c CAEB0101 rsb r1, r10, r1 5339 0120 8D42 cmp r5, r1 5340 0122 0AD9 bls .L530 2613:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5341 .loc 1 2613 0 5342 0124 0198 ldr r0, [sp, #4] 5343 0126 09EB4121 add r1, r9, r1, lsl #9 5344 012a 4FF40072 mov r2, #512 5345 012e FFF7FEFF bl mem_cpy 5346 .LVL820: 2614:../../../Source/third_party/fatfs/src/ff.c **** } 5347 .loc 1 2614 0 5348 0132 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5349 0134 23F04003 bic r3, r3, #64 5350 0138 A371 strb r3, [r4, #6] 5351 .L530: 2617:../../../Source/third_party/fatfs/src/ff.c **** continue; 5352 .loc 1 2617 0 5353 013a 6D02 lsls r5, r5, #9 5354 .LVL821: 2618:../../../Source/third_party/fatfs/src/ff.c **** } 5355 .loc 1 2618 0 5356 013c 28E0 b .L531 5357 .LVL822: 5358 .L527: 2626:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr < fp->fsize && 5359 .loc 1 2626 0 5360 013e A369 ldr r3, [r4, #24] 5361 0140 5345 cmp r3, r10 5362 0142 11D0 beq .L532 2627:../../../Source/third_party/fatfs/src/ff.c **** disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) 5363 .loc 1 2627 0 5364 0144 A268 ldr r2, [r4, #8] 5365 0146 E368 ldr r3, [r4, #12] 5366 0148 9A42 cmp r2, r3 5367 014a 0DD2 bcs .L532 5368 .loc 1 2628 0 discriminator 1 5369 014c 9BF80100 ldrb r0, [fp, #1] @ zero_extendqisi2 5370 0150 0199 ldr r1, [sp, #4] 5371 0152 5246 mov r2, r10 5372 0154 0123 movs r3, #1 5373 0156 FFF7FEFF bl disk_read 5374 .LVL823: 2627:../../../Source/third_party/fatfs/src/ff.c **** disk_read(fp->fs->drv, fp->buf, sect, 1) != RES_OK) 5375 .loc 1 2627 0 discriminator 1 5376 015a 28B1 cbz r0, .L532 2629:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5377 .loc 1 2629 0 5378 015c A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5379 015e 63F07F03 orn r3, r3, #127 5380 0162 A371 strb r3, [r4, #6] 5381 0164 0120 movs r0, #1 5382 0166 2EE0 b .L515 5383 .L532: 2630:../../../Source/third_party/fatfs/src/ff.c **** } 2631:../../../Source/third_party/fatfs/src/ff.c **** #endif 2632:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = sect; 5384 .loc 1 2632 0 5385 0168 C4F818A0 str r10, [r4, #24] 5386 .LVL824: 5387 .L517: 2633:../../../Source/third_party/fatfs/src/ff.c **** } 2634:../../../Source/third_party/fatfs/src/ff.c **** wcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs));/* Put partial sector into file I/O buffer */ 5388 .loc 1 2634 0 5389 016c A068 ldr r0, [r4, #8] 5390 016e C0F30800 ubfx r0, r0, #0, #9 5391 0172 C0F50075 rsb r5, r0, #512 5392 .LVL825: 5393 0176 B542 cmp r5, r6 5394 0178 28BF it cs 5395 017a 3546 movcs r5, r6 5396 .LVL826: 2635:../../../Source/third_party/fatfs/src/ff.c **** if (wcnt > btw) wcnt = btw; 2636:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_TINY 2637:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fp->fs, fp->dsect)) /* Move sector window */ 2638:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2639:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ 2640:../../../Source/third_party/fatfs/src/ff.c **** fp->fs->wflag = 1; 2641:../../../Source/third_party/fatfs/src/ff.c **** #else 2642:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ 5397 .loc 1 2642 0 5398 017c 2044 add r0, r0, r4 5399 017e 2430 adds r0, r0, #36 5400 0180 4946 mov r1, r9 5401 0182 2A46 mov r2, r5 5402 0184 FFF7FEFF bl mem_cpy 5403 .LVL827: 2643:../../../Source/third_party/fatfs/src/ff.c **** fp->flag |= FA__DIRTY; 5404 .loc 1 2643 0 5405 0188 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5406 018a 43F04003 orr r3, r3, #64 5407 018e A371 strb r3, [r4, #6] 5408 .L531: 2566:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ 5409 .loc 1 2566 0 5410 0190 A944 add r9, r9, r5 5411 .LVL828: 5412 0192 A368 ldr r3, [r4, #8] 5413 0194 2B44 add r3, r3, r5 5414 0196 A360 str r3, [r4, #8] 5415 0198 D8F80030 ldr r3, [r8] 5416 019c 2B44 add r3, r3, r5 5417 019e C8F80030 str r3, [r8] 5418 .LVL829: 2565:../../../Source/third_party/fatfs/src/ff.c **** wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { 5419 .loc 1 2565 0 5420 01a2 761B subs r6, r6, r5 5421 .LVL830: 5422 01a4 7FF44EAF bne .L538 5423 .LVL831: 5424 .L516: 2644:../../../Source/third_party/fatfs/src/ff.c **** #endif 2645:../../../Source/third_party/fatfs/src/ff.c **** } 2646:../../../Source/third_party/fatfs/src/ff.c **** 2647:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */ 5425 .loc 1 2647 0 5426 01a8 A368 ldr r3, [r4, #8] 5427 01aa E268 ldr r2, [r4, #12] 5428 01ac 9342 cmp r3, r2 5429 01ae 88BF it hi 5430 01b0 E360 strhi r3, [r4, #12] 2648:../../../Source/third_party/fatfs/src/ff.c **** fp->flag |= FA__WRITTEN; /* Set file change flag */ 5431 .loc 1 2648 0 5432 01b2 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5433 01b4 43F02003 orr r3, r3, #32 5434 01b8 A371 strb r3, [r4, #6] 2649:../../../Source/third_party/fatfs/src/ff.c **** 2650:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_OK); 5435 .loc 1 2650 0 5436 01ba 0020 movs r0, #0 5437 01bc 03E0 b .L515 5438 .LVL832: 5439 .L535: 5440 01be 02E0 b .L515 5441 .L536: 2560:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_WRITE)) /* Check access mode */ 5442 .loc 1 2560 0 5443 01c0 0220 movs r0, #2 5444 .LVL833: 5445 01c2 00E0 b .L515 5446 .LVL834: 5447 .L537: 2562:../../../Source/third_party/fatfs/src/ff.c **** if ((DWORD)(fp->fsize + btw) < fp->fsize) btw = 0; /* File size cannot reach 4GB */ 5448 .loc 1 2562 0 5449 01c4 0720 movs r0, #7 5450 .LVL835: 5451 .L515: 2651:../../../Source/third_party/fatfs/src/ff.c **** } 5452 .loc 1 2651 0 5453 01c6 03B0 add sp, sp, #12 5454 .cfi_def_cfa_offset 36 5455 @ sp needed 5456 01c8 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 5457 .cfi_endproc 5458 .LFE35: 5460 .section .text.f_sync,"ax",%progbits 5461 .align 2 5462 .global f_sync 5463 .thumb 5464 .thumb_func 5466 f_sync: 5467 .LFB36: 2652:../../../Source/third_party/fatfs/src/ff.c **** 2653:../../../Source/third_party/fatfs/src/ff.c **** 2654:../../../Source/third_party/fatfs/src/ff.c **** 2655:../../../Source/third_party/fatfs/src/ff.c **** 2656:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2657:../../../Source/third_party/fatfs/src/ff.c **** /* Synchronize the File Object */ 2658:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2659:../../../Source/third_party/fatfs/src/ff.c **** 2660:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_sync ( 2661:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp /* Pointer to the file object */ 2662:../../../Source/third_party/fatfs/src/ff.c **** ) 2663:../../../Source/third_party/fatfs/src/ff.c **** { 5468 .loc 1 2663 0 5469 .cfi_startproc 5470 @ args = 0, pretend = 0, frame = 0 5471 @ frame_needed = 0, uses_anonymous_args = 0 5472 .LVL836: 5473 0000 38B5 push {r3, r4, r5, lr} 5474 .cfi_def_cfa_offset 16 5475 .cfi_offset 3, -16 5476 .cfi_offset 4, -12 5477 .cfi_offset 5, -8 5478 .cfi_offset 14, -4 5479 0002 0446 mov r4, r0 2664:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2665:../../../Source/third_party/fatfs/src/ff.c **** DWORD tm; 2666:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir; 2667:../../../Source/third_party/fatfs/src/ff.c **** 2668:../../../Source/third_party/fatfs/src/ff.c **** 2669:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity of the object */ 5480 .loc 1 2669 0 5481 0004 FFF7FEFF bl validate 5482 .LVL837: 2670:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 5483 .loc 1 2670 0 5484 0008 0028 cmp r0, #0 5485 000a 49D1 bne .L544 2671:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__WRITTEN) { /* Has the file been written? */ 5486 .loc 1 2671 0 5487 000c A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5488 000e 13F0200F tst r3, #32 5489 0012 46D0 beq .L545 2672:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_TINY /* Write-back dirty buffer */ 2673:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__DIRTY) { 5490 .loc 1 2673 0 5491 0014 13F0400F tst r3, #64 5492 0018 0DD0 beq .L543 2674:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 5493 .loc 1 2674 0 5494 001a 2146 mov r1, r4 5495 001c 51F8243B ldr r3, [r1], #36 5496 0020 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 5497 .LVL838: 5498 0022 A269 ldr r2, [r4, #24] 5499 0024 0123 movs r3, #1 5500 0026 FFF7FEFF bl disk_write 5501 .LVL839: 5502 002a 0028 cmp r0, #0 5503 002c 3BD1 bne .L546 2675:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_DISK_ERR); 2676:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5504 .loc 1 2676 0 5505 002e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5506 0030 23F04003 bic r3, r3, #64 5507 0034 A371 strb r3, [r4, #6] 5508 .L543: 2677:../../../Source/third_party/fatfs/src/ff.c **** } 2678:../../../Source/third_party/fatfs/src/ff.c **** #endif 2679:../../../Source/third_party/fatfs/src/ff.c **** /* Update the directory entry */ 2680:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fp->fs, fp->dir_sect); 5509 .loc 1 2680 0 5510 0036 2068 ldr r0, [r4] 5511 0038 E169 ldr r1, [r4, #28] 5512 003a FFF7FEFF bl move_window 5513 .LVL840: 2681:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 5514 .loc 1 2681 0 5515 003e 0028 cmp r0, #0 5516 0040 33D1 bne .L547 2682:../../../Source/third_party/fatfs/src/ff.c **** dir = fp->dir_ptr; 5517 .loc 1 2682 0 5518 0042 256A ldr r5, [r4, #32] 5519 .LVL841: 2683:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ 5520 .loc 1 2683 0 5521 0044 EB7A ldrb r3, [r5, #11] @ zero_extendqisi2 5522 0046 43F02003 orr r3, r3, #32 5523 004a EB72 strb r3, [r5, #11] 2684:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_FileSize, fp->fsize); /* Update file size */ 5524 .loc 1 2684 0 5525 004c E368 ldr r3, [r4, #12] 5526 004e 2B77 strb r3, [r5, #28] 5527 0050 A389 ldrh r3, [r4, #12] 5528 0052 1B0A lsrs r3, r3, #8 5529 0054 6B77 strb r3, [r5, #29] 5530 0056 E389 ldrh r3, [r4, #14] 5531 0058 AB77 strb r3, [r5, #30] 5532 005a E37B ldrb r3, [r4, #15] @ zero_extendqisi2 5533 005c EB77 strb r3, [r5, #31] 2685:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir, fp->sclust); /* Update start cluster */ 5534 .loc 1 2685 0 5535 005e 2369 ldr r3, [r4, #16] 5536 .LVL842: 5537 .LBB72: 5538 .LBB73: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 5539 .loc 1 1261 0 5540 0060 AB76 strb r3, [r5, #26] 5541 0062 C3F30722 ubfx r2, r3, #8, #8 5542 0066 EA76 strb r2, [r5, #27] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 5543 .loc 1 1262 0 5544 0068 1B0C lsrs r3, r3, #16 5545 .LVL843: 5546 006a 2B75 strb r3, [r5, #20] 5547 006c 1B0A lsrs r3, r3, #8 5548 006e 6B75 strb r3, [r5, #21] 5549 .LBE73: 5550 .LBE72: 2686:../../../Source/third_party/fatfs/src/ff.c **** tm = get_fattime(); /* Update updated time */ 5551 .loc 1 2686 0 5552 0070 FFF7FEFF bl get_fattime 5553 .LVL844: 2687:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_WrtTime, tm); 5554 .loc 1 2687 0 5555 0074 A875 strb r0, [r5, #22] 5556 0076 C0F30723 ubfx r3, r0, #8, #8 5557 007a EB75 strb r3, [r5, #23] 5558 007c 030C lsrs r3, r0, #16 5559 007e 2B76 strb r3, [r5, #24] 5560 0080 000E lsrs r0, r0, #24 5561 .LVL845: 5562 0082 6876 strb r0, [r5, #25] 2688:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_LstAccDate, 0); 5563 .loc 1 2688 0 5564 0084 0023 movs r3, #0 5565 0086 AB74 strb r3, [r5, #18] 5566 0088 EB74 strb r3, [r5, #19] 2689:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__WRITTEN; 5567 .loc 1 2689 0 5568 008a A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5569 008c 23F02003 bic r3, r3, #32 5570 0090 A371 strb r3, [r4, #6] 2690:../../../Source/third_party/fatfs/src/ff.c **** fp->fs->wflag = 1; 5571 .loc 1 2690 0 5572 0092 2368 ldr r3, [r4] 5573 0094 0122 movs r2, #1 5574 0096 1A71 strb r2, [r3, #4] 2691:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(fp->fs); 5575 .loc 1 2691 0 5576 0098 2068 ldr r0, [r4] 5577 009a FFF7FEFF bl sync_fs 5578 .LVL846: 5579 009e 38BD pop {r3, r4, r5, pc} 5580 .LVL847: 5581 .L544: 5582 00a0 38BD pop {r3, r4, r5, pc} 5583 .LVL848: 5584 .L545: 2669:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 5585 .loc 1 2669 0 5586 00a2 0020 movs r0, #0 5587 .LVL849: 5588 00a4 38BD pop {r3, r4, r5, pc} 5589 .LVL850: 5590 .L546: 2675:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5591 .loc 1 2675 0 5592 00a6 0120 movs r0, #1 5593 00a8 38BD pop {r3, r4, r5, pc} 5594 .LVL851: 5595 .L547: 2692:../../../Source/third_party/fatfs/src/ff.c **** } 2693:../../../Source/third_party/fatfs/src/ff.c **** } 2694:../../../Source/third_party/fatfs/src/ff.c **** } 2695:../../../Source/third_party/fatfs/src/ff.c **** 2696:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, res); 2697:../../../Source/third_party/fatfs/src/ff.c **** } 5596 .loc 1 2697 0 5597 00aa 38BD pop {r3, r4, r5, pc} 5598 .cfi_endproc 5599 .LFE36: 5601 .section .text.f_close,"ax",%progbits 5602 .align 2 5603 .global f_close 5604 .thumb 5605 .thumb_func 5607 f_close: 5608 .LFB37: 2698:../../../Source/third_party/fatfs/src/ff.c **** 2699:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 2700:../../../Source/third_party/fatfs/src/ff.c **** 2701:../../../Source/third_party/fatfs/src/ff.c **** 2702:../../../Source/third_party/fatfs/src/ff.c **** 2703:../../../Source/third_party/fatfs/src/ff.c **** 2704:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2705:../../../Source/third_party/fatfs/src/ff.c **** /* Close File */ 2706:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2707:../../../Source/third_party/fatfs/src/ff.c **** 2708:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_close ( 2709:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp /* Pointer to the file object to be closed */ 2710:../../../Source/third_party/fatfs/src/ff.c **** ) 2711:../../../Source/third_party/fatfs/src/ff.c **** { 5609 .loc 1 2711 0 5610 .cfi_startproc 5611 @ args = 0, pretend = 0, frame = 0 5612 @ frame_needed = 0, uses_anonymous_args = 0 5613 .LVL852: 5614 0000 10B5 push {r4, lr} 5615 .cfi_def_cfa_offset 8 5616 .cfi_offset 4, -8 5617 .cfi_offset 14, -4 5618 0002 0446 mov r4, r0 2712:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2713:../../../Source/third_party/fatfs/src/ff.c **** 2714:../../../Source/third_party/fatfs/src/ff.c **** 2715:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_READONLY 2716:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); 2717:../../../Source/third_party/fatfs/src/ff.c **** { 2718:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT 2719:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs = fp->fs; 2720:../../../Source/third_party/fatfs/src/ff.c **** #endif 2721:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) fp->fs = 0; /* Discard file object */ 2722:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fs, res); 2723:../../../Source/third_party/fatfs/src/ff.c **** } 2724:../../../Source/third_party/fatfs/src/ff.c **** #else 2725:../../../Source/third_party/fatfs/src/ff.c **** res = f_sync(fp); /* Flush cached data */ 5619 .loc 1 2725 0 5620 0004 FFF7FEFF bl f_sync 5621 .LVL853: 2726:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 2727:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Decrement open counter */ 2728:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_REENTRANT 2729:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs = fp->fs;; 2730:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); 2731:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 2732:../../../Source/third_party/fatfs/src/ff.c **** res = dec_lock(fp->lockid); 2733:../../../Source/third_party/fatfs/src/ff.c **** unlock_fs(fs, FR_OK); 2734:../../../Source/third_party/fatfs/src/ff.c **** } 2735:../../../Source/third_party/fatfs/src/ff.c **** #else 2736:../../../Source/third_party/fatfs/src/ff.c **** res = dec_lock(fp->lockid); 2737:../../../Source/third_party/fatfs/src/ff.c **** #endif 2738:../../../Source/third_party/fatfs/src/ff.c **** } 2739:../../../Source/third_party/fatfs/src/ff.c **** #endif 2740:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) fp->fs = 0; /* Discard file object */ 5622 .loc 1 2740 0 5623 0008 0346 mov r3, r0 5624 000a 08B9 cbnz r0, .L550 5625 .loc 1 2740 0 is_stmt 0 discriminator 1 5626 000c 0022 movs r2, #0 5627 000e 2260 str r2, [r4] 5628 .L550: 2741:../../../Source/third_party/fatfs/src/ff.c **** return res; 2742:../../../Source/third_party/fatfs/src/ff.c **** #endif 2743:../../../Source/third_party/fatfs/src/ff.c **** } 5629 .loc 1 2743 0 is_stmt 1 5630 0010 1846 mov r0, r3 5631 .LVL854: 5632 0012 10BD pop {r4, pc} 5633 .cfi_endproc 5634 .LFE37: 5636 .section .text.f_lseek,"ax",%progbits 5637 .align 2 5638 .global f_lseek 5639 .thumb 5640 .thumb_func 5642 f_lseek: 5643 .LFB38: 2744:../../../Source/third_party/fatfs/src/ff.c **** 2745:../../../Source/third_party/fatfs/src/ff.c **** 2746:../../../Source/third_party/fatfs/src/ff.c **** 2747:../../../Source/third_party/fatfs/src/ff.c **** 2748:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2749:../../../Source/third_party/fatfs/src/ff.c **** /* Current Drive/Directory Handlings */ 2750:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2751:../../../Source/third_party/fatfs/src/ff.c **** 2752:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH >= 1 2753:../../../Source/third_party/fatfs/src/ff.c **** 2754:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_chdrive ( 2755:../../../Source/third_party/fatfs/src/ff.c **** BYTE drv /* Drive number */ 2756:../../../Source/third_party/fatfs/src/ff.c **** ) 2757:../../../Source/third_party/fatfs/src/ff.c **** { 2758:../../../Source/third_party/fatfs/src/ff.c **** if (drv >= _VOLUMES) return FR_INVALID_DRIVE; 2759:../../../Source/third_party/fatfs/src/ff.c **** 2760:../../../Source/third_party/fatfs/src/ff.c **** CurrVol = drv; 2761:../../../Source/third_party/fatfs/src/ff.c **** 2762:../../../Source/third_party/fatfs/src/ff.c **** return FR_OK; 2763:../../../Source/third_party/fatfs/src/ff.c **** } 2764:../../../Source/third_party/fatfs/src/ff.c **** 2765:../../../Source/third_party/fatfs/src/ff.c **** 2766:../../../Source/third_party/fatfs/src/ff.c **** 2767:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_chdir ( 2768:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path /* Pointer to the directory path */ 2769:../../../Source/third_party/fatfs/src/ff.c **** ) 2770:../../../Source/third_party/fatfs/src/ff.c **** { 2771:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2772:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 2773:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 2774:../../../Source/third_party/fatfs/src/ff.c **** 2775:../../../Source/third_party/fatfs/src/ff.c **** 2776:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 0); 2777:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 2778:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 2779:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the path */ 2780:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 2781:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Follow completed */ 2782:../../../Source/third_party/fatfs/src/ff.c **** if (!dj.dir) { 2783:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->cdir = dj.sclust; /* Start directory itself */ 2784:../../../Source/third_party/fatfs/src/ff.c **** } else { 2785:../../../Source/third_party/fatfs/src/ff.c **** if (dj.dir[DIR_Attr] & AM_DIR) /* Reached to the directory */ 2786:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->cdir = ld_clust(dj.fs, dj.dir); 2787:../../../Source/third_party/fatfs/src/ff.c **** else 2788:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_PATH; /* Reached but a file */ 2789:../../../Source/third_party/fatfs/src/ff.c **** } 2790:../../../Source/third_party/fatfs/src/ff.c **** } 2791:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_NO_PATH; 2792:../../../Source/third_party/fatfs/src/ff.c **** } 2793:../../../Source/third_party/fatfs/src/ff.c **** 2794:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 2795:../../../Source/third_party/fatfs/src/ff.c **** } 2796:../../../Source/third_party/fatfs/src/ff.c **** 2797:../../../Source/third_party/fatfs/src/ff.c **** 2798:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH >= 2 2799:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_getcwd ( 2800:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *buff, /* Pointer to the directory path */ 2801:../../../Source/third_party/fatfs/src/ff.c **** UINT len /* Size of path */ 2802:../../../Source/third_party/fatfs/src/ff.c **** ) 2803:../../../Source/third_party/fatfs/src/ff.c **** { 2804:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2805:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 2806:../../../Source/third_party/fatfs/src/ff.c **** UINT i, n; 2807:../../../Source/third_party/fatfs/src/ff.c **** DWORD ccl; 2808:../../../Source/third_party/fatfs/src/ff.c **** TCHAR *tp; 2809:../../../Source/third_party/fatfs/src/ff.c **** FILINFO fno; 2810:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 2811:../../../Source/third_party/fatfs/src/ff.c **** 2812:../../../Source/third_party/fatfs/src/ff.c **** 2813:../../../Source/third_party/fatfs/src/ff.c **** *buff = 0; 2814:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted((const TCHAR**)&buff, &dj.fs, 0); /* Get current volume */ 2815:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 2816:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 2817:../../../Source/third_party/fatfs/src/ff.c **** i = len; /* Bottom of buffer (dir stack base) */ 2818:../../../Source/third_party/fatfs/src/ff.c **** dj.sclust = dj.fs->cdir; /* Start to follow upper dir from current dir */ 2819:../../../Source/third_party/fatfs/src/ff.c **** while ((ccl = dj.sclust) != 0) { /* Repeat while current dir is a sub-dir */ 2820:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(&dj, 1); /* Get parent dir */ 2821:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2822:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(&dj, 0); 2823:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2824:../../../Source/third_party/fatfs/src/ff.c **** dj.sclust = ld_clust(dj.fs, dj.dir); /* Goto parent dir */ 2825:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(&dj, 0); 2826:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2827:../../../Source/third_party/fatfs/src/ff.c **** do { /* Find the entry links to the child dir */ 2828:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(&dj, 0); 2829:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2830:../../../Source/third_party/fatfs/src/ff.c **** if (ccl == ld_clust(dj.fs, dj.dir)) break; /* Found the entry */ 2831:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(&dj, 0); 2832:../../../Source/third_party/fatfs/src/ff.c **** } while (res == FR_OK); 2833:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */ 2834:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 2835:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 2836:../../../Source/third_party/fatfs/src/ff.c **** fno.lfname = buff; 2837:../../../Source/third_party/fatfs/src/ff.c **** fno.lfsize = i; 2838:../../../Source/third_party/fatfs/src/ff.c **** #endif 2839:../../../Source/third_party/fatfs/src/ff.c **** get_fileinfo(&dj, &fno); /* Get the dir name and push it to the buffer */ 2840:../../../Source/third_party/fatfs/src/ff.c **** tp = fno.fname; 2841:../../../Source/third_party/fatfs/src/ff.c **** if (_USE_LFN && *buff) tp = buff; 2842:../../../Source/third_party/fatfs/src/ff.c **** for (n = 0; tp[n]; n++) ; 2843:../../../Source/third_party/fatfs/src/ff.c **** if (i < n + 3) { 2844:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NOT_ENOUGH_CORE; break; 2845:../../../Source/third_party/fatfs/src/ff.c **** } 2846:../../../Source/third_party/fatfs/src/ff.c **** while (n) buff[--i] = tp[--n]; 2847:../../../Source/third_party/fatfs/src/ff.c **** buff[--i] = '/'; 2848:../../../Source/third_party/fatfs/src/ff.c **** } 2849:../../../Source/third_party/fatfs/src/ff.c **** tp = buff; 2850:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 2851:../../../Source/third_party/fatfs/src/ff.c **** *tp++ = '0' + CurrVol; /* Put drive number */ 2852:../../../Source/third_party/fatfs/src/ff.c **** *tp++ = ':'; 2853:../../../Source/third_party/fatfs/src/ff.c **** if (i == len) { /* Root-dir */ 2854:../../../Source/third_party/fatfs/src/ff.c **** *tp++ = '/'; 2855:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Sub-dir */ 2856:../../../Source/third_party/fatfs/src/ff.c **** do /* Add stacked path str */ 2857:../../../Source/third_party/fatfs/src/ff.c **** *tp++ = buff[i++]; 2858:../../../Source/third_party/fatfs/src/ff.c **** while (i < len); 2859:../../../Source/third_party/fatfs/src/ff.c **** } 2860:../../../Source/third_party/fatfs/src/ff.c **** } 2861:../../../Source/third_party/fatfs/src/ff.c **** *tp = 0; 2862:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 2863:../../../Source/third_party/fatfs/src/ff.c **** } 2864:../../../Source/third_party/fatfs/src/ff.c **** 2865:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 2866:../../../Source/third_party/fatfs/src/ff.c **** } 2867:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_RPATH >= 2 */ 2868:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_RPATH >= 1 */ 2869:../../../Source/third_party/fatfs/src/ff.c **** 2870:../../../Source/third_party/fatfs/src/ff.c **** 2871:../../../Source/third_party/fatfs/src/ff.c **** 2872:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_MINIMIZE <= 2 2873:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2874:../../../Source/third_party/fatfs/src/ff.c **** /* Seek File R/W Pointer */ 2875:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 2876:../../../Source/third_party/fatfs/src/ff.c **** 2877:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_lseek ( 2878:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp, /* Pointer to the file object */ 2879:../../../Source/third_party/fatfs/src/ff.c **** DWORD ofs /* File pointer from top of file */ 2880:../../../Source/third_party/fatfs/src/ff.c **** ) 2881:../../../Source/third_party/fatfs/src/ff.c **** { 5644 .loc 1 2881 0 5645 .cfi_startproc 5646 @ args = 0, pretend = 0, frame = 0 5647 @ frame_needed = 0, uses_anonymous_args = 0 5648 .LVL855: 5649 0000 70B5 push {r4, r5, r6, lr} 5650 .cfi_def_cfa_offset 16 5651 .cfi_offset 4, -16 5652 .cfi_offset 5, -12 5653 .cfi_offset 6, -8 5654 .cfi_offset 14, -4 5655 0002 0446 mov r4, r0 5656 0004 0D46 mov r5, r1 2882:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 2883:../../../Source/third_party/fatfs/src/ff.c **** 2884:../../../Source/third_party/fatfs/src/ff.c **** 2885:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity of the object */ 5657 .loc 1 2885 0 5658 0006 FFF7FEFF bl validate 5659 .LVL856: 2886:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) LEAVE_FF(fp->fs, res); 5660 .loc 1 2886 0 5661 000a 0028 cmp r0, #0 5662 000c 40F0BC80 bne .L573 2887:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__ERROR) /* Check abort flag */ 5663 .loc 1 2887 0 5664 0010 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5665 0012 13F0800F tst r3, #128 5666 0016 40F0B880 bne .L574 5667 .LBB74: 2888:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_INT_ERR); 2889:../../../Source/third_party/fatfs/src/ff.c **** 2890:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FASTSEEK 2891:../../../Source/third_party/fatfs/src/ff.c **** if (fp->cltbl) { /* Fast seek */ 2892:../../../Source/third_party/fatfs/src/ff.c **** DWORD cl, pcl, ncl, tcl, dsc, tlen, ulen, *tbl; 2893:../../../Source/third_party/fatfs/src/ff.c **** 2894:../../../Source/third_party/fatfs/src/ff.c **** if (ofs == CREATE_LINKMAP) { /* Create CLMT */ 2895:../../../Source/third_party/fatfs/src/ff.c **** tbl = fp->cltbl; 2896:../../../Source/third_party/fatfs/src/ff.c **** tlen = *tbl++; ulen = 2; /* Given table size and required table size */ 2897:../../../Source/third_party/fatfs/src/ff.c **** cl = fp->sclust; /* Top of the chain */ 2898:../../../Source/third_party/fatfs/src/ff.c **** if (cl) { 2899:../../../Source/third_party/fatfs/src/ff.c **** do { 2900:../../../Source/third_party/fatfs/src/ff.c **** /* Get a fragment */ 2901:../../../Source/third_party/fatfs/src/ff.c **** tcl = cl; ncl = 0; ulen += 2; /* Top, length and used items */ 2902:../../../Source/third_party/fatfs/src/ff.c **** do { 2903:../../../Source/third_party/fatfs/src/ff.c **** pcl = cl; ncl++; 2904:../../../Source/third_party/fatfs/src/ff.c **** cl = get_fat(fp->fs, cl); 2905:../../../Source/third_party/fatfs/src/ff.c **** if (cl <= 1) ABORT(fp->fs, FR_INT_ERR); 2906:../../../Source/third_party/fatfs/src/ff.c **** if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 2907:../../../Source/third_party/fatfs/src/ff.c **** } while (cl == pcl + 1); 2908:../../../Source/third_party/fatfs/src/ff.c **** if (ulen <= tlen) { /* Store the length and top of the fragment */ 2909:../../../Source/third_party/fatfs/src/ff.c **** *tbl++ = ncl; *tbl++ = tcl; 2910:../../../Source/third_party/fatfs/src/ff.c **** } 2911:../../../Source/third_party/fatfs/src/ff.c **** } while (cl < fp->fs->n_fatent); /* Repeat until end of chain */ 2912:../../../Source/third_party/fatfs/src/ff.c **** } 2913:../../../Source/third_party/fatfs/src/ff.c **** *fp->cltbl = ulen; /* Number of items used */ 2914:../../../Source/third_party/fatfs/src/ff.c **** if (ulen <= tlen) 2915:../../../Source/third_party/fatfs/src/ff.c **** *tbl = 0; /* Terminate table */ 2916:../../../Source/third_party/fatfs/src/ff.c **** else 2917:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */ 2918:../../../Source/third_party/fatfs/src/ff.c **** 2919:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Fast seek */ 2920:../../../Source/third_party/fatfs/src/ff.c **** if (ofs > fp->fsize) /* Clip offset at the file size */ 2921:../../../Source/third_party/fatfs/src/ff.c **** ofs = fp->fsize; 2922:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr = ofs; /* Set file pointer */ 2923:../../../Source/third_party/fatfs/src/ff.c **** if (ofs) { 2924:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clmt_clust(fp, ofs - 1); 2925:../../../Source/third_party/fatfs/src/ff.c **** dsc = clust2sect(fp->fs, fp->clust); 2926:../../../Source/third_party/fatfs/src/ff.c **** if (!dsc) ABORT(fp->fs, FR_INT_ERR); 2927:../../../Source/third_party/fatfs/src/ff.c **** dsc += (ofs - 1) / SS(fp->fs) & (fp->fs->csize - 1); 2928:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { /* Refill sector cache if needed */ 2929:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_TINY 2930:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2931:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ 2932:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 2933:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2934:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 2935:../../../Source/third_party/fatfs/src/ff.c **** } 2936:../../../Source/third_party/fatfs/src/ff.c **** #endif 2937:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) /* Load current sector */ 2938:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 2939:../../../Source/third_party/fatfs/src/ff.c **** #endif 2940:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = dsc; 2941:../../../Source/third_party/fatfs/src/ff.c **** } 2942:../../../Source/third_party/fatfs/src/ff.c **** } 2943:../../../Source/third_party/fatfs/src/ff.c **** } 2944:../../../Source/third_party/fatfs/src/ff.c **** } else 2945:../../../Source/third_party/fatfs/src/ff.c **** #endif 2946:../../../Source/third_party/fatfs/src/ff.c **** 2947:../../../Source/third_party/fatfs/src/ff.c **** /* Normal Seek */ 2948:../../../Source/third_party/fatfs/src/ff.c **** { 2949:../../../Source/third_party/fatfs/src/ff.c **** DWORD clst, bcs, nsect, ifptr; 2950:../../../Source/third_party/fatfs/src/ff.c **** 2951:../../../Source/third_party/fatfs/src/ff.c **** if (ofs > fp->fsize /* In read-only mode, clip offset with the file size */ 5668 .loc 1 2951 0 5669 001a E268 ldr r2, [r4, #12] 5670 001c AA42 cmp r2, r5 5671 001e 05D2 bcs .L554 2952:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2953:../../../Source/third_party/fatfs/src/ff.c **** && !(fp->flag & FA_WRITE) 5672 .loc 1 2953 0 5673 0020 03F00203 and r3, r3, #2 5674 0024 DBB2 uxtb r3, r3 2954:../../../Source/third_party/fatfs/src/ff.c **** #endif 2955:../../../Source/third_party/fatfs/src/ff.c **** ) ofs = fp->fsize; 5675 .loc 1 2955 0 5676 0026 002B cmp r3, #0 5677 0028 08BF it eq 5678 002a 1546 moveq r5, r2 5679 .LVL857: 5680 .L554: 2956:../../../Source/third_party/fatfs/src/ff.c **** 2957:../../../Source/third_party/fatfs/src/ff.c **** ifptr = fp->fptr; 5681 .loc 1 2957 0 5682 002c A368 ldr r3, [r4, #8] 5683 .LVL858: 2958:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr = nsect = 0; 5684 .loc 1 2958 0 5685 002e 0022 movs r2, #0 5686 0030 A260 str r2, [r4, #8] 2959:../../../Source/third_party/fatfs/src/ff.c **** if (ofs) { 5687 .loc 1 2959 0 5688 0032 002D cmp r5, #0 5689 0034 00F0AB80 beq .L575 2960:../../../Source/third_party/fatfs/src/ff.c **** bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ 5690 .loc 1 2960 0 5691 0038 2068 ldr r0, [r4] 5692 .LVL859: 5693 003a 8678 ldrb r6, [r0, #2] @ zero_extendqisi2 5694 003c 7602 lsls r6, r6, #9 5695 .LVL860: 2961:../../../Source/third_party/fatfs/src/ff.c **** if (ifptr > 0 && 5696 .loc 1 2961 0 5697 003e 6BB1 cbz r3, .L555 2962:../../../Source/third_party/fatfs/src/ff.c **** (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ 5698 .loc 1 2962 0 discriminator 1 5699 0040 013B subs r3, r3, #1 5700 .LVL861: 5701 0042 6A1E subs r2, r5, #1 5702 0044 B2FBF6F2 udiv r2, r2, r6 5703 0048 B3FBF6F1 udiv r1, r3, r6 2961:../../../Source/third_party/fatfs/src/ff.c **** if (ifptr > 0 && 5704 .loc 1 2961 0 discriminator 1 5705 004c 8A42 cmp r2, r1 5706 004e 05D3 bcc .L555 2963:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ 5707 .loc 1 2963 0 5708 0050 7242 negs r2, r6 5709 0052 1340 ands r3, r3, r2 5710 .LVL862: 5711 0054 A360 str r3, [r4, #8] 2964:../../../Source/third_party/fatfs/src/ff.c **** ofs -= fp->fptr; 5712 .loc 1 2964 0 5713 0056 ED1A subs r5, r5, r3 5714 .LVL863: 2965:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->clust; 5715 .loc 1 2965 0 5716 0058 6169 ldr r1, [r4, #20] 5717 .LVL864: 5718 005a 17E0 b .L556 5719 .LVL865: 5720 .L555: 2966:../../../Source/third_party/fatfs/src/ff.c **** } else { /* When seek to back cluster, */ 2967:../../../Source/third_party/fatfs/src/ff.c **** clst = fp->sclust; /* start from the first cluster */ 5721 .loc 1 2967 0 5722 005c 2169 ldr r1, [r4, #16] 5723 .LVL866: 2968:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2969:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) { /* If no cluster chain, create a new chain */ 5724 .loc 1 2969 0 5725 005e A1B9 cbnz r1, .L557 2970:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(fp->fs, 0); 5726 .loc 1 2970 0 5727 0060 FFF7FEFF bl create_chain 5728 .LVL867: 5729 0064 0146 mov r1, r0 5730 .LVL868: 2971:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 1) ABORT(fp->fs, FR_INT_ERR); 5731 .loc 1 2971 0 5732 0066 0128 cmp r0, #1 5733 0068 05D1 bne .L558 5734 .loc 1 2971 0 is_stmt 0 discriminator 1 5735 006a A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5736 006c 63F07F03 orn r3, r3, #127 5737 0070 A371 strb r3, [r4, #6] 5738 0072 0220 movs r0, #2 5739 .LVL869: 5740 0074 70BD pop {r4, r5, r6, pc} 5741 .LVL870: 5742 .L558: 2972:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 5743 .loc 1 2972 0 is_stmt 1 5744 0076 B0F1FF3F cmp r0, #-1 5745 007a 05D1 bne .L559 5746 .loc 1 2972 0 is_stmt 0 discriminator 1 5747 007c A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5748 007e 63F07F03 orn r3, r3, #127 5749 0082 A371 strb r3, [r4, #6] 5750 0084 0120 movs r0, #1 5751 .LVL871: 5752 0086 70BD pop {r4, r5, r6, pc} 5753 .LVL872: 5754 .L559: 2973:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust = clst; 5755 .loc 1 2973 0 is_stmt 1 5756 0088 2061 str r0, [r4, #16] 5757 .LVL873: 5758 .L557: 2974:../../../Source/third_party/fatfs/src/ff.c **** } 2975:../../../Source/third_party/fatfs/src/ff.c **** #endif 2976:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; 5759 .loc 1 2976 0 5760 008a 6161 str r1, [r4, #20] 5761 .L556: 2977:../../../Source/third_party/fatfs/src/ff.c **** } 2978:../../../Source/third_party/fatfs/src/ff.c **** if (clst != 0) { 5762 .loc 1 2978 0 5763 008c 0029 cmp r1, #0 5764 008e 40D0 beq .L576 2979:../../../Source/third_party/fatfs/src/ff.c **** while (ofs > bcs) { /* Cluster following loop */ 5765 .loc 1 2979 0 5766 0090 B542 cmp r5, r6 5767 0092 2BD9 bls .L561 5768 .L580: 2980:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 2981:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ 5769 .loc 1 2981 0 5770 0094 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5771 0096 13F0020F tst r3, #2 5772 009a 05D0 beq .L562 2982:../../../Source/third_party/fatfs/src/ff.c **** clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ 5773 .loc 1 2982 0 5774 009c 2068 ldr r0, [r4] 5775 009e FFF7FEFF bl create_chain 5776 .LVL874: 2983:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0) { /* When disk gets full, clip file size */ 5777 .loc 1 2983 0 5778 00a2 0146 mov r1, r0 5779 00a4 20B9 cbnz r0, .L563 5780 00a6 20E0 b .L577 5781 .LVL875: 5782 .L562: 2984:../../../Source/third_party/fatfs/src/ff.c **** ofs = bcs; break; 2985:../../../Source/third_party/fatfs/src/ff.c **** } 2986:../../../Source/third_party/fatfs/src/ff.c **** } else 2987:../../../Source/third_party/fatfs/src/ff.c **** #endif 2988:../../../Source/third_party/fatfs/src/ff.c **** clst = get_fat(fp->fs, clst); /* Follow cluster chain if not in write mode */ 5783 .loc 1 2988 0 5784 00a8 2068 ldr r0, [r4] 5785 00aa FFF7FEFF bl get_fat 5786 .LVL876: 5787 00ae 0146 mov r1, r0 5788 .LVL877: 5789 .L563: 2989:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 5790 .loc 1 2989 0 5791 00b0 B1F1FF3F cmp r1, #-1 5792 00b4 05D1 bne .L564 5793 .loc 1 2989 0 is_stmt 0 discriminator 1 5794 00b6 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5795 00b8 63F07F03 orn r3, r3, #127 5796 00bc A371 strb r3, [r4, #6] 5797 00be 0120 movs r0, #1 5798 .LVL878: 5799 00c0 70BD pop {r4, r5, r6, pc} 5800 .LVL879: 5801 .L564: 2990:../../../Source/third_party/fatfs/src/ff.c **** if (clst <= 1 || clst >= fp->fs->n_fatent) ABORT(fp->fs, FR_INT_ERR); 5802 .loc 1 2990 0 is_stmt 1 5803 00c2 0129 cmp r1, #1 5804 00c4 03D9 bls .L565 5805 .loc 1 2990 0 is_stmt 0 discriminator 2 5806 00c6 2368 ldr r3, [r4] 5807 00c8 9B69 ldr r3, [r3, #24] 5808 00ca 9942 cmp r1, r3 5809 00cc 05D3 bcc .L566 5810 .L565: 5811 .loc 1 2990 0 discriminator 3 5812 00ce A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5813 00d0 63F07F03 orn r3, r3, #127 5814 00d4 A371 strb r3, [r4, #6] 5815 00d6 0220 movs r0, #2 5816 .LVL880: 5817 00d8 70BD pop {r4, r5, r6, pc} 5818 .LVL881: 5819 .L566: 2991:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; 5820 .loc 1 2991 0 is_stmt 1 5821 00da 6161 str r1, [r4, #20] 2992:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr += bcs; 5822 .loc 1 2992 0 5823 00dc A368 ldr r3, [r4, #8] 5824 00de 3344 add r3, r3, r6 5825 00e0 A360 str r3, [r4, #8] 2993:../../../Source/third_party/fatfs/src/ff.c **** ofs -= bcs; 5826 .loc 1 2993 0 5827 00e2 AD1B subs r5, r5, r6 5828 .LVL882: 2979:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 5829 .loc 1 2979 0 5830 00e4 AE42 cmp r6, r5 5831 00e6 D5D3 bcc .L580 5832 .LVL883: 5833 00e8 00E0 b .L561 5834 .L577: 2984:../../../Source/third_party/fatfs/src/ff.c **** } 5835 .loc 1 2984 0 5836 00ea 3546 mov r5, r6 5837 .LVL884: 5838 .L561: 2994:../../../Source/third_party/fatfs/src/ff.c **** } 2995:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr += ofs; 5839 .loc 1 2995 0 5840 00ec A368 ldr r3, [r4, #8] 5841 00ee 2B44 add r3, r3, r5 5842 00f0 A360 str r3, [r4, #8] 2996:../../../Source/third_party/fatfs/src/ff.c **** if (ofs % SS(fp->fs)) { 5843 .loc 1 2996 0 5844 00f2 C5F30803 ubfx r3, r5, #0, #9 5845 00f6 73B1 cbz r3, .L578 2997:../../../Source/third_party/fatfs/src/ff.c **** nsect = clust2sect(fp->fs, clst); /* Current sector */ 5846 .loc 1 2997 0 5847 00f8 2068 ldr r0, [r4] 5848 00fa FFF7FEFF bl clust2sect 5849 .LVL885: 2998:../../../Source/third_party/fatfs/src/ff.c **** if (!nsect) ABORT(fp->fs, FR_INT_ERR); 5850 .loc 1 2998 0 5851 00fe 28B9 cbnz r0, .L568 5852 .loc 1 2998 0 is_stmt 0 discriminator 1 5853 0100 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5854 0102 63F07F03 orn r3, r3, #127 5855 0106 A371 strb r3, [r4, #6] 5856 0108 0220 movs r0, #2 5857 .LVL886: 5858 010a 70BD pop {r4, r5, r6, pc} 5859 .LVL887: 5860 .L568: 2999:../../../Source/third_party/fatfs/src/ff.c **** nsect += ofs / SS(fp->fs); 5861 .loc 1 2999 0 is_stmt 1 5862 010c 00EB5525 add r5, r0, r5, lsr #9 5863 .LVL888: 5864 0110 02E0 b .L560 5865 .LVL889: 5866 .L576: 2958:../../../Source/third_party/fatfs/src/ff.c **** if (ofs) { 5867 .loc 1 2958 0 5868 0112 0025 movs r5, #0 5869 .LVL890: 5870 0114 00E0 b .L560 5871 .LVL891: 5872 .L578: 5873 0116 0025 movs r5, #0 5874 .LVL892: 5875 .L560: 3000:../../../Source/third_party/fatfs/src/ff.c **** } 3001:../../../Source/third_party/fatfs/src/ff.c **** } 3002:../../../Source/third_party/fatfs/src/ff.c **** } 3003:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { /* Fill sector cache if needed */ 5876 .loc 1 3003 0 5877 0118 A368 ldr r3, [r4, #8] 5878 011a C3F30803 ubfx r3, r3, #0, #9 5879 011e 43B3 cbz r3, .L569 5880 .loc 1 3003 0 is_stmt 0 discriminator 1 5881 0120 A269 ldr r2, [r4, #24] 5882 0122 AA42 cmp r2, r5 5883 0124 25D0 beq .L569 3004:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_TINY 3005:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 3006:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ 5884 .loc 1 3006 0 is_stmt 1 5885 0126 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5886 0128 13F0400F tst r3, #64 5887 012c 11D0 beq .L570 3007:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) 5888 .loc 1 3007 0 5889 012e 2146 mov r1, r4 5890 0130 51F8243B ldr r3, [r1], #36 5891 0134 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 5892 0136 0123 movs r3, #1 5893 0138 FFF7FEFF bl disk_write 5894 .LVL893: 5895 013c 28B1 cbz r0, .L571 3008:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5896 .loc 1 3008 0 5897 013e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5898 0140 63F07F03 orn r3, r3, #127 5899 0144 A371 strb r3, [r4, #6] 5900 0146 0120 movs r0, #1 5901 0148 70BD pop {r4, r5, r6, pc} 5902 .LVL894: 5903 .L571: 3009:../../../Source/third_party/fatfs/src/ff.c **** fp->flag &= ~FA__DIRTY; 5904 .loc 1 3009 0 5905 014a A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5906 014c 23F04003 bic r3, r3, #64 5907 0150 A371 strb r3, [r4, #6] 5908 .L570: 3010:../../../Source/third_party/fatfs/src/ff.c **** } 3011:../../../Source/third_party/fatfs/src/ff.c **** #endif 3012:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(fp->fs->drv, fp->buf, nsect, 1) != RES_OK) /* Fill sector cache */ 5909 .loc 1 3012 0 5910 0152 2146 mov r1, r4 5911 0154 51F8243B ldr r3, [r1], #36 5912 0158 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 5913 015a 2A46 mov r2, r5 5914 015c 0123 movs r3, #1 5915 015e FFF7FEFF bl disk_read 5916 .LVL895: 5917 0162 28B1 cbz r0, .L572 3013:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 5918 .loc 1 3013 0 5919 0164 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5920 0166 63F07F03 orn r3, r3, #127 5921 016a A371 strb r3, [r4, #6] 5922 016c 0120 movs r0, #1 5923 016e 70BD pop {r4, r5, r6, pc} 5924 .LVL896: 5925 .L572: 3014:../../../Source/third_party/fatfs/src/ff.c **** #endif 3015:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = nsect; 5926 .loc 1 3015 0 5927 0170 A561 str r5, [r4, #24] 5928 .L569: 3016:../../../Source/third_party/fatfs/src/ff.c **** } 3017:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 3018:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr > fp->fsize) { /* Set file change flag if the file size is extended */ 5929 .loc 1 3018 0 5930 0172 A368 ldr r3, [r4, #8] 5931 0174 E268 ldr r2, [r4, #12] 5932 0176 9342 cmp r3, r2 5933 0178 0BD9 bls .L579 3019:../../../Source/third_party/fatfs/src/ff.c **** fp->fsize = fp->fptr; 5934 .loc 1 3019 0 5935 017a E360 str r3, [r4, #12] 3020:../../../Source/third_party/fatfs/src/ff.c **** fp->flag |= FA__WRITTEN; 5936 .loc 1 3020 0 5937 017c A379 ldrb r3, [r4, #6] @ zero_extendqisi2 5938 017e 43F02003 orr r3, r3, #32 5939 0182 A371 strb r3, [r4, #6] 5940 .LBE74: 3021:../../../Source/third_party/fatfs/src/ff.c **** } 3022:../../../Source/third_party/fatfs/src/ff.c **** #endif 3023:../../../Source/third_party/fatfs/src/ff.c **** } 3024:../../../Source/third_party/fatfs/src/ff.c **** 3025:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, res); 5941 .loc 1 3025 0 5942 0184 0020 movs r0, #0 5943 0186 70BD pop {r4, r5, r6, pc} 5944 .LVL897: 5945 .L573: 5946 0188 70BD pop {r4, r5, r6, pc} 5947 .LVL898: 5948 .L574: 2888:../../../Source/third_party/fatfs/src/ff.c **** 5949 .loc 1 2888 0 5950 018a 0220 movs r0, #2 5951 .LVL899: 5952 018c 70BD pop {r4, r5, r6, pc} 5953 .LVL900: 5954 .L575: 5955 .loc 1 3025 0 5956 018e 0020 movs r0, #0 5957 .LVL901: 5958 0190 70BD pop {r4, r5, r6, pc} 5959 .LVL902: 5960 .L579: 5961 0192 0020 movs r0, #0 3026:../../../Source/third_party/fatfs/src/ff.c **** } 5962 .loc 1 3026 0 5963 0194 70BD pop {r4, r5, r6, pc} 5964 .cfi_endproc 5965 .LFE38: 5967 0196 00BF .section .text.f_opendir,"ax",%progbits 5968 .align 2 5969 .global f_opendir 5970 .thumb 5971 .thumb_func 5973 f_opendir: 5974 .LFB39: 3027:../../../Source/third_party/fatfs/src/ff.c **** 3028:../../../Source/third_party/fatfs/src/ff.c **** 3029:../../../Source/third_party/fatfs/src/ff.c **** 3030:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_MINIMIZE <= 1 3031:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3032:../../../Source/third_party/fatfs/src/ff.c **** /* Create a Directory Object */ 3033:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3034:../../../Source/third_party/fatfs/src/ff.c **** 3035:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_opendir ( 3036:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to directory object to create */ 3037:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path /* Pointer to the directory path */ 3038:../../../Source/third_party/fatfs/src/ff.c **** ) 3039:../../../Source/third_party/fatfs/src/ff.c **** { 5975 .loc 1 3039 0 5976 .cfi_startproc 5977 @ args = 0, pretend = 0, frame = 24 5978 @ frame_needed = 0, uses_anonymous_args = 0 5979 .LVL903: 5980 0000 30B5 push {r4, r5, lr} 5981 .cfi_def_cfa_offset 12 5982 .cfi_offset 4, -12 5983 .cfi_offset 5, -8 5984 .cfi_offset 14, -4 5985 0002 87B0 sub sp, sp, #28 5986 .cfi_def_cfa_offset 40 5987 0004 0191 str r1, [sp, #4] 3040:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3041:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; 3042:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3043:../../../Source/third_party/fatfs/src/ff.c **** 3044:../../../Source/third_party/fatfs/src/ff.c **** 3045:../../../Source/third_party/fatfs/src/ff.c **** if (!dj) return FR_INVALID_OBJECT; 5988 .loc 1 3045 0 5989 0006 30B3 cbz r0, .L591 5990 0008 0446 mov r4, r0 3046:../../../Source/third_party/fatfs/src/ff.c **** 3047:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj->fs, 0); 5991 .loc 1 3047 0 5992 000a 01A8 add r0, sp, #4 5993 .LVL904: 5994 000c 2146 mov r1, r4 5995 .LVL905: 5996 000e 0022 movs r2, #0 5997 0010 FFF7FEFF bl chk_mounted 5998 .LVL906: 3048:../../../Source/third_party/fatfs/src/ff.c **** fs = dj->fs; 5999 .loc 1 3048 0 6000 0014 2568 ldr r5, [r4] 6001 .LVL907: 3049:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6002 .loc 1 3049 0 6003 0016 D8B9 cbnz r0, .L585 3050:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(*dj); 6004 .loc 1 3050 0 6005 0018 03AB add r3, sp, #12 6006 001a A361 str r3, [r4, #24] 6007 001c 184B ldr r3, .L597 6008 001e E361 str r3, [r4, #28] 3051:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(dj, path); /* Follow the path to the directory */ 6009 .loc 1 3051 0 6010 0020 2046 mov r0, r4 6011 .LVL908: 6012 0022 0199 ldr r1, [sp, #4] 6013 0024 FFF7FEFF bl follow_path 6014 .LVL909: 3052:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3053:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Follow completed */ 6015 .loc 1 3053 0 6016 0028 0346 mov r3, r0 6017 002a 10BB cbnz r0, .L586 3054:../../../Source/third_party/fatfs/src/ff.c **** if (dj->dir) { /* It is not the root dir */ 6018 .loc 1 3054 0 6019 002c 6169 ldr r1, [r4, #20] 6020 002e B1B1 cbz r1, .L587 3055:../../../Source/third_party/fatfs/src/ff.c **** if (dj->dir[DIR_Attr] & AM_DIR) { /* The object is a directory */ 6021 .loc 1 3055 0 6022 0030 CB7A ldrb r3, [r1, #11] @ zero_extendqisi2 6023 0032 13F0100F tst r3, #16 6024 0036 06D0 beq .L592 3056:../../../Source/third_party/fatfs/src/ff.c **** dj->sclust = ld_clust(fs, dj->dir); 6025 .loc 1 3056 0 6026 0038 2846 mov r0, r5 6027 .LVL910: 6028 003a FFF7FEFF bl ld_clust 6029 .LVL911: 6030 003e A060 str r0, [r4, #8] 6031 0040 0DE0 b .L587 6032 .LVL912: 6033 .L595: 3057:../../../Source/third_party/fatfs/src/ff.c **** } else { /* The object is not a directory */ 3058:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_PATH; 3059:../../../Source/third_party/fatfs/src/ff.c **** } 3060:../../../Source/third_party/fatfs/src/ff.c **** } 3061:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3062:../../../Source/third_party/fatfs/src/ff.c **** dj->id = fs->id; 3063:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); /* Rewind dir */ 3064:../../../Source/third_party/fatfs/src/ff.c **** } 3065:../../../Source/third_party/fatfs/src/ff.c **** } 3066:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_NO_PATH; 3067:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) dj->fs = 0; /* Invalidate the dir object if function faild */ 6034 .loc 1 3067 0 6035 0042 53B1 cbz r3, .L593 6036 0044 00E0 b .L588 6037 .LVL913: 6038 .L592: 3058:../../../Source/third_party/fatfs/src/ff.c **** } 6039 .loc 1 3058 0 6040 0046 0523 movs r3, #5 6041 .LVL914: 6042 .L588: 6043 .loc 1 3067 0 discriminator 1 6044 0048 0022 movs r2, #0 6045 004a 2260 str r2, [r4] 6046 004c 1846 mov r0, r3 6047 004e 14E0 b .L594 6048 .LVL915: 6049 .L585: 3068:../../../Source/third_party/fatfs/src/ff.c **** } else { 3069:../../../Source/third_party/fatfs/src/ff.c **** dj->fs = 0; 6050 .loc 1 3069 0 6051 0050 0022 movs r2, #0 6052 0052 2260 str r2, [r4] 6053 0054 11E0 b .L594 6054 .LVL916: 6055 .L591: 3045:../../../Source/third_party/fatfs/src/ff.c **** 6056 .loc 1 3045 0 6057 0056 0920 movs r0, #9 6058 .LVL917: 6059 0058 0FE0 b .L594 6060 .LVL918: 6061 .L593: 6062 005a 0020 movs r0, #0 6063 005c 0DE0 b .L594 6064 .LVL919: 6065 .L587: 3062:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); /* Rewind dir */ 6066 .loc 1 3062 0 6067 005e EB88 ldrh r3, [r5, #6] 6068 0060 A380 strh r3, [r4, #4] @ movhi 3063:../../../Source/third_party/fatfs/src/ff.c **** } 6069 .loc 1 3063 0 6070 0062 2046 mov r0, r4 6071 0064 0021 movs r1, #0 6072 0066 FFF7FEFF bl dir_sdi 6073 .LVL920: 6074 006a 0346 mov r3, r0 6075 .LVL921: 3066:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) dj->fs = 0; /* Invalidate the dir object if function faild */ 6076 .loc 1 3066 0 6077 006c 0428 cmp r0, #4 6078 006e E8D1 bne .L595 6079 0070 01E0 b .L589 6080 .L586: 6081 0072 0428 cmp r0, #4 6082 0074 E8D1 bne .L588 6083 .L589: 6084 .LVL922: 3039:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 6085 .loc 1 3039 0 6086 0076 0523 movs r3, #5 6087 0078 E6E7 b .L588 6088 .LVL923: 6089 .L594: 3070:../../../Source/third_party/fatfs/src/ff.c **** } 3071:../../../Source/third_party/fatfs/src/ff.c **** 3072:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fs, res); 3073:../../../Source/third_party/fatfs/src/ff.c **** } 6090 .loc 1 3073 0 6091 007a 07B0 add sp, sp, #28 6092 .cfi_def_cfa_offset 12 6093 @ sp needed 6094 007c 30BD pop {r4, r5, pc} 6095 .LVL924: 6096 .L598: 6097 007e 00BF .align 2 6098 .L597: 6099 0080 00000000 .word .LANCHOR4 6100 .cfi_endproc 6101 .LFE39: 6103 .section .text.f_readdir,"ax",%progbits 6104 .align 2 6105 .global f_readdir 6106 .thumb 6107 .thumb_func 6109 f_readdir: 6110 .LFB40: 3074:../../../Source/third_party/fatfs/src/ff.c **** 3075:../../../Source/third_party/fatfs/src/ff.c **** 3076:../../../Source/third_party/fatfs/src/ff.c **** 3077:../../../Source/third_party/fatfs/src/ff.c **** 3078:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3079:../../../Source/third_party/fatfs/src/ff.c **** /* Read Directory Entry in Sequence */ 3080:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3081:../../../Source/third_party/fatfs/src/ff.c **** 3082:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_readdir ( 3083:../../../Source/third_party/fatfs/src/ff.c **** DIR *dj, /* Pointer to the open directory object */ 3084:../../../Source/third_party/fatfs/src/ff.c **** FILINFO *fno /* Pointer to file information to return */ 3085:../../../Source/third_party/fatfs/src/ff.c **** ) 3086:../../../Source/third_party/fatfs/src/ff.c **** { 6111 .loc 1 3086 0 6112 .cfi_startproc 6113 @ args = 0, pretend = 0, frame = 16 6114 @ frame_needed = 0, uses_anonymous_args = 0 6115 .LVL925: 6116 0000 70B5 push {r4, r5, r6, lr} 6117 .cfi_def_cfa_offset 16 6118 .cfi_offset 4, -16 6119 .cfi_offset 5, -12 6120 .cfi_offset 6, -8 6121 .cfi_offset 14, -4 6122 0002 84B0 sub sp, sp, #16 6123 .cfi_def_cfa_offset 32 6124 0004 0446 mov r4, r0 6125 0006 0E46 mov r6, r1 3087:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3088:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3089:../../../Source/third_party/fatfs/src/ff.c **** 3090:../../../Source/third_party/fatfs/src/ff.c **** 3091:../../../Source/third_party/fatfs/src/ff.c **** res = validate(dj); /* Check validity of the object */ 6126 .loc 1 3091 0 6127 0008 FFF7FEFF bl validate 6128 .LVL926: 3092:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6129 .loc 1 3092 0 6130 000c 0546 mov r5, r0 6131 000e 20BB cbnz r0, .L600 3093:../../../Source/third_party/fatfs/src/ff.c **** if (!fno) { 6132 .loc 1 3093 0 6133 0010 2EB9 cbnz r6, .L601 3094:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(dj, 0); /* Rewind the directory object */ 6134 .loc 1 3094 0 6135 0012 2046 mov r0, r4 6136 .LVL927: 6137 0014 0021 movs r1, #0 6138 0016 FFF7FEFF bl dir_sdi 6139 .LVL928: 6140 001a 0546 mov r5, r0 6141 .LVL929: 6142 001c 1DE0 b .L600 6143 .LVL930: 6144 .L601: 3095:../../../Source/third_party/fatfs/src/ff.c **** } else { 3096:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(*dj); 6145 .loc 1 3096 0 6146 001e 01AB add r3, sp, #4 6147 0020 A361 str r3, [r4, #24] 6148 0022 0F4B ldr r3, .L607 6149 0024 E361 str r3, [r4, #28] 3097:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(dj, 0); /* Read an item */ 6150 .loc 1 3097 0 6151 0026 2046 mov r0, r4 6152 .LVL931: 6153 0028 0021 movs r1, #0 6154 002a FFF7FEFF bl dir_read 6155 .LVL932: 3098:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* Reached end of dir */ 6156 .loc 1 3098 0 6157 002e 0428 cmp r0, #4 6158 0030 02D1 bne .L602 3099:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = 0; 6159 .loc 1 3099 0 6160 0032 0023 movs r3, #0 6161 0034 2361 str r3, [r4, #16] 6162 .LVL933: 6163 0036 00E0 b .L603 6164 .LVL934: 6165 .L602: 3100:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3101:../../../Source/third_party/fatfs/src/ff.c **** } 3102:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* A valid entry is found */ 6166 .loc 1 3102 0 6167 0038 60B9 cbnz r0, .L604 6168 .LVL935: 6169 .L603: 3103:../../../Source/third_party/fatfs/src/ff.c **** get_fileinfo(dj, fno); /* Get the object information */ 6170 .loc 1 3103 0 6171 003a 2046 mov r0, r4 6172 003c 3146 mov r1, r6 6173 003e FFF7FEFF bl get_fileinfo 6174 .LVL936: 3104:../../../Source/third_party/fatfs/src/ff.c **** res = dir_next(dj, 0); /* Increment index for next */ 6175 .loc 1 3104 0 6176 0042 2046 mov r0, r4 6177 0044 0021 movs r1, #0 6178 0046 FFF7FEFF bl dir_next 6179 .LVL937: 3105:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { 6180 .loc 1 3105 0 6181 004a 0428 cmp r0, #4 6182 004c 04D1 bne .L605 3106:../../../Source/third_party/fatfs/src/ff.c **** dj->sect = 0; 6183 .loc 1 3106 0 6184 004e 0023 movs r3, #0 6185 0050 2361 str r3, [r4, #16] 6186 .LVL938: 6187 0052 02E0 b .L600 6188 .LVL939: 6189 .L604: 3097:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* Reached end of dir */ 6190 .loc 1 3097 0 6191 0054 0546 mov r5, r0 6192 0056 00E0 b .L600 6193 .L605: 3104:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { 6194 .loc 1 3104 0 6195 0058 0546 mov r5, r0 6196 .LVL940: 6197 .L600: 3107:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3108:../../../Source/third_party/fatfs/src/ff.c **** } 3109:../../../Source/third_party/fatfs/src/ff.c **** } 3110:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3111:../../../Source/third_party/fatfs/src/ff.c **** } 3112:../../../Source/third_party/fatfs/src/ff.c **** } 3113:../../../Source/third_party/fatfs/src/ff.c **** 3114:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj->fs, res); 3115:../../../Source/third_party/fatfs/src/ff.c **** } 6198 .loc 1 3115 0 6199 005a 2846 mov r0, r5 6200 005c 04B0 add sp, sp, #16 6201 .cfi_def_cfa_offset 16 6202 @ sp needed 6203 005e 70BD pop {r4, r5, r6, pc} 6204 .LVL941: 6205 .L608: 6206 .align 2 6207 .L607: 6208 0060 00000000 .word .LANCHOR4 6209 .cfi_endproc 6210 .LFE40: 6212 .section .text.f_stat,"ax",%progbits 6213 .align 2 6214 .global f_stat 6215 .thumb 6216 .thumb_func 6218 f_stat: 6219 .LFB41: 3116:../../../Source/third_party/fatfs/src/ff.c **** 3117:../../../Source/third_party/fatfs/src/ff.c **** 3118:../../../Source/third_party/fatfs/src/ff.c **** 3119:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_MINIMIZE == 0 3120:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3121:../../../Source/third_party/fatfs/src/ff.c **** /* Get File Status */ 3122:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3123:../../../Source/third_party/fatfs/src/ff.c **** 3124:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_stat ( 3125:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path, /* Pointer to the file path */ 3126:../../../Source/third_party/fatfs/src/ff.c **** FILINFO *fno /* Pointer to file information to return */ 3127:../../../Source/third_party/fatfs/src/ff.c **** ) 3128:../../../Source/third_party/fatfs/src/ff.c **** { 6220 .loc 1 3128 0 6221 .cfi_startproc 6222 @ args = 0, pretend = 0, frame = 56 6223 @ frame_needed = 0, uses_anonymous_args = 0 6224 .LVL942: 6225 0000 30B5 push {r4, r5, lr} 6226 .cfi_def_cfa_offset 12 6227 .cfi_offset 4, -12 6228 .cfi_offset 5, -8 6229 .cfi_offset 14, -4 6230 0002 8FB0 sub sp, sp, #60 6231 .cfi_def_cfa_offset 72 6232 0004 0EAB add r3, sp, #56 6233 0006 43F8340D str r0, [r3, #-52]! 6234 000a 0D46 mov r5, r1 3129:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3130:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3131:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3132:../../../Source/third_party/fatfs/src/ff.c **** 3133:../../../Source/third_party/fatfs/src/ff.c **** 3134:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 0); 6235 .loc 1 3134 0 6236 000c 1846 mov r0, r3 6237 .LVL943: 6238 000e 05A9 add r1, sp, #20 6239 .LVL944: 6240 0010 0022 movs r2, #0 6241 0012 FFF7FEFF bl chk_mounted 6242 .LVL945: 3135:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6243 .loc 1 3135 0 6244 0016 0446 mov r4, r0 6245 0018 88B9 cbnz r0, .L610 3136:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 6246 .loc 1 3136 0 6247 001a 02AB add r3, sp, #8 6248 001c 0B93 str r3, [sp, #44] 6249 001e 094B ldr r3, .L613 6250 0020 0C93 str r3, [sp, #48] 3137:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 6251 .loc 1 3137 0 6252 0022 05A8 add r0, sp, #20 6253 .LVL946: 6254 0024 0199 ldr r1, [sp, #4] 6255 0026 FFF7FEFF bl follow_path 6256 .LVL947: 3138:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Follow completed */ 6257 .loc 1 3138 0 6258 002a 0446 mov r4, r0 6259 002c 38B9 cbnz r0, .L610 3139:../../../Source/third_party/fatfs/src/ff.c **** if (dj.dir) /* Found an object */ 6260 .loc 1 3139 0 6261 002e 0A9B ldr r3, [sp, #40] 6262 0030 23B1 cbz r3, .L611 3140:../../../Source/third_party/fatfs/src/ff.c **** get_fileinfo(&dj, fno); 6263 .loc 1 3140 0 6264 0032 05A8 add r0, sp, #20 6265 .LVL948: 6266 0034 2946 mov r1, r5 6267 0036 FFF7FEFF bl get_fileinfo 6268 .LVL949: 6269 003a 00E0 b .L610 6270 .LVL950: 6271 .L611: 3141:../../../Source/third_party/fatfs/src/ff.c **** else /* It is root dir */ 3142:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 6272 .loc 1 3142 0 6273 003c 0624 movs r4, #6 6274 .LVL951: 6275 .L610: 3143:../../../Source/third_party/fatfs/src/ff.c **** } 3144:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3145:../../../Source/third_party/fatfs/src/ff.c **** } 3146:../../../Source/third_party/fatfs/src/ff.c **** 3147:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3148:../../../Source/third_party/fatfs/src/ff.c **** } 6276 .loc 1 3148 0 6277 003e 2046 mov r0, r4 6278 0040 0FB0 add sp, sp, #60 6279 .cfi_def_cfa_offset 12 6280 @ sp needed 6281 0042 30BD pop {r4, r5, pc} 6282 .LVL952: 6283 .L614: 6284 .align 2 6285 .L613: 6286 0044 00000000 .word .LANCHOR4 6287 .cfi_endproc 6288 .LFE41: 6290 .section .text.f_getfree,"ax",%progbits 6291 .align 2 6292 .global f_getfree 6293 .thumb 6294 .thumb_func 6296 f_getfree: 6297 .LFB42: 3149:../../../Source/third_party/fatfs/src/ff.c **** 3150:../../../Source/third_party/fatfs/src/ff.c **** 3151:../../../Source/third_party/fatfs/src/ff.c **** 3152:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 3153:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3154:../../../Source/third_party/fatfs/src/ff.c **** /* Get Number of Free Clusters */ 3155:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3156:../../../Source/third_party/fatfs/src/ff.c **** 3157:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_getfree ( 3158:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path, /* Path name of the logical drive number */ 3159:../../../Source/third_party/fatfs/src/ff.c **** DWORD *nclst, /* Pointer to a variable to return number of free clusters */ 3160:../../../Source/third_party/fatfs/src/ff.c **** FATFS **fatfs /* Pointer to return pointer to corresponding file system object */ 3161:../../../Source/third_party/fatfs/src/ff.c **** ) 3162:../../../Source/third_party/fatfs/src/ff.c **** { 6298 .loc 1 3162 0 6299 .cfi_startproc 6300 @ args = 0, pretend = 0, frame = 8 6301 @ frame_needed = 0, uses_anonymous_args = 0 6302 .LVL953: 6303 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 6304 .cfi_def_cfa_offset 36 6305 .cfi_offset 4, -36 6306 .cfi_offset 5, -32 6307 .cfi_offset 6, -28 6308 .cfi_offset 7, -24 6309 .cfi_offset 8, -20 6310 .cfi_offset 9, -16 6311 .cfi_offset 10, -12 6312 .cfi_offset 11, -8 6313 .cfi_offset 14, -4 6314 0004 83B0 sub sp, sp, #12 6315 .cfi_def_cfa_offset 48 6316 0006 02AB add r3, sp, #8 6317 0008 43F8040D str r0, [r3, #-4]! 6318 000c 8A46 mov r10, r1 6319 000e 1446 mov r4, r2 3163:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3164:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; 3165:../../../Source/third_party/fatfs/src/ff.c **** DWORD n, clst, sect, stat; 3166:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 3167:../../../Source/third_party/fatfs/src/ff.c **** BYTE fat, *p; 3168:../../../Source/third_party/fatfs/src/ff.c **** 3169:../../../Source/third_party/fatfs/src/ff.c **** 3170:../../../Source/third_party/fatfs/src/ff.c **** /* Get drive number */ 3171:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, fatfs, 0); 6320 .loc 1 3171 0 6321 0010 1846 mov r0, r3 6322 .LVL954: 6323 0012 1146 mov r1, r2 6324 .LVL955: 6325 0014 0022 movs r2, #0 6326 .LVL956: 6327 0016 FFF7FEFF bl chk_mounted 6328 .LVL957: 3172:../../../Source/third_party/fatfs/src/ff.c **** fs = *fatfs; 6329 .loc 1 3172 0 6330 001a 2568 ldr r5, [r4] 6331 .LVL958: 3173:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6332 .loc 1 3173 0 6333 001c 8146 mov r9, r0 6334 001e 0028 cmp r0, #0 6335 0020 60D1 bne .L633 3174:../../../Source/third_party/fatfs/src/ff.c **** /* If free_clust is valid, return it without full cluster scan */ 3175:../../../Source/third_party/fatfs/src/ff.c **** if (fs->free_clust <= fs->n_fatent - 2) { 6336 .loc 1 3175 0 6337 0022 2B69 ldr r3, [r5, #16] 6338 0024 AC69 ldr r4, [r5, #24] 6339 .LVL959: 6340 0026 A21E subs r2, r4, #2 6341 0028 9342 cmp r3, r2 6342 002a 02D8 bhi .L617 3176:../../../Source/third_party/fatfs/src/ff.c **** *nclst = fs->free_clust; 6343 .loc 1 3176 0 6344 002c CAF80030 str r3, [r10] 6345 0030 58E0 b .L633 6346 .L617: 3177:../../../Source/third_party/fatfs/src/ff.c **** } else { 3178:../../../Source/third_party/fatfs/src/ff.c **** /* Get number of free clusters */ 3179:../../../Source/third_party/fatfs/src/ff.c **** fat = fs->fs_type; 6347 .loc 1 3179 0 6348 0032 2F78 ldrb r7, [r5] @ zero_extendqisi2 6349 .LVL960: 3180:../../../Source/third_party/fatfs/src/ff.c **** n = 0; 3181:../../../Source/third_party/fatfs/src/ff.c **** if (fat == FS_FAT12) { 6350 .loc 1 3181 0 6351 0034 012F cmp r7, #1 6352 0036 11D1 bne .L618 6353 0038 0224 movs r4, #2 6354 003a 0026 movs r6, #0 6355 .LVL961: 6356 .L621: 3182:../../../Source/third_party/fatfs/src/ff.c **** clst = 2; 3183:../../../Source/third_party/fatfs/src/ff.c **** do { 3184:../../../Source/third_party/fatfs/src/ff.c **** stat = get_fat(fs, clst); 6357 .loc 1 3184 0 6358 003c 2846 mov r0, r5 6359 003e 2146 mov r1, r4 6360 0040 FFF7FEFF bl get_fat 6361 .LVL962: 3185:../../../Source/third_party/fatfs/src/ff.c **** if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } 6362 .loc 1 3185 0 6363 0044 B0F1FF3F cmp r0, #-1 6364 0048 45D0 beq .L630 3186:../../../Source/third_party/fatfs/src/ff.c **** if (stat == 1) { res = FR_INT_ERR; break; } 6365 .loc 1 3186 0 6366 004a 0128 cmp r0, #1 6367 004c 46D0 beq .L631 3187:../../../Source/third_party/fatfs/src/ff.c **** if (stat == 0) n++; 6368 .loc 1 3187 0 6369 004e 00B9 cbnz r0, .L620 6370 .loc 1 3187 0 is_stmt 0 discriminator 1 6371 0050 0136 adds r6, r6, #1 6372 .LVL963: 6373 .L620: 3188:../../../Source/third_party/fatfs/src/ff.c **** } while (++clst < fs->n_fatent); 6374 .loc 1 3188 0 is_stmt 1 6375 0052 0134 adds r4, r4, #1 6376 .LVL964: 6377 0054 AB69 ldr r3, [r5, #24] 6378 0056 9C42 cmp r4, r3 6379 0058 F0D3 bcc .L621 6380 005a 41E0 b .L619 6381 .LVL965: 6382 .L618: 3189:../../../Source/third_party/fatfs/src/ff.c **** } else { 3190:../../../Source/third_party/fatfs/src/ff.c **** clst = fs->n_fatent; 3191:../../../Source/third_party/fatfs/src/ff.c **** sect = fs->fatbase; 6383 .loc 1 3191 0 6384 005c 696A ldr r1, [r5, #36] 6385 .LVL966: 3192:../../../Source/third_party/fatfs/src/ff.c **** i = 0; p = 0; 6386 .loc 1 3192 0 6387 005e 0023 movs r3, #0 6388 0060 9E46 mov lr, r3 3180:../../../Source/third_party/fatfs/src/ff.c **** if (fat == FS_FAT12) { 6389 .loc 1 3180 0 6390 0062 1E46 mov r6, r3 3193:../../../Source/third_party/fatfs/src/ff.c **** do { 3194:../../../Source/third_party/fatfs/src/ff.c **** if (!i) { 3195:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, sect++); 3196:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 3197:../../../Source/third_party/fatfs/src/ff.c **** p = fs->win; 3198:../../../Source/third_party/fatfs/src/ff.c **** i = SS(fs); 6391 .loc 1 3198 0 6392 0064 4FF4007B mov fp, #512 6393 .LVL967: 6394 .L628: 3194:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(fs, sect++); 6395 .loc 1 3194 0 6396 0068 BEF1000F cmp lr, #0 6397 006c 0AD1 bne .L622 6398 .LVL968: 3195:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 6399 .loc 1 3195 0 6400 006e 01F10108 add r8, r1, #1 6401 .LVL969: 6402 0072 2846 mov r0, r5 6403 0074 FFF7FEFF bl move_window 6404 .LVL970: 3196:../../../Source/third_party/fatfs/src/ff.c **** p = fs->win; 6405 .loc 1 3196 0 6406 0078 0346 mov r3, r0 6407 007a 18BB cbnz r0, .L632 6408 .LVL971: 3197:../../../Source/third_party/fatfs/src/ff.c **** i = SS(fs); 6409 .loc 1 3197 0 6410 007c 05F13403 add r3, r5, #52 6411 .LVL972: 3195:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 6412 .loc 1 3195 0 6413 0080 4146 mov r1, r8 6414 .loc 1 3198 0 6415 0082 DE46 mov lr, fp 6416 .LVL973: 6417 .L622: 3199:../../../Source/third_party/fatfs/src/ff.c **** } 3200:../../../Source/third_party/fatfs/src/ff.c **** if (fat == FS_FAT16) { 6418 .loc 1 3200 0 6419 0084 022F cmp r7, #2 6420 0086 09D1 bne .L624 3201:../../../Source/third_party/fatfs/src/ff.c **** if (LD_WORD(p) == 0) n++; 6421 .loc 1 3201 0 6422 0088 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 6423 008a 1A78 ldrb r2, [r3] @ zero_extendqisi2 6424 008c 52EA0022 orrs r2, r2, r0, lsl #8 6425 0090 08BF it eq 6426 0092 0136 addeq r6, r6, #1 6427 .LVL974: 3202:../../../Source/third_party/fatfs/src/ff.c **** p += 2; i -= 2; 6428 .loc 1 3202 0 6429 0094 0233 adds r3, r3, #2 6430 .LVL975: 6431 0096 AEF1020E sub lr, lr, #2 6432 .LVL976: 6433 009a 10E0 b .L626 6434 .LVL977: 6435 .L624: 3203:../../../Source/third_party/fatfs/src/ff.c **** } else { 3204:../../../Source/third_party/fatfs/src/ff.c **** if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++; 6436 .loc 1 3204 0 6437 009c D878 ldrb r0, [r3, #3] @ zero_extendqisi2 6438 009e 9A78 ldrb r2, [r3, #2] @ zero_extendqisi2 6439 00a0 1204 lsls r2, r2, #16 6440 00a2 42EA0062 orr r2, r2, r0, lsl #24 6441 00a6 1878 ldrb r0, [r3] @ zero_extendqisi2 6442 00a8 0243 orrs r2, r2, r0 6443 00aa 5878 ldrb r0, [r3, #1] @ zero_extendqisi2 6444 00ac 42EA0022 orr r2, r2, r0, lsl #8 6445 00b0 22F07042 bic r2, r2, #-268435456 6446 00b4 02B9 cbnz r2, .L627 6447 .loc 1 3204 0 is_stmt 0 discriminator 1 6448 00b6 0136 adds r6, r6, #1 6449 .LVL978: 6450 .L627: 3205:../../../Source/third_party/fatfs/src/ff.c **** p += 4; i -= 4; 6451 .loc 1 3205 0 is_stmt 1 6452 00b8 0433 adds r3, r3, #4 6453 .LVL979: 6454 00ba AEF1040E sub lr, lr, #4 6455 .LVL980: 6456 .L626: 3206:../../../Source/third_party/fatfs/src/ff.c **** } 3207:../../../Source/third_party/fatfs/src/ff.c **** } while (--clst); 6457 .loc 1 3207 0 6458 00be 013C subs r4, r4, #1 6459 .LVL981: 6460 00c0 D2D1 bne .L628 6461 00c2 00E0 b .L623 6462 .LVL982: 6463 .L632: 3195:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 6464 .loc 1 3195 0 6465 00c4 8146 mov r9, r0 6466 .LVL983: 6467 .L623: 3208:../../../Source/third_party/fatfs/src/ff.c **** } 3209:../../../Source/third_party/fatfs/src/ff.c **** fs->free_clust = n; 6468 .loc 1 3209 0 6469 00c6 2E61 str r6, [r5, #16] 3210:../../../Source/third_party/fatfs/src/ff.c **** if (fat == FS_FAT32) fs->fsi_flag = 1; 6470 .loc 1 3210 0 6471 00c8 032F cmp r7, #3 6472 00ca 04BF itt eq 6473 00cc 0123 moveq r3, #1 6474 00ce 6B71 strbeq r3, [r5, #5] 6475 .L629: 3211:../../../Source/third_party/fatfs/src/ff.c **** *nclst = n; 6476 .loc 1 3211 0 6477 00d0 CAF80060 str r6, [r10] 6478 00d4 06E0 b .L633 6479 .LVL984: 6480 .L630: 3185:../../../Source/third_party/fatfs/src/ff.c **** if (stat == 1) { res = FR_INT_ERR; break; } 6481 .loc 1 3185 0 6482 00d6 4FF00109 mov r9, #1 6483 00da 01E0 b .L619 6484 .L631: 3186:../../../Source/third_party/fatfs/src/ff.c **** if (stat == 0) n++; 6485 .loc 1 3186 0 6486 00dc 4FF00209 mov r9, #2 6487 .L619: 6488 .LVL985: 3209:../../../Source/third_party/fatfs/src/ff.c **** if (fat == FS_FAT32) fs->fsi_flag = 1; 6489 .loc 1 3209 0 6490 00e0 2E61 str r6, [r5, #16] 6491 00e2 F5E7 b .L629 6492 .LVL986: 6493 .L633: 3212:../../../Source/third_party/fatfs/src/ff.c **** } 3213:../../../Source/third_party/fatfs/src/ff.c **** } 3214:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fs, res); 3215:../../../Source/third_party/fatfs/src/ff.c **** } 6494 .loc 1 3215 0 6495 00e4 4846 mov r0, r9 6496 00e6 03B0 add sp, sp, #12 6497 .cfi_def_cfa_offset 36 6498 @ sp needed 6499 00e8 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 6500 .cfi_endproc 6501 .LFE42: 6503 .section .text.f_truncate,"ax",%progbits 6504 .align 2 6505 .global f_truncate 6506 .thumb 6507 .thumb_func 6509 f_truncate: 6510 .LFB43: 3216:../../../Source/third_party/fatfs/src/ff.c **** 3217:../../../Source/third_party/fatfs/src/ff.c **** 3218:../../../Source/third_party/fatfs/src/ff.c **** 3219:../../../Source/third_party/fatfs/src/ff.c **** 3220:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3221:../../../Source/third_party/fatfs/src/ff.c **** /* Truncate File */ 3222:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3223:../../../Source/third_party/fatfs/src/ff.c **** 3224:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_truncate ( 3225:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp /* Pointer to the file object */ 3226:../../../Source/third_party/fatfs/src/ff.c **** ) 3227:../../../Source/third_party/fatfs/src/ff.c **** { 6511 .loc 1 3227 0 6512 .cfi_startproc 6513 @ args = 0, pretend = 0, frame = 0 6514 @ frame_needed = 0, uses_anonymous_args = 0 6515 .LVL987: 6516 0000 70B5 push {r4, r5, r6, lr} 6517 .cfi_def_cfa_offset 16 6518 .cfi_offset 4, -16 6519 .cfi_offset 5, -12 6520 .cfi_offset 6, -8 6521 .cfi_offset 14, -4 6522 0002 0446 mov r4, r0 3228:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3229:../../../Source/third_party/fatfs/src/ff.c **** DWORD ncl; 3230:../../../Source/third_party/fatfs/src/ff.c **** 3231:../../../Source/third_party/fatfs/src/ff.c **** 3232:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity of the object */ 6523 .loc 1 3232 0 6524 0004 FFF7FEFF bl validate 6525 .LVL988: 3233:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6526 .loc 1 3233 0 6527 0008 0546 mov r5, r0 6528 000a 0028 cmp r0, #0 6529 000c 45D1 bne .L650 3234:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__ERROR) { /* Check abort flag */ 6530 .loc 1 3234 0 6531 000e A379 ldrb r3, [r4, #6] @ zero_extendqisi2 6532 0010 13F0800F tst r3, #128 6533 0014 3BD1 bne .L647 3235:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 3236:../../../Source/third_party/fatfs/src/ff.c **** } else { 3237:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_WRITE)) /* Check access mode */ 6534 .loc 1 3237 0 6535 0016 13F0020F tst r3, #2 6536 001a 3AD0 beq .L648 6537 001c 32E0 b .L651 6538 .LVL989: 6539 .L646: 3238:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; 3239:../../../Source/third_party/fatfs/src/ff.c **** } 3240:../../../Source/third_party/fatfs/src/ff.c **** } 3241:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3242:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fsize > fp->fptr) { 3243:../../../Source/third_party/fatfs/src/ff.c **** fp->fsize = fp->fptr; /* Set file size to current R/W point */ 6540 .loc 1 3243 0 6541 001e E260 str r2, [r4, #12] 3244:../../../Source/third_party/fatfs/src/ff.c **** fp->flag |= FA__WRITTEN; 6542 .loc 1 3244 0 6543 0020 A379 ldrb r3, [r4, #6] @ zero_extendqisi2 6544 0022 43F02003 orr r3, r3, #32 6545 0026 A371 strb r3, [r4, #6] 3245:../../../Source/third_party/fatfs/src/ff.c **** if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ 6546 .loc 1 3245 0 6547 0028 3AB9 cbnz r2, .L640 3246:../../../Source/third_party/fatfs/src/ff.c **** res = remove_chain(fp->fs, fp->sclust); 6548 .loc 1 3246 0 6549 002a 2068 ldr r0, [r4] 6550 002c 2169 ldr r1, [r4, #16] 6551 002e FFF7FEFF bl remove_chain 6552 .LVL990: 6553 0032 0546 mov r5, r0 6554 .LVL991: 3247:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust = 0; 6555 .loc 1 3247 0 6556 0034 0023 movs r3, #0 6557 0036 2361 str r3, [r4, #16] 6558 0038 1CE0 b .L641 6559 .LVL992: 6560 .L640: 3248:../../../Source/third_party/fatfs/src/ff.c **** } else { /* When truncate a part of the file, remove remaining clusters */ 3249:../../../Source/third_party/fatfs/src/ff.c **** ncl = get_fat(fp->fs, fp->clust); 6561 .loc 1 3249 0 6562 003a 2068 ldr r0, [r4] 6563 003c 6169 ldr r1, [r4, #20] 6564 003e FFF7FEFF bl get_fat 6565 .LVL993: 6566 0042 0646 mov r6, r0 6567 .LVL994: 3250:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3251:../../../Source/third_party/fatfs/src/ff.c **** if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; 3252:../../../Source/third_party/fatfs/src/ff.c **** if (ncl == 1) res = FR_INT_ERR; 6568 .loc 1 3252 0 6569 0044 0128 cmp r0, #1 6570 0046 17D0 beq .L649 3250:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 6571 .loc 1 3250 0 6572 0048 B0F1FF3F cmp r0, #-1 6573 004c 14BF ite ne 6574 004e 0023 movne r3, #0 6575 0050 0123 moveq r3, #1 3253:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && ncl < fp->fs->n_fatent) { 6576 .loc 1 3253 0 6577 0052 03BB cbnz r3, .L643 6578 .loc 1 3253 0 is_stmt 0 discriminator 1 6579 0054 2068 ldr r0, [r4] 6580 .LVL995: 6581 0056 8369 ldr r3, [r0, #24] 6582 0058 9E42 cmp r6, r3 6583 005a 1ED2 bcs .L650 3254:../../../Source/third_party/fatfs/src/ff.c **** res = put_fat(fp->fs, fp->clust, 0x0FFFFFFF); 6584 .loc 1 3254 0 is_stmt 1 6585 005c 6169 ldr r1, [r4, #20] 6586 005e 6FF07042 mvn r2, #-268435456 6587 0062 FFF7FEFF bl put_fat 6588 .LVL996: 3255:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = remove_chain(fp->fs, ncl); 6589 .loc 1 3255 0 6590 0066 0346 mov r3, r0 6591 0068 A8B9 cbnz r0, .L643 6592 .loc 1 3255 0 is_stmt 0 discriminator 1 6593 006a 2068 ldr r0, [r4] 6594 .LVL997: 6595 006c 3146 mov r1, r6 6596 006e FFF7FEFF bl remove_chain 6597 .LVL998: 6598 0072 0546 mov r5, r0 6599 .LVL999: 6600 .L641: 3256:../../../Source/third_party/fatfs/src/ff.c **** } 3257:../../../Source/third_party/fatfs/src/ff.c **** } 3258:../../../Source/third_party/fatfs/src/ff.c **** } 3259:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) fp->flag |= FA__ERROR; 6601 .loc 1 3259 0 is_stmt 1 6602 0074 0DB9 cbnz r5, .L642 6603 0076 10E0 b .L650 6604 .LVL1000: 6605 .L649: 3252:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && ncl < fp->fs->n_fatent) { 6606 .loc 1 3252 0 6607 0078 0225 movs r5, #2 6608 .LVL1001: 6609 .L642: 6610 .loc 1 3259 0 discriminator 1 6611 007a A379 ldrb r3, [r4, #6] @ zero_extendqisi2 6612 007c 63F07F03 orn r3, r3, #127 6613 0080 A371 strb r3, [r4, #6] 6614 0082 0AE0 b .L650 6615 .LVL1002: 6616 .L651: 3242:../../../Source/third_party/fatfs/src/ff.c **** fp->fsize = fp->fptr; /* Set file size to current R/W point */ 6617 .loc 1 3242 0 6618 0084 A268 ldr r2, [r4, #8] 6619 0086 E368 ldr r3, [r4, #12] 6620 0088 9342 cmp r3, r2 6621 008a C8D8 bhi .L646 6622 008c 05E0 b .L650 6623 .LVL1003: 6624 .L647: 3235:../../../Source/third_party/fatfs/src/ff.c **** } else { 6625 .loc 1 3235 0 6626 008e 0225 movs r5, #2 6627 0090 03E0 b .L650 6628 .L648: 3238:../../../Source/third_party/fatfs/src/ff.c **** } 6629 .loc 1 3238 0 6630 0092 0725 movs r5, #7 6631 .LVL1004: 6632 0094 01E0 b .L650 6633 .LVL1005: 6634 .L643: 3227:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 6635 .loc 1 3227 0 6636 0096 1D46 mov r5, r3 6637 0098 EFE7 b .L642 6638 .LVL1006: 6639 .L650: 3260:../../../Source/third_party/fatfs/src/ff.c **** } 3261:../../../Source/third_party/fatfs/src/ff.c **** 3262:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, res); 3263:../../../Source/third_party/fatfs/src/ff.c **** } 6640 .loc 1 3263 0 6641 009a 2846 mov r0, r5 6642 009c 70BD pop {r4, r5, r6, pc} 6643 .cfi_endproc 6644 .LFE43: 6646 009e 00BF .section .text.f_unlink,"ax",%progbits 6647 .align 2 6648 .global f_unlink 6649 .thumb 6650 .thumb_func 6652 f_unlink: 6653 .LFB44: 3264:../../../Source/third_party/fatfs/src/ff.c **** 3265:../../../Source/third_party/fatfs/src/ff.c **** 3266:../../../Source/third_party/fatfs/src/ff.c **** 3267:../../../Source/third_party/fatfs/src/ff.c **** 3268:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3269:../../../Source/third_party/fatfs/src/ff.c **** /* Delete a File or Directory */ 3270:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3271:../../../Source/third_party/fatfs/src/ff.c **** 3272:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_unlink ( 3273:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path /* Pointer to the file or directory path */ 3274:../../../Source/third_party/fatfs/src/ff.c **** ) 3275:../../../Source/third_party/fatfs/src/ff.c **** { 6654 .loc 1 3275 0 6655 .cfi_startproc 6656 @ args = 0, pretend = 0, frame = 96 6657 @ frame_needed = 0, uses_anonymous_args = 0 6658 .LVL1007: 6659 0000 30B5 push {r4, r5, lr} 6660 .cfi_def_cfa_offset 12 6661 .cfi_offset 4, -12 6662 .cfi_offset 5, -8 6663 .cfi_offset 14, -4 6664 0002 99B0 sub sp, sp, #100 6665 .cfi_def_cfa_offset 112 6666 0004 18AB add r3, sp, #96 6667 0006 43F85C0D str r0, [r3, #-92]! 3276:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3277:../../../Source/third_party/fatfs/src/ff.c **** DIR dj, sdj; 3278:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir; 3279:../../../Source/third_party/fatfs/src/ff.c **** DWORD dclst; 3280:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3281:../../../Source/third_party/fatfs/src/ff.c **** 3282:../../../Source/third_party/fatfs/src/ff.c **** 3283:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 1); 6668 .loc 1 3283 0 6669 000a 1846 mov r0, r3 6670 .LVL1008: 6671 000c 0FA9 add r1, sp, #60 6672 000e 0122 movs r2, #1 6673 0010 FFF7FEFF bl chk_mounted 6674 .LVL1009: 3284:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6675 .loc 1 3284 0 6676 0014 0346 mov r3, r0 6677 0016 0028 cmp r0, #0 6678 0018 4AD1 bne .L667 3285:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 6679 .loc 1 3285 0 6680 001a 03AB add r3, sp, #12 6681 001c 1593 str r3, [sp, #84] 6682 001e 264B ldr r3, .L670 6683 0020 1693 str r3, [sp, #88] 3286:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 6684 .loc 1 3286 0 6685 0022 0FA8 add r0, sp, #60 6686 .LVL1010: 6687 0024 0199 ldr r1, [sp, #4] 6688 0026 FFF7FEFF bl follow_path 6689 .LVL1011: 3287:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) 3288:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; /* Cannot remove dot entry */ 3289:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 3290:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = chk_lock(&dj, 2); /* Cannot remove open file */ 3291:../../../Source/third_party/fatfs/src/ff.c **** #endif 3292:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* The object is accessible */ 6690 .loc 1 3292 0 6691 002a 0346 mov r3, r0 6692 002c 0028 cmp r0, #0 6693 002e 3FD1 bne .L667 3293:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 6694 .loc 1 3293 0 6695 0030 1499 ldr r1, [sp, #80] 6696 .LVL1012: 3294:../../../Source/third_party/fatfs/src/ff.c **** if (!dir) { 6697 .loc 1 3294 0 6698 0032 31B3 cbz r1, .L664 3295:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; /* Cannot remove the start directory */ 3296:../../../Source/third_party/fatfs/src/ff.c **** } else { 3297:../../../Source/third_party/fatfs/src/ff.c **** if (dir[DIR_Attr] & AM_RDO) 6699 .loc 1 3297 0 6700 0034 CC7A ldrb r4, [r1, #11] @ zero_extendqisi2 6701 0036 14F0010F tst r4, #1 6702 003a 24D1 bne .L665 6703 003c 25E0 b .L668 6704 .LVL1013: 6705 .L661: 3298:../../../Source/third_party/fatfs/src/ff.c **** res = FR_DENIED; /* Cannot remove R/O object */ 3299:../../../Source/third_party/fatfs/src/ff.c **** } 3300:../../../Source/third_party/fatfs/src/ff.c **** dclst = ld_clust(dj.fs, dir); 3301:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ 3302:../../../Source/third_party/fatfs/src/ff.c **** if (dclst < 2) { 6706 .loc 1 3302 0 6707 003e 012D cmp r5, #1 6708 0040 2ED9 bls .L666 3303:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 3304:../../../Source/third_party/fatfs/src/ff.c **** } else { 3305:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(&sdj, &dj, sizeof (DIR)); /* Check if the sub-dir is empty or not */ 6709 .loc 1 3305 0 6710 0042 06A8 add r0, sp, #24 6711 .LVL1014: 6712 0044 0FA9 add r1, sp, #60 6713 0046 2422 movs r2, #36 6714 0048 FFF7FEFF bl mem_cpy 6715 .LVL1015: 3306:../../../Source/third_party/fatfs/src/ff.c **** sdj.sclust = dclst; 6716 .loc 1 3306 0 6717 004c 0895 str r5, [sp, #32] 3307:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(&sdj, 2); /* Exclude dot entries */ 6718 .loc 1 3307 0 6719 004e 06A8 add r0, sp, #24 6720 0050 0221 movs r1, #2 6721 0052 FFF7FEFF bl dir_sdi 6722 .LVL1016: 3308:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6723 .loc 1 3308 0 6724 0056 0346 mov r3, r0 6725 0058 50BB cbnz r0, .L667 3309:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(&sdj, 0); /* Read an item */ 6726 .loc 1 3309 0 6727 005a 06A8 add r0, sp, #24 6728 .LVL1017: 6729 005c 0021 movs r1, #0 6730 005e FFF7FEFF bl dir_read 6731 .LVL1018: 3310:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK /* Not empty dir */ 6732 .loc 1 3310 0 6733 0062 0346 mov r3, r0 6734 0064 C8B9 cbnz r0, .L658 3311:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_RPATH 3312:../../../Source/third_party/fatfs/src/ff.c **** || dclst == dj.fs->cdir /* Current dir */ 3313:../../../Source/third_party/fatfs/src/ff.c **** #endif 3314:../../../Source/third_party/fatfs/src/ff.c **** ) res = FR_DENIED; 6735 .loc 1 3314 0 6736 0066 0723 movs r3, #7 6737 .LVL1019: 6738 0068 22E0 b .L667 6739 .LVL1020: 6740 .L663: 3315:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) res = FR_OK; /* Empty */ 3316:../../../Source/third_party/fatfs/src/ff.c **** } 3317:../../../Source/third_party/fatfs/src/ff.c **** } 3318:../../../Source/third_party/fatfs/src/ff.c **** } 3319:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3320:../../../Source/third_party/fatfs/src/ff.c **** res = dir_remove(&dj); /* Remove the directory entry */ 3321:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3322:../../../Source/third_party/fatfs/src/ff.c **** if (dclst) /* Remove the cluster chain if exist */ 6741 .loc 1 3322 0 6742 006a 2DB1 cbz r5, .L659 3323:../../../Source/third_party/fatfs/src/ff.c **** res = remove_chain(dj.fs, dclst); 6743 .loc 1 3323 0 6744 006c 0F98 ldr r0, [sp, #60] 6745 .LVL1021: 6746 006e 2946 mov r1, r5 6747 0070 FFF7FEFF bl remove_chain 6748 .LVL1022: 3324:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = sync_fs(dj.fs); 6749 .loc 1 3324 0 6750 0074 0346 mov r3, r0 6751 0076 D8B9 cbnz r0, .L667 6752 .L659: 6753 .LVL1023: 6754 .loc 1 3324 0 is_stmt 0 discriminator 1 6755 0078 0F98 ldr r0, [sp, #60] 6756 007a FFF7FEFF bl sync_fs 6757 .LVL1024: 6758 007e 0346 mov r3, r0 6759 .LVL1025: 6760 0080 16E0 b .L667 6761 .LVL1026: 6762 .L664: 3295:../../../Source/third_party/fatfs/src/ff.c **** } else { 6763 .loc 1 3295 0 is_stmt 1 6764 0082 0623 movs r3, #6 6765 0084 14E0 b .L667 6766 .L665: 3298:../../../Source/third_party/fatfs/src/ff.c **** } 6767 .loc 1 3298 0 6768 0086 0723 movs r3, #7 6769 0088 12E0 b .L667 6770 .L668: 6771 .LVL1027: 3300:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ 6772 .loc 1 3300 0 6773 008a 0F98 ldr r0, [sp, #60] 6774 008c FFF7FEFF bl ld_clust 6775 .LVL1028: 6776 0090 0546 mov r5, r0 6777 .LVL1029: 3301:../../../Source/third_party/fatfs/src/ff.c **** if (dclst < 2) { 6778 .loc 1 3301 0 6779 0092 14F0100F tst r4, #16 6780 0096 D2D1 bne .L661 6781 0098 04E0 b .L662 6782 .LVL1030: 6783 .L658: 3315:../../../Source/third_party/fatfs/src/ff.c **** } 6784 .loc 1 3315 0 6785 009a 0428 cmp r0, #4 6786 009c 02D0 beq .L662 6787 009e 07E0 b .L667 6788 .LVL1031: 6789 .L666: 3303:../../../Source/third_party/fatfs/src/ff.c **** } else { 6790 .loc 1 3303 0 6791 00a0 0223 movs r3, #2 6792 .LVL1032: 6793 00a2 05E0 b .L667 6794 .LVL1033: 6795 .L662: 3320:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6796 .loc 1 3320 0 6797 00a4 0FA8 add r0, sp, #60 6798 00a6 FFF7FEFF bl dir_remove 6799 .LVL1034: 3321:../../../Source/third_party/fatfs/src/ff.c **** if (dclst) /* Remove the cluster chain if exist */ 6800 .loc 1 3321 0 6801 00aa 0346 mov r3, r0 6802 00ac 0028 cmp r0, #0 6803 00ae DCD0 beq .L663 6804 .LVL1035: 6805 .L667: 3325:../../../Source/third_party/fatfs/src/ff.c **** } 3326:../../../Source/third_party/fatfs/src/ff.c **** } 3327:../../../Source/third_party/fatfs/src/ff.c **** } 3328:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3329:../../../Source/third_party/fatfs/src/ff.c **** } 3330:../../../Source/third_party/fatfs/src/ff.c **** 3331:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3332:../../../Source/third_party/fatfs/src/ff.c **** } 6806 .loc 1 3332 0 6807 00b0 1846 mov r0, r3 6808 00b2 19B0 add sp, sp, #100 6809 .cfi_def_cfa_offset 12 6810 @ sp needed 6811 00b4 30BD pop {r4, r5, pc} 6812 .LVL1036: 6813 .L671: 6814 00b6 00BF .align 2 6815 .L670: 6816 00b8 00000000 .word .LANCHOR4 6817 .cfi_endproc 6818 .LFE44: 6820 .section .text.f_mkdir,"ax",%progbits 6821 .align 2 6822 .global f_mkdir 6823 .thumb 6824 .thumb_func 6826 f_mkdir: 6827 .LFB45: 3333:../../../Source/third_party/fatfs/src/ff.c **** 3334:../../../Source/third_party/fatfs/src/ff.c **** 3335:../../../Source/third_party/fatfs/src/ff.c **** 3336:../../../Source/third_party/fatfs/src/ff.c **** 3337:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3338:../../../Source/third_party/fatfs/src/ff.c **** /* Create a Directory */ 3339:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3340:../../../Source/third_party/fatfs/src/ff.c **** 3341:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_mkdir ( 3342:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path /* Pointer to the directory path */ 3343:../../../Source/third_party/fatfs/src/ff.c **** ) 3344:../../../Source/third_party/fatfs/src/ff.c **** { 6828 .loc 1 3344 0 6829 .cfi_startproc 6830 @ args = 0, pretend = 0, frame = 56 6831 @ frame_needed = 0, uses_anonymous_args = 0 6832 .LVL1037: 6833 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 6834 .cfi_def_cfa_offset 36 6835 .cfi_offset 4, -36 6836 .cfi_offset 5, -32 6837 .cfi_offset 6, -28 6838 .cfi_offset 7, -24 6839 .cfi_offset 8, -20 6840 .cfi_offset 9, -16 6841 .cfi_offset 10, -12 6842 .cfi_offset 11, -8 6843 .cfi_offset 14, -4 6844 0004 8FB0 sub sp, sp, #60 6845 .cfi_def_cfa_offset 96 6846 0006 0EAC add r4, sp, #56 6847 0008 44F8340D str r0, [r4, #-52]! 3345:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3346:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3347:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir, n; 3348:../../../Source/third_party/fatfs/src/ff.c **** DWORD dsc, dcl, pcl, tm = get_fattime(); 6848 .loc 1 3348 0 6849 000c FFF7FEFF bl get_fattime 6850 .LVL1038: 6851 0010 0746 mov r7, r0 6852 .LVL1039: 3349:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3350:../../../Source/third_party/fatfs/src/ff.c **** 3351:../../../Source/third_party/fatfs/src/ff.c **** 3352:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 1); 6853 .loc 1 3352 0 6854 0012 2046 mov r0, r4 6855 .LVL1040: 6856 0014 05A9 add r1, sp, #20 6857 0016 0122 movs r2, #1 6858 0018 FFF7FEFF bl chk_mounted 6859 .LVL1041: 3353:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 6860 .loc 1 3353 0 6861 001c 0446 mov r4, r0 6862 .LVL1042: 6863 001e 0028 cmp r0, #0 6864 0020 40F0CE80 bne .L691 3354:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 6865 .loc 1 3354 0 6866 0024 02AB add r3, sp, #8 6867 0026 0B93 str r3, [sp, #44] 6868 0028 674B ldr r3, .L699 6869 002a 0C93 str r3, [sp, #48] 3355:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 6870 .loc 1 3355 0 6871 002c 05A8 add r0, sp, #20 6872 .LVL1043: 6873 002e 0199 ldr r1, [sp, #4] 6874 0030 FFF7FEFF bl follow_path 6875 .LVL1044: 3356:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ 6876 .loc 1 3356 0 6877 0034 0446 mov r4, r0 6878 0036 0028 cmp r0, #0 6879 0038 00F0B480 beq .L687 3357:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) 3358:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3359:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* Can create a new directory */ 6880 .loc 1 3359 0 6881 003c 0428 cmp r0, #4 6882 003e 40F0BF80 bne .L691 3360:../../../Source/third_party/fatfs/src/ff.c **** dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ 6883 .loc 1 3360 0 6884 0042 0598 ldr r0, [sp, #20] 6885 .LVL1045: 6886 0044 0021 movs r1, #0 6887 0046 FFF7FEFF bl create_chain 6888 .LVL1046: 3361:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3362:../../../Source/third_party/fatfs/src/ff.c **** if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ 6889 .loc 1 3362 0 6890 004a 8146 mov r9, r0 6891 004c 0028 cmp r0, #0 6892 004e 00F08280 beq .L688 3363:../../../Source/third_party/fatfs/src/ff.c **** if (dcl == 1) res = FR_INT_ERR; 6893 .loc 1 3363 0 6894 0052 0128 cmp r0, #1 6895 0054 00F08180 beq .L689 6896 0058 ABE0 b .L696 6897 .L697: 3364:../../../Source/third_party/fatfs/src/ff.c **** if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; 3365:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) /* Flush FAT */ 3366:../../../Source/third_party/fatfs/src/ff.c **** res = sync_window(dj.fs); 6898 .loc 1 3366 0 6899 005a 0598 ldr r0, [sp, #20] 6900 .LVL1047: 6901 005c FFF7FEFF bl sync_window 6902 .LVL1048: 6903 0060 0446 mov r4, r0 6904 .LVL1049: 6905 0062 FFE7 b .L685 6906 .LVL1050: 6907 .L685: 3367:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Initialize the new directory table */ 6908 .loc 1 3367 0 6909 0064 002C cmp r4, #0 6910 0066 74D1 bne .L684 3368:../../../Source/third_party/fatfs/src/ff.c **** dsc = clust2sect(dj.fs, dcl); 6911 .loc 1 3368 0 6912 0068 059E ldr r6, [sp, #20] 6913 006a 3046 mov r0, r6 6914 006c 4946 mov r1, r9 6915 006e FFF7FEFF bl clust2sect 6916 .LVL1051: 6917 0072 0446 mov r4, r0 6918 .LVL1052: 3369:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.fs->win; 6919 .loc 1 3369 0 6920 0074 06F13403 add r3, r6, #52 6921 0078 0093 str r3, [sp] 6922 .LVL1053: 6923 007a 06F50D75 add r5, r6, #564 6924 .LBB87: 6925 .LBB88: 560:../../../Source/third_party/fatfs/src/ff.c **** } 6926 .loc 1 560 0 6927 007e 0022 movs r2, #0 6928 .LVL1054: 6929 .L677: 6930 0080 03F8012B strb r2, [r3], #1 6931 .LVL1055: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 6932 .loc 1 559 0 6933 0084 AB42 cmp r3, r5 6934 0086 FBD1 bne .L677 6935 0088 06F13F01 add r1, r6, #63 6936 008c 009B ldr r3, [sp] 6937 .LVL1056: 6938 .LBE88: 6939 .LBE87: 6940 .LBB89: 6941 .LBB90: 560:../../../Source/third_party/fatfs/src/ff.c **** } 6942 .loc 1 560 0 6943 008e 2022 movs r2, #32 6944 .L678: 6945 .LVL1057: 6946 0090 03F8012B strb r2, [r3], #1 6947 .LVL1058: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 6948 .loc 1 559 0 6949 0094 8B42 cmp r3, r1 6950 0096 FBD1 bne .L678 6951 .LBE90: 6952 .LBE89: 3370:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dir, 0, SS(dj.fs)); 3371:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dir+DIR_Name, ' ', 11); /* Create "." entry */ 3372:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Name] = '.'; 6953 .loc 1 3372 0 6954 0098 4FF02E08 mov r8, #46 6955 009c 86F83480 strb r8, [r6, #52] 3373:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] = AM_DIR; 6956 .loc 1 3373 0 6957 00a0 1023 movs r3, #16 6958 .LVL1059: 6959 00a2 86F83F30 strb r3, [r6, #63] 3374:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_WrtTime, tm); 6960 .loc 1 3374 0 6961 00a6 86F84A70 strb r7, [r6, #74] 6962 00aa C7F30723 ubfx r3, r7, #8, #8 6963 00ae 86F84B30 strb r3, [r6, #75] 6964 00b2 3B0C lsrs r3, r7, #16 6965 00b4 86F84C30 strb r3, [r6, #76] 6966 00b8 3B0E lsrs r3, r7, #24 6967 00ba 86F84D30 strb r3, [r6, #77] 6968 .LVL1060: 6969 .LBB91: 6970 .LBB92: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 6971 .loc 1 1261 0 6972 00be 86F84E90 strb r9, [r6, #78] 6973 00c2 C9F30723 ubfx r3, r9, #8, #8 6974 00c6 86F84F30 strb r3, [r6, #79] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 6975 .loc 1 1262 0 6976 00ca 4FEA1943 lsr r3, r9, #16 6977 00ce 86F84830 strb r3, [r6, #72] 6978 00d2 1B0A lsrs r3, r3, #8 6979 00d4 86F84930 strb r3, [r6, #73] 6980 .LBE92: 6981 .LBE91: 3375:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir, dcl); 3376:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dir+SZ_DIR, dir, SZ_DIR); /* Create ".." entry */ 6982 .loc 1 3376 0 6983 00d8 06F15400 add r0, r6, #84 6984 .LVL1061: 6985 00dc 0099 ldr r1, [sp] 6986 00de 2022 movs r2, #32 6987 00e0 FFF7FEFF bl mem_cpy 6988 .LVL1062: 3377:../../../Source/third_party/fatfs/src/ff.c **** dir[33] = '.'; pcl = dj.sclust; 6989 .loc 1 3377 0 6990 00e4 86F85580 strb r8, [r6, #85] 6991 00e8 079B ldr r3, [sp, #28] 6992 .LVL1063: 3378:../../../Source/third_party/fatfs/src/ff.c **** if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) 6993 .loc 1 3378 0 6994 00ea 059A ldr r2, [sp, #20] 6995 00ec 1178 ldrb r1, [r2] @ zero_extendqisi2 6996 00ee 0329 cmp r1, #3 6997 00f0 03D1 bne .L679 6998 .loc 1 3378 0 is_stmt 0 discriminator 1 6999 00f2 916A ldr r1, [r2, #40] 3379:../../../Source/third_party/fatfs/src/ff.c **** pcl = 0; 7000 .loc 1 3379 0 is_stmt 1 discriminator 1 7001 00f4 9942 cmp r1, r3 7002 00f6 08BF it eq 7003 00f8 0023 moveq r3, #0 7004 .LVL1064: 7005 .L679: 7006 .LBB93: 7007 .LBB94: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 7008 .loc 1 1261 0 7009 00fa 86F86E30 strb r3, [r6, #110] 7010 00fe C3F30721 ubfx r1, r3, #8, #8 7011 0102 86F86F10 strb r1, [r6, #111] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 7012 .loc 1 1262 0 7013 0106 1B0C lsrs r3, r3, #16 7014 .LVL1065: 7015 0108 86F86830 strb r3, [r6, #104] 7016 010c 1B0A lsrs r3, r3, #8 7017 010e 86F86930 strb r3, [r6, #105] 7018 .LBE94: 7019 .LBE93: 3380:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir+SZ_DIR, pcl); 3381:../../../Source/third_party/fatfs/src/ff.c **** for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ 7020 .loc 1 3381 0 7021 0112 9378 ldrb r3, [r2, #2] @ zero_extendqisi2 7022 .LVL1066: 7023 0114 002B cmp r3, #0 7024 0116 47D0 beq .L680 7025 0118 03F1FF3A add r10, r3, #-1 7026 011c 5FFA8AFA uxtb r10, r10 7027 0120 0AF1010A add r10, r10, #1 7028 0124 A244 add r10, r10, r4 3382:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->winsect = dsc++; 3383:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 7029 .loc 1 3383 0 7030 0126 4FF0010B mov fp, #1 7031 .LBB95: 7032 .LBB96: 560:../../../Source/third_party/fatfs/src/ff.c **** } 7033 .loc 1 560 0 7034 012a 0026 movs r6, #0 7035 .LVL1067: 7036 .L682: 7037 .LBE96: 7038 .LBE95: 3382:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->winsect = dsc++; 7039 .loc 1 3382 0 7040 012c 0598 ldr r0, [sp, #20] 7041 012e 04F10108 add r8, r4, #1 7042 .LVL1068: 7043 0132 0463 str r4, [r0, #48] 7044 .loc 1 3383 0 7045 0134 80F804B0 strb fp, [r0, #4] 3384:../../../Source/third_party/fatfs/src/ff.c **** res = sync_window(dj.fs); 7046 .loc 1 3384 0 7047 0138 FFF7FEFF bl sync_window 7048 .LVL1069: 3385:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) break; 7049 .loc 1 3385 0 7050 013c 0446 mov r4, r0 7051 013e 40B9 cbnz r0, .L684 7052 0140 009B ldr r3, [sp] 7053 .L681: 7054 .LVL1070: 7055 .LBB98: 7056 .LBB97: 560:../../../Source/third_party/fatfs/src/ff.c **** } 7057 .loc 1 560 0 7058 0142 03F8016B strb r6, [r3], #1 7059 .LVL1071: 559:../../../Source/third_party/fatfs/src/ff.c **** *d++ = (BYTE)val; 7060 .loc 1 559 0 7061 0146 AB42 cmp r3, r5 7062 0148 FBD1 bne .L681 7063 .LVL1072: 7064 .LBE97: 7065 .LBE98: 3382:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 7066 .loc 1 3382 0 discriminator 2 7067 014a 4446 mov r4, r8 3381:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->winsect = dsc++; 7068 .loc 1 3381 0 discriminator 2 7069 014c D045 cmp r8, r10 7070 014e EDD1 bne .L682 7071 .LVL1073: 7072 0150 2AE0 b .L680 7073 .LVL1074: 7074 .L684: 3386:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dir, 0, SS(dj.fs)); 3387:../../../Source/third_party/fatfs/src/ff.c **** } 3388:../../../Source/third_party/fatfs/src/ff.c **** } 3389:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = dir_register(&dj); /* Register the object to the directoy */ 3390:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) { 7075 .loc 1 3390 0 7076 0152 44B1 cbz r4, .L683 7077 0154 02E0 b .L674 7078 .LVL1075: 7079 .L688: 3362:../../../Source/third_party/fatfs/src/ff.c **** if (dcl == 1) res = FR_INT_ERR; 7080 .loc 1 3362 0 7081 0156 0724 movs r4, #7 7082 0158 00E0 b .L674 7083 .L689: 3363:../../../Source/third_party/fatfs/src/ff.c **** if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; 7084 .loc 1 3363 0 7085 015a 0224 movs r4, #2 7086 .LVL1076: 7087 .L674: 3391:../../../Source/third_party/fatfs/src/ff.c **** remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ 7088 .loc 1 3391 0 7089 015c 0598 ldr r0, [sp, #20] 7090 015e 4946 mov r1, r9 7091 0160 FFF7FEFF bl remove_chain 7092 .LVL1077: 7093 0164 2CE0 b .L691 7094 .L683: 3392:../../../Source/third_party/fatfs/src/ff.c **** } else { 3393:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 7095 .loc 1 3393 0 7096 0166 0A9B ldr r3, [sp, #40] 7097 .LVL1078: 3394:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] = AM_DIR; /* Attribute */ 7098 .loc 1 3394 0 7099 0168 1022 movs r2, #16 7100 016a DA72 strb r2, [r3, #11] 3395:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dir+DIR_WrtTime, tm); /* Created time */ 7101 .loc 1 3395 0 7102 016c 9F75 strb r7, [r3, #22] 7103 016e C7F30722 ubfx r2, r7, #8, #8 7104 0172 DA75 strb r2, [r3, #23] 7105 0174 3A0C lsrs r2, r7, #16 7106 0176 1A76 strb r2, [r3, #24] 7107 0178 3F0E lsrs r7, r7, #24 7108 .LVL1079: 7109 017a 5F76 strb r7, [r3, #25] 7110 .LVL1080: 7111 .LBB99: 7112 .LBB100: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 7113 .loc 1 1261 0 7114 017c 83F81A90 strb r9, [r3, #26] 7115 0180 C9F30722 ubfx r2, r9, #8, #8 7116 0184 DA76 strb r2, [r3, #27] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 7117 .loc 1 1262 0 7118 0186 4FEA1949 lsr r9, r9, #16 7119 .LVL1081: 7120 018a 83F81490 strb r9, [r3, #20] 7121 018e 4FEA1929 lsr r9, r9, #8 7122 0192 83F81590 strb r9, [r3, #21] 7123 .LBE100: 7124 .LBE99: 3396:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir, dcl); /* Table start cluster */ 3397:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 7125 .loc 1 3397 0 7126 0196 0598 ldr r0, [sp, #20] 7127 0198 0123 movs r3, #1 7128 .LVL1082: 7129 019a 0371 strb r3, [r0, #4] 3398:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(dj.fs); 7130 .loc 1 3398 0 7131 019c FFF7FEFF bl sync_fs 7132 .LVL1083: 7133 01a0 0446 mov r4, r0 7134 .LVL1084: 7135 01a2 0DE0 b .L691 7136 .LVL1085: 7137 .L687: 3356:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) 7138 .loc 1 3356 0 7139 01a4 0824 movs r4, #8 7140 .LVL1086: 7141 01a6 0BE0 b .L691 7142 .LVL1087: 7143 .L680: 3389:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) { 7144 .loc 1 3389 0 7145 01a8 05A8 add r0, sp, #20 7146 01aa FFF7FEFF bl dir_register 7147 .LVL1088: 7148 01ae 0446 mov r4, r0 7149 01b0 CFE7 b .L684 7150 .LVL1089: 7151 .L696: 3364:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) /* Flush FAT */ 7152 .loc 1 3364 0 7153 01b2 B0F1FF3F cmp r0, #-1 7154 01b6 08BF it eq 7155 01b8 0124 moveq r4, #1 7156 01ba 3FF453AF beq .L685 7157 01be 4CE7 b .L697 7158 .LVL1090: 7159 .L691: 3399:../../../Source/third_party/fatfs/src/ff.c **** } 3400:../../../Source/third_party/fatfs/src/ff.c **** } 3401:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3402:../../../Source/third_party/fatfs/src/ff.c **** } 3403:../../../Source/third_party/fatfs/src/ff.c **** 3404:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3405:../../../Source/third_party/fatfs/src/ff.c **** } 7160 .loc 1 3405 0 7161 01c0 2046 mov r0, r4 7162 01c2 0FB0 add sp, sp, #60 7163 .cfi_def_cfa_offset 36 7164 @ sp needed 7165 01c4 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 7166 .LVL1091: 7167 .L700: 7168 .align 2 7169 .L699: 7170 01c8 00000000 .word .LANCHOR4 7171 .cfi_endproc 7172 .LFE45: 7174 .section .text.f_chmod,"ax",%progbits 7175 .align 2 7176 .global f_chmod 7177 .thumb 7178 .thumb_func 7180 f_chmod: 7181 .LFB46: 3406:../../../Source/third_party/fatfs/src/ff.c **** 3407:../../../Source/third_party/fatfs/src/ff.c **** 3408:../../../Source/third_party/fatfs/src/ff.c **** 3409:../../../Source/third_party/fatfs/src/ff.c **** 3410:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3411:../../../Source/third_party/fatfs/src/ff.c **** /* Change Attribute */ 3412:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3413:../../../Source/third_party/fatfs/src/ff.c **** 3414:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_chmod ( 3415:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path, /* Pointer to the file path */ 3416:../../../Source/third_party/fatfs/src/ff.c **** BYTE value, /* Attribute bits */ 3417:../../../Source/third_party/fatfs/src/ff.c **** BYTE mask /* Attribute mask to change */ 3418:../../../Source/third_party/fatfs/src/ff.c **** ) 3419:../../../Source/third_party/fatfs/src/ff.c **** { 7182 .loc 1 3419 0 7183 .cfi_startproc 7184 @ args = 0, pretend = 0, frame = 56 7185 @ frame_needed = 0, uses_anonymous_args = 0 7186 .LVL1092: 7187 0000 30B5 push {r4, r5, lr} 7188 .cfi_def_cfa_offset 12 7189 .cfi_offset 4, -12 7190 .cfi_offset 5, -8 7191 .cfi_offset 14, -4 7192 0002 8FB0 sub sp, sp, #60 7193 .cfi_def_cfa_offset 72 7194 0004 0EAB add r3, sp, #56 7195 0006 43F8340D str r0, [r3, #-52]! 7196 000a 0C46 mov r4, r1 7197 000c 1546 mov r5, r2 3420:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3421:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3422:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir; 3423:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3424:../../../Source/third_party/fatfs/src/ff.c **** 3425:../../../Source/third_party/fatfs/src/ff.c **** 3426:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 1); 7198 .loc 1 3426 0 7199 000e 1846 mov r0, r3 7200 .LVL1093: 7201 0010 05A9 add r1, sp, #20 7202 .LVL1094: 7203 0012 0122 movs r2, #1 7204 .LVL1095: 7205 0014 FFF7FEFF bl chk_mounted 7206 .LVL1096: 3427:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7207 .loc 1 3427 0 7208 0018 0346 mov r3, r0 7209 001a D8B9 cbnz r0, .L702 3428:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 7210 .loc 1 3428 0 7211 001c 02AB add r3, sp, #8 7212 001e 0B93 str r3, [sp, #44] 7213 0020 0E4B ldr r3, .L705 7214 0022 0C93 str r3, [sp, #48] 3429:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 7215 .loc 1 3429 0 7216 0024 05A8 add r0, sp, #20 7217 .LVL1097: 7218 0026 0199 ldr r1, [sp, #4] 7219 0028 FFF7FEFF bl follow_path 7220 .LVL1098: 3430:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3431:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) 3432:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3433:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7221 .loc 1 3433 0 7222 002c 0346 mov r3, r0 7223 002e 88B9 cbnz r0, .L702 3434:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 7224 .loc 1 3434 0 7225 0030 0A9B ldr r3, [sp, #40] 7226 .LVL1099: 3435:../../../Source/third_party/fatfs/src/ff.c **** if (!dir) { /* Is it a root directory? */ 7227 .loc 1 3435 0 7228 0032 73B1 cbz r3, .L703 3436:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3437:../../../Source/third_party/fatfs/src/ff.c **** } else { /* File or sub directory */ 3438:../../../Source/third_party/fatfs/src/ff.c **** mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ 7229 .loc 1 3438 0 7230 0034 05F02705 and r5, r5, #39 7231 .LVL1100: 3439:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ 7232 .loc 1 3439 0 7233 0038 DA7A ldrb r2, [r3, #11] @ zero_extendqisi2 7234 003a 22EA0502 bic r2, r2, r5 7235 003e 2C40 ands r4, r4, r5 7236 0040 1443 orrs r4, r4, r2 7237 0042 DC72 strb r4, [r3, #11] 3440:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 7238 .loc 1 3440 0 7239 0044 0598 ldr r0, [sp, #20] 7240 .LVL1101: 7241 0046 0123 movs r3, #1 7242 .LVL1102: 7243 0048 0371 strb r3, [r0, #4] 3441:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(dj.fs); 7244 .loc 1 3441 0 7245 004a FFF7FEFF bl sync_fs 7246 .LVL1103: 7247 004e 0346 mov r3, r0 7248 .LVL1104: 7249 0050 00E0 b .L702 7250 .LVL1105: 7251 .L703: 3436:../../../Source/third_party/fatfs/src/ff.c **** } else { /* File or sub directory */ 7252 .loc 1 3436 0 7253 0052 0623 movs r3, #6 7254 .LVL1106: 7255 .L702: 3442:../../../Source/third_party/fatfs/src/ff.c **** } 3443:../../../Source/third_party/fatfs/src/ff.c **** } 3444:../../../Source/third_party/fatfs/src/ff.c **** } 3445:../../../Source/third_party/fatfs/src/ff.c **** 3446:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3447:../../../Source/third_party/fatfs/src/ff.c **** } 7256 .loc 1 3447 0 7257 0054 1846 mov r0, r3 7258 0056 0FB0 add sp, sp, #60 7259 .cfi_def_cfa_offset 12 7260 @ sp needed 7261 0058 30BD pop {r4, r5, pc} 7262 .LVL1107: 7263 .L706: 7264 005a 00BF .align 2 7265 .L705: 7266 005c 00000000 .word .LANCHOR4 7267 .cfi_endproc 7268 .LFE46: 7270 .section .text.f_utime,"ax",%progbits 7271 .align 2 7272 .global f_utime 7273 .thumb 7274 .thumb_func 7276 f_utime: 7277 .LFB47: 3448:../../../Source/third_party/fatfs/src/ff.c **** 3449:../../../Source/third_party/fatfs/src/ff.c **** 3450:../../../Source/third_party/fatfs/src/ff.c **** 3451:../../../Source/third_party/fatfs/src/ff.c **** 3452:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3453:../../../Source/third_party/fatfs/src/ff.c **** /* Change Timestamp */ 3454:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3455:../../../Source/third_party/fatfs/src/ff.c **** 3456:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_utime ( 3457:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path, /* Pointer to the file/directory name */ 3458:../../../Source/third_party/fatfs/src/ff.c **** const FILINFO *fno /* Pointer to the time stamp to be set */ 3459:../../../Source/third_party/fatfs/src/ff.c **** ) 3460:../../../Source/third_party/fatfs/src/ff.c **** { 7278 .loc 1 3460 0 7279 .cfi_startproc 7280 @ args = 0, pretend = 0, frame = 56 7281 @ frame_needed = 0, uses_anonymous_args = 0 7282 .LVL1108: 7283 0000 10B5 push {r4, lr} 7284 .cfi_def_cfa_offset 8 7285 .cfi_offset 4, -8 7286 .cfi_offset 14, -4 7287 0002 8EB0 sub sp, sp, #56 7288 .cfi_def_cfa_offset 64 7289 0004 0EAB add r3, sp, #56 7290 0006 43F8340D str r0, [r3, #-52]! 7291 000a 0C46 mov r4, r1 3461:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3462:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3463:../../../Source/third_party/fatfs/src/ff.c **** BYTE *dir; 3464:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3465:../../../Source/third_party/fatfs/src/ff.c **** 3466:../../../Source/third_party/fatfs/src/ff.c **** 3467:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 1); 7292 .loc 1 3467 0 7293 000c 1846 mov r0, r3 7294 .LVL1109: 7295 000e 05A9 add r1, sp, #20 7296 .LVL1110: 7297 0010 0122 movs r2, #1 7298 0012 FFF7FEFF bl chk_mounted 7299 .LVL1111: 3468:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7300 .loc 1 3468 0 7301 0016 0346 mov r3, r0 7302 0018 E8B9 cbnz r0, .L708 3469:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(dj); 7303 .loc 1 3469 0 7304 001a 02AB add r3, sp, #8 7305 001c 0B93 str r3, [sp, #44] 7306 001e 0F4B ldr r3, .L711 7307 0020 0C93 str r3, [sp, #48] 3470:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&dj, path); /* Follow the file path */ 7308 .loc 1 3470 0 7309 0022 05A8 add r0, sp, #20 7310 .LVL1112: 7311 0024 0199 ldr r1, [sp, #4] 7312 0026 FFF7FEFF bl follow_path 7313 .LVL1113: 3471:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3472:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) 3473:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3474:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7314 .loc 1 3474 0 7315 002a 0346 mov r3, r0 7316 002c 98B9 cbnz r0, .L708 3475:../../../Source/third_party/fatfs/src/ff.c **** dir = dj.dir; 7317 .loc 1 3475 0 7318 002e 0A9B ldr r3, [sp, #40] 7319 .LVL1114: 3476:../../../Source/third_party/fatfs/src/ff.c **** if (!dir) { /* Root directory */ 7320 .loc 1 3476 0 7321 0030 83B1 cbz r3, .L709 3477:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3478:../../../Source/third_party/fatfs/src/ff.c **** } else { /* File or sub-directory */ 3479:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_WrtTime, fno->ftime); 7322 .loc 1 3479 0 7323 0032 E288 ldrh r2, [r4, #6] 7324 0034 9A75 strb r2, [r3, #22] 7325 0036 E288 ldrh r2, [r4, #6] 7326 0038 120A lsrs r2, r2, #8 7327 003a DA75 strb r2, [r3, #23] 3480:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_WrtDate, fno->fdate); 7328 .loc 1 3480 0 7329 003c A288 ldrh r2, [r4, #4] 7330 003e 1A76 strb r2, [r3, #24] 7331 0040 A288 ldrh r2, [r4, #4] 7332 0042 120A lsrs r2, r2, #8 7333 0044 5A76 strb r2, [r3, #25] 3481:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 7334 .loc 1 3481 0 7335 0046 0598 ldr r0, [sp, #20] 7336 .LVL1115: 7337 0048 0123 movs r3, #1 7338 .LVL1116: 7339 004a 0371 strb r3, [r0, #4] 3482:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(dj.fs); 7340 .loc 1 3482 0 7341 004c FFF7FEFF bl sync_fs 7342 .LVL1117: 7343 0050 0346 mov r3, r0 7344 .LVL1118: 7345 0052 00E0 b .L708 7346 .LVL1119: 7347 .L709: 3477:../../../Source/third_party/fatfs/src/ff.c **** } else { /* File or sub-directory */ 7348 .loc 1 3477 0 7349 0054 0623 movs r3, #6 7350 .LVL1120: 7351 .L708: 3483:../../../Source/third_party/fatfs/src/ff.c **** } 3484:../../../Source/third_party/fatfs/src/ff.c **** } 3485:../../../Source/third_party/fatfs/src/ff.c **** } 3486:../../../Source/third_party/fatfs/src/ff.c **** 3487:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3488:../../../Source/third_party/fatfs/src/ff.c **** } 7352 .loc 1 3488 0 7353 0056 1846 mov r0, r3 7354 0058 0EB0 add sp, sp, #56 7355 .cfi_def_cfa_offset 8 7356 .LVL1121: 7357 @ sp needed 7358 005a 10BD pop {r4, pc} 7359 .LVL1122: 7360 .L712: 7361 .align 2 7362 .L711: 7363 005c 00000000 .word .LANCHOR4 7364 .cfi_endproc 7365 .LFE47: 7367 .section .text.f_rename,"ax",%progbits 7368 .align 2 7369 .global f_rename 7370 .thumb 7371 .thumb_func 7373 f_rename: 7374 .LFB48: 3489:../../../Source/third_party/fatfs/src/ff.c **** 3490:../../../Source/third_party/fatfs/src/ff.c **** 3491:../../../Source/third_party/fatfs/src/ff.c **** 3492:../../../Source/third_party/fatfs/src/ff.c **** 3493:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3494:../../../Source/third_party/fatfs/src/ff.c **** /* Rename File/Directory */ 3495:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3496:../../../Source/third_party/fatfs/src/ff.c **** 3497:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_rename ( 3498:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path_old, /* Pointer to the old name */ 3499:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR *path_new /* Pointer to the new name */ 3500:../../../Source/third_party/fatfs/src/ff.c **** ) 3501:../../../Source/third_party/fatfs/src/ff.c **** { 7375 .loc 1 3501 0 7376 .cfi_startproc 7377 @ args = 0, pretend = 0, frame = 120 7378 @ frame_needed = 0, uses_anonymous_args = 0 7379 .LVL1123: 7380 0000 30B5 push {r4, r5, lr} 7381 .cfi_def_cfa_offset 12 7382 .cfi_offset 4, -12 7383 .cfi_offset 5, -8 7384 .cfi_offset 14, -4 7385 0002 9FB0 sub sp, sp, #124 7386 .cfi_def_cfa_offset 136 7387 0004 1EAB add r3, sp, #120 7388 0006 43F8740D str r0, [r3, #-116]! 7389 000a 0C46 mov r4, r1 3502:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3503:../../../Source/third_party/fatfs/src/ff.c **** DIR djo, djn; 3504:../../../Source/third_party/fatfs/src/ff.c **** BYTE buf[21], *dir; 3505:../../../Source/third_party/fatfs/src/ff.c **** DWORD dw; 3506:../../../Source/third_party/fatfs/src/ff.c **** DEF_NAMEBUF; 3507:../../../Source/third_party/fatfs/src/ff.c **** 3508:../../../Source/third_party/fatfs/src/ff.c **** 3509:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path_old, &djo.fs, 1); 7390 .loc 1 3509 0 7391 000c 1846 mov r0, r3 7392 .LVL1124: 7393 000e 15A9 add r1, sp, #84 7394 .LVL1125: 7395 0010 0122 movs r2, #1 7396 0012 FFF7FEFF bl chk_mounted 7397 .LVL1126: 3510:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7398 .loc 1 3510 0 7399 0016 0346 mov r3, r0 7400 0018 0028 cmp r0, #0 7401 001a 7ED1 bne .L724 3511:../../../Source/third_party/fatfs/src/ff.c **** djn.fs = djo.fs; 7402 .loc 1 3511 0 7403 001c 159B ldr r3, [sp, #84] 7404 001e 0C93 str r3, [sp, #48] 3512:../../../Source/third_party/fatfs/src/ff.c **** INIT_BUF(djo); 7405 .loc 1 3512 0 7406 0020 03AB add r3, sp, #12 7407 0022 1B93 str r3, [sp, #108] 7408 0024 3E4B ldr r3, .L726 7409 0026 1C93 str r3, [sp, #112] 3513:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&djo, path_old); /* Check old object */ 7410 .loc 1 3513 0 7411 0028 15A8 add r0, sp, #84 7412 .LVL1127: 7413 002a 0199 ldr r1, [sp, #4] 7414 002c FFF7FEFF bl follow_path 7415 .LVL1128: 3514:../../../Source/third_party/fatfs/src/ff.c **** if (_FS_RPATH && res == FR_OK && (djo.fn[NS] & NS_DOT)) 3515:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INVALID_NAME; 3516:../../../Source/third_party/fatfs/src/ff.c **** #if _FS_LOCK 3517:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = chk_lock(&djo, 2); 3518:../../../Source/third_party/fatfs/src/ff.c **** #endif 3519:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* Old object is found */ 7416 .loc 1 3519 0 7417 0030 0346 mov r3, r0 7418 0032 0028 cmp r0, #0 7419 0034 71D1 bne .L724 3520:../../../Source/third_party/fatfs/src/ff.c **** if (!djo.dir) { /* Is root dir? */ 7420 .loc 1 3520 0 7421 0036 1A99 ldr r1, [sp, #104] 7422 0038 0029 cmp r1, #0 7423 003a 62D0 beq .L720 3521:../../../Source/third_party/fatfs/src/ff.c **** res = FR_NO_FILE; 3522:../../../Source/third_party/fatfs/src/ff.c **** } else { 3523:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(buf, djo.dir+DIR_Attr, 21); /* Save the object information except for name */ 7424 .loc 1 3523 0 7425 003c 06A8 add r0, sp, #24 7426 .LVL1129: 7427 003e 0B31 adds r1, r1, #11 7428 0040 1522 movs r2, #21 7429 0042 FFF7FEFF bl mem_cpy 7430 .LVL1130: 3524:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(&djn, &djo, sizeof (DIR)); /* Check new object */ 7431 .loc 1 3524 0 7432 0046 0CA8 add r0, sp, #48 7433 0048 15A9 add r1, sp, #84 7434 004a 2422 movs r2, #36 7435 004c FFF7FEFF bl mem_cpy 7436 .LVL1131: 3525:../../../Source/third_party/fatfs/src/ff.c **** res = follow_path(&djn, path_new); 7437 .loc 1 3525 0 7438 0050 0CA8 add r0, sp, #48 7439 0052 2146 mov r1, r4 7440 0054 FFF7FEFF bl follow_path 7441 .LVL1132: 3526:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) res = FR_EXIST; /* The new object name is already existing */ 7442 .loc 1 3526 0 7443 0058 0346 mov r3, r0 7444 005a 0028 cmp r0, #0 7445 005c 53D0 beq .L721 3527:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ 7446 .loc 1 3527 0 7447 005e 0428 cmp r0, #4 7448 0060 5BD1 bne .L724 3528:../../../Source/third_party/fatfs/src/ff.c **** /* Start critical section that any interruption can cause a cross-link */ 3529:../../../Source/third_party/fatfs/src/ff.c **** res = dir_register(&djn); /* Register the new entry */ 7449 .loc 1 3529 0 7450 0062 0CA8 add r0, sp, #48 7451 .LVL1133: 7452 0064 FFF7FEFF bl dir_register 7453 .LVL1134: 3530:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 7454 .loc 1 3530 0 7455 0068 0346 mov r3, r0 7456 006a 0028 cmp r0, #0 7457 006c 55D1 bne .L724 3531:../../../Source/third_party/fatfs/src/ff.c **** dir = djn.dir; /* Copy object information except for name */ 7458 .loc 1 3531 0 7459 006e 119C ldr r4, [sp, #68] 7460 .LVL1135: 3532:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dir+13, buf+2, 19); 7461 .loc 1 3532 0 7462 0070 04F10D00 add r0, r4, #13 7463 .LVL1136: 7464 0074 0DF11A01 add r1, sp, #26 7465 0078 1322 movs r2, #19 7466 007a FFF7FEFF bl mem_cpy 7467 .LVL1137: 3533:../../../Source/third_party/fatfs/src/ff.c **** dir[DIR_Attr] = buf[0] | AM_ARC; 7468 .loc 1 3533 0 7469 007e 9DF81830 ldrb r3, [sp, #24] @ zero_extendqisi2 7470 0082 43F02003 orr r3, r3, #32 7471 0086 E372 strb r3, [r4, #11] 3534:../../../Source/third_party/fatfs/src/ff.c **** djo.fs->wflag = 1; 7472 .loc 1 3534 0 7473 0088 159D ldr r5, [sp, #84] 7474 008a 0123 movs r3, #1 7475 008c 2B71 strb r3, [r5, #4] 3535:../../../Source/third_party/fatfs/src/ff.c **** if (djo.sclust != djn.sclust && (dir[DIR_Attr] & AM_DIR)) { /* Update .. entry in the direct 7476 .loc 1 3535 0 7477 008e 0E9B ldr r3, [sp, #56] 7478 0090 179A ldr r2, [sp, #92] 7479 0092 9A42 cmp r2, r3 7480 0094 3BD0 beq .L715 7481 .loc 1 3535 0 is_stmt 0 discriminator 1 7482 0096 E37A ldrb r3, [r4, #11] @ zero_extendqisi2 7483 0098 13F0100F tst r3, #16 7484 009c 37D0 beq .L715 3536:../../../Source/third_party/fatfs/src/ff.c **** dw = clust2sect(djo.fs, ld_clust(djo.fs, dir)); 7485 .loc 1 3536 0 is_stmt 1 7486 009e 2846 mov r0, r5 7487 00a0 2146 mov r1, r4 7488 00a2 FFF7FEFF bl ld_clust 7489 .LVL1138: 7490 00a6 0146 mov r1, r0 7491 00a8 2846 mov r0, r5 7492 00aa FFF7FEFF bl clust2sect 7493 .LVL1139: 3537:../../../Source/third_party/fatfs/src/ff.c **** if (!dw) { 7494 .loc 1 3537 0 7495 00ae 0146 mov r1, r0 7496 00b0 58B3 cbz r0, .L722 3538:../../../Source/third_party/fatfs/src/ff.c **** res = FR_INT_ERR; 3539:../../../Source/third_party/fatfs/src/ff.c **** } else { 3540:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(djo.fs, dw); 7497 .loc 1 3540 0 7498 00b2 2846 mov r0, r5 7499 .LVL1140: 7500 00b4 FFF7FEFF bl move_window 7501 .LVL1141: 3541:../../../Source/third_party/fatfs/src/ff.c **** dir = djo.fs->win+SZ_DIR; /* .. entry */ 7502 .loc 1 3541 0 7503 00b8 159A ldr r2, [sp, #84] 7504 .LVL1142: 3542:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && dir[1] == '.') { 7505 .loc 1 3542 0 7506 00ba 0346 mov r3, r0 7507 00bc 68BB cbnz r0, .L724 7508 .loc 1 3542 0 is_stmt 0 discriminator 1 7509 00be 92F85530 ldrb r3, [r2, #85] @ zero_extendqisi2 7510 00c2 2E2B cmp r3, #46 7511 00c4 23D1 bne .L715 3543:../../../Source/third_party/fatfs/src/ff.c **** dw = (djo.fs->fs_type == FS_FAT32 && djn.sclust == djo.fs->dirbase) ? 0 : djn.sclust; 7512 .loc 1 3543 0 is_stmt 1 7513 00c6 1378 ldrb r3, [r2] @ zero_extendqisi2 7514 00c8 032B cmp r3, #3 7515 00ca 03D1 bne .L717 7516 .loc 1 3543 0 is_stmt 0 discriminator 2 7517 00cc 936A ldr r3, [r2, #40] 7518 00ce 0E99 ldr r1, [sp, #56] 7519 00d0 9942 cmp r1, r3 7520 00d2 01D0 beq .L723 7521 .L717: 7522 .loc 1 3543 0 discriminator 3 7523 00d4 0E9B ldr r3, [sp, #56] 7524 00d6 00E0 b .L718 7525 .L723: 7526 .loc 1 3543 0 7527 00d8 0023 movs r3, #0 7528 .L718: 7529 .LVL1143: 7530 .LBB103: 7531 .LBB104: 1261:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(dir+DIR_FstClusHI, cl >> 16); 7532 .loc 1 1261 0 is_stmt 1 discriminator 6 7533 00da 82F86E30 strb r3, [r2, #110] 7534 00de C3F30721 ubfx r1, r3, #8, #8 7535 00e2 82F86F10 strb r1, [r2, #111] 1262:../../../Source/third_party/fatfs/src/ff.c **** } 7536 .loc 1 1262 0 discriminator 6 7537 00e6 1B0C lsrs r3, r3, #16 7538 .LVL1144: 7539 00e8 82F86830 strb r3, [r2, #104] 7540 00ec 1B0A lsrs r3, r3, #8 7541 00ee 82F86930 strb r3, [r2, #105] 7542 .LBE104: 7543 .LBE103: 3544:../../../Source/third_party/fatfs/src/ff.c **** st_clust(dir, dw); 3545:../../../Source/third_party/fatfs/src/ff.c **** djo.fs->wflag = 1; 7544 .loc 1 3545 0 discriminator 6 7545 00f2 0123 movs r3, #1 7546 00f4 1371 strb r3, [r2, #4] 7547 00f6 0AE0 b .L715 7548 .LVL1145: 7549 .L719: 3546:../../../Source/third_party/fatfs/src/ff.c **** } 3547:../../../Source/third_party/fatfs/src/ff.c **** } 3548:../../../Source/third_party/fatfs/src/ff.c **** } 3549:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3550:../../../Source/third_party/fatfs/src/ff.c **** res = dir_remove(&djo); /* Remove old entry */ 3551:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) 3552:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(djo.fs); 7550 .loc 1 3552 0 7551 00f8 1598 ldr r0, [sp, #84] 7552 .LVL1146: 7553 00fa FFF7FEFF bl sync_fs 7554 .LVL1147: 7555 00fe 0346 mov r3, r0 7556 .LVL1148: 7557 0100 0BE0 b .L724 7558 .LVL1149: 7559 .L720: 3521:../../../Source/third_party/fatfs/src/ff.c **** } else { 7560 .loc 1 3521 0 7561 0102 0423 movs r3, #4 7562 0104 09E0 b .L724 7563 .L721: 3526:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ 7564 .loc 1 3526 0 7565 0106 0823 movs r3, #8 7566 0108 07E0 b .L724 7567 .LVL1150: 7568 .L722: 3538:../../../Source/third_party/fatfs/src/ff.c **** } else { 7569 .loc 1 3538 0 7570 010a 0223 movs r3, #2 7571 .LVL1151: 7572 010c 05E0 b .L724 7573 .LVL1152: 7574 .L715: 3550:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) 7575 .loc 1 3550 0 7576 010e 15A8 add r0, sp, #84 7577 0110 FFF7FEFF bl dir_remove 7578 .LVL1153: 3551:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(djo.fs); 7579 .loc 1 3551 0 7580 0114 0346 mov r3, r0 7581 0116 0028 cmp r0, #0 7582 0118 EED0 beq .L719 7583 .LVL1154: 7584 .L724: 3553:../../../Source/third_party/fatfs/src/ff.c **** } 3554:../../../Source/third_party/fatfs/src/ff.c **** } 3555:../../../Source/third_party/fatfs/src/ff.c **** /* End critical section */ 3556:../../../Source/third_party/fatfs/src/ff.c **** } 3557:../../../Source/third_party/fatfs/src/ff.c **** } 3558:../../../Source/third_party/fatfs/src/ff.c **** } 3559:../../../Source/third_party/fatfs/src/ff.c **** FREE_BUF(); 3560:../../../Source/third_party/fatfs/src/ff.c **** } 3561:../../../Source/third_party/fatfs/src/ff.c **** 3562:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(djo.fs, res); 3563:../../../Source/third_party/fatfs/src/ff.c **** } 7585 .loc 1 3563 0 7586 011a 1846 mov r0, r3 7587 011c 1FB0 add sp, sp, #124 7588 .cfi_def_cfa_offset 12 7589 @ sp needed 7590 011e 30BD pop {r4, r5, pc} 7591 .LVL1155: 7592 .L727: 7593 .align 2 7594 .L726: 7595 0120 00000000 .word .LANCHOR4 7596 .cfi_endproc 7597 .LFE48: 7599 .section .text.f_gets,"ax",%progbits 7600 .align 2 7601 .global f_gets 7602 .thumb 7603 .thumb_func 7605 f_gets: 7606 .LFB49: 3564:../../../Source/third_party/fatfs/src/ff.c **** 3565:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 3566:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE == 0 */ 3567:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE <= 1 */ 3568:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _FS_MINIMIZE <= 2 */ 3569:../../../Source/third_party/fatfs/src/ff.c **** 3570:../../../Source/third_party/fatfs/src/ff.c **** 3571:../../../Source/third_party/fatfs/src/ff.c **** 3572:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LABEL 3573:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3574:../../../Source/third_party/fatfs/src/ff.c **** /* Get volume label */ 3575:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3576:../../../Source/third_party/fatfs/src/ff.c **** 3577:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_getlabel ( 3578:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR* path, /* Path name of the logical drive number */ 3579:../../../Source/third_party/fatfs/src/ff.c **** TCHAR* label, /* Pointer to a buffer to return the volume label */ 3580:../../../Source/third_party/fatfs/src/ff.c **** DWORD* sn /* Pointer to a variable to return the volume serial number */ 3581:../../../Source/third_party/fatfs/src/ff.c **** ) 3582:../../../Source/third_party/fatfs/src/ff.c **** { 3583:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3584:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3585:../../../Source/third_party/fatfs/src/ff.c **** UINT i, j; 3586:../../../Source/third_party/fatfs/src/ff.c **** 3587:../../../Source/third_party/fatfs/src/ff.c **** 3588:../../../Source/third_party/fatfs/src/ff.c **** /* Get logical drive */ 3589:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&path, &dj.fs, 0); 3590:../../../Source/third_party/fatfs/src/ff.c **** 3591:../../../Source/third_party/fatfs/src/ff.c **** /* Get volume label */ 3592:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && label) { 3593:../../../Source/third_party/fatfs/src/ff.c **** dj.sclust = 0; /* Open root dir */ 3594:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(&dj, 0); 3595:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3596:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(&dj, 1); /* Get an entry with AM_VOL */ 3597:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* A volume label is exist */ 3598:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 3599:../../../Source/third_party/fatfs/src/ff.c **** WCHAR w; 3600:../../../Source/third_party/fatfs/src/ff.c **** i = j = 0; 3601:../../../Source/third_party/fatfs/src/ff.c **** do { 3602:../../../Source/third_party/fatfs/src/ff.c **** w = (i < 11) ? dj.dir[i++] : ' '; 3603:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(w) && i < 11 && IsDBCS2(dj.dir[i])) 3604:../../../Source/third_party/fatfs/src/ff.c **** w = (w << 8) | dj.dir[i++]; 3605:../../../Source/third_party/fatfs/src/ff.c **** label[j++] = ff_convert(w, 1); 3606:../../../Source/third_party/fatfs/src/ff.c **** } while (j < 11); 3607:../../../Source/third_party/fatfs/src/ff.c **** #else 3608:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(label, dj.dir, 11); 3609:../../../Source/third_party/fatfs/src/ff.c **** #endif 3610:../../../Source/third_party/fatfs/src/ff.c **** j = 11; 3611:../../../Source/third_party/fatfs/src/ff.c **** do { 3612:../../../Source/third_party/fatfs/src/ff.c **** label[j] = 0; 3613:../../../Source/third_party/fatfs/src/ff.c **** if (!j) break; 3614:../../../Source/third_party/fatfs/src/ff.c **** } while (label[--j] == ' '); 3615:../../../Source/third_party/fatfs/src/ff.c **** } 3616:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { /* No label, return nul string */ 3617:../../../Source/third_party/fatfs/src/ff.c **** label[0] = 0; 3618:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3619:../../../Source/third_party/fatfs/src/ff.c **** } 3620:../../../Source/third_party/fatfs/src/ff.c **** } 3621:../../../Source/third_party/fatfs/src/ff.c **** } 3622:../../../Source/third_party/fatfs/src/ff.c **** 3623:../../../Source/third_party/fatfs/src/ff.c **** /* Get volume serial number */ 3624:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK && sn) { 3625:../../../Source/third_party/fatfs/src/ff.c **** res = move_window(dj.fs, dj.fs->volbase); 3626:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3627:../../../Source/third_party/fatfs/src/ff.c **** i = dj.fs->fs_type == FS_FAT32 ? BS_VolID32 : BS_VolID; 3628:../../../Source/third_party/fatfs/src/ff.c **** *sn = LD_DWORD(&dj.fs->win[i]); 3629:../../../Source/third_party/fatfs/src/ff.c **** } 3630:../../../Source/third_party/fatfs/src/ff.c **** } 3631:../../../Source/third_party/fatfs/src/ff.c **** 3632:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3633:../../../Source/third_party/fatfs/src/ff.c **** } 3634:../../../Source/third_party/fatfs/src/ff.c **** 3635:../../../Source/third_party/fatfs/src/ff.c **** 3636:../../../Source/third_party/fatfs/src/ff.c **** 3637:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 3638:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3639:../../../Source/third_party/fatfs/src/ff.c **** /* Set volume label */ 3640:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3641:../../../Source/third_party/fatfs/src/ff.c **** 3642:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_setlabel ( 3643:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR* label /* Pointer to the volume label to set */ 3644:../../../Source/third_party/fatfs/src/ff.c **** ) 3645:../../../Source/third_party/fatfs/src/ff.c **** { 3646:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3647:../../../Source/third_party/fatfs/src/ff.c **** DIR dj; 3648:../../../Source/third_party/fatfs/src/ff.c **** BYTE vn[11]; 3649:../../../Source/third_party/fatfs/src/ff.c **** UINT i, j, sl; 3650:../../../Source/third_party/fatfs/src/ff.c **** WCHAR w; 3651:../../../Source/third_party/fatfs/src/ff.c **** DWORD tm; 3652:../../../Source/third_party/fatfs/src/ff.c **** 3653:../../../Source/third_party/fatfs/src/ff.c **** 3654:../../../Source/third_party/fatfs/src/ff.c **** /* Get logical drive */ 3655:../../../Source/third_party/fatfs/src/ff.c **** res = chk_mounted(&label, &dj.fs, 1); 3656:../../../Source/third_party/fatfs/src/ff.c **** if (res) LEAVE_FF(dj.fs, res); 3657:../../../Source/third_party/fatfs/src/ff.c **** 3658:../../../Source/third_party/fatfs/src/ff.c **** /* Create a volume label in directory form */ 3659:../../../Source/third_party/fatfs/src/ff.c **** vn[0] = 0; 3660:../../../Source/third_party/fatfs/src/ff.c **** for (sl = 0; label[sl]; sl++) ; /* Get name length */ 3661:../../../Source/third_party/fatfs/src/ff.c **** for ( ; sl && label[sl-1] == ' '; sl--) ; /* Remove trailing spaces */ 3662:../../../Source/third_party/fatfs/src/ff.c **** if (sl) { /* Create volume label in directory form */ 3663:../../../Source/third_party/fatfs/src/ff.c **** i = j = 0; 3664:../../../Source/third_party/fatfs/src/ff.c **** do { 3665:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE 3666:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(ff_wtoupper(label[i++]), 0); 3667:../../../Source/third_party/fatfs/src/ff.c **** #else 3668:../../../Source/third_party/fatfs/src/ff.c **** w = (BYTE)label[i++]; 3669:../../../Source/third_party/fatfs/src/ff.c **** if (IsDBCS1(w)) 3670:../../../Source/third_party/fatfs/src/ff.c **** w = (j < 10 && i < sl && IsDBCS2(label[i])) ? (w << 8) | (BYTE)label[i++] : 0; 3671:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_LFN 3672:../../../Source/third_party/fatfs/src/ff.c **** w = ff_convert(ff_wtoupper(ff_convert(w, 1)), 0); 3673:../../../Source/third_party/fatfs/src/ff.c **** #else 3674:../../../Source/third_party/fatfs/src/ff.c **** if (IsLower(w)) w -= 0x20; /* To upper ASCII chars */ 3675:../../../Source/third_party/fatfs/src/ff.c **** #ifdef _EXCVT 3676:../../../Source/third_party/fatfs/src/ff.c **** if (w >= 0x80) w = ExCvt[w - 0x80]; /* To upper extended chars (SBCS cfg) */ 3677:../../../Source/third_party/fatfs/src/ff.c **** #else 3678:../../../Source/third_party/fatfs/src/ff.c **** if (!_DF1S && w >= 0x80) w = 0; /* Reject extended chars (ASCII cfg) */ 3679:../../../Source/third_party/fatfs/src/ff.c **** #endif 3680:../../../Source/third_party/fatfs/src/ff.c **** #endif 3681:../../../Source/third_party/fatfs/src/ff.c **** #endif 3682:../../../Source/third_party/fatfs/src/ff.c **** if (!w || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || j >= (UINT)((w >= 0x100) ? 10 : 11)) /* Reject i 3683:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, FR_INVALID_NAME); 3684:../../../Source/third_party/fatfs/src/ff.c **** if (w >= 0x100) vn[j++] = (BYTE)(w >> 8); 3685:../../../Source/third_party/fatfs/src/ff.c **** vn[j++] = (BYTE)w; 3686:../../../Source/third_party/fatfs/src/ff.c **** } while (i < sl); 3687:../../../Source/third_party/fatfs/src/ff.c **** while (j < 11) vn[j++] = ' '; 3688:../../../Source/third_party/fatfs/src/ff.c **** } 3689:../../../Source/third_party/fatfs/src/ff.c **** 3690:../../../Source/third_party/fatfs/src/ff.c **** /* Set volume label */ 3691:../../../Source/third_party/fatfs/src/ff.c **** dj.sclust = 0; /* Open root dir */ 3692:../../../Source/third_party/fatfs/src/ff.c **** res = dir_sdi(&dj, 0); 3693:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3694:../../../Source/third_party/fatfs/src/ff.c **** res = dir_read(&dj, 1); /* Get an entry with AM_VOL */ 3695:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { /* A volume label is found */ 3696:../../../Source/third_party/fatfs/src/ff.c **** if (vn[0]) { 3697:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dj.dir, vn, 11); /* Change the volume label name */ 3698:../../../Source/third_party/fatfs/src/ff.c **** tm = get_fattime(); 3699:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dj.dir+DIR_WrtTime, tm); 3700:../../../Source/third_party/fatfs/src/ff.c **** } else { 3701:../../../Source/third_party/fatfs/src/ff.c **** dj.dir[0] = DDE; /* Remove the volume label */ 3702:../../../Source/third_party/fatfs/src/ff.c **** } 3703:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 3704:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(dj.fs); 3705:../../../Source/third_party/fatfs/src/ff.c **** } else { /* No volume label is found or error */ 3706:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_NO_FILE) { 3707:../../../Source/third_party/fatfs/src/ff.c **** res = FR_OK; 3708:../../../Source/third_party/fatfs/src/ff.c **** if (vn[0]) { /* Create volume label as new */ 3709:../../../Source/third_party/fatfs/src/ff.c **** res = dir_alloc(&dj, 1); /* Allocate an entry for volume label */ 3710:../../../Source/third_party/fatfs/src/ff.c **** if (res == FR_OK) { 3711:../../../Source/third_party/fatfs/src/ff.c **** mem_set(dj.dir, 0, SZ_DIR); /* Set volume label */ 3712:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(dj.dir, vn, 11); 3713:../../../Source/third_party/fatfs/src/ff.c **** dj.dir[DIR_Attr] = AM_VOL; 3714:../../../Source/third_party/fatfs/src/ff.c **** tm = get_fattime(); 3715:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(dj.dir+DIR_WrtTime, tm); 3716:../../../Source/third_party/fatfs/src/ff.c **** dj.fs->wflag = 1; 3717:../../../Source/third_party/fatfs/src/ff.c **** res = sync_fs(dj.fs); 3718:../../../Source/third_party/fatfs/src/ff.c **** } 3719:../../../Source/third_party/fatfs/src/ff.c **** } 3720:../../../Source/third_party/fatfs/src/ff.c **** } 3721:../../../Source/third_party/fatfs/src/ff.c **** } 3722:../../../Source/third_party/fatfs/src/ff.c **** } 3723:../../../Source/third_party/fatfs/src/ff.c **** 3724:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(dj.fs, res); 3725:../../../Source/third_party/fatfs/src/ff.c **** } 3726:../../../Source/third_party/fatfs/src/ff.c **** 3727:../../../Source/third_party/fatfs/src/ff.c **** #endif /* !_FS_READONLY */ 3728:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _USE_LABEL */ 3729:../../../Source/third_party/fatfs/src/ff.c **** 3730:../../../Source/third_party/fatfs/src/ff.c **** 3731:../../../Source/third_party/fatfs/src/ff.c **** 3732:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3733:../../../Source/third_party/fatfs/src/ff.c **** /* Forward data to the stream directly (available on only tiny cfg) */ 3734:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3735:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_FORWARD && _FS_TINY 3736:../../../Source/third_party/fatfs/src/ff.c **** 3737:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_forward ( 3738:../../../Source/third_party/fatfs/src/ff.c **** FIL *fp, /* Pointer to the file object */ 3739:../../../Source/third_party/fatfs/src/ff.c **** UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ 3740:../../../Source/third_party/fatfs/src/ff.c **** UINT btf, /* Number of bytes to forward */ 3741:../../../Source/third_party/fatfs/src/ff.c **** UINT *bf /* Pointer to number of bytes forwarded */ 3742:../../../Source/third_party/fatfs/src/ff.c **** ) 3743:../../../Source/third_party/fatfs/src/ff.c **** { 3744:../../../Source/third_party/fatfs/src/ff.c **** FRESULT res; 3745:../../../Source/third_party/fatfs/src/ff.c **** DWORD remain, clst, sect; 3746:../../../Source/third_party/fatfs/src/ff.c **** UINT rcnt; 3747:../../../Source/third_party/fatfs/src/ff.c **** BYTE csect; 3748:../../../Source/third_party/fatfs/src/ff.c **** 3749:../../../Source/third_party/fatfs/src/ff.c **** 3750:../../../Source/third_party/fatfs/src/ff.c **** *bf = 0; /* Clear transfer byte counter */ 3751:../../../Source/third_party/fatfs/src/ff.c **** 3752:../../../Source/third_party/fatfs/src/ff.c **** res = validate(fp); /* Check validity of the object */ 3753:../../../Source/third_party/fatfs/src/ff.c **** if (res != FR_OK) LEAVE_FF(fp->fs, res); 3754:../../../Source/third_party/fatfs/src/ff.c **** if (fp->flag & FA__ERROR) /* Check error flag */ 3755:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_INT_ERR); 3756:../../../Source/third_party/fatfs/src/ff.c **** if (!(fp->flag & FA_READ)) /* Check access mode */ 3757:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_DENIED); 3758:../../../Source/third_party/fatfs/src/ff.c **** 3759:../../../Source/third_party/fatfs/src/ff.c **** remain = fp->fsize - fp->fptr; 3760:../../../Source/third_party/fatfs/src/ff.c **** if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ 3761:../../../Source/third_party/fatfs/src/ff.c **** 3762:../../../Source/third_party/fatfs/src/ff.c **** for ( ; btf && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ 3763:../../../Source/third_party/fatfs/src/ff.c **** fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { 3764:../../../Source/third_party/fatfs/src/ff.c **** csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ 3765:../../../Source/third_party/fatfs/src/ff.c **** if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ 3766:../../../Source/third_party/fatfs/src/ff.c **** if (!csect) { /* On the cluster boundary? */ 3767:../../../Source/third_party/fatfs/src/ff.c **** clst = (fp->fptr == 0) ? /* On the top of the file? */ 3768:../../../Source/third_party/fatfs/src/ff.c **** fp->sclust : get_fat(fp->fs, fp->clust); 3769:../../../Source/third_party/fatfs/src/ff.c **** if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); 3770:../../../Source/third_party/fatfs/src/ff.c **** if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); 3771:../../../Source/third_party/fatfs/src/ff.c **** fp->clust = clst; /* Update current cluster */ 3772:../../../Source/third_party/fatfs/src/ff.c **** } 3773:../../../Source/third_party/fatfs/src/ff.c **** } 3774:../../../Source/third_party/fatfs/src/ff.c **** sect = clust2sect(fp->fs, fp->clust); /* Get current data sector */ 3775:../../../Source/third_party/fatfs/src/ff.c **** if (!sect) ABORT(fp->fs, FR_INT_ERR); 3776:../../../Source/third_party/fatfs/src/ff.c **** sect += csect; 3777:../../../Source/third_party/fatfs/src/ff.c **** if (move_window(fp->fs, sect)) /* Move sector window */ 3778:../../../Source/third_party/fatfs/src/ff.c **** ABORT(fp->fs, FR_DISK_ERR); 3779:../../../Source/third_party/fatfs/src/ff.c **** fp->dsect = sect; 3780:../../../Source/third_party/fatfs/src/ff.c **** rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ 3781:../../../Source/third_party/fatfs/src/ff.c **** if (rcnt > btf) rcnt = btf; 3782:../../../Source/third_party/fatfs/src/ff.c **** rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); 3783:../../../Source/third_party/fatfs/src/ff.c **** if (!rcnt) ABORT(fp->fs, FR_INT_ERR); 3784:../../../Source/third_party/fatfs/src/ff.c **** } 3785:../../../Source/third_party/fatfs/src/ff.c **** 3786:../../../Source/third_party/fatfs/src/ff.c **** LEAVE_FF(fp->fs, FR_OK); 3787:../../../Source/third_party/fatfs/src/ff.c **** } 3788:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _USE_FORWARD */ 3789:../../../Source/third_party/fatfs/src/ff.c **** 3790:../../../Source/third_party/fatfs/src/ff.c **** 3791:../../../Source/third_party/fatfs/src/ff.c **** 3792:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_MKFS && !_FS_READONLY 3793:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3794:../../../Source/third_party/fatfs/src/ff.c **** /* Create File System on the Drive */ 3795:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 3796:../../../Source/third_party/fatfs/src/ff.c **** #define N_ROOTDIR 512 /* Number of root dir entries for FAT12/16 */ 3797:../../../Source/third_party/fatfs/src/ff.c **** #define N_FATS 1 /* Number of FAT copies (1 or 2) */ 3798:../../../Source/third_party/fatfs/src/ff.c **** 3799:../../../Source/third_party/fatfs/src/ff.c **** 3800:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_mkfs ( 3801:../../../Source/third_party/fatfs/src/ff.c **** BYTE vol, /* Logical drive number */ 3802:../../../Source/third_party/fatfs/src/ff.c **** BYTE sfd, /* Partitioning rule 0:FDISK, 1:SFD */ 3803:../../../Source/third_party/fatfs/src/ff.c **** UINT au /* Allocation unit size [bytes] */ 3804:../../../Source/third_party/fatfs/src/ff.c **** ) 3805:../../../Source/third_party/fatfs/src/ff.c **** { 3806:../../../Source/third_party/fatfs/src/ff.c **** static const WORD vst[] = { 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 0}; 3807:../../../Source/third_party/fatfs/src/ff.c **** static const WORD cst[] = {32768, 16384, 8192, 4096, 2048, 16384, 8192, 4096, 2048, 1024, 512}; 3808:../../../Source/third_party/fatfs/src/ff.c **** BYTE fmt, md, sys, *tbl, pdrv, part; 3809:../../../Source/third_party/fatfs/src/ff.c **** DWORD n_clst, vs, n, wsect; 3810:../../../Source/third_party/fatfs/src/ff.c **** UINT i; 3811:../../../Source/third_party/fatfs/src/ff.c **** DWORD b_vol, b_fat, b_dir, b_data; /* LBA */ 3812:../../../Source/third_party/fatfs/src/ff.c **** DWORD n_vol, n_rsv, n_fat, n_dir; /* Size */ 3813:../../../Source/third_party/fatfs/src/ff.c **** FATFS *fs; 3814:../../../Source/third_party/fatfs/src/ff.c **** DSTATUS stat; 3815:../../../Source/third_party/fatfs/src/ff.c **** 3816:../../../Source/third_party/fatfs/src/ff.c **** 3817:../../../Source/third_party/fatfs/src/ff.c **** /* Check mounted drive and clear work area */ 3818:../../../Source/third_party/fatfs/src/ff.c **** if (vol >= _VOLUMES) return FR_INVALID_DRIVE; 3819:../../../Source/third_party/fatfs/src/ff.c **** if (sfd > 1) return FR_INVALID_PARAMETER; 3820:../../../Source/third_party/fatfs/src/ff.c **** if (au & (au - 1)) return FR_INVALID_PARAMETER; 3821:../../../Source/third_party/fatfs/src/ff.c **** fs = FatFs[vol]; 3822:../../../Source/third_party/fatfs/src/ff.c **** if (!fs) return FR_NOT_ENABLED; 3823:../../../Source/third_party/fatfs/src/ff.c **** fs->fs_type = 0; 3824:../../../Source/third_party/fatfs/src/ff.c **** pdrv = LD2PD(vol); /* Physical drive */ 3825:../../../Source/third_party/fatfs/src/ff.c **** part = LD2PT(vol); /* Partition (0:auto detect, 1-4:get from partition table)*/ 3826:../../../Source/third_party/fatfs/src/ff.c **** 3827:../../../Source/third_party/fatfs/src/ff.c **** /* Get disk statics */ 3828:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_initialize(pdrv); 3829:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_NOINIT) return FR_NOT_READY; 3830:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; 3831:../../../Source/third_party/fatfs/src/ff.c **** #if _MAX_SS != 512 /* Get disk sector size */ 3832:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS) 3833:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3834:../../../Source/third_party/fatfs/src/ff.c **** #endif 3835:../../../Source/third_party/fatfs/src/ff.c **** if (_MULTI_PARTITION && part) { 3836:../../../Source/third_party/fatfs/src/ff.c **** /* Get partition information from partition table in the MBR */ 3837:../../../Source/third_party/fatfs/src/ff.c **** if (disk_read(pdrv, fs->win, 0, 1) != RES_OK) return FR_DISK_ERR; 3838:../../../Source/third_party/fatfs/src/ff.c **** if (LD_WORD(fs->win+BS_55AA) != 0xAA55) return FR_MKFS_ABORTED; 3839:../../../Source/third_party/fatfs/src/ff.c **** tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; 3840:../../../Source/third_party/fatfs/src/ff.c **** if (!tbl[4]) return FR_MKFS_ABORTED; /* No partition? */ 3841:../../../Source/third_party/fatfs/src/ff.c **** b_vol = LD_DWORD(tbl+8); /* Volume start sector */ 3842:../../../Source/third_party/fatfs/src/ff.c **** n_vol = LD_DWORD(tbl+12); /* Volume size */ 3843:../../../Source/third_party/fatfs/src/ff.c **** } else { 3844:../../../Source/third_party/fatfs/src/ff.c **** /* Create a partition in this function */ 3845:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128) 3846:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3847:../../../Source/third_party/fatfs/src/ff.c **** b_vol = (sfd) ? 0 : 63; /* Volume start sector */ 3848:../../../Source/third_party/fatfs/src/ff.c **** n_vol -= b_vol; /* Volume size */ 3849:../../../Source/third_party/fatfs/src/ff.c **** } 3850:../../../Source/third_party/fatfs/src/ff.c **** 3851:../../../Source/third_party/fatfs/src/ff.c **** if (!au) { /* AU auto selection */ 3852:../../../Source/third_party/fatfs/src/ff.c **** vs = n_vol / (2000 / (SS(fs) / 512)); 3853:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; vs < vst[i]; i++) ; 3854:../../../Source/third_party/fatfs/src/ff.c **** au = cst[i]; 3855:../../../Source/third_party/fatfs/src/ff.c **** } 3856:../../../Source/third_party/fatfs/src/ff.c **** au /= SS(fs); /* Number of sectors per cluster */ 3857:../../../Source/third_party/fatfs/src/ff.c **** if (au == 0) au = 1; 3858:../../../Source/third_party/fatfs/src/ff.c **** if (au > 128) au = 128; 3859:../../../Source/third_party/fatfs/src/ff.c **** 3860:../../../Source/third_party/fatfs/src/ff.c **** /* Pre-compute number of clusters and FAT sub-type */ 3861:../../../Source/third_party/fatfs/src/ff.c **** n_clst = n_vol / au; 3862:../../../Source/third_party/fatfs/src/ff.c **** fmt = FS_FAT12; 3863:../../../Source/third_party/fatfs/src/ff.c **** if (n_clst >= MIN_FAT16) fmt = FS_FAT16; 3864:../../../Source/third_party/fatfs/src/ff.c **** if (n_clst >= MIN_FAT32) fmt = FS_FAT32; 3865:../../../Source/third_party/fatfs/src/ff.c **** 3866:../../../Source/third_party/fatfs/src/ff.c **** /* Determine offset and size of FAT structure */ 3867:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 3868:../../../Source/third_party/fatfs/src/ff.c **** n_fat = ((n_clst * 4) + 8 + SS(fs) - 1) / SS(fs); 3869:../../../Source/third_party/fatfs/src/ff.c **** n_rsv = 32; 3870:../../../Source/third_party/fatfs/src/ff.c **** n_dir = 0; 3871:../../../Source/third_party/fatfs/src/ff.c **** } else { 3872:../../../Source/third_party/fatfs/src/ff.c **** n_fat = (fmt == FS_FAT12) ? (n_clst * 3 + 1) / 2 + 3 : (n_clst * 2) + 4; 3873:../../../Source/third_party/fatfs/src/ff.c **** n_fat = (n_fat + SS(fs) - 1) / SS(fs); 3874:../../../Source/third_party/fatfs/src/ff.c **** n_rsv = 1; 3875:../../../Source/third_party/fatfs/src/ff.c **** n_dir = (DWORD)N_ROOTDIR * SZ_DIR / SS(fs); 3876:../../../Source/third_party/fatfs/src/ff.c **** } 3877:../../../Source/third_party/fatfs/src/ff.c **** b_fat = b_vol + n_rsv; /* FAT area start sector */ 3878:../../../Source/third_party/fatfs/src/ff.c **** b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */ 3879:../../../Source/third_party/fatfs/src/ff.c **** b_data = b_dir + n_dir; /* Data area start sector */ 3880:../../../Source/third_party/fatfs/src/ff.c **** if (n_vol < b_data + au - b_vol) return FR_MKFS_ABORTED; /* Too small volume */ 3881:../../../Source/third_party/fatfs/src/ff.c **** 3882:../../../Source/third_party/fatfs/src/ff.c **** /* Align data start sector to erase block boundary (for flash memory media) */ 3883:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &n) != RES_OK || !n || n > 32768) n = 1; 3884:../../../Source/third_party/fatfs/src/ff.c **** n = (b_data + n - 1) & ~(n - 1); /* Next nearest erase block from current data start */ 3885:../../../Source/third_party/fatfs/src/ff.c **** n = (n - b_data) / N_FATS; 3886:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { /* FAT32: Move FAT offset */ 3887:../../../Source/third_party/fatfs/src/ff.c **** n_rsv += n; 3888:../../../Source/third_party/fatfs/src/ff.c **** b_fat += n; 3889:../../../Source/third_party/fatfs/src/ff.c **** } else { /* FAT12/16: Expand FAT size */ 3890:../../../Source/third_party/fatfs/src/ff.c **** n_fat += n; 3891:../../../Source/third_party/fatfs/src/ff.c **** } 3892:../../../Source/third_party/fatfs/src/ff.c **** 3893:../../../Source/third_party/fatfs/src/ff.c **** /* Determine number of clusters and final check of validity of the FAT sub-type */ 3894:../../../Source/third_party/fatfs/src/ff.c **** n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; 3895:../../../Source/third_party/fatfs/src/ff.c **** if ( (fmt == FS_FAT16 && n_clst < MIN_FAT16) 3896:../../../Source/third_party/fatfs/src/ff.c **** || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) 3897:../../../Source/third_party/fatfs/src/ff.c **** return FR_MKFS_ABORTED; 3898:../../../Source/third_party/fatfs/src/ff.c **** 3899:../../../Source/third_party/fatfs/src/ff.c **** switch (fmt) { /* Determine system ID for partition table */ 3900:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT12: sys = 0x01; break; 3901:../../../Source/third_party/fatfs/src/ff.c **** case FS_FAT16: sys = (n_vol < 0x10000) ? 0x04 : 0x06; break; 3902:../../../Source/third_party/fatfs/src/ff.c **** default: sys = 0x0C; 3903:../../../Source/third_party/fatfs/src/ff.c **** } 3904:../../../Source/third_party/fatfs/src/ff.c **** 3905:../../../Source/third_party/fatfs/src/ff.c **** if (_MULTI_PARTITION && part) { 3906:../../../Source/third_party/fatfs/src/ff.c **** /* Update system ID in the partition table */ 3907:../../../Source/third_party/fatfs/src/ff.c **** tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; 3908:../../../Source/third_party/fatfs/src/ff.c **** tbl[4] = sys; 3909:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, fs->win, 0, 1) != RES_OK) return FR_DISK_ERR; 3910:../../../Source/third_party/fatfs/src/ff.c **** md = 0xF8; 3911:../../../Source/third_party/fatfs/src/ff.c **** } else { 3912:../../../Source/third_party/fatfs/src/ff.c **** if (sfd) { /* No partition table (SFD) */ 3913:../../../Source/third_party/fatfs/src/ff.c **** md = 0xF0; 3914:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Create partition table (FDISK) */ 3915:../../../Source/third_party/fatfs/src/ff.c **** mem_set(fs->win, 0, SS(fs)); 3916:../../../Source/third_party/fatfs/src/ff.c **** tbl = fs->win+MBR_Table; /* Create partition table for single partition in the drive */ 3917:../../../Source/third_party/fatfs/src/ff.c **** tbl[1] = 1; /* Partition start head */ 3918:../../../Source/third_party/fatfs/src/ff.c **** tbl[2] = 1; /* Partition start sector */ 3919:../../../Source/third_party/fatfs/src/ff.c **** tbl[3] = 0; /* Partition start cylinder */ 3920:../../../Source/third_party/fatfs/src/ff.c **** tbl[4] = sys; /* System type */ 3921:../../../Source/third_party/fatfs/src/ff.c **** tbl[5] = 254; /* Partition end head */ 3922:../../../Source/third_party/fatfs/src/ff.c **** n = (b_vol + n_vol) / 63 / 255; 3923:../../../Source/third_party/fatfs/src/ff.c **** tbl[6] = (BYTE)((n >> 2) | 63); /* Partition end sector */ 3924:../../../Source/third_party/fatfs/src/ff.c **** tbl[7] = (BYTE)n; /* End cylinder */ 3925:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+8, 63); /* Partition start in LBA */ 3926:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+12, n_vol); /* Partition size in LBA */ 3927:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(fs->win+BS_55AA, 0xAA55); /* MBR signature */ 3928:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, fs->win, 0, 1) != RES_OK) /* Write it to the MBR sector */ 3929:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3930:../../../Source/third_party/fatfs/src/ff.c **** md = 0xF8; 3931:../../../Source/third_party/fatfs/src/ff.c **** } 3932:../../../Source/third_party/fatfs/src/ff.c **** } 3933:../../../Source/third_party/fatfs/src/ff.c **** 3934:../../../Source/third_party/fatfs/src/ff.c **** /* Create BPB in the VBR */ 3935:../../../Source/third_party/fatfs/src/ff.c **** tbl = fs->win; /* Clear sector */ 3936:../../../Source/third_party/fatfs/src/ff.c **** mem_set(tbl, 0, SS(fs)); 3937:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(tbl, "\xEB\xFE\x90" "MSDOS5.0", 11);/* Boot jump code, OEM name */ 3938:../../../Source/third_party/fatfs/src/ff.c **** i = SS(fs); /* Sector size */ 3939:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_BytsPerSec, i); 3940:../../../Source/third_party/fatfs/src/ff.c **** tbl[BPB_SecPerClus] = (BYTE)au; /* Sectors per cluster */ 3941:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_RsvdSecCnt, n_rsv); /* Reserved sectors */ 3942:../../../Source/third_party/fatfs/src/ff.c **** tbl[BPB_NumFATs] = N_FATS; /* Number of FATs */ 3943:../../../Source/third_party/fatfs/src/ff.c **** i = (fmt == FS_FAT32) ? 0 : N_ROOTDIR; /* Number of rootdir entries */ 3944:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_RootEntCnt, i); 3945:../../../Source/third_party/fatfs/src/ff.c **** if (n_vol < 0x10000) { /* Number of total sectors */ 3946:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_TotSec16, n_vol); 3947:../../../Source/third_party/fatfs/src/ff.c **** } else { 3948:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BPB_TotSec32, n_vol); 3949:../../../Source/third_party/fatfs/src/ff.c **** } 3950:../../../Source/third_party/fatfs/src/ff.c **** tbl[BPB_Media] = md; /* Media descriptor */ 3951:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_SecPerTrk, 63); /* Number of sectors per track */ 3952:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_NumHeads, 255); /* Number of heads */ 3953:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BPB_HiddSec, b_vol); /* Hidden sectors */ 3954:../../../Source/third_party/fatfs/src/ff.c **** n = get_fattime(); /* Use current time as VSN */ 3955:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 3956:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BS_VolID32, n); /* VSN */ 3957:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BPB_FATSz32, n_fat); /* Number of sectors per FAT */ 3958:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BPB_RootClus, 2); /* Root directory start cluster (2) */ 3959:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_FSInfo, 1); /* FSInfo record offset (VBR+1) */ 3960:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_BkBootSec, 6); /* Backup boot record offset (VBR+6) */ 3961:../../../Source/third_party/fatfs/src/ff.c **** tbl[BS_DrvNum32] = 0x80; /* Drive number */ 3962:../../../Source/third_party/fatfs/src/ff.c **** tbl[BS_BootSig32] = 0x29; /* Extended boot signature */ 3963:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(tbl+BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ 3964:../../../Source/third_party/fatfs/src/ff.c **** } else { 3965:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+BS_VolID, n); /* VSN */ 3966:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BPB_FATSz16, n_fat); /* Number of sectors per FAT */ 3967:../../../Source/third_party/fatfs/src/ff.c **** tbl[BS_DrvNum] = 0x80; /* Drive number */ 3968:../../../Source/third_party/fatfs/src/ff.c **** tbl[BS_BootSig] = 0x29; /* Extended boot signature */ 3969:../../../Source/third_party/fatfs/src/ff.c **** mem_cpy(tbl+BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ 3970:../../../Source/third_party/fatfs/src/ff.c **** } 3971:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */ 3972:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) /* Write it to the VBR sector */ 3973:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3974:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR+6) */ 3975:../../../Source/third_party/fatfs/src/ff.c **** disk_write(pdrv, tbl, b_vol + 6, 1); 3976:../../../Source/third_party/fatfs/src/ff.c **** 3977:../../../Source/third_party/fatfs/src/ff.c **** /* Initialize FAT area */ 3978:../../../Source/third_party/fatfs/src/ff.c **** wsect = b_fat; 3979:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < N_FATS; i++) { /* Initialize each FAT copy */ 3980:../../../Source/third_party/fatfs/src/ff.c **** mem_set(tbl, 0, SS(fs)); /* 1st sector of the FAT */ 3981:../../../Source/third_party/fatfs/src/ff.c **** n = md; /* Media descriptor byte */ 3982:../../../Source/third_party/fatfs/src/ff.c **** if (fmt != FS_FAT32) { 3983:../../../Source/third_party/fatfs/src/ff.c **** n |= (fmt == FS_FAT12) ? 0x00FFFF00 : 0xFFFFFF00; 3984:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT12/16) */ 3985:../../../Source/third_party/fatfs/src/ff.c **** } else { 3986:../../../Source/third_party/fatfs/src/ff.c **** n |= 0xFFFFFF00; 3987:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+0, n); /* Reserve cluster #0-1 (FAT32) */ 3988:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+4, 0xFFFFFFFF); 3989:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+8, 0x0FFFFFFF); /* Reserve cluster #2 for root dir */ 3990:../../../Source/third_party/fatfs/src/ff.c **** } 3991:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) 3992:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3993:../../../Source/third_party/fatfs/src/ff.c **** mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ 3994:../../../Source/third_party/fatfs/src/ff.c **** for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single se 3995:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) 3996:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 3997:../../../Source/third_party/fatfs/src/ff.c **** } 3998:../../../Source/third_party/fatfs/src/ff.c **** } 3999:../../../Source/third_party/fatfs/src/ff.c **** 4000:../../../Source/third_party/fatfs/src/ff.c **** /* Initialize root directory */ 4001:../../../Source/third_party/fatfs/src/ff.c **** i = (fmt == FS_FAT32) ? au : n_dir; 4002:../../../Source/third_party/fatfs/src/ff.c **** do { 4003:../../../Source/third_party/fatfs/src/ff.c **** if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) 4004:../../../Source/third_party/fatfs/src/ff.c **** return FR_DISK_ERR; 4005:../../../Source/third_party/fatfs/src/ff.c **** } while (--i); 4006:../../../Source/third_party/fatfs/src/ff.c **** 4007:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_ERASE /* Erase data area if needed */ 4008:../../../Source/third_party/fatfs/src/ff.c **** { 4009:../../../Source/third_party/fatfs/src/ff.c **** DWORD eb[2]; 4010:../../../Source/third_party/fatfs/src/ff.c **** 4011:../../../Source/third_party/fatfs/src/ff.c **** eb[0] = wsect; eb[1] = wsect + (n_clst - ((fmt == FS_FAT32) ? 1 : 0)) * au - 1; 4012:../../../Source/third_party/fatfs/src/ff.c **** disk_ioctl(pdrv, CTRL_ERASE_SECTOR, eb); 4013:../../../Source/third_party/fatfs/src/ff.c **** } 4014:../../../Source/third_party/fatfs/src/ff.c **** #endif 4015:../../../Source/third_party/fatfs/src/ff.c **** 4016:../../../Source/third_party/fatfs/src/ff.c **** /* Create FSInfo if needed */ 4017:../../../Source/third_party/fatfs/src/ff.c **** if (fmt == FS_FAT32) { 4018:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+FSI_LeadSig, 0x41615252); 4019:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+FSI_StrucSig, 0x61417272); 4020:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+FSI_Free_Count, n_clst - 1); /* Number of free clusters */ 4021:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(tbl+FSI_Nxt_Free, 2); /* Last allocated cluster# */ 4022:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(tbl+BS_55AA, 0xAA55); 4023:../../../Source/third_party/fatfs/src/ff.c **** disk_write(pdrv, tbl, b_vol + 1, 1); /* Write original (VBR+1) */ 4024:../../../Source/third_party/fatfs/src/ff.c **** disk_write(pdrv, tbl, b_vol + 7, 1); /* Write backup (VBR+7) */ 4025:../../../Source/third_party/fatfs/src/ff.c **** } 4026:../../../Source/third_party/fatfs/src/ff.c **** 4027:../../../Source/third_party/fatfs/src/ff.c **** return (disk_ioctl(pdrv, CTRL_SYNC, 0) == RES_OK) ? FR_OK : FR_DISK_ERR; 4028:../../../Source/third_party/fatfs/src/ff.c **** } 4029:../../../Source/third_party/fatfs/src/ff.c **** 4030:../../../Source/third_party/fatfs/src/ff.c **** 4031:../../../Source/third_party/fatfs/src/ff.c **** #if _MULTI_PARTITION 4032:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4033:../../../Source/third_party/fatfs/src/ff.c **** /* Divide Physical Drive */ 4034:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4035:../../../Source/third_party/fatfs/src/ff.c **** 4036:../../../Source/third_party/fatfs/src/ff.c **** FRESULT f_fdisk ( 4037:../../../Source/third_party/fatfs/src/ff.c **** BYTE pdrv, /* Physical drive number */ 4038:../../../Source/third_party/fatfs/src/ff.c **** const DWORD szt[], /* Pointer to the size table for each partitions */ 4039:../../../Source/third_party/fatfs/src/ff.c **** void* work /* Pointer to the working buffer */ 4040:../../../Source/third_party/fatfs/src/ff.c **** ) 4041:../../../Source/third_party/fatfs/src/ff.c **** { 4042:../../../Source/third_party/fatfs/src/ff.c **** UINT i, n, sz_cyl, tot_cyl, b_cyl, e_cyl, p_cyl; 4043:../../../Source/third_party/fatfs/src/ff.c **** BYTE s_hd, e_hd, *p, *buf = (BYTE*)work; 4044:../../../Source/third_party/fatfs/src/ff.c **** DSTATUS stat; 4045:../../../Source/third_party/fatfs/src/ff.c **** DWORD sz_disk, sz_part, s_part; 4046:../../../Source/third_party/fatfs/src/ff.c **** 4047:../../../Source/third_party/fatfs/src/ff.c **** 4048:../../../Source/third_party/fatfs/src/ff.c **** stat = disk_initialize(pdrv); 4049:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_NOINIT) return FR_NOT_READY; 4050:../../../Source/third_party/fatfs/src/ff.c **** if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; 4051:../../../Source/third_party/fatfs/src/ff.c **** if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) return FR_DISK_ERR; 4052:../../../Source/third_party/fatfs/src/ff.c **** 4053:../../../Source/third_party/fatfs/src/ff.c **** /* Determine CHS in the table regardless of the drive geometry */ 4054:../../../Source/third_party/fatfs/src/ff.c **** for (n = 16; n < 256 && sz_disk / n / 63 > 1024; n *= 2) ; 4055:../../../Source/third_party/fatfs/src/ff.c **** if (n == 256) n--; 4056:../../../Source/third_party/fatfs/src/ff.c **** e_hd = n - 1; 4057:../../../Source/third_party/fatfs/src/ff.c **** sz_cyl = 63 * n; 4058:../../../Source/third_party/fatfs/src/ff.c **** tot_cyl = sz_disk / sz_cyl; 4059:../../../Source/third_party/fatfs/src/ff.c **** 4060:../../../Source/third_party/fatfs/src/ff.c **** /* Create partition table */ 4061:../../../Source/third_party/fatfs/src/ff.c **** mem_set(buf, 0, _MAX_SS); 4062:../../../Source/third_party/fatfs/src/ff.c **** p = buf + MBR_Table; b_cyl = 0; 4063:../../../Source/third_party/fatfs/src/ff.c **** for (i = 0; i < 4; i++, p += SZ_PTE) { 4064:../../../Source/third_party/fatfs/src/ff.c **** p_cyl = (szt[i] <= 100) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; 4065:../../../Source/third_party/fatfs/src/ff.c **** if (!p_cyl) continue; 4066:../../../Source/third_party/fatfs/src/ff.c **** s_part = (DWORD)sz_cyl * b_cyl; 4067:../../../Source/third_party/fatfs/src/ff.c **** sz_part = (DWORD)sz_cyl * p_cyl; 4068:../../../Source/third_party/fatfs/src/ff.c **** if (i == 0) { /* Exclude first track of cylinder 0 */ 4069:../../../Source/third_party/fatfs/src/ff.c **** s_hd = 1; 4070:../../../Source/third_party/fatfs/src/ff.c **** s_part += 63; sz_part -= 63; 4071:../../../Source/third_party/fatfs/src/ff.c **** } else { 4072:../../../Source/third_party/fatfs/src/ff.c **** s_hd = 0; 4073:../../../Source/third_party/fatfs/src/ff.c **** } 4074:../../../Source/third_party/fatfs/src/ff.c **** e_cyl = b_cyl + p_cyl - 1; 4075:../../../Source/third_party/fatfs/src/ff.c **** if (e_cyl >= tot_cyl) return FR_INVALID_PARAMETER; 4076:../../../Source/third_party/fatfs/src/ff.c **** 4077:../../../Source/third_party/fatfs/src/ff.c **** /* Set partition table */ 4078:../../../Source/third_party/fatfs/src/ff.c **** p[1] = s_hd; /* Start head */ 4079:../../../Source/third_party/fatfs/src/ff.c **** p[2] = (BYTE)((b_cyl >> 2) + 1); /* Start sector */ 4080:../../../Source/third_party/fatfs/src/ff.c **** p[3] = (BYTE)b_cyl; /* Start cylinder */ 4081:../../../Source/third_party/fatfs/src/ff.c **** p[4] = 0x06; /* System type (temporary setting) */ 4082:../../../Source/third_party/fatfs/src/ff.c **** p[5] = e_hd; /* End head */ 4083:../../../Source/third_party/fatfs/src/ff.c **** p[6] = (BYTE)((e_cyl >> 2) + 63); /* End sector */ 4084:../../../Source/third_party/fatfs/src/ff.c **** p[7] = (BYTE)e_cyl; /* End cylinder */ 4085:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(p + 8, s_part); /* Start sector in LBA */ 4086:../../../Source/third_party/fatfs/src/ff.c **** ST_DWORD(p + 12, sz_part); /* Partition size */ 4087:../../../Source/third_party/fatfs/src/ff.c **** 4088:../../../Source/third_party/fatfs/src/ff.c **** /* Next partition */ 4089:../../../Source/third_party/fatfs/src/ff.c **** b_cyl += p_cyl; 4090:../../../Source/third_party/fatfs/src/ff.c **** } 4091:../../../Source/third_party/fatfs/src/ff.c **** ST_WORD(p, 0xAA55); 4092:../../../Source/third_party/fatfs/src/ff.c **** 4093:../../../Source/third_party/fatfs/src/ff.c **** /* Write it to the MBR */ 4094:../../../Source/third_party/fatfs/src/ff.c **** return (disk_write(pdrv, buf, 0, 1) || disk_ioctl(pdrv, CTRL_SYNC, 0)) ? FR_DISK_ERR : FR_OK; 4095:../../../Source/third_party/fatfs/src/ff.c **** } 4096:../../../Source/third_party/fatfs/src/ff.c **** 4097:../../../Source/third_party/fatfs/src/ff.c **** 4098:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _MULTI_PARTITION */ 4099:../../../Source/third_party/fatfs/src/ff.c **** #endif /* _USE_MKFS && !_FS_READONLY */ 4100:../../../Source/third_party/fatfs/src/ff.c **** 4101:../../../Source/third_party/fatfs/src/ff.c **** 4102:../../../Source/third_party/fatfs/src/ff.c **** 4103:../../../Source/third_party/fatfs/src/ff.c **** 4104:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_STRFUNC 4105:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4106:../../../Source/third_party/fatfs/src/ff.c **** /* Get a string from the file */ 4107:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4108:../../../Source/third_party/fatfs/src/ff.c **** 4109:../../../Source/third_party/fatfs/src/ff.c **** TCHAR* f_gets ( 4110:../../../Source/third_party/fatfs/src/ff.c **** TCHAR* buff, /* Pointer to the string buffer to read */ 4111:../../../Source/third_party/fatfs/src/ff.c **** int len, /* Size of string buffer (characters) */ 4112:../../../Source/third_party/fatfs/src/ff.c **** FIL* fp /* Pointer to the file object */ 4113:../../../Source/third_party/fatfs/src/ff.c **** ) 4114:../../../Source/third_party/fatfs/src/ff.c **** { 7607 .loc 1 4114 0 7608 .cfi_startproc 7609 @ args = 0, pretend = 0, frame = 8 7610 @ frame_needed = 0, uses_anonymous_args = 0 7611 .LVL1156: 7612 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 7613 .cfi_def_cfa_offset 24 7614 .cfi_offset 4, -24 7615 .cfi_offset 5, -20 7616 .cfi_offset 6, -16 7617 .cfi_offset 7, -12 7618 .cfi_offset 8, -8 7619 .cfi_offset 14, -4 7620 0004 82B0 sub sp, sp, #8 7621 .cfi_def_cfa_offset 32 7622 0006 8046 mov r8, r0 7623 0008 1746 mov r7, r2 7624 .LVL1157: 4115:../../../Source/third_party/fatfs/src/ff.c **** int n = 0; 4116:../../../Source/third_party/fatfs/src/ff.c **** TCHAR c, *p = buff; 7625 .loc 1 4116 0 7626 000a 0546 mov r5, r0 4115:../../../Source/third_party/fatfs/src/ff.c **** int n = 0; 7627 .loc 1 4115 0 7628 000c 0024 movs r4, #0 4117:../../../Source/third_party/fatfs/src/ff.c **** BYTE s[2]; 4118:../../../Source/third_party/fatfs/src/ff.c **** UINT rc; 4119:../../../Source/third_party/fatfs/src/ff.c **** 4120:../../../Source/third_party/fatfs/src/ff.c **** 4121:../../../Source/third_party/fatfs/src/ff.c **** while (n < len - 1) { /* Read bytes until buffer gets filled */ 7629 .loc 1 4121 0 7630 000e 4E1E subs r6, r1, #1 7631 0010 11E0 b .L731 7632 .LVL1158: 7633 .L732: 4122:../../../Source/third_party/fatfs/src/ff.c **** f_read(fp, s, 1, &rc); 7634 .loc 1 4122 0 7635 0012 3846 mov r0, r7 7636 0014 01A9 add r1, sp, #4 7637 0016 0122 movs r2, #1 7638 0018 6B46 mov r3, sp 7639 001a FFF7FEFF bl f_read 7640 .LVL1159: 4123:../../../Source/third_party/fatfs/src/ff.c **** if (rc != 1) break; /* Break on EOF or error */ 7641 .loc 1 4123 0 7642 001e 009B ldr r3, [sp] 7643 0020 012B cmp r3, #1 7644 0022 0AD1 bne .L730 4124:../../../Source/third_party/fatfs/src/ff.c **** c = s[0]; 7645 .loc 1 4124 0 7646 0024 9DF80430 ldrb r3, [sp, #4] @ zero_extendqisi2 7647 .LVL1160: 4125:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE /* Read a character in UTF-8 encoding */ 4126:../../../Source/third_party/fatfs/src/ff.c **** if (c >= 0x80) { 4127:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0xC0) continue; /* Skip stray trailer */ 4128:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0xE0) { /* Two-byte sequence */ 4129:../../../Source/third_party/fatfs/src/ff.c **** f_read(fp, s, 1, &rc); 4130:../../../Source/third_party/fatfs/src/ff.c **** if (rc != 1) break; 4131:../../../Source/third_party/fatfs/src/ff.c **** c = ((c & 0x1F) << 6) | (s[0] & 0x3F); 4132:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0x80) c = '?'; 4133:../../../Source/third_party/fatfs/src/ff.c **** } else { 4134:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0xF0) { /* Three-byte sequence */ 4135:../../../Source/third_party/fatfs/src/ff.c **** f_read(fp, s, 2, &rc); 4136:../../../Source/third_party/fatfs/src/ff.c **** if (rc != 2) break; 4137:../../../Source/third_party/fatfs/src/ff.c **** c = (c << 12) | ((s[0] & 0x3F) << 6) | (s[1] & 0x3F); 4138:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0x800) c = '?'; 4139:../../../Source/third_party/fatfs/src/ff.c **** } else { /* Reject four-byte sequence */ 4140:../../../Source/third_party/fatfs/src/ff.c **** c = '?'; 4141:../../../Source/third_party/fatfs/src/ff.c **** } 4142:../../../Source/third_party/fatfs/src/ff.c **** } 4143:../../../Source/third_party/fatfs/src/ff.c **** } 4144:../../../Source/third_party/fatfs/src/ff.c **** #endif 4145:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_STRFUNC >= 2 4146:../../../Source/third_party/fatfs/src/ff.c **** if (c == '\r') continue; /* Strip '\r' */ 7648 .loc 1 4146 0 7649 0028 0D2B cmp r3, #13 7650 002a 04D0 beq .L731 7651 .LVL1161: 4147:../../../Source/third_party/fatfs/src/ff.c **** #endif 4148:../../../Source/third_party/fatfs/src/ff.c **** *p++ = c; 7652 .loc 1 4148 0 7653 002c 05F8013B strb r3, [r5], #1 7654 .LVL1162: 4149:../../../Source/third_party/fatfs/src/ff.c **** n++; 7655 .loc 1 4149 0 7656 0030 0134 adds r4, r4, #1 7657 .LVL1163: 4150:../../../Source/third_party/fatfs/src/ff.c **** if (c == '\n') break; /* Break on EOL */ 7658 .loc 1 4150 0 7659 0032 0A2B cmp r3, #10 7660 0034 01D0 beq .L730 7661 .LVL1164: 7662 .L731: 4121:../../../Source/third_party/fatfs/src/ff.c **** f_read(fp, s, 1, &rc); 7663 .loc 1 4121 0 7664 0036 A642 cmp r6, r4 7665 0038 EBDC bgt .L732 7666 .L730: 7667 .LVL1165: 4151:../../../Source/third_party/fatfs/src/ff.c **** } 4152:../../../Source/third_party/fatfs/src/ff.c **** *p = 0; 7668 .loc 1 4152 0 7669 003a 0023 movs r3, #0 7670 003c 2B70 strb r3, [r5] 4153:../../../Source/third_party/fatfs/src/ff.c **** return n ? buff : 0; /* When no data read (eof or error), return with error. */ 7671 .loc 1 4153 0 7672 003e 9C42 cmp r4, r3 4154:../../../Source/third_party/fatfs/src/ff.c **** } 7673 .loc 1 4154 0 7674 0040 14BF ite ne 7675 0042 4046 movne r0, r8 7676 0044 1846 moveq r0, r3 7677 0046 02B0 add sp, sp, #8 7678 .cfi_def_cfa_offset 24 7679 @ sp needed 7680 0048 BDE8F081 pop {r4, r5, r6, r7, r8, pc} 7681 .cfi_endproc 7682 .LFE49: 7684 .section .text.f_putc,"ax",%progbits 7685 .align 2 7686 .global f_putc 7687 .thumb 7688 .thumb_func 7690 f_putc: 7691 .LFB50: 4155:../../../Source/third_party/fatfs/src/ff.c **** 4156:../../../Source/third_party/fatfs/src/ff.c **** 4157:../../../Source/third_party/fatfs/src/ff.c **** 4158:../../../Source/third_party/fatfs/src/ff.c **** #if !_FS_READONLY 4159:../../../Source/third_party/fatfs/src/ff.c **** #include 4160:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4161:../../../Source/third_party/fatfs/src/ff.c **** /* Put a character to the file */ 4162:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4163:../../../Source/third_party/fatfs/src/ff.c **** 4164:../../../Source/third_party/fatfs/src/ff.c **** int f_putc ( 4165:../../../Source/third_party/fatfs/src/ff.c **** TCHAR c, /* A character to be output */ 4166:../../../Source/third_party/fatfs/src/ff.c **** FIL* fp /* Pointer to the file object */ 4167:../../../Source/third_party/fatfs/src/ff.c **** ) 4168:../../../Source/third_party/fatfs/src/ff.c **** { 7692 .loc 1 4168 0 7693 .cfi_startproc 7694 @ args = 0, pretend = 0, frame = 8 7695 @ frame_needed = 0, uses_anonymous_args = 0 7696 .LVL1166: 7697 0000 30B5 push {r4, r5, lr} 7698 .cfi_def_cfa_offset 12 7699 .cfi_offset 4, -12 7700 .cfi_offset 5, -8 7701 .cfi_offset 14, -4 7702 0002 83B0 sub sp, sp, #12 7703 .cfi_def_cfa_offset 24 7704 0004 0446 mov r4, r0 7705 0006 0D46 mov r5, r1 4169:../../../Source/third_party/fatfs/src/ff.c **** UINT bw, btw; 4170:../../../Source/third_party/fatfs/src/ff.c **** BYTE s[3]; 4171:../../../Source/third_party/fatfs/src/ff.c **** 4172:../../../Source/third_party/fatfs/src/ff.c **** 4173:../../../Source/third_party/fatfs/src/ff.c **** #if _USE_STRFUNC >= 2 4174:../../../Source/third_party/fatfs/src/ff.c **** if (c == '\n') f_putc ('\r', fp); /* LF -> CRLF conversion */ 7706 .loc 1 4174 0 7707 0008 0A28 cmp r0, #10 7708 000a 02D1 bne .L738 7709 .loc 1 4174 0 is_stmt 0 discriminator 1 7710 000c 0D20 movs r0, #13 7711 .LVL1167: 7712 000e FFF7FEFF bl f_putc 7713 .LVL1168: 7714 .L738: 4175:../../../Source/third_party/fatfs/src/ff.c **** #endif 4176:../../../Source/third_party/fatfs/src/ff.c **** 4177:../../../Source/third_party/fatfs/src/ff.c **** #if _LFN_UNICODE /* Write the character in UTF-8 encoding */ 4178:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0x80) { /* 7-bit */ 4179:../../../Source/third_party/fatfs/src/ff.c **** s[0] = (BYTE)c; 4180:../../../Source/third_party/fatfs/src/ff.c **** btw = 1; 4181:../../../Source/third_party/fatfs/src/ff.c **** } else { 4182:../../../Source/third_party/fatfs/src/ff.c **** if (c < 0x800) { /* 11-bit */ 4183:../../../Source/third_party/fatfs/src/ff.c **** s[0] = (BYTE)(0xC0 | (c >> 6)); 4184:../../../Source/third_party/fatfs/src/ff.c **** s[1] = (BYTE)(0x80 | (c & 0x3F)); 4185:../../../Source/third_party/fatfs/src/ff.c **** btw = 2; 4186:../../../Source/third_party/fatfs/src/ff.c **** } else { /* 16-bit */ 4187:../../../Source/third_party/fatfs/src/ff.c **** s[0] = (BYTE)(0xE0 | (c >> 12)); 4188:../../../Source/third_party/fatfs/src/ff.c **** s[1] = (BYTE)(0x80 | ((c >> 6) & 0x3F)); 4189:../../../Source/third_party/fatfs/src/ff.c **** s[2] = (BYTE)(0x80 | (c & 0x3F)); 4190:../../../Source/third_party/fatfs/src/ff.c **** btw = 3; 4191:../../../Source/third_party/fatfs/src/ff.c **** } 4192:../../../Source/third_party/fatfs/src/ff.c **** } 4193:../../../Source/third_party/fatfs/src/ff.c **** #else /* Write the character without conversion */ 4194:../../../Source/third_party/fatfs/src/ff.c **** s[0] = (BYTE)c; 7715 .loc 1 4194 0 is_stmt 1 7716 0012 02A9 add r1, sp, #8 7717 0014 01F8084D strb r4, [r1, #-8]! 7718 .LVL1169: 4195:../../../Source/third_party/fatfs/src/ff.c **** btw = 1; 4196:../../../Source/third_party/fatfs/src/ff.c **** #endif 4197:../../../Source/third_party/fatfs/src/ff.c **** f_write(fp, s, btw, &bw); /* Write the char to the file */ 7719 .loc 1 4197 0 7720 0018 2846 mov r0, r5 7721 001a 0122 movs r2, #1 7722 001c 01AB add r3, sp, #4 7723 001e FFF7FEFF bl f_write 7724 .LVL1170: 4198:../../../Source/third_party/fatfs/src/ff.c **** return (bw == btw) ? 1 : EOF; /* Return the result */ 7725 .loc 1 4198 0 7726 0022 019B ldr r3, [sp, #4] 7727 0024 012B cmp r3, #1 4199:../../../Source/third_party/fatfs/src/ff.c **** } 7728 .loc 1 4199 0 7729 0026 0CBF ite eq 7730 0028 0120 moveq r0, #1 7731 002a 4FF0FF30 movne r0, #-1 7732 002e 03B0 add sp, sp, #12 7733 .cfi_def_cfa_offset 12 7734 @ sp needed 7735 0030 30BD pop {r4, r5, pc} 7736 .cfi_endproc 7737 .LFE50: 7739 0032 00BF .section .text.f_puts,"ax",%progbits 7740 .align 2 7741 .global f_puts 7742 .thumb 7743 .thumb_func 7745 f_puts: 7746 .LFB51: 4200:../../../Source/third_party/fatfs/src/ff.c **** 4201:../../../Source/third_party/fatfs/src/ff.c **** 4202:../../../Source/third_party/fatfs/src/ff.c **** 4203:../../../Source/third_party/fatfs/src/ff.c **** 4204:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4205:../../../Source/third_party/fatfs/src/ff.c **** /* Put a string to the file */ 4206:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4207:../../../Source/third_party/fatfs/src/ff.c **** 4208:../../../Source/third_party/fatfs/src/ff.c **** int f_puts ( 4209:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR* str, /* Pointer to the string to be output */ 4210:../../../Source/third_party/fatfs/src/ff.c **** FIL* fp /* Pointer to the file object */ 4211:../../../Source/third_party/fatfs/src/ff.c **** ) 4212:../../../Source/third_party/fatfs/src/ff.c **** { 7747 .loc 1 4212 0 7748 .cfi_startproc 7749 @ args = 0, pretend = 0, frame = 0 7750 @ frame_needed = 0, uses_anonymous_args = 0 7751 .LVL1171: 7752 0000 70B5 push {r4, r5, r6, lr} 7753 .cfi_def_cfa_offset 16 7754 .cfi_offset 4, -16 7755 .cfi_offset 5, -12 7756 .cfi_offset 6, -8 7757 .cfi_offset 14, -4 7758 0002 0546 mov r5, r0 7759 .LVL1172: 4213:../../../Source/third_party/fatfs/src/ff.c **** int n; 4214:../../../Source/third_party/fatfs/src/ff.c **** 4215:../../../Source/third_party/fatfs/src/ff.c **** 4216:../../../Source/third_party/fatfs/src/ff.c **** for (n = 0; *str; str++, n++) { 7760 .loc 1 4216 0 7761 0004 0078 ldrb r0, [r0] @ zero_extendqisi2 7762 .LVL1173: 7763 0006 68B1 cbz r0, .L746 7764 0008 0E46 mov r6, r1 7765 000a 6C1C adds r4, r5, #1 7766 .LVL1174: 7767 .L745: 4217:../../../Source/third_party/fatfs/src/ff.c **** if (f_putc(*str, fp) == EOF) return EOF; 7768 .loc 1 4217 0 7769 000c 3146 mov r1, r6 7770 000e FFF7FEFF bl f_putc 7771 .LVL1175: 7772 0012 B0F1FF3F cmp r0, #-1 7773 0016 07D0 beq .L744 7774 .LVL1176: 7775 0018 631B subs r3, r4, r5 7776 .LVL1177: 4216:../../../Source/third_party/fatfs/src/ff.c **** if (f_putc(*str, fp) == EOF) return EOF; 7777 .loc 1 4216 0 discriminator 2 7778 001a 14F8010B ldrb r0, [r4], #1 @ zero_extendqisi2 7779 .LVL1178: 7780 001e 0028 cmp r0, #0 7781 0020 F4D1 bne .L745 7782 0022 00E0 b .L743 7783 .LVL1179: 7784 .L746: 4216:../../../Source/third_party/fatfs/src/ff.c **** if (f_putc(*str, fp) == EOF) return EOF; 7785 .loc 1 4216 0 is_stmt 0 7786 0024 0023 movs r3, #0 7787 .LVL1180: 7788 .L743: 4218:../../../Source/third_party/fatfs/src/ff.c **** } 4219:../../../Source/third_party/fatfs/src/ff.c **** return n; 7789 .loc 1 4219 0 is_stmt 1 7790 0026 1846 mov r0, r3 7791 .L744: 4220:../../../Source/third_party/fatfs/src/ff.c **** } 7792 .loc 1 4220 0 7793 0028 70BD pop {r4, r5, r6, pc} 7794 .cfi_endproc 7795 .LFE51: 7797 002a 00BF .section .text.f_printf,"ax",%progbits 7798 .align 2 7799 .global f_printf 7800 .thumb 7801 .thumb_func 7803 f_printf: 7804 .LFB52: 4221:../../../Source/third_party/fatfs/src/ff.c **** 4222:../../../Source/third_party/fatfs/src/ff.c **** 4223:../../../Source/third_party/fatfs/src/ff.c **** 4224:../../../Source/third_party/fatfs/src/ff.c **** 4225:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4226:../../../Source/third_party/fatfs/src/ff.c **** /* Put a formatted string to the file */ 4227:../../../Source/third_party/fatfs/src/ff.c **** /*-----------------------------------------------------------------------*/ 4228:../../../Source/third_party/fatfs/src/ff.c **** 4229:../../../Source/third_party/fatfs/src/ff.c **** int f_printf ( 4230:../../../Source/third_party/fatfs/src/ff.c **** FIL* fp, /* Pointer to the file object */ 4231:../../../Source/third_party/fatfs/src/ff.c **** const TCHAR* str, /* Pointer to the format string */ 4232:../../../Source/third_party/fatfs/src/ff.c **** ... /* Optional arguments... */ 4233:../../../Source/third_party/fatfs/src/ff.c **** ) 4234:../../../Source/third_party/fatfs/src/ff.c **** { 7805 .loc 1 4234 0 7806 .cfi_startproc 7807 @ args = 4, pretend = 12, frame = 32 7808 @ frame_needed = 0, uses_anonymous_args = 1 7809 .LVL1181: 7810 0000 0EB4 push {r1, r2, r3} 7811 .cfi_def_cfa_offset 12 7812 .cfi_offset 1, -12 7813 .cfi_offset 2, -8 7814 .cfi_offset 3, -4 7815 0002 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 7816 .cfi_def_cfa_offset 48 7817 .cfi_offset 4, -48 7818 .cfi_offset 5, -44 7819 .cfi_offset 6, -40 7820 .cfi_offset 7, -36 7821 .cfi_offset 8, -32 7822 .cfi_offset 9, -28 7823 .cfi_offset 10, -24 7824 .cfi_offset 11, -20 7825 .cfi_offset 14, -16 7826 0006 88B0 sub sp, sp, #32 7827 .cfi_def_cfa_offset 80 7828 0008 0190 str r0, [sp, #4] 7829 000a 11AB add r3, sp, #68 7830 000c 53F8047B ldr r7, [r3], #4 4235:../../../Source/third_party/fatfs/src/ff.c **** va_list arp; 4236:../../../Source/third_party/fatfs/src/ff.c **** BYTE f, r; 4237:../../../Source/third_party/fatfs/src/ff.c **** UINT i, j, w; 4238:../../../Source/third_party/fatfs/src/ff.c **** ULONG v; 4239:../../../Source/third_party/fatfs/src/ff.c **** TCHAR c, d, s[16], *p; 4240:../../../Source/third_party/fatfs/src/ff.c **** int res, chc, cc; 4241:../../../Source/third_party/fatfs/src/ff.c **** 4242:../../../Source/third_party/fatfs/src/ff.c **** 4243:../../../Source/third_party/fatfs/src/ff.c **** va_start(arp, str); 7831 .loc 1 4243 0 7832 0010 0793 str r3, [sp, #28] 7833 .LVL1182: 4244:../../../Source/third_party/fatfs/src/ff.c **** 4245:../../../Source/third_party/fatfs/src/ff.c **** for (cc = res = 0; cc != EOF; res += cc) { 4246:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 7834 .loc 1 4246 0 7835 0012 7C1C adds r4, r7, #1 7836 .LVL1183: 7837 0014 3878 ldrb r0, [r7] @ zero_extendqisi2 7838 .LVL1184: 4247:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) break; /* End of string */ 7839 .loc 1 4247 0 7840 0016 0028 cmp r0, #0 7841 0018 00F04581 beq .L803 7842 001c 0025 movs r5, #0 7843 001e AB46 mov fp, r5 7844 0020 04E0 b .L751 7845 .LVL1185: 7846 .L794: 4246:../../../Source/third_party/fatfs/src/ff.c **** if (c == 0) break; /* End of string */ 7847 .loc 1 4246 0 7848 0022 7C1C adds r4, r7, #1 7849 .LVL1186: 7850 0024 3878 ldrb r0, [r7] @ zero_extendqisi2 7851 .LVL1187: 7852 .loc 1 4247 0 7853 0026 0028 cmp r0, #0 7854 0028 00F06881 beq .L814 7855 .LVL1188: 7856 .L751: 4248:../../../Source/third_party/fatfs/src/ff.c **** if (c != '%') { /* Non escape character */ 7857 .loc 1 4248 0 7858 002c 2528 cmp r0, #37 7859 002e 07D0 beq .L752 4249:../../../Source/third_party/fatfs/src/ff.c **** cc = f_putc(c, fp); 7860 .loc 1 4249 0 7861 0030 0199 ldr r1, [sp, #4] 7862 0032 FFF7FEFF bl f_putc 7863 .LVL1189: 4250:../../../Source/third_party/fatfs/src/ff.c **** if (cc != EOF) cc = 1; 7864 .loc 1 4250 0 7865 0036 B0F1FF3F cmp r0, #-1 7866 003a 40F02F81 bne .L753 7867 003e 24E1 b .L799 7868 .LVL1190: 7869 .L752: 4251:../../../Source/third_party/fatfs/src/ff.c **** continue; 4252:../../../Source/third_party/fatfs/src/ff.c **** } 4253:../../../Source/third_party/fatfs/src/ff.c **** w = f = 0; 4254:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 7870 .loc 1 4254 0 7871 0040 7B78 ldrb r3, [r7, #1] @ zero_extendqisi2 7872 .LVL1191: 4255:../../../Source/third_party/fatfs/src/ff.c **** if (c == '0') { /* Flag: '0' padding */ 7873 .loc 1 4255 0 7874 0042 302B cmp r3, #48 7875 0044 04D1 bne .L755 7876 .LVL1192: 4256:../../../Source/third_party/fatfs/src/ff.c **** f = 1; c = *str++; 7877 .loc 1 4256 0 7878 0046 BB78 ldrb r3, [r7, #2] @ zero_extendqisi2 7879 .LVL1193: 7880 0048 0337 adds r7, r7, #3 7881 .LVL1194: 7882 004a 4FF0010E mov lr, #1 7883 004e 09E0 b .L756 7884 .LVL1195: 7885 .L755: 4257:../../../Source/third_party/fatfs/src/ff.c **** } else { 4258:../../../Source/third_party/fatfs/src/ff.c **** if (c == '-') { /* Flag: left justified */ 7886 .loc 1 4258 0 7887 0050 2D2B cmp r3, #45 7888 0052 03D0 beq .L757 4254:../../../Source/third_party/fatfs/src/ff.c **** if (c == '0') { /* Flag: '0' padding */ 7889 .loc 1 4254 0 7890 0054 0237 adds r7, r7, #2 7891 .LVL1196: 4253:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 7892 .loc 1 4253 0 7893 0056 4FF0000E mov lr, #0 7894 005a 03E0 b .L756 7895 .LVL1197: 7896 .L757: 4259:../../../Source/third_party/fatfs/src/ff.c **** f = 2; c = *str++; 7897 .loc 1 4259 0 7898 005c BB78 ldrb r3, [r7, #2] @ zero_extendqisi2 7899 .LVL1198: 7900 005e 0337 adds r7, r7, #3 7901 .LVL1199: 7902 0060 4FF0020E mov lr, #2 7903 .LVL1200: 7904 .L756: 4260:../../../Source/third_party/fatfs/src/ff.c **** } 4261:../../../Source/third_party/fatfs/src/ff.c **** } 4262:../../../Source/third_party/fatfs/src/ff.c **** while (IsDigit(c)) { /* Precision */ 7905 .loc 1 4262 0 7906 0064 A3F13002 sub r2, r3, #48 7907 0068 D2B2 uxtb r2, r2 7908 006a 092A cmp r2, #9 7909 006c 0DD8 bhi .L804 7910 006e 0026 movs r6, #0 7911 .LVL1201: 7912 .L759: 4263:../../../Source/third_party/fatfs/src/ff.c **** w = w * 10 + c - '0'; 7913 .loc 1 4263 0 7914 0070 06EB8606 add r6, r6, r6, lsl #2 7915 .LVL1202: 7916 0074 03EB4606 add r6, r3, r6, lsl #1 7917 0078 303E subs r6, r6, #48 7918 .LVL1203: 4264:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 7919 .loc 1 4264 0 7920 007a 17F8013B ldrb r3, [r7], #1 @ zero_extendqisi2 7921 .LVL1204: 4262:../../../Source/third_party/fatfs/src/ff.c **** w = w * 10 + c - '0'; 7922 .loc 1 4262 0 7923 007e A3F13002 sub r2, r3, #48 7924 0082 D2B2 uxtb r2, r2 7925 0084 092A cmp r2, #9 7926 0086 F3D9 bls .L759 7927 0088 00E0 b .L758 7928 .LVL1205: 7929 .L804: 7930 008a 0026 movs r6, #0 7931 .LVL1206: 7932 .L758: 4265:../../../Source/third_party/fatfs/src/ff.c **** } 4266:../../../Source/third_party/fatfs/src/ff.c **** if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ 7933 .loc 1 4266 0 7934 008c 03F0DF02 and r2, r3, #223 7935 0090 4C2A cmp r2, #76 7936 0092 03D1 bne .L760 4267:../../../Source/third_party/fatfs/src/ff.c **** f |= 4; c = *str++; 7937 .loc 1 4267 0 7938 0094 4EF0040E orr lr, lr, #4 7939 .LVL1207: 7940 0098 3B78 ldrb r3, [r7] @ zero_extendqisi2 7941 .LVL1208: 7942 009a 0137 adds r7, r7, #1 7943 .LVL1209: 7944 .L760: 4268:../../../Source/third_party/fatfs/src/ff.c **** } 4269:../../../Source/third_party/fatfs/src/ff.c **** if (!c) break; 7945 .loc 1 4269 0 7946 009c 002B cmp r3, #0 7947 009e 00F0F180 beq .L761 7948 .LVL1210: 4270:../../../Source/third_party/fatfs/src/ff.c **** d = c; 4271:../../../Source/third_party/fatfs/src/ff.c **** if (IsLower(d)) d -= 0x20; 7949 .loc 1 4271 0 7950 00a2 A3F16102 sub r2, r3, #97 7951 00a6 D2B2 uxtb r2, r2 7952 00a8 192A cmp r2, #25 7953 00aa 9ABF itte ls 7954 00ac A3F12002 subls r2, r3, #32 7955 00b0 D2B2 uxtbls r2, r2 7956 .LVL1211: 4270:../../../Source/third_party/fatfs/src/ff.c **** d = c; 7957 .loc 1 4270 0 7958 00b2 1A46 movhi r2, r3 7959 .LVL1212: 4272:../../../Source/third_party/fatfs/src/ff.c **** switch (d) { /* Type is... */ 7960 .loc 1 4272 0 7961 00b4 A2F14201 sub r1, r2, #66 7962 00b8 1629 cmp r1, #22 7963 00ba 61D8 bhi .L763 7964 00bc DFE811F0 tbh [pc, r1, lsl #1] 7965 .L765: 7966 00c0 0E01 .2byte (.L764-.L765)/2 7967 00c2 5700 .2byte (.L766-.L765)/2 7968 00c4 6600 .2byte (.L767-.L765)/2 7969 00c6 6000 .2byte (.L763-.L765)/2 7970 00c8 6000 .2byte (.L763-.L765)/2 7971 00ca 6000 .2byte (.L763-.L765)/2 7972 00cc 6000 .2byte (.L763-.L765)/2 7973 00ce 6000 .2byte (.L763-.L765)/2 7974 00d0 6000 .2byte (.L763-.L765)/2 7975 00d2 6000 .2byte (.L763-.L765)/2 7976 00d4 6000 .2byte (.L763-.L765)/2 7977 00d6 6000 .2byte (.L763-.L765)/2 7978 00d8 6000 .2byte (.L763-.L765)/2 7979 00da 1901 .2byte (.L768-.L765)/2 7980 00dc 6000 .2byte (.L763-.L765)/2 7981 00de 6000 .2byte (.L763-.L765)/2 7982 00e0 6000 .2byte (.L763-.L765)/2 7983 00e2 1700 .2byte (.L769-.L765)/2 7984 00e4 6000 .2byte (.L763-.L765)/2 7985 00e6 6600 .2byte (.L767-.L765)/2 7986 00e8 6000 .2byte (.L763-.L765)/2 7987 00ea 6000 .2byte (.L763-.L765)/2 7988 00ec E800 .2byte (.L770-.L765)/2 7989 .p2align 1 7990 .L769: 4273:../../../Source/third_party/fatfs/src/ff.c **** case 'S' : /* String */ 4274:../../../Source/third_party/fatfs/src/ff.c **** p = va_arg(arp, TCHAR*); 7991 .loc 1 4274 0 7992 00ee 079B ldr r3, [sp, #28] 7993 .LVL1213: 7994 00f0 1A1D adds r2, r3, #4 7995 .LVL1214: 7996 00f2 0792 str r2, [sp, #28] 7997 00f4 1D68 ldr r5, [r3] 7998 .LVL1215: 4275:../../../Source/third_party/fatfs/src/ff.c **** for (j = 0; p[j]; j++) ; 7999 .loc 1 4275 0 8000 00f6 2B78 ldrb r3, [r5] @ zero_extendqisi2 8001 00f8 3BB1 cbz r3, .L806 8002 00fa 2B46 mov r3, r5 8003 00fc 0024 movs r4, #0 8004 .LVL1216: 8005 .L772: 8006 .loc 1 4275 0 is_stmt 0 discriminator 3 8007 00fe 0134 adds r4, r4, #1 8008 .LVL1217: 8009 0100 13F8012F ldrb r2, [r3, #1]! @ zero_extendqisi2 8010 0104 002A cmp r2, #0 8011 0106 FAD1 bne .L772 8012 0108 00E0 b .L771 8013 .LVL1218: 8014 .L806: 8015 .loc 1 4275 0 8016 010a 0024 movs r4, #0 8017 .LVL1219: 8018 .L771: 4276:../../../Source/third_party/fatfs/src/ff.c **** chc = 0; 4277:../../../Source/third_party/fatfs/src/ff.c **** if (!(f & 2)) { 8019 .loc 1 4277 0 is_stmt 1 8020 010c 1EF0020F tst lr, #2 8021 0110 10D1 bne .L807 8022 .LVL1220: 4278:../../../Source/third_party/fatfs/src/ff.c **** while (j++ < w) chc += (cc = f_putc(' ', fp)); 8023 .loc 1 4278 0 discriminator 1 8024 0112 631C adds r3, r4, #1 8025 .LVL1221: 8026 0114 B442 cmp r4, r6 8027 0116 10D2 bcs .L808 8028 .loc 1 4278 0 is_stmt 0 8029 0118 4FF00008 mov r8, #0 8030 011c 4FF02009 mov r9, #32 8031 .LVL1222: 8032 .L774: 8033 .loc 1 4278 0 discriminator 2 8034 0120 4846 mov r0, r9 8035 0122 0199 ldr r1, [sp, #4] 8036 0124 FFF7FEFF bl f_putc 8037 .LVL1223: 8038 0128 8044 add r8, r8, r0 8039 .LVL1224: 8040 012a 0134 adds r4, r4, #1 8041 .LVL1225: 8042 012c B442 cmp r4, r6 8043 012e F7D3 bcc .L774 8044 0130 741C adds r4, r6, #1 8045 .LVL1226: 8046 0132 05E0 b .L773 8047 .LVL1227: 8048 .L807: 4276:../../../Source/third_party/fatfs/src/ff.c **** chc = 0; 8049 .loc 1 4276 0 is_stmt 1 8050 0134 4FF00008 mov r8, #0 8051 0138 02E0 b .L773 8052 .LVL1228: 8053 .L808: 8054 .loc 1 4278 0 8055 013a 1C46 mov r4, r3 8056 013c 4FF00008 mov r8, #0 8057 .LVL1229: 8058 .L773: 4279:../../../Source/third_party/fatfs/src/ff.c **** } 4280:../../../Source/third_party/fatfs/src/ff.c **** chc += (cc = f_puts(p, fp)); 8059 .loc 1 4280 0 8060 0140 2846 mov r0, r5 8061 0142 0199 ldr r1, [sp, #4] 8062 0144 FFF7FEFF bl f_puts 8063 .LVL1230: 8064 0148 08EB0005 add r5, r8, r0 8065 .LVL1231: 4281:../../../Source/third_party/fatfs/src/ff.c **** while (j++ < w) chc += (cc = f_putc(' ', fp)); 8066 .loc 1 4281 0 8067 014c B442 cmp r4, r6 8068 014e 09D2 bcs .L775 8069 0150 4FF02008 mov r8, #32 8070 .LVL1232: 8071 .L776: 8072 .loc 1 4281 0 is_stmt 0 discriminator 2 8073 0154 4046 mov r0, r8 8074 .LVL1233: 8075 0156 0199 ldr r1, [sp, #4] 8076 0158 FFF7FEFF bl f_putc 8077 .LVL1234: 8078 015c 0544 add r5, r5, r0 8079 .LVL1235: 8080 015e 0134 adds r4, r4, #1 8081 .LVL1236: 8082 0160 B442 cmp r4, r6 8083 0162 F7D3 bcc .L776 8084 .LVL1237: 8085 .L775: 4282:../../../Source/third_party/fatfs/src/ff.c **** if (cc != EOF) cc = chc; 8086 .loc 1 4282 0 is_stmt 1 8087 0164 B0F1FF3F cmp r0, #-1 8088 0168 40F08680 bne .L777 8089 016c 8DE0 b .L799 8090 .LVL1238: 8091 .L766: 4283:../../../Source/third_party/fatfs/src/ff.c **** continue; 4284:../../../Source/third_party/fatfs/src/ff.c **** case 'C' : /* Character */ 4285:../../../Source/third_party/fatfs/src/ff.c **** cc = f_putc((TCHAR)va_arg(arp, int), fp); continue; 8092 .loc 1 4285 0 8093 016e 079B ldr r3, [sp, #28] 8094 .LVL1239: 8095 0170 1A1D adds r2, r3, #4 8096 .LVL1240: 8097 0172 0792 str r2, [sp, #28] 8098 0174 1878 ldrb r0, [r3] @ zero_extendqisi2 8099 0176 0199 ldr r1, [sp, #4] 8100 .LVL1241: 8101 0178 FFF7FEFF bl f_putc 8102 .LVL1242: 8103 017c 0546 mov r5, r0 8104 .LVL1243: 8105 017e 7BE0 b .L777 8106 .LVL1244: 8107 .L763: 4286:../../../Source/third_party/fatfs/src/ff.c **** case 'B' : /* Binary */ 4287:../../../Source/third_party/fatfs/src/ff.c **** r = 2; break; 4288:../../../Source/third_party/fatfs/src/ff.c **** case 'O' : /* Octal */ 4289:../../../Source/third_party/fatfs/src/ff.c **** r = 8; break; 4290:../../../Source/third_party/fatfs/src/ff.c **** case 'D' : /* Signed decimal */ 4291:../../../Source/third_party/fatfs/src/ff.c **** case 'U' : /* Unsigned decimal */ 4292:../../../Source/third_party/fatfs/src/ff.c **** r = 10; break; 4293:../../../Source/third_party/fatfs/src/ff.c **** case 'X' : /* Hexdecimal */ 4294:../../../Source/third_party/fatfs/src/ff.c **** r = 16; break; 4295:../../../Source/third_party/fatfs/src/ff.c **** default: /* Unknown type (pass-through) */ 4296:../../../Source/third_party/fatfs/src/ff.c **** cc = f_putc(c, fp); continue; 8108 .loc 1 4296 0 8109 0180 1846 mov r0, r3 8110 0182 0199 ldr r1, [sp, #4] 8111 0184 FFF7FEFF bl f_putc 8112 .LVL1245: 8113 0188 0546 mov r5, r0 8114 .LVL1246: 8115 018a 75E0 b .L777 8116 .LVL1247: 8117 .L767: 4297:../../../Source/third_party/fatfs/src/ff.c **** } 4298:../../../Source/third_party/fatfs/src/ff.c **** 4299:../../../Source/third_party/fatfs/src/ff.c **** /* Get an argument and put it in numeral */ 4300:../../../Source/third_party/fatfs/src/ff.c **** v = (f & 4) ? (ULONG)va_arg(arp, long) : ((d == 'D') ? (ULONG)(long)va_arg(arp, int) : (ULONG)va_ 8118 .loc 1 4300 0 8119 018c 1EF0040F tst lr, #4 8120 0190 09D0 beq .L809 4292:../../../Source/third_party/fatfs/src/ff.c **** case 'X' : /* Hexdecimal */ 8121 .loc 1 4292 0 8122 0192 0A25 movs r5, #10 8123 0194 00E0 b .L798 8124 .LVL1248: 8125 .L813: 4294:../../../Source/third_party/fatfs/src/ff.c **** default: /* Unknown type (pass-through) */ 8126 .loc 1 4294 0 8127 0196 1025 movs r5, #16 8128 .LVL1249: 8129 .L798: 8130 .loc 1 4300 0 discriminator 1 8131 0198 0799 ldr r1, [sp, #28] 8132 019a 081D adds r0, r1, #4 8133 019c 0790 str r0, [sp, #28] 8134 019e 0968 ldr r1, [r1] 8135 .LVL1250: 4301:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8136 .loc 1 4301 0 discriminator 1 8137 01a0 442A cmp r2, #68 8138 01a2 12D1 bne .L780 8139 01a4 0CE0 b .L779 8140 .LVL1251: 8141 .L809: 4292:../../../Source/third_party/fatfs/src/ff.c **** case 'X' : /* Hexdecimal */ 8142 .loc 1 4292 0 8143 01a6 0A25 movs r5, #10 8144 .LVL1252: 8145 .L778: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8146 .loc 1 4300 0 discriminator 2 8147 01a8 442A cmp r2, #68 8148 01aa 04D1 bne .L781 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8149 .loc 1 4300 0 is_stmt 0 discriminator 4 8150 01ac 079A ldr r2, [sp, #28] 8151 .LVL1253: 8152 01ae 111D adds r1, r2, #4 8153 .LVL1254: 8154 01b0 0791 str r1, [sp, #28] 8155 01b2 1168 ldr r1, [r2] 8156 .LVL1255: 8157 01b4 04E0 b .L779 8158 .LVL1256: 8159 .L781: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8160 .loc 1 4300 0 discriminator 5 8161 01b6 079A ldr r2, [sp, #28] 8162 .LVL1257: 8163 01b8 111D adds r1, r2, #4 8164 .LVL1258: 8165 01ba 0791 str r1, [sp, #28] 8166 01bc 1168 ldr r1, [r2] 8167 .LVL1259: 8168 01be 04E0 b .L780 8169 .L779: 8170 .loc 1 4301 0 is_stmt 1 discriminator 1 8171 01c0 0029 cmp r1, #0 4302:../../../Source/third_party/fatfs/src/ff.c **** v = 0 - v; 8172 .loc 1 4302 0 discriminator 1 8173 01c2 BCBF itt lt 8174 01c4 4942 rsblt r1, r1, #0 8175 .LVL1260: 4303:../../../Source/third_party/fatfs/src/ff.c **** f |= 8; 8176 .loc 1 4303 0 discriminator 1 8177 01c6 4EF0080E orrlt lr, lr, #8 8178 .LVL1261: 8179 .L780: 8180 01ca 0DF10B0C add ip, sp, #11 4304:../../../Source/third_party/fatfs/src/ff.c **** } 4305:../../../Source/third_party/fatfs/src/ff.c **** i = 0; 8181 .loc 1 4305 0 8182 01ce 0024 movs r4, #0 8183 .LVL1262: 8184 .L785: 4306:../../../Source/third_party/fatfs/src/ff.c **** do { 4307:../../../Source/third_party/fatfs/src/ff.c **** d = (TCHAR)(v % r); v /= r; 8185 .loc 1 4307 0 8186 01d0 B1FBF5F0 udiv r0, r1, r5 8187 01d4 05FB1012 mls r2, r5, r0, r1 8188 01d8 D2B2 uxtb r2, r2 8189 .LVL1263: 8190 01da 0146 mov r1, r0 8191 .LVL1264: 4308:../../../Source/third_party/fatfs/src/ff.c **** if (d > 9) d += (c == 'x') ? 0x27 : 0x07; 8192 .loc 1 4308 0 8193 01dc 092A cmp r2, #9 8194 01de 07D9 bls .L782 8195 .loc 1 4308 0 is_stmt 0 discriminator 1 8196 01e0 782B cmp r3, #120 8197 01e2 0CBF ite eq 8198 01e4 4FF02708 moveq r8, #39 8199 01e8 4FF00708 movne r8, #7 8200 01ec 4244 add r2, r2, r8 8201 .LVL1265: 8202 01ee D2B2 uxtb r2, r2 8203 .LVL1266: 8204 .L782: 4309:../../../Source/third_party/fatfs/src/ff.c **** s[i++] = d + '0'; 8205 .loc 1 4309 0 is_stmt 1 8206 01f0 0134 adds r4, r4, #1 8207 .LVL1267: 8208 01f2 3032 adds r2, r2, #48 8209 .LVL1268: 8210 01f4 0CF8012F strb r2, [ip, #1]! 4310:../../../Source/third_party/fatfs/src/ff.c **** } while (v && i < sizeof s / sizeof s[0]); 8211 .loc 1 4310 0 8212 01f8 08B1 cbz r0, .L784 8213 .loc 1 4310 0 is_stmt 0 discriminator 1 8214 01fa 102C cmp r4, #16 8215 01fc E8D1 bne .L785 8216 .L784: 4311:../../../Source/third_party/fatfs/src/ff.c **** if (f & 8) s[i++] = '-'; 8217 .loc 1 4311 0 is_stmt 1 8218 01fe 1EF0080F tst lr, #8 8219 0202 05D0 beq .L786 8220 .LVL1269: 8221 .loc 1 4311 0 is_stmt 0 discriminator 1 8222 0204 08AB add r3, sp, #32 8223 .LVL1270: 8224 0206 2344 add r3, r3, r4 8225 0208 2D22 movs r2, #45 8226 020a 03F8142C strb r2, [r3, #-20] 8227 020e 0134 adds r4, r4, #1 8228 .LVL1271: 8229 .L786: 4312:../../../Source/third_party/fatfs/src/ff.c **** j = i; d = (f & 1) ? '0' : ' '; 8230 .loc 1 4312 0 is_stmt 1 8231 0210 0EF00103 and r3, lr, #1 8232 0214 002B cmp r3, #0 8233 0216 14BF ite ne 8234 0218 4FF03009 movne r9, #48 8235 021c 4FF02009 moveq r9, #32 8236 .LVL1272: 4313:../../../Source/third_party/fatfs/src/ff.c **** chc = 0; 4314:../../../Source/third_party/fatfs/src/ff.c **** while (!(f & 2) && j++ < w) chc += (cc = f_putc(d, fp)); 8237 .loc 1 4314 0 8238 0220 1EF0020F tst lr, #2 8239 0224 0BD1 bne .L812 8240 0226 04F10108 add r8, r4, #1 8241 .LVL1273: 8242 022a B442 cmp r4, r6 4313:../../../Source/third_party/fatfs/src/ff.c **** chc = 0; 8243 .loc 1 4313 0 8244 022c 28BF it cs 8245 022e 0025 movcs r5, #0 8246 .loc 1 4314 0 8247 0230 07D2 bcs .L788 8248 0232 43E0 b .L789 8249 .LVL1274: 8250 .L800: 8251 .loc 1 4314 0 is_stmt 0 discriminator 2 8252 0234 D045 cmp r8, r10 8253 0236 39D1 bne .L790 8254 0238 06F10108 add r8, r6, #1 8255 .LVL1275: 8256 023c 01E0 b .L788 8257 .LVL1276: 8258 .L812: 4312:../../../Source/third_party/fatfs/src/ff.c **** j = i; d = (f & 1) ? '0' : ' '; 8259 .loc 1 4312 0 is_stmt 1 8260 023e A046 mov r8, r4 4313:../../../Source/third_party/fatfs/src/ff.c **** chc = 0; 8261 .loc 1 4313 0 8262 0240 0025 movs r5, #0 8263 .LVL1277: 8264 .L788: 8265 0242 03AB add r3, sp, #12 8266 0244 03EB0409 add r9, r3, r4 8267 .LVL1278: 8268 .L791: 4315:../../../Source/third_party/fatfs/src/ff.c **** do chc += (cc = f_putc(s[--i], fp)); while(i); 8269 .loc 1 4315 0 discriminator 1 8270 0248 013C subs r4, r4, #1 8271 .LVL1279: 8272 024a 19F8010D ldrb r0, [r9, #-1]! @ zero_extendqisi2 8273 024e 0199 ldr r1, [sp, #4] 8274 0250 FFF7FEFF bl f_putc 8275 .LVL1280: 8276 0254 0544 add r5, r5, r0 8277 .LVL1281: 8278 0256 002C cmp r4, #0 8279 0258 F6D1 bne .L791 8280 .LVL1282: 4316:../../../Source/third_party/fatfs/src/ff.c **** while (j++ < w) chc += (cc = f_putc(' ', fp)); 8281 .loc 1 4316 0 discriminator 1 8282 025a B045 cmp r8, r6 8283 025c 09D2 bcs .L792 8284 .loc 1 4316 0 is_stmt 0 8285 025e 2024 movs r4, #32 8286 .LVL1283: 8287 .L793: 8288 .loc 1 4316 0 discriminator 2 8289 0260 2046 mov r0, r4 8290 .LVL1284: 8291 0262 0199 ldr r1, [sp, #4] 8292 0264 FFF7FEFF bl f_putc 8293 .LVL1285: 8294 0268 0544 add r5, r5, r0 8295 .LVL1286: 8296 026a 08F10108 add r8, r8, #1 8297 .LVL1287: 8298 026e B045 cmp r8, r6 8299 0270 F6D3 bcc .L793 8300 .LVL1288: 8301 .L792: 4317:../../../Source/third_party/fatfs/src/ff.c **** if (cc != EOF) cc = chc; 8302 .loc 1 4317 0 is_stmt 1 8303 0272 B0F1FF3F cmp r0, #-1 8304 0276 08D0 beq .L799 8305 .LVL1289: 8306 .L777: 4245:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 8307 .loc 1 4245 0 discriminator 2 8308 0278 AB44 add fp, fp, r5 8309 .LVL1290: 8310 027a B5F1FF3F cmp r5, #-1 8311 027e 7FF4D0AE bne .L794 8312 0282 02E0 b .L799 8313 .LVL1291: 8314 .L761: 4318:../../../Source/third_party/fatfs/src/ff.c **** } 4319:../../../Source/third_party/fatfs/src/ff.c **** 4320:../../../Source/third_party/fatfs/src/ff.c **** va_end(arp); 4321:../../../Source/third_party/fatfs/src/ff.c **** return (cc == EOF) ? cc : res; 8315 .loc 1 4321 0 8316 0284 B5F1FF3F cmp r5, #-1 8317 0288 38D1 bne .L814 8318 .LVL1292: 8319 .L799: 8320 .loc 1 4321 0 is_stmt 0 discriminator 1 8321 028a 4FF0FF3B mov fp, #-1 8322 .LVL1293: 8323 028e 35E0 b .L814 8324 .LVL1294: 8325 .L770: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8326 .loc 1 4300 0 is_stmt 1 8327 0290 1EF0040F tst lr, #4 8328 0294 7FF47FAF bne .L813 4294:../../../Source/third_party/fatfs/src/ff.c **** default: /* Unknown type (pass-through) */ 8329 .loc 1 4294 0 8330 0298 1025 movs r5, #16 8331 029a 8CE7 b .L781 8332 .LVL1295: 8333 .L753: 4245:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 8334 .loc 1 4245 0 8335 029c 0BF1010B add fp, fp, #1 8336 .LVL1296: 8337 02a0 2746 mov r7, r4 4250:../../../Source/third_party/fatfs/src/ff.c **** continue; 8338 .loc 1 4250 0 8339 02a2 0125 movs r5, #1 8340 02a4 BDE6 b .L794 8341 .LVL1297: 8342 .L803: 4245:../../../Source/third_party/fatfs/src/ff.c **** c = *str++; 8343 .loc 1 4245 0 8344 02a6 4FF0000B mov fp, #0 8345 02aa 27E0 b .L814 8346 .LVL1298: 8347 .L790: 4314:../../../Source/third_party/fatfs/src/ff.c **** do chc += (cc = f_putc(s[--i], fp)); while(i); 8348 .loc 1 4314 0 8349 02ac 4846 mov r0, r9 8350 02ae 0199 ldr r1, [sp, #4] 8351 02b0 FFF7FEFF bl f_putc 8352 .LVL1299: 8353 02b4 0544 add r5, r5, r0 8354 .LVL1300: 8355 02b6 08F10108 add r8, r8, #1 8356 .LVL1301: 8357 02ba BBE7 b .L800 8358 .LVL1302: 8359 .L789: 8360 02bc 4846 mov r0, r9 8361 .LVL1303: 8362 02be 0199 ldr r1, [sp, #4] 8363 .LVL1304: 8364 02c0 FFF7FEFF bl f_putc 8365 .LVL1305: 8366 02c4 0546 mov r5, r0 8367 .LVL1306: 8368 02c6 04F10208 add r8, r4, #2 8369 .LVL1307: 8370 02ca 06F1010A add r10, r6, #1 8371 02ce B1E7 b .L800 8372 .LVL1308: 8373 .L801: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8374 .loc 1 4300 0 8375 02d0 079A ldr r2, [sp, #28] 8376 .LVL1309: 8377 02d2 111D adds r1, r2, #4 8378 .LVL1310: 8379 02d4 0791 str r1, [sp, #28] 8380 02d6 1168 ldr r1, [r2] 8381 .LVL1311: 4287:../../../Source/third_party/fatfs/src/ff.c **** case 'O' : /* Octal */ 8382 .loc 1 4287 0 8383 02d8 0225 movs r5, #2 8384 02da 76E7 b .L780 8385 .LVL1312: 8386 .L764: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8387 .loc 1 4300 0 8388 02dc 1EF0040F tst lr, #4 8389 02e0 F6D1 bne .L801 4287:../../../Source/third_party/fatfs/src/ff.c **** case 'O' : /* Octal */ 8390 .loc 1 4287 0 8391 02e2 0225 movs r5, #2 8392 02e4 60E7 b .L778 8393 .LVL1313: 8394 .L802: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8395 .loc 1 4300 0 8396 02e6 079A ldr r2, [sp, #28] 8397 .LVL1314: 8398 02e8 111D adds r1, r2, #4 8399 .LVL1315: 8400 02ea 0791 str r1, [sp, #28] 8401 02ec 1168 ldr r1, [r2] 8402 .LVL1316: 4289:../../../Source/third_party/fatfs/src/ff.c **** case 'D' : /* Signed decimal */ 8403 .loc 1 4289 0 8404 02ee 0825 movs r5, #8 8405 02f0 6BE7 b .L780 8406 .LVL1317: 8407 .L768: 4300:../../../Source/third_party/fatfs/src/ff.c **** if (d == 'D' && (v & 0x80000000)) { 8408 .loc 1 4300 0 8409 02f2 1EF0040F tst lr, #4 8410 02f6 F6D1 bne .L802 4289:../../../Source/third_party/fatfs/src/ff.c **** case 'D' : /* Signed decimal */ 8411 .loc 1 4289 0 8412 02f8 0825 movs r5, #8 8413 02fa 5CE7 b .L781 8414 .LVL1318: 8415 .L814: 4322:../../../Source/third_party/fatfs/src/ff.c **** } 8416 .loc 1 4322 0 8417 02fc 5846 mov r0, fp 8418 02fe 08B0 add sp, sp, #32 8419 .cfi_def_cfa_offset 48 8420 @ sp needed 8421 0300 BDE8F04F pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} 8422 .cfi_restore 14 8423 .cfi_restore 11 8424 .cfi_restore 10 8425 .cfi_restore 9 8426 .cfi_restore 8 8427 .cfi_restore 7 8428 .cfi_restore 6 8429 .cfi_restore 5 8430 .cfi_restore 4 8431 .cfi_def_cfa_offset 12 8432 0304 03B0 add sp, sp, #12 8433 .cfi_restore 3 8434 .cfi_restore 2 8435 .cfi_restore 1 8436 .cfi_def_cfa_offset 0 8437 0306 7047 bx lr 8438 .cfi_endproc 8439 .LFE52: 8441 .section .bss.LfnBuf,"aw",%nobits 8442 .align 2 8443 .set .LANCHOR4,. + 0 8446 LfnBuf: 8447 0000 00000000 .space 512 8447 00000000 8447 00000000 8447 00000000 8447 00000000 8448 .section .bss.Fsid,"aw",%nobits 8449 .align 1 8450 .set .LANCHOR1,. + 0 8453 Fsid: 8454 0000 0000 .space 2 8455 .section .rodata.str1.4,"aMS",%progbits,1 8456 .align 2 8457 .LC0: 8458 0000 222A3A3C .ascii "\"*:<>?|\177\000" 8458 3E3F7C7F 8458 00 8459 0009 000000 .space 3 8460 .LC1: 8461 000c 2B2C3B3D .ascii "+,;=[]\000" 8461 5B5D00 8462 0013 00 .section .rodata.ExCvt,"a",%progbits 8463 .align 2 8464 .set .LANCHOR3,. + 0 8467 ExCvt: 8468 0000 80 .byte -128 8469 0001 9A .byte -102 8470 0002 90 .byte -112 8471 0003 41 .byte 65 8472 0004 8E .byte -114 8473 0005 41 .byte 65 8474 0006 8F .byte -113 8475 0007 80 .byte -128 8476 0008 45 .byte 69 8477 0009 45 .byte 69 8478 000a 45 .byte 69 8479 000b 49 .byte 73 8480 000c 49 .byte 73 8481 000d 49 .byte 73 8482 000e 8E .byte -114 8483 000f 8F .byte -113 8484 0010 90 .byte -112 8485 0011 92 .byte -110 8486 0012 92 .byte -110 8487 0013 4F .byte 79 8488 0014 99 .byte -103 8489 0015 4F .byte 79 8490 0016 55 .byte 85 8491 0017 55 .byte 85 8492 0018 59 .byte 89 8493 0019 99 .byte -103 8494 001a 9A .byte -102 8495 001b 9B .byte -101 8496 001c 9C .byte -100 8497 001d 9D .byte -99 8498 001e 9E .byte -98 8499 001f 9F .byte -97 8500 0020 41 .byte 65 8501 0021 49 .byte 73 8502 0022 4F .byte 79 8503 0023 55 .byte 85 8504 0024 A5 .byte -91 8505 0025 A5 .byte -91 8506 0026 A6 .byte -90 8507 0027 A7 .byte -89 8508 0028 A8 .byte -88 8509 0029 A9 .byte -87 8510 002a AA .byte -86 8511 002b AB .byte -85 8512 002c AC .byte -84 8513 002d 21 .byte 33 8514 002e AE .byte -82 8515 002f AF .byte -81 8516 0030 B0 .byte -80 8517 0031 B1 .byte -79 8518 0032 B2 .byte -78 8519 0033 B3 .byte -77 8520 0034 B4 .byte -76 8521 0035 B5 .byte -75 8522 0036 B6 .byte -74 8523 0037 B7 .byte -73 8524 0038 B8 .byte -72 8525 0039 B9 .byte -71 8526 003a BA .byte -70 8527 003b BB .byte -69 8528 003c BC .byte -68 8529 003d BD .byte -67 8530 003e BE .byte -66 8531 003f BF .byte -65 8532 0040 C0 .byte -64 8533 0041 C1 .byte -63 8534 0042 C2 .byte -62 8535 0043 C3 .byte -61 8536 0044 C4 .byte -60 8537 0045 C5 .byte -59 8538 0046 C6 .byte -58 8539 0047 C7 .byte -57 8540 0048 C8 .byte -56 8541 0049 C9 .byte -55 8542 004a CA .byte -54 8543 004b CB .byte -53 8544 004c CC .byte -52 8545 004d CD .byte -51 8546 004e CE .byte -50 8547 004f CF .byte -49 8548 0050 D0 .byte -48 8549 0051 D1 .byte -47 8550 0052 D2 .byte -46 8551 0053 D3 .byte -45 8552 0054 D4 .byte -44 8553 0055 D5 .byte -43 8554 0056 D6 .byte -42 8555 0057 D7 .byte -41 8556 0058 D8 .byte -40 8557 0059 D9 .byte -39 8558 005a DA .byte -38 8559 005b DB .byte -37 8560 005c DC .byte -36 8561 005d DD .byte -35 8562 005e DE .byte -34 8563 005f DF .byte -33 8564 0060 E0 .byte -32 8565 0061 E1 .byte -31 8566 0062 E2 .byte -30 8567 0063 E3 .byte -29 8568 0064 E4 .byte -28 8569 0065 E5 .byte -27 8570 0066 E6 .byte -26 8571 0067 E7 .byte -25 8572 0068 E8 .byte -24 8573 0069 E9 .byte -23 8574 006a EA .byte -22 8575 006b EB .byte -21 8576 006c EC .byte -20 8577 006d ED .byte -19 8578 006e EE .byte -18 8579 006f EF .byte -17 8580 0070 F0 .byte -16 8581 0071 F1 .byte -15 8582 0072 F2 .byte -14 8583 0073 F3 .byte -13 8584 0074 F4 .byte -12 8585 0075 F5 .byte -11 8586 0076 F6 .byte -10 8587 0077 F7 .byte -9 8588 0078 F8 .byte -8 8589 0079 F9 .byte -7 8590 007a FA .byte -6 8591 007b FB .byte -5 8592 007c FC .byte -4 8593 007d FD .byte -3 8594 007e FE .byte -2 8595 007f FF .byte -1 8596 .section .rodata.LfnOfs,"a",%progbits 8597 .align 2 8598 .set .LANCHOR2,. + 0 8601 LfnOfs: 8602 0000 01 .byte 1 8603 0001 03 .byte 3 8604 0002 05 .byte 5 8605 0003 07 .byte 7 8606 0004 09 .byte 9 8607 0005 0E .byte 14 8608 0006 10 .byte 16 8609 0007 12 .byte 18 8610 0008 14 .byte 20 8611 0009 16 .byte 22 8612 000a 18 .byte 24 8613 000b 1C .byte 28 8614 000c 1E .byte 30 8615 000d 000000 .section .bss.FatFs,"aw",%nobits 8616 .align 2 8617 .set .LANCHOR0,. + 0 8620 FatFs: 8621 0000 00000000 .space 4 8622 .text 8623 .Letext0: 8624 .file 2 "../../../Source/third_party/fatfs/src/integer.h" 8625 .file 3 "../../../Source/third_party/fatfs/src/ff.h" 8626 .file 4 "../../../Source/third_party/fatfs/src/diskio.h" 8627 .file 5 "c:\\program files (x86)\\gnu tools arm embedded\\4.9 2015q1\\lib\\gcc\\arm-none-eabi\\4.9 8628 .file 6 "" DEFINED SYMBOLS *ABS*:00000000 ff.c C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:19 .text.mem_cpy:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:23 .text.mem_cpy:00000000 mem_cpy C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:54 .text.ld_clust:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:58 .text.ld_clust:00000000 ld_clust C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:90 .text.sum_sfn:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:94 .text.sum_sfn:00000000 sum_sfn C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:126 .text.check_fs:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:130 .text.check_fs:00000000 check_fs C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:207 .text.check_fs:00000084 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:213 .text.sync_window:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:217 .text.sync_window:00000000 sync_window C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:332 .text.move_window:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:336 .text.move_window:00000000 move_window C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:393 .text.validate:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:397 .text.validate:00000000 validate C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:468 .text.chk_mounted:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:472 .text.chk_mounted:00000000 chk_mounted C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1021 .text.chk_mounted:0000034c $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1029 .text.chk_mounted:00000360 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1067 .text.get_fileinfo:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1071 .text.get_fileinfo:00000000 get_fileinfo C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1347 .text.sync_fs:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1351 .text.sync_fs:00000000 sync_fs C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1469 .text.clust2sect:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1474 .text.clust2sect:00000000 clust2sect C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1503 .text.get_fat:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1508 .text.get_fat:00000000 get_fat C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1683 .text.dir_sdi:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1687 .text.dir_sdi:00000000 dir_sdi C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1837 .text.put_fat:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:1842 .text.put_fat:00000000 put_fat C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2067 .text.create_chain:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2071 .text.create_chain:00000000 create_chain C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2250 .text.dir_next:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2254 .text.dir_next:00000000 dir_next C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2506 .text.dir_find:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2510 .text.dir_find:00000000 dir_find C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2806 .text.dir_find:00000168 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2811 .text.follow_path:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:2815 .text.follow_path:00000000 follow_path C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3409 .text.follow_path:000002f8 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3416 .text.dir_read:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3420 .text.dir_read:00000000 dir_read C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3681 .text.dir_read:00000128 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3686 .text.dir_remove:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3690 .text.dir_remove:00000000 dir_remove C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3771 .text.remove_chain:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3775 .text.remove_chain:00000000 remove_chain C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3878 .text.gen_numname:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:3883 .text.gen_numname:00000000 gen_numname C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4024 .text.dir_register:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4028 .text.dir_register:00000000 dir_register C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4453 .text.dir_register:00000204 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4459 .text.f_mount:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4464 .text.f_mount:00000000 f_mount C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4508 .text.f_mount:00000020 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4513 .text.f_open:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4518 .text.f_open:00000000 f_open C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4825 .text.f_open:00000180 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4830 .text.f_read:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:4835 .text.f_read:00000000 f_read C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5132 .text.f_write:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5137 .text.f_write:00000000 f_write C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5461 .text.f_sync:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5466 .text.f_sync:00000000 f_sync C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5602 .text.f_close:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5607 .text.f_close:00000000 f_close C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5637 .text.f_lseek:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5642 .text.f_lseek:00000000 f_lseek C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5968 .text.f_opendir:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:5973 .text.f_opendir:00000000 f_opendir C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6099 .text.f_opendir:00000080 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6104 .text.f_readdir:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6109 .text.f_readdir:00000000 f_readdir C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6208 .text.f_readdir:00000060 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6213 .text.f_stat:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6218 .text.f_stat:00000000 f_stat C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6286 .text.f_stat:00000044 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6291 .text.f_getfree:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6296 .text.f_getfree:00000000 f_getfree C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6504 .text.f_truncate:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6509 .text.f_truncate:00000000 f_truncate C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6647 .text.f_unlink:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6652 .text.f_unlink:00000000 f_unlink C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6816 .text.f_unlink:000000b8 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6821 .text.f_mkdir:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:6826 .text.f_mkdir:00000000 f_mkdir C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7170 .text.f_mkdir:000001c8 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7175 .text.f_chmod:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7180 .text.f_chmod:00000000 f_chmod C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7266 .text.f_chmod:0000005c $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7271 .text.f_utime:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7276 .text.f_utime:00000000 f_utime C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7363 .text.f_utime:0000005c $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7368 .text.f_rename:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7373 .text.f_rename:00000000 f_rename C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7595 .text.f_rename:00000120 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7600 .text.f_gets:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7605 .text.f_gets:00000000 f_gets C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7685 .text.f_putc:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7690 .text.f_putc:00000000 f_putc C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7740 .text.f_puts:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7745 .text.f_puts:00000000 f_puts C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7798 .text.f_printf:00000000 $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7803 .text.f_printf:00000000 f_printf C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7966 .text.f_printf:000000c0 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:7989 .text.f_printf:000000ee $t C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8442 .bss.LfnBuf:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8446 .bss.LfnBuf:00000000 LfnBuf C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8449 .bss.Fsid:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8453 .bss.Fsid:00000000 Fsid C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8456 .rodata.str1.4:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8463 .rodata.ExCvt:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8467 .rodata.ExCvt:00000000 ExCvt C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8597 .rodata.LfnOfs:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8601 .rodata.LfnOfs:00000000 LfnOfs C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8616 .bss.FatFs:00000000 $d C:\Users\lwngim1\AppData\Local\Temp\ccTxfLYu.s:8620 .bss.FatFs:00000000 FatFs .debug_frame:00000010 $d UNDEFINED SYMBOLS disk_read disk_write disk_status disk_initialize ff_convert disk_ioctl ff_wtoupper get_fattime