/*-------------------------------------------------------------------+
| |
| Copyright (c) 1996, SAS Institute Inc. |
| Unpublished - All Rights Reserved |
| S A S / C S A M P L E |
| NAME: ihadva header file |
| LANGUAGE: C |
| PURPOSE: Contains #define statements , pointer and structure |
| declarations for MVS DEVTYPE macro. |
| |
| MISC: See sasc.sample.c(tryracf) |
+-------------------------------------------------------------------*/
/********************************************************************/
/* DEVTYPE PARAMETER AREA */
/* This structure MAPS THE PARAMETER AREA RETURNED TO THE CALLER BY */
/* THE DEVTYPE SVC. */
/* */
/********************************************************************/
/*********************************************************************
* The following symbols define flags in dva.flags *
*********************************************************************/
#define DVABDCYL (0x80) /* IF 1, DVACYL IS INVALID */
#define DVADEFLR (0x40) /* DEFINE EXTENT/LOCATE RECORD */
/*AND RELATED TRANSFER COMMANDS*/
/* IMPLEMENTED */
#define DVADEFEX (0x20) /* DEFINE EXTENT IMPLEMENTED */
#define DVA2BOV (0x08) /* IF 1, USE dva.ov.hd */
/* IF 0, USE dva.v.nlb and .lb */
#define DVAMODL (0x10) /* IF 1 USE DVAMOD1, */
/* DVAOVH1,DVAOVH2 */
#define DVAPAGES (0x04) /* IF 1, DEVICE SUPPORTS */
/* paging ccws. */
/* IF 0, DEVICE DOESN'T SUPPORT*/
/* PAGING CCWS. */
#define DVAFTOL (0x01) /* IF 1, APPLY TOLERANCE FACTOR*/
/*********************************************************************
* The following symbols define device types. *
*********************************************************************/
#define DVASHFT 9 /* Shift amt to divide by 512 */
struct DVA {
/**********************************************************************
* The first two full words of the output area contain the *
* UCBTYPE field and maximum record size for all devices. They are *
* followed by the device table entry if the device is direct access *
* and if keyword devtab was specified. *
**********************************************************************/
struct UCBTY { /* UCBTYPE field */
char opts(º2º); /* UCB OPTIONS */
char class; /* DEVICE CLASS */
char unit; /* UNIT TYPE */
} ucbty;
int maxrc; /* Maximum record size. */
/**********************************************************************
* SECTION FOR DASD DEVICES *
**********************************************************************/
struct TAB {
short cyl; /* Phys no. cyl per volume. */
short trk; /* No. tracks per cylinder. */
short trkln; /* No. bytes per track. */
union OV {
short hd; /* If (dva.flags & DVA2BOV) */
/* this is block overhead. */
struct V { /* else */
char nlb; /* overhead not last block.*/
char lb; /* overhad last block. */
} v;
} ov;
char ovnk; /* Overhead decrement not keyed*/
char flags;
short tol; /* Tolerance factor. */
/************************************
* Apply tolerance factor as follows:*
* 1. add blocksize and keylength *
* 2. multiply by dva.tol *
* 3. shift right DVASHFT bits *
* 4. add appropriate overheads *
************************************/
} tab;
struct RPS {
/*********************************************************************
* The following section of the table is present *
* only for rps devices--test UCBTBYT2 for UCB2OPT3. *
* That is, If (dva.ucbty.opts(|1|) & UCBRPS)... *
* where UCBRPS is #define'd to (0x10) *
**********************************************************************
* To calculate the sector for non-modulo devices perform the *
* following calculation: *
* SECTOR = ((DVAOVR0 + COST(N-1)) * DVASECTD) / DVATRKLN *
*********************************************************************/
short ovr0; /* Overhead bytes for record 0*/
char sect; /* No. sectors in full track. */
char sectd; /* No. data sectors. */
} rps;
/*************************************************************
* In the DSECT for this area, certain fields have altenate
* definitions for modulo devices. An algorithm for calculating
* the overhead for these devices is given in the IHADVA
* assembler macro provided by IBM.
*************************************************************/
};