Implement VideoPortGetAssociatedDeviceExtension and VideoPortCheckForDeviceExistence
[reactos.git] / reactos / drivers / video / videoprt / videoprt.h
index 3412b95..52fd9b3 100644 (file)
 #ifndef VIDEOPRT_H
 #define VIDEOPRT_H
 
-#include <ddk/miniport.h>
-#include <ddk/video.h>
-#include <ddk/ntddvdeo.h>
-#include <ddk/ntapi.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>
 
-int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
-int vsprintf(char *buf, const char *fmt, va_list args);
-
-BOOLEAN STDCALL
-HalDisableSystemInterrupt(ULONG Vector,
-  KIRQL Irql);
-  
-BOOLEAN STDCALL
-HalEnableSystemInterrupt(ULONG Vector,
-  KIRQL Irql,
-  KINTERRUPT_MODE InterruptMode);
-
-PIMAGE_NT_HEADERS STDCALL RtlImageNtHeader(IN PVOID BaseAddress);
-
 #define TAG_VIDEO_PORT  TAG('V', 'I', 'D', 'P')
 
+#define DPFLTR_IHVVIDEO_ID 0 /* FIXME */
+
 typedef struct _VIDEO_PORT_ADDRESS_MAPPING
 {
    LIST_ENTRY List;
    PVOID MappedAddress;
-   PVOID MappedUserAddress;
    ULONG NumberOfUchars;
    PHYSICAL_ADDRESS IoAddress;
    ULONG SystemIoBusNumber;
    UINT MappingCount;
-   UINT UserMappingCount;
 } 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;
@@ -68,21 +76,27 @@ typedef struct _VIDEO_PORT_DRIVER_EXTENSION
 
 typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
 {
+   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;
-   ULONG AdapterInterfaceType;
+   BOOLEAN InterruptShared;
+   INTERFACE_TYPE AdapterInterfaceType;
    ULONG SystemIoBusNumber;
    ULONG SystemIoSlotNumber;
    LIST_ENTRY AddressMappingListHead;
    KDPC DpcObject;
    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;
 
@@ -92,99 +106,140 @@ typedef struct _VIDEO_PORT_DEVICE_EXTENSTION
       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
+NTSTATUS NTAPI
 IntVideoPortAddDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PDEVICE_OBJECT PhysicalDeviceObject);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchOpen(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchClose(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchCleanup(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchDeviceControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchPnp(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortDispatchPower(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp);
 
-VOID STDCALL
+NTSTATUS NTAPI
+IntVideoPortDispatchWrite(
+   IN PDEVICE_OBJECT DeviceObject,
+   IN PIRP Irp);
+
+VOID NTAPI
 IntVideoPortUnload(PDRIVER_OBJECT DriverObject);
 
 /* timer.c */
 
-BOOLEAN STDCALL
+BOOLEAN NTAPI
 IntVideoPortSetupTimer(
    IN PDEVICE_OBJECT DeviceObject,
    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension);
 
 /* interrupt.c */
 
-BOOLEAN STDCALL
+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 PEPROCESS Csrss;
+extern PKPROCESS Csrss;
 
-PVOID STDCALL
+VP_STATUS NTAPI
+VideoPortEnumerateChildren(
+   IN PVOID HwDeviceExtension,
+   IN PVOID Reserved);
+
+PVOID NTAPI
 VideoPortGetProcAddress(
    IN PVOID HwDeviceExtension,
    IN PUCHAR FunctionName);
 
-VOID FASTCALL 
-IntAttachToCSRSS(PEPROCESS *CallingProcess, PEPROCESS *PrevAttachedProcess);
+VOID FASTCALL
+IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
+
+VOID FASTCALL
+IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
 
-VOID FASTCALL 
-IntDetachFromCSRSS(PEPROCESS *CallingProcess, PEPROCESS *PrevAttachedProcess);
+NTSTATUS NTAPI
+IntVideoPortCreateAdapterDeviceObject(
+   IN PDRIVER_OBJECT DriverObject,
+   IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
+   IN PDEVICE_OBJECT PhysicalDeviceObject  OPTIONAL,
+   OUT PDEVICE_OBJECT *DeviceObject  OPTIONAL);
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IntVideoPortFindAdapter(
    IN PDRIVER_OBJECT DriverObject,
    IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
-   IN PDEVICE_OBJECT PhysicalDeviceObject);
+   IN PDEVICE_OBJECT DeviceObject);
 
 /* int10.c */
 
-VP_STATUS STDCALL
+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,
@@ -192,7 +247,7 @@ IntInt10ReadMemory(
    OUT PVOID Buffer,
    IN ULONG Length);
 
-VP_STATUS STDCALL
+VP_STATUS NTAPI
 IntInt10WriteMemory(
    IN PVOID Context,
    IN USHORT Seg,
@@ -200,12 +255,12 @@ 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 STDCALL
+VP_STATUS NTAPI
 VideoPortInt10(
    IN PVOID HwDeviceExtension,
    IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);