mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
more work on the videoport driver.
svn path=/trunk/; revision=505
This commit is contained in:
parent
ae32243b6a
commit
2854aac246
3 changed files with 142 additions and 12 deletions
|
@ -1,7 +1,16 @@
|
||||||
|
/*
|
||||||
|
* VideoPort driver
|
||||||
|
* Written by Rex Jolliff
|
||||||
|
*/
|
||||||
|
|
||||||
#include <ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
#include <ntddvid.h>
|
#include <ddk/ntddvid.h>
|
||||||
|
|
||||||
|
#define UNIMPLEMENTED DbgPrint("%s:%d: Function not implemented", __FILE__, __LINE__)
|
||||||
|
|
||||||
|
#define VERSION "0.0.0"
|
||||||
|
|
||||||
|
static VOID VidStartIo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||||
static NTSTATUS VidDispatchOpenClose(IN PDEVICE_OBJECT pDO, IN PIRP Irp);
|
static NTSTATUS VidDispatchOpenClose(IN PDEVICE_OBJECT pDO, IN PIRP Irp);
|
||||||
static NTSTATUS VidDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
static NTSTATUS VidDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||||
|
|
||||||
|
@ -32,12 +41,12 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
|
||||||
DbgPrint("VideoPort Driver %s\n", VERSION);
|
DbgPrint("VideoPort Driver %s\n", VERSION);
|
||||||
|
|
||||||
// Export other driver entry points...
|
// Export other driver entry points...
|
||||||
DriverObject->DriverStartIo = VidtartIo;
|
DriverObject->DriverStartIo = VidStartIo;
|
||||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = VidDispatchOpenClose;
|
DriverObject->MajorFunction[IRP_MJ_CREATE] = VidDispatchOpenClose;
|
||||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] = VidDispatchOpenClose;
|
DriverObject->MajorFunction[IRP_MJ_CLOSE] = VidDispatchOpenClose;
|
||||||
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = VidDispatchDeviceControl;
|
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = VidDispatchDeviceControl;
|
||||||
|
|
||||||
// FIXME: should the miniport driver be loaded here?
|
/* FIXME: should the miniport driver be loaded here? */
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +71,7 @@ VideoPortDisableInterrupt(IN PVOID HwDeviceExtension)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
VP_STATUS
|
VP_STATUS
|
||||||
VideoPortEnableInterrupt(IN PVOID HwDeviceExtension)
|
VideoPortEnableInterrupt(IN PVOID HwDeviceExtension)
|
||||||
{
|
{
|
||||||
|
@ -139,7 +149,66 @@ VideoPortInitialize(IN PVOID Context1,
|
||||||
IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
|
IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
|
||||||
IN PVOID HwContext)
|
IN PVOID HwContext)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UCHAR Again;
|
||||||
|
WCHAR UnicodeBuffer[18];
|
||||||
|
NTSTATUS RC;
|
||||||
|
ANSI_STRING AnsiName;
|
||||||
|
UNICODE_STRING UnicodeName;
|
||||||
|
PDRIVER_OBJECT MPDriverObject = (PDRIVER_OBJECT) Context1;
|
||||||
|
PDEVICE_OBJECT MPDeviceObject;
|
||||||
|
VIDEO_PORT_CONFIG_INFO ConfigInfo;
|
||||||
|
|
||||||
|
/* Build Dispatch table from passed data */
|
||||||
|
MPDriverObject->DriverStartIo = HwInitializationData->HwStartIO;
|
||||||
|
|
||||||
|
/* Create a unicode device name */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* FIXME: Need to add a device index for multiple adapters */
|
||||||
|
RtlInitAnsiString(&AnsiName, "\\Device\\Display");
|
||||||
|
UnicodeName.MaximumLength = 18 * sizeof(WCHAR);
|
||||||
|
UnicodeName.Buffer = UnicodeBuffer;
|
||||||
|
RtlAnsiStringToUnicodeString(&UnicodeName, &AnsiName, FALSE);
|
||||||
|
|
||||||
|
/* Create the device */
|
||||||
|
RC = IoCreateDevice(MPDriverObject,
|
||||||
|
HwInitializationData->HwDeviceExtensionSize,
|
||||||
|
&UnicodeName,
|
||||||
|
FILE_DEVICE_VIDEO,
|
||||||
|
0,
|
||||||
|
TRUE,
|
||||||
|
&MPDeviceObject);
|
||||||
|
if (!NT_SUCCESS(RC))
|
||||||
|
{
|
||||||
|
DbgPrint("IoCreateDevice call failed\n",0);
|
||||||
|
return RC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the buffering strategy here... */
|
||||||
|
MPDeviceObject->Flags |= DO_BUFFERED_IO;
|
||||||
|
|
||||||
|
/* Call HwFindAdapter entry point */
|
||||||
|
/* FIXME: Need to figure out what string to pass as param 3 */
|
||||||
|
if (!HwInitializationData->HwFindAdapter(MPDeviceObject->DeviceExtension,
|
||||||
|
Context2,
|
||||||
|
"",
|
||||||
|
&ConfigInfo,
|
||||||
|
&Again))
|
||||||
|
{
|
||||||
|
DbgPrint("HwFindAdapter call failed");
|
||||||
|
/* FIXME: should deallocate device here */
|
||||||
|
|
||||||
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: Allocate hardware resources for device */
|
||||||
|
/* FIXME: Allocate interrupt for device */
|
||||||
|
}
|
||||||
|
while (&Again);
|
||||||
|
|
||||||
|
/* FIXME: initialize timer routine for MP Driver */
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VP_STATUS
|
VP_STATUS
|
||||||
|
@ -163,7 +232,7 @@ VideoPortMapBankedMemory(IN PVOID HwDeviceExtension,
|
||||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
IN PULONG Length,
|
IN PULONG Length,
|
||||||
IN PULONG InIoSpace,
|
IN PULONG InIoSpace,
|
||||||
INOUT PVOID *VirtualAddress,
|
OUT PVOID *VirtualAddress,
|
||||||
IN ULONG BankLength,
|
IN ULONG BankLength,
|
||||||
IN UCHAR ReadWriteBank,
|
IN UCHAR ReadWriteBank,
|
||||||
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
||||||
|
@ -177,7 +246,7 @@ VideoPortMapMemory(IN PVOID HwDeviceExtension,
|
||||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
IN PULONG Length,
|
IN PULONG Length,
|
||||||
IN PULONG InIoSpace,
|
IN PULONG InIoSpace,
|
||||||
INOUT PVOID *VirtualAddress)
|
OUT PVOID *VirtualAddress)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
@ -333,7 +402,7 @@ BOOLEAN
|
||||||
VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
||||||
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
||||||
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
||||||
INOUT PVOID Context)
|
OUT PVOID Context)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
@ -485,6 +554,28 @@ VidDispatchOpenClose(IN PDEVICE_OBJECT pDO,
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VidStartIo
|
||||||
|
//
|
||||||
|
// DESCRIPTION:
|
||||||
|
// Get the next requested I/O packet started
|
||||||
|
//
|
||||||
|
// RUN LEVEL:
|
||||||
|
// DISPATCH_LEVEL
|
||||||
|
//
|
||||||
|
// ARGUMENTS:
|
||||||
|
// Dispatch routine standard arguments
|
||||||
|
//
|
||||||
|
// RETURNS:
|
||||||
|
// NTSTATUS
|
||||||
|
//
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
VidStartIo(IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
IN PIRP Irp)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
// VidDispatchDeviceControl
|
// VidDispatchDeviceControl
|
||||||
//
|
//
|
||||||
// DESCRIPTION:
|
// DESCRIPTION:
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
* NTDDVID.H - Video Port and MiniPort driver interface
|
* NTDDVID.H - Video Port and MiniPort driver interface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <ddk/miniport.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the rough idea:
|
* the rough idea:
|
||||||
* init:
|
* init:
|
||||||
|
@ -31,6 +33,22 @@
|
||||||
#define VIDEO_MEMORY_SPACE_DENSE 0x04
|
#define VIDEO_MEMORY_SPACE_DENSE 0x04
|
||||||
#define VIDEO_MEMORY_SPACE_P6CACHE 0x08
|
#define VIDEO_MEMORY_SPACE_P6CACHE 0x08
|
||||||
|
|
||||||
|
typedef enum _VIDEO_DEVICE_DATA_TYPE
|
||||||
|
{
|
||||||
|
VpMachineData,
|
||||||
|
VpCmosData,
|
||||||
|
VpBusData,
|
||||||
|
VpControllerData,
|
||||||
|
VpMonitorData
|
||||||
|
} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
|
||||||
|
|
||||||
|
typedef enum _VIDEO_SYNCHRONIZE_PRIORITY
|
||||||
|
{
|
||||||
|
VpLowPriority,
|
||||||
|
VpMediumPriority,
|
||||||
|
VpHighPriority
|
||||||
|
} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
|
||||||
|
|
||||||
typedef LONG VP_STATUS, *PVP_STATUS;
|
typedef LONG VP_STATUS, *PVP_STATUS;
|
||||||
|
|
||||||
typedef struct _STATUS_BLOCK
|
typedef struct _STATUS_BLOCK
|
||||||
|
@ -113,6 +131,27 @@ typedef VP_STATUS (*PMINIPORT_QUERY_DEVICE_ROUTINE)(PVOID HwDeviceExtension,
|
||||||
ULONG ComponentInformationLength);
|
ULONG ComponentInformationLength);
|
||||||
typedef BOOLEAN (*PMINIPORT_SYNCHRONIZE_ROUTINE)(PVOID Context);
|
typedef BOOLEAN (*PMINIPORT_SYNCHRONIZE_ROUTINE)(PVOID Context);
|
||||||
|
|
||||||
|
typedef struct _VIDEO_ACCESS_RANGE
|
||||||
|
{
|
||||||
|
PHYSICAL_ADDRESS RangeStart;
|
||||||
|
ULONG RangeLength;
|
||||||
|
UCHAR RangeInIoSpace;
|
||||||
|
UCHAR RangeVisible;
|
||||||
|
UCHAR RangeShareable;
|
||||||
|
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
|
||||||
|
|
||||||
|
typedef struct _VIDEO_X86_BIOS_ARGUMENTS
|
||||||
|
{
|
||||||
|
ULONG Eax;
|
||||||
|
ULONG Ebx;
|
||||||
|
ULONG Ecx;
|
||||||
|
ULONG Edx;
|
||||||
|
ULONG Esi;
|
||||||
|
ULONG Edi;
|
||||||
|
ULONG Ebp;
|
||||||
|
} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
|
||||||
|
|
||||||
|
typedef VOID (*PBANKED_SECTION_ROUTINE)(IN ULONG ReadBank, IN ULONG WriteBank, IN PVOID Context);
|
||||||
|
|
||||||
ULONG VideoPortCompareMemory(IN PVOID Source1, IN PVOID Source2, IN ULONG Length);
|
ULONG VideoPortCompareMemory(IN PVOID Source1, IN PVOID Source2, IN ULONG Length);
|
||||||
VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);
|
VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);
|
||||||
|
@ -161,7 +200,7 @@ VP_STATUS VideoPortMapBankedMemory(IN PVOID HwDeviceExtension,
|
||||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
IN PULONG Length,
|
IN PULONG Length,
|
||||||
IN PULONG InIoSpace,
|
IN PULONG InIoSpace,
|
||||||
INOUT PVOID *VirtualAddress,
|
OUT PVOID *VirtualAddress,
|
||||||
IN ULONG BankLength,
|
IN ULONG BankLength,
|
||||||
IN UCHAR ReadWriteBank,
|
IN UCHAR ReadWriteBank,
|
||||||
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
||||||
|
@ -170,7 +209,7 @@ VP_STATUS VideoPortMapMemory(IN PVOID HwDeviceExtension,
|
||||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
IN PULONG Length,
|
IN PULONG Length,
|
||||||
IN PULONG InIoSpace,
|
IN PULONG InIoSpace,
|
||||||
INOUT PVOID *VirtualAddress);
|
OUT PVOID *VirtualAddress);
|
||||||
VOID VideoPortMoveMemory(OUT PVOID Destination,
|
VOID VideoPortMoveMemory(OUT PVOID Destination,
|
||||||
IN PVOID Source,
|
IN PVOID Source,
|
||||||
IN ULONG Length);
|
IN ULONG Length);
|
||||||
|
@ -209,7 +248,7 @@ VOID VideoPortStopTimer(IN PVOID HwDeviceExtension);
|
||||||
BOOLEAN VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
BOOLEAN VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
||||||
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
||||||
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
||||||
INOUT PVOID Context);
|
OUT PVOID Context);
|
||||||
VP_STATUS VideoPortUnmapMemory(IN PVOID HwDeviceExtension,
|
VP_STATUS VideoPortUnmapMemory(IN PVOID HwDeviceExtension,
|
||||||
IN PVOID VirtualAddress,
|
IN PVOID VirtualAddress,
|
||||||
IN HANDLE ProcessHandle);
|
IN HANDLE ProcessHandle);
|
||||||
|
|
|
@ -32,7 +32,7 @@ LOADERS = dos
|
||||||
#
|
#
|
||||||
# Select the device drivers and filesystems you want
|
# Select the device drivers and filesystems you want
|
||||||
#
|
#
|
||||||
DEVICE_DRIVERS = blue ide keyboard mouse null parallel serial
|
DEVICE_DRIVERS = blue ide keyboard mouse null parallel serial vidport
|
||||||
# DEVICE_DRIVERS = beep event floppy ide_test sound test test1
|
# DEVICE_DRIVERS = beep event floppy ide_test sound test test1
|
||||||
FS_DRIVERS = minix vfat ext2
|
FS_DRIVERS = minix vfat ext2
|
||||||
# FS_DRIVERS = template
|
# FS_DRIVERS = template
|
||||||
|
|
Loading…
Reference in a new issue