139 lines
3.6 KiB
C
139 lines
3.6 KiB
C
/*++
|
||
|
||
Copyright (c) 1990-1998 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
porti386.c
|
||
|
||
Abstract:
|
||
|
||
This is the x86 specific part of the video port driver.
|
||
|
||
Author:
|
||
|
||
Andre Vachon (andreva) 10-Jan-1991
|
||
|
||
Environment:
|
||
|
||
kernel mode only
|
||
|
||
Notes:
|
||
|
||
This module is a driver which implements OS dependant functions on the
|
||
behalf of the video drivers
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "videoprt.h"
|
||
#include "vdm.h"
|
||
|
||
|
||
#ifdef ALLOC_PRAGMA
|
||
#pragma alloc_text(PAGE,VideoPortInt10)
|
||
#pragma alloc_text(PAGE,VideoPortSetTrappedEmulatorPorts)
|
||
#endif
|
||
|
||
|
||
VP_STATUS
|
||
VideoPortInt10(
|
||
PVOID HwDeviceExtension,
|
||
PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This function allows a miniport driver to call the kernel to perform
|
||
an int10 operation.
|
||
This will execute natively the BIOS ROM code on the device.
|
||
|
||
THIS FUNCTION IS FOR X86 ONLY.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
BiosArguments - Pointer to a structure containing the value of the
|
||
basic x86 registers that should be set before calling the BIOS routine.
|
||
0 should be used for unused registers.
|
||
|
||
Return Value:
|
||
|
||
|
||
Restrictions:
|
||
|
||
Device uses IO ports ONLY.
|
||
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
return ERROR_NOT_ENOUGH_MEMORY;
|
||
|
||
} // end VideoPortInt10()
|
||
|
||
VP_STATUS
|
||
VideoPortSetTrappedEmulatorPorts(
|
||
PVOID HwDeviceExtension,
|
||
ULONG NumAccessRanges,
|
||
PVIDEO_ACCESS_RANGE AccessRange
|
||
)
|
||
|
||
/*++
|
||
|
||
VideoPortSetTrappedEmulatorPorts (x86 machines only) allows a miniport
|
||
driver to dynamically change the list of I/O ports that are trapped when
|
||
a VDM is running in full-screen mode. The default set of ports being
|
||
trapped by the miniport driver is defined to be all ports in the
|
||
EMULATOR_ACCESS_ENTRY structure of the miniport driver.
|
||
I/O ports not listed in the EMULATOR_ACCESS_ENTRY structure are
|
||
unavailable to the MS-DOS application. Accessing those ports causes a
|
||
trap to occur in the system, and the I/O operation to be reflected to a
|
||
user-mode virtual device driver.
|
||
|
||
The ports listed in the specified VIDEO_ACCESS_RANGE structure will be
|
||
enabled in the I/O Permission Mask (IOPM) associated with the MS-DOS
|
||
application. This will enable the MS-DOS application to access those I/O
|
||
ports directly, without having the IO instruction trap and be passed down
|
||
to the miniport trap handling functions (for example EmulatorAccessEntry
|
||
functions) for validation. However, the subset of critical IO ports must
|
||
always remain trapped for robustness.
|
||
|
||
All MS-DOS applications use the same IOPM, and therefore the same set of
|
||
enabled/disabled I/O ports. Thus, on each switch of application, the
|
||
set of trapped I/O ports is reinitialized to be the default set of ports
|
||
(all ports in the EMULATOR_ACCESS_ENTRY structure).
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Points to the miniport driver's device extension.
|
||
|
||
NumAccessRanges - Specifies the number of entries in the VIDEO_ACCESS_RANGE
|
||
structure specified in AccessRange.
|
||
|
||
AccessRange - Points to an array of access ranges (VIDEO_ACCESS_RANGE)
|
||
defining the ports that can be untrapped and accessed directly by
|
||
the MS-DOS application.
|
||
|
||
Return Value:
|
||
|
||
This function returns the final status of the operation.
|
||
|
||
Environment:
|
||
|
||
This routine cannot be called from a miniport routine synchronized with
|
||
VideoPortSynchronizeRoutine or from an ISR.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
return NO_ERROR;
|
||
|
||
} // end VideoPortSetTrappedEmulatorPorts()
|