mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-13 15:35:41 +02:00
637 lines
31 KiB
C
637 lines
31 KiB
C
/* CHSC.H (c) Copyright Jan Jaeger, 1999-2012 */
|
|
/* Channel Subsystem interface fields */
|
|
/* */
|
|
|
|
/* This module implements channel subsystem interface functions */
|
|
/* for the Hercules ESA/390 emulator. */
|
|
/* */
|
|
/* This implementation is based on the S/390 Linux implementation */
|
|
|
|
#ifndef _CHSC_H
|
|
#define _CHSC_H
|
|
|
|
|
|
#define _CHSC_AI(_array, _bitno) ((_array)[((_bitno)/32)][(((_bitno)%32)/8)])
|
|
#define _CHSC_BI(_bitno) (0x80 >> (((_bitno)%32)%8))
|
|
#define CHSC_SB(_array, _bitno) \
|
|
do { \
|
|
_CHSC_AI((_array), (_bitno)) |= _CHSC_BI((_bitno)); \
|
|
} while (0)
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* Pack all structures to byte boundary... */
|
|
/*-------------------------------------------------------------------*/
|
|
|
|
#undef ATTRIBUTE_PACKED
|
|
#if defined(_MSVC_)
|
|
#pragma pack(push)
|
|
#pragma pack(1)
|
|
#define ATTRIBUTE_PACKED
|
|
#else
|
|
#define ATTRIBUTE_PACKED __attribute__((packed))
|
|
#endif
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ: Generic Channel Subsystem Call request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ;
|
|
typedef struct _CHSC_REQ CHSC_REQ;
|
|
struct _CHSC_REQ {
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/* The following request codes are in use, but the request name */
|
|
/* isn't known for the majority of the codes. */
|
|
// fine CHSC_REQ_RESETCU 0x0001 /* Reset Control Unit */
|
|
#define CHSC_REQ_CHPDESC 0x0002 /* Store Channel-Path Description */
|
|
#define CHSC_REQ_SCHDESC 0x0004 /* Store Subchannel Description Data */
|
|
#define CHSC_REQ_CUDESC 0x0006 /* Store Subchannel Control-Unit Data */
|
|
// CHSC_REQ_??????? 0x000C /* ??? */
|
|
// CHSC_REQ_??????? 0x000E /* ??? */
|
|
#define CHSC_REQ_CSSINFO 0x0010 /* Store Channel-Subsystem Characteristics */
|
|
#define CHSC_REQ_CNFINFO 0x0012 /* Store Configuration Information */
|
|
// CHSC_REQ_??????? 0x0016 /* ??? */
|
|
// CHSC_REQ_??????? 0x001C /* ??? */
|
|
// fine CHSC_REQ_CCHCOMP 0x001D /* Compare Channel Components */
|
|
// CHSC_REQ_??????? 0x001E /* ??? */
|
|
#define CHSC_REQ_SETSSSI 0x0021 /* Set Subchannel Indicator */
|
|
#define CHSC_REQ_GETSSQD 0x0024 /* Store Subchannel QDIO Data */
|
|
// CHSC_REQ_??????? 0x0026 /* ??? */
|
|
// CHSC_REQ_??????? 0x002A /* ??? */
|
|
// CHSC_REQ_??????? 0x002B /* ??? */
|
|
// CHSC_REQ_??????? 0x0030 /* ??? */
|
|
#define CHSC_REQ_ENFACIL 0x0031 /* Enable Facility */
|
|
// fine CHSC_REQ_CNFCOMP 0x0032 /* Store Configuration Component */
|
|
// CHSC_REQ_??????? 0x0033 /* ??? */
|
|
// CHSC_REQ_??????? 0x0034 /* ??? */
|
|
// CHSC_REQ_??????? 0x0038 /* ??? */
|
|
// CHSC_REQ_??????? 0x0046 /* ??? */
|
|
// CHSC_REQ_??????? 0x1008 /* ??? */
|
|
// CHSC_REQ_??????? 0x1027 /* ??? */
|
|
// CHSC_REQ_??????? 0x102E /* ??? */
|
|
// CHSC_REQ_??????? 0x1036 /* ??? */
|
|
// fine CHSC_REQ_EVENTIN 0x200E /* Store Event Information */
|
|
// CHSC_REQ_??????? 0x400F /* ??? */
|
|
// fine CHSC_REQ_CHGPATH 0x4011 /* Change Channel-Path Configuration */
|
|
// fine CHSC_REQ_CHGUNIT 0x4013 /* Change Control-Unit Configuration */
|
|
// fine CHSC_REQ_CHGDEVI 0x4015 /* Change I/O-Device Configuration */
|
|
// CHSC_REQ_??????? 0x4023 /* ??? */
|
|
// CHSC_REQ_??????? 0x4025 /* ??? */
|
|
// CHSC_REQ_??????? 0x4029 /* ??? */
|
|
/* The following request names are in use, but the request code */
|
|
/* isn't known for any of the names. */
|
|
// fine CHSC_REQ_CHGMODE /* Change Configuration Mode */
|
|
// fine CHSC_REQ_SDCLQUE /* Store Shared-Device-Cluster Queues */
|
|
// fine CHSC_REQ_SUBPAIN /* Store Subchannel Path Information */
|
|
// fine CHSC_REQ_CONCOLI /* Store Configuration Component List */
|
|
// fine CHSC_REQ_DOMCOLI /* Store Domain Component List */
|
|
// fine CHSC_REQ_DOMATTR /* Set Domain Attributes */
|
|
// fine CHSC_REQ_DCOATLI /* Store Domain Configuration Attributes List */
|
|
// fine CHSC_REQ_MEACHAT /* Store Channel Measurement Attributes */
|
|
// fine CHSC_REQ_EXTCHME /* Set Extended Channel Measurement */
|
|
/*004*/ FWORD resv[3];
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP: Generic Channel Subsystem Call response */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_RSP;
|
|
typedef struct _CHSC_RSP CHSC_RSP;
|
|
struct _CHSC_RSP {
|
|
/*000*/ HWORD length; /* Length of response field */
|
|
/*002*/ HWORD rsp; /* Reponse code */
|
|
#define CHSC_REQ_OK 0x0001 /* No error */
|
|
#define CHSC_REQ_INVALID 0x0002 /* Invalid request */
|
|
#define CHSC_REQ_ERRREQ 0x0003 /* Error in request block */
|
|
#define CHSC_REQ_NOTSUPP 0x0004 /* Request not supported */
|
|
#define CHSC_REQ_FACILITY 0x0101 /* Unknown Facility */
|
|
/* Response codes 0101-0111 */
|
|
/* are returned by Change */
|
|
/* Configuration requests, */
|
|
/* the precise meaning is */
|
|
/* dependant on the request. */
|
|
/*004*/ FWORD info;
|
|
/*008*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* PROGRAMMING NOTE: as far as we know the maximum size of a CHSC */
|
|
/* instruction's request + response buffer can never exceed 0x1000 */
|
|
/* and the response buffer immediately follows the request itself. */
|
|
/*-------------------------------------------------------------------*/
|
|
#define CHSC_REQRSP_SIZE 0x1000 /* Max reqest + response len */
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* chsc_max_rsp: return maximum possible number of response entries */
|
|
/* req_len = request length FETCH_HW(req_len, chsc_req->length) */
|
|
/* rsp_size = size of one response entry, sizeof(CHSC_RSPxx) */
|
|
/* returned value: maximum possible response entries, or 0 if error */
|
|
/*-------------------------------------------------------------------*/
|
|
static INLINE U16 chsc_max_rsp( U16 req_len, size_t rsp_size )
|
|
{
|
|
register U16 max_rsp;
|
|
if (0
|
|
|| rsp_size > (CHSC_REQRSP_SIZE - sizeof(CHSC_REQ) - sizeof(CHSC_RSP))
|
|
|| req_len > (CHSC_REQRSP_SIZE - sizeof(CHSC_RSP) - rsp_size)
|
|
)
|
|
return 0;
|
|
if (!rsp_size)
|
|
max_rsp = (CHSC_REQRSP_SIZE - req_len) / sizeof(CHSC_RSP);
|
|
else
|
|
max_rsp = (CHSC_REQRSP_SIZE - req_len - sizeof(CHSC_RSP)) / rsp_size;
|
|
return max_rsp;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* chsc_req_ok: respond CHSC_REQ_OK to good CHSC request */
|
|
/*-------------------------------------------------------------------*/
|
|
static INLINE int chsc_req_ok( CHSC_RSP *chsc_rsp, U16 rsp_len, U32 info )
|
|
{
|
|
STORE_HW( chsc_rsp->length, rsp_len);
|
|
STORE_HW( chsc_rsp->rsp, CHSC_REQ_OK);
|
|
STORE_FW( chsc_rsp->info, info);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* chsc_req_errreq: respond CHSC_REQ_ERRREQ to bad CHSC request */
|
|
/*-------------------------------------------------------------------*/
|
|
static INLINE int chsc_req_errreq( CHSC_RSP *chsc_rsp, U32 info )
|
|
{
|
|
STORE_HW( chsc_rsp->length, sizeof(CHSC_RSP));
|
|
STORE_HW( chsc_rsp->rsp, CHSC_REQ_ERRREQ);
|
|
STORE_FW( chsc_rsp->info, info);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ2: Store Channel Path Description request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ2;
|
|
typedef struct _CHSC_REQ2 CHSC_REQ2;
|
|
struct _CHSC_REQ2 { /* Store Channel Path Desc */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ BYTE flags1;
|
|
#define CHSC_REQ2_F1_M 0x20
|
|
#define CHSC_REQ2_F1_C 0x10
|
|
#define CHSC_REQ2_F1_FMT 0x0F
|
|
/*005*/ BYTE cssid;
|
|
/*006*/ BYTE rfmt;
|
|
#define CHSC_REQ2_RFMT_MSK 0x0F
|
|
/*007*/ BYTE first_chpid;
|
|
/*008*/ BYTE resv1[3];
|
|
/*00B*/ BYTE last_chpid;
|
|
/*00C*/ FWORD resv2;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP2: Store Channel Path Description format 0 response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by one or more CHSC_RSP2 */
|
|
struct _CHSC_RSP2;
|
|
typedef struct _CHSC_RSP2 CHSC_RSP2;
|
|
struct _CHSC_RSP2 { /* Store Channel Path Desc */
|
|
/*000*/ BYTE flags1; /* Flags */
|
|
#define CHSC_RSP2_F1_CHPID_VALID 0x80 /* */
|
|
#define CHSC_RSP2_F1_CHLA_VALID 0x40 /* */
|
|
#define CHSC_RSP2_F1_LSN_VALID 0x20 /* */
|
|
#define CHSC_RSP2_F1_SWLA_VALID 0x10 /* */
|
|
/*001*/ BYTE lsn; /* Logical Switch Number */
|
|
/*002*/ BYTE chp_type; /* Channel path description */
|
|
/*003*/ BYTE chpid; /* CHPID */
|
|
/*004*/ BYTE swla; /* Switch Link Address */
|
|
/*005*/ BYTE resv5;
|
|
/*006*/ BYTE chla; /* Channel Link Address */
|
|
/*007*/ BYTE resv7;
|
|
/*008*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP2F1: Store Channel Path Description format 1 response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by one or more CHSC_RSP2F1 */
|
|
struct _CHSC_RSP2F1;
|
|
typedef struct _CHSC_RSP2F1 CHSC_RSP2F1;
|
|
struct _CHSC_RSP2F1 { /* Store Channel Path Desc */
|
|
/*000*/ BYTE flags1; /* Flags */
|
|
#define CHSC_RSP2F1_F1_CHPID_VALID 0x80 /* */
|
|
#define CHSC_RSP2F1_F1_LSN_VALID 0x20 /* */
|
|
/*001*/ BYTE lsn; /* Logical Switch Number */
|
|
/*002*/ BYTE chp_type; /* Channel path description */
|
|
/*003*/ BYTE chpid; /* CHPID */
|
|
/*004*/ BYTE resv1[3];
|
|
/*007*/ BYTE chpp;
|
|
/*008*/ FWORD resv2[3];
|
|
/*00C*/ HWORD mdc;
|
|
/*00E*/ HWORD flags2;
|
|
#define CHSC_RSP2F1_F2_R 0x0004
|
|
#define CHSC_RSP2F1_F2_S 0x0002
|
|
#define CHSC_RSP2F1_F2_F 0x0001
|
|
/*010*/ FWORD resv3[2];
|
|
/*018*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ4: Store Subchannel Description Data request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ4;
|
|
typedef struct _CHSC_REQ4 CHSC_REQ4;
|
|
struct _CHSC_REQ4 { /* Store Subchann Descr Data */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD ssidfmt;
|
|
#define CHSC_REQ4_SSID 0x0030
|
|
#define CHSC_REQ4_FMT 0x000f
|
|
/*006*/ HWORD f_sch; /* First subchannel */
|
|
/*008*/ HWORD resv2;
|
|
/*00A*/ HWORD l_sch; /* Last subchannel */
|
|
/*00C*/ FWORD resv3;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP4: Store Subchannel Description Data response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by zero, one or more CHSC_RSP4 */
|
|
struct _CHSC_RSP4;
|
|
typedef struct _CHSC_RSP4 CHSC_RSP4;
|
|
struct _CHSC_RSP4 { /* Store Subchann Descr Data */
|
|
/*000*/ BYTE flags1; /* Flags */
|
|
#define CHSC_RSP4_F1_SCH_VALID 0x80 /* Subchannel valid */
|
|
#define CHSC_RSP4_F1_DEV_VALID 0x40 /* Device number valid */
|
|
#define CHSC_RSP4_F1_ST 0x38 /* Subchannel type */
|
|
#define CHSC_RSP4_F1_ST_IO 0x00 /* I/O Subchannel; all fields
|
|
have a meaning */
|
|
#define CHSC_RSP4_F1_ST_CHSC 0x08 /* CHSC Subchannel only sch_val
|
|
st and sch have a meaning */
|
|
#define CHSC_RSP4_F1_ST_MSG 0x10 /* MSG Subchannel; all fields
|
|
except unit_addr have a
|
|
meaning */
|
|
#define CHSC_RPS4_F1_ST_ADM 0x18 /* ADM Subchannel; Only sch_val
|
|
st and sch have a meaning */
|
|
/*001*/ BYTE unit_addr; /* Unit address */
|
|
/*002*/ HWORD devno; /* Device number */
|
|
/*004*/ BYTE path_mask; /* Valid path mask */
|
|
/*005*/ BYTE fla_valid_mask; /* Valid link mask */
|
|
/*006*/ HWORD sch; /* Subchannel number */
|
|
/*008*/ BYTE chpid[8]; /* Channel path array */
|
|
/*010*/ HWORD fla[8]; /* Full link address array */
|
|
/*020*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ6: Store Subchannel Control-Unit Data request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ6;
|
|
typedef struct _CHSC_REQ6 CHSC_REQ6;
|
|
struct _CHSC_REQ6 { /* Store Subchann. CU Data */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD ssidfmt;
|
|
#define CHSC_REQ6_M 0x2000
|
|
#define CHSC_REQ6_FMT 0x00f0
|
|
#define CHSC_REQ6_SSID 0x0003
|
|
/*006*/ HWORD f_sch; /* First subchannel */
|
|
/*008*/ BYTE resv2;
|
|
/*009*/ BYTE cssid;
|
|
/*00A*/ HWORD l_sch; /* Last subchannel */
|
|
/*00C*/ FWORD resv3;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP6: Store Subchannel Control-Unit Data response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by zero, one or more CHSC_RSP6 */
|
|
struct _CHSC_RSP6;
|
|
typedef struct _CHSC_RSP6 CHSC_RSP6;
|
|
struct _CHSC_RSP6 { /* Store Subchann. CU Data */
|
|
/*000*/ BYTE flags1; /* Flags */
|
|
#define CHSC_RSP6_F1_SCH_VALID 0x80 /* Subchannel valid */
|
|
#define CHSC_RSP6_F1_DEV_VALID 0x40 /* Device number valid */
|
|
#define CHSC_RSP6_F1_ST 0x38 /* Subchannel type */
|
|
#define CHSC_RSP6_F1_ST_IO 0x00 /* I/O Subchannel; all fields
|
|
have a meaning */
|
|
#define CHSC_RSP6_F1_ST_CHSC 0x08 /* CHSC Subchannel only sch_val
|
|
st and sch have a meaning */
|
|
#define CHSC_RSP6_F1_ST_MSG 0x10 /* MSG Subchannel; all fields
|
|
except unit_addr have a
|
|
meaning */
|
|
#define CHSC_RPS6_F1_ST_ADM 0x18 /* ADM Subchannel; Only sch_val
|
|
st and sch have a meaning */
|
|
/*001*/ BYTE path_mask; /* Path mask */
|
|
/*002*/ HWORD devnum; /* Device number */
|
|
/*004*/ HWORD lcucb; /* LCUCB queue number */
|
|
/*006*/ HWORD sch; /* Subchannel number */
|
|
/*007*/ BYTE chpid[8]; /* Channel path array */
|
|
/*010*/ HWORD cun[8]; /* Control unit number array */
|
|
/*020*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ10: Store Channel-Subsystem Characteristics request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ10;
|
|
typedef struct _CHSC_REQ10 CHSC_REQ10;
|
|
struct _CHSC_REQ10 { /* Store Channel-Subsystem Characteristics */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ FWORD resv[3]; /* Must be zero */
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP10: Store Channel-Subsystem Characteristics reponse */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by CHSC_RSP10 */
|
|
struct _CHSC_RSP10;
|
|
typedef struct _CHSC_RSP10 CHSC_RSP10;
|
|
struct _CHSC_RSP10 { /* Store Channel-Subsystem Characteristics */
|
|
/*000*/ FWORD general_char[510];
|
|
/*7F8*/ FWORD chsc_char[508]; /* ZZ: Linux/390 code indicates
|
|
this field has a length of
|
|
518, however, that would
|
|
mean that the entire CHSC
|
|
request would be 4K + 16
|
|
in length which is probably
|
|
an error - *JJ/10/10/04*/
|
|
/*FE8*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ12: Store Configuration Information request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ12;
|
|
typedef struct _CHSC_REQ12 CHSC_REQ12;
|
|
struct _CHSC_REQ12 { /* Store Config. Information */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ BYTE flags;
|
|
#define CHSC_REQ12_FLAGS_M 0x20
|
|
#define CHSC_REQ12_FLAGS_FMT 0x0F
|
|
/*005*/ BYTE cssid;
|
|
/*006*/ BYTE ssid;
|
|
#define CHSC_REQ12_SSID_MASK 0x03
|
|
/*007*/ BYTE resv007;
|
|
/*008*/ DBLWRD resv008;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP12: Store Configuration Information response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by CHSC_RSP12 */
|
|
struct _CHSC_RSP12;
|
|
typedef struct _CHSC_RSP12 CHSC_RSP12;
|
|
struct _CHSC_RSP12 { /* Store Config. Information */
|
|
/*000*/ BYTE resv008;
|
|
/*001*/ BYTE flags; /* Flags */
|
|
#define CHSC_RSP12_F1_CM 0x80 /* Configuration Mode */
|
|
#define CHSC_RSP12_F1_CV 0x40 /* Configuration Valid */
|
|
#define CHSC_RSP12_F1_CC 0x20 /* Configuration Changed */
|
|
#define CHSC_RSP12_F1_TP 0x10 /* Token Present */
|
|
#define CHSC_RSP12_F1_PPV 0x08 /* Program-Parameter Valid */
|
|
/*002*/ BYTE unknow00A; /* ??? */
|
|
/*003*/ BYTE pnum; /* Partition Number */
|
|
/*004*/ FWORD pp[4]; /* Program Parameter */
|
|
/*014*/ FWORD rse; /* Remaining Subchannel Elements */
|
|
/*018*/ FWORD rcue; /* Remaining Control-Unit Elements */
|
|
/*01C*/ FWORD rsce; /* Remaining Shared-Cluster Elements */
|
|
/*020*/ FWORD unknow028;
|
|
/*024*/ FWORD unknow02C;
|
|
/*028*/ FWORD cct[16]; /* Current-Configuration Token */
|
|
/*068*/ FWORD tct[16]; /* Target-Configuration Token */
|
|
/*0A8*/ FWORD resv0B0;
|
|
/*0AC*/ HWORD pnv; /* Partition-Names Valid mask */
|
|
/*0AE*/ HWORD resv0B6;
|
|
/*0B0*/ DBLWRD pn[16]; /* Partition Names */
|
|
/*130*/ FWORD unknow138[488];
|
|
/*8D0*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ21: Set Subchannel Indicator. Response is CHSC_RSP. */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ21;
|
|
typedef struct _CHSC_REQ21 CHSC_REQ21;
|
|
struct _CHSC_REQ21 { /* Set Subchannel Indicator */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD opcode; /* Operation Code */
|
|
/*006*/ HWORD resv1;
|
|
/*008*/ FWORD resv2;
|
|
/*00C*/ FWORD resv3;
|
|
/*010*/ DBLWRD alsi; /* Adapter Summary Indicator */
|
|
/*018*/ DBLWRD dsci; /* Device State Change Ind */
|
|
/*020*/ BYTE sk; /* Storage keys: alsi, dsci */
|
|
#define CHSC_REQ21_KS 0xF0 /* Storage key alsi */
|
|
#define CHSC_REQ21_KC 0x0F /* Storage key dsci */
|
|
/*021*/ BYTE resv4[2];
|
|
/*023*/ BYTE isc; /* Interrupt SubClass */
|
|
#define CHSC_REQ21_VISC_MASK 0x70
|
|
#define CHSC_REQ21_ISC_MASK 0x07
|
|
/*024*/ FWORD flags; /* Flags */
|
|
#define CHSC_REQ21_FLAGS_D 0x10000000 /* Time Delay Enablement */
|
|
/*028*/ FWORD resv5;
|
|
/*02C*/ FWORD ssid; /* Subchannel Id */
|
|
/*030*/ FWORD resvx[1004];
|
|
/*FE0*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ24: Store Subchannel QDIO Data request */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ24;
|
|
typedef struct _CHSC_REQ24 CHSC_REQ24;
|
|
struct _CHSC_REQ24 { /* Store Subchann. QDIO Data */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD ssidfmt;
|
|
#define CHSC_REQ24_SSID 0x0030
|
|
#define CHSC_REQ24_FMT 0x000f
|
|
/*006*/ HWORD f_sch; /* First subchannel number */
|
|
/*008*/ HWORD resv1;
|
|
/*00A*/ HWORD l_sch; /* Last subchannel number */
|
|
/*00C*/ FWORD resv2;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP24: Store Subchannel QDIO Data response */
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_RSP followed by zero, one or more CHSC_RSP24 */
|
|
struct _CHSC_RSP24;
|
|
typedef struct _CHSC_RSP24 CHSC_RSP24;
|
|
struct _CHSC_RSP24 { /* Store Subchann. QDIO Data */
|
|
/*000*/ BYTE flags; /* Flags for st QDIO Sch Data */
|
|
#define CHSC_FLAG_QDIO_CAPABILITY 0x80
|
|
#define CHSC_FLAG_VALIDITY 0x40
|
|
#define CHSC_FLAG_UNKNOWN20 0x20 /* ??? */
|
|
/*001*/ BYTE resv1;
|
|
/*002*/ HWORD sch;
|
|
/*004*/ BYTE qfmt;
|
|
/*005*/ BYTE parm;
|
|
/*006*/ BYTE qdioac1; /* QDIO adapter-characteristics-1 flag */
|
|
#define AC1_UNKNOWN80 0x80 /* ??? */
|
|
#define AC1_SIGA_INPUT_NEEDED 0x40 /* Process input queues */
|
|
#define AC1_SIGA_OUTPUT_NEEDED 0x20 /* Process output queues */
|
|
#define AC1_SIGA_SYNC_NEEDED 0x10 /* Ask hypervisor to sync */
|
|
#define AC1_AUTOMATIC_SYNC_ON_THININT 0x08 /* Set by hypervisor */
|
|
#define AC1_AUTOMATIC_SYNC_ON_OUT_PCI 0x04 /* Set by hypervisor */
|
|
#define AC1_SC_QEBSM_AVAILABLE 0x02 /* Available for subchannel */
|
|
#define AC1_SC_QEBSM_ENABLED 0x01 /* Enabled for subchannel */
|
|
/*007*/ BYTE sch_class;
|
|
/*008*/ BYTE pcnt;
|
|
/*009*/ BYTE icnt;
|
|
/*00A*/ BYTE resv2;
|
|
/*00B*/ BYTE ocnt;
|
|
/*00C*/ BYTE resv3;
|
|
/*00D*/ BYTE mbccnt;
|
|
/*00E*/ HWORD qdioac2; /* QDIO adapter-characteristics-2 flag */
|
|
#define QETH_AC2_UNKNOWN4000 0x4000 /* ??? */
|
|
#define QETH_AC2_UNKNOWN2000 0x2000 /* ??? */
|
|
#define QETH_SNIFF_AVAIL 0x0008 /* Promisc mode avail */
|
|
#define QETH_AC2_DATA_DIV_AVAILABLE 0x0010
|
|
#define QETH_AC2_DATA_DIV_ENABLED 0x0002
|
|
/*010*/ DBLWRD sch_token;
|
|
/*018*/ BYTE mro;
|
|
/*019*/ BYTE mri;
|
|
/*01A*/ HWORD qdioac3;
|
|
#define QETH_AC3_FORMAT2_CQ_AVAILABLE 0x8000
|
|
/*01C*/ HWORD resv5;
|
|
/*01E*/ BYTE resv6;
|
|
/*01F*/ BYTE mmwc;
|
|
/*020*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* CHSC_REQ31: Enable Facility request. The response is a CHSC_RSP. */
|
|
/*-------------------------------------------------------------------*/
|
|
struct _CHSC_REQ31;
|
|
typedef struct _CHSC_REQ31 CHSC_REQ31;
|
|
struct _CHSC_REQ31 { /* Enable Facility */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD resv1;
|
|
/*006*/ HWORD facility; /* Operation Code */
|
|
#define CHSC_REQ31_MSS 0x0002 /* MSS Facility */
|
|
/*008*/ FWORD resv2;
|
|
/*00C*/ FWORD resv3;
|
|
/*010*/ FWORD opdata[252]; /* Operation Code Data */
|
|
/*400*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* Some requests that aren't supported yet. */
|
|
/*-------------------------------------------------------------------*/
|
|
|
|
/* Reset Control Unit request. The response is a CHSC_RSP */
|
|
struct _CHSC_REQ1;
|
|
typedef struct _CHSC_REQ1 CHSC_REQ1;
|
|
struct _CHSC_REQ1 { /* Reset Control Unit */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ BYTE resv1[3];
|
|
/*007*/ BYTE chpid;
|
|
/*008*/ HWORD resv2;
|
|
/*00A*/ HWORD sch; /* Subchannel number */
|
|
/*00C*/ FWORD resv3;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
struct _CHSC_REQC;
|
|
typedef struct _CHSC_REQC CHSC_REQC;
|
|
struct _CHSC_REQC {
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ FWORD unknown4[3];
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
struct _CHSC_REQ26;
|
|
typedef struct _CHSC_REQ26 CHSC_REQ26;
|
|
struct _CHSC_REQ26 {
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ HWORD unknown4;
|
|
/*006*/ HWORD first_cun; /* First control unit number */
|
|
/*008*/ HWORD unknown8;
|
|
/*00A*/ HWORD last_cun; /* Last control unit number */
|
|
/*00C*/ FWORD unknownc;
|
|
/*010*/ } ATTRIBUTE_PACKED;
|
|
|
|
struct _CHSC_REQ30;
|
|
typedef struct _CHSC_REQ30 CHSC_REQ30;
|
|
struct _CHSC_REQ30 {
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ BYTE unknown4;
|
|
/*005*/ BYTE unknown5[3];
|
|
/*008*/ FWORD unknown8[6];
|
|
/*020*/ } ATTRIBUTE_PACKED;
|
|
|
|
struct _CHSC_REQ32;
|
|
typedef struct _CHSC_REQ32 CHSC_REQ32;
|
|
struct _CHSC_REQ32 { /* Store Configur. Component */
|
|
/*000*/ HWORD length; /* Offset to response field */
|
|
/*002*/ HWORD req; /* Request code */
|
|
/*004*/ BYTE ctype;
|
|
/*005*/ BYTE unknown5[3];
|
|
/*008*/ FWORD unknown8[6];
|
|
/*020*/ } ATTRIBUTE_PACKED;
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------*/
|
|
/* Channel Path Type definitions */
|
|
/*-------------------------------------------------------------------*/
|
|
#define CHP_TYPE_UNDEF 0x00 /* Unknown */
|
|
#define CHP_TYPE_BLOCK 0x01 /* Parallel Block Multiplex */
|
|
#define CHP_TYPE_BYTE 0x02 /* Parallel Byte Multiplex */
|
|
#define CHP_TYPE_CNC_P 0x03 /* ESCON Point To Point */
|
|
#define CHP_TYPE_CNC_U 0x04 /* ESCON Switched or Point To Point */
|
|
#define CHP_TYPE_CNC_S 0x05 /* ESCON Switched Point To Point */
|
|
#define CHP_TYPE_CVC 0x06 /* ESCON Path to a Block Converter */
|
|
#define CHP_TYPE_NTV 0x07 /* Native Interface */
|
|
#define CHP_TYPE_CTC_P 0x08 /* CTC Point To Point */
|
|
#define CHP_TYPE_CTC_S 0x09 /* CTC Switched Point To Point */
|
|
#define CHP_TYPE_CTC_U 0x0A /* CTC Switched or Point To Point */
|
|
#define CHP_TYPE_CFS 0x0B /* Coupling Facility Sender */
|
|
#define CHP_TYPE_CFR 0x0C /* Coupling Facility Receiver */
|
|
#define CHP_TYPE_CBY 0x0F /* ESCON Path to a Byte Converter */
|
|
#define CHP_TYPE_OSE 0x10 /* OSA Express */
|
|
#define CHP_TYPE_OSD 0x11 /* OSA Direct Express */
|
|
#define CHP_TYPE_OSA 0x12 /* Open Systems Adapter */
|
|
#define CHP_TYPE_ISD 0x13 /* Internal System Device */
|
|
#define CHP_TYPE_OSC 0x14 /* OSA Console */
|
|
#define CHP_TYPE_OSN 0x15 /* OSA NCP */
|
|
#define CHP_TYPE_CBS 0x16 /* Cluster Bus Sender */
|
|
#define CHP_TYPE_CBR 0x17 /* Cluster Bus Receiver */
|
|
#define CHP_TYPE_ICS 0x18 /* Internal Coupling Sender */
|
|
#define CHP_TYPE_ICR 0x19 /* Internal Coupling Receiver */
|
|
#define CHP_TYPE_FC 0x1A /* FICON Point To Point */
|
|
#define CHP_TYPE_FC_S 0x1B /* FICON Switched */
|
|
#define CHP_TYPE_FCV 0x1C /* FICON To ESCON Bridge */
|
|
#define CHP_TYPE_FC_U 0x1D /* FICON Incomplete */
|
|
#define CHP_TYPE_DSD 0x1E /* Direct System Device */
|
|
#define CHP_TYPE_EIO 0x1F /* Emulated I/O */
|
|
#define CHP_TYPE_CBP 0x21 /* Integrated Cluster Bus Peer */
|
|
#define CHP_TYPE_CFP 0x22 /* Coupling Facility Peer */
|
|
#define CHP_TYPE_ICP 0x23 /* Internal Coupling Peer */
|
|
#define CHP_TYPE_IQD 0x24 /* Internal Queued Direct Comm */
|
|
#define CHP_TYPE_FCP 0x25 /* FCP Channel */
|
|
#define CHP_TYPE_CIB 0x26 /* Coupling over Infiniband */
|
|
|
|
|
|
#if defined(_MSVC_)
|
|
#pragma pack(pop)
|
|
#endif
|
|
|
|
#endif /* _CHSC_H */
|