Compartilhar via


estrutura VIDEO_ACCESS_RANGE (video.h)

A estrutura VIDEO_ACCESS_RANGE define uma porta de E/S do dispositivo ou um intervalo de memória para o adaptador de vídeo. A função HwVidFindAdapter de do driver de miniporto deve configurar uma matriz de elementos do tipo VIDEO_ACCESS_RANGE, chamada de matriz de intervalos de acesso, para cada adaptador de vídeo compatível com o driver de miniport.

Para drivers de miniportos compatíveis com VGA, VIDEO_ACCESS_RANGE também define um elemento em uma matriz passada para VideoPortSetTrappedEmulatorPorts para habilitar ou desabilitar o acesso direto às portas de E/S por aplicativos de MS-DOS de tela inteira.

Sintaxe

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

Membros

RangeStart

Especifica o endereço base relativo ao barramento de uma memória ou intervalo de portas de E/S para um elemento na matriz de intervalos de acesso passado para VideoPortVerifyAccessRanges ou retornado por VideoPortGetAccessRanges.

Especifica o endereço base relativo ao barramento de um intervalo de portas de E/S para uma matriz a ser passada para VideoPortSetTrappedEmulatorPorts.

RangeLength

Especifica o número de portas de E/S ou tamanho em bytes para o intervalo.

RangeInIoSpace

Especifica se o intervalo está no espaço de E/S ou no espaço de memória. Um valor de VERDADEIRO (1) indica que o intervalo está no espaço de E/S; um valor de false (0) indica que o intervalo está no espaço de memória.

RangeVisible

Será ignorado se a função HwVidFindAdapter do driver de miniporto estiver configurando a matriz de intervalos de acesso.

É definido como TRUE por drivers de miniporto compatíveis com VGA e passado para VideoPortSetTrappedEmulatorPorts para habilitar o acesso direto ao intervalo de portas de E/S por um aplicativo de MS-DOS de tela inteira. Se definido como FALSE, as instruções emitidas pelo aplicativo continuarão a ser presas e encaminhadas para a função SvgaHwIoXxx do driver de miniporto para validação.

RangeShareable

É definido como VERDADEIRO se o intervalo de acesso descrito por esse elemento puder ser compartilhado com outro driver e/ou dispositivo ou FALSE se o intervalo não puder ser compartilhado.

É ignorado por VideoPortSetTrappedEmulatorPorts.

RangePassive

Indica se o dispositivo realmente usa a porta. Os valores desse membro são mostrados na tabela a seguir.

Valor Significado
VIDEO_RANGE_PASSIVE_DECODE O dispositivo decodifica a porta, mas o driver não a usa.
VIDEO_RANGE_10_BIT_DECODE O dispositivo decodifica dez bits do endereço da porta.

Observações

O driver de miniporto deve reivindicar recursos herdados em seu DriverEntry ou função de HwVidLegacyResources.

Caso contrário, a função HwVidFindAdapter de um driver de miniporto configura a matriz de intervalos de acesso para os recursos de PCI de um adaptador. Ele pode usar informações retornadas por VideoPortGetAccessRanges. Como alternativa, ele pode usar as informações recuperadas do registro chamando VideoPortGetDeviceData com uma função HwVidQueryDeviceCallback fornecida pelo driver de miniporto ou VideoPortGetRegistryParameters com uma função de do HwVidQueryNamedValueCallback fornecida pelo driver de miniport. Se chamar esses VideoPortxxx não fornecer os valores de intervalo de acesso relativo ao barramento, HwVidFindAdapter poderá configurar elementos de intervalos de acesso usando valores padrão relativos ao barramento fornecidos pelo motorista.

reivindicando intervalos de acesso no Registro

O driver de miniporto deve chamar VideoPortVerifyAccessRanges com intervalos de acesso obtidos de VideoPortGetDeviceData, VideoPortGetAccessRangesou fornecidos como padrão pelo driver de miniporto. Se VideoPortVerifyAccessRanges retornar NO_ERROR para uma matriz de intervalos de acesso, a função HwVidFindAdapter ou HwVidQueryDeviceCallback poderá mapear os intervalos com VideoPortGetDeviceBase e usar os endereços lógicos mapeados retornados para acessar o adaptador.

Uma chamada bem-sucedida para VideoPortGetAccessRanges também declara os intervalos de acesso relativos ao ônibus retornados no registro do chamador. Se o driver de miniporto modificar qualquer um dos valores retornados, ele deverá chamar VideoPortVerifyAccessRanges com o intervalo de acesso completo, incluindo quaisquer elementos não modificados. Cada chamada para VideoPortGetAccessRanges ou VideoPortVerifyAccessRanges para um adaptador de vídeo específico substitui os recursos de hardware reivindicados pelo chamador no registro.

Um driver de miniporto não deve tentar usar um intervalo para o qual VideoPortVerifyAccessRanges ou VideoPortGetAccessRanges não retorna NO_ERROR.

intervalos de acesso de mapeamento para se comunicar com o adaptador

Depois que um driver de miniporto tiver solicitado recursos no registro para um adaptador, ele não poderá usar endereços relativos ao barramento para acessar ou configurar o adaptador, pois o HAL pode remapear todos os endereços de dispositivo relativos ao barramento para espaço no sistema.

A função HwVidFindAdapter do driver de miniport deve chamar VideoPortGetDeviceBase para obter endereços lógicos mapeados para seus intervalos de acesso. Somente então o driver de miniporto pode se comunicar com o adaptador de vídeo passando os endereços de intervalo lógico mapeados retornados para VideoPortRead/WritePortxxx para acessar a memória do dispositivo no espaço de E/S e/ou VideoPortRead/WriteRegisterxxx para acessar a memória do dispositivo no espaço de memória.

Determinar se um intervalo de acesso é fragmentável

Siga estas diretrizes para determinar se um intervalo de acesso pode ser compartilhado:
  • Se o intervalo de portas de memória ou E/S deve ser "de propriedade" desse driver e/ou o acesso a esse intervalo por qualquer outro driver pode causar um problema, defina RangeSharable para FALSE.
  • Se o intervalo puder ser compartilhado com um driver de dispositivo que está cooperando, defina RangeSharable para TRUE.
Os drivers de miniporto SVGA que implementam todas as funcionalidades da VGA (declaradas no registro como VgaCompatible definida como um) devem reivindicar seus intervalos de acesso como inválidos para que o driver VGA do sistema não seja carregado. Por outro lado, os drivers de miniporto para adaptadores como o S3 ou a XGA, que definem VgaCompatible como zero no registro, devem reivindicar todos os recursos que compartilham com o driver VGA do sistema como fragmentáveis.

No entanto, os drivers de miniport para cartões que funcionam com um IOCTL de passagem e que podem ser conectados a qualquer VGA ou cartão SVGA não devem estar usando nenhuma porta VGA do sistema ou intervalos de memória. Se o fizerem, esse driver não deverá tentar reivindicar nenhum dos intervalos de acesso da VGA no registro. As tentativas de reivindicar recursos de VGA por esse driver de miniporto provavelmente causarão um conflito de recursos porque o driver de qualquer cartão SVGA no computador terá reivindicado esses intervalos de acesso como inválidos.

passando elementos de intervalo de porta de E/S para VideoPortSetTrappedEmulatorPorts

Todos os elementos de matriz de tipo VIDEO_ACCESS_RANGE que descrevem intervalos de portas de E/S são considerados invisíveis, a menos que um driver de miniporto compatível com VGA em um computador baseado em x86 redefina explicitamente o RangeVisible membros para verdadeiro e chamadas VideoPortSetTrappedEmulatorPorts para habilitar um ou mais intervalos de portas de E/S. VideoPortSetTrappedEmulatorPorts ignora os membros rangeSharable da matriz de entrada.

Em uma matriz de elementos do tipo VIDEO_ACCESS_RANGE passados para VideoPortSetTrappedEmulatorPorts, o valor do membro RangeVisible de cada elemento determina se as portas de E/S fornecidas podem ser acessadas diretamente pela VD M (MS-DOS aplicativo em execução em tela inteira em um computador baseado em x86) ou se esse fluxo de E/S emitido pelo aplicativo está preso e encaminhado para uma função de SvgaHwIoPortXxx fornecida pelo driver de miniporto para validação primeiro.

Requisitos

Requisito Valor
cabeçalho video.h (inclua Video.h)

Consulte também

DriverEntry do de Driver de Miniporto de Vídeo

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VideoPortGetAccessRanges

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortInitialize

VideoPortSetTrappedEmulatorPorts

VideoPortVerifyAccessRanges