xref: /reactos/win32ss/drivers/videoprt/services.c (revision 40462c92)
1 /*
2  * VideoPort driver
3  *
4  * Copyright (C) 2002, 2003, 2004 ReactOS Team
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21 
22 #include "videoprt.h"
23 
24 #define NDEBUG
25 #include <debug.h>
26 
27 VOID NTAPI
28 IntInterfaceReference(PVOID Context)
29 {
30    /* Do nothing */
31 }
32 
33 VOID NTAPI
34 IntInterfaceDereference(PVOID Context)
35 {
36    /* Do nothing */
37 }
38 
39 VP_STATUS NTAPI
40 VideoPortQueryServices(
41   IN PVOID HwDeviceExtension,
42   IN VIDEO_PORT_SERVICES ServicesType,
43   IN OUT PINTERFACE Interface)
44 {
45    TRACE_(VIDEOPRT, "VideoPortQueryServices - ServicesType: 0x%x\n", ServicesType);
46 
47    switch (ServicesType)
48    {
49       case VideoPortServicesInt10:
50          if (Interface->Version >= VIDEO_PORT_INT10_INTERFACE_VERSION_1 ||
51              Interface->Size >= sizeof(VIDEO_PORT_INT10_INTERFACE))
52          {
53             VIDEO_PORT_INT10_INTERFACE *Int10Interface =
54                (VIDEO_PORT_INT10_INTERFACE *)Interface;
55 
56             Interface->InterfaceReference = IntInterfaceReference;
57             Interface->InterfaceDereference = IntInterfaceDereference;
58             Int10Interface->Int10AllocateBuffer = IntInt10AllocateBuffer;
59             Int10Interface->Int10FreeBuffer = IntInt10FreeBuffer;
60             Int10Interface->Int10ReadMemory = IntInt10ReadMemory;
61             Int10Interface->Int10WriteMemory = IntInt10WriteMemory;
62             Int10Interface->Int10CallBios = IntInt10CallBios;
63             return NO_ERROR;
64          }
65          break;
66 
67       case VideoPortServicesAGP:
68          if ((Interface->Version == VIDEO_PORT_AGP_INTERFACE_VERSION_2 &&
69               Interface->Size >= sizeof(VIDEO_PORT_AGP_INTERFACE_2)) ||
70              (Interface->Version == VIDEO_PORT_AGP_INTERFACE_VERSION_1 &&
71               Interface->Size >= sizeof(VIDEO_PORT_AGP_INTERFACE)))
72          {
73             if (NT_SUCCESS(IntAgpGetInterface(HwDeviceExtension, Interface)))
74             {
75                return NO_ERROR;
76             }
77          }
78          break;
79 
80       case VideoPortServicesI2C:
81           UNIMPLEMENTED;
82           return ERROR_INVALID_FUNCTION;
83 
84       case VideoPortServicesHeadless:
85          UNIMPLEMENTED;
86          return ERROR_INVALID_FUNCTION;
87 
88       default:
89          break;
90    }
91 
92    return ERROR_INVALID_FUNCTION;
93 }
94 
95 BOOLEAN NTAPI
96 VideoPortGetAgpServices(
97    IN PVOID HwDeviceExtension,
98    OUT PVIDEO_PORT_AGP_SERVICES AgpServices)
99 {
100    VIDEO_PORT_AGP_INTERFACE Interface;
101    VP_STATUS Status;
102 
103    TRACE_(VIDEOPRT, "VideoPortGetAgpServices\n");
104 
105    Interface.Size = sizeof(Interface);
106    Interface.Version = VIDEO_PORT_AGP_INTERFACE_VERSION_1;
107 
108    Status = VideoPortQueryServices(HwDeviceExtension, VideoPortServicesAGP,
109                                    (PINTERFACE)&Interface);
110    if (Status != NO_ERROR)
111    {
112       WARN_(VIDEOPRT, "VideoPortQueryServices() failed!\n");
113       return FALSE;
114    }
115 
116    RtlCopyMemory(AgpServices, &Interface.AgpReservePhysical, sizeof(VIDEO_PORT_AGP_SERVICES));
117    return TRUE;
118 }
119