]>
git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Sample/Tools/Source/GenBootsector/GetDrvNumOffset.c
9 FAT_BPB_STRUCT
*FatBpb
;
14 UINTN CountOfClusters
;
16 FatBpb
= (FAT_BPB_STRUCT
*) BootSector
;
19 // Check FAT type algorithm from FAT spec
21 RootDirSectors
= ((FatBpb
->Fat12_16
.BPB_RootEntCnt
* sizeof(FAT_DIRECTORY_ENTRY
)) +
22 (FatBpb
->Fat12_16
.BPB_BytsPerSec
- 1)) / FatBpb
->Fat12_16
.BPB_BytsPerSec
;
24 if (FatBpb
->Fat12_16
.BPB_FATSz16
!= 0) {
25 FATSz
= FatBpb
->Fat12_16
.BPB_FATSz16
;
27 FATSz
= FatBpb
->Fat32
.BPB_FATSz32
;
30 fprintf (stderr
, "ERROR: FAT: BPB_FATSz16, BPB_FATSz32 - 0, expected - Non-Zero\n");
34 if (FatBpb
->Fat12_16
.BPB_TotSec16
!= 0) {
35 TotSec
= FatBpb
->Fat12_16
.BPB_TotSec16
;
37 TotSec
= FatBpb
->Fat12_16
.BPB_TotSec32
;
40 fprintf (stderr
, "ERROR: FAT: BPB_TotSec16, BPB_TotSec32 - 0, expected - Non-Zero\n");
45 FatBpb
->Fat12_16
.BPB_RsvdSecCnt
+
46 FatBpb
->Fat12_16
.BPB_NumFATs
* FATSz
+
50 CountOfClusters
= DataSec
/ FatBpb
->Fat12_16
.BPB_SecPerClus
;
52 if (CountOfClusters
< FAT_MAX_FAT16_CLUSTER
) {
53 return (INTN
) ((UINTN
) &FatBpb
->Fat12_16
.BS_DrvNum
- (UINTN
) FatBpb
);
55 return (INTN
) ((UINTN
) &FatBpb
->Fat32
.BS_DrvNum
- (UINTN
) FatBpb
);