ReactOS  0.4.14-dev-384-g5b37caa
enable.c
Go to the documentation of this file.
1 /*
2  * ReactOS Generic Framebuffer display driver
3  *
4  * Copyright (C) 2004 Filip Navara
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20 
21 #include "framebuf.h"
22 
24 {
35 
36 };
37 
38 /*
39  * DrvEnableDriver
40  *
41  * Initial driver entry point exported by the driver DLL. It fills in a
42  * DRVENABLEDATA structure with the driver's DDI version number and the
43  * calling addresses of all DDI functions supported by the driver.
44  *
45  * Status
46  * @implemented
47  */
48 
51  ULONG iEngineVersion,
52  ULONG cj,
53  PDRVENABLEDATA pded)
54 {
55  if (cj >= sizeof(DRVENABLEDATA))
56  {
57  pded->c = sizeof(DrvFunctionTable) / sizeof(DRVFN);
58  pded->pdrvfn = DrvFunctionTable;
60  return TRUE;
61  }
62  else
63  {
64  return FALSE;
65  }
66 }
67 
68 /*
69  * DrvEnablePDEV
70  *
71  * Returns a description of the physical device's characteristics to GDI.
72  *
73  * Status
74  * @implemented
75  */
76 
79  IN DEVMODEW *pdm,
81  IN ULONG cPat,
82  OUT HSURF *phsurfPatterns,
83  IN ULONG cjCaps,
84  OUT ULONG *pdevcaps,
86  OUT DEVINFO *pdi,
87  IN HDEV hdev,
90 {
91  PPDEV ppdev;
92  GDIINFO GdiInfo;
93  DEVINFO DevInfo;
94 
95  ppdev = EngAllocMem(FL_ZERO_MEMORY, sizeof(PDEV), ALLOC_TAG);
96  if (ppdev == NULL)
97  {
98  return NULL;
99  }
100 
101  ppdev->hDriver = hDriver;
102 
103  if (!IntInitScreenInfo(ppdev, pdm, &GdiInfo, &DevInfo))
104  {
105  EngFreeMem(ppdev);
106  return NULL;
107  }
108 
109  if (!IntInitDefaultPalette(ppdev, &DevInfo))
110  {
111  EngFreeMem(ppdev);
112  return NULL;
113  }
114 
115  memcpy(pdi, &DevInfo, min(sizeof(DEVINFO), cjDevInfo));
116  memcpy(pdevcaps, &GdiInfo, min(sizeof(GDIINFO), cjCaps));
117 
118  return (DHPDEV)ppdev;
119 }
120 
121 /*
122  * DrvCompletePDEV
123  *
124  * Stores the GDI handle (hdev) of the physical device in dhpdev. The driver
125  * should retain this handle for use when calling GDI services.
126  *
127  * Status
128  * @implemented
129  */
130 
133  IN DHPDEV dhpdev,
134  IN HDEV hdev)
135 {
136  ((PPDEV)dhpdev)->hDevEng = hdev;
137 }
138 
139 /*
140  * DrvDisablePDEV
141  *
142  * Release the resources allocated in DrvEnablePDEV. If a surface has been
143  * enabled DrvDisableSurface will have already been called.
144  *
145  * Status
146  * @implemented
147  */
148 
151  IN DHPDEV dhpdev)
152 {
153  if (((PPDEV)dhpdev)->DefaultPalette)
154  {
156  }
157 
158  if (((PPDEV)dhpdev)->PaletteEntries != NULL)
159  {
160  EngFreeMem(((PPDEV)dhpdev)->PaletteEntries);
161  }
162 
163  EngFreeMem(dhpdev);
164 }
#define IN
Definition: typedefs.h:38
BOOL IntInitScreenInfo(PPDEV ppdev, LPDEVMODEW pDevMode, PGDIINFO pGdiInfo, PDEVINFO pDevInfo)
Definition: screen.c:115
#define TRUE
Definition: types.h:120
_In_ ULONG cj
Definition: winddi.h:3540
#define INDEX_DrvCompletePDEV
Definition: winddi.h:417
typedef DHPDEV(APIENTRY FN_DrvEnablePDEV)(_In_ DEVMODEW *pdm
ULONG NTAPI DrvGetModes(HANDLE hDriver, ULONG cjSize, DEVMODEW *pdm)
Definition: enable.c:374
#define INDEX_DrvGetModes
Definition: winddi.h:457
#define EngFreeMem
Definition: polytest.cpp:56
HSURF NTAPI DrvEnableSurface(DHPDEV dhpdev)
Definition: enable.c:200
#define INDEX_DrvEnablePDEV
Definition: winddi.h:416
BOOL NTAPI DrvAssertMode(DHPDEV dhpdev, BOOL bEnable)
Definition: enable.c:302
VOID APIENTRY DrvDisablePDEV(IN DHPDEV dhpdev)
Definition: enable.c:150
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR _In_ HANDLE hDriver
Definition: winddi.h:3553
BOOL IntInitDefaultPalette(PPDEV ppdev, PDEVINFO pDevInfo)
Definition: palette.c:60
#define ALLOC_TAG
Definition: btrfs_drv.h:91
static const UCHAR DefaultPalette[]
Definition: blue.c:71
unsigned int BOOL
Definition: ntddk_ex.h:94
HANDLE hDriver
Definition: framebuf.h:35
smooth NULL
Definition: ftsmooth.c:416
#define INDEX_DrvAssertMode
Definition: winddi.h:421
#define DDI_DRIVER_VERSION_NT5
Definition: winddi.h:537
BOOL APIENTRY DrvEnableDriver(ULONG iEngineVersion, ULONG cj, PDRVENABLEDATA pded)
Definition: enable.c:50
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
DRVFN * pdrvfn
Definition: winddi.h:544
_In_ LPWSTR pwszLogAddress
Definition: winddi.h:3548
FN_DrvSetPalette DrvSetPalette
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
struct _PDEV * PPDEV
#define INDEX_DrvSetPointerShape
Definition: winddi.h:445
Definition: framebuf.h:33
static DRVFN DrvFunctionTable[]
Definition: enable.c:23
#define FL_ZERO_MEMORY
Definition: polytest.cpp:58
#define INDEX_DrvSetPalette
Definition: winddi.h:438
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
ENGAPI BOOL APIENTRY EngDeletePalette(_In_ _Post_ptr_invalid_ HPALETTE hpal)
#define INDEX_DrvDisableSurface
Definition: winddi.h:420
FN_DrvMovePointer DrvMovePointer
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR pwszDeviceName
Definition: winddi.h:3553
DHPDEV APIENTRY DrvEnablePDEV(IN DEVMODEW *pdm, IN LPWSTR pwszLogAddress, IN ULONG cPat, OUT HSURF *phsurfPatterns, IN ULONG cjCaps, OUT ULONG *pdevcaps, IN ULONG cjDevInfo, OUT DEVINFO *pdi, IN HDEV hdev, IN LPWSTR pwszDeviceName, IN HANDLE hDriver)
Definition: enable.c:78
#define INDEX_DrvEnableSurface
Definition: winddi.h:419
FN_DrvSetPointerShape DrvSetPointerShape
BOOLEAN(* PFN)(PARGS)
Definition: parse.h:47
VOID APIENTRY DrvCompletePDEV(IN DHPDEV dhpdev, IN HDEV hdev)
Definition: enable.c:132
_In_ LPWSTR _In_ ULONG cPat
Definition: winddi.h:3548
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG cjDevInfo
Definition: winddi.h:3553
ULONG iDriverVersion
Definition: winddi.h:542
#define min(a, b)
Definition: monoChain.cc:55
#define INDEX_DrvDisablePDEV
Definition: winddi.h:418
#define INDEX_DrvMovePointer
Definition: winddi.h:446
_In_ LPWSTR _In_ ULONG _In_ ULONG cjCaps
Definition: winddi.h:3551
#define OUT
Definition: typedefs.h:39
unsigned int ULONG
Definition: retypes.h:1
WCHAR * LPWSTR
Definition: xmlstorage.h:184
VOID NTAPI DrvDisableSurface(DHPDEV dhpdev)
Definition: enable.c:287
Definition: winddi.h:529
_In_ HDEV hdev
Definition: winddi.h:3449
#define APIENTRY
Definition: api.h:79
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO * pdi
Definition: winddi.h:3553