|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11100 (0x2b5c) Types: TextFile Notes: UNIX file Names: »vtoc.h«
└─⟦5fb5a153b⟧ Bits:30004042/hpdd.imd SW95705I 386/ix Multi-user Release 1.2 └─⟦5fb5a153b⟧ UNIX Filesystem └─⟦this⟧ »hp/new/usr/include/sys/vtoc.h«
/* Copyright (c) 1987 AT&T */ /* All Rights Reserved */ /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ /* The copyright notice above does not evidence any */ /* actual or intended publication of such source code. */ /* * VTOC.H */ #ident "@(#)vtoc.h 1.14 - 88/03/15" #define V_NUMPAR 16 /* maximum number of partitions */ #define VTOC_SANE 0x600DDEEE /* Indicates a sane VTOC */ #define V_VERSION 0x02 /* layout version number */ /* * V_VERSION HISTORY: * 1 -- Initial release * 2 -- Added V_REMAP flag to p_flag field so that alternate sector * mapping could be enabled/disabled on a per-partition basis. * Driver turns this bit on for all partitions (except 0) for * a version 1 VTOC. * (386/ix release 1.1, DLP) */ /* Partition identification tags */ #define V_BOOT 0x01 /* Boot partition */ #define V_ROOT 0x02 /* Root filesystem */ #define V_SWAP 0x03 /* Swap filesystem */ #define V_USR 0x04 /* Usr filesystem */ #define V_BACKUP 0x05 /* full disk */ #define V_ALTS 0x06 /* alternate sector space */ #define V_OTHER 0x07 /* non-unix space */ /* Partition permission flags */ #define V_UNMNT 0x01 /* non-mountable partition */ #define V_RONLY 0x10 /* Read only (except by IOCTL) */ #define V_REMAP 0x20 /* do alternate sector mapping */ #define V_OPEN 0x100 /* Partition open (for driver use) */ #define V_VALID 0x200 /* Partition is valid to use */ #define V_VOMASK 0x300 /* mask for open and valid */ /* Sanity word for the physical description area */ #define VALID_PD 0xCA5E600D struct partition { ushort p_tag; /*ID tag of partition*/ ushort p_flag; /*permision flags*/ daddr_t p_start; /*physical start sector no of partition*/ long p_size; /*# of physical sectors in partition*/ }; struct vtoc { unsigned long v_sanity; /*to verify vtoc sanity*/ unsigned long v_version; /*layout version*/ char v_volume[8]; /*volume name*/ ushort v_nparts; /*number of partitions*/ ushort v_pad; /*pad for 286 compiler*/ unsigned long v_reserved[10]; /*free space*/ struct partition v_part[V_NUMPAR]; /*partition headers*/ }; struct pdinfo { unsigned long driveid; /*identifies the device type*/ unsigned long sanity; /*verifies device sanity*/ unsigned long version; /*version number*/ char serial[12]; /*serial number of the device*/ unsigned long cyls; /*number of cylinders per drive*/ unsigned long tracks; /*number tracks per cylinder*/ unsigned long sectors; /*number sectors per track*/ unsigned long bytes; /*number of bytes per sector*/ unsigned long logicalst; /*sector address of logical sector 0*/ unsigned long errlogst; /*sector address of error log area*/ unsigned long errlogsz; /*size in bytes of error log area*/ unsigned long mfgst; /*sector address of mfg. defect info*/ unsigned long mfgsz; /*size in bytes of mfg. defect info*/ unsigned long defectst; /*sector address of the defect map*/ unsigned long defectsz; /*size in bytes of defect map*/ unsigned long relno; /*number of relocation areas*/ unsigned long relst; /*sector address of relocation area*/ unsigned long relsz; /*size in sectors of relocation area*/ unsigned long relnext; /*address of next avail reloc sector*/ /* the previous items are left intact from AT&T's 3b2 pdinfo. Following are added for the 80386 port */ unsigned long vtoc_ptr; /*byte offset of vtoc block*/ unsigned short vtoc_len; /*byte length of vtoc block*/ unsigned short vtoc_pad; /* pad for 16-bit machine alignment */ unsigned long alt_ptr; /*byte offset of alternates table*/ unsigned short alt_len; /*byte length of alternates table*/ }; /* driver ioctl() commands */ #define VIOC ('V'<<8) #define V_CONFIG (VIOC|1) /* Configure Drive */ #define V_REMOUNT (VIOC|2) /* Remount Drive */ #define V_ADDBAD (VIOC|3) /* Add Bad Sector */ #define V_GETPARMS (VIOC|4) /* Get drive/partition parameters */ #define V_FORMAT (VIOC|5) /* Format track(s) */ #define V_PDLOC (VIOC|6) /* Ask driver where pdinfo is on disk */ #define V_EXERRCTL (VIOC|7) /* Extended Error Control (arg is ON/OFF) */ #define V_GETERR (VIOC|8) /* Get extended error value */ #define V_RETRYCTL (VIOC|9) /* Retry control (arg is ON/OFF) */ #define V_DEFECTS (VIOC|10) /* Get defect list from drive */ #define V_FMTDRV (VIOC|11) /* Format entire drive (NOTE: This */ /* is only valid if DPCF_NOTRKFMT */ /* is set in dp_drvflags of V_GETPARMS */ /* data for partition 0 of drive) */ /* buffer for Get Defect List return. Pointer at an array of these structs * should be in ia_def.defs on IOCTL call. On return, ia_def.ndef of these * entries (max 50 currently, but could expand later on) will have been * filled in. */ struct v_defect { ushort def_cylin; /* cylinder number of defect */ ushort def_offset; /* byte offset from index */ ushort def_len; /* defect length in bits */ }; /* the structures used for passing arguments to IOCTL. This union is used * for all non-int types of arguments */ union io_arg { struct { ushort ncyl; /* number of cylinders on drive */ unsigned char nhead; /* number of heads/cyl */ unsigned char nsec; /* number of sectors/track */ ushort secsiz; /* number of bytes/sector */ } ia_cd; /* used for Configure Drive cmd */ struct { ushort flags; /* flags (see below) */ daddr_t bad_sector; /* absolute sector number */ daddr_t new_sector; /* RETURNED alternate sect assigned */ } ia_abs; /* used for Add Bad Sector cmd */ struct { ushort start_trk; /* first track # */ ushort num_trks; /* number of tracks to format */ ushort intlv; /* interleave factor */ } ia_fmt; /* used for Format Tracks cmd */ ushort ia_fmtdrv_intlv; /* used for Format Drive command */ struct { ushort head; /* Head number */ ushort ndef; /* RETURNED number of defects on head */ struct v_defect *defs; /* pointer at defects buffer */ } ia_def; /* used for Get Defect List cmd */ } ; /* Flags for Add Bad Sector command */ #define V_ABS_NEAR 1 /* Assign closest alternate available */ /* int-style arg for V_EXERRCTL */ #define V_EXERR_ON 1L /* Turn extended error code acquisition ON */ #define V_EXERR_OFF 2L /* Turn extended error code acquisition OFF (default) */ /* int-style arg for V_RETRYCTL */ #define V_RETRY_ON 1L /* Turn ECC and Retries ON (default) */ #define V_RETRY_OFF 2L /* Turn ECC and Retries OFF */ /* data structure returned by the Get Parameters ioctl: */ struct disk_parms { char dp_type; /* Disk type (see below) */ unchar dp_heads; /* Number of heads */ ushort dp_cyls; /* Number of cylinders */ unchar dp_sectors; /* Number of sectors/track */ ushort dp_secsiz; /* Number of bytes/sector */ /* for this partition: */ ushort dp_ptag; /* Partition tag */ ushort dp_pflag; /* Partition flag */ union { /* value depends on partition # */ struct { /* returned for partition 0: */ uint dp0_secovhd : 8; /* Controller's per-sector overhead */ uint dp0_rsrvdcyls : 3; /* # of reserved cylinders from total */ uint dp0_intlv : 4; /* Interleave factor (0 if unknown) */ uint dp0_skew : 3; /* Sector skew factor (per head) */ /* Meaningful only if dp0_intlv == 1 */ /* If intlv == 1 & skew == 0, unknown */ uint dp0_ctlflags : 14; /* Controller-specific flags */ } dp0_ctl; daddr_t dp1_pstartsec; /* returned for any other partition */ } dp_psense; daddr_t dp_pnumsec; /* Number of sectors */ }; /* to make getting at things in the union (above) make some kind of sense */ #define dp_pstartsec dp_psense.dp1_pstartsec #define dp_rsrvdcyls dp_psense.dp0_ctl.dp0_rsrvdcyls #define dp_ctlflags dp_psense.dp0_ctl.dp0_ctlflags #define dp_secovhd dp_psense.dp0_ctl.dp0_secovhd #define dp_interleave dp_psense.dp0_ctl.dp0_intlv #define dp_skew dp_psense.dp0_ctl.dp0_skew /* Disk types for disk_parms.dp_type: */ #define DPT_WINI 1 /* Winchester disk */ #define DPT_FLOPPY 2 /* Floppy */ #define DPT_OTHER 3 /* Other type of disk */ #define DPT_NOTDISK 0 /* Not a disk device */ /* For partition 0 (which always starts at physical sector 0) various * other information is encoded in the dp0_ctl structure which is used * instead of dp_pstartsec. The value of dp0_rsrvdcyls should be * SUBTRACTED from dp_cyls before any calculations are done. * The flags bits are genericized below. */ /* Values for dp_ctlflags: */ #define DPCF_NOTRKFMT 0x02 /* Controller cannot format individual tracks Only the entire drive can be formatted */ #define DPCF_BADMAP 0x04 /* Bad sector map is available from drive */ #define DPCF_CHGHEADS 0x08 /* Legal to change the number of heads */ #define DPCF_CHGSECTS 0x10 /* Legal to change the number of sectors/track */ #define DPCF_CHGCYLS 0x20 /* Legal to change the number of cylinders */ #define DPCF_CHGSECSIZ 0x40 /* Legal to change the sector size */ #define DPCF_NOALTS 0x80 /* No software alternates support */ #ifdef IOCTL_ERROR /* Errors which may be retrieved with an ioctl when IOCTL_ERROR is used. */ /* Error message types */ #define FD_NOARGS 0 /* No arguments are applicable */ #define FD_TRKERR 1 /* Track number is applicable */ #define FD_BLKERR 2 /* Block number is applicable */ #define FD_ENOERROR 0 /* No error */ #define FD_ECMDTIMEOUT 1 /* command timeout */ #define FD_ESTATIMEOUT 2 /* status timeout */ #define FD_EBUSY 3 /* busy */ #define FD_EMISSDADDR 4 /* Missing data address mark */ #define FD_EBADCYL 5 /* Cylinder marked bad */ #define FD_EWRONGCYL 6 /* Seek error (wrong cylinder) */ #define FD_ECANTREAD 7 /* Uncorrectable data read */ #define FD_EBADSECTOR 8 /* Sector marked bad */ #define FD_EMISSHADDR 9 /* Missing header address mark */ #define FD_EWRITEPROT 10 /* Write protected */ #define FD_ESECNOTFND 11 /* Sector not found */ #define FD_EDATAOVRUN 12 /* Data overrun */ #define FD_EHCANTREAD 13 /* Header read error */ #define FD_ILLSECT 14 /* Illegal sector */ #define FD_EDOOROPEN 15 /* Door open */ typedef struct lasterr_t { char number; char type; union { int trk; int blk; } arg1; } lasterr_t; #endif /* IOCTL_ERROR */