Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * This file contains volume label definitions for DASD devices.
0004  *
0005  * Copyright IBM Corp. 2005
0006  *
0007  * Author(s): Volker Sameske <sameske@de.ibm.com>
0008  *
0009  */
0010 
0011 #ifndef _ASM_S390_VTOC_H
0012 #define _ASM_S390_VTOC_H
0013 
0014 #include <linux/types.h>
0015 
0016 struct vtoc_ttr
0017 {
0018     __u16 tt;
0019     __u8 r;
0020 } __attribute__ ((packed));
0021 
0022 struct vtoc_cchhb
0023 {
0024     __u16 cc;
0025     __u16 hh;
0026     __u8 b;
0027 } __attribute__ ((packed));
0028 
0029 struct vtoc_cchh
0030 {
0031     __u16 cc;
0032     __u16 hh;
0033 } __attribute__ ((packed));
0034 
0035 struct vtoc_labeldate
0036 {
0037     __u8 year;
0038     __u16 day;
0039 } __attribute__ ((packed));
0040 
0041 struct vtoc_volume_label_cdl
0042 {
0043     char volkey[4];     /* volume key = volume label */
0044     char vollbl[4];     /* volume label */
0045     char volid[6];      /* volume identifier */
0046     __u8 security;      /* security byte */
0047     struct vtoc_cchhb vtoc; /* VTOC address */
0048     char res1[5];       /* reserved */
0049     char cisize[4];     /* CI-size for FBA,... */
0050                 /* ...blanks for CKD */
0051     char blkperci[4];   /* no of blocks per CI (FBA), blanks for CKD */
0052     char labperci[4];   /* no of labels per CI (FBA), blanks for CKD */
0053     char res2[4];       /* reserved */
0054     char lvtoc[14];     /* owner code for LVTOC */
0055     char res3[29];      /* reserved */
0056 } __attribute__ ((packed));
0057 
0058 struct vtoc_volume_label_ldl {
0059     char vollbl[4];     /* volume label */
0060     char volid[6];      /* volume identifier */
0061     char res3[69];      /* reserved */
0062     char ldl_version;   /* version number, valid for ldl format */
0063     __u64 formatted_blocks; /* valid when ldl_version >= f2  */
0064 } __attribute__ ((packed));
0065 
0066 struct vtoc_extent
0067 {
0068     __u8 typeind;           /* extent type indicator */
0069     __u8 seqno;         /* extent sequence number */
0070     struct vtoc_cchh llimit;    /* starting point of this extent */
0071     struct vtoc_cchh ulimit;    /* ending point of this extent */
0072 } __attribute__ ((packed));
0073 
0074 struct vtoc_dev_const
0075 {
0076     __u16 DS4DSCYL; /* number of logical cyls */
0077     __u16 DS4DSTRK; /* number of tracks in a logical cylinder */
0078     __u16 DS4DEVTK; /* device track length */
0079     __u8 DS4DEVI;   /* non-last keyed record overhead */
0080     __u8 DS4DEVL;   /* last keyed record overhead */
0081     __u8 DS4DEVK;   /* non-keyed record overhead differential */
0082     __u8 DS4DEVFG;  /* flag byte */
0083     __u16 DS4DEVTL; /* device tolerance */
0084     __u8 DS4DEVDT;  /* number of DSCB's per track */
0085     __u8 DS4DEVDB;  /* number of directory blocks per track */
0086 } __attribute__ ((packed));
0087 
0088 struct vtoc_format1_label
0089 {
0090     char DS1DSNAM[44];  /* data set name */
0091     __u8 DS1FMTID;      /* format identifier */
0092     char DS1DSSN[6];    /* data set serial number */
0093     __u16 DS1VOLSQ;     /* volume sequence number */
0094     struct vtoc_labeldate DS1CREDT; /* creation date: ydd */
0095     struct vtoc_labeldate DS1EXPDT; /* expiration date */
0096     __u8 DS1NOEPV;      /* number of extents on volume */
0097     __u8 DS1NOBDB;      /* no. of bytes used in last direction blk */
0098     __u8 DS1FLAG1;      /* flag 1 */
0099     char DS1SYSCD[13];  /* system code */
0100     struct vtoc_labeldate DS1REFD; /* date last referenced  */
0101     __u8 DS1SMSFG;      /* system managed storage indicators */
0102     __u8 DS1SCXTF;      /* sec. space extension flag byte */
0103     __u16 DS1SCXTV;     /* secondary space extension value */
0104     __u8 DS1DSRG1;      /* data set organisation byte 1 */
0105     __u8 DS1DSRG2;      /* data set organisation byte 2 */
0106     __u8 DS1RECFM;      /* record format */
0107     __u8 DS1OPTCD;      /* option code */
0108     __u16 DS1BLKL;      /* block length */
0109     __u16 DS1LRECL;     /* record length */
0110     __u8 DS1KEYL;       /* key length */
0111     __u16 DS1RKP;       /* relative key position */
0112     __u8 DS1DSIND;      /* data set indicators */
0113     __u8 DS1SCAL1;      /* secondary allocation flag byte */
0114     char DS1SCAL3[3];   /* secondary allocation quantity */
0115     struct vtoc_ttr DS1LSTAR; /* last used track and block on track */
0116     __u16 DS1TRBAL;     /* space remaining on last used track */
0117     __u16 res1;     /* reserved */
0118     struct vtoc_extent DS1EXT1; /* first extent description */
0119     struct vtoc_extent DS1EXT2; /* second extent description */
0120     struct vtoc_extent DS1EXT3; /* third extent description */
0121     struct vtoc_cchhb DS1PTRDS; /* possible pointer to f2 or f3 DSCB */
0122 } __attribute__ ((packed));
0123 
0124 struct vtoc_format4_label
0125 {
0126     char DS4KEYCD[44];  /* key code for VTOC labels: 44 times 0x04 */
0127     __u8 DS4IDFMT;      /* format identifier */
0128     struct vtoc_cchhb DS4HPCHR; /* highest address of a format 1 DSCB */
0129     __u16 DS4DSREC;     /* number of available DSCB's */
0130     struct vtoc_cchh DS4HCCHH; /* CCHH of next available alternate track */
0131     __u16 DS4NOATK;     /* number of remaining alternate tracks */
0132     __u8 DS4VTOCI;      /* VTOC indicators */
0133     __u8 DS4NOEXT;      /* number of extents in VTOC */
0134     __u8 DS4SMSFG;      /* system managed storage indicators */
0135     __u8 DS4DEVAC;      /* number of alternate cylinders.
0136                  * Subtract from first two bytes of
0137                  * DS4DEVSZ to get number of usable
0138                  * cylinders. can be zero. valid
0139                  * only if DS4DEVAV on. */
0140     struct vtoc_dev_const DS4DEVCT; /* device constants */
0141     char DS4AMTIM[8];   /* VSAM time stamp */
0142     char DS4AMCAT[3];   /* VSAM catalog indicator */
0143     char DS4R2TIM[8];   /* VSAM volume/catalog match time stamp */
0144     char res1[5];       /* reserved */
0145     char DS4F6PTR[5];   /* pointer to first format 6 DSCB */
0146     struct vtoc_extent DS4VTOCE; /* VTOC extent description */
0147     char res2[10];      /* reserved */
0148     __u8 DS4EFLVL;      /* extended free-space management level */
0149     struct vtoc_cchhb DS4EFPTR; /* pointer to extended free-space info */
0150     char res3;      /* reserved */
0151     __u32 DS4DCYL;      /* number of logical cyls */
0152     char res4[2];       /* reserved */
0153     __u8 DS4DEVF2;      /* device flags */
0154     char res5;      /* reserved */
0155 } __attribute__ ((packed));
0156 
0157 struct vtoc_ds5ext
0158 {
0159     __u16 t;    /* RTA of the first track of free extent */
0160     __u16 fc;   /* number of whole cylinders in free ext. */
0161     __u8 ft;    /* number of remaining free tracks */
0162 } __attribute__ ((packed));
0163 
0164 struct vtoc_format5_label
0165 {
0166     char DS5KEYID[4];   /* key identifier */
0167     struct vtoc_ds5ext DS5AVEXT; /* first available (free-space) extent. */
0168     struct vtoc_ds5ext DS5EXTAV[7]; /* seven available extents */
0169     __u8 DS5FMTID;      /* format identifier */
0170     struct vtoc_ds5ext DS5MAVET[18]; /* eighteen available extents */
0171     struct vtoc_cchhb DS5PTRDS; /* pointer to next format5 DSCB */
0172 } __attribute__ ((packed));
0173 
0174 struct vtoc_ds7ext
0175 {
0176     __u32 a; /* starting RTA value */
0177     __u32 b; /* ending RTA value + 1 */
0178 } __attribute__ ((packed));
0179 
0180 struct vtoc_format7_label
0181 {
0182     char DS7KEYID[4];   /* key identifier */
0183     struct vtoc_ds7ext DS7EXTNT[5]; /* space for 5 extent descriptions */
0184     __u8 DS7FMTID;      /* format identifier */
0185     struct vtoc_ds7ext DS7ADEXT[11]; /* space for 11 extent descriptions */
0186     char res1[2];       /* reserved */
0187     struct vtoc_cchhb DS7PTRDS; /* pointer to next FMT7 DSCB */
0188 } __attribute__ ((packed));
0189 
0190 struct vtoc_cms_label {
0191     __u8 label_id[4];       /* Label identifier */
0192     __u8 vol_id[6];     /* Volid */
0193     __u16 version_id;       /* Version identifier */
0194     __u32 block_size;       /* Disk block size */
0195     __u32 origin_ptr;       /* Disk origin pointer */
0196     __u32 usable_count; /* Number of usable cylinders/blocks */
0197     __u32 formatted_count;  /* Maximum number of formatted cylinders/
0198                  * blocks */
0199     __u32 block_count;  /* Disk size in CMS blocks */
0200     __u32 used_count;       /* Number of CMS blocks in use */
0201     __u32 fst_size;     /* File Status Table (FST) size */
0202     __u32 fst_count;        /* Number of FSTs per CMS block */
0203     __u8 format_date[6];    /* Disk FORMAT date */
0204     __u8 reserved1[2];
0205     __u32 disk_offset;  /* Disk offset when reserved*/
0206     __u32 map_block;        /* Allocation Map Block with next hole */
0207     __u32 hblk_disp;        /* Displacement into HBLK data of next hole */
0208     __u32 user_disp;        /* Displacement into user part of Allocation
0209                  * map */
0210     __u8 reserved2[4];
0211     __u8 segment_name[8];   /* Name of shared segment */
0212 } __attribute__ ((packed));
0213 
0214 #endif /* _ASM_S390_VTOC_H */