home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 9.ddi / usr / include / sys / vtoc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  9.2 KB  |  240 lines

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