home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / UNIX3862.ZIP / U386-06.ZIP / U386-6.TD0 / usr / include / sys / vtoc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-26  |  8.0 KB  |  209 lines

  1. /*    Copyright (c) 1984, 1986, 1987, 1988 AT&T    */
  2. /*      All Rights Reserved      */
  3.  
  4. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T    */
  5. /*    The copyright notice above does not evidence any       */
  6. /*    actual or intended publication of such source code.    */
  7.  
  8. #ident    "@(#)head.sys:vtoc.h    1.6"
  9.  
  10. /*
  11.  * VTOC.H
  12.  */
  13.  
  14. #define V_NUMPAR        16              /* maximum number of partitions */
  15.  
  16. #define VTOC_SANE       0x600DDEEE      /* Indicates a sane VTOC */
  17. #define V_VERSION       0x01            /* layout version number */
  18.  
  19. /* Partition identification tags */
  20. #define V_BOOT        0x01        /* Boot partition */
  21. #define V_ROOT        0x02        /* Root filesystem */
  22. #define V_SWAP        0x03        /* Swap filesystem */
  23. #define V_USR        0x04        /* Usr filesystem */
  24. #define V_BACKUP    0x05        /* full disk */
  25. #define V_ALTS          0x06            /* alternate sector space */
  26. #define V_OTHER         0x07            /* non-unix space */
  27. #define V_ALTTRK    0x08        /* alternate track space */
  28.  
  29. /* Partition permission flags */
  30. #define V_UNMNT        0x01        /* Unmountable partition */
  31. #define V_RONLY         0x10            /* Read only (except by IOCTL) */
  32. #define V_OPEN          0x100           /* Partition open (for driver use) */
  33. #define V_VALID         0x200           /* Partition is valid to use */
  34. #define V_VOMASK        0x300           /* mask for open and valid */
  35.  
  36. /* driver ioctl() commands */
  37. #define VIOC            ('V'<<8)
  38. #define V_CONFIG        (VIOC|1)        /* Configure Drive */
  39. #define V_REMOUNT       (VIOC|2)        /* Remount Drive */
  40. #define V_ADDBAD        (VIOC|3)        /* Add Bad Sector */
  41. #define V_GETPARMS      (VIOC|4)        /* Get drive/partition parameters */
  42. #define V_FORMAT        (VIOC|5)        /* Format track(s) */
  43. #define    V_PDLOC        (VIOC|6)    /* Ask driver where pdinfo is on disk */
  44. #define    V_GETERR    (VIOC|7)    /* Get last error */
  45. #define V_EXERR        (VIOC|8)    /* Save extended errors */
  46. #define V_NOEXERR    (VIOC|9)    /* Don't save extended errors (def) */
  47. #define V_RDABS        (VIOC|10)    /* Read a sector at an absolute addr */
  48. #define V_WRABS        (VIOC|11)    /* Write a sector to absolute addr */
  49. #define V_VERIFY    (VIOC|12)    /* Read verify sector(s)           */
  50. #define V_XFORMAT    (VIOC|13)    /* Selectively mark sectors as bad */
  51.  
  52.  
  53. /* Sanity word for the physical description area */
  54. #define VALID_PD        0xCA5E600D
  55.  
  56. struct partition    {
  57.     ushort p_tag;           /*ID tag of partition*/
  58.     ushort p_flag;          /*permision flags*/
  59.     daddr_t p_start;        /*physical start sector no of partition*/
  60.     long p_size;            /*# of physical sectors in partition*/
  61. };
  62.  
  63. struct vtoc {
  64.     unsigned long v_sanity;            /*to verify vtoc sanity*/
  65.     unsigned long v_version;        /*layout version*/
  66.     char v_volume[8];            /*volume name*/
  67.     ushort v_nparts;            /*number of partitions*/
  68.     ushort  v_pad;                          /*pad for 286 compiler*/
  69.     unsigned long v_reserved[10];        /*free space*/
  70.     struct partition v_part[V_NUMPAR];    /*partition headers*/
  71. };
  72.  
  73.  
  74.  
  75. struct pdinfo    {
  76.     unsigned long driveid;        /*identifies the device type*/
  77.     unsigned long sanity;        /*verifies device sanity*/
  78.     unsigned long version;        /*version number*/
  79.     char serial[12];        /*serial number of the device*/
  80.     unsigned long cyls;        /*number of cylinders per drive*/
  81.     unsigned long tracks;        /*number tracks per cylinder*/
  82.     unsigned long sectors;        /*number sectors per track*/
  83.     unsigned long bytes;        /*number of bytes per sector*/
  84.     unsigned long logicalst;    /*sector address of logical sector 0*/
  85.     unsigned long errlogst;        /*sector address of error log area*/
  86.     unsigned long errlogsz;        /*size in bytes of error log area*/
  87.     unsigned long mfgst;        /*sector address of mfg. defect info*/
  88.     unsigned long mfgsz;        /*size in bytes of mfg. defect info*/
  89.     unsigned long defectst;        /*sector address of the defect map*/
  90.     unsigned long defectsz;        /*size in bytes of defect map*/
  91.     unsigned long relno;        /*number of relocation areas*/
  92.     unsigned long relst;        /*sector address of relocation area*/
  93.     unsigned long relsz;        /*size in sectors of relocation area*/
  94.     unsigned long relnext;        /*address of next avail reloc sector*/
  95. /* the previous items are left intact from AT&T's 3b2 pdinfo.  Following
  96.    are added for the 80386 port */
  97.     unsigned long vtoc_ptr;         /*byte offset of vtoc block*/
  98.     unsigned short vtoc_len;        /*byte length of vtoc block*/
  99.     unsigned short vtoc_pad;        /* pad for 16-bit machine alignment */
  100.     unsigned long alt_ptr;          /*byte offset of alternates table*/
  101.     unsigned short alt_len;         /*byte length of alternates table*/
  102. };
  103.  
  104. union   io_arg {
  105.     struct  {
  106.         ushort  ncyl;           /* number of cylinders on drive */
  107.         unsigned char nhead;    /* number of heads/cyl */
  108.         unsigned char nsec;     /* number of sectors/track */
  109.         ushort  secsiz;         /* number of bytes/sector */
  110.         } ia_cd;                /* used for Configure Drive cmd */
  111.     struct  {
  112.         ushort  flags;          /* flags (see below) */
  113.         daddr_t bad_sector;     /* absolute sector number */
  114.         daddr_t new_sector;     /* RETURNED alternate sect assigned */
  115.         } ia_abs;               /* used for Add Bad Sector cmd */
  116.     struct  {
  117.         ushort  start_trk;      /* first track # */
  118.         ushort  num_trks;       /* number of tracks to format */
  119.         ushort  intlv;          /* interleave factor */
  120.         } ia_fmt;               /* used for Format Tracks cmd */
  121.     struct    {
  122.         ushort    start_trk;    /* first track    */
  123.         char    *intlv_tbl;    /* interleave table */
  124.         } ia_xfmt;        /* used for the V_XFORMAT ioctl */
  125.  
  126. };
  127.  
  128. /*
  129.  * Data structure for the V_VERIFY ioctl
  130.  */
  131. union    vfy_io    {
  132.     struct    {
  133.         daddr_t abs_sec;    /* absolute sector number        */
  134.         ushort  num_sec;    /* number of sectors to verify   */
  135.         ushort  time_flg;    /* flag to indicate time the operation */
  136.         }vfy_in;
  137.     struct    {
  138.         time_t  deltatime;    /* duration of operation */
  139.         ushort  err_code;    /* reason for failure    */
  140.         }vfy_out;
  141. };
  142.  
  143. /* Flags for Add Bad Sector command */
  144. #define V_ABS_NEAR      1       /* Assign closest alternate available */
  145.  
  146.  
  147. /* data structure returned by the Get Parameters ioctl: */
  148.  
  149. struct  disk_parms {
  150.     char    dp_type;                /* Disk type (see below) */
  151.     unchar  dp_heads;               /* Number of heads */
  152.     ushort  dp_cyls;                /* Number of cylinders */
  153.     unchar  dp_sectors;             /* Number of sectors/track */
  154.     ushort  dp_secsiz;              /* Number of bytes/sector */
  155.                     /* for this partition: */
  156.     ushort  dp_ptag;                /* Partition tag */
  157.     ushort  dp_pflag;               /* Partition flag */
  158.     daddr_t dp_pstartsec;           /* Starting absolute sector number */
  159.     daddr_t dp_pnumsec;             /* Number of sectors */
  160.     };
  161.  
  162. /* Disk types for disk_parms.dp_type: */
  163. #define DPT_WINI        1               /* Winchester disk */
  164. #define DPT_FLOPPY      2               /* Floppy */
  165. #define DPT_OTHER       3               /* Other type of disk */
  166. #define DPT_NOTDISK     0               /* Not a disk device */
  167.  
  168. /* Data structure for V_RDABS/V_WRABS ioctl's */
  169. struct absio {
  170.     daddr_t    abs_sec;        /* Absolute sector number (from 0) */
  171.     char    *abs_buf;        /* Sector buffer */
  172. };
  173.  
  174. #ifdef    IOCTL_ERROR
  175. /* Errors which may be retrieved with an ioctl when IOCTL_ERROR is used.  */
  176.  
  177. /* Error message types */
  178.  
  179. #define    FD_NOARGS    0        /* No arguments are applicable */
  180. #define    FD_TRKERR    1        /* Track number is applicable */
  181. #define    FD_BLKERR    2        /* Block number is applicable */
  182.  
  183. #define    FD_ENOERROR    0        /* No error */
  184. #define    FD_ECMDTIMEOUT    1        /* command timeout */
  185. #define    FD_ESTATIMEOUT    2        /* status timeout */
  186. #define    FD_EBUSY    3        /* busy */
  187. #define    FD_EMISSDADDR    4        /* Missing data address mark */
  188. #define    FD_EBADCYL    5        /* Cylinder marked bad */
  189. #define    FD_EWRONGCYL    6        /* Seek error (wrong cylinder) */
  190. #define    FD_ECANTREAD    7        /* Uncorrectable data read */
  191. #define    FD_EBADSECTOR    8        /* Sector marked bad */
  192. #define    FD_EMISSHADDR    9        /* Missing header address mark */
  193. #define    FD_EWRITEPROT    10        /* Write protected */
  194. #define    FD_ESECNOTFND    11        /* Sector not found */
  195. #define    FD_EDATAOVRUN    12        /* Data overrun */
  196. #define    FD_EHCANTREAD    13        /* Header read error */
  197. #define    FD_ILLSECT    14        /* Illegal sector */
  198. #define    FD_EDOOROPEN    15        /* Door open */
  199.  
  200. typedef    struct lasterr_t {
  201.     char    number;
  202.     char    type;
  203.     union    {
  204.         int    trk;
  205.         int    blk;
  206.     } arg1;
  207. } lasterr_t;
  208. #endif    /* IOCTL_ERROR */
  209.