44#define DISK_MAX_SECTOR_SIZE 512
48#define BS_FILSYSTEMTYPE32 82
50#define BS_FILSYSTYPE 0x36
51#define BS_SIG55AA_VALUE 0xAA55
53#define PAR_TYPE_OFFSET 4
54#define PAR_START_OFFSET 8
55#define PAR_COUNT_OFFSET 12
56#define PAR_TABLE_SIZE 16
57#define EXTENDED_PAR 0x0F
58#define EXTENDED_8G 0x05
60#define BS_FS_TYPE_MASK 0xFFFFFF
61#define BS_FS_TYPE_VALUE 0x544146
62#define BS_FS_TYPE_FAT 0x0B
63#define BS_FS_TYPE_NTFS 0x07
72#define LD_WORD_DISK(ptr) (UINT16)(((UINT16)*((UINT8 *)(ptr) + FIRST_BYTE) << (BIT_FOR_BYTE * FIRST_BYTE)) | \
73 (UINT16)*(UINT8 *)(ptr))
74#define LD_DWORD_DISK(ptr) (UINT32)(((UINT32)*((UINT8 *)(ptr) + THIRD_BYTE) << (BIT_FOR_BYTE * THIRD_BYTE)) | \
75 ((UINT32)*((UINT8 *)(ptr) + SECOND_BYTE) << (BIT_FOR_BYTE * SECOND_BYTE)) | \
76 ((UINT16)*((UINT8 *)(ptr) + FIRST_BYTE) << (BIT_FOR_BYTE * FIRST_BYTE)) | \
79#define LD_QWORD_DISK(ptr) ((UINT64)(((UINT64)LD_DWORD_DISK(&(ptr)[FOURTH_BYTE]) << (BIT_FOR_BYTE * FOURTH_BYTE)) | \
83#define VERIFY_FS(ptr) (((LD_DWORD_DISK(&(ptr)[BS_FILSYSTEMTYPE32]) & BS_FS_TYPE_MASK) == BS_FS_TYPE_VALUE) || \
84 !strncmp(&(ptr)[BS_FILSYSTYPE], "FAT", strlen("FAT")) || \
85 !strncmp(&(ptr)[BS_JMPBOOT], "\xEB\x52\x90" "NTFS ", \
86 strlen("\xEB\x52\x90" "NTFS ")))
88#define PARTION_MODE_BTYE (PAR_OFFSET + PAR_TYPE_OFFSET)
89#define PARTION_MODE_GPT 0xEE
90#define SIGNATURE_OFFSET 0
91#define SIGNATURE_LEN 8
92#define HEADER_SIZE_OFFSET 12
93#define TABLE_SIZE_OFFSET 84
94#define TABLE_NUM_OFFSET 80
95#define TABLE_START_SECTOR 2
96#define TABLE_MAX_NUM 128
98#define GPT_PAR_START_OFFSET 32
99#define GPT_PAR_END_OFFSET 40
100#define PAR_ENTRY_NUM_PER_SECTOR 4
101#define HEADER_SIZE_MASK 0xFFFFFFFF
102#define HEADER_SIZE 0x5C
103#define HARD_DISK_GUID_OFFSET 56
104#define HARD_DISK_GUID_FOR_ESP 0x0020004900460045
105#define HARD_DISK_GUID_FOR_MSP 0x007200630069004D
106#define PAR_VALID_OFFSET0 0
107#define PAR_VALID_OFFSET1 4
108#define PAR_VALID_OFFSET2 8
109#define PAR_VALID_OFFSET3 12
111#define VERIFY_GPT(ptr) ((!strncmp(&(ptr)[SIGNATURE_OFFSET], "EFI PART", SIGNATURE_LEN)) && \
112 ((LD_DWORD_DISK(&(ptr)[HEADER_SIZE_OFFSET]) & HEADER_SIZE_MASK) == HEADER_SIZE))
114#define VERITY_PAR_VALID(ptr) ((LD_DWORD_DISK(&(ptr)[PAR_VALID_OFFSET0]) + \
115 LD_DWORD_DISK(&(ptr)[PAR_VALID_OFFSET1]) + \
116 LD_DWORD_DISK(&(ptr)[PAR_VALID_OFFSET2]) + \
117 LD_DWORD_DISK(&(ptr)[PAR_VALID_OFFSET3])) != 0)
120#define VERITY_AVAILABLE_PAR(ptr) ((LD_QWORD_DISK(&(ptr)[HARD_DISK_GUID_OFFSET]) != HARD_DISK_GUID_FOR_ESP) && \
121 (LD_QWORD_DISK(&(ptr)[HARD_DISK_GUID_OFFSET]) != HARD_DISK_GUID_FOR_MSP))
130#define DISK_LOCK(disk) do { \
131 UINT32 ret_ = LOS_MuxPend((disk)->disk_mutex, LOS_WAIT_FOREVER); \
132 if (ret_ != LOS_OK) { \
133 PRINT_ERR("%s %d, mutex lock failed, ret = 0x%x\n", \
134 __FUNCTION__, __LINE__, ret_); \
138#define DISK_UNLOCK(disk) do { \
139 UINT32 ret_ = LOS_MuxPost((disk)->disk_mutex); \
140 if (ret_ != LOS_OK) { \
141 PRINT_ERR("%s %d, mutex unlock failed, ret: 0x%x\n", \
142 __FUNCTION__, __LINE__, ret_); \
146#ifdef LOSCFG_FS_FAT_CACHE
150extern VOID SetFatSectorsPerBlock(
UINT32 sectorsPerBlock);
INT32 EraseDiskByID(UINT32 diskId, size_t startSector, UINT32 sectors)
enum _disk_status_ disk_status_e
_disk_status_
Definition disk_pri.h:123
@ STAT_UNUSED
Definition disk_pri.h:124
@ STAT_INUSED
Definition disk_pri.h:125
@ STAT_ONGOING
Definition disk_pri.h:127
@ STAT_UNREADY
Definition disk_pri.h:126
INT32 SetDiskPartName(los_part *part, const CHAR *src)
BOOL IsBlockStatusReady(const struct inode *blkDriver)
signed int INT32
Definition los_typedef.h:55
#define VOID
Definition los_typedef.h:88
unsigned int UINT32
Definition los_typedef.h:52
char CHAR
Definition los_typedef.h:58
size_t BOOL
Definition los_typedef.h:83