/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */1/*2* This file contains volume label definitions for DASD devices.3*4* Copyright IBM Corp. 20055*6* Author(s): Volker Sameske <[email protected]>7*8*/910#ifndef _ASM_S390_VTOC_H11#define _ASM_S390_VTOC_H1213#include <linux/types.h>1415struct vtoc_ttr16{17__u16 tt;18__u8 r;19} __attribute__ ((packed));2021struct vtoc_cchhb22{23__u16 cc;24__u16 hh;25__u8 b;26} __attribute__ ((packed));2728struct vtoc_cchh29{30__u16 cc;31__u16 hh;32} __attribute__ ((packed));3334struct vtoc_labeldate35{36__u8 year;37__u16 day;38} __attribute__ ((packed));3940struct vtoc_volume_label_cdl41{42char volkey[4]; /* volume key = volume label */43char vollbl[4]; /* volume label */44char volid[6]; /* volume identifier */45__u8 security; /* security byte */46struct vtoc_cchhb vtoc; /* VTOC address */47char res1[5]; /* reserved */48char cisize[4]; /* CI-size for FBA,... */49/* ...blanks for CKD */50char blkperci[4]; /* no of blocks per CI (FBA), blanks for CKD */51char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */52char res2[4]; /* reserved */53char lvtoc[14]; /* owner code for LVTOC */54char res3[29]; /* reserved */55} __attribute__ ((packed));5657struct vtoc_volume_label_ldl {58char vollbl[4]; /* volume label */59char volid[6]; /* volume identifier */60char res3[69]; /* reserved */61char ldl_version; /* version number, valid for ldl format */62__u64 formatted_blocks; /* valid when ldl_version >= f2 */63} __attribute__ ((packed));6465struct vtoc_extent66{67__u8 typeind; /* extent type indicator */68__u8 seqno; /* extent sequence number */69struct vtoc_cchh llimit; /* starting point of this extent */70struct vtoc_cchh ulimit; /* ending point of this extent */71} __attribute__ ((packed));7273struct vtoc_dev_const74{75__u16 DS4DSCYL; /* number of logical cyls */76__u16 DS4DSTRK; /* number of tracks in a logical cylinder */77__u16 DS4DEVTK; /* device track length */78__u8 DS4DEVI; /* non-last keyed record overhead */79__u8 DS4DEVL; /* last keyed record overhead */80__u8 DS4DEVK; /* non-keyed record overhead differential */81__u8 DS4DEVFG; /* flag byte */82__u16 DS4DEVTL; /* device tolerance */83__u8 DS4DEVDT; /* number of DSCB's per track */84__u8 DS4DEVDB; /* number of directory blocks per track */85} __attribute__ ((packed));8687struct vtoc_format1_label88{89char DS1DSNAM[44]; /* data set name */90__u8 DS1FMTID; /* format identifier */91char DS1DSSN[6]; /* data set serial number */92__u16 DS1VOLSQ; /* volume sequence number */93struct vtoc_labeldate DS1CREDT; /* creation date: ydd */94struct vtoc_labeldate DS1EXPDT; /* expiration date */95__u8 DS1NOEPV; /* number of extents on volume */96__u8 DS1NOBDB; /* no. of bytes used in last direction blk */97__u8 DS1FLAG1; /* flag 1 */98char DS1SYSCD[13]; /* system code */99struct vtoc_labeldate DS1REFD; /* date last referenced */100__u8 DS1SMSFG; /* system managed storage indicators */101__u8 DS1SCXTF; /* sec. space extension flag byte */102__u16 DS1SCXTV; /* secondary space extension value */103__u8 DS1DSRG1; /* data set organisation byte 1 */104__u8 DS1DSRG2; /* data set organisation byte 2 */105__u8 DS1RECFM; /* record format */106__u8 DS1OPTCD; /* option code */107__u16 DS1BLKL; /* block length */108__u16 DS1LRECL; /* record length */109__u8 DS1KEYL; /* key length */110__u16 DS1RKP; /* relative key position */111__u8 DS1DSIND; /* data set indicators */112__u8 DS1SCAL1; /* secondary allocation flag byte */113char DS1SCAL3[3]; /* secondary allocation quantity */114struct vtoc_ttr DS1LSTAR; /* last used track and block on track */115__u16 DS1TRBAL; /* space remaining on last used track */116__u16 res1; /* reserved */117struct vtoc_extent DS1EXT1; /* first extent description */118struct vtoc_extent DS1EXT2; /* second extent description */119struct vtoc_extent DS1EXT3; /* third extent description */120struct vtoc_cchhb DS1PTRDS; /* possible pointer to f2 or f3 DSCB */121} __attribute__ ((packed));122123struct vtoc_format4_label124{125char DS4KEYCD[44]; /* key code for VTOC labels: 44 times 0x04 */126__u8 DS4IDFMT; /* format identifier */127struct vtoc_cchhb DS4HPCHR; /* highest address of a format 1 DSCB */128__u16 DS4DSREC; /* number of available DSCB's */129struct vtoc_cchh DS4HCCHH; /* CCHH of next available alternate track */130__u16 DS4NOATK; /* number of remaining alternate tracks */131__u8 DS4VTOCI; /* VTOC indicators */132__u8 DS4NOEXT; /* number of extents in VTOC */133__u8 DS4SMSFG; /* system managed storage indicators */134__u8 DS4DEVAC; /* number of alternate cylinders.135* Subtract from first two bytes of136* DS4DEVSZ to get number of usable137* cylinders. can be zero. valid138* only if DS4DEVAV on. */139struct vtoc_dev_const DS4DEVCT; /* device constants */140char DS4AMTIM[8]; /* VSAM time stamp */141char DS4AMCAT[3]; /* VSAM catalog indicator */142char DS4R2TIM[8]; /* VSAM volume/catalog match time stamp */143char res1[5]; /* reserved */144char DS4F6PTR[5]; /* pointer to first format 6 DSCB */145struct vtoc_extent DS4VTOCE; /* VTOC extent description */146char res2[10]; /* reserved */147__u8 DS4EFLVL; /* extended free-space management level */148struct vtoc_cchhb DS4EFPTR; /* pointer to extended free-space info */149char res3; /* reserved */150__u32 DS4DCYL; /* number of logical cyls */151char res4[2]; /* reserved */152__u8 DS4DEVF2; /* device flags */153char res5; /* reserved */154} __attribute__ ((packed));155156struct vtoc_ds5ext157{158__u16 t; /* RTA of the first track of free extent */159__u16 fc; /* number of whole cylinders in free ext. */160__u8 ft; /* number of remaining free tracks */161} __attribute__ ((packed));162163struct vtoc_format5_label164{165char DS5KEYID[4]; /* key identifier */166struct vtoc_ds5ext DS5AVEXT; /* first available (free-space) extent. */167struct vtoc_ds5ext DS5EXTAV[7]; /* seven available extents */168__u8 DS5FMTID; /* format identifier */169struct vtoc_ds5ext DS5MAVET[18]; /* eighteen available extents */170struct vtoc_cchhb DS5PTRDS; /* pointer to next format5 DSCB */171} __attribute__ ((packed));172173struct vtoc_ds7ext174{175__u32 a; /* starting RTA value */176__u32 b; /* ending RTA value + 1 */177} __attribute__ ((packed));178179struct vtoc_format7_label180{181char DS7KEYID[4]; /* key identifier */182struct vtoc_ds7ext DS7EXTNT[5]; /* space for 5 extent descriptions */183__u8 DS7FMTID; /* format identifier */184struct vtoc_ds7ext DS7ADEXT[11]; /* space for 11 extent descriptions */185char res1[2]; /* reserved */186struct vtoc_cchhb DS7PTRDS; /* pointer to next FMT7 DSCB */187} __attribute__ ((packed));188189struct vtoc_cms_label {190__u8 label_id[4]; /* Label identifier */191__u8 vol_id[6]; /* Volid */192__u16 version_id; /* Version identifier */193__u32 block_size; /* Disk block size */194__u32 origin_ptr; /* Disk origin pointer */195__u32 usable_count; /* Number of usable cylinders/blocks */196__u32 formatted_count; /* Maximum number of formatted cylinders/197* blocks */198__u32 block_count; /* Disk size in CMS blocks */199__u32 used_count; /* Number of CMS blocks in use */200__u32 fst_size; /* File Status Table (FST) size */201__u32 fst_count; /* Number of FSTs per CMS block */202__u8 format_date[6]; /* Disk FORMAT date */203__u8 reserved1[2];204__u32 disk_offset; /* Disk offset when reserved*/205__u32 map_block; /* Allocation Map Block with next hole */206__u32 hblk_disp; /* Displacement into HBLK data of next hole */207__u32 user_disp; /* Displacement into user part of Allocation208* map */209__u8 reserved2[4];210__u8 segment_name[8]; /* Name of shared segment */211} __attribute__ ((packed));212213#endif /* _ASM_S390_VTOC_H */214215216