Annotation of ntddk/inc/miniport.h, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c005189-92  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     miniport.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Type definitions for miniport drivers.
        !            12: 
        !            13: Author:
        !            14: 
        !            15:     Mike Glass  27-April-1992
        !            16: 
        !            17: Revision History:
        !            18: 
        !            19: --*/
        !            20: 
        !            21: #ifndef _MINIPORT_
        !            22: #define _MINIPORT_
        !            23: 
        !            24: #include "stddef.h"
        !            25: 
        !            26: #define ASSERT( exp )
        !            27: 
        !            28: #ifndef IN
        !            29: #define IN
        !            30: #endif
        !            31: 
        !            32: #ifndef OUT
        !            33: #define OUT
        !            34: #endif
        !            35: 
        !            36: #ifndef OPTIONAL
        !            37: #define OPTIONAL
        !            38: #endif
        !            39: 
        !            40: #ifndef NOTHING
        !            41: #define NOTHING
        !            42: #endif
        !            43: 
        !            44: #ifndef CRITICAL
        !            45: #define CRITICAL
        !            46: #endif
        !            47: 
        !            48: #ifndef ANYSIZE_ARRAY
        !            49: #define ANYSIZE_ARRAY 1       // winnt
        !            50: #endif
        !            51: 
        !            52: #if defined(_MIPS_) || defined(_ALPHA_)     // winnt
        !            53: #define UNALIGNED __unaligned               // winnt
        !            54: #else                                       // winnt
        !            55: #define UNALIGNED                           // winnt
        !            56: #endif                                      // winnt
        !            57: 
        !            58: #ifndef CONST
        !            59: #define CONST               const
        !            60: #endif
        !            61: 
        !            62: //
        !            63: // Void
        !            64: //
        !            65: 
        !            66: typedef void *PVOID;    // winnt
        !            67: 
        !            68: 
        !            69: //
        !            70: // Basics
        !            71: //
        !            72: 
        !            73: #ifndef VOID
        !            74: #define VOID void
        !            75: typedef char CHAR;
        !            76: typedef short SHORT;
        !            77: typedef long LONG;
        !            78: #endif
        !            79: 
        !            80: //
        !            81: // UNICODE (Wide Character) types
        !            82: //
        !            83: 
        !            84: typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character
        !            85: 
        !            86: typedef WCHAR *PWCHAR;
        !            87: typedef WCHAR *LPWCH, *PWCH;
        !            88: typedef CONST WCHAR *LPCWCH, *PCWCH;
        !            89: typedef WCHAR *NWPSTR;
        !            90: typedef WCHAR *LPWSTR, *PWSTR;
        !            91: 
        !            92: typedef CONST WCHAR *LPCWSTR, *PCWSTR;
        !            93: 
        !            94: //
        !            95: // ANSI (Multi-byte Character) types
        !            96: //
        !            97: typedef CHAR *PCHAR;
        !            98: typedef CHAR *LPCH, *PCH;
        !            99: 
        !           100: typedef CONST CHAR *LPCCH, *PCCH;
        !           101: typedef CHAR *NPSTR;
        !           102: typedef CHAR *LPSTR, *PSTR;
        !           103: typedef CONST CHAR *LPCSTR, *PCSTR;
        !           104: 
        !           105: //
        !           106: // Neutral ANSI/UNICODE types and macros
        !           107: //
        !           108: #ifdef  UNICODE
        !           109: 
        !           110: #ifndef _TCHAR_DEFINED
        !           111: typedef WCHAR TCHAR, *PTCHAR;
        !           112: typedef WCHAR TUCHAR, *PTUCHAR;
        !           113: #define _TCHAR_DEFINED
        !           114: #endif /* !_TCHAR_DEFINED */
        !           115: 
        !           116: typedef LPWSTR LPTCH, PTCH;
        !           117: typedef LPWSTR PTSTR, LPTSTR;
        !           118: typedef LPCWSTR LPCTSTR;
        !           119: typedef LPWSTR LP;
        !           120: #define __TEXT(quote) L##quote
        !           121: 
        !           122: #else   /* UNICODE */
        !           123: 
        !           124: #ifndef _TCHAR_DEFINED
        !           125: typedef char TCHAR, *PTCHAR;
        !           126: typedef unsigned char TUCHAR, *PTUCHAR;
        !           127: #define _TCHAR_DEFINED
        !           128: #endif /* !_TCHAR_DEFINED */
        !           129: 
        !           130: typedef LPSTR LPTCH, PTCH;
        !           131: typedef LPSTR PTSTR, LPTSTR;
        !           132: typedef LPCSTR LPCTSTR;
        !           133: #define __TEXT(quote) quote
        !           134: 
        !           135: #endif /* UNICODE */
        !           136: #define TEXT(quote) __TEXT(quote)
        !           137: 
        !           138: 
        !           139: // end_winnt
        !           140: 
        !           141: typedef double DOUBLE;
        !           142: 
        !           143: typedef struct _QUAD {              // QUAD is for those times we want
        !           144:     double  DoNotUseThisField;      // an 8 byte aligned 8 byte long structure
        !           145: } QUAD;                             // which is NOT really a floating point
        !           146:                                     // number.  Use DOUBLE if you want an FP
        !           147:                                     // number.
        !           148: 
        !           149: //
        !           150: // Pointer to Basics
        !           151: //
        !           152: 
        !           153: typedef SHORT *PSHORT;  // winnt
        !           154: typedef LONG *PLONG;    // winnt
        !           155: typedef QUAD *PQUAD;
        !           156: 
        !           157: //
        !           158: // Unsigned Basics
        !           159: //
        !           160: 
        !           161: // Tell windef.h that some types are already defined.
        !           162: #define BASETYPES
        !           163: 
        !           164: typedef unsigned char UCHAR;
        !           165: typedef unsigned short USHORT;
        !           166: typedef unsigned long ULONG;
        !           167: typedef QUAD UQUAD;
        !           168: 
        !           169: //
        !           170: // Pointer to Unsigned Basics
        !           171: //
        !           172: 
        !           173: typedef UCHAR *PUCHAR;
        !           174: typedef USHORT *PUSHORT;
        !           175: typedef ULONG *PULONG;
        !           176: typedef UQUAD *PUQUAD;
        !           177: 
        !           178: //
        !           179: // Signed characters
        !           180: //
        !           181: 
        !           182: typedef signed char SCHAR;
        !           183: typedef SCHAR *PSCHAR;
        !           184: 
        !           185: #ifndef NO_STRICT
        !           186: #define STRICT 1
        !           187: #endif
        !           188: 
        !           189: //
        !           190: // Handle to an Object
        !           191: //
        !           192: 
        !           193: // begin_winnt
        !           194: 
        !           195: #ifdef STRICT
        !           196: typedef void *HANDLE;
        !           197: #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
        !           198: #else
        !           199: typedef PVOID HANDLE;
        !           200: #define DECLARE_HANDLE(name) typedef HANDLE name
        !           201: #endif
        !           202: typedef HANDLE *PHANDLE;
        !           203: 
        !           204: // end_winnt
        !           205: 
        !           206: //
        !           207: // Low order two bits of a handle are ignored by the system and available
        !           208: // for use by application code as tag bits.  The remaining bits are opaque
        !           209: // and used to store a serial number and table index.
        !           210: //
        !           211: 
        !           212: #define OBJ_HANDLE_TAGBITS  0x00000003L
        !           213: 
        !           214: //
        !           215: // Cardinal Data Types [0 - 2**N-2)
        !           216: //
        !           217: 
        !           218: typedef char CCHAR;          // winnt
        !           219: typedef short CSHORT;
        !           220: typedef ULONG CLONG;
        !           221: 
        !           222: typedef CCHAR *PCCHAR;
        !           223: typedef CSHORT *PCSHORT;
        !           224: typedef CLONG *PCLONG;
        !           225: 
        !           226: 
        !           227: #if defined(MIDL_PASS) || defined(_CFRONT_PASS_)
        !           228: typedef double LONGLONG;
        !           229: typedef double ULONGLONG;
        !           230: #else
        !           231: #if defined(_M_IX86)
        !           232: typedef double LONGLONG;
        !           233: typedef double ULONGLONG;
        !           234: #elif defined(_M_MRX000)
        !           235: typedef double LONGLONG;
        !           236: typedef double ULONGLONG;
        !           237: #elif defined(_ALPHA_)
        !           238: typedef __int64 LONGLONG;
        !           239: typedef unsigned __int64 ULONGLONG;
        !           240: #else
        !           241: typedef double LONGLONG;
        !           242: typedef double ULONGLONG;
        !           243: #endif
        !           244: #endif
        !           245: 
        !           246: typedef LONGLONG *PLONGLONG;
        !           247: typedef ULONGLONG *PULONGLONG;
        !           248: 
        !           249: #if defined(MIDL_PASS)
        !           250: typedef struct _LARGE_INTEGER {
        !           251: #else // MIDL_PASS
        !           252: typedef union _LARGE_INTEGER {
        !           253: #if defined(_CFRONT_PASS_)
        !           254:     struct {
        !           255:         ULONG LowPart;
        !           256:         LONG HighPart;
        !           257:     } u;
        !           258: #else
        !           259:     struct {
        !           260:         ULONG LowPart;
        !           261:         LONG HighPart;
        !           262:     };
        !           263: #endif
        !           264: #endif //MIDL_PASS
        !           265:     LONGLONG QuadPart;
        !           266: } LARGE_INTEGER, *PLARGE_INTEGER;
        !           267: 
        !           268: 
        !           269: #if defined(MIDL_PASS)
        !           270: typedef struct _ULARGE_INTEGER {
        !           271: #else // MIDL_PASS
        !           272: typedef union _ULARGE_INTEGER {
        !           273: #if defined(_CFRONT_PASS_)
        !           274:     struct {
        !           275:         ULONG LowPart;
        !           276:         ULONG HighPart;
        !           277:     } u;
        !           278: #else
        !           279:     struct {
        !           280:         ULONG LowPart;
        !           281:         ULONG HighPart;
        !           282:     };
        !           283: #endif
        !           284: #endif //MIDL_PASS
        !           285:     ULONGLONG QuadPart;
        !           286: } ULARGE_INTEGER, *PULARGE_INTEGER;
        !           287: 
        !           288: 
        !           289: //
        !           290: // Physical address.
        !           291: //
        !           292: 
        !           293: typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; // windbgkd
        !           294: 
        !           295: 
        !           296: //
        !           297: // Boolean
        !           298: //
        !           299: 
        !           300: typedef UCHAR BOOLEAN;           // winnt
        !           301: typedef BOOLEAN *PBOOLEAN;       // winnt
        !           302: 
        !           303: 
        !           304: //
        !           305: // Constants
        !           306: //
        !           307: 
        !           308: #define FALSE   0
        !           309: #define TRUE    1
        !           310: 
        !           311: #ifndef NULL
        !           312: #ifdef __cplusplus
        !           313: #define NULL    0
        !           314: #else
        !           315: #define NULL    ((void *)0)
        !           316: #endif
        !           317: #endif // NULL
        !           318: 
        !           319: //
        !           320: // Calculate the byte offset of a field in a structure of type type.
        !           321: //
        !           322: 
        !           323: #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
        !           324: 
        !           325: 
        !           326: //
        !           327: // Calculate the address of the base of the structure given its type, and an
        !           328: // address of a field within the structure.
        !           329: //
        !           330: 
        !           331: #define CONTAINING_RECORD(address, type, field) ((type *)( \
        !           332:                                                   (PCHAR)(address) - \
        !           333:                                                   (PCHAR)(&((type *)0)->field)))
        !           334: 
        !           335: //
        !           336: // Interrupt Request Level (IRQL)
        !           337: //
        !           338: 
        !           339: typedef UCHAR KIRQL;
        !           340: 
        !           341: typedef KIRQL *PKIRQL;
        !           342: 
        !           343: 
        !           344: //
        !           345: // Macros used to eliminate compiler warning generated when formal
        !           346: // parameters or local variables are not declared.
        !           347: //
        !           348: // Use DBG_UNREFERENCED_PARAMETER() when a parameter is not yet
        !           349: // referenced but will be once the module is completely developed.
        !           350: //
        !           351: // Use DBG_UNREFERENCED_LOCAL_VARIABLE() when a local variable is not yet
        !           352: // referenced but will be once the module is completely developed.
        !           353: //
        !           354: // Use UNREFERENCED_PARAMETER() if a parameter will never be referenced.
        !           355: //
        !           356: // DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE will
        !           357: // eventually be made into a null macro to help determine whether there
        !           358: // is unfinished work.
        !           359: //
        !           360: 
        !           361: #if ! (defined(lint) || defined(_lint))
        !           362: #define UNREFERENCED_PARAMETER(P)          (P)
        !           363: #define DBG_UNREFERENCED_PARAMETER(P)      (P)
        !           364: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
        !           365: 
        !           366: #else // lint or _lint
        !           367: 
        !           368: // Note: lint -e530 says don't complain about uninitialized variables for
        !           369: // this.  line +e530 turns that checking back on.  Error 527 has to do with
        !           370: // unreachable code.
        !           371: 
        !           372: #define UNREFERENCED_PARAMETER(P)          \
        !           373:     /*lint -e527 -e530 */ \
        !           374:     { \
        !           375:         (P) = (P); \
        !           376:     } \
        !           377:     /*lint +e527 +e530 */
        !           378: #define DBG_UNREFERENCED_PARAMETER(P)      \
        !           379:     /*lint -e527 -e530 */ \
        !           380:     { \
        !           381:         (P) = (P); \
        !           382:     } \
        !           383:     /*lint +e527 +e530 */
        !           384: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) \
        !           385:     /*lint -e527 -e530 */ \
        !           386:     { \
        !           387:         (V) = (V); \
        !           388:     } \
        !           389:     /*lint +e527 +e530 */
        !           390: 
        !           391: #endif // lint or _lint
        !           392: 
        !           393: 
        !           394: 
        !           395: #ifdef _X86_
        !           396: 
        !           397: //
        !           398: // Disable these two pramas that evaluate to "sti" "cli" on x86 so that driver
        !           399: // writers to not leave them inadvertantly in their code.
        !           400: //
        !           401: 
        !           402: #if !defined(MIDL_PASS)
        !           403: #if !defined(_CFRONT_PASS_)
        !           404: #if !defined(RC_INVOKED)
        !           405: 
        !           406: #pragma warning(disable:4164)   // disable C4164 warning so that apps that
        !           407:                                 // build with /Od don't get weird errors !
        !           408: #pragma function(_enable)
        !           409: #pragma function(_disable)
        !           410: 
        !           411: #pragma warning(default:4164)   // reenable C4164 warning
        !           412: 
        !           413: #endif
        !           414: #endif
        !           415: #endif
        !           416: 
        !           417: 
        !           418: #endif //_X86_
        !           419: 
        !           420: //
        !           421: // Define the I/O bus interface types.
        !           422: //
        !           423: 
        !           424: typedef enum _INTERFACE_TYPE {
        !           425:     Internal,
        !           426:     Isa,
        !           427:     Eisa,
        !           428:     MicroChannel,
        !           429:     TurboChannel,
        !           430:     PCIBus,
        !           431:     VMEBus,
        !           432:     NuBus,
        !           433:     PCMCIABus,
        !           434:     CBus,
        !           435:     MPIBus,
        !           436:     MPSABus,
        !           437:     MaximumInterfaceType
        !           438: }INTERFACE_TYPE, *PINTERFACE_TYPE;
        !           439: 
        !           440: //
        !           441: // Define the DMA transfer widths.
        !           442: //
        !           443: 
        !           444: typedef enum _DMA_WIDTH {
        !           445:     Width8Bits,
        !           446:     Width16Bits,
        !           447:     Width32Bits,
        !           448:     MaximumDmaWidth
        !           449: }DMA_WIDTH, *PDMA_WIDTH;
        !           450: 
        !           451: //
        !           452: // Define DMA transfer speeds.
        !           453: //
        !           454: 
        !           455: typedef enum _DMA_SPEED {
        !           456:     Compatible,
        !           457:     TypeA,
        !           458:     TypeB,
        !           459:     TypeC,
        !           460:     MaximumDmaSpeed
        !           461: }DMA_SPEED, *PDMA_SPEED;
        !           462: 
        !           463: 
        !           464: //
        !           465: // Interrupt modes.
        !           466: //
        !           467: 
        !           468: typedef enum _KINTERRUPT_MODE {
        !           469:     LevelSensitive,
        !           470:     Latched
        !           471:     } KINTERRUPT_MODE;
        !           472: 
        !           473: //
        !           474: // Define types of bus information.
        !           475: //
        !           476: 
        !           477: typedef enum _BUS_DATA_TYPE {
        !           478:     Cmos,
        !           479:     EisaConfiguration,
        !           480:     Pos,
        !           481:     CbusConfiguration,
        !           482:     PCIConfiguration,
        !           483:     VMEConfiguration,
        !           484:     NuBusConfiguration,
        !           485:     PCMCIAConfiguration,
        !           486:     MPIConfiguration,
        !           487:     MPSAConfiguration,
        !           488:     MaximumBusDataType
        !           489: } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
        !           490: 
        !           491: 
        !           492: //
        !           493: // Structures used by the kernel drivers to describe which ports must be
        !           494: // hooked out directly from the V86 emulator to the driver.
        !           495: //
        !           496: 
        !           497: typedef enum _EMULATOR_PORT_ACCESS_TYPE {
        !           498:     Uchar,
        !           499:     Ushort,
        !           500:     Ulong
        !           501: } EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE;
        !           502: 
        !           503: //
        !           504: // Access Modes
        !           505: //
        !           506: 
        !           507: #define EMULATOR_READ_ACCESS    0x01
        !           508: #define EMULATOR_WRITE_ACCESS   0x02
        !           509: 
        !           510: typedef struct _EMULATOR_ACCESS_ENTRY {
        !           511:     ULONG BasePort;
        !           512:     ULONG NumConsecutivePorts;
        !           513:     EMULATOR_PORT_ACCESS_TYPE AccessType;
        !           514:     UCHAR AccessMode;
        !           515:     UCHAR StringSupport;
        !           516:     PVOID Routine;
        !           517: } EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY;
        !           518: 
        !           519: 
        !           520: #pragma pack(1)
        !           521: 
        !           522: 
        !           523: //
        !           524: // Define Mca POS data block for slot
        !           525: //
        !           526: 
        !           527: typedef struct _CM_MCA_POS_DATA {
        !           528:     USHORT AdapterId;
        !           529:     UCHAR PosData1;
        !           530:     UCHAR PosData2;
        !           531:     UCHAR PosData3;
        !           532:     UCHAR PosData4;
        !           533: } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
        !           534: 
        !           535: //
        !           536: // Memory configuration of eisa data block structure
        !           537: //
        !           538: 
        !           539: typedef struct _EISA_MEMORY_TYPE {
        !           540:     UCHAR ReadWrite: 1;
        !           541:     UCHAR Cached : 1;
        !           542:     UCHAR Reserved0 :1;
        !           543:     UCHAR Type:2;
        !           544:     UCHAR Shared:1;
        !           545:     UCHAR Reserved1 :1;
        !           546:     UCHAR MoreEntries : 1;
        !           547: } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
        !           548: 
        !           549: typedef struct _EISA_MEMORY_CONFIGURATION {
        !           550:     EISA_MEMORY_TYPE ConfigurationByte;
        !           551:     UCHAR DataSize;
        !           552:     USHORT AddressLowWord;
        !           553:     UCHAR AddressHighByte;
        !           554:     USHORT MemorySize;
        !           555: } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
        !           556: 
        !           557: 
        !           558: //
        !           559: // Interrupt configurationn of eisa data block structure
        !           560: //
        !           561: 
        !           562: typedef struct _EISA_IRQ_DESCRIPTOR {
        !           563:     UCHAR Interrupt : 4;
        !           564:     UCHAR Reserved :1;
        !           565:     UCHAR LevelTriggered :1;
        !           566:     UCHAR Shared : 1;
        !           567:     UCHAR MoreEntries : 1;
        !           568: } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
        !           569: 
        !           570: typedef struct _EISA_IRQ_CONFIGURATION {
        !           571:     EISA_IRQ_DESCRIPTOR ConfigurationByte;
        !           572:     UCHAR Reserved;
        !           573: } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
        !           574: 
        !           575: 
        !           576: //
        !           577: // DMA description of eisa data block structure
        !           578: //
        !           579: 
        !           580: typedef struct _DMA_CONFIGURATION_BYTE0 {
        !           581:     UCHAR Channel : 3;
        !           582:     UCHAR Reserved : 3;
        !           583:     UCHAR Shared :1;
        !           584:     UCHAR MoreEntries :1;
        !           585: } DMA_CONFIGURATION_BYTE0;
        !           586: 
        !           587: typedef struct _DMA_CONFIGURATION_BYTE1 {
        !           588:     UCHAR Reserved0 : 2;
        !           589:     UCHAR TransferSize : 2;
        !           590:     UCHAR Timing : 2;
        !           591:     UCHAR Reserved1 : 2;
        !           592: } DMA_CONFIGURATION_BYTE1;
        !           593: 
        !           594: typedef struct _EISA_DMA_CONFIGURATION {
        !           595:     DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
        !           596:     DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
        !           597: } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
        !           598: 
        !           599: 
        !           600: //
        !           601: // Port description of eisa data block structure
        !           602: //
        !           603: 
        !           604: typedef struct _EISA_PORT_DESCRIPTOR {
        !           605:     UCHAR NumberPorts : 5;
        !           606:     UCHAR Reserved :1;
        !           607:     UCHAR Shared :1;
        !           608:     UCHAR MoreEntries : 1;
        !           609: } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
        !           610: 
        !           611: typedef struct _EISA_PORT_CONFIGURATION {
        !           612:     EISA_PORT_DESCRIPTOR Configuration;
        !           613:     USHORT PortAddress;
        !           614: } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
        !           615: 
        !           616: 
        !           617: //
        !           618: // Eisa slot information definition
        !           619: // N.B. This structure is different from the one defined
        !           620: //      in ARC eisa addendum.
        !           621: //
        !           622: 
        !           623: typedef struct _CM_EISA_SLOT_INFORMATION {
        !           624:     UCHAR ReturnCode;
        !           625:     UCHAR ReturnFlags;
        !           626:     UCHAR MajorRevision;
        !           627:     UCHAR MinorRevision;
        !           628:     USHORT Checksum;
        !           629:     UCHAR NumberFunctions;
        !           630:     UCHAR FunctionInformation;
        !           631:     ULONG CompressedId;
        !           632: } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
        !           633: 
        !           634: 
        !           635: //
        !           636: // Eisa function information definition
        !           637: //
        !           638: 
        !           639: typedef struct _CM_EISA_FUNCTION_INFORMATION {
        !           640:     ULONG CompressedId;
        !           641:     UCHAR IdSlotFlags1;
        !           642:     UCHAR IdSlotFlags2;
        !           643:     UCHAR MinorRevision;
        !           644:     UCHAR MajorRevision;
        !           645:     UCHAR Selections[26];
        !           646:     UCHAR FunctionFlags;
        !           647:     UCHAR TypeString[80];
        !           648:     EISA_MEMORY_CONFIGURATION EisaMemory[9];
        !           649:     EISA_IRQ_CONFIGURATION EisaIrq[7];
        !           650:     EISA_DMA_CONFIGURATION EisaDma[4];
        !           651:     EISA_PORT_CONFIGURATION EisaPort[20];
        !           652:     UCHAR InitializationData[60];
        !           653: } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
        !           654: 
        !           655: #pragma pack()
        !           656: 
        !           657: //
        !           658: // Masks for EISA function information
        !           659: //
        !           660: 
        !           661: #define EISA_FUNCTION_ENABLED                   0x80
        !           662: #define EISA_FREE_FORM_DATA                     0x40
        !           663: #define EISA_HAS_PORT_INIT_ENTRY                0x20
        !           664: #define EISA_HAS_PORT_RANGE                     0x10
        !           665: #define EISA_HAS_DMA_ENTRY                      0x08
        !           666: #define EISA_HAS_IRQ_ENTRY                      0x04
        !           667: #define EISA_HAS_MEMORY_ENTRY                   0x02
        !           668: #define EISA_HAS_TYPE_ENTRY                     0x01
        !           669: #define EISA_HAS_INFORMATION                    EISA_HAS_PORT_RANGE + \
        !           670:                                                 EISA_HAS_DMA_ENTRY + \
        !           671:                                                 EISA_HAS_IRQ_ENTRY + \
        !           672:                                                 EISA_HAS_MEMORY_ENTRY + \
        !           673:                                                 EISA_HAS_TYPE_ENTRY
        !           674: 
        !           675: //
        !           676: // Masks for EISA memory configuration
        !           677: //
        !           678: 
        !           679: #define EISA_MORE_ENTRIES                       0x80
        !           680: #define EISA_SYSTEM_MEMORY                      0x00
        !           681: #define EISA_MEMORY_TYPE_RAM                    0x01
        !           682: 
        !           683: //
        !           684: // Returned error code for EISA bios call
        !           685: //
        !           686: 
        !           687: #define EISA_INVALID_SLOT                       0x80
        !           688: #define EISA_INVALID_FUNCTION                   0x81
        !           689: #define EISA_INVALID_CONFIGURATION              0x82
        !           690: #define EISA_EMPTY_SLOT                         0x83
        !           691: #define EISA_INVALID_BIOS_CALL                  0x86
        !           692: 
        !           693: 
        !           694: #endif /* _MINIPORT_ */

unix.superglobalmegacorp.com

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