amos-professional/AMOSPro Sources/includes/devices/hardblocks.i
2020-04-26 02:58:13 +02:00

196 lines
8.4 KiB
OpenEdge ABL

IFND DEVICES_HARDBLOCKS_I
DEVICES_HARDBLOCKS_I SET 1
**
** $Filename: devices/hardblocks.i $
** $Revision: 1.0 $
** $Date: 88/07/11 15:32:58 $
**
** File System identifier blocks for hard disks
**
** (C) Copyright 1988 Commodore-Amiga, Inc.
** All Rights Reserved
**
;---------------------------------------------------------------------
;
; This file describes blocks of data that exist on a hard disk
; to describe that disk. They are not generically accessable to
; the user as they do not appear on any DOS drive. The blocks
; are tagged with a unique identifier, checksummed, and linked
; together. The root of these blocks is the RigidDiskBlock.
;
; The RigidDiskBlock must exist on the disk within the first
; RDB_LOCATION_LIMIT blocks. This inhibits the use of the zero
; cylinder in an AmigaDOS partition: although it is strictly
; possible to store the RigidDiskBlock data in the reserved
; area of a partition, this practice is discouraged since the
; reserved blocks of a partition are overwritten by "Format",
; "Install", "DiskCopy", etc. The recommended disk layout,
; then, is to use the first cylinder(s) to store all the drive
; data specified by these blocks: i.e. partition descriptions,
; file system load images, drive bad block maps, spare blocks,
; etc.
;
; Though only 512 byte blocks are currently supported by the
; file system, this proposal tries to be forward-looking by
; making the block size explicit, and by using only the first
; 256 bytes for all blocks but the LoadSeg data.
;
;---------------------------------------------------------------------
;
; NOTE
; optional block addresses below contain $ffffffff to indicate
; a NULL address
;
STRUCTURE RigidDiskBlock,0
ULONG rdb_ID ; 4 character identifier
ULONG rdb_SummedLongs ; size of this checksummed structure
LONG rdb_ChkSum ; block checksum (longword sum to zero)
ULONG rdb_HostID ; SCSI Target ID of host
ULONG rdb_BlockBytes ; size of disk blocks
ULONG rdb_Flags ; see below for defines
; block list heads
ULONG rdb_BadBlockList ; optional bad block list
ULONG rdb_PartitionList ; optional first partition block
ULONG rdb_FileSysHeaderList ; optional fule system header block
ULONG rdb_DriveInit ; optional drive-specific init code
; DriveInit(lun,rdb,ior): "C" stk & d0/a0/a1
STRUCT rdb_Reserved1,6*4 ; set to $ffffffff
; physical drive characteristics
ULONG rdb_Cylinders ; number of drive cylinders
ULONG rdb_Sectors ; sectors per track
ULONG rdb_Heads ; number of drive heads
ULONG rdb_Interleave ; interleave
ULONG rdb_Park ; landing zone cylinder
STRUCT rdb_Reserved2,3*4
ULONG rdb_WritePreComp ; starting cylinder: write precompensation
ULONG rdb_ReducedWrite ; starting cylinder: reduced write current
ULONG rdb_StepRate ; drive step rate
STRUCT rdb_Reserved3,5*4
; logical drive characteristics
ULONG rdb_RDBBlocksLo ; low block of range reserved for hardblocks
ULONG rdb_RDBBlocksHi ; high block of range for these hardblocks
ULONG rdb_LoCylinder ; low cylinder of partitionable disk area
ULONG rdb_HiCylinder ; high cylinder of partitionable data area
ULONG rdb_CylBlocks ; number of blocks available per cylinder
ULONG rdb_AutoParkSeconds ; zero for no auto park
STRUCT rdb_Reserved4,2*4
; drive identification
STRUCT rdb_DiskVendor,8
STRUCT rdb_DiskProduct,16
STRUCT rdb_DiskRevision,4
STRUCT rdb_ControllerVendor,8
STRUCT rdb_ControllerProduct,16
STRUCT rdb_ControllerRevision,4
STRUCT rdb_Reserved5,10*4
LABEL RigidDiskBlock_SIZEOF
IDNAME_RIGIDDISK EQU (('R'<<24)!('D'<<16)!('S'<<8)!('K'))
RDB_LOCATION_LIMIT EQU 16
BITDEF RDBF,LAST,0 ; no disks exist to be configured after
; this one on this controller
BITDEF RDBF,LASTLUN,1 ; no LUNs exist to be configured greater
; than this one at this SCSI Target ID
BITDEF RDBF,LASTTID,2 ; no Target IDs exist to be configured
; greater than this one on this SCSI bus
BITDEF RDBF,NORESELECT,3 ; don't bother trying to perform reselection
; when talking to this drive
BITDEF RDBF,DISKID,4 ; rdb_Disk... identification valid
BITDEF RDBF,CTRLRID,5 ; rdb_Controller... identification valid
;---------------------------------------------------------------------
STRUCTURE BadBlockEntry,0
ULONG bbe_BadBlock ; block number of bad block
ULONG bbe_GoodBlock ; block number of replacement block
LABEL BadBlockEntry_SIZEOF
STRUCTURE BadBlockBlock,0
ULONG bbb_ID ; 4 character identifier
ULONG bbb_SummedLongs ; size of this checksummed structure
LONG bbb_ChkSum ; block checksum (longword sum to zero)
ULONG bbb_HostID ; SCSI Target ID of host
ULONG bbb_Next ; block number of the next BadBlockBlock
ULONG bbb_Reserved
STRUCT bbb_BlockPairs,61*BadBlockEntry_SIZEOF ; bad block entry pairs
; note 61 assumes 512 byte blocks
; there is no BadBlockBlock_SIZEOF: try rdb_BlockBytes
IDNAME_BADBLOCK EQU (('B'<<24)!('A'<<16)!('D'<<8)!('B'))
;---------------------------------------------------------------------
STRUCTURE PartitionBlock,0
ULONG pb_ID ; 4 character identifier
ULONG pb_SummedLongs ; size of this checksummed structure
LONG pb_ChkSum ; block checksum (longword sum to zero)
ULONG pb_HostID ; SCSI Target ID of host
ULONG pb_Next ; block number of the next PartitionBlock
ULONG pb_Flags ; see below for defines
STRUCT pb_Reserved1,2*4
ULONG pb_DevFlags ; preferred flags for OpenDevice
STRUCT pb_DriveName,32 ; preferred DOS device name: BSTR form
; (not used if this name is in use)
STRUCT pb_Reserved2,15*4 ; filler to 32 longwords
STRUCT pb_Environment,17*4 ; environment vector for this partition
STRUCT pb_EReserved,15*4 ; reserved for future environment vector
LABEL PartitionBlock_SIZEOF
IDNAME_PARTITION EQU (('P'<<24)!('A'<<16)!('R'<<8)!('T'))
BITDEF PBF,BOOTABLE,0 ; this partition is intended to be bootable
; (expected directories and files exist)
BITDEF PBF,NOMOUNT,1 ; do not mount this partition (e.g. manually
; mounted, but space reserved here)
;---------------------------------------------------------------------
STRUCTURE FileSysHeaderBlock,0
ULONG fhb_ID ; 4 character identifier
ULONG fhb_SummedLongs ; size of this checksummed structure
LONG fhb_ChkSum ; block checksum (longword sum to zero)
ULONG fhb_HostID ; SCSI Target ID of host
ULONG fhb_Next ; block number of the next FileSysHeaderBlock
ULONG fhb_Flags ; see below for defines
STRUCT fhb_Reserved1,2*4
ULONG fhb_DosType ; file system description: match this with
; partition environment's DE_DOSTYPE entry
ULONG fhb_Version ; release version of this code
ULONG fhb_PatchFlags ; bits set for those of the following that
; need to be substituted into a standard
; device node for this file system: e.g.
; $180 to substitute SegList & GlobalVec
ULONG fhb_Type ; device node type: zero
ULONG fhb_Task ; standard dos "task" field: zero
ULONG fhb_Lock ; not used for devices: zero
ULONG fhb_Handler ; filename to loadseg: zero placeholder
ULONG fhb_StackSize ; stacksize to use when starting task
LONG fhb_Priority ; task priority when starting task
LONG fhb_Startup ; startup msg: zero placeholder
LONG fhb_SegListBlocks ; first of linked list of LoadSegBlocks:
; note that this entry requires some
; processing before substitution
LONG fhb_GlobalVec ; BCPL global vector when starting task
STRUCT fhb_Reserved2,23*4 ; (those reserved by PatchFlags)
STRUCT fhb_Reserved3,21*4
LABEL FileSysHeader_SIZEOF
IDNAME_FILESYSHEADER EQU (('F'<<24)!('S'<<16)!('H'<<8)!('D'))
;---------------------------------------------------------------------
STRUCTURE LoadSegBlock,0
ULONG lsb_ID ; 4 character identifier
ULONG lsb_SummedLongs ; size of this checksummed structure
LONG lsb_ChkSum ; block checksum (longword sum to zero)
ULONG lsb_HostID ; SCSI Target ID of host
ULONG lsb_Next ; block number of the next FileSysBlock
STRUCT lsb_LoadData,123*4 ; data for "loadseg"
; note 123 assumes 512 byte blocks
; there is no LoadSegBlock_SIZEOF: try rdb_BlockBytes
IDNAME_LOADSEG EQU (('L'<<24)!('S'<<16)!('E'<<8)!('G'))
ENDC