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 <ntddvid.h>
|
||||
#include <ddk/ntddk.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 VidDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
|
||||
|
@ -32,12 +41,12 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
|
|||
DbgPrint("VideoPort Driver %s\n", VERSION);
|
||||
|
||||
// Export other driver entry points...
|
||||
DriverObject->DriverStartIo = VidtartIo;
|
||||
DriverObject->DriverStartIo = VidStartIo;
|
||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = VidDispatchOpenClose;
|
||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] = VidDispatchOpenClose;
|
||||
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;
|
||||
}
|
||||
|
@ -62,6 +71,7 @@ VideoPortDisableInterrupt(IN PVOID HwDeviceExtension)
|
|||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
VP_STATUS
|
||||
VideoPortEnableInterrupt(IN PVOID HwDeviceExtension)
|
||||
{
|
||||
|
@ -139,7 +149,66 @@ VideoPortInitialize(IN PVOID Context1,
|
|||
IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
|
||||
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
|
||||
|
@ -163,7 +232,7 @@ VideoPortMapBankedMemory(IN PVOID HwDeviceExtension,
|
|||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN PULONG Length,
|
||||
IN PULONG InIoSpace,
|
||||
INOUT PVOID *VirtualAddress,
|
||||
OUT PVOID *VirtualAddress,
|
||||
IN ULONG BankLength,
|
||||
IN UCHAR ReadWriteBank,
|
||||
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
||||
|
@ -177,7 +246,7 @@ VideoPortMapMemory(IN PVOID HwDeviceExtension,
|
|||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN PULONG Length,
|
||||
IN PULONG InIoSpace,
|
||||
INOUT PVOID *VirtualAddress)
|
||||
OUT PVOID *VirtualAddress)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
@ -333,7 +402,7 @@ BOOLEAN
|
|||
VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
||||
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
||||
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
||||
INOUT PVOID Context)
|
||||
OUT PVOID Context)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
@ -485,6 +554,28 @@ VidDispatchOpenClose(IN PDEVICE_OBJECT pDO,
|
|||
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
|
||||
//
|
||||
// DESCRIPTION:
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
* NTDDVID.H - Video Port and MiniPort driver interface
|
||||
*/
|
||||
|
||||
#include <ddk/miniport.h>
|
||||
|
||||
/*
|
||||
* the rough idea:
|
||||
* init:
|
||||
|
@ -31,6 +33,22 @@
|
|||
#define VIDEO_MEMORY_SPACE_DENSE 0x04
|
||||
#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 struct _STATUS_BLOCK
|
||||
|
@ -113,6 +131,27 @@ typedef VP_STATUS (*PMINIPORT_QUERY_DEVICE_ROUTINE)(PVOID HwDeviceExtension,
|
|||
ULONG ComponentInformationLength);
|
||||
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);
|
||||
VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);
|
||||
|
@ -161,7 +200,7 @@ VP_STATUS VideoPortMapBankedMemory(IN PVOID HwDeviceExtension,
|
|||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN PULONG Length,
|
||||
IN PULONG InIoSpace,
|
||||
INOUT PVOID *VirtualAddress,
|
||||
OUT PVOID *VirtualAddress,
|
||||
IN ULONG BankLength,
|
||||
IN UCHAR ReadWriteBank,
|
||||
IN PBANKED_SECTION_ROUTINE BankRoutine,
|
||||
|
@ -170,7 +209,7 @@ VP_STATUS VideoPortMapMemory(IN PVOID HwDeviceExtension,
|
|||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN PULONG Length,
|
||||
IN PULONG InIoSpace,
|
||||
INOUT PVOID *VirtualAddress);
|
||||
OUT PVOID *VirtualAddress);
|
||||
VOID VideoPortMoveMemory(OUT PVOID Destination,
|
||||
IN PVOID Source,
|
||||
IN ULONG Length);
|
||||
|
@ -209,7 +248,7 @@ VOID VideoPortStopTimer(IN PVOID HwDeviceExtension);
|
|||
BOOLEAN VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
|
||||
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
|
||||
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
||||
INOUT PVOID Context);
|
||||
OUT PVOID Context);
|
||||
VP_STATUS VideoPortUnmapMemory(IN PVOID HwDeviceExtension,
|
||||
IN PVOID VirtualAddress,
|
||||
IN HANDLE ProcessHandle);
|
||||
|
|
|
@ -32,7 +32,7 @@ LOADERS = dos
|
|||
#
|
||||
# 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
|
||||
FS_DRIVERS = minix vfat ext2
|
||||
# FS_DRIVERS = template
|
||||
|
|
Loading…
Reference in a new issue