Implement VideoPortGetAssociatedDeviceExtension and VideoPortCheckForDeviceExistence
[reactos.git] / reactos / drivers / video / videoprt / videoprt.h
index a25d544..52fd9b3 100644 (file)
  * If not, write to the Free Software Foundation,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
- * $Id: videoprt.h,v 1.6 2004/03/09 18:56:32 navaraf Exp $
+ * $Id$
  */
 
 #ifndef VIDEOPRT_H
 #define VIDEOPRT_H
 
-#include <ddk/miniport.h>
-#include <ddk/video.h>
-#include <ddk/ntddvdeo.h>
-#include "internal/ps.h"
+#include <stdio.h>
+#include <ntddk.h>
+#include <miniport.h>
+#include <video.h>
+#include <ntddvdeo.h>
+#include <ntagp.h>
+#include <ntifs.h>
+#include <ndk/ntndk.h>
+#include <reactos/helper.h>
+
 #define NDEBUG
 #include <debug.h>
 
-/*
- * FIXME: Definition missing from w32api!
- */
-#ifndef SYNCH_LEVEL
-#define SYNCH_LEVEL    (IPI_LEVEL - 2)
-#endif
-VOID FASTCALL KfLowerIrql(IN KIRQL NewIrql);
-#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
-KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql);
-NTKERNELAPI VOID HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
-
 #define TAG_VIDEO_PORT  TAG('V', 'I', 'D', 'P')
 
-extern PEPROCESS Csrss;
+#define DPFLTR_IHVVIDEO_ID 0 /* FIXME */
 
 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
 {
@@ -56,61 +51,195 @@ typedef struct _VIDEO_PORT_ADDRESS_MAPPING
    UINT MappingCount;
 } VIDEO_PORT_ADDRESS_MAPPING, *PVIDEO_PORT_ADDRESS_MAPPING;
 
+struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING;
+
+typedef struct _VIDEO_PORT_AGP_MAPPING
+{
+   ULONG NumberOfPages;
+   PVOID MapHandle;
+   PHYSICAL_ADDRESS PhysicalAddress;
+} VIDEO_PORT_AGP_MAPPING, *PVIDEO_PORT_AGP_MAPPING;
+
+typedef struct _VIDEO_PORT_AGP_VIRTUAL_MAPPING
+{
+   PVIDEO_PORT_AGP_MAPPING AgpMapping;
+   HANDLE ProcessHandle;
+   PVOID MappedAddress;
+} VIDEO_PORT_AGP_VIRTUAL_MAPPING, *PVIDEO_PORT_AGP_VIRTUAL_MAPPING;
+
+typedef struct _VIDEO_PORT_DRIVER_EXTENSION
+{
+   VIDEO_HW_INITIALIZATION_DATA InitializationData;
+   PVOID HwContext;
+   UNICODE_STRING RegistryPath;
+} VIDEO_PORT_DRIVER_EXTENSION, *PVIDEO_PORT_DRIVER_EXTENSION;
+
 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
 {
-   PDEVICE_OBJECT DeviceObject;
+   ULONG DeviceNumber;
+   PDRIVER_OBJECT DriverObject;
+   PDEVICE_OBJECT PhysicalDeviceObject;
+   PDEVICE_OBJECT FunctionalDeviceObject;
+   PDEVICE_OBJECT NextDeviceObject;
+   UNICODE_STRING RegistryPath;
    PKINTERRUPT InterruptObject;
    KSPIN_LOCK InterruptSpinLock;
+   PCM_RESOURCE_LIST AllocatedResources;
    ULONG InterruptVector;
    ULONG InterruptLevel;
-   PVIDEO_HW_INITIALIZE HwInitialize;
-   PVIDEO_HW_RESET_HW HwResetHw;
-   PVIDEO_HW_TIMER HwTimer;
-   PVIDEO_HW_INTERRUPT HwInterrupt;
-   LIST_ENTRY AddressMappingListHead;
+   BOOLEAN InterruptShared;
    INTERFACE_TYPE AdapterInterfaceType;
    ULONG SystemIoBusNumber;
-   UNICODE_STRING RegistryPath;
+   ULONG SystemIoSlotNumber;
+   LIST_ENTRY AddressMappingListHead;
    KDPC DpcObject;
-   UCHAR MiniPortDeviceExtension[1]; /* must be the last entry */
+   VIDEO_PORT_DRIVER_EXTENSION *DriverExtension;
+   ULONG DeviceOpened;
+   AGP_BUS_INTERFACE_STANDARD AgpInterface;
+   KMUTEX DeviceLock;
+   CHAR MiniPortDeviceExtension[1];
 } VIDEO_PORT_DEVICE_EXTENSION, *PVIDEO_PORT_DEVICE_EXTENSION;
 
-NTSTATUS STDCALL
-VidDispatchOpen(IN PDEVICE_OBJECT pDO, IN PIRP Irp);
+#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension) \
+   CONTAINING_RECORD( \
+      HwDeviceExtension, \
+      VIDEO_PORT_DEVICE_EXTENSION, \
+      MiniPortDeviceExtension)
+
+/* agp.c */
+
+NTSTATUS
+IopInitiatePnpIrp(
+  PDEVICE_OBJECT DeviceObject,
+  PIO_STATUS_BLOCK IoStatusBlock,
+  ULONG MinorFunction,
+  PIO_STACK_LOCATION Stack OPTIONAL);
+
+NTSTATUS NTAPI
+IntAgpGetInterface(
+   IN PVOID HwDeviceExtension,
+   IN OUT PINTERFACE Interface);
+
+/* dispatch.c */
 
-NTSTATUS STDCALL
-VidDispatchClose(IN PDEVICE_OBJECT pDO, IN PIRP Irp);
+NTSTATUS NTAPI
+IntVideoPortAddDevice(
+   IN PDRIVER_OBJECT DriverObject,
+   IN PDEVICE_OBJECT PhysicalDeviceObject);
 
-NTSTATUS STDCALL
-VidDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
+NTSTATUS NTAPI
+IntVideoPortDispatchOpen(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
 
-PVOID STDCALL
-InternalMapMemory(
-   IN PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension,
-   IN PHYSICAL_ADDRESS IoAddress,
-   IN ULONG NumberOfUchars,
-   IN UCHAR InIoSpace,
-   OUT NTSTATUS *Status);
+NTSTATUS NTAPI
+IntVideoPortDispatchClose(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
 
-VOID STDCALL
-InternalUnmapMemory(
-   IN PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension,
-   IN PVOID MappedAddress);
+NTSTATUS NTAPI
+IntVideoPortDispatchCleanup(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
 
-VP_STATUS STDCALL
+NTSTATUS NTAPI
+IntVideoPortDispatchDeviceControl(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
+
+NTSTATUS NTAPI
+IntVideoPortDispatchPnp(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
+
+NTSTATUS NTAPI
+IntVideoPortDispatchPower(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
+
+NTSTATUS NTAPI
+IntVideoPortDispatchWrite(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
+
+VOID NTAPI
+IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
+
+/* timer.c */
+
+BOOLEAN NTAPI
+IntVideoPortSetupTimer(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
+
+/* interrupt.c */
+
+BOOLEAN NTAPI
+IntVideoPortSetupInterrupt(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
+   IN PVIDEO_PORT_CONFIG_INFO ConfigInfo);
+
+/* resource.c */
+
+NTSTATUS NTAPI
+IntVideoPortMapPhysicalMemory(
+   IN HANDLE Process,
+   IN PHYSICAL_ADDRESS PhysicalAddress,
+   IN ULONG SizeInBytes,
+   IN ULONG Protect,
+   IN OUT PVOID *VirtualAddress  OPTIONAL);
+
+/* videoprt.c */
+
+extern ULONG CsrssInitialized;
+extern PKPROCESS Csrss;
+
+VP_STATUS NTAPI
+VideoPortEnumerateChildren(
+   IN PVOID HwDeviceExtension,
+   IN PVOID Reserved);
+
+PVOID NTAPI
+VideoPortGetProcAddress(
+   IN PVOID HwDeviceExtension,
+   IN PUCHAR FunctionName);
+
+VOID FASTCALL
+IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
+
+VOID FASTCALL
+IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
+
+NTSTATUS NTAPI
+IntVideoPortCreateAdapterDeviceObject(
+   IN PDRIVER_OBJECT DriverObject,
+   IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
+   IN PDEVICE_OBJECT PhysicalDeviceObject  OPTIONAL,
+   OUT PDEVICE_OBJECT *DeviceObject  OPTIONAL);
+
+NTSTATUS NTAPI
+IntVideoPortFindAdapter(
+   IN PDRIVER_OBJECT DriverObject,
+   IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
+   IN PDEVICE_OBJECT DeviceObject);
+
+/* int10.c */
+
+VP_STATUS NTAPI
 IntInt10AllocateBuffer(
    IN PVOID Context,
    OUT PUSHORT Seg,
    OUT PUSHORT Off,
    IN OUT PULONG Length);
 
-VP_STATUS STDCALL
+VP_STATUS NTAPI
 IntInt10FreeBuffer(
    IN PVOID Context,
    IN USHORT Seg,
    IN USHORT Off);
 
-VP_STATUS STDCALL
+VP_STATUS NTAPI
 IntInt10ReadMemory(
    IN PVOID Context,
    IN USHORT Seg,
@@ -118,7 +247,7 @@ IntInt10ReadMemory(
    OUT PVOID Buffer,
    IN ULONG Length);
 
-VP_STATUS STDCALL
+VP_STATUS NTAPI
 IntInt10WriteMemory(
    IN PVOID Context,
    IN USHORT Seg,
@@ -126,9 +255,14 @@ IntInt10WriteMemory(
    IN PVOID Buffer,
    IN ULONG Length);
 
-VP_STATUS STDCALL
+VP_STATUS NTAPI
 IntInt10CallBios(
    IN PVOID Context,
    IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
 
+VP_STATUS NTAPI
+VideoPortInt10(
+   IN PVOID HwDeviceExtension,
+   IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
+
 #endif /* VIDEOPRT_H */