estructura de VIDEO_ACCESS_RANGE (video.h)

La estructura de VIDEO_ACCESS_RANGE define un puerto de E/S de dispositivo o un intervalo de memoria para el adaptador de vídeo. Cada función HwVidFindAdapter del controlador de miniporte debe configurar una matriz de elementos de tipo VIDEO_ACCESS_RANGE, denominada matriz de intervalos de acceso, para cada adaptador de vídeo que admita el controlador de miniport.

En el caso de los controladores de miniport compatibles con VGA, VIDEO_ACCESS_RANGE también define un elemento de una matriz pasada a VideoPortSetTrappedEmulatorPorts para habilitar o deshabilitar el acceso directo a los puertos de E/S mediante aplicaciones MS-DOS de pantalla completa.

Sintaxis

typedef struct _VIDEO_ACCESS_RANGE {
  PHYSICAL_ADDRESS RangeStart;
  ULONG            RangeLength;
  UCHAR            RangeInIoSpace;
  UCHAR            RangeVisible;
  UCHAR            RangeShareable;
  UCHAR            RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;

Miembros

RangeStart

Especifica la dirección base relativa al bus de un intervalo de puertos de E/S o memoria para un elemento de la matriz de intervalos de acceso pasada a VideoPortVerifyAccessRanges o devuelto por VideoPortGetAccessRanges.

Especifica la dirección base relativa al bus de un intervalo de puertos de E/S para una matriz que se va a pasar a VideoPortSetTrappedEmulatorPorts.

RangeLength

Especifica el número de puertos de E/S o tamaño en bytes para el intervalo.

RangeInIoSpace

Especifica si el intervalo está en espacio de E/S o en espacio de memoria. Un valor de TRUE (1) indica que el intervalo está en espacio de E/S; un valor de FALSE (0) indica que el intervalo está en espacio de memoria.

RangeVisible

Se omite si la función HwVidFindAdapter del controlador de miniporte configura la matriz de intervalos de acceso.

Se establece en TRUE mediante controladores de miniport compatibles con VGA y se pasa a VideoPortSetTrappedEmulatorPorts para habilitar el acceso directo al intervalo de puertos de E/S mediante una aplicación MS-DOS de pantalla completa. Si se establece en FALSE, las instrucciones emitidas por la aplicación continúan siendo capturadas y reenviadas a la función SvgaHwIoXxx del controlador de miniporte para la validación.

RangeShareable

Se establece en TRUE si el intervalo de acceso descrito por este elemento se puede compartir con otro controlador o dispositivo o en FALSE si no se puede compartir el intervalo.

VideoPortSetTrappedEmulatorPorts omite El valor de VideoPortSetTrappedEmulatorPorts.

RangePassive

Indica si el dispositivo realmente usa el puerto. Los valores de este miembro se muestran en la tabla siguiente.

Valor Significado
VIDEO_RANGE_PASSIVE_DECODE El dispositivo descodifica el puerto, pero el controlador no lo usa.
VIDEO_RANGE_10_BIT_DECODE El dispositivo descodifica diez bits de la dirección del puerto.

Comentarios

El controlador de minipuerto debe reclamar recursos heredados en su función DriverEntry o HwVidLegacyResources .

De lo contrario, una función HwVidFindAdapter del controlador de miniporte configura la matriz de intervalos de acceso para los recursos PCI de un adaptador. Puede usar la información devuelta por VideoPortGetAccessRanges. Como alternativa, puede usar la información recuperada del registro llamando a VideoPortGetDeviceData con una función HwVidQueryDeviceCallback proporcionada por el controlador miniporte o VideoPortGetRegistryParameters con una función HwVidQueryNamedValueCallback proporcionada por el controlador miniport. Si llama a estos VideoPortXxx no proporciona los valores de intervalo de acceso relativo al bus, HwVidFindAdapter puede configurar los elementos de intervalos de acceso mediante valores predeterminados relativos al bus proporcionados por el controlador.

Notificación de intervalos de acceso en el Registro

El controlador de minipuerto debe llamar a VideoPortVerifyAccessRanges con los intervalos de acceso obtenidos de VideoPortGetDeviceData, VideoPortGetAccessRanges o proporcionados de forma predeterminada por el controlador de miniport. Si VideoPortVerifyAccessRanges devuelve NO_ERROR para tal matriz de intervalos de acceso, la función HwVidFindAdapter o HwVidQueryDeviceCallback puede asignar los intervalos con VideoPortGetDeviceBase y usar las direcciones lógicas asignadas devueltas para acceder al adaptador.

Una llamada correcta a VideoPortGetAccessRanges también reclama los intervalos de acceso relativos al bus devueltos en el registro para el autor de la llamada. Si el controlador de minipuerto modifica cualquiera de los valores devueltos, debe llamar a VideoPortVerifyAccessRanges con el intervalo de acceso completo, incluidos los elementos no modificados. Cada llamada a VideoPortGetAccessRanges o VideoPortVerifyAccessRanges para un adaptador de vídeo determinado sobrescribe los recursos de hardware reclamados del autor de la llamada en el registro.

Un controlador de minipuerto no debe intentar usar un intervalo para el que VideoPortVerifyAccessRanges o VideoPortGetAccessRanges no devuelve NO_ERROR.

Asignación de intervalos de acceso para comunicarse con el adaptador

Después de que un controlador de miniporte haya reclamado recursos en el Registro para un adaptador, no puede usar direcciones relativas a bus para acceder o configurar el adaptador, ya que HAL puede reasignar todas las direcciones de dispositivo relativas al bus al espacio del sistema.

La función HwVidFindAdapter del controlador miniportador debe llamar a VideoPortGetDeviceBase para obtener direcciones lógicas asignadas para sus intervalos de acceso. Solo entonces el controlador de miniporte se puede comunicar con el adaptador de vídeo pasando las direcciones de intervalo lógico asignados devueltos a VideoPortRead/WritePortXxx para acceder a la memoria del dispositivo en el espacio de E/S o VideoPortRead/WriteRegisterXxx para acceder a la memoria del dispositivo en el espacio de memoria.

Determinar si un intervalo de acceso es compartible

Siga estas instrucciones para determinar si se puede compartir un intervalo de acceso:
  • Si el intervalo de puertos de memoria o E/S debe ser "propiedad" de este controlador o el acceso a este intervalo por cualquier otro controlador puede causar un problema, establezca RangeSharable en FALSE.
  • Si el intervalo se puede compartir con un controlador de dispositivo de cooperación, establezca RangeSharable en TRUE.
Los controladores de miniporte SVGA que implementan todas las funciones VGA (declaradas en el registro como VgaCompatible establecida en una) deben reclamar sus intervalos de acceso como insoportables para que el controlador VGA del sistema no se cargue. Por otro lado, los controladores de minipuerto para adaptadores como el S3 o el XGA, que establecen VgaCompatible en cero en el registro, deben reclamar todos los recursos que comparten con el controlador VGA del sistema como compartible.

Sin embargo, los controladores miniporte para las tarjetas que funcionan con un IOCTL de paso a través y que se pueden conectar a cualquier tarjeta VGA o SVGA no deben usar ningún puerto VGA del sistema ni intervalos de memoria. Si lo hacen, este controlador no debe intentar reclamar ninguno de los intervalos de acceso VGA en el registro. Es probable que los intentos de reclamar recursos VGA por este controlador de minipuerto causen un conflicto de recursos, ya que el controlador de cualquier tarjeta SVGA en la máquina habrá reclamado estos intervalos de acceso como no compartidos.

Pasar elementos de intervalo de puertos de E/S a VideoPortSetTrappedEmulatorPorts

Se supone que todos los elementos de matriz de tipo VIDEO_ACCESS_RANGE que describen los intervalos de puertos de E/S son invisibles, a menos que un controlador de miniporte compatible con VGA en una máquina basada en x86 restablezca explícitamente los miembros RangeVisible a TRUE y llama a VideoPortSetTrappedEmulatorPorts para habilitar uno o varios intervalos de puertos de E/S. VideoPortSetTrappedEmulatorPorts omite los miembros RangeSharable de la matriz de entrada.

En una matriz de elementos de tipo VIDEO_ACCESS_RANGE pasados a VideoPortSetTrappedEmulatorPorts, El valor del miembro RangeVisible de cada elemento determina si el VDM (aplicación MS-DOS que se ejecuta en una máquina basada en x86) puede acceder directamente a los puertos de E/S especificados por la aplicación o si dicha secuencia de E/S emitida por la aplicación se intercepta y reenvía a una función SvgaHwIoPortXxx proporcionada por el controlador de miniport para la validación en primer lugar.

Requisitos

Requisito Valor
Header video.h (incluya Video.h)

Consulte también

DriverEntry of Video Miniport Driver

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VideoPortGetAccessRanges

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortInitialize

VideoPortSetTrappedEmulatorPorts

VideoPortVerifyAccessRanges