|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.