2 * PROJECT: ReactOS Framebuffer Display Driver
3 * LICENSE: Microsoft NT4 DDK Sample Code License
4 * FILE: boot/drivers/video/displays/framebuf/driver.h
5 * PURPOSE: Main Driver Header File
6 * PROGRAMMERS: Copyright (c) 1992-1995 Microsoft Corporation
7 * ReactOS Portable Systems Group
22 HANDLE hDriver
; // Handle to \Device\Screen
23 HDEV hdevEng
; // Engine's handle to PDEV
24 HSURF hsurfEng
; // Engine's handle to surface
25 HPALETTE hpalDefault
; // Handle to the default palette for device.
26 PBYTE pjScreen
; // This is pointer to base screen address
27 ULONG cxScreen
; // Visible screen width
28 ULONG cyScreen
; // Visible screen height
29 ULONG ulMode
; // Mode the mini-port driver is in.
30 LONG lDeltaScreen
; // Distance from one scan to the next.
31 ULONG cScreenSize
; // size of video memory, including
33 PVOID pOffscreenList
; // linked list of DCI offscreen surfaces.
34 FLONG flRed
; // For bitfields device, Red Mask
35 FLONG flGreen
; // For bitfields device, Green Mask
36 FLONG flBlue
; // For bitfields device, Blue Mask
37 ULONG cPaletteShift
; // number of bits the 8-8-8 palette must
38 // be shifted by to fit in the hardware
40 ULONG ulBitCount
; // # of bits per pel 8,16,24,32 are only supported.
41 POINTL ptlHotSpot
; // adjustment for pointer hot spot
42 VIDEO_POINTER_CAPABILITIES PointerCapabilities
; // HW pointer abilities
43 PVIDEO_POINTER_ATTRIBUTES pPointerAttributes
; // hardware pointer attributes
44 DWORD cjPointerAttributes
; // Size of buffer allocated
45 BOOL fHwCursorActive
; // Are we currently using the hw cursor
46 PALETTEENTRY
*pPal
; // If this is pal managed, this is the pal
47 BOOL bSupportDCI
; // Does the miniport support DCI?
48 // eVb: 3.1 [DDK Change] - Support new VGA Miniport behavior w.r.t updated framebuffer remapping
51 // eVb: 3.1 [VGARISC Change] - Add new fields for VGA support
57 DWORD
getAvailableModes(HANDLE
, PVIDEO_MODE_INFORMATION
*, DWORD
*);
58 BOOL
bInitPDEV(PPDEV
, PDEVMODEW
, GDIINFO
*, DEVINFO
*);
59 BOOL
bInitSURF(PPDEV
, BOOL
);
60 BOOL
bInitPaletteInfo(PPDEV
, DEVINFO
*);
61 BOOL
bInitPointer(PPDEV
, DEVINFO
*);
62 BOOL
bInit256ColorPalette(PPDEV
);
63 VOID
vDisablePalette(PPDEV
);
64 VOID
vDisableSURF(PPDEV
);
66 #define MAX_CLUT_SIZE (sizeof(VIDEO_CLUT) + (sizeof(ULONG) * 256))
69 // Determines the size of the DriverExtra information in the DEVMODE
70 // structure passed to and from the display driver.
73 #define DRIVER_EXTRA_SIZE 0
75 // eVb: 3.2 [VGARISC Change] - Transform into VGA driver
76 #define DLL_NAME L"vga" // Name of the DLL in UNICODE
77 #define STANDARD_DEBUG_PREFIX "Vga risc: " // All debug output is prefixed
78 #define ALLOC_TAG 'rgvD' // Four byte tag (characters in
79 // reverse order) used for memory
83 // eVb: 3.3 [VGARISC Change] - Add new macros for VGA usage
85 // Each pixel in 4BPP being a nibble, the color data for that pixel is thus
86 // located at the xth bit within the nibble, where x is the plane number [0-3].
87 // Each nibble being 4 bytes, the color data is thus at the (nibble * 4 + x).
88 // That color data is then taken from its linear position and shifted to the
89 // correct position within the 16-bit planar buffer word.
91 #define VAL(data, px, pl, pos) ((data) >> (((px) * 4) + (pl)) & 1) << (pos)
94 // This figures out which pixel in the planar word data corresponds to which pixel
95 // in the 4BPP linear data.
97 #define SET_PLANE_DATA(x, y, a, b) \
98 (x) |= VAL(y, (((-1 + ((((b) % 8) % 2) << 1) - (((b) % 8) + 1) + 8))), a, b)
100 /* Alignment Macros */
101 #define ALIGN_DOWN_BY(size, align) \
102 ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
104 #define ALIGN_UP_BY(size, align) \
105 (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))