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

View file

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

View file

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