mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-08-08 17:50:29 +02:00
Move structures - no functional change
This commit is contained in:
+4
-1
@@ -93,6 +93,7 @@ dyndev_SRC = commadpt.c \
|
||||
tuntap.c \
|
||||
resolve.c \
|
||||
qeth.c \
|
||||
mpc.c \
|
||||
con1052c.c
|
||||
|
||||
|
||||
@@ -254,7 +255,7 @@ if OPTION_DYNAMIC_LOAD
|
||||
hdt3525_la_LDFLAGS = $(DYNMOD_LD_FLAGS)
|
||||
hdt3525_la_LIBADD = $(DYNMOD_LD_ADD)
|
||||
|
||||
hdtqeth_la_SOURCES = qeth.c tuntap.c
|
||||
hdtqeth_la_SOURCES = qeth.c mpc.c tuntap.c
|
||||
hdtqeth_la_LDFLAGS = $(DYNMOD_LD_FLAGS)
|
||||
hdtqeth_la_LIBADD = $(DYNMOD_LD_ADD)
|
||||
|
||||
@@ -735,6 +736,8 @@ noinst_HEADERS = fishhang.h \
|
||||
service.h \
|
||||
chsc.h \
|
||||
qeth.h \
|
||||
qdio.h \
|
||||
mpc.h \
|
||||
pttrace.h \
|
||||
history.h \
|
||||
sr.h \
|
||||
|
||||
@@ -1014,22 +1014,22 @@ typedef struct _ORB {
|
||||
|
||||
/* Path management control word structure definition */
|
||||
typedef struct _PMCW {
|
||||
FWORD intparm; /* Interruption parameter */
|
||||
BYTE flag4; /* Flag byte 4 */
|
||||
BYTE flag5; /* Flag byte 5 */
|
||||
HWORD devnum; /* Device number */
|
||||
BYTE lpm; /* Logical path mask */
|
||||
BYTE pnom; /* Path not operational mask */
|
||||
BYTE lpum; /* Last path used mask */
|
||||
BYTE pim; /* Path installed mask */
|
||||
HWORD mbi; /* Measurement block index */
|
||||
BYTE pom; /* Path operational mask */
|
||||
BYTE pam; /* Path available mask */
|
||||
BYTE chpid[8]; /* Channel path identifiers */
|
||||
BYTE zone; /* SIE zone */
|
||||
BYTE flag25; /* Flag byte 25 */
|
||||
BYTE flag26; /* Reserved byte - must be 0 */
|
||||
BYTE flag27; /* Flag byte 27 */
|
||||
/*000*/ FWORD intparm; /* Interruption parameter */
|
||||
/*004*/ BYTE flag4; /* Flag byte 4 */
|
||||
/*005*/ BYTE flag5; /* Flag byte 5 */
|
||||
/*006*/ HWORD devnum; /* Device number */
|
||||
/*008*/ BYTE lpm; /* Logical path mask */
|
||||
/*009*/ BYTE pnom; /* Path not operational mask */
|
||||
/*00A*/ BYTE lpum; /* Last path used mask */
|
||||
/*00B*/ BYTE pim; /* Path installed mask */
|
||||
/*00C*/ HWORD mbi; /* Measurement block index */
|
||||
/*00E*/ BYTE pom; /* Path operational mask */
|
||||
/*00F*/ BYTE pam; /* Path available mask */
|
||||
/*010*/ BYTE chpid[8]; /* Channel path identifiers */
|
||||
/*018*/ BYTE zone; /* SIE zone */
|
||||
/*019*/ BYTE flag25; /* Flag byte 25 */
|
||||
/*01A*/ BYTE flag26; /* Reserved byte - must be 0 */
|
||||
/*01B*/ BYTE flag27; /* Flag byte 27 */
|
||||
} PMCW;
|
||||
|
||||
/* Bit definitions for PMCW flag byte 4 */
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
#include "clock.h" // (TOD definitions)
|
||||
|
||||
#include "qeth.h" // (QETH device definitions)
|
||||
#include "qdio.h" // (QDIO device definitions)
|
||||
|
||||
#include "codepage.h"
|
||||
#include "logger.h" // (logmsg, etc)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/* MPC.C (c) Copyright Jan Jaeger, 2010-2012 */
|
||||
/* (c) Copyright Ian Shorter, 2011-2012 */
|
||||
/* (c) Copyright Harold Grovesteen, 2011-2012 */
|
||||
/* MPC */
|
||||
|
||||
/* This implementation is based on the S/390 Linux implementation */
|
||||
|
||||
#include "hstdinc.h"
|
||||
|
||||
#if !defined(_HENGINE_DLL_)
|
||||
#define _HENGINE_DLL_
|
||||
#endif
|
||||
|
||||
#if !defined(_MPC_C_)
|
||||
#define _MPC_C_
|
||||
#endif
|
||||
|
||||
#include "hercules.h"
|
||||
|
||||
#include "mpc.h"
|
||||
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
/* MPC.H (c) Copyright Jan Jaeger, 2010-2012 */
|
||||
/* (c) Copyright Ian Shorter, 2011-2012 */
|
||||
/* (c) Copyright Harold Grovesteen, 2011-2012 */
|
||||
/* MPC */
|
||||
|
||||
/* This implementation is based on the S/390 Linux implementation */
|
||||
|
||||
|
||||
#if !defined(_MPC_H)
|
||||
#define _MPC_H
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Header for MPC command frames */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_HDR {
|
||||
/*000*/ HWORD resv000; /* */
|
||||
/*002*/ HWORD ddc; /* Device Directed Command */
|
||||
#define IDX_ACT_DDC 0x8000
|
||||
/*004*/ FWORD thsn; /* Transport Header Sequence Number */
|
||||
} MPC_HDR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Identification Exchange Activate */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_IEA {
|
||||
/*000*/ MPC_HDR hdr;
|
||||
/*008*/ HWORD type; /* IDX_ACT type (read or write) */
|
||||
#define IDX_ACT_TYPE_READ 0x1901
|
||||
#define IDX_ACT_TYPE_WRITE 0x1501
|
||||
/*00A*/ BYTE resv00a; /* */
|
||||
#define IDX_ACT_RESV00A 0x01
|
||||
/*00B*/ BYTE port; /* Port number (bit 0 set) */
|
||||
#define IDX_ACT_PORT_MASK 0x3F
|
||||
#define IDX_ACT_PORT_ACTIVATE 0x80
|
||||
#define IDX_ACT_PORT_STANDBY 0x40
|
||||
/*00C*/ FWORD token; /* Issuer token */
|
||||
/*010*/ HWORD flevel; /* Function level */
|
||||
#define IDX_ACT_FLEVEL_READ 0x0000
|
||||
#define IDX_ACT_FLEVEL_WRITE 0xFFFF
|
||||
/*012*/ FWORD uclevel; /* Microcode level */
|
||||
/*016*/ BYTE dataset[8]; /* Portname */
|
||||
/*01E*/ HWORD datadev; /* Data Device Number */
|
||||
/*020*/ BYTE ddcua; /* Data Device Control Unit Address */
|
||||
/*021*/ BYTE ddua; /* Data Device Unit Address */
|
||||
} MPC_IEA;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Identification Exchange Activate Response */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_IEAR {
|
||||
/*000*/ HWORD resv000; /* */
|
||||
/*002*/ BYTE cmd; /* Response code */
|
||||
#define IDX_RSP_CMD_MASK 0xC0
|
||||
#define IDX_RSP_CMD_TERM 0xC0 /* IDX_TERMINATE received */
|
||||
/*003*/ BYTE resv003; /* */
|
||||
/*004*/ BYTE reason; /* Reason code */
|
||||
#define IDX_RSP_REASON_INVPORT 0x22
|
||||
/*005*/ BYTE resv005[3]; /* */
|
||||
/*008*/ BYTE resp; /* Response code */
|
||||
#define IDX_RSP_RESP_MASK 0x03
|
||||
#define IDX_RSP_RESP_OK 0x02
|
||||
/*009*/ BYTE cause; /* Negative response cause code */
|
||||
#define IDX_RSP_CAUSE_INUSE 0x19
|
||||
/*00A*/ BYTE resv010; /* */
|
||||
/*00B*/ BYTE flags; /* Flags */
|
||||
#define IDX_RSP_FLAGS_NOPORTREQ 0x80
|
||||
/*00C*/ FWORD token; /* Issues rm_r token */
|
||||
/*010*/ HWORD flevel; /* Funtion level */
|
||||
/*012*/ FWORD uclevel; /* Microcode level */
|
||||
} MPC_IEAR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Transport Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_TH {
|
||||
/*000*/ MPC_HDR hdr;
|
||||
/*008*/ HWORD resv008; /* */
|
||||
/*00A*/ HWORD rroff; /* Offset to request/response struct */
|
||||
/*00C*/ HWORD resv00c; /* */
|
||||
/*00E*/ HWORD rrlen; /* Length of request/response struct */
|
||||
/*010*/ FWORD end; /* X'10000001' */
|
||||
} MPC_TH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Request/Response Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_RRH {
|
||||
/*000*/ FWORD resv000; /* */
|
||||
/*004*/ BYTE type; /* Request type */
|
||||
#define RRH_TYPE_CM 0x81
|
||||
#define RRH_TYPE_ULP 0x41
|
||||
#define RRH_TYPE_IPA 0xC1
|
||||
/*005*/ BYTE proto; /* Protocol type */
|
||||
#define RRH_PROTO_L2 0x08
|
||||
#define RRH_PROTO_L3 0x03
|
||||
#define RRH_PROTO_NCP 0x0A
|
||||
#define RRH_PROTO_UNK 0x7E
|
||||
/*006*/ HWORD unkn006; /* X'0001' */
|
||||
/*008*/ FWORD pduseq; /* PDU Sequence Number */
|
||||
/*00C*/ FWORD ackseq; /* ACK Sequence Number */
|
||||
/*010*/ HWORD pduhoff; /* Offset to PDU Header */
|
||||
/*012*/ HWORD pduhlen; /* Length of PDU Header */
|
||||
/*014*/ BYTE resv014; /* */
|
||||
/*015*/ HWORD reqlen; /* Request length */
|
||||
/*017*/ BYTE unkn016; /* X'05' */
|
||||
/*018*/ FWORD token; /* */
|
||||
/*01C*/ FWORD resv020; /* */
|
||||
/*020*/ FWORD resv024; /* */
|
||||
} MPC_RRH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Protocol Data Unit Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_PH {
|
||||
/*000*/ HWORD type; /* */
|
||||
/*002*/ HWORD pdulen; /* Length of request */
|
||||
/*004*/ HWORD resv004; /* */
|
||||
/*006*/ HWORD hdrlen; /* Total Header lenght */
|
||||
} MPC_PH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Protocol Data Unit */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_PDU {
|
||||
/*000*/ HWORD len; /* */
|
||||
/*002*/ BYTE tgt; /* Command target */
|
||||
#define PDU_TGT_OSA 0x41
|
||||
#define PDU_TGT_QDIO 0x43
|
||||
/*003*/ BYTE cmd; /* Command */
|
||||
#define PDU_CMD_ENABLE 0x02
|
||||
#define PDU_CMD_SETUP 0x04
|
||||
#define PDU_CMD_ACTIVATE 0x60
|
||||
/*004*/ HWORD rlen; /* Request length */
|
||||
/*006*/ HWORD resv006; /* */
|
||||
/*008*/ FWORD resv008; /* */
|
||||
/*00C*/ HWORD ilen; /* */
|
||||
/*00E*/ BYTE unkn00e; /* */
|
||||
/*00F*/ BYTE unkn00f; /* */
|
||||
/*010*/ BYTE proto; /* */
|
||||
#define PDU_PROTO_L2 0x08
|
||||
#define PDU_PROTO_L3 0x03
|
||||
#define PDU_PROTO_NCP 0x0A
|
||||
#define PDU_PROTO_UNK 0x7E
|
||||
// ZZ INCOMPLETE
|
||||
} MPC_PDU;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* IP Assist Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_IPA {
|
||||
/*000*/ BYTE cmd; /* Command */
|
||||
/*001*/ BYTE iid; /* Initator Identifier */
|
||||
#define IPA_IID_HOST 0x00
|
||||
#define IPA_IID_ADAPTER 0x01
|
||||
#define IPA_IID_REPLY 0x80
|
||||
/*002*/ HWORD seq; /* Sequence number */
|
||||
/*004*/ HWORD rc; /* Return Code */
|
||||
#define IPA_RC_OK IPA_RC_SUCCESS
|
||||
/*006*/ BYTE at; /* Adapter Type */
|
||||
#define IPA_AT_ANY 0x01
|
||||
/*007*/ BYTE port; /* OSA Port Number */
|
||||
/*008*/ BYTE lvl; /* OSA Level */
|
||||
#define IPA_LVL_ANY 0x01
|
||||
#define IPA_LVL_L2 0x02
|
||||
/*009*/ BYTE cnt; /* Parameter Count */
|
||||
/*00A*/ HWORD proto; /* Protocol */
|
||||
#define IPA_PROTO_ANY 0x0000
|
||||
#define IPA_PROTO_IPV4 0x0004
|
||||
#define IPA_PROTO_IPV6 0x0006
|
||||
/*00C*/ FWORD ipas; /* Supported IP Assist mask */
|
||||
/*010*/ FWORD ipae; /* Enabled IP Assist mask */
|
||||
} MPC_IPA;
|
||||
|
||||
|
||||
#define IPA_ARP_PROCESSING 0x00000001L
|
||||
#define IPA_INBOUND_CHECKSUM 0x00000002L
|
||||
#define IPA_OUTBOUND_CHECKSUM 0x00000004L
|
||||
#define IPA_IP_FRAGMENTATION 0x00000008L
|
||||
#define IPA_FILTERING 0x00000010L
|
||||
#define IPA_IPV6 0x00000020L
|
||||
#define IPA_MULTICASTING 0x00000040L
|
||||
#define IPA_IP_REASSEMBLY 0x00000080L
|
||||
#define IPA_QUERY_ARP_COUNTERS 0x00000100L
|
||||
#define IPA_QUERY_ARP_ADDR_INFO 0x00000200L
|
||||
#define IPA_SETADAPTERPARMS 0x00000400L
|
||||
#define IPA_VLAN_PRIO 0x00000800L
|
||||
#define IPA_PASSTHRU 0x00001000L
|
||||
#define IPA_FLUSH_ARP_SUPPORT 0x00002000L
|
||||
#define IPA_FULL_VLAN 0x00004000L
|
||||
#define IPA_INBOUND_PASSTHRU 0x00008000L
|
||||
#define IPA_SOURCE_MAC 0x00010000L
|
||||
#define IPA_OSA_MC_ROUTER 0x00020000L
|
||||
#define IPA_QUERY_ARP_ASSIST 0x00040000L
|
||||
#define IPA_INBOUND_TSO 0x00080000L
|
||||
#define IPA_OUTBOUND_TSO 0x00100000L
|
||||
|
||||
|
||||
#define IPA_SUPP ( 0 \
|
||||
| IPA_PASSTHRU \
|
||||
| IPA_INBOUND_PASSTHRU \
|
||||
)
|
||||
|
||||
|
||||
#define IPA_CMD_STARTLAN 0x01 /* Start LAN operations */
|
||||
#define IPA_CMD_STOPLAN 0x02 /* Stop LAN operations */
|
||||
#define IPA_CMD_SETVMAC 0x21 /* Set Layer-2 MAC address */
|
||||
#define IPA_CMD_DELVMAC 0x22 /* Delete Layer-2 MAC address */
|
||||
#define IPA_CMD_SETGMAC 0x23 /* Set Layer-2 Group Multicast addr */
|
||||
#define IPA_CMD_DELGMAC 0x24 /* Del Layer-2 Group Multicast addr */
|
||||
#define IPA_CMD_SETVLAN 0x25 /* Set Layer-2 VLAN */
|
||||
#define IPA_CMD_DELVLAN 0x26 /* Delete Layer-2 VLAN */
|
||||
#define IPA_CMD_SETCCID 0x41 /* */
|
||||
#define IPA_CMD_DELCCID 0x42 /* */
|
||||
#define IPA_CMD_MODCCID 0x43 /* */
|
||||
#define IPA_CMD_SETIP 0xB1 /* Set Layer-3 IP unicast address */
|
||||
#define IPA_CMD_QIPASSIST 0xB2 /* Query Layer-3 IP assist capability*/
|
||||
#define IPA_CMD_SETASSPARMS 0xB3 /* Set Layer-3 IP assist parameters */
|
||||
#define IPA_CMD_SETIPM 0xB4 /* Set Layer-3 IP multicast address */
|
||||
#define IPA_CMD_DELIPM 0xB5 /* Delete Layer-3 IP multicast addr */
|
||||
#define IPA_CMD_SETRTG 0xB6 /* Set Layer-3 routing information */
|
||||
#define IPA_CMD_DELIP 0xB7 /* Delete Layer-3 IP unicast addr */
|
||||
#define IPA_CMD_SETADPPARMS 0xB8 /* Various adapter directed sub-cmds*/
|
||||
#define IPA_CMD_SETDIAGASS 0xB9 /* Set Layer-3 diagnostic assists */
|
||||
#define IPA_CMD_CREATEADDR 0xC3 /* Create L3 IPv6 addr from L2 MAC */
|
||||
#define IPA_CMD_DESTROYADDR 0xC4 /* Destroy L3 IPv6 addr from L2 MAC */
|
||||
#define IPA_CMD_REGLCLADDR 0xD1 /* */
|
||||
#define IPA_CMD_UNREGLCLADDR 0xD2 /* */
|
||||
|
||||
#define IPA_RC_SUCCESS 0x0000
|
||||
#define IPA_RC_NOTSUPP 0x0001
|
||||
#define IPA_RC_IP_TABLE_FULL 0x0002
|
||||
#define IPA_RC_UNKNOWN_ERROR 0x0003
|
||||
#define IPA_RC_UNSUPPORTED_COMMAND 0x0004
|
||||
#define IPA_RC_TRACE_ALREADY_ACTIVE 0x0005
|
||||
#define IPA_RC_INVALID_FORMAT 0x0006
|
||||
#define IPA_RC_DUP_IPV6_REMOTE 0x0008
|
||||
#define IPA_RC_DUP_IPV6_HOME 0x0010
|
||||
#define IPA_RC_UNREGISTERED_ADDR 0x0011
|
||||
#define IPA_RC_NO_ID_AVAILABLE 0x0012
|
||||
#define IPA_RC_ID_NOT_FOUND 0x0013
|
||||
#define IPA_RC_INVALID_IP_VERSION 0x0020
|
||||
#define IPA_RC_LAN_FRAME_MISMATCH 0x0040
|
||||
#define IPA_RC_L2_UNSUPPORTED_CMD 0x2003
|
||||
#define IPA_RC_L2_DUP_MAC 0x2005
|
||||
#define IPA_RC_L2_ADDR_TABLE_FULL 0x2006
|
||||
#define IPA_RC_L2_DUP_LAYER3_MAC 0x200a
|
||||
#define IPA_RC_L2_GMAC_NOT_FOUND 0x200b
|
||||
#define IPA_RC_L2_MAC_NOT_AUTH_BY_HYP 0x200c
|
||||
#define IPA_RC_L2_MAC_NOT_AUTH_BY_ADP 0x200d
|
||||
#define IPA_RC_L2_MAC_NOT_FOUND 0x2010
|
||||
#define IPA_RC_L2_INVALID_VLAN_ID 0x2015
|
||||
#define IPA_RC_L2_DUP_VLAN_ID 0x2016
|
||||
#define IPA_RC_L2_VLAN_ID_NOT_FOUND 0x2017
|
||||
#define IPA_RC_DATA_MISMATCH 0xe001
|
||||
#define IPA_RC_INVALID_MTU_SIZE 0xe002
|
||||
#define IPA_RC_INVALID_LANTYPE 0xe003
|
||||
#define IPA_RC_INVALID_LANNUM 0xe004
|
||||
#define IPA_RC_DUPLICATE_IP_ADDRESS 0xe005
|
||||
#define IPA_RC_IP_ADDR_TABLE_FULL 0xe006
|
||||
#define IPA_RC_LAN_PORT_STATE_ERROR 0xe007
|
||||
#define IPA_RC_SETIP_NO_STARTLAN 0xe008
|
||||
#define IPA_RC_SETIP_ALREADY_RECEIVED 0xe009
|
||||
#define IPA_RC_IP_ADDR_ALREADY_USED 0xe00a
|
||||
#define IPA_RC_MC_ADDR_NOT_FOUND 0xe00b
|
||||
#define IPA_RC_SETIP_INVALID_VERSION 0xe00d
|
||||
#define IPA_RC_UNSUPPORTED_SUBCMD 0xe00e
|
||||
#define IPA_RC_ARP_ASSIST_NO_ENABLE 0xe00f
|
||||
#define IPA_RC_PRIMARY_ALREADY_DEFINED 0xe010
|
||||
#define IPA_RC_SECOND_ALREADY_DEFINED 0xe011
|
||||
#define IPA_RC_INVALID_SETRTG_INDICATOR 0xe012
|
||||
#define IPA_RC_MC_ADDR_ALREADY_DEFINED 0xe013
|
||||
#define IPA_RC_LAN_OFFLINE 0xe080
|
||||
#define IPA_RC_INVALID_IP_VERSION2 0xf001
|
||||
#define IPA_RC_FFFF 0xffff
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* MAC request */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_IPA_MAC {
|
||||
/*000*/ FWORD maclen; /* Length of MAC Address */
|
||||
/*004*/ BYTE macaddr[FLEXIBLE_ARRAY]; /* MAC Address */
|
||||
} MPC_IPA_MAC;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Set Adapter Parameters */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _MPC_IPA_SAP {
|
||||
/*000*/ FWORD suppcm; /* Supported subcommand mask */
|
||||
#define IPA_SAP_QUERY 0x00000001L
|
||||
#define IPA_SAP_SETMAC 0x00000002L
|
||||
#define IPA_SAP_SETGADR 0x00000004L
|
||||
#define IPA_SAP_SETFADR 0x00000008L
|
||||
#define IPA_SAP_SETAMODE 0x00000010L
|
||||
#define IPA_SAP_SETCFG 0x00000020L
|
||||
#define IPA_SAP_SETCFGE 0x00000040L
|
||||
#define IPA_SAP_BRDCST 0x00000080L
|
||||
#define IPA_SAP_OSAMSG 0x00000100L
|
||||
#define IPA_SAP_SETSNMP 0x00000200L
|
||||
#define IPA_SAP_CARDINFO 0x00000400L
|
||||
#define IPA_SAP_PROMISC 0x00000800L
|
||||
#define IPA_SAP_SETDIAG 0x00002000L
|
||||
#define IPA_SAP_SETACCESS 0x00010000L
|
||||
|
||||
|
||||
#define IPA_SAP_SUPP ( 0 \
|
||||
| IPA_SAP_QUERY \
|
||||
| IPA_SAP_PROMISC \
|
||||
)
|
||||
|
||||
|
||||
/*004*/ FWORD resv004; /* */
|
||||
/*008*/ HWORD cmdlen; /* Subcommand length */
|
||||
/*00A*/ HWORD resv00a; /* */
|
||||
/*00C*/ FWORD cmd; /* Subcommand */
|
||||
/*010*/ HWORD rc; /* Return Code */
|
||||
/*012*/ BYTE used; /* */
|
||||
/*013*/ BYTE seqno; /* */
|
||||
/*014*/ FWORD resv014; /* */
|
||||
} MPC_IPA_SAP;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* SAP ADP Qeury */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _SAP_QRY {
|
||||
/*000*/ FWORD nlan; /* Number of Lan types supported */
|
||||
/*004*/ BYTE rsp; /* LAN type response */
|
||||
/*005*/ BYTE resv005[3];
|
||||
/*008*/ FWORD suppcm; /* Supported commands bit map */
|
||||
/*00A*/ DBLWRD resv00a;
|
||||
} SAP_QRY;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Set Promiscuous Mode on/off */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _SAP_SPM {
|
||||
/*000*/ FWORD promisc; /* Promiscuous mode */
|
||||
#define SAP_PROMISC_ON 0x00000001
|
||||
#define SAP_PROMISC_OFF 0x00000000
|
||||
} SAP_SPM;
|
||||
|
||||
|
||||
#endif /*!defined(_MPC_H)*/
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#include "opcode.h"
|
||||
|
||||
#include "qeth.h"
|
||||
#include "qdio.h"
|
||||
|
||||
#include "inline.h"
|
||||
|
||||
@@ -176,7 +176,6 @@ int b2; /* effective address base */
|
||||
VADR effective_addr2; /* effective address */
|
||||
|
||||
DEVBLK *dev; /* Data device DEVBLK */
|
||||
OSA_GRP *grp; /* OSA Group device structure */
|
||||
|
||||
BYTE state; /* Target buffer state */
|
||||
BYTE oldstate; /* Current buffer state */
|
||||
@@ -229,9 +228,6 @@ U64 slsba; /* Storage list state block address */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Locate the group device block */
|
||||
grp = (OSA_GRP*)dev->group->grp_data;
|
||||
|
||||
qidx = regs->GR_H(r1); /* Queue index */
|
||||
bidx = regs->GR_L(r1); /* Buffer index */
|
||||
count = regs->GR_L(r3) < 128 ? regs->GR_L(r3) : 128; /* Number of buffers */
|
||||
@@ -278,7 +274,6 @@ int r1, r2, r3, m4; /* Register numbers */
|
||||
VADR effective_addr2 = 0; /* effective address */
|
||||
|
||||
DEVBLK *dev; /* Data device DEVBLK */
|
||||
OSA_GRP *grp; /* OSA Group device structure */
|
||||
|
||||
int autoack; /* Flag for auto-acknowkledgement */
|
||||
BYTE state; /* State extracted from first buffer */
|
||||
@@ -331,9 +326,6 @@ U64 slsba; /* Storage list state block address */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Locate the group device block */
|
||||
grp = (OSA_GRP*)dev->group->grp_data;
|
||||
|
||||
qidx = regs->GR_H(r1); /* Queue index */
|
||||
bidx = regs->GR_L(r1); /* Buffer index */
|
||||
autoack = (regs->GR_H(r2) & 0x80000000);
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
/* QDIO.H (c) Copyright Jan Jaeger, 2010-2012 */
|
||||
/* Queued Direct I/O */
|
||||
|
||||
/* This implementation is based on the S/390 Linux implementation */
|
||||
|
||||
|
||||
#if !defined(_QDIO_H)
|
||||
#define _QDIO_H
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA Device Structure */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_DEV {
|
||||
unsigned rxcnt; /* Receive count */
|
||||
unsigned txcnt; /* Transmit count */
|
||||
|
||||
int idxstate; /* IDX state */
|
||||
#define MPC_IDX_STATE_INACTIVE 0x00 // ZZ THIS FIELD NEEDS TO MOVE
|
||||
#define MPC_IDX_STATE_ACTIVE 0x01
|
||||
|
||||
int thinint; /* Thin Interrupts on PCI */
|
||||
|
||||
int i_qcnt; /* Input Queue Count */
|
||||
int i_qpos; /* Current Queue Position */
|
||||
int i_bpos[QDIO_MAXQ]; /* Current Buffer Position */
|
||||
|
||||
int o_qcnt; /* Output Queue Count */
|
||||
int o_qpos; /* Current Queue Position */
|
||||
int o_bpos[QDIO_MAXQ]; /* Current Buffer Position */
|
||||
|
||||
U32 i_qmask; /* Input Queue Mask */
|
||||
U32 o_qmask; /* Output Queue Mask */
|
||||
|
||||
BYTE i_slibk[QDIO_MAXQ]; /* Input SLIB Key */
|
||||
BYTE i_slk[QDIO_MAXQ]; /* Input Storage List Key */
|
||||
BYTE i_sbalk[QDIO_MAXQ]; /* Input SBAL Key */
|
||||
BYTE i_slsblk[QDIO_MAXQ]; /* Input SLSB Key */
|
||||
|
||||
U64 i_sliba[QDIO_MAXQ]; /* Input SLIB Address */
|
||||
U64 i_sla[QDIO_MAXQ]; /* Input Storage List Address */
|
||||
U64 i_slsbla[QDIO_MAXQ]; /* Input SLSB Address */
|
||||
|
||||
BYTE o_slibk[QDIO_MAXQ]; /* Output SLIB Key */
|
||||
BYTE o_slk[QDIO_MAXQ]; /* Output Storage List Key */
|
||||
BYTE o_sbalk[QDIO_MAXQ]; /* Output SBAL Key */
|
||||
BYTE o_slsblk[QDIO_MAXQ]; /* Output SLSB Key */
|
||||
|
||||
U64 o_sliba[QDIO_MAXQ]; /* Output SLIB Address */
|
||||
U64 o_sla[QDIO_MAXQ]; /* Output Storage List Address */
|
||||
U64 o_slsbla[QDIO_MAXQ]; /* Output SLSB Address */
|
||||
|
||||
BYTE qibk; /* Queue Information Block Key */
|
||||
U64 qiba; /* Queue Information Block Address */
|
||||
|
||||
U64 alsi; /* Adapter Local Summ Indicator */
|
||||
#define ALSI_ERROR 0x80 /* ZZ TO BE CONFIRMED */
|
||||
U64 dsci; /* Device status change Indicator */
|
||||
#define DSCI_IOCOMP 0x01 /* ZZ TO BE CONFIRMED */
|
||||
BYTE ks; /* alsi storage key */
|
||||
BYTE kc; /* dsci storage key */
|
||||
} QDIO_DEV;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Descriptor Entry (Format 0) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_QDES0 {
|
||||
/*000*/ DBLWRD sliba; /* Storage List Info Block Address */
|
||||
/*008*/ DBLWRD sla; /* Storage List Address */
|
||||
/*010*/ DBLWRD slsba; /* Storage List State Block Address */
|
||||
/*018*/ FWORD resv018;
|
||||
/*01C*/ BYTE keyp1; /* Access keys for SLIB and SL */
|
||||
#define QDES_KEYP1_A_SLIB 0xF0
|
||||
#define QDES_KEYP1_A_SL 0x0F
|
||||
/*01D*/ BYTE keyp2; /* Access keys for SBALs ad SLSB */
|
||||
#define QDES_KEYP2_A_SBAL 0xF0
|
||||
#define QDES_KEYP2_A_SLSB 0x0F
|
||||
/*01E*/ HWORD resv01e;
|
||||
} QDIO_QDES0;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Descriptor Record (QDR) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_QDR {
|
||||
/*000*/ BYTE qfmt; /* Queue Format */
|
||||
/*001*/ BYTE pfmt; /* Model Dependent Parameter Format */
|
||||
/*002*/ BYTE resv002;
|
||||
/*003*/ BYTE ac; /* Adapter Characteristics */
|
||||
/*004*/ BYTE resv004;
|
||||
/*005*/ BYTE iqdcnt; /* Input Queue Descriptor Count */
|
||||
/*006*/ BYTE resv006;
|
||||
/*007*/ BYTE oqdcnt; /* Output Queue Descriptor Count */
|
||||
/*008*/ BYTE resv008;
|
||||
/*009*/ BYTE iqdsz; /* Input Queue Descriptor Size */
|
||||
/*00A*/ BYTE resv00a;
|
||||
/*00B*/ BYTE oqdsz; /* Output Queue Descriptor Size */
|
||||
/*00C*/ FWORD resv00c[9];
|
||||
/*030*/ DBLWRD qiba; /* Queue Information Block Address */
|
||||
/*038*/ FWORD resv038;
|
||||
/*03C*/ BYTE qkey; /* Queue Information Block Key */
|
||||
/*03D*/ BYTE resv03d[3];
|
||||
/*040*/ QDIO_QDES0 qdf0[126]; /* Format 0 Queue Descriptors */
|
||||
} QDIO_QDR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Information Block (QIB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_QIB {
|
||||
/*000*/ BYTE qfmt; /* Queue Format */
|
||||
/*001*/ BYTE pfmt; /* Parameter Format */
|
||||
#define QID_PFMT_QETH 0x00
|
||||
/*002*/ BYTE rflags; /* Flags */
|
||||
#define QIB_RFLAGS_QEBSM 0x80
|
||||
/*003*/ BYTE ac; /* Adapter Characteristics */
|
||||
#define QIB_AC_PCI 0x40
|
||||
/*004*/ FWORD resv004;
|
||||
/*008*/ DBLWRD isliba; /* Input SLIB queue address */
|
||||
/*010*/ DBLWRD osliba; /* Output SLIB queue address */
|
||||
/*018*/ FWORD resv018;
|
||||
/*01C*/ FWORD resv01c;
|
||||
/*020*/ BYTE ebcnam[8]; /* Adapter ID in EBCDIC */
|
||||
/*028*/ BYTE resv028[88];
|
||||
/*080*/ BYTE parm[128]; /* Model Dependent Parameters */
|
||||
} QDIO_QIB;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List Information Block (SLIB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_SLIB {
|
||||
/*000*/ DBLWRD nsliba; /* Next SLIB in queue */
|
||||
/*008*/ DBLWRD sla; /* Storage List Address */
|
||||
/*010*/ DBLWRD slsba; /* Storage List State Block Address */
|
||||
/*018*/ BYTE resv018[1000];
|
||||
/*400*/ DBLWRD slibe[128]; /* Storage List Info Block Entry */
|
||||
} QDIO_SLIB;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List (SL) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_SL {
|
||||
/*000*/ DBLWRD sbala[128]; /* Storage Block Address List address*/
|
||||
} QDIO_SL;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage Block Address List Entry (SBALE) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_SBALE {
|
||||
/*000*/ BYTE flags[4]; /* Flags */
|
||||
#define SBAL_FLAGS0_LAST_ENTRY 0x40
|
||||
#define SBAL_FLAGS0_CONTIGUOUS 0x20
|
||||
#define SBAL_FLAGS0_FRAG_MASK 0x0C
|
||||
#define SBAL_FLAGS0_FRAG_FIRST 0x04
|
||||
#define SBAL_FLAGS0_FRAG_MIDDLE 0x08
|
||||
#define SBAL_FLAGS0_FRAG_LAST 0x0C
|
||||
#define SBAL_FLAGS1_PCI_REQ 0x40
|
||||
/*004*/ FWORD length; /* Storage length */
|
||||
/*008*/ DBLWRD addr; /* Storage Address */
|
||||
} QDIO_SBALE;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage Block Address List (SBAL) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_SBAL {
|
||||
/*000*/ QDIO_SBALE sbale[16]; /* Storage Block Address List entry */
|
||||
} QDIO_SBAL;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List State Block (SLSB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_SLSB {
|
||||
/*000*/ BYTE slsbe[128]; /* Storage Block Address List entry */
|
||||
#define SLSBE_OWNER 0xC0 /* Owner Mask */
|
||||
#define SLSBE_OWNER_OS 0x80 /* Control Program is owner */
|
||||
#define SLSBE_OWNER_CU 0x40 /* Control Unit is owner */
|
||||
#define SLSBE_TYPE 0x20 /* Buffer type mask */
|
||||
#define SLSBE_TYPE_INPUT 0x00 /* Input Buffer */
|
||||
#define SLSBE_TYPE_OUTPUT 0x20 /* Output Buffer */
|
||||
#define SLSBE_VALID 0x10 /* Buffer Valid */
|
||||
#define SLSBE_STATE 0x0F /* Buffer state mask */
|
||||
#define SLSBE_STATE_NOTINIT 0x00 /* Not initialised */
|
||||
#define SLSBE_STATE_EMPTY 0x01 /* Buffer empty */
|
||||
#define SLSBE_STATE_PRIMED 0x02 /* Buffer ready */
|
||||
#define SLSBE_STATE_PENDING 0x03 /* Buffer pending */
|
||||
#define SLSBE_STATE_HALTED 0x0E /* I/O halted */
|
||||
#define SLSBE_STATE_ERROR 0x0F /* I/O Error */
|
||||
#define SLSBE_ERROR 0xFF /* Addressing Error */
|
||||
|
||||
#define SLSBE_OUTPUT_PRIMED ( 0 \
|
||||
| SLSBE_OWNER_CU \
|
||||
| SLSBE_TYPE_OUTPUT \
|
||||
| SLSBE_STATE_PRIMED \
|
||||
)
|
||||
#define SLSBE_OUTPUT_COMPLETED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_OUTPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_EMPTY ( 0 \
|
||||
| SLSBE_OWNER_CU \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_ACKED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_COMPLETED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_PRIMED \
|
||||
)
|
||||
} QDIO_SLSB;
|
||||
|
||||
|
||||
#endif /*!defined(_QDIO_H)*/
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "devtype.h"
|
||||
#include "chsc.h"
|
||||
#include "qeth.h"
|
||||
#include "mpc.h"
|
||||
#include "tuntap.h"
|
||||
|
||||
#define QETH_DEBUG
|
||||
@@ -163,10 +164,6 @@ static BYTE qeth_immed_commands [256] =
|
||||
};
|
||||
|
||||
|
||||
#if defined(OSA_FIXED_DEVICE_ORDER)
|
||||
static const char *osa_devtyp[] = { "Read", "Write", "Data" };
|
||||
#endif /*defined(OSA_FIXED_DEVICE_ORDER)*/
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* STORCHK macro: check storage access & update ref & change bits */
|
||||
/*-------------------------------------------------------------------*/
|
||||
@@ -335,12 +332,12 @@ static inline void clr_dsci(DEVBLK *dev, BYTE bits)
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Adapter Command Routine */
|
||||
/*-------------------------------------------------------------------*/
|
||||
static void osa_adapter_cmd(DEVBLK *dev, OSA_TH *req_th)
|
||||
static void osa_adapter_cmd(DEVBLK *dev, MPC_TH *req_th)
|
||||
{
|
||||
OSA_GRP *grp = (OSA_GRP*)dev->group->grp_data;
|
||||
OSA_TH *th = (OSA_TH*)grp->rspbf;
|
||||
OSA_RRH *rrh;
|
||||
OSA_PH *ph;
|
||||
MPC_TH *th = (MPC_TH*)grp->rspbf;
|
||||
MPC_RRH *rrh;
|
||||
MPC_PH *ph;
|
||||
U16 offset;
|
||||
U16 rqsize;
|
||||
U32 ackseq;
|
||||
@@ -353,14 +350,14 @@ U32 ackseq;
|
||||
if(offset > 0x400)
|
||||
return;
|
||||
DUMP(dev, "TH",th,offset);
|
||||
rrh = (OSA_RRH*)((BYTE*)th+offset);
|
||||
rrh = (MPC_RRH*)((BYTE*)th+offset);
|
||||
|
||||
FETCH_HW(offset,rrh->pduhoff);
|
||||
if(offset > 0x400)
|
||||
return;
|
||||
DUMP(dev, "RRH",rrh,offset);
|
||||
ph = (OSA_PH*)((BYTE*)rrh+offset);
|
||||
DUMP(dev, "PH",ph,sizeof(OSA_PH));
|
||||
ph = (MPC_PH*)((BYTE*)rrh+offset);
|
||||
DUMP(dev, "PH",ph,sizeof(MPC_PH));
|
||||
|
||||
/* Update ACK Sequence Number */
|
||||
FETCH_FW(ackseq,rrh->ackseq);
|
||||
@@ -371,16 +368,16 @@ U32 ackseq;
|
||||
|
||||
case RRH_TYPE_CM:
|
||||
{
|
||||
OSA_PDU *pdu = (OSA_PDU*)(ph+1);
|
||||
DUMP(dev, "PDU CM",pdu,sizeof(OSA_PDU));
|
||||
MPC_PDU *pdu = (MPC_PDU*)(ph+1);
|
||||
DUMP(dev, "PDU CM",pdu,sizeof(MPC_PDU));
|
||||
UNREFERENCED(pdu);
|
||||
}
|
||||
break;
|
||||
|
||||
case RRH_TYPE_ULP:
|
||||
{
|
||||
OSA_PDU *pdu = (OSA_PDU*)(ph+1);
|
||||
DUMP(dev, "PDU ULP",pdu,sizeof(OSA_PDU));
|
||||
MPC_PDU *pdu = (MPC_PDU*)(ph+1);
|
||||
DUMP(dev, "PDU ULP",pdu,sizeof(MPC_PDU));
|
||||
|
||||
switch(pdu->tgt) {
|
||||
|
||||
@@ -464,18 +461,18 @@ U32 ackseq;
|
||||
|
||||
case RRH_TYPE_IPA:
|
||||
{
|
||||
OSA_IPA *ipa = (OSA_IPA*)(ph+1);
|
||||
DUMP(dev, "IPA",ipa,sizeof(OSA_IPA));
|
||||
MPC_IPA *ipa = (MPC_IPA*)(ph+1);
|
||||
DUMP(dev, "IPA",ipa,sizeof(MPC_IPA));
|
||||
FETCH_HW(offset,ph->pdulen);
|
||||
if(offset > 0x400)
|
||||
return;
|
||||
DUMP(dev, "REQ",(ipa+1),offset-sizeof(OSA_IPA));
|
||||
DUMP(dev, "REQ",(ipa+1),offset-sizeof(MPC_IPA));
|
||||
|
||||
switch(ipa->cmd) {
|
||||
|
||||
case IPA_CMD_SETADPPARMS:
|
||||
{
|
||||
OSA_IPA_SAP *sap = (OSA_IPA_SAP*)(ipa+1);
|
||||
MPC_IPA_SAP *sap = (MPC_IPA_SAP*)(ipa+1);
|
||||
U32 cmd;
|
||||
|
||||
FETCH_FW(cmd,sap->cmd);
|
||||
@@ -563,7 +560,7 @@ U32 ackseq;
|
||||
|
||||
case IPA_CMD_SETVMAC:
|
||||
{
|
||||
OSA_IPA_MAC *ipa_mac = (OSA_IPA_MAC*)(ipa+1);
|
||||
MPC_IPA_MAC *ipa_mac = (MPC_IPA_MAC*)(ipa+1);
|
||||
|
||||
DBGTRC(dev, "Set VMAC\n");
|
||||
if(register_mac(ipa_mac->macaddr,MAC_TYPE_UNICST,grp))
|
||||
@@ -575,7 +572,7 @@ U32 ackseq;
|
||||
|
||||
case IPA_CMD_DELVMAC:
|
||||
{
|
||||
OSA_IPA_MAC *ipa_mac = (OSA_IPA_MAC*)(ipa+1);
|
||||
MPC_IPA_MAC *ipa_mac = (MPC_IPA_MAC*)(ipa+1);
|
||||
|
||||
DBGTRC(dev, "Del VMAC\n");
|
||||
if(deregister_mac(ipa_mac->macaddr,MAC_TYPE_UNICST,grp))
|
||||
@@ -587,7 +584,7 @@ U32 ackseq;
|
||||
|
||||
case IPA_CMD_SETGMAC:
|
||||
{
|
||||
OSA_IPA_MAC *ipa_mac = (OSA_IPA_MAC*)(ipa+1);
|
||||
MPC_IPA_MAC *ipa_mac = (MPC_IPA_MAC*)(ipa+1);
|
||||
|
||||
DBGTRC(dev, "Set GMAC\n");
|
||||
if(register_mac(ipa_mac->macaddr,MAC_TYPE_MLTCST,grp))
|
||||
@@ -599,7 +596,7 @@ U32 ackseq;
|
||||
|
||||
case IPA_CMD_DELGMAC:
|
||||
{
|
||||
OSA_IPA_MAC *ipa_mac = (OSA_IPA_MAC*)(ipa+1);
|
||||
MPC_IPA_MAC *ipa_mac = (MPC_IPA_MAC*)(ipa+1);
|
||||
|
||||
DBGTRC(dev, "Del GMAC\n");
|
||||
if(deregister_mac(ipa_mac->macaddr,MAC_TYPE_MLTCST,grp))
|
||||
@@ -679,8 +676,8 @@ U32 ackseq;
|
||||
|
||||
ipa->iid = IPA_IID_ADAPTER | IPA_IID_REPLY;
|
||||
|
||||
DUMP(dev, "IPA_HDR RSP",ipa,sizeof(OSA_IPA));
|
||||
DUMP(dev, "IPA_REQ RSP",(ipa+1),offset-sizeof(OSA_IPA));
|
||||
DUMP(dev, "IPA_HDR RSP",ipa,sizeof(MPC_IPA));
|
||||
DUMP(dev, "IPA_REQ RSP",(ipa+1),offset-sizeof(MPC_IPA));
|
||||
}
|
||||
/* end case RRH_TYPE_IPA: */
|
||||
break;
|
||||
@@ -699,40 +696,23 @@ U32 ackseq;
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Device Command Routine */
|
||||
/*-------------------------------------------------------------------*/
|
||||
static void osa_device_cmd(DEVBLK *dev, OSA_IEA *iea)
|
||||
static void osa_device_cmd(DEVBLK *dev, MPC_IEA *iea)
|
||||
{
|
||||
OSA_GRP *grp = (OSA_GRP*)dev->group->grp_data;
|
||||
OSA_IEAR *iear = (OSA_IEAR*)grp->rspbf;
|
||||
MPC_IEAR *iear = (MPC_IEAR*)grp->rspbf;
|
||||
U16 reqtype;
|
||||
#if defined(OSA_FIXED_DEVICE_ORDER)
|
||||
U16 datadev;
|
||||
#endif /*defined(OSA_FIXED_DEVICE_ORDER)*/
|
||||
|
||||
memset(iear, 0, sizeof(OSA_IEAR));
|
||||
memset(iear, 0, sizeof(MPC_IEAR));
|
||||
|
||||
FETCH_HW(reqtype, iea->type);
|
||||
|
||||
switch(reqtype) {
|
||||
|
||||
case IDX_ACT_TYPE_READ:
|
||||
#if defined(OSA_FIXED_DEVICE_ORDER)
|
||||
FETCH_HW(datadev, iea->datadev);
|
||||
if(!IS_OSA_READ_DEVICE(dev))
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE READ Invalid for %s Device %4.4x\n"),osa_devtyp[dev->member],dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else if(datadev != dev->group->memdev[OSA_DATA_DEVICE]->devnum)
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE READ Invalid OSA Data Device %d for %s Device %4.4x\n"),datadev,osa_devtyp[dev->member],dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else
|
||||
#endif /*defined(OSA_FIXED_DEVICE_ORDER)*/
|
||||
if((iea->port & IDX_ACT_PORT_MASK) != OSA_PORTNO)
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE READ Invalid OSA Port %d for %s Device %4.4x\n"),(iea->port & IDX_ACT_PORT_MASK),dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
dev->qdio.idxstate = MPC_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -740,29 +720,15 @@ U16 datadev;
|
||||
iear->flags = IDX_RSP_FLAGS_NOPORTREQ;
|
||||
STORE_HW(iear->flevel, 0x0201);
|
||||
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_ACTIVE;
|
||||
dev->qdio.idxstate = MPC_IDX_STATE_ACTIVE;
|
||||
}
|
||||
break;
|
||||
|
||||
case IDX_ACT_TYPE_WRITE:
|
||||
#if defined(OSA_FIXED_DEVICE_ORDER)
|
||||
FETCH_HW(datadev, iea->datadev);
|
||||
if(!IS_OSA_WRITE_DEVICE(dev))
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE WRITE Invalid for %s Device %4.4x\n"),osa_devtyp[dev->member],dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else if(datadev != dev->group->memdev[OSA_DATA_DEVICE]->devnum)
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE WRITE Invalid OSA Data Device %d for %s Device %4.4x\n"),datadev,osa_devtyp[dev->member],dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else
|
||||
#endif /*defined(OSA_FIXED_DEVICE_ORDER)*/
|
||||
if((iea->port & IDX_ACT_PORT_MASK) != OSA_PORTNO)
|
||||
{
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE WRITE Invalid OSA Port %d for device %4.4x\n"),(iea->port & IDX_ACT_PORT_MASK),dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
dev->qdio.idxstate = MPC_IDX_STATE_INACTIVE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -770,17 +736,17 @@ U16 datadev;
|
||||
iear->flags = IDX_RSP_FLAGS_NOPORTREQ;
|
||||
STORE_HW(iear->flevel, 0x0201);
|
||||
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_ACTIVE;
|
||||
dev->qdio.idxstate = MPC_IDX_STATE_ACTIVE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
DBGTRC(dev, _("QETH: IDX ACTIVATE Invalid Request %4.4x for device %4.4x\n"),reqtype,dev->devnum);
|
||||
dev->qdio.idxstate = OSA_IDX_STATE_INACTIVE;
|
||||
dev->qdio.idxstate = MPC_IDX_STATE_INACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
grp->rspsz = sizeof(OSA_IEAR);
|
||||
grp->rspsz = sizeof(MPC_IEAR);
|
||||
}
|
||||
|
||||
|
||||
@@ -830,17 +796,17 @@ int nobuff = 1;
|
||||
if(dev->qdio.i_qmask & (0x80000000 >> iq))
|
||||
{
|
||||
int ib = dev->qdio.i_bpos[iq];
|
||||
OSA_SLSB *slsb;
|
||||
QDIO_SLSB *slsb;
|
||||
int mb = 128;
|
||||
slsb = (OSA_SLSB*)(dev->mainstor + dev->qdio.i_slsbla[iq]);
|
||||
slsb = (QDIO_SLSB*)(dev->mainstor + dev->qdio.i_slsbla[iq]);
|
||||
|
||||
while(mb--)
|
||||
if(slsb->slsbe[ib] == SLSBE_INPUT_EMPTY)
|
||||
{
|
||||
OSA_SL *sl = (OSA_SL*)(dev->mainstor + dev->qdio.i_sla[iq]);
|
||||
QDIO_SL *sl = (QDIO_SL*)(dev->mainstor + dev->qdio.i_sla[iq]);
|
||||
U64 sa; U32 len; BYTE *buf;
|
||||
U64 la;
|
||||
OSA_SBAL *sbal;
|
||||
QDIO_SBAL *sbal;
|
||||
int olen = 0; int tlen = 0;
|
||||
int ns;
|
||||
int mactype = 0;
|
||||
@@ -848,7 +814,7 @@ int nobuff = 1;
|
||||
DBGTRC(dev, _("Input Queue(%d) Buffer(%d)\n"),iq,ib);
|
||||
|
||||
FETCH_DW(sa,sl->sbala[ib]);
|
||||
if(STORCHK(sa,sizeof(OSA_SBAL)-1,dev->qdio.i_slk[iq],STORKEY_REF,dev))
|
||||
if(STORCHK(sa,sizeof(QDIO_SBAL)-1,dev->qdio.i_slk[iq],STORKEY_REF,dev))
|
||||
{
|
||||
slsb->slsbe[ib] = SLSBE_ERROR;
|
||||
STORAGE_KEY(dev->qdio.i_slsbla[iq], dev) |= (STORKEY_REF|STORKEY_CHANGE);
|
||||
@@ -859,7 +825,7 @@ int nobuff = 1;
|
||||
DBGTRC(dev, _("STORCHK ERROR sa(%llx), key(%2.2x)\n"),sa,dev->qdio.i_slk[iq]);
|
||||
return;
|
||||
}
|
||||
sbal = (OSA_SBAL*)(dev->mainstor + sa);
|
||||
sbal = (QDIO_SBAL*)(dev->mainstor + sa);
|
||||
|
||||
for(ns = 0; ns < 16; ns++)
|
||||
{
|
||||
@@ -1015,23 +981,23 @@ int mq = dev->qdio.o_qcnt;
|
||||
if(dev->qdio.o_qmask & (0x80000000 >> oq))
|
||||
{
|
||||
int ob = dev->qdio.o_bpos[oq];
|
||||
OSA_SLSB *slsb;
|
||||
QDIO_SLSB *slsb;
|
||||
int mb = 128;
|
||||
slsb = (OSA_SLSB*)(dev->mainstor + dev->qdio.o_slsbla[oq]);
|
||||
slsb = (QDIO_SLSB*)(dev->mainstor + dev->qdio.o_slsbla[oq]);
|
||||
|
||||
while(mb--)
|
||||
if(slsb->slsbe[ob] == SLSBE_OUTPUT_PRIMED)
|
||||
{
|
||||
OSA_SL *sl = (OSA_SL*)(dev->mainstor + dev->qdio.o_sla[oq]);
|
||||
QDIO_SL *sl = (QDIO_SL*)(dev->mainstor + dev->qdio.o_sla[oq]);
|
||||
U64 sa; U32 len; BYTE *buf;
|
||||
U64 la;
|
||||
OSA_SBAL *sbal;
|
||||
QDIO_SBAL *sbal;
|
||||
int ns;
|
||||
|
||||
DBGTRC(dev, _("Output Queue(%d) Buffer(%d)\n"),oq,ob);
|
||||
|
||||
FETCH_DW(sa,sl->sbala[ob]);
|
||||
if(STORCHK(sa,sizeof(OSA_SBAL)-1,dev->qdio.o_slk[oq],STORKEY_REF,dev))
|
||||
if(STORCHK(sa,sizeof(QDIO_SBAL)-1,dev->qdio.o_slk[oq],STORKEY_REF,dev))
|
||||
{
|
||||
slsb->slsbe[ob] = SLSBE_ERROR;
|
||||
STORAGE_KEY(dev->qdio.o_slsbla[oq], dev) |= (STORKEY_REF|STORKEY_CHANGE);
|
||||
@@ -1042,7 +1008,7 @@ int mq = dev->qdio.o_qcnt;
|
||||
DBGTRC(dev, _("STORCHK ERROR sa(%llx), key(%2.2x)\n"),sa,dev->qdio.o_slk[oq]);
|
||||
return;
|
||||
}
|
||||
sbal = (OSA_SBAL*)(dev->mainstor + sa);
|
||||
sbal = (QDIO_SBAL*)(dev->mainstor + sa);
|
||||
|
||||
for(ns = 0; ns < 16; ns++)
|
||||
{
|
||||
@@ -1285,7 +1251,7 @@ char qdiostat[80] = {0};
|
||||
snprintf( buffer, buflen, "QDIO %s%s%sIO[%" I64_FMT "u]"
|
||||
, (dev->group->acount == OSA_GROUP_SIZE) ? "" : "*Incomplete "
|
||||
, (dev->scsw.flag2 & SCSW2_Q) ? qdiostat : ""
|
||||
, (dev->qdio.idxstate == OSA_IDX_STATE_INACTIVE) ? "" : "IDX "
|
||||
, (dev->qdio.idxstate == MPC_IDX_STATE_INACTIVE) ? "" : "IDX "
|
||||
, dev->excps
|
||||
);
|
||||
|
||||
@@ -1467,7 +1433,7 @@ int num; /* Number of bytes to move */
|
||||
/* WRITE */
|
||||
/*---------------------------------------------------------------*/
|
||||
{
|
||||
OSA_HDR *hdr = (OSA_HDR*)iobuf;
|
||||
MPC_HDR *hdr = (MPC_HDR*)iobuf;
|
||||
U16 ddc;
|
||||
|
||||
if(!grp->rspsz)
|
||||
@@ -1476,9 +1442,9 @@ int num; /* Number of bytes to move */
|
||||
|
||||
obtain_lock(&grp->qlock);
|
||||
if(ddc == IDX_ACT_DDC)
|
||||
osa_device_cmd(dev,(OSA_IEA*)iobuf);
|
||||
osa_device_cmd(dev,(MPC_IEA*)iobuf);
|
||||
else
|
||||
osa_adapter_cmd(dev, (OSA_TH*)iobuf);
|
||||
osa_adapter_cmd(dev, (MPC_TH*)iobuf);
|
||||
release_lock(&grp->qlock);
|
||||
|
||||
signal_condition(&grp->qcond);
|
||||
@@ -1517,7 +1483,7 @@ int num; /* Number of bytes to move */
|
||||
}
|
||||
else
|
||||
{
|
||||
if(dev->qdio.idxstate == OSA_IDX_STATE_ACTIVE)
|
||||
if(dev->qdio.idxstate == MPC_IDX_STATE_ACTIVE)
|
||||
{
|
||||
wait_condition(&grp->qcond, &grp->qlock);
|
||||
if(grp->rspsz)
|
||||
@@ -1686,8 +1652,8 @@ int num; /* Number of bytes to move */
|
||||
/* ESTABLISH QUEUES */
|
||||
/*---------------------------------------------------------------*/
|
||||
{
|
||||
OSA_QDR *qdr = (OSA_QDR*)iobuf;
|
||||
OSA_QDES0 *qdes;
|
||||
QDIO_QDR *qdr = (QDIO_QDR*)iobuf;
|
||||
QDIO_QDES0 *qdes;
|
||||
int accerr;
|
||||
int i;
|
||||
|
||||
@@ -1697,9 +1663,9 @@ int num; /* Number of bytes to move */
|
||||
FETCH_DW(dev->qdio.qiba,qdr->qiba);
|
||||
dev->qdio.qibk = qdr->qkey & 0xF0;
|
||||
|
||||
if(!(accerr = STORCHK(dev->qdio.qiba,sizeof(OSA_QIB)-1,dev->qdio.qibk,STORKEY_CHANGE,dev)))
|
||||
if(!(accerr = STORCHK(dev->qdio.qiba,sizeof(QDIO_QIB)-1,dev->qdio.qibk,STORKEY_CHANGE,dev)))
|
||||
{
|
||||
OSA_QIB *qib = (OSA_QIB*)(dev->mainstor + dev->qdio.qiba);
|
||||
QDIO_QIB *qib = (QDIO_QIB*)(dev->mainstor + dev->qdio.qiba);
|
||||
qib->ac |= QIB_AC_PCI; // Incidate PCI on output is supported
|
||||
#if defined(_FEATURE_QEBSM)
|
||||
if(FACILITY_ENABLED_DEV(QEBSM))
|
||||
@@ -1719,10 +1685,10 @@ int num; /* Number of bytes to move */
|
||||
dev->qdio.i_sbalk[i] = qdes->keyp2 & 0xF0;
|
||||
dev->qdio.i_slsblk[i] = (qdes->keyp2 << 4) & 0xF0;
|
||||
|
||||
accerr |= STORCHK(dev->qdio.i_slsbla[i],sizeof(OSA_SLSB)-1,dev->qdio.i_slsblk[i],STORKEY_CHANGE,dev);
|
||||
accerr |= STORCHK(dev->qdio.i_sla[i],sizeof(OSA_SL)-1,dev->qdio.i_slk[i],STORKEY_REF,dev);
|
||||
accerr |= STORCHK(dev->qdio.i_slsbla[i],sizeof(QDIO_SLSB)-1,dev->qdio.i_slsblk[i],STORKEY_CHANGE,dev);
|
||||
accerr |= STORCHK(dev->qdio.i_sla[i],sizeof(QDIO_SL)-1,dev->qdio.i_slk[i],STORKEY_REF,dev);
|
||||
|
||||
qdes = (OSA_QDES0*)((BYTE*)qdes+(qdr->iqdsz<<2));
|
||||
qdes = (QDIO_QDES0*)((BYTE*)qdes+(qdr->iqdsz<<2));
|
||||
}
|
||||
|
||||
for(i = 0; i < dev->qdio.o_qcnt; i++)
|
||||
@@ -1735,16 +1701,16 @@ int num; /* Number of bytes to move */
|
||||
dev->qdio.o_sbalk[i] = qdes->keyp2 & 0xF0;
|
||||
dev->qdio.o_slsblk[i] = (qdes->keyp2 << 4) & 0xF0;
|
||||
|
||||
accerr |= STORCHK(dev->qdio.o_slsbla[i],sizeof(OSA_SLSB)-1,dev->qdio.o_slsblk[i],STORKEY_CHANGE,dev);
|
||||
accerr |= STORCHK(dev->qdio.o_sla[i],sizeof(OSA_SL)-1,dev->qdio.o_slk[i],STORKEY_REF,dev);
|
||||
accerr |= STORCHK(dev->qdio.o_slsbla[i],sizeof(QDIO_SLSB)-1,dev->qdio.o_slsblk[i],STORKEY_CHANGE,dev);
|
||||
accerr |= STORCHK(dev->qdio.o_sla[i],sizeof(QDIO_SL)-1,dev->qdio.o_slk[i],STORKEY_REF,dev);
|
||||
|
||||
qdes = (OSA_QDES0*)((BYTE*)qdes+(qdr->oqdsz<<2));
|
||||
qdes = (QDIO_QDES0*)((BYTE*)qdes+(qdr->oqdsz<<2));
|
||||
}
|
||||
|
||||
/* Calculate residual byte count */
|
||||
num = (count < sizeof(OSA_QDR)) ? count : sizeof(OSA_QDR);
|
||||
num = (count < sizeof(QDIO_QDR)) ? count : sizeof(QDIO_QDR);
|
||||
*residual = count - num;
|
||||
if (count < sizeof(OSA_QDR)) *more = 1;
|
||||
if (count < sizeof(QDIO_QDR)) *more = 1;
|
||||
|
||||
if(!accerr)
|
||||
{
|
||||
|
||||
@@ -29,29 +29,6 @@
|
||||
#define OSA_PORTNO 0
|
||||
|
||||
|
||||
#if defined(OSA_FIXED_DEVICE_ORDER)
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA Relative Device Numbers */
|
||||
/*-------------------------------------------------------------------*/
|
||||
#define OSA_READ_DEVICE 0
|
||||
#define OSA_WRITE_DEVICE 1
|
||||
#define OSA_DATA_DEVICE 2
|
||||
|
||||
|
||||
#define _IS_OSA_TYPE_DEVICE(_dev, _type) \
|
||||
((_dev)->member == (_type))
|
||||
|
||||
#define IS_OSA_READ_DEVICE(_dev) \
|
||||
_IS_OSA_TYPE_DEVICE((_dev),OSA_READ_DEVICE)
|
||||
|
||||
#define IS_OSA_WRITE_DEVICE(_dev) \
|
||||
_IS_OSA_TYPE_DEVICE((_dev),OSA_WRITE_DEVICE)
|
||||
|
||||
#define IS_OSA_DATA_DEVICE(_dev) \
|
||||
_IS_OSA_TYPE_DEVICE((_dev),OSA_DATA_DEVICE)
|
||||
#endif /*defined(OSA_FIXED_DEVICE_ORDER)*/
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Number of Devices per OSA Adapter */
|
||||
/*-------------------------------------------------------------------*/
|
||||
@@ -70,7 +47,7 @@
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Convert Subchannel Token to IO ID (LCSS & SSID) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
#if 1 /* 1 means token != ssid, or 0 means token == ioid */
|
||||
#if 1 /* 1 means token != ioid, or 0 means token == ioid */
|
||||
#define TKN2IOID(_token) (~(_token))
|
||||
#define IOID2TKN(_ioid) (~(_ioid))
|
||||
#else
|
||||
@@ -79,17 +56,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct _OSA_MAC {
|
||||
BYTE addr[6];
|
||||
int type;
|
||||
#define MAC_TYPE_NONE 0x00
|
||||
#define MAC_TYPE_BRDCST 0x01
|
||||
#define MAC_TYPE_UNICST 0x02
|
||||
#define MAC_TYPE_MLTCST 0x04
|
||||
#define MAC_TYPE_ANY 0x0F
|
||||
} OSA_MAC;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA Node Element Descriptor */
|
||||
/*-------------------------------------------------------------------*/
|
||||
@@ -121,6 +87,7 @@ typedef struct _NED {
|
||||
#define NODE_CLMT 8
|
||||
#define NODE_CCTCA 9
|
||||
#define NODE_CSWIT 10
|
||||
#define NODE_CCTRL 11
|
||||
/*003*/ BYTE ua;
|
||||
/*004*/ BYTE devtype[6];
|
||||
/*00A*/ BYTE model[3];
|
||||
@@ -149,57 +116,24 @@ typedef struct _NED {
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA Device Structure */
|
||||
/* OSA CCW Assignments */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _QDIO_DEV {
|
||||
unsigned rxcnt; /* Receive count */
|
||||
unsigned txcnt; /* Transmit count */
|
||||
#define OSA_RCD 0xFA
|
||||
#define OSA_EQ 0x1B
|
||||
#define OSA_AQ 0x1F
|
||||
#define OSA_SII 0x81
|
||||
#define OSA_RNI 0x82
|
||||
|
||||
int idxstate; /* IDX state */
|
||||
#define OSA_IDX_STATE_INACTIVE 0x00
|
||||
#define OSA_IDX_STATE_ACTIVE 0x01
|
||||
|
||||
int thinint; /* Thin Interrupts on PCI */
|
||||
|
||||
int i_qcnt; /* Input Queue Count */
|
||||
int i_qpos; /* Current Queue Position */
|
||||
int i_bpos[QDIO_MAXQ]; /* Current Buffer Position */
|
||||
|
||||
int o_qcnt; /* Output Queue Count */
|
||||
int o_qpos; /* Current Queue Position */
|
||||
int o_bpos[QDIO_MAXQ]; /* Current Buffer Position */
|
||||
|
||||
U32 i_qmask; /* Input Queue Mask */
|
||||
U32 o_qmask; /* Output Queue Mask */
|
||||
|
||||
BYTE i_slibk[QDIO_MAXQ]; /* Input SLIB Key */
|
||||
BYTE i_slk[QDIO_MAXQ]; /* Input Storage List Key */
|
||||
BYTE i_sbalk[QDIO_MAXQ]; /* Input SBAL Key */
|
||||
BYTE i_slsblk[QDIO_MAXQ]; /* Input SLSB Key */
|
||||
|
||||
U64 i_sliba[QDIO_MAXQ]; /* Input SLIB Address */
|
||||
U64 i_sla[QDIO_MAXQ]; /* Input Storage List Address */
|
||||
U64 i_slsbla[QDIO_MAXQ]; /* Input SLSB Address */
|
||||
|
||||
BYTE o_slibk[QDIO_MAXQ]; /* Output SLIB Key */
|
||||
BYTE o_slk[QDIO_MAXQ]; /* Output Storage List Key */
|
||||
BYTE o_sbalk[QDIO_MAXQ]; /* Output SBAL Key */
|
||||
BYTE o_slsblk[QDIO_MAXQ]; /* Output SLSB Key */
|
||||
|
||||
U64 o_sliba[QDIO_MAXQ]; /* Output SLIB Address */
|
||||
U64 o_sla[QDIO_MAXQ]; /* Output Storage List Address */
|
||||
U64 o_slsbla[QDIO_MAXQ]; /* Output SLSB Address */
|
||||
|
||||
BYTE qibk; /* Queue Information Block Key */
|
||||
U64 qiba; /* Queue Information Block Address */
|
||||
|
||||
U64 alsi; /* Adapter Local Summ Indicator */
|
||||
#define ALSI_ERROR 0x80 /* ZZ TO BE CONFIRMED */
|
||||
U64 dsci; /* Device status change Indicator */
|
||||
#define DSCI_IOCOMP 0x01 /* ZZ TO BE CONFIRMED */
|
||||
BYTE ks; /* alsi storage key */
|
||||
BYTE kc; /* dsci storage key */
|
||||
} QDIO_DEV;
|
||||
typedef struct _OSA_MAC {
|
||||
BYTE addr[6];
|
||||
int type;
|
||||
#define MAC_TYPE_NONE 0x00
|
||||
#define MAC_TYPE_BRDCST 0x01
|
||||
#define MAC_TYPE_UNICST 0x02
|
||||
#define MAC_TYPE_MLTCST 0x04
|
||||
#define MAC_TYPE_ANY 0x0F
|
||||
} OSA_MAC;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
@@ -237,516 +171,6 @@ typedef struct _OSA_GRP {
|
||||
} OSA_GRP;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA CCW Assignments */
|
||||
/*-------------------------------------------------------------------*/
|
||||
#define OSA_RCD 0xFA
|
||||
#define OSA_EQ 0x1B
|
||||
#define OSA_AQ 0x1F
|
||||
#define OSA_SII 0x81
|
||||
#define OSA_RNI 0x82
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Descriptor Entry (Format 0) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_QDES0 {
|
||||
/*000*/ DBLWRD sliba; /* Storage List Info Block Address */
|
||||
/*008*/ DBLWRD sla; /* Storage List Address */
|
||||
/*010*/ DBLWRD slsba; /* Storage List State Block Address */
|
||||
/*018*/ FWORD resv018;
|
||||
/*01C*/ BYTE keyp1; /* Access keys for SLIB and SL */
|
||||
#define QDES_KEYP1_A_SLIB 0xF0
|
||||
#define QDES_KEYP1_A_SL 0x0F
|
||||
/*01D*/ BYTE keyp2; /* Access keys for SBALs ad SLSB */
|
||||
#define QDES_KEYP2_A_SBAL 0xF0
|
||||
#define QDES_KEYP2_A_SLSB 0x0F
|
||||
/*01E*/ HWORD resv01e;
|
||||
} OSA_QDES0;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Descriptor Record (QDR) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_QDR {
|
||||
/*000*/ BYTE qfmt; /* Queue Format */
|
||||
/*001*/ BYTE pfmt; /* Model Dependent Parameter Format */
|
||||
/*002*/ BYTE resv002;
|
||||
/*003*/ BYTE ac; /* Adapter Characteristics */
|
||||
/*004*/ BYTE resv004;
|
||||
/*005*/ BYTE iqdcnt; /* Input Queue Descriptor Count */
|
||||
/*006*/ BYTE resv006;
|
||||
/*007*/ BYTE oqdcnt; /* Output Queue Descriptor Count */
|
||||
/*008*/ BYTE resv008;
|
||||
/*009*/ BYTE iqdsz; /* Input Queue Descriptor Size */
|
||||
/*00A*/ BYTE resv00a;
|
||||
/*00B*/ BYTE oqdsz; /* Output Queue Descriptor Size */
|
||||
/*00C*/ FWORD resv00c[9];
|
||||
/*030*/ DBLWRD qiba; /* Queue Information Block Address */
|
||||
/*038*/ FWORD resv038;
|
||||
/*03C*/ BYTE qkey; /* Queue Information Block Key */
|
||||
/*03D*/ BYTE resv03d[3];
|
||||
/*040*/ OSA_QDES0 qdf0[126]; /* Format 0 Queue Descriptors */
|
||||
} OSA_QDR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Queue Information Block (QIB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_QIB {
|
||||
/*000*/ BYTE qfmt; /* Queue Format */
|
||||
/*001*/ BYTE pfmt; /* Parameter Format */
|
||||
#define QID_PFMT_QETH 0x00
|
||||
/*002*/ BYTE rflags; /* Flags */
|
||||
#define QIB_RFLAGS_QEBSM 0x80
|
||||
/*003*/ BYTE ac; /* Adapter Characteristics */
|
||||
#define QIB_AC_PCI 0x40
|
||||
/*004*/ FWORD resv004;
|
||||
/*008*/ DBLWRD isliba; /* Input SLIB queue address */
|
||||
/*010*/ DBLWRD osliba; /* Output SLIB queue address */
|
||||
/*018*/ FWORD resv018;
|
||||
/*01C*/ FWORD resv01c;
|
||||
/*020*/ BYTE ebcnam[8]; /* Adapter ID in EBCDIC */
|
||||
/*028*/ BYTE resv028[88];
|
||||
/*080*/ BYTE parm[128]; /* Model Dependent Parameters */
|
||||
} OSA_QIB;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List Information Block (SLIB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_SLIB {
|
||||
/*000*/ DBLWRD nsliba; /* Next SLIB in queue */
|
||||
/*008*/ DBLWRD sla; /* Storage List Address */
|
||||
/*010*/ DBLWRD slsba; /* Storage List State Block Address */
|
||||
/*018*/ BYTE resv018[1000];
|
||||
/*400*/ DBLWRD slibe[128]; /* Storage List Info Block Entry */
|
||||
} OSA_SLIB;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List (SL) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_SL {
|
||||
/*000*/ DBLWRD sbala[128]; /* Storage Block Address List address*/
|
||||
} OSA_SL;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage Block Address List Entry (SBALE) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_SBALE {
|
||||
/*000*/ BYTE flags[4]; /* Flags */
|
||||
#define SBAL_FLAGS0_LAST_ENTRY 0x40
|
||||
#define SBAL_FLAGS0_CONTIGUOUS 0x20
|
||||
#define SBAL_FLAGS0_FRAG_MASK 0x0C
|
||||
#define SBAL_FLAGS0_FRAG_FIRST 0x04
|
||||
#define SBAL_FLAGS0_FRAG_MIDDLE 0x08
|
||||
#define SBAL_FLAGS0_FRAG_LAST 0x0C
|
||||
#define SBAL_FLAGS1_PCI_REQ 0x40
|
||||
/*004*/ FWORD length; /* Storage length */
|
||||
/*008*/ DBLWRD addr; /* Storage Address */
|
||||
} OSA_SBALE;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage Block Address List (SBAL) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_SBAL {
|
||||
/*000*/ OSA_SBALE sbale[16]; /* Storage Block Address List entry */
|
||||
} OSA_SBAL;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Storage List State Block (SLSB) */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_SLSB {
|
||||
/*000*/ BYTE slsbe[128]; /* Storage Block Address List entry */
|
||||
#define SLSBE_OWNER 0xC0 /* Owner Mask */
|
||||
#define SLSBE_OWNER_OS 0x80 /* Control Program is owner */
|
||||
#define SLSBE_OWNER_CU 0x40 /* Control Unit is owner */
|
||||
#define SLSBE_TYPE 0x20 /* Buffer type mask */
|
||||
#define SLSBE_TYPE_INPUT 0x00 /* Input Buffer */
|
||||
#define SLSBE_TYPE_OUTPUT 0x20 /* Output Buffer */
|
||||
#define SLSBE_VALID 0x10 /* Buffer Valid */
|
||||
#define SLSBE_STATE 0x0F /* Buffer state mask */
|
||||
#define SLSBE_STATE_NOTINIT 0x00 /* Not initialised */
|
||||
#define SLSBE_STATE_EMPTY 0x01 /* Buffer empty */
|
||||
#define SLSBE_STATE_PRIMED 0x02 /* Buffer ready */
|
||||
#define SLSBE_STATE_PENDING 0x03 /* Buffer pending */
|
||||
#define SLSBE_STATE_HALTED 0x0E /* I/O halted */
|
||||
#define SLSBE_STATE_ERROR 0x0F /* I/O Error */
|
||||
#define SLSBE_ERROR 0xFF /* Addressing Error */
|
||||
|
||||
#define SLSBE_OUTPUT_PRIMED ( 0 \
|
||||
| SLSBE_OWNER_CU \
|
||||
| SLSBE_TYPE_OUTPUT \
|
||||
| SLSBE_STATE_PRIMED \
|
||||
)
|
||||
#define SLSBE_OUTPUT_COMPLETED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_OUTPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_EMPTY ( 0 \
|
||||
| SLSBE_OWNER_CU \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_ACKED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_EMPTY \
|
||||
)
|
||||
#define SLSBE_INPUT_COMPLETED ( 0 \
|
||||
| SLSBE_OWNER_OS \
|
||||
| SLSBE_TYPE_INPUT \
|
||||
| SLSBE_STATE_PRIMED \
|
||||
)
|
||||
} OSA_SLSB;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Header for OSA command frames */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_HDR {
|
||||
/*000*/ HWORD resv000; /* */
|
||||
/*002*/ HWORD ddc; /* Device Directed Command */
|
||||
#define IDX_ACT_DDC 0x8000
|
||||
/*004*/ FWORD thsn; /* Transport Header Sequence Number */
|
||||
} OSA_HDR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Identification Exchange Activate */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_IEA {
|
||||
/*000*/ OSA_HDR hdr;
|
||||
/*008*/ HWORD type; /* IDX_ACT type (read or write) */
|
||||
#define IDX_ACT_TYPE_READ 0x1901
|
||||
#define IDX_ACT_TYPE_WRITE 0x1501
|
||||
/*00A*/ BYTE resv00a; /* */
|
||||
#define IDX_ACT_RESV00A 0x01
|
||||
/*00B*/ BYTE port; /* Port number (bit 0 set) */
|
||||
#define IDX_ACT_PORT_MASK 0x3F
|
||||
#define IDX_ACT_PORT_ACTIVATE 0x80
|
||||
#define IDX_ACT_PORT_STANDBY 0x40
|
||||
/*00C*/ FWORD token; /* Issuer token */
|
||||
/*010*/ HWORD flevel; /* Function level */
|
||||
#define IDX_ACT_FLEVEL_READ 0x0000
|
||||
#define IDX_ACT_FLEVEL_WRITE 0xFFFF
|
||||
/*012*/ FWORD uclevel; /* Microcode level */
|
||||
/*016*/ BYTE dataset[8]; /* Portname */
|
||||
/*01E*/ HWORD datadev; /* Data Device Number */
|
||||
/*020*/ BYTE ddcua; /* Data Device Control Unit Address */
|
||||
/*021*/ BYTE ddua; /* Data Device Unit Address */
|
||||
} OSA_IEA;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Identification Exchange Activate Response */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_IEAR {
|
||||
/*000*/ HWORD resv000; /* */
|
||||
/*002*/ BYTE cmd; /* Response code */
|
||||
#define IDX_RSP_CMD_MASK 0xC0
|
||||
#define IDX_RSP_CMD_TERM 0xC0 /* IDX_TERMINATE received */
|
||||
/*003*/ BYTE resv003; /* */
|
||||
/*004*/ BYTE reason; /* Reason code */
|
||||
#define IDX_RSP_REASON_INVPORT 0x22
|
||||
/*005*/ BYTE resv005[3]; /* */
|
||||
/*008*/ BYTE resp; /* Response code */
|
||||
#define IDX_RSP_RESP_MASK 0x03
|
||||
#define IDX_RSP_RESP_OK 0x02
|
||||
/*009*/ BYTE cause; /* Negative response cause code */
|
||||
#define IDX_RSP_CAUSE_INUSE 0x19
|
||||
/*00A*/ BYTE resv010; /* */
|
||||
/*00B*/ BYTE flags; /* Flags */
|
||||
#define IDX_RSP_FLAGS_NOPORTREQ 0x80
|
||||
/*00C*/ FWORD token; /* Issues rm_r token */
|
||||
/*010*/ HWORD flevel; /* Funtion level */
|
||||
/*012*/ FWORD uclevel; /* Microcode level */
|
||||
} OSA_IEAR;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Transport Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_TH {
|
||||
/*000*/ OSA_HDR hdr;
|
||||
/*008*/ HWORD resv008; /* */
|
||||
/*00A*/ HWORD rroff; /* Offset to request/response struct */
|
||||
/*00C*/ HWORD resv00c; /* */
|
||||
/*00E*/ HWORD rrlen; /* Length of request/response struct */
|
||||
/*010*/ FWORD end; /* X'10000001' */
|
||||
} OSA_TH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Request/Response Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_RRH {
|
||||
/*000*/ FWORD resv000; /* */
|
||||
/*004*/ BYTE type; /* Request type */
|
||||
#define RRH_TYPE_CM 0x81
|
||||
#define RRH_TYPE_ULP 0x41
|
||||
#define RRH_TYPE_IPA 0xC1
|
||||
/*005*/ BYTE proto; /* Protocol type */
|
||||
#define RRH_PROTO_L2 0x08
|
||||
#define RRH_PROTO_L3 0x03
|
||||
#define RRH_PROTO_NCP 0x0A
|
||||
#define RRH_PROTO_UNK 0x7E
|
||||
/*006*/ HWORD unkn006; /* X'0001' */
|
||||
/*008*/ FWORD pduseq; /* PDU Sequence Number */
|
||||
/*00C*/ FWORD ackseq; /* ACK Sequence Number */
|
||||
/*010*/ HWORD pduhoff; /* Offset to PDU Header */
|
||||
/*012*/ HWORD pduhlen; /* Length of PDU Header */
|
||||
/*014*/ BYTE resv014; /* */
|
||||
/*015*/ HWORD reqlen; /* Request length */
|
||||
/*017*/ BYTE unkn016; /* X'05' */
|
||||
/*018*/ FWORD token; /* */
|
||||
/*01C*/ FWORD resv020; /* */
|
||||
/*020*/ FWORD resv024; /* */
|
||||
} OSA_RRH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Protocol Data Unit Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_PH {
|
||||
/*000*/ HWORD type; /* */
|
||||
/*002*/ HWORD pdulen; /* Length of request */
|
||||
/*004*/ HWORD resv004; /* */
|
||||
/*006*/ HWORD hdrlen; /* Total Header lenght */
|
||||
} OSA_PH;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Protocol Data Unit */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_PDU {
|
||||
/*000*/ HWORD len; /* */
|
||||
/*002*/ BYTE tgt; /* Command target */
|
||||
#define PDU_TGT_OSA 0x41
|
||||
#define PDU_TGT_QDIO 0x43
|
||||
/*003*/ BYTE cmd; /* Command */
|
||||
#define PDU_CMD_ENABLE 0x02
|
||||
#define PDU_CMD_SETUP 0x04
|
||||
#define PDU_CMD_ACTIVATE 0x60
|
||||
/*004*/ HWORD rlen; /* Request length */
|
||||
/*006*/ HWORD resv006; /* */
|
||||
/*008*/ FWORD resv008; /* */
|
||||
/*00C*/ HWORD ilen; /* */
|
||||
/*00E*/ BYTE unkn00e; /* */
|
||||
/*00F*/ BYTE unkn00f; /* */
|
||||
/*010*/ BYTE proto; /* */
|
||||
#define PDU_PROTO_L2 0x08
|
||||
#define PDU_PROTO_L3 0x03
|
||||
#define PDU_PROTO_NCP 0x0A
|
||||
#define PDU_PROTO_UNK 0x7E
|
||||
// ZZ INCOMPLETE
|
||||
} OSA_PDU;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* IP Assist Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_IPA {
|
||||
/*000*/ BYTE cmd; /* Command */
|
||||
/*001*/ BYTE iid; /* Initator Identifier */
|
||||
#define IPA_IID_HOST 0x00
|
||||
#define IPA_IID_ADAPTER 0x01
|
||||
#define IPA_IID_REPLY 0x80
|
||||
/*002*/ HWORD seq; /* Sequence number */
|
||||
/*004*/ HWORD rc; /* Return Code */
|
||||
#define IPA_RC_OK IPA_RC_SUCCESS
|
||||
/*006*/ BYTE at; /* Adapter Type */
|
||||
#define IPA_AT_ANY 0x01
|
||||
/*007*/ BYTE port; /* OSA Port Number */
|
||||
/*008*/ BYTE lvl; /* OSA Level */
|
||||
#define IPA_LVL_ANY 0x01
|
||||
#define IPA_LVL_L2 0x02
|
||||
/*009*/ BYTE cnt; /* Parameter Count */
|
||||
/*00A*/ HWORD proto; /* Protocol */
|
||||
#define IPA_PROTO_ANY 0x0000
|
||||
#define IPA_PROTO_IPV4 0x0004
|
||||
#define IPA_PROTO_IPV6 0x0006
|
||||
/*00C*/ FWORD ipas; /* Supported IP Assist mask */
|
||||
/*010*/ FWORD ipae; /* Enabled IP Assist mask */
|
||||
} OSA_IPA;
|
||||
|
||||
|
||||
#define IPA_ARP_PROCESSING 0x00000001L
|
||||
#define IPA_INBOUND_CHECKSUM 0x00000002L
|
||||
#define IPA_OUTBOUND_CHECKSUM 0x00000004L
|
||||
#define IPA_IP_FRAGMENTATION 0x00000008L
|
||||
#define IPA_FILTERING 0x00000010L
|
||||
#define IPA_IPV6 0x00000020L
|
||||
#define IPA_MULTICASTING 0x00000040L
|
||||
#define IPA_IP_REASSEMBLY 0x00000080L
|
||||
#define IPA_QUERY_ARP_COUNTERS 0x00000100L
|
||||
#define IPA_QUERY_ARP_ADDR_INFO 0x00000200L
|
||||
#define IPA_SETADAPTERPARMS 0x00000400L
|
||||
#define IPA_VLAN_PRIO 0x00000800L
|
||||
#define IPA_PASSTHRU 0x00001000L
|
||||
#define IPA_FLUSH_ARP_SUPPORT 0x00002000L
|
||||
#define IPA_FULL_VLAN 0x00004000L
|
||||
#define IPA_INBOUND_PASSTHRU 0x00008000L
|
||||
#define IPA_SOURCE_MAC 0x00010000L
|
||||
#define IPA_OSA_MC_ROUTER 0x00020000L
|
||||
#define IPA_QUERY_ARP_ASSIST 0x00040000L
|
||||
#define IPA_INBOUND_TSO 0x00080000L
|
||||
#define IPA_OUTBOUND_TSO 0x00100000L
|
||||
|
||||
|
||||
#define IPA_SUPP ( 0 \
|
||||
| IPA_PASSTHRU \
|
||||
| IPA_INBOUND_PASSTHRU \
|
||||
)
|
||||
|
||||
|
||||
#define IPA_CMD_STARTLAN 0x01 /* Start LAN operations */
|
||||
#define IPA_CMD_STOPLAN 0x02 /* Stop LAN operations */
|
||||
#define IPA_CMD_SETVMAC 0x21 /* Set Layer-2 MAC address */
|
||||
#define IPA_CMD_DELVMAC 0x22 /* Delete Layer-2 MAC address */
|
||||
#define IPA_CMD_SETGMAC 0x23 /* Set Layer-2 Group Multicast addr */
|
||||
#define IPA_CMD_DELGMAC 0x24 /* Del Layer-2 Group Multicast addr */
|
||||
#define IPA_CMD_SETVLAN 0x25 /* Set Layer-2 VLAN */
|
||||
#define IPA_CMD_DELVLAN 0x26 /* Delete Layer-2 VLAN */
|
||||
#define IPA_CMD_SETCCID 0x41 /* */
|
||||
#define IPA_CMD_DELCCID 0x42 /* */
|
||||
#define IPA_CMD_MODCCID 0x43 /* */
|
||||
#define IPA_CMD_SETIP 0xB1 /* Set Layer-3 IP unicast address */
|
||||
#define IPA_CMD_QIPASSIST 0xB2 /* Query Layer-3 IP assist capability*/
|
||||
#define IPA_CMD_SETASSPARMS 0xB3 /* Set Layer-3 IP assist parameters */
|
||||
#define IPA_CMD_SETIPM 0xB4 /* Set Layer-3 IP multicast address */
|
||||
#define IPA_CMD_DELIPM 0xB5 /* Delete Layer-3 IP multicast addr */
|
||||
#define IPA_CMD_SETRTG 0xB6 /* Set Layer-3 routing information */
|
||||
#define IPA_CMD_DELIP 0xB7 /* Delete Layer-3 IP unicast addr */
|
||||
#define IPA_CMD_SETADPPARMS 0xB8 /* Various adapter directed sub-cmds*/
|
||||
#define IPA_CMD_SETDIAGASS 0xB9 /* Set Layer-3 diagnostic assists */
|
||||
#define IPA_CMD_CREATEADDR 0xC3 /* Create L3 IPv6 addr from L2 MAC */
|
||||
#define IPA_CMD_DESTROYADDR 0xC4 /* Destroy L3 IPv6 addr from L2 MAC */
|
||||
#define IPA_CMD_REGLCLADDR 0xD1 /* */
|
||||
#define IPA_CMD_UNREGLCLADDR 0xD2 /* */
|
||||
|
||||
#define IPA_RC_SUCCESS 0x0000
|
||||
#define IPA_RC_NOTSUPP 0x0001
|
||||
#define IPA_RC_IP_TABLE_FULL 0x0002
|
||||
#define IPA_RC_UNKNOWN_ERROR 0x0003
|
||||
#define IPA_RC_UNSUPPORTED_COMMAND 0x0004
|
||||
#define IPA_RC_TRACE_ALREADY_ACTIVE 0x0005
|
||||
#define IPA_RC_INVALID_FORMAT 0x0006
|
||||
#define IPA_RC_DUP_IPV6_REMOTE 0x0008
|
||||
#define IPA_RC_DUP_IPV6_HOME 0x0010
|
||||
#define IPA_RC_UNREGISTERED_ADDR 0x0011
|
||||
#define IPA_RC_NO_ID_AVAILABLE 0x0012
|
||||
#define IPA_RC_ID_NOT_FOUND 0x0013
|
||||
#define IPA_RC_INVALID_IP_VERSION 0x0020
|
||||
#define IPA_RC_LAN_FRAME_MISMATCH 0x0040
|
||||
#define IPA_RC_L2_UNSUPPORTED_CMD 0x2003
|
||||
#define IPA_RC_L2_DUP_MAC 0x2005
|
||||
#define IPA_RC_L2_ADDR_TABLE_FULL 0x2006
|
||||
#define IPA_RC_L2_DUP_LAYER3_MAC 0x200a
|
||||
#define IPA_RC_L2_GMAC_NOT_FOUND 0x200b
|
||||
#define IPA_RC_L2_MAC_NOT_AUTH_BY_HYP 0x200c
|
||||
#define IPA_RC_L2_MAC_NOT_AUTH_BY_ADP 0x200d
|
||||
#define IPA_RC_L2_MAC_NOT_FOUND 0x2010
|
||||
#define IPA_RC_L2_INVALID_VLAN_ID 0x2015
|
||||
#define IPA_RC_L2_DUP_VLAN_ID 0x2016
|
||||
#define IPA_RC_L2_VLAN_ID_NOT_FOUND 0x2017
|
||||
#define IPA_RC_DATA_MISMATCH 0xe001
|
||||
#define IPA_RC_INVALID_MTU_SIZE 0xe002
|
||||
#define IPA_RC_INVALID_LANTYPE 0xe003
|
||||
#define IPA_RC_INVALID_LANNUM 0xe004
|
||||
#define IPA_RC_DUPLICATE_IP_ADDRESS 0xe005
|
||||
#define IPA_RC_IP_ADDR_TABLE_FULL 0xe006
|
||||
#define IPA_RC_LAN_PORT_STATE_ERROR 0xe007
|
||||
#define IPA_RC_SETIP_NO_STARTLAN 0xe008
|
||||
#define IPA_RC_SETIP_ALREADY_RECEIVED 0xe009
|
||||
#define IPA_RC_IP_ADDR_ALREADY_USED 0xe00a
|
||||
#define IPA_RC_MC_ADDR_NOT_FOUND 0xe00b
|
||||
#define IPA_RC_SETIP_INVALID_VERSION 0xe00d
|
||||
#define IPA_RC_UNSUPPORTED_SUBCMD 0xe00e
|
||||
#define IPA_RC_ARP_ASSIST_NO_ENABLE 0xe00f
|
||||
#define IPA_RC_PRIMARY_ALREADY_DEFINED 0xe010
|
||||
#define IPA_RC_SECOND_ALREADY_DEFINED 0xe011
|
||||
#define IPA_RC_INVALID_SETRTG_INDICATOR 0xe012
|
||||
#define IPA_RC_MC_ADDR_ALREADY_DEFINED 0xe013
|
||||
#define IPA_RC_LAN_OFFLINE 0xe080
|
||||
#define IPA_RC_INVALID_IP_VERSION2 0xf001
|
||||
#define IPA_RC_FFFF 0xffff
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* MAC request */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_IPA_MAC {
|
||||
/*000*/ FWORD maclen; /* Length of MAC Address */
|
||||
/*004*/ BYTE macaddr[FLEXIBLE_ARRAY]; /* MAC Address */
|
||||
} OSA_IPA_MAC;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Set Adapter Parameters */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _OSA_IPA_SAP {
|
||||
/*000*/ FWORD suppcm; /* Supported subcommand mask */
|
||||
#define IPA_SAP_QUERY 0x00000001L
|
||||
#define IPA_SAP_SETMAC 0x00000002L
|
||||
#define IPA_SAP_SETGADR 0x00000004L
|
||||
#define IPA_SAP_SETFADR 0x00000008L
|
||||
#define IPA_SAP_SETAMODE 0x00000010L
|
||||
#define IPA_SAP_SETCFG 0x00000020L
|
||||
#define IPA_SAP_SETCFGE 0x00000040L
|
||||
#define IPA_SAP_BRDCST 0x00000080L
|
||||
#define IPA_SAP_OSAMSG 0x00000100L
|
||||
#define IPA_SAP_SETSNMP 0x00000200L
|
||||
#define IPA_SAP_CARDINFO 0x00000400L
|
||||
#define IPA_SAP_PROMISC 0x00000800L
|
||||
#define IPA_SAP_SETDIAG 0x00002000L
|
||||
#define IPA_SAP_SETACCESS 0x00010000L
|
||||
|
||||
|
||||
#define IPA_SAP_SUPP ( 0 \
|
||||
| IPA_SAP_QUERY \
|
||||
| IPA_SAP_PROMISC \
|
||||
)
|
||||
|
||||
|
||||
/*004*/ FWORD resv004; /* */
|
||||
/*008*/ HWORD cmdlen; /* Subcommand length */
|
||||
/*00A*/ HWORD resv00a; /* */
|
||||
/*00C*/ FWORD cmd; /* Subcommand */
|
||||
/*010*/ HWORD rc; /* Return Code */
|
||||
/*012*/ BYTE used; /* */
|
||||
/*013*/ BYTE seqno; /* */
|
||||
/*014*/ FWORD resv014; /* */
|
||||
} OSA_IPA_SAP;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* SAP ADP Qeury */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _SAP_QRY {
|
||||
/*000*/ FWORD nlan; /* Number of Lan types supported */
|
||||
/*004*/ BYTE rsp; /* LAN type response */
|
||||
/*005*/ BYTE resv005[3];
|
||||
/*008*/ FWORD suppcm; /* Supported commands bit map */
|
||||
/*00A*/ DBLWRD resv00a;
|
||||
} SAP_QRY;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* Set Promiscuous Mode on/off */
|
||||
/*-------------------------------------------------------------------*/
|
||||
typedef struct _SAP_SPM {
|
||||
/*000*/ FWORD promisc; /* Promiscuous mode */
|
||||
#define SAP_PROMISC_ON 0x00000001
|
||||
#define SAP_PROMISC_OFF 0x00000000
|
||||
} SAP_SPM;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
/* OSA Layer 2 Header */
|
||||
/*-------------------------------------------------------------------*/
|
||||
|
||||
Reference in New Issue
Block a user