Compartir a través de


estructura HW_INITIALIZATION_DATA (srb.h)

Cada rutina driver's DriverEntry del controlador SCSI debe inicializarse con ceros y, a continuación, rellenar la información de HW_INITIALIZATION_DATA pertinente (SCSI) para el controlador de puerto específico del sistema operativo.

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

Sintaxis

typedef struct _HW_INITIALIZATION_DATA {
  ULONG               HwInitializationDataSize;
  INTERFACE_TYPE      AdapterInterfaceType;
  PHW_INITIALIZE      HwInitialize;
  PHW_STARTIO         HwStartIo;
  PHW_INTERRUPT       HwInterrupt;
  PHW_FIND_ADAPTER    HwFindAdapter;
  PHW_RESET_BUS       HwResetBus;
  PHW_DMA_STARTED     HwDmaStarted;
  PHW_ADAPTER_STATE   HwAdapterState;
  ULONG               DeviceExtensionSize;
  ULONG               SpecificLuExtensionSize;
  ULONG               SrbExtensionSize;
  ULONG               NumberOfAccessRanges;
  PVOID               Reserved;
  BOOLEAN             MapBuffers;
  BOOLEAN             NeedPhysicalAddresses;
  BOOLEAN             TaggedQueuing;
  BOOLEAN             AutoRequestSense;
  BOOLEAN             MultipleRequestPerLu;
  BOOLEAN             ReceiveEvent;
  USHORT              VendorIdLength;
  PVOID               VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT              DeviceIdLength;
  PVOID               DeviceId;
  PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

Miembros

HwInitializationDataSize

Especifica el tamaño de esta estructura en bytes, tal y como devuelve sizeof(). En efecto, este miembro indica la versión de esta estructura que usa el controlador de miniport. Una rutina driver's DriverEntry del controlador miniport debe establecer el valor de este miembro para el controlador de puerto.

AdapterInterfaceType

Especifica el tipo de bus de E/S al que está conectado el HBA, que puede ser uno de los siguientes: Internal, Isa, Eisa, MicroChannel, TurboChannel o PCIBus. Sin embargo, en el futuro se admitirán tipos adicionales de autobuses. El límite superior de los tipos de buses admitidos siempre es MaximumInterfaceType.

Si se establece en PCIBus, el controlador de minipuerto debe proporcionar valores para los miembros VendorIdLength, VendorId, DeviceIdLength y DeviceId, descritos más adelante.

HwInitialize

Puntero a la rutina HwScsiInitialize del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto. El prototipo de esta rutina es PHW_INITIALIZE.

HwStartIo

Puntero a la rutina HwScsiStartIo del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto. El prototipo de esta rutina es PHW_STARTIO.

HwInterrupt

Puntero a la rutina HwScsiInterrupt del controlador de miniporte, que es un punto de entrada necesario para cualquier controlador de miniporte de un HBA que genera interrupciones. Establézcalo en NULL si el controlador de minipuerto no necesita ISR. El prototipo de esta rutina es PHW_INTERRUPT.

HwFindAdapter

Puntero a la rutina HwScsiFindAdapter del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto. El prototipo de esta rutina es PHW_FIND_ADAPTER.

HwResetBus

Puntero a la rutina HwScsiResetBus del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto. El prototipo de esta rutina es PHW_RESET_BUS.

HwDmaStarted

Puntero a la rutina HwScsiDmaStarted del controlador de miniporte si su HBA usa DMA del sistema, es decir, un controlador DMA del sistema. Establézcalo en NULL si el HBA es un patrón de bus o usa PIO. El prototipo de esta rutina es PHW_DMA_STARTED.

HwAdapterState

Puntero a la rutina HwScsiAdapterState del controlador de miniporte, que es un punto de entrada necesario para los controladores de miniporte de HBAs con BIOS que están vinculados con un controlador de puerto de solo plataforma x86 dependiente del sistema operativo que debe cambiar entre los modos de procesador protegidos y reales x86. Si el controlador de miniporte no necesita ninguna rutina HwScsiAdapterState , establezca este miembro en NULL. Un controlador de minipuerto para un HBA que tenga un BIOS debe tener una rutina HwScsiAdapterState para ser compatible con el controlador de puerto de solo x86 y portátil a un entorno de sistema operativo solo x86. El prototipo de esta rutina es PHW_ADAPTER_STATE.

DeviceExtensionSize

Especifica el tamaño en bytes requerido por el controlador de miniport para su extensión de dispositivo por HBA. Un controlador de minipuerto usa su extensión de dispositivo como almacenamiento para la información de HBA determinada por el controlador. El controlador de puerto específico del sistema operativo inicializa cada extensión de dispositivo que asigna con ceros y pasa un puntero a la extensión de dispositivo específica del HBA en cada llamada a un controlador de miniport, excepto a su rutina DriverEntry . El tamaño especificado no incluye ningún almacenamiento de unidad lógica solicitado por controlador de miniporte, que se describe a continuación.

SpecificLuExtensionSize

Especifica el tamaño en bytes requerido por el controlador de miniport para su almacenamiento por unidad lógica, si existe. Un controlador de minipuerto puede usar sus extensiones de LU como almacenamiento para información de unidad lógica determinada por el controlador sobre periféricos SCSI en el bus. El controlador de puerto específico del sistema operativo inicializa cada extensión de LU que asigna con ceros. Deje este miembro establecido en cero si el controlador de minipuerto no mantiene la información por LU para la que requiere almacenamiento. Este valor se basa en la suposición de que el HBA puede recibir direcciones de 32 bits, independientemente de lo que el controlador pueda admitir realmente. Si se necesita espacio adicional en las extensiones LUN o SRB para controlar direcciones de 64 bits, se deben realizar ajustes adecuados en este valor antes de usarlo con rutinas como ScsiPortGetUncachedExtension.

SrbExtensionSize

Especifica el tamaño en bytes requerido por el controlador de miniport para su almacenamiento por solicitud, si existe. Un controlador de minipuerto puede usar extensiones SRB como almacenamiento para información específica del controlador determinada por el controlador, como los datos necesarios para procesar una solicitud determinada. El controlador de puerto específico del sistema operativo no inicializa las extensiones SRB, pero establece un puntero a este almacenamiento en cada SRB que envía al controlador de miniporte. El hardware HBA puede acceder a una extensión SRB de forma segura. Deje este miembro establecido en cero si el controlador de minipuerto no mantiene la información por SRB para la que requiere almacenamiento. Este valor se basa en la suposición de que el HBA puede recibir direcciones de 32 bits, independientemente de lo que el controlador pueda admitir realmente. Si se necesita espacio adicional en las extensiones LUN o SRB para controlar direcciones de 64 bits, se deben realizar ajustes adecuados en este valor antes de usarlo con rutinas como ScsiPortGetUncachedExtension.

NumberOfAccessRanges

Especifica cuántos intervalos de acceso usa el adaptador. Cada es un intervalo de direcciones de memoria o direcciones de puerto de E/S. Un HBA típico usa dos intervalos, uno para sus puertos de E/S y otro para su intervalo de memoria del dispositivo.

Reserved

Reservado para uso del sistema y no disponible para su uso por los controladores de minipuerto.

MapBuffers

Indica, cuando es TRUE, que todas las direcciones del búfer de datos deben asignarse a direcciones virtuales para el acceso mediante el controlador de miniporte. Si es FALSE, las direcciones del búfer de datos no tienen que asignarse a direcciones virtuales.

NeedPhysicalAddresses

Indica, cuando es TRUE, que el controlador de minipuerto necesita traducir su dispositivo, cualquier lu y cualquier dirección de extensión por SRB, así como direcciones de búfer de SRB, a direcciones físicas, según lo requiera el HBA. Si es FALSE, ninguna de estas direcciones debe traducirse a direcciones físicas.

TaggedQueuing

Indica, cuando es TRUE, ese controlador de minipuerto puede admitir la puesta en cola etiquetada SCSI. Cuando es FALSE, el controlador de minipuerto no puede admitir la puesta en cola con etiquetas SCSI.

AutoRequestSense

Indica, cuando es TRUE, que el HBA puede realizar una operación de sentido de solicitud sin necesidad de una solicitud explícita para hacerlo. Cuando es FALSE, el HBA requiere una solicitud explícita para poder realizar una operación de detección de solicitudes. Solo los controladores de minipuerto que impulsan hbAs con firmware integrado para realizar operaciones de detección de solicitudes deben establecer este miembro en TRUE.

MultipleRequestPerLu

Indica, cuando es TRUE, que el controlador de miniporte puede poner en cola varias solicitudes por unidad lógica, en particular, dentro del HBA. Si es FALSE, el controlador de minipuerto no puede poner en cola varias solicitudes por unidad lógica. Tenga en cuenta que un HBA debe admitir el sentido de solicitud automática para su controlador de minipuerto para habilitar esta funcionalidad. Si un controlador de minipuerto establece este miembro en TRUE, debe usar cada miembro queueTag de SRB para las solicitudes de este tipo, pero el SRB_FLAGS_QUEUE_ACTION_ENABLE no se establece en el miembro SrbFlags de la estructura SCSI_REQUEST_BLOCK.

ReceiveEvent

Indica, cuando es TRUE, que el controlador de minipuerto controla un HBA que puede admitir el SRB de evento de recepción para eventos asincrónicos SCSI. Cuando es FALSE, el HBA no puede admitir el SRB de evento de recepción para eventos asincrónicos SCSI.

VendorIdLength

Especifica el tamaño en bytes de la cadena VendorId , que se describe a continuación.

VendorId

Puntero a una cadena de bytes ASCII que identifica al fabricante del HBA. Este miembro es irrelevante para los controladores de Plug and Play.

Si el adapterInterfaceType especificado es PCIBus, el identificador de proveedor es un valor de USHORT asignado por el SIG pci, que el controlador de miniport debe convertir en una cadena de bytes. Por ejemplo, si el valor de id. de proveedor de PCI asignado es 1001, la cadena VendorId proporcionada por el controlador de miniport sería ("1", "0", "0", "1").

ReservedUshort

Reservado para uso del sistema y no está disponible para su uso por los controladores de minipuerto.

PortVersionFlags

DeviceIdLength

Especifica el tamaño en bytes de la cadena DeviceId , que se describe a continuación.

DeviceId

Puntero a una cadena de bytes ASCII que identifica los modelos HBA admitidos por el controlador de minipuerto. Este miembro es irrelevante para los controladores de Plug and Play.

Si el adapterInterfaceType especificado es PCIBus, un identificador de dispositivo es un valor de USHORT asignado por el fabricante del HBA. El controlador de minipuerto debe convertir los valores de identificador de dispositivo PCI para los HBA que puede admitir en cadenas de bytes DeviceId , como para el miembro VendorId . Por ejemplo, si un controlador de minipuerto puede admitir HBAs con los identificadores de dispositivo PCI 8040 y 8050, podría establecer DeviceId con un puntero a la cadena de bytes ("8", "0").

HwAdapterControl

Puntero a la rutina HwScsiAdapterControl del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto PnP. Establézcalo en NULL si el controlador de minipuerto no admite Plug and Play.

Comentarios

Cada controlador de minipuerto debe inicializar la estructura de HW_INITIALIZATION_DATA con ceros antes de establecer los valores de los miembros pertinentes en esta estructura y llama a ScsiPortInitialize.

El miembro Dma64BitAddresses de HW_INITIALIZATION_DATA se ha eliminado en Windows 2000 (consulta la discusión en PORT_CONFIGURATION_DATA para obtener más detalles).

Tanto HW_INITIALIZATION_DATA como PORT_CONFIGURATION_INFORMATION tienen un par de miembros denominados SpecificLuExtensionSize y SrbExtensionSize cuyos valores se controlan de forma diferente a los anteriores a Windows 2000. El controlador de minipuerto debe calcular los valores iniciales de SpecificLuExtensionSize y SrbExtensionSize en HW_INITIALIZATION_DATA en función de la suposición de que el HBA es capaz de controlar direcciones de 32 bits, independientemente de lo que el controlador pueda admitir realmente. (Vea la discusión en PORT_CONFIGURATION_DATA para obtener más detalles).

Requisitos

Requisito Valor
Header srb.h (incluya Srb.h, Strmini.h)

Consulte también

DriverEntry del controlador miniport SCSI

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize