Condividi tramite


Funzione VideoPortGetDeviceBase (video.h)

La funzione VideoPortGetDeviceBase esegue il mapping di una serie di indirizzi I/O o memoria del dispositivo relativi al bus nello spazio di sistema.

Sintassi

VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
  PVOID            HwDeviceExtension,
  PHYSICAL_ADDRESS IoAddress,
  ULONG            NumberOfUchars,
  UCHAR            InIoSpace
);

Parametri

HwDeviceExtension

Puntatore all'estensione del dispositivo del driver miniport.

IoAddress

Indirizzo fisico di base dell'intervallo da mappare. Per ottenere questo valore relativo al bus, chiamare VideoPortGetDeviceData, VideoPortGetRegistryParameterso VideoPortGetAccessRanges. In caso contrario, questo valore è un indirizzo di base predefinito fornito dal driver per la memoria del dispositivo o le porte di I/O.

È necessario aver richiesto correttamente l'intervallo descritto da IoAddress e NumberOfUchars nel Registro di sistema tramite una chiamata precedente a VideoPortVerifyAccessRanges o VideoPortGetAccessRanges.

NumberOfUchars

Numero di byte, a partire da IoAddress, per eseguire il mapping.

InIoSpace

Posizione dell'intervallo di IoAddress. Questo parametro può essere uno dei flag seguenti o una combinazione ORed compatibile di questi flag.

Flag significato
VIDEO_MEMORY_SPACE_DENSE Obsoleto.
VIDEO_MEMORY_SPACE_IO L'intervallo di indirizzi è nello spazio di I/O, non nello spazio di memoria.
VIDEO_MEMORY_SPACE_MEMORY L'intervallo di indirizzi è nello spazio di memoria, non nello spazio di I/O.
VIDEO_MEMORY_SPACE_P6CACHE Il processore aggrega una sequenza di operazioni di scrittura, le invia a una riga della cache e successivamente scarica la cache. Questo flag è significativo solo quando VIDEO_MEMORY_SPACE_IO non è impostato. Designa la memoria video come combinazione di scrittura (WC). Per informazioni sulla memorizzazione nella cache WC, vedere l'articolo Write-Combining Memory in Video Miniport Drivers sito Web.

Valore restituito

Se ha esito positivo, VideoPortGetDeviceBase restituisce l'indirizzo virtuale di base del mapping. Se non è possibile eseguire il mapping dell'intervallo relativo al bus specificato, VideoPortGetDeviceBase restituisce NULL.

Osservazioni

È possibile passare gli indirizzi virtuali mappati alle funzioni VideoPortReadXxx, VideoPortWriteXxxe VideoPortXxxMemory, ad eccezione di VideoPortMapMemory e VideoPortUnmapMemory.

È necessario chiamare VideoPortGetDeviceBase dal driver miniport HwVidFindAdapter, HwVidQueryDeviceCallbacko funzione HwVidQueryNamedValueCallback.

Prima di HwVidFindAdapter restituisce il controllo, è necessario archiviare sia l'indirizzo di base mappato restituito da VideoPortGetDeviceBase che la lunghezza dell'intervallo di accesso mappato nell'estensione del dispositivo dell'adattatore (a cui punta HwDeviceExtension) per un uso successivo.

L'accesso allo spazio indirizzi mappato deve seguire queste regole:

  • Se InIoSpace è VIDEO_MEMORY_SPACE_IO, che indica che l'indirizzo si trova nello spazio di I/O, l'indirizzo virtuale restituito da questa funzione deve essere passato al VideoPortReadPortXxx, VideoPortWritePortXxx, VideoPortPortBufferXxxe VideoPortWritePortBufferfunzioni xxx, dove xxx è Uchar, Ushorto Ulong.
  • Se InIoSpace è VIDEO_MEMORY_SPACE_MEMORY, che indica che l'indirizzo non si trova nello spazio di I/O ma nello spazio di memoria, L'indirizzo virtuale restituito da questa funzione deve essere passato al VideoPortReadRegisterXxx, VideoPortWriteRegisterXxx, VideoPortReadRegisterBufferXxxe VideoPortWriteRegisterBufferXxx, dove xxx è Uchar, Ushorto Ulong.
  • Il driver non deve accedere agli indirizzi esterni all'intervallo delimitato da NumberOfUchars.
VideoPortGetDeviceBase e VideoPortMapMemory possono essere entrambi chiamati dal driver video miniport per eseguire il mapping della memoria video in uno spazio indirizzi virtuale. Se si chiamano entrambe queste funzioni per eseguire il mapping degli stessi indirizzi fisici o se si chiama una delle funzioni più di una volta per eseguire il mapping degli stessi indirizzi fisici, potrebbe essere presente più di un intervallo di indirizzi virtuali mappato allo stesso intervallo di indirizzi fisici. In tal caso, è necessario impostare il flag di VIDEO_MEMORY_SPACE_P6CACHE del parametro InIoSpace sullo stesso valore in tutte le chiamate.

Ogni dispositivo di visualizzazione UMA (Universal Memory Architecture) usa un buffer di frame che si trova nella memoria principale anziché su un bus PCI. In questo caso, non chiamare VideoPortMapMemory per eseguire il mapping del buffer dei fotogrammi. Per eseguire il mapping di un buffer di frame UMA nello spazio di sistema, chiamare MmMapIoSpace.

Se un driver miniport non supporta un adattatore per cui è stato mappato un intervallo logico, deve eseguire due passaggi prima di restituire il controllo alla funzione DriverEntry: chiamare VideoPortFreeDeviceBase per annullare il mapping dell'intervallo mappato in precedenza dallo spazio di sistema e chiamare VideoPortGetAccessRanges o VideoPortVerifyAccessRanges per rilasciare le attestazioni nell'intervallo nel Registro di sistema.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile in Windows 2000 e versioni successive dei sistemi operativi Windows.
piattaforma di destinazione Desktop
intestazione video.h (includere Video.h)
libreria Videoprt.lib
dll Videoprt.sys
IRQL PASSIVE_LEVEL

Vedere anche

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VideoPortCompareMemory

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory