Compartir a través de


Función ScsiPortGetUncachedExtension (srb.h)

La rutina ScsiPortGetUncachedExtension asigna memoria que la CPU y un HBA de bus-master pueden usar para DMA o para datos compartidos.

Nota Los modelos de controlador de puerto SCSI y controlador de minipuerto SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar los modelos del controlador Storport y del controlador storport miniport .
 

Sintaxis

SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
  [in] PVOID                           HwDeviceExtension,
  [in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  [in] ULONG                           NumberOfBytes
);

Parámetros

[in] HwDeviceExtension

Puntero a la extensión de dispositivo de hardware. Se trata de un área de almacenamiento por HBA que el controlador de puerto asigna e inicializa en nombre del controlador de minipuerto. Los controladores de minipuerto suelen almacenar información específica de HBA en esta extensión, como el estado del HBA y los intervalos de acceso asignados del HBA. Esta área está disponible para el controlador de minipuerto en el miembro DeviceExtension-HwDeviceExtension> del objeto de dispositivo del HBA inmediatamente después de que el controlador de miniporte llame a ScsiPortInitialize. El controlador de puerto libera esta memoria cuando quita el dispositivo.

[in] ConfigInfo

Especifica información sobre las funcionalidades DMA de HBA. Los miembros siguientes deben rellenarse: DmaChannel o DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master establecido en TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense y SrbExtensionSize.

Los miembros que no son pertinentes para el HBA, como DmaChannel para un adaptador EISA bus-master, deben dejarse tal como está.

[in] NumberOfBytes

Indica el tamaño en bytes de la extensión sin almacenar en caché que se va a asignar. Los controladores de Windows XP y sistemas operativos anteriores no deben asignar más de 100 kilobytes de extensión sin almacenar en caché y, si participan en operaciones de E/S en el archivo de hibernación o en el archivo de volcado de memoria, deben limitar la cantidad de extensión sin almacenar en caché que asignan a menos de 32 kilobytes.

Valor devuelto

ScsiPortGetUncachedExtension devuelve un puntero de dirección virtual a la extensión sin almacenamiento en caché. Si no puede asignar la memoria solicitada, devuelve NULL.

Comentarios

Solo se puede llamar a ScsiPortGetUncachedExtension desde la rutina HwScsiFindAdapter del controlador de miniporte y solo para un HBA maestro de bus. Las llamadas de otras rutinas del controlador de miniportar provocarán un error del sistema o una operación incorrecta para el autor de la llamada.

Dado que las máquinas de gama alta tienen memorias caché y memorias grandes, cualquier memoria que se va a compartir entre un HBA y la CPU debe asignarse especialmente. Los buzones o las colas de solicitudes de E/S en la memoria del sistema son ejemplos de este tipo de memoria compartida.

Un controlador de minipuerto debe establecer SrbExtensionSize. Antes de llamar a ScsiPortGetUncachedExtension para cambiar el tamaño de su almacenamiento por solicitud basado en NumberOfPhysicalBreaks.

La rutina HwScsiFindAdapter puede llamar a ScsiPortGetUncachedExtension solo una vez para cada HBA maestro de bus compatible con el controlador de miniport.

Para obtener la dirección física de la extensión sin almacenar en caché que el HBA puede usar, llame a ScsiPortGetPhysicalAddress.

El controlador ScsiPort liberará la memoria asignada por ScsiPortGetUncachedExtension cuando se detenga el dispositivo del adaptador.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado srb.h (incluye Miniport.h, Scsi.h)
Library Scsiport.lib

Consulte también

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetPhysicalAddress