Annotation of ntddk/src/network/ibmtok/tokhrd.h, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1990  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     tokhrd.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     The hardware-related definitions for the IBMTOK drivers.
        !            12: 
        !            13: 
        !            14: Author:
        !            15: 
        !            16:     Anthony V. Ercolano (tonye) creation-date 19-Jun-1990
        !            17:     Adam Barr (adamba) 18-Feb-1991
        !            18: 
        !            19: Environment:
        !            20: 
        !            21:     Architecturally, there is an assumption in this driver that we are
        !            22:     on a little endian machine.
        !            23: 
        !            24: Notes:
        !            25: 
        !            26:     optional-notes
        !            27: 
        !            28: Revision History:
        !            29: 
        !            30:    Sean Selitrennikoff - 9/??/91
        !            31:       Added/Changed definitions to allow for Microchannel cards too.
        !            32: 
        !            33: 
        !            34: --*/
        !            35: 
        !            36: #ifndef _IBMTOKHARDWARE_
        !            37: #define _IBMTOKHARDWARE_
        !            38: 
        !            39: 
        !            40: 
        !            41: //
        !            42: // Start of I/O ports based on which adapter it is.
        !            43: //
        !            44: 
        !            45: #define PRIMARY_ADAPTER_OFFSET            0xa20
        !            46: #define ALTERNATE_ADAPTER_OFFSET          0xa24
        !            47: 
        !            48: //
        !            49: // Offsets from above of the actual ports used.
        !            50: //
        !            51: 
        !            52: #define SWITCH_READ_1                     0x000
        !            53: #define RESET_LATCH                       0x001
        !            54: #define SWITCH_READ_2                     0x002
        !            55: #define RESET_RELEASE                     0x002
        !            56: #define INTERRUPT_RELEASE_ISA_ONLY        0x003
        !            57: 
        !            58: 
        !            59: //
        !            60: // Registers in the MMIO. These are in the Attachment
        !            61: // Control Area, which starts at offset 0x1e00 of the ACA.
        !            62: //
        !            63: 
        !            64: #define RRR_LOW                           0x1e00
        !            65: #define RRR_HIGH                          0x1e01
        !            66: #define WRBR_LOW                          0x1e02
        !            67: #define WRBR_HIGH                         0x1e03
        !            68: #define ISRP_LOW                          0x1e08
        !            69: #define ISRP_LOW_RESET                    0x1e28
        !            70: #define ISRP_LOW_SET                      0x1e48
        !            71: #define ISRP_HIGH                         0x1e09
        !            72: #define ISRP_HIGH_RESET                   0x1e29
        !            73: #define ISRA_LOW                          0x1e0a
        !            74: #define ISRA_HIGH                         0x1e0b
        !            75: #define ISRA_HIGH_SET                     0x1e4b
        !            76: #define TCR_LOW                           0x1e0c
        !            77: #define TCR_HIGH                          0x1e0d
        !            78: #define TVR_LOW                           0x1e0e
        !            79: #define TVR_HIGH                          0x1e0f
        !            80: #define SRPR_LOW                          0x1e18
        !            81: #define SRPR_HIGH                         0x1e19
        !            82: 
        !            83: 
        !            84: //
        !            85: // These are registers in the AIP (aka the ID PROM),
        !            86: // which starts at offset 0x1f00 of the ACA.
        !            87: //
        !            88: 
        !            89: #define CHANNEL_IDENTIFIER                0x1f30
        !            90: #define TOTAL_ADAPTER_RAM                 0x1fa6
        !            91: #define SHARED_RAM_PAGING                 0x1fa8
        !            92: #define MAX_4_MBPS_DHB                    0x1faa
        !            93: #define MAX_16_MBPS_DHB                   0x1fac
        !            94: 
        !            95: 
        !            96: //
        !            97: // Bits in the ISRA Low (even) register.
        !            98: //
        !            99: 
        !           100: #define ISRA_LOW_TIMER_INTERRUPT          0x40
        !           101: #define ISRA_LOW_INTERRUPT_MASK           0x01
        !           102: 
        !           103: //
        !           104: // Bits in the ISRA High (odd) register.
        !           105: //
        !           106: 
        !           107: #define ISRA_HIGH_COMMAND_IN_SRB          0x20
        !           108: #define ISRA_HIGH_RESPONSE_IN_ASB         0x10
        !           109: #define ISRA_HIGH_SRB_FREE_REQUEST        0x08
        !           110: #define ISRA_HIGH_ASB_FREE_REQUEST        0x04
        !           111: #define ISRA_HIGH_ARB_FREE                0x02
        !           112: #define ISRA_HIGH_SSB_FREE                0x01
        !           113: 
        !           114: //
        !           115: // Bits in the ISRP Low (even) register.
        !           116: //
        !           117: 
        !           118: #define ISRP_LOW_NO_CHANNEL_CHECK         0x80
        !           119: #define ISRP_LOW_INTERRUPT_ENABLE         0x40
        !           120: 
        !           121: //
        !           122: // Bits in the ISRP High (odd) register.
        !           123: //
        !           124: 
        !           125: #define ISRP_HIGH_ADAPTER_CHECK           0x40
        !           126: #define ISRP_HIGH_SRB_RESPONSE            0x20
        !           127: #define ISRP_HIGH_ASB_FREE                0x10
        !           128: #define ISRP_HIGH_ARB_COMMAND             0x08
        !           129: #define ISRP_HIGH_SSB_RESPONSE            0x04
        !           130: 
        !           131: //
        !           132: // Bits in the TCR Low (even) register.
        !           133: //
        !           134: 
        !           135: #define TCR_LOW_INTERRUPT_MASK            0x80
        !           136: #define TCR_LOW_RELOAD_TIMER              0x40
        !           137: #define TCR_LOW_COUNTER_ENABLE            0x20
        !           138: 
        !           139: 
        !           140: #define WRITE_ADAPTER_REGISTER(a, r, v) \
        !           141:     NdisWriteRegisterUchar((a)->MmioRegion + (r), (v))
        !           142: 
        !           143: #define READ_ADAPTER_REGISTER(a, r, v) \
        !           144:     NdisReadRegisterUchar((a)->MmioRegion + (r), (v))
        !           145: 
        !           146: 
        !           147: #define WRITE_ADAPTER_PORT(a, p, v) \
        !           148:     NdisWritePortUchar((a)->NdisAdapterHandle, (a)->IbmtokPortAddress + (p), (v))
        !           149: 
        !           150: #define READ_ADAPTER_PORT(a, p, v) \
        !           151:     NdisReadPortUchar((a)->NdisAdapterHandle, (a)->IbmtokPortAddress + (p), (v))
        !           152: 
        !           153: 
        !           154: 
        !           155: //
        !           156: // An IBMSHORT is a short that is in IBM byte ordering,
        !           157: // with the high and low bytes reversed.
        !           158: //
        !           159: 
        !           160: typedef USHORT IBMSHORT;
        !           161: 
        !           162: 
        !           163: //
        !           164: // BUGBUG: These are dangerous because s appears twice in them.
        !           165: //
        !           166: 
        !           167: #define READ_IBMSHORT(s) (USHORT)((((PUCHAR)&s)[0] << 8) + ((PUCHAR)&s)[1])
        !           168: #define WRITE_IBMSHORT(s, val) {\
        !           169:     USHORT _tmp;                \
        !           170:     _tmp = (USHORT)((((val) >> 8) & 0xff) | (((val) & 0xff) << 8)); \
        !           171:     NdisWriteRegisterUshort((PUSHORT)&s, _tmp); \
        !           172: }
        !           173: #define USHORT_TO_IBMSHORT(val) (IBMSHORT)((((val) >> 8) & 0xff) | \
        !           174:                                             (((val) & 0xff) << 8))
        !           175: #define IBMSHORT_TO_USHORT(val) (USHORT)((((val) >> 8) & 0xff) | \
        !           176:                                             (((val) & 0xff) << 8))
        !           177: 
        !           178: 
        !           179: //
        !           180: // An SRAM_PTR is a pointer into the Shared RAM on the adapter.
        !           181: // It uses the IBM byte ordering.
        !           182: //
        !           183: 
        !           184: typedef IBMSHORT SRAM_PTR;
        !           185: 
        !           186: #define NULL_SRAM_PTR ((SRAM_PTR)0x0000)
        !           187: 
        !           188: #define SRAM_PTR_TO_PVOID(a, p) \
        !           189:                         ((PVOID)((a)->SharedRam + IBMSHORT_TO_USHORT(p)))
        !           190: 
        !           191: #define SHARED_RAM_ADDRESS(a, p) \
        !           192:                         ((PVOID)((a)->SharedRam + ((ULONG)(p))))
        !           193: 
        !           194: 
        !           195: //
        !           196: // Macros to deal with the frame status field.
        !           197: //
        !           198: 
        !           199: #define GET_FRAME_STATUS_HIGH_AC(Fs) ((UCHAR)(((Fs) & 0xc0) >> 6))
        !           200: #define GET_FRAME_STATUS_LOW_AC(Fs) ((UCHAR)(((Fs) & 0x0c) >> 2))
        !           201: 
        !           202: #define AC_NOT_RECOGNIZED    0x00
        !           203: #define AC_INVALID           0x01
        !           204: #define AC_NOT_COPIED        0x10
        !           205: #define AC_COPIED            0x11
        !           206: 
        !           207: 
        !           208: //
        !           209: // Some adapters have to have the upper section of the
        !           210: // Shared RAM zeroed out after initialization.
        !           211: //
        !           212: 
        !           213: #define SHARED_RAM_ZERO_OFFSET            ((PVOID)0xfe00)
        !           214: #define SHARED_RAM_ZERO_LENGTH            0x0200
        !           215: 
        !           216: 
        !           217: //
        !           218: // The highest command correlator used by the adapter
        !           219: // transmit logic.
        !           220: //
        !           221: 
        !           222: #define MAX_COMMAND_CORRELATOR            128
        !           223: 
        !           224: 
        !           225: //
        !           226: // This macro is used to set up the SRPR depending on
        !           227: // the given address (should only be called if it is
        !           228: // known that the adapter supports Shared RAM Paging!!).
        !           229: //
        !           230: 
        !           231: #define SETUP_SRPR(Adapter, Address) \
        !           232:     WRITE_ADAPTER_REGISTER((Adapter), SRPR_LOW, ((ULONG)(Address) >> 14))
        !           233: 
        !           234: 
        !           235: //
        !           236: // This macro retrieves the part of an address that
        !           237: // is used once SETUP_SRPR has been called.
        !           238: //
        !           239: 
        !           240: #define SHARED_RAM_LOW_BITS(Address) \
        !           241:     ((ULONG)(Address) & 0x3fff)
        !           242: 
        !           243: 
        !           244: //
        !           245: // This macro determines if an address will fit on a
        !           246: // single Shared RAM page. It makes sure that the beginning
        !           247: // and end of the sequence have the same high two bits.
        !           248: //
        !           249: 
        !           250: #define SINGLE_SHARED_RAM_PAGE(Address, Length) \
        !           251:     (((ULONG)(Address) & 0xc000) == (((ULONG)(Address)+(Length)-1) & 0xc000))
        !           252: 
        !           253: 
        !           254: 
        !           255: //
        !           256: // Various structures which are read after the adapter
        !           257: // is reset.
        !           258: //
        !           259: 
        !           260: typedef struct _ADAPTER_ADDRESS {
        !           261:     UCHAR NodeAddress[6];
        !           262:     UCHAR GroupAddress[4];
        !           263:     UCHAR FunctionalAddress[4];
        !           264: } ADAPTER_ADDRESS, * PADAPTER_ADDRESS;
        !           265: 
        !           266: 
        !           267: typedef struct _ADAPTER_PARAMETERS {
        !           268:     UCHAR PhysicalAddress[4];
        !           269:     UCHAR NaunNodeAddress[6];
        !           270:     UCHAR NaunPhysicalAddress[4];
        !           271:     UCHAR LastPoolAddress[6];
        !           272:     UCHAR Reserved1[2];
        !           273:     IBMSHORT TransmitAccessPriority;
        !           274:     IBMSHORT SourceClassAuthorization;
        !           275:     IBMSHORT LastAttentionCode;
        !           276:     UCHAR LastSourceAddress[6];
        !           277:     IBMSHORT LastBeaconType;
        !           278:     IBMSHORT LastMajorVector;
        !           279:     IBMSHORT RingStatus;
        !           280:     IBMSHORT SoftErrorTimer;
        !           281:     IBMSHORT FrontEndError;
        !           282:     IBMSHORT LocalRingNumber;
        !           283:     IBMSHORT MonitorErrorCode;
        !           284:     IBMSHORT BeaconTransmitType;
        !           285:     IBMSHORT BeaconReceiveType;
        !           286:     IBMSHORT FrameCorrelator;
        !           287:     UCHAR BeaconNaun[6];
        !           288:     UCHAR Reserved2[4];
        !           289:     UCHAR BeaconPhysicalAddress[4];
        !           290: } ADAPTER_PARAMETERS, * PADAPTER_PARAMETERS;
        !           291: 
        !           292: 
        !           293: typedef struct _SRB_BRING_UP_RESULT {
        !           294:     UCHAR Command;
        !           295:     UCHAR InitStatus;
        !           296:     UCHAR Reserved1[4];
        !           297:     IBMSHORT ReturnCode;
        !           298:     SRAM_PTR EncodedAddressPointer;
        !           299:     SRAM_PTR LevelAddressPointer;
        !           300:     SRAM_PTR AdapterAddressPointer;    // points to ADAPTER_ADDRESS
        !           301:     SRAM_PTR ParameterAddressPointer;  // points to ADAPTER_PARAMETERS
        !           302:     SRAM_PTR MacBufferPointer;
        !           303: } SRB_BRING_UP_RESULT, * PSRB_BRING_UP_RESULT;
        !           304: 
        !           305: 
        !           306: 
        !           307: 
        !           308: //
        !           309: // Structure of the System Request Block as defined
        !           310: // for various commands.
        !           311: //
        !           312: 
        !           313: typedef struct _SRB_GENERIC {
        !           314:     UCHAR Command;
        !           315:     UCHAR Reserved1[1];
        !           316:     UCHAR ReturnCode;
        !           317: } SRB_GENERIC, * PSRB_GENERIC;
        !           318: 
        !           319: 
        !           320: //
        !           321: // Values for the SRB Command field.
        !           322: //
        !           323: 
        !           324: #define SRB_CMD_CLOSE_ADAPTER              0x04
        !           325: #define SRB_CMD_INTERRUPT                  0x00
        !           326: #define SRB_CMD_MODIFY_OPEN_PARMS          0x01
        !           327: #define SRB_CMD_OPEN_ADAPTER               0x03
        !           328: #define SRB_CMD_READ_LOG                   0x08
        !           329: #define SRB_CMD_RESTORE_OPEN_PARMS         0x02
        !           330: #define SRB_CMD_SET_FUNCTIONAL_ADDRESS     0x07
        !           331: #define SRB_CMD_SET_GROUP_ADDRESS          0x06
        !           332: #define SRB_CMD_TRANSMIT_DIR_FRAME         0x0a
        !           333: #define SRB_CMD_DLC_STATISTICS             0x1e
        !           334: 
        !           335: 
        !           336: typedef struct _SRB_OPEN_ADAPTER {
        !           337:     UCHAR Command;
        !           338:     UCHAR Reserved1[7];
        !           339:     IBMSHORT OpenOptions;
        !           340:     UCHAR NodeAddress[6];
        !           341:     UCHAR GroupAddress[4];
        !           342:     UCHAR FunctionalAddress[4];
        !           343:     IBMSHORT ReceiveBufferNum;
        !           344:     IBMSHORT ReceiveBufferLen;
        !           345:     IBMSHORT TransmitBufferLen;
        !           346:     UCHAR TransmitBufferNum;
        !           347:     UCHAR Reserved2[1];
        !           348:     UCHAR DlcValues[10];
        !           349:     UCHAR ProductId[18];
        !           350: } SRB_OPEN_ADAPTER, * PSRB_OPEN_ADAPTER;
        !           351: 
        !           352: 
        !           353: //
        !           354: // Bit values for the OpenOptions field (these are
        !           355: // reversed to be in IBMSHORT format).
        !           356: //
        !           357: 
        !           358: #define OPEN_LOOPBACK                     0x0080
        !           359: #define OPEN_DISABLE_HARD_ERROR           0x0040
        !           360: #define OPEN_DISABLE_SOFT_ERROR           0x0020
        !           361: #define OPEN_PASS_ADAPTER_MAC             0x0010
        !           362: #define OPEN_PASS_ATTENTION_MAC           0x0008
        !           363: #define OPEN_CONTENDER                    0x0001
        !           364: #define OPEN_PASS_BEACON_MAC              0x8000
        !           365: #define OPEN_MODIFIED_TOKEN_RELEASE       0x1000
        !           366: 
        !           367: 
        !           368: typedef struct _SRB_OPEN_RESPONSE {
        !           369:     UCHAR Command;
        !           370:     UCHAR Reserved1[1];
        !           371:     UCHAR ReturnCode;
        !           372:     UCHAR Reserved2[3];
        !           373:     IBMSHORT ErrorCode;
        !           374:     SRAM_PTR AsbPointer;
        !           375:     SRAM_PTR SrbPointer;
        !           376:     SRAM_PTR ArbPointer;
        !           377:     SRAM_PTR SsbPointer;
        !           378: } SRB_OPEN_RESPONSE, * PSRB_OPEN_RESPONSE;
        !           379: 
        !           380: 
        !           381: typedef struct _SRB_TRANSMIT_DIR_FRAME {
        !           382:     UCHAR Command;
        !           383:     UCHAR CommandCorrelator;
        !           384:     UCHAR ReturnCode;
        !           385:     UCHAR Reserved1[1];
        !           386:     IBMSHORT StationId;
        !           387: } SRB_TRANSMIT_DIR_FRAME, * PSRB_TRANSMIT_DIR_FRAME;
        !           388: 
        !           389: 
        !           390: typedef struct _SRB_SET_FUNCT_ADDRESS {
        !           391:     UCHAR Command;
        !           392:     UCHAR Reserved1[1];
        !           393:     UCHAR ReturnCode;
        !           394:     UCHAR Reserved2[3];
        !           395:     //
        !           396:     // Making this a TR_FUNCTIONAL_ADDRESS would cause
        !           397:     // the compiler to insert two bytes for alignment.
        !           398:     //
        !           399:     UCHAR FunctionalAddress[4];
        !           400: } SRB_SET_FUNCT_ADDRESS, * PSRB_SET_FUNCT_ADDRESS;
        !           401: 
        !           402: 
        !           403: typedef struct _SRB_SET_GROUP_ADDRESS {
        !           404:     UCHAR Command;
        !           405:     UCHAR Reserved1[1];
        !           406:     UCHAR ReturnCode;
        !           407:     UCHAR Reserved2[3];
        !           408:     //
        !           409:     // Making this a TR_FUNCTIONAL_ADDRESS would cause
        !           410:     // the compiler to insert two bytes for alignment.
        !           411:     //
        !           412:     UCHAR GroupAddress[4];
        !           413: } SRB_SET_GROUP_ADDRESS, * PSRB_SET_GROUP_ADDRESS;
        !           414: 
        !           415: 
        !           416: typedef struct _SRB_INTERRUPT {
        !           417:     UCHAR Command;
        !           418:     UCHAR Reserved1[1];
        !           419:     UCHAR ReturnCode;
        !           420: } SRB_INTERRUPT, * PSRB_INTERRUPT;
        !           421: 
        !           422: 
        !           423: typedef struct _SRB_READ_LOG {
        !           424:     UCHAR Command;
        !           425:     UCHAR Reserved1[1];
        !           426:     UCHAR ReturnCode;
        !           427:     UCHAR Reserved2[3];
        !           428:     UCHAR LineErrors;
        !           429:     UCHAR InternalErrors;
        !           430:     UCHAR BurstErrors;
        !           431:     UCHAR AcErrors;
        !           432:     UCHAR AbortDelimeters;
        !           433:     UCHAR Reserved3[1];
        !           434:     UCHAR LostFrames;
        !           435:     UCHAR ReceiveCongestionCount;
        !           436:     UCHAR FrameCopiedErrors;
        !           437:     UCHAR FrequencyErrors;
        !           438:     UCHAR TokenErrors;
        !           439:     UCHAR Reserved4[3];
        !           440: } SRB_READ_LOG, * PSRB_READ_LOG;
        !           441: 
        !           442: 
        !           443: typedef struct _SRB_DLC_STATS{
        !           444:     UCHAR Command;
        !           445:     UCHAR Reserved1;
        !           446:     UCHAR ReturnCode;
        !           447:     UCHAR Reserved2;
        !           448:     IBMSHORT StationId;
        !           449:     IBMSHORT CountersOffset;
        !           450:     IBMSHORT HeaderAddr;
        !           451:     UCHAR ResetOption;
        !           452: }SRB_DLC_STATS, *PSRB_DLC_STATS;
        !           453: 
        !           454: 
        !           455: typedef struct _DLC_COUNTERS{
        !           456:     IBMSHORT TransmitCount;
        !           457:     IBMSHORT ReceiveCount;
        !           458:     UCHAR TransmitErrors;
        !           459:     UCHAR ReceiveErrors;
        !           460:     IBMSHORT T1Expires;
        !           461:     UCHAR ReceivedCommand;
        !           462:     UCHAR SentCommand;
        !           463:     UCHAR PrimaryState;
        !           464:     UCHAR SecondaryState;
        !           465:     UCHAR SendState;
        !           466:     UCHAR ReceiveState;
        !           467:     UCHAR LastReceivedNr;
        !           468: }DLC_COUNTERS, *PDLC_COUNTERS;
        !           469: 
        !           470: 
        !           471: 
        !           472: 
        !           473: //
        !           474: // Structure of the Adapter Request Block as defined
        !           475: // for various commands.
        !           476: //
        !           477: 
        !           478: typedef struct _ARB_GENERIC {
        !           479:     UCHAR Command;
        !           480: } ARB_GENERIC, * PARB_GENERIC;
        !           481: 
        !           482: 
        !           483: //
        !           484: // Values for the ARB Command field.
        !           485: //
        !           486: 
        !           487: #define ARB_CMD_DLC_STATUS                 0x83
        !           488: #define ARB_CMD_RECEIVED_DATA              0x81
        !           489: #define ARB_CMD_RING_STATUS_CHANGE         0x84
        !           490: #define ARB_CMD_TRANSMIT_DATA_REQUEST      0x82
        !           491: 
        !           492: 
        !           493: typedef struct _ARB_RING_STATUS_CHANGE {
        !           494:     UCHAR Command;
        !           495:     UCHAR Reserved1[5];
        !           496:     IBMSHORT NetworkStatus;
        !           497: } ARB_RING_STATUS_CHANGE, * PARB_RING_STATUS_CHANGE;
        !           498: 
        !           499: 
        !           500: typedef struct _ARB_DLC_STATUS {
        !           501:     UCHAR Command;
        !           502:     UCHAR Reserved1[3];
        !           503:     IBMSHORT StationId;
        !           504:     IBMSHORT Status;
        !           505:     UCHAR FrmrData[5];
        !           506:     UCHAR AccessPriority;
        !           507:     UCHAR RemoteAddress[6];
        !           508:     UCHAR RemoteRsapValue;
        !           509: } ARB_DLC_STATUS, * PARB_DLC_STATUS;
        !           510: 
        !           511: 
        !           512: typedef struct _ARB_TRANSMIT_DATA_REQUEST {
        !           513:     UCHAR Command;
        !           514:     UCHAR CommandCorrelator;
        !           515:     UCHAR Reserved1[2];
        !           516:     IBMSHORT StationId;
        !           517:     SRAM_PTR DhbPointer;
        !           518: } ARB_TRANSMIT_DATA_REQUEST, * PARB_TRANSMIT_DATA_REQUEST;
        !           519: 
        !           520: 
        !           521: typedef struct _ARB_RECEIVED_DATA {
        !           522:     UCHAR Command;
        !           523:     UCHAR Reserved1[3];
        !           524:     IBMSHORT StationId;
        !           525:     SRAM_PTR ReceiveBuffer;       // points to a RECEIVE_BUFFER
        !           526:     UCHAR LanHeaderLength;
        !           527:     UCHAR DlcHeaderLength;
        !           528:     IBMSHORT FrameLength;
        !           529:     UCHAR MessageType;
        !           530: } ARB_RECEIVED_DATA, * PARB_RECEIVED_DATA;
        !           531: 
        !           532: 
        !           533: typedef struct _RECEIVE_BUFFER {
        !           534:     //
        !           535:     // Leave out the first two reserved bytes.
        !           536:     //
        !           537:     SRAM_PTR NextBuffer;
        !           538:     UCHAR Reserved2[1];
        !           539:     UCHAR ReceiveFs;
        !           540:     IBMSHORT BufferLength;
        !           541:     UCHAR FrameData[1];
        !           542: } RECEIVE_BUFFER, * PRECEIVE_BUFFER;
        !           543: 
        !           544: 
        !           545: 
        !           546: 
        !           547: //
        !           548: // Structure of the Adapter Status Block as defined
        !           549: // for various commands.
        !           550: //
        !           551: 
        !           552: typedef struct _ASB_GENERIC {
        !           553:     UCHAR Command;
        !           554:     UCHAR Reserved1[1];
        !           555:     UCHAR ReturnCode;
        !           556: } ASB_GENERIC, * PASB_GENERIC;
        !           557: 
        !           558: 
        !           559: //
        !           560: // The ASB Command field takes the same values as the
        !           561: // ARB Command field.
        !           562: //
        !           563: 
        !           564: typedef struct _ASB_TRANSMIT_DATA_STATUS {
        !           565:     UCHAR Command;
        !           566:     UCHAR CommandCorrelator;
        !           567:     UCHAR ReturnCode;
        !           568:     UCHAR Reserved1[1];
        !           569:     IBMSHORT StationId;
        !           570:     IBMSHORT FrameLength;
        !           571:     UCHAR Reserved2[2];
        !           572: } ASB_TRANSMIT_DATA_STATUS, * PASB_TRANSMIT_DATA_STATUS;
        !           573: 
        !           574: 
        !           575: typedef struct _ASB_RECEIVED_DATA_STATUS {
        !           576:     UCHAR Command;
        !           577:     UCHAR Reserved1[1];
        !           578:     UCHAR ReturnCode;
        !           579:     UCHAR Reserved2[1];
        !           580:     IBMSHORT StationId;
        !           581:     SRAM_PTR ReceiveBuffer;
        !           582: } ASB_RECEIVED_DATA_STATUS, * PASB_RECEIVED_DATA_STATUS;
        !           583: 
        !           584: 
        !           585: 
        !           586: 
        !           587: //
        !           588: // Structure of the System Status Block as defined
        !           589: // for various commands.
        !           590: //
        !           591: 
        !           592: typedef struct _SSB_GENERIC {
        !           593:     UCHAR Command;
        !           594: } SSB_GENERIC, * PSSB_GENERIC;
        !           595: 
        !           596: 
        !           597: //
        !           598: // The SSB Command field takes the same values as the
        !           599: // SRB Command field.
        !           600: //
        !           601: 
        !           602: typedef struct _SSB_TRANSMIT_COMPLETE {
        !           603:     UCHAR Command;
        !           604:     UCHAR CommandCorrelator;
        !           605:     UCHAR ReturnCode;
        !           606:     UCHAR Reserved1[1];
        !           607:     IBMSHORT StationId;
        !           608:     UCHAR ErrorFrameStatus;
        !           609: } SSB_TRANSMIT_COMPLETE, * PSSB_TRANSMIT_COMPLETE;
        !           610: 
        !           611: 
        !           612: 
        !           613: #endif // _IBMTOKHARDWARE_
        !           614: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.