more work on the videoport driver.

svn path=/trunk/; revision=505
This commit is contained in:
Rex Jolliff 1999-05-22 07:25:30 +00:00
parent ae32243b6a
commit 2854aac246
3 changed files with 142 additions and 12 deletions

View file

@ -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:

View file

@ -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);

View file

@ -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