Compartir a través de


Función ScsiPortGetPhysicalAddress (srb.h)

La rutina ScsiPortGetPhysicalAddress convierte un intervalo de direcciones virtuales determinado en un intervalo de direcciones físico para una operación DMA.

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 SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

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] Srb

Puntero al bloque de solicitud SCSI si virtualAddress que se va a convertir procede del miembro DataBuffer de esa SRB o, posiblemente, de SenseInfoBuffer. De lo contrario, este parámetro debe ser NULL.

[in] VirtualAddress

Puntero a la dirección virtual base que se va a convertir. Si esta dirección virtual está dentro del intervalo de un DataBuffer proporcionado por SRB, el autor de la llamada también debe proporcionar el puntero Srb .

[out] Length

Devuelve el número de bytes asignados, empezando por la dirección física devuelta.

Valor devuelto

ScsiPortGetPhysicalAddress devuelve la dirección física correspondiente para una instancia de VirtualAddress determinada. Si no se puede convertir la dirección especificada, devuelve NULL.

Comentarios

Los controladores de miniporte de hbAs maestros de bus llaman a ScsiPortGetPhysicalAddress para obtener intervalos de direcciones físicas asignados que se usarán durante las operaciones DMA. Por ejemplo, ScsiPortGetPhysicalAddress se puede usar para crear una lista de dispersión y recopilación para transferencias de datos que abarcan páginas. Tenga en cuenta que la longitud devuelta puede ser mayor que el tamaño de DataBuffer en una SRB determinada.

Si se pasa un Srb no NULL, VirtualAddress debe estar dentro del intervalo de DataBuffer de la SRB o debe ser un puntero de SenseInfoBuffer. De lo contrario, la instancia de VirtualAddress especificada debe estar en la extensión sin almacenar en caché del controlador de minipuerto, SrbExtension o SenseInfoBuffer.

Un controlador de minipuerto puede llamar a ScsiPortGetPhysicalAddress para traducir una dirección de extensión solo si esa rutina DriverEntry del controlador de miniporte establece NeedPhysicalAddresses en TRUE en el HW_INITIALIZATION_DATA cuando se llama ScsiPortInitialize.

Debido a restricciones en algunos autobuses, como ISA, no se garantiza que la dirección devuelta por esta rutina coincida con la dirección devuelta por una rutina externa análoga (como MmGetPhysicalAddress). Un controlador de minipuerto solo debe llamar a rutinas ScsiPortXxx para que sean portátiles.

ScsiPortGetPhysicalAddress usa SCSI_PHYSICAL_ADDRESS para representar direcciones físicas.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

El tipo de SCSI_PHYSICAL_ADDRESS es un tipo de datos independiente del sistema operativo que usan los controladores de miniporte SCSI para representar direcciones físicas o una dirección relativa al bus.

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 .
 

Requisitos

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

Consulte también

DriverEntry del controlador SCSI Miniport

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress