Annotation of ntddk/src/video/displays/s3/driver.h, revision 1.1

1.1     ! root        1: /******************************Module*Header*******************************\
        !             2: * Module Name: driver.h
        !             3: *
        !             4: * contains prototypes for the frame buffer driver.
        !             5: *
        !             6: * Copyright (c) 1992 Microsoft Corporation
        !             7: \**************************************************************************/
        !             8: 
        !             9: #include "stddef.h"
        !            10: #include "windows.h"
        !            11: #include "winddi.h"
        !            12: #include "devioctl.h"
        !            13: #include "ntddvdeo.h"
        !            14: #include "debug.h"
        !            15: 
        !            16: #include "s3mem.h"
        !            17: 
        !            18: // Cursor state flags
        !            19: 
        !            20: #define CURSOR_EXCLUDED 0       // Cursor is not visible
        !            21: #define CURSOR_VISIBLE  1       // Cursor is visible
        !            22: 
        !            23: #define CURSOR_DISABLED 0       // No cursor set.
        !            24: #define CURSOR_HARDWARE 1       // Cursor is handled in hardware
        !            25: #define CURSOR_SOFTWARE 2       // Cursor is handled in software
        !            26: 
        !            27: typedef struct _bank {
        !            28:     PVOID   pvScan0;
        !            29:     UINT    Bank;
        !            30:     RECTL   rclClip;
        !            31: } BANK;
        !            32: 
        !            33: typedef BANK *PBANK;
        !            34: 
        !            35: typedef struct {
        !            36:     BYTE    red;
        !            37:     BYTE    green;
        !            38:     BYTE    blue;
        !            39: } DACDATA;
        !            40: 
        !            41: typedef DACDATA *PDACDATA;
        !            42: 
        !            43: typedef struct _ClipNode {
        !            44:     struct _ClipNode *pcnNext;
        !            45:     RECTL    rclClip;
        !            46: } CLIPNODE;
        !            47: 
        !            48: typedef CLIPNODE *PCLIPNODE;
        !            49: 
        !            50: typedef struct {
        !            51:     LONG    x;
        !            52:     LONG    y;
        !            53:     LONG    z;
        !            54: } XYZPOINTL;
        !            55: 
        !            56: typedef XYZPOINTL *PXYZPOINTL;
        !            57: typedef XYZPOINTL XYZPOINT;
        !            58: typedef XYZPOINT  *PXYZPOINT;
        !            59: 
        !            60: // Brush Stuff.
        !            61: 
        !            62: typedef struct {
        !            63:     ULONG   nSize;
        !            64:     ULONG   iPatternID;
        !            65:     ULONG   iBrushCacheID;
        !            66:     ULONG   iExpansionCacheID;
        !            67:     ULONG   fl;
        !            68:     ULONG   iType;
        !            69:     ULONG   iBitmapFormat;
        !            70:     ULONG   ulForeColor;
        !            71:     ULONG   ulBackColor;
        !            72:     SIZEL   sizlPattern;
        !            73:     LONG    lDeltaPattern;
        !            74:     BYTE    ajPattern[1];
        !            75: } S3BRUSH;
        !            76: 
        !            77: typedef S3BRUSH *PS3BRUSH;
        !            78: 
        !            79: #define MAX_MONO_BRUSH_EXPANSION_SLOTS  8
        !            80: 
        !            81: // Save Screen Bits Stuff
        !            82: 
        !            83: typedef struct _savedscrnbitshdr {
        !            84:     struct  _savedscrnbits *pssbLink;       // Link to next set of bits
        !            85:     ULONG   iUniq;                          // Unique ID for these bits
        !            86:     INT     x,                              // Screen x & y coordinates
        !            87:             y,
        !            88:             cx,                             // cx & cy of bit block.
        !            89:             cy;
        !            90: } SAVEDSCRNBITSHDR;
        !            91: 
        !            92: typedef SAVEDSCRNBITSHDR *PSAVEDSCRNBITSHDR;
        !            93: 
        !            94: typedef struct _savedscrnbits {
        !            95:     SAVEDSCRNBITSHDR ssbh;
        !            96:     DWORD            aBits[1];
        !            97: } SAVEDSCRNBITS;
        !            98: 
        !            99: typedef SAVEDSCRNBITS *PSAVEDSCRNBITS;
        !           100: 
        !           101: // Font & Text stuff
        !           102: 
        !           103: typedef struct _cachedGlyph {
        !           104:     HGLYPH      hg;
        !           105:     struct      _cachedGlyph  *pcgCollisionLink;
        !           106:     ULONG       fl;
        !           107:     POINTL      ptlOrigin;
        !           108:     SIZEL       sizlBitmap;
        !           109:     ULONG       BmPitchInPels;
        !           110:     ULONG       BmPitchInBytes;
        !           111:     XYZPOINTL   xyzGlyph;
        !           112: } CACHEDGLYPH, *PCACHEDGLYPH;
        !           113: 
        !           114: #define VALID_GLYPH     0x01
        !           115: 
        !           116: #define END_COLLISIONS  0
        !           117: 
        !           118: typedef struct _cachedFont {
        !           119:     struct _cachedFont *pcfNext;
        !           120:     ULONG           iUniq;
        !           121:     ULONG           cGlyphs;
        !           122:     ULONG           cjMaxGlyph1;
        !           123:     PCACHEDGLYPH    pCachedGlyphs;
        !           124: } CACHEDFONT, *PCACHEDFONT;
        !           125: 
        !           126: // The Physical Device data structure.
        !           127: 
        !           128: typedef struct  _PDEV
        !           129: {
        !           130: 
        !           131:     // Enhanced mode register addresses.
        !           132: 
        !           133:     WORD        cur_x,
        !           134:                 cur_y,
        !           135:                 dest_x,
        !           136:                 dest_y,
        !           137:                 axstp,
        !           138:                 diastp,
        !           139:                 rect_width,
        !           140:                 line_max,
        !           141:                 err_term,
        !           142:                 gp_stat,
        !           143:                 cmd,
        !           144:                 short_stroke_reg,
        !           145:                 multifunc_cntl,
        !           146:                 bkgd_color,
        !           147:                 frgd_color,
        !           148:                 bkgd_mix,
        !           149:                 frgd_mix,
        !           150:                 wrt_mask,
        !           151:                 rd_mask,
        !           152:                 pixel_transfer;
        !           153: 
        !           154:     // -------------------------------------------------------------------
        !           155:     // NOTE: Changes up to here in the PDEV structure must be reflected in
        !           156:     // i386\strucs.inc (assuming you're on an x86, of course)!
        !           157: 
        !           158:     HANDLE  hDriver;                    // Handle to \Device\Screen
        !           159:     HDEV    hdevEng;                    // Engine's handle to PDEV
        !           160:     HSURF   hsurfEng;                   // Engine's handle to surface
        !           161:     HANDLE  hsurfBm;                    // Handle to the "punt" surface
        !           162:     SURFOBJ *pSurfObj;                  // pointer to the locked "punt" surface
        !           163:     SURFOBJ *psoTemp;                   // pointer to the locked temp "punt" surface
        !           164: 
        !           165:     HPALETTE hpalDefault;               // Handle to the default palette for device.
        !           166: 
        !           167:     PBYTE   pjScreen;                   // This is pointer to base screen address
        !           168: 
        !           169:     ULONG   cxScreen;                   // Visible screen width
        !           170:     ULONG   cyScreen;                   // Visible screen height
        !           171:     ULONG   cxMaxRam;                   // Width of Video RAM
        !           172:     ULONG   cyMaxRam;                   // Height of Video RAM
        !           173:     ULONG   ulMode;                     // Mode the mini-port driver is in.
        !           174:     LONG    lDeltaScreen;               // Distance from one scan to the next.
        !           175: 
        !           176:     PUCHAR  pucCsrBase;                        // pointer to port 0, mapped into our address space
        !           177:                                         // USED FOR PORTING purposes
        !           178: 
        !           179:     FLONG   flRed;                      // For bitfields device, Red Mask
        !           180:     FLONG   flGreen;                    // For bitfields device, Green Mask
        !           181:     FLONG   flBlue;                     // For bitfields device, Blue Mask
        !           182:     ULONG   ulBitCount;                 // # of bits per pel 8,16,32 are only supported.
        !           183: 
        !           184:     POINTL  ptlHotSpot;                 // Pointer hot spot
        !           185:     SIZEL   szlPointer;                 // Extent of the pointer
        !           186:     POINTL  ptlLastPosition;            // Last position of pointer
        !           187:     ULONG   flPointer;                  // Pointer specific flags.
        !           188:     BYTE    CrtcIndex;                  // Crtc Index Value.
        !           189:     WORD    MonoPointerData;            // Index to Mono Pointer Data
        !           190: 
        !           191:     ULONG   cPatterns;                  // Count of bitmap patterns created
        !           192:     HBITMAP ahbmPat[HS_DDI_MAX];        // Engine handles to standard patterns
        !           193: 
        !           194:     GDIINFO *pGdiInfo;                  // Pointer to temporary buffer for GDIINFO struct
        !           195:     DEVINFO *pDevInfo;                  // Pointer to temporary buffer for DEVINFO struct
        !           196:     PALETTEENTRY *pPal;                 // If this is pal managed, this is the pal
        !           197: 
        !           198:     // Off Screen Save Stuff.
        !           199: 
        !           200:     PWORD    pOffScreenSaveBuffer;      // Pointer to the Off Screen Save Buffer
        !           201:     PDACDATA pDacDataSaveBuffer;        // Pointer to the Dac Data Save Buffer
        !           202: 
        !           203:     // Bank Manager Stuff
        !           204: 
        !           205:     INT     MaxBanks,                   // Max number of banks for driver instance
        !           206:             BankSize,                   // size of each bank in bytes
        !           207:             ScansPerBank;               // Number of scans per bank
        !           208: 
        !           209:     PRECT   prclBanks;                  // defines S3-911's banks.
        !           210:     PBANK   pBanks;                     // Bank control structures
        !           211:     UINT    cBanks,                     // Number of banks to enumerate
        !           212:             iBank;                      // Bank currently enumerated
        !           213: 
        !           214:     PVOID   pvOrgScan0;                 // Original pvScan0
        !           215: 
        !           216:     RECTL   rclOrgBounds;               // Clip Object's original bounds
        !           217:     BYTE    iOrgDComplexity;            // Clip Object's original complexity
        !           218:     BYTE    fjOptions;                  // Clip Object's original flags.
        !           219: 
        !           220:     BYTE    jS3R5;                      // S3's S3R5 (need to preserve high bits)
        !           221: 
        !           222:     // Clip Acceleration Stuff
        !           223: 
        !           224:     PCLIPNODE   pcnClipNodeRoot;        // Clip Node List Root
        !           225:     PCLIPNODE   pcnFirstClip;           // First clip node in Y
        !           226:     PCLIPNODE   pcnLastClip;            // Last clip node in Y
        !           227: 
        !           228:     INT         nClipNodes;             // Number of Clip nodes.
        !           229: 
        !           230:     // Font Stuff
        !           231: 
        !           232:     BYTE   ajGlyphAllocBitVector[CACHED_GLYPHS_ROWS][GLYPHS_PER_ROW];
        !           233: 
        !           234:     // Strip drawing (long lines) stuff
        !           235: 
        !           236:     BYTE        iFormat;                // BMF_*, BMF_PHYSDEVICE
        !           237:     SIZE_T      lNextScan;              // Offset from scan n to n+1
        !           238: 
        !           239:     // Clipping optimization stuff
        !           240: 
        !           241:     LONG        ClipTop;                // S3 clip states.
        !           242:     LONG        ClipLeft;
        !           243:     LONG        ClipRight;
        !           244:     LONG        ClipBottom;
        !           245: 
        !           246:     // Default clip object
        !           247: 
        !           248:     CLIPOBJ     *pcoDefault,                // ptr to a default clip obj
        !           249:                 *pcoFullRam;                // Clip Object for the full RAM
        !           250: 
        !           251:     DDAOBJ      *pdda;                       // DDA Oject used by traps
        !           252: 
        !           253:     // Registers shadows for the 911
        !           254: 
        !           255:     WORD    ForegroundMix,
        !           256:             BackgroundMix,
        !           257:             ForegroundColor,
        !           258:             BackgroundColor,
        !           259:             WriteMask,
        !           260:             ReadMask;
        !           261: 
        !           262:     // Brush optimization stuff
        !           263: 
        !           264:     ULONG   gBrushUnique;               // Unique Brush ID source.
        !           265:     INT     iMaxCachedColorBrushes,
        !           266:             iNextColorBrushCacheSlot;
        !           267:     PULONG  pulColorBrushCacheEntries;
        !           268:     ULONG   ulColorExpansionCacheTag;
        !           269: 
        !           270:     INT     iMaxCachedMonoBrushes,
        !           271:             iNextMonoBrushCacheSlot,
        !           272:             iNextMonoBrushExpansionSlot;
        !           273:     PULONG  pulMonoBrushCacheEntries;
        !           274:     ULONG   aulMonoExpansionCacheTag[MAX_MONO_BRUSH_EXPANSION_SLOTS];
        !           275: 
        !           276:     // Host to Source copy optimization stuff.
        !           277: 
        !           278:     HSURF   hsurfCachedBitmap;
        !           279:     ULONG   iUniqCachedBitmap;
        !           280:     ULONG   iUniqXlate;
        !           281: 
        !           282:     // 801/805/928 bank control stuff.
        !           283: 
        !           284:     WORD        SysCnfg,                // System Config register
        !           285:                 LawCtl;                 // Linear Address Window Control register
        !           286:     BYTE        ExtSysCtl2;             // Extended System Control 2 Register
        !           287: 
        !           288:     // 928 / Bt485 control stuff;
        !           289: 
        !           290:     WORD        ExtDacCtl;              // Exteneded DAC control.
        !           291:     BYTE        Bt485CmdReg0,           // Bt485 Command Reg 0
        !           292:                 Bt485CmdReg1,           // Bt485 Command Reg 1
        !           293:                 Bt485CmdReg2,           // Bt485 Command Reg 2
        !           294:                 Bt485CmdReg3;           // Bt485 Command Reg 3
        !           295: 
        !           296:     BYTE        s3ChipID;
        !           297:     BOOL        bBt485Dac;              // True if Bt485 is present.
        !           298:     BOOL        bNewBankControl;
        !           299: 
        !           300:     // Pointer (Hardware Cursor Control) shadows.
        !           301: 
        !           302:     WORD        HgcMode;                // Hgc Register.
        !           303: 
        !           304:     // Save Screen Bits stuff.
        !           305: 
        !           306:     INT                 iUniqeSaveScreenBits;
        !           307: 
        !           308:     SAVEDSCRNBITSHDR    SavedScreenBitsHeader;
        !           309: 
        !           310: } PDEV, *PPDEV;
        !           311: 
        !           312: 
        !           313: 
        !           314: #define BMF_PHYSDEVICE    0xff
        !           315: 
        !           316: #define VALID_SAVE_BUFFER 0x1
        !           317: #define COLOR_POINTER     0x2
        !           318: #define TAKE_DOWN_POINTER 0X4
        !           319: #define ANIMATEUPDATE     0X8
        !           320: 
        !           321: BOOL bInitPDEV(PPDEV,PDEVMODEW);
        !           322: BOOL bInitSURF(PPDEV,BOOL);
        !           323: BOOL bInitPaletteInfo(PPDEV);
        !           324: BOOL bInitPointer(PPDEV);
        !           325: BOOL bInit256ColorPalette(PPDEV);
        !           326: BOOL bInitPatterns(PPDEV, INT);
        !           327: VOID vDisablePalette(PPDEV);
        !           328: VOID vDisablePatterns(PPDEV);
        !           329: VOID vDisableSURF(PPDEV);
        !           330: DWORD getAvailableModes(HANDLE, PVIDEO_MODE_INFORMATION *, DWORD *);
        !           331: 
        !           332: 
        !           333: // Blt punt stuff
        !           334: 
        !           335: VOID vPuntGetBits(PPDEV ppdev, SURFOBJ *psoTrg, RECTL *prclTrg);
        !           336: VOID vPuntPutBits(PPDEV ppdev, SURFOBJ *psoTrg, RECTL *prclTrg);
        !           337: 
        !           338: 
        !           339: // Bank Manager Stuff
        !           340: 
        !           341: BOOL bBankInit(PPDEV ppdev, BOOL fFirstTime);
        !           342: BOOL bBankEnumStart(PPDEV ppdev, PRECTL prclScans, SURFOBJ *pso, CLIPOBJ *pco);
        !           343: BOOL bSrcBankEnumStart(PPDEV ppdev, PRECTL prclScans, SURFOBJ *pso, CLIPOBJ *pco, RECTL *prclDest);
        !           344: BOOL bBankEnum(PPDEV ppdev, PRECTL prclScans, SURFOBJ *pso, CLIPOBJ *pco);
        !           345: BOOL bBankEnumEnd(PPDEV ppdev, SURFOBJ *pso, CLIPOBJ *pco);
        !           346: 
        !           347: 
        !           348: // Pointer function prototypes
        !           349: 
        !           350: VOID vMoveHardwarePointer(SURFOBJ *,LONG,LONG);
        !           351: BOOL bSetHardwarePointerShape(SURFOBJ  *,SURFOBJ *,SURFOBJ  *, XLATEOBJ *,
        !           352:                               LONG, LONG, LONG, LONG, FLONG);
        !           353: 
        !           354: #define MAX_CLUT_SIZE (sizeof(VIDEO_CLUT) + (sizeof(ULONG) * 256))
        !           355: 
        !           356: // Size of the DrierExtra information in the DEVMODE structure for the S3
        !           357: 
        !           358: #define DRIVER_EXTRA_SIZE 0
        !           359: 
        !           360: #include "s3.h"

unix.superglobalmegacorp.com

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