diff options
Diffstat (limited to 'private/ntos/boot/bootcode/hpfs/i386/volume.inc')
-rw-r--r-- | private/ntos/boot/bootcode/hpfs/i386/volume.inc | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/private/ntos/boot/bootcode/hpfs/i386/volume.inc b/private/ntos/boot/bootcode/hpfs/i386/volume.inc new file mode 100644 index 000000000..dbeba1b9d --- /dev/null +++ b/private/ntos/boot/bootcode/hpfs/i386/volume.inc @@ -0,0 +1,102 @@ +;static char *SCCSID = "@(#)volume.h 12.2 89/09/19"; +; Maximum number of volumes that we can mount +; +; The volume ID is kept in the high bits of the sector numbers +; kept in our RAM structures, +; so there is a tradeoff between max volumes and max sectors. +; +; 32 max volumes gives us a 65 billion byte volume limit, +; which should last us for a while. Since sector numbers +; are stored on the disk without their volume upper bits +; this is strictly an implimentation detail; we can adjust +; the number of volumes or eliminate this tradeoff in other +; implimentations which will be 100% media compatable. +; +; We use the term VSector to indicate a vol/sector combination +; and PSector to indicate just the physical absolute sector # +; +; + + +; Bitmap related numbers + +BANDSHIFT equ BSHIFT+3 ; right shift sector # to band index +BANDMASK equ SPB*SECSIZE*8L-1 ; mask for within band bits +BANDSIZE equ SPB*SECSIZE*8L ; # of sectors in a full band + + +;* BandTab - Disk Band Table +; +; The disk is broken up into logical bands, each band being +; the amount of space that is addressed in 2K of bitmap. +; +; This structure tracks the bands: the location of their respective +; bit maps, the amount of free space, etc. +; + +BANDTAB struc + BT_MAP db (size SECPTR) dup (?) ; Vsector # and hint pointer for map + BT_FREE dw ? ; # of free sectors in this band + BT_OFC dw ? ; # of files allocating from this band + BT_BASE dd ? ; Psector # of first sector in map + BT_LEN dd ? ; byte length of this map + BT_HWO dd ? ; high water offset to 1st non-zero byte + ; BUGBUG - use BT_HWO +BANDTAB ends + + +;* VolTab - Volume Table +; +; VolPtr[i] points to the VolTab structure for that volume. +; This table contains volume specific information. +; +; Nearly all file system API refers to a single particular volume. +; The proper volume is determined when the file system is entered +; and the TDB structure contains a pointer to it. Most code ignores +; volumes and deals with 32 bit physical sector #'s. When we're about +; to interface with the device driver we then peek at the "global" +; volume value pointed to by TDB. +; +; There are two exceptions to this, where per-volume structures are +; pooled, the buffer pool and the OFT pool. In these two cases the +; sector number has the volume index set in it's high order VOLLSHIFT +; bits so that a single DWORD compare will qualify a sector on both +; a volume and sector basis. +; + +VOLTAB struc + VOL_FFLAG db ? ; Fault flags - checked on most calls + VOL_SFLAG db ? ; status flags + VOL_PAD dw ? ; unused - bugbug + VOL_SECVAL dd ? ; value to set on high order part of sector # + VOL_BCNT dw ? ; # of bitmap bands in this volume + VOL_VDBCnt dw ? ; count of outstanding VerifyDB calls *. + VOL_SDBcnt dd ? ; count of spare DIRBLKs left for volume, if + ; all are unused, else 0 + VOL_SBSEC dd ? ; SB_SEC value from superblock + VOL_DB db (size BANDTAB) dup (?) ; DIRBLK bandtab + VOL_ROOT dw ? ; Root SBDIR pointer + VOL_SPACE dd ? ; alloctable space limit + VOL_DBSIZE dd ? ; copy of SP_DBSIZE value + VOL_HFUSE dd ? ; # of hot fixes in effect + VOL_HFMAX dd ? + VOL_HFPTR dd ? ; address of hotfix heap array - bad sectors + VOL_HFNEW dd ? ; address of substitute list - replacement sectors + VOL_BPTR dw 1 dup (?) ; first of VOL_BCNT pointers + ; one per band. The BANDTABs that they + ; point to must be physically contiguous +VOLTAB ends + +; VOL_FFLAG fault flags +; +; these represent conditions that we're trying to repair, +; we check these on most major file system calls +; + +VF_NEEDHOT equ 01h ; hotfix list is partially used +VF_NEEDDIR equ 02h ; dirblk reserved list is partially used + +; VOL_SFLAG status flags +; + +VS_BADSEC equ 01h ; we have at least one bad sector on there |