[BACK]Return to bpb.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / fs / msdosfs

Annotation of src/sys/fs/msdosfs/bpb.h, Revision 1.6

1.6     ! cbiere      1: /*     $NetBSD: bpb.h,v 1.5 2006/11/30 15:59:23 christos Exp $ */
1.1       jdolecek    2:
                      3: /*
                      4:  * Written by Paul Popelka (paulp@uts.amdahl.com)
                      5:  *
                      6:  * You can do anything you want with this software, just don't say you wrote
                      7:  * it, and don't remove this notice.
                      8:  *
                      9:  * This software is provided "as is".
                     10:  *
                     11:  * The author supplies this software to be publicly redistributed on the
                     12:  * understanding that the author is not responsible for the correct
                     13:  * functioning of this software in any circumstances and is not liable for
                     14:  * any damages caused by this software.
                     15:  *
                     16:  * October 1992
                     17:  */
                     18:
1.4       christos   19: #ifndef _MSDOSFS_BPB_H_
                     20: #define _MSDOSFS_BPB_H_
                     21:
1.1       jdolecek   22: /*
                     23:  * BIOS Parameter Block (BPB) for DOS 3.3
                     24:  */
                     25: struct bpb33 {
                     26:        u_int16_t       bpbBytesPerSec; /* bytes per sector */
                     27:        u_int8_t        bpbSecPerClust; /* sectors per cluster */
                     28:        u_int16_t       bpbResSectors;  /* number of reserved sectors */
                     29:        u_int8_t        bpbFATs;        /* number of FATs */
                     30:        u_int16_t       bpbRootDirEnts; /* number of root directory entries */
                     31:        u_int16_t       bpbSectors;     /* total number of sectors */
                     32:        u_int8_t        bpbMedia;       /* media descriptor */
                     33:        u_int16_t       bpbFATsecs;     /* number of sectors per FAT */
                     34:        u_int16_t       bpbSecPerTrack; /* sectors per track */
                     35:        u_int16_t       bpbHeads;       /* number of heads */
                     36:        u_int16_t       bpbHiddenSecs;  /* number of hidden sectors */
                     37: };
                     38:
                     39: /*
                     40:  * BPB for DOS 5.0 The difference is bpbHiddenSecs is a short for DOS 3.3,
                     41:  * and bpbHugeSectors is not in the 3.3 bpb.
                     42:  */
                     43: struct bpb50 {
                     44:        u_int16_t       bpbBytesPerSec; /* bytes per sector */
                     45:        u_int8_t        bpbSecPerClust; /* sectors per cluster */
                     46:        u_int16_t       bpbResSectors;  /* number of reserved sectors */
                     47:        u_int8_t        bpbFATs;        /* number of FATs */
                     48:        u_int16_t       bpbRootDirEnts; /* number of root directory entries */
                     49:        u_int16_t       bpbSectors;     /* total number of sectors */
                     50:        u_int8_t        bpbMedia;       /* media descriptor */
                     51:        u_int16_t       bpbFATsecs;     /* number of sectors per FAT */
                     52:        u_int16_t       bpbSecPerTrack; /* sectors per track */
                     53:        u_int16_t       bpbHeads;       /* number of heads */
                     54:        u_int32_t       bpbHiddenSecs;  /* # of hidden sectors */
                     55:        u_int32_t       bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
                     56: };
                     57:
                     58: /*
                     59:  * BPB for DOS 7.10 (FAT32).  This one has a few extensions to bpb50.
                     60:  */
                     61: struct bpb710 {
                     62:        u_int16_t       bpbBytesPerSec; /* bytes per sector */
                     63:        u_int8_t        bpbSecPerClust; /* sectors per cluster */
                     64:        u_int16_t       bpbResSectors;  /* number of reserved sectors */
                     65:        u_int8_t        bpbFATs;        /* number of FATs */
                     66:        u_int16_t       bpbRootDirEnts; /* number of root directory entries */
                     67:        u_int16_t       bpbSectors;     /* total number of sectors */
                     68:        u_int8_t        bpbMedia;       /* media descriptor */
                     69:        u_int16_t       bpbFATsecs;     /* number of sectors per FAT */
                     70:        u_int16_t       bpbSecPerTrack; /* sectors per track */
                     71:        u_int16_t       bpbHeads;       /* number of heads */
                     72:        u_int32_t       bpbHiddenSecs;  /* # of hidden sectors */
                     73:        u_int32_t       bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
                     74:        u_int32_t       bpbBigFATsecs;  /* like bpbFATsecs for FAT32 */
                     75:        u_int16_t       bpbExtFlags;    /* extended flags: */
                     76: #define        FATNUM          0xf             /* mask for numbering active FAT */
                     77: #define        FATMIRROR       0x80            /* FAT is mirrored (like it always was) */
                     78:        u_int16_t       bpbFSVers;      /* filesystem version */
                     79: #define        FSVERS          0               /* currently only 0 is understood */
                     80:        u_int32_t       bpbRootClust;   /* start cluster for root directory */
                     81:        u_int16_t       bpbFSInfo;      /* filesystem info structure sector */
                     82:        u_int16_t       bpbBackup;      /* backup boot sector */
1.2       lukem      83:        u_int8_t        bpbReserved[12]; /* Reserved for future expansion */
1.1       jdolecek   84: };
                     85:
                     86: #ifdef atari
                     87: /*
                     88:  * BPB for gemdos filesystems. Atari leaves the obsolete stuff undefined.
                     89:  * Currently there is no need for a separate BPB structure.
                     90:  */
                     91: #if 0
                     92: struct bpb_a {
                     93:        u_int16_t       bpbBytesPerSec; /* bytes per sector             */
                     94:        u_int8_t        bpbSecPerClust; /* sectors per cluster          */
                     95:        u_int16_t       bpbResSectors;  /* number of reserved sectors   */
                     96:        u_int8_t        bpbFATs;        /* number of FATs               */
                     97:        u_int16_t       bpbRootDirEnts; /* number of root directory entries */
                     98:        u_int16_t       bpbSectors;     /* total number of sectors      */
                     99:        u_int8_t        bpbUseless1;    /* meaningless on gemdos fs     */
                    100:        u_int16_t       bpbFATsecs;     /* number of sectors per FAT    */
                    101:        u_int16_t       bpbUseless2;    /* meaningless for harddisk fs  */
                    102:        u_int16_t       bpbUseless3;    /* meaningless for harddisk fs  */
                    103:        u_int16_t       bpbHiddenSecs;  /* the TOS-BIOS ignores this    */
                    104: };
                    105: #endif
                    106: #endif /* atari */
                    107:
                    108: /*
                    109:  * The following structures represent how the bpb's look on disk.  shorts
                    110:  * and longs are just character arrays of the appropriate length.  This is
                    111:  * because the compiler forces shorts and longs to align on word or
                    112:  * halfword boundaries.
1.6     ! cbiere    113:  */
        !           114:
        !           115: #include <sys/endian.h>
        !           116:
        !           117: #define        getushort(p)    le16dec(p)
        !           118: #define        getulong(p)     le32dec(p)
        !           119: #define        putushort(p, v) le16enc((p), (v))
        !           120: #define        putulong(p, v)  le32enc((p), (v))
1.1       jdolecek  121:
                    122: /*
                    123:  * BIOS Parameter Block (BPB) for DOS 3.3
                    124:  */
                    125: struct byte_bpb33 {
                    126:        int8_t bpbBytesPerSec[2];       /* bytes per sector */
                    127:        int8_t bpbSecPerClust;          /* sectors per cluster */
                    128:        int8_t bpbResSectors[2];        /* number of reserved sectors */
                    129:        int8_t bpbFATs;                 /* number of FATs */
                    130:        int8_t bpbRootDirEnts[2];       /* number of root directory entries */
                    131:        int8_t bpbSectors[2];           /* total number of sectors */
                    132:        int8_t bpbMedia;                /* media descriptor */
                    133:        int8_t bpbFATsecs[2];           /* number of sectors per FAT */
                    134:        int8_t bpbSecPerTrack[2];       /* sectors per track */
                    135:        int8_t bpbHeads[2];             /* number of heads */
                    136:        int8_t bpbHiddenSecs[2];        /* number of hidden sectors */
                    137: };
                    138:
                    139: /*
                    140:  * BPB for DOS 5.0 The difference is bpbHiddenSecs is a short for DOS 3.3,
                    141:  * and bpbHugeSectors is not in the 3.3 bpb.
                    142:  */
                    143: struct byte_bpb50 {
                    144:        int8_t bpbBytesPerSec[2];       /* bytes per sector */
                    145:        int8_t bpbSecPerClust;          /* sectors per cluster */
                    146:        int8_t bpbResSectors[2];        /* number of reserved sectors */
                    147:        int8_t bpbFATs;                 /* number of FATs */
                    148:        int8_t bpbRootDirEnts[2];       /* number of root directory entries */
                    149:        int8_t bpbSectors[2];           /* total number of sectors */
                    150:        int8_t bpbMedia;                /* media descriptor */
                    151:        int8_t bpbFATsecs[2];           /* number of sectors per FAT */
                    152:        int8_t bpbSecPerTrack[2];       /* sectors per track */
                    153:        int8_t bpbHeads[2];             /* number of heads */
                    154:        int8_t bpbHiddenSecs[4];        /* number of hidden sectors */
                    155:        int8_t bpbHugeSectors[4];       /* # of sectors if bpbSectors == 0 */
                    156: };
                    157:
                    158: /*
                    159:  * BPB for DOS 7.10 (FAT32).  This one has a few extensions to bpb50.
                    160:  */
                    161: struct byte_bpb710 {
                    162:        u_int8_t bpbBytesPerSec[2];     /* bytes per sector */
                    163:        u_int8_t bpbSecPerClust;        /* sectors per cluster */
                    164:        u_int8_t bpbResSectors[2];      /* number of reserved sectors */
                    165:        u_int8_t bpbFATs;               /* number of FATs */
                    166:        u_int8_t bpbRootDirEnts[2];     /* number of root directory entries */
                    167:        u_int8_t bpbSectors[2];         /* total number of sectors */
                    168:        u_int8_t bpbMedia;              /* media descriptor */
                    169:        u_int8_t bpbFATsecs[2];         /* number of sectors per FAT */
                    170:        u_int8_t bpbSecPerTrack[2];     /* sectors per track */
                    171:        u_int8_t bpbHeads[2];           /* number of heads */
                    172:        u_int8_t bpbHiddenSecs[4];      /* # of hidden sectors */
                    173:        u_int8_t bpbHugeSectors[4];     /* # of sectors if bpbSectors == 0 */
                    174:        u_int8_t bpbBigFATsecs[4];      /* like bpbFATsecs for FAT32 */
                    175:        u_int8_t bpbExtFlags[2];        /* extended flags: */
                    176:        u_int8_t bpbFSVers[2];          /* filesystem version */
                    177:        u_int8_t bpbRootClust[4];       /* start cluster for root directory */
                    178:        u_int8_t bpbFSInfo[2];          /* filesystem info structure sector */
                    179:        u_int8_t bpbBackup[2];          /* backup boot sector */
1.2       lukem     180:        u_int8_t bpbReserved[12];       /* Reserved for future expansion */
1.1       jdolecek  181: };
                    182:
                    183: /*
                    184:  * FAT32 FSInfo block.
                    185:  */
                    186: struct fsinfo {
                    187:        u_int8_t fsisig1[4];
                    188:        u_int8_t fsifill1[480];
                    189:        u_int8_t fsisig2[4];
                    190:        u_int8_t fsinfree[4];
                    191:        u_int8_t fsinxtfree[4];
                    192:        u_int8_t fsifill2[12];
                    193:        u_int8_t fsisig3[4];
                    194:        u_int8_t fsifill3[508];
                    195:        u_int8_t fsisig4[4];
                    196: };
1.4       christos  197: #endif /* _MSDOSFS_BPB_H_ */

CVSweb <webmaster@jp.NetBSD.org>