estructura HW_INITIALIZATION_DATA (srb.h)
Cada rutina del controlador de miniporte SCSI DriverEntry debe inicializarse con ceros y, a continuación, rellenar la información pertinente HW_INITIALIZATION_DATA (SCSI) para el controlador de puerto específico del sistema operativo.
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 de controlador de miniporte 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: interno , Isa, Eisa, MicroChannel, TurboChannelo 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 miniport debe proporcionar valores para los miembros de VendorIdLength, VendorId, DeviceIdLengthy DeviceId, descritos más adelante.
HwInitialize
Puntero a la rutina de HwScsiInitialize del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport. El prototipo de esta rutina es PHW_INITIALIZE.
HwStartIo
Puntero a la rutina del controlador de miniporte HwScsiStartIo, que es un punto de entrada necesario para todos los controladores de miniport. El prototipo de esta rutina es PHW_STARTIO.
HwInterrupt
Puntero al controlador de miniporte rutina HwScsiInterrupt, que es un punto de entrada necesario para cualquier controlador de miniporte de un HBA que genere interrupciones. Establézcalo en NULL si el controlador de miniporte no necesita ISR. El prototipo de esta rutina es PHW_INTERRUPT.
HwFindAdapter
Puntero al controlador de miniporte rutina HwScsiFindAdapter, que es un punto de entrada necesario para todos los controladores de miniport. El prototipo de esta rutina es PHW_FIND_ADAPTER.
HwResetBus
Puntero a la rutina de HwScsiResetBus del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport. El prototipo de esta rutina es PHW_RESET_BUS.
HwDmaStarted
Puntero al controlador de miniporte HwScsiDmaStarted rutina 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 de HwScsiAdapter State del controlador de miniporte, que es un punto de entrada necesario para los controladores de miniporte de HBA 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 miniport no necesita rutina de HwScsiAdapterState, establezca este miembro en NULL. Un controlador de miniport 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 miniporte 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 de DriverEntry. El tamaño especificado no incluye ningún almacenamiento por unidad lógica solicitado por controlador de miniport, 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 miniporte puede usar sus extensiones de LU como almacenamiento para la 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 miniporte 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 las 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 miniporte 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 miniport. El hardware HBA puede acceder a una extensión SRB de forma segura. Deje este miembro establecido en cero si el controlador de miniporte 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 las 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 miniport.
MapBuffers
Indica, cuando TRUE, que todas las direcciones del búfer de datos deben asignarse a direcciones virtuales para el acceso mediante el controlador de miniport. Cuando FALSE, no es necesario asignar direcciones de búfer de datos a direcciones virtuales.
NeedPhysicalAddresses
Indica, cuando TRUE, que el controlador de miniporte debe traducir su dispositivo, cualquier LU y cualquier dirección de extensión por SRB, así como direcciones de búfer SRB, a direcciones físicas, según lo requiera el HBA. Cuando FALSE, ninguna de estas direcciones debe traducirse a direcciones físicas.
TaggedQueuing
Indica, cuando TRUE, ese controlador de miniporte puede admitir la puesta en cola etiquetada SCSI. Cuando FALSE, el controlador de miniport no puede admitir la puesta en cola etiquetada por SCSI.
AutoRequestSense
Indica, cuando TRUE, que el HBA puede realizar una operación de detección de solicitudes sin necesidad de que una solicitud explícita lo haga. Cuando FALSE, el HBA requiere una solicitud explícita para poder realizar una operación de detección de solicitudes. Solo los controladores de miniportar que impulsan hbAs con firmware integrado para realizar operaciones de detección de solicitudes deben establecer este miembro en TRUE.
MultipleRequestPerLu
Indica, cuando TRUE, que el controlador de miniporte puede poner en cola varias solicitudes por unidad lógica, en particular, dentro del HBA. Cuando FALSE, el controlador de miniport 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 que su controlador de miniporte habilite esta funcionalidad. Si un controlador de miniporta establece este miembro en TRUE, debe usar cada QueueTag miembro de SRB para solicitudes de este tipo, pero el SRB_FLAGS_QUEUE_ACTION_ENABLE no se establece en el SrbFlags miembro de la estructura SCSI_REQUEST_BLOCK.
ReceiveEvent
Indica, cuando TRUE, que el controlador de miniporta controla un HBA que puede admitir el SRB de evento de recepción para eventos asincrónicos SCSI. Cuando 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 de, 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 Plug and Play.
Si el AdapterInterfaceType especificado es PCIBus, el identificador de proveedor es un valor de USHORT asignado por el SIG pci, que debe convertirse en una cadena de bytes por el controlador de miniport. Por ejemplo, si el valor de id. de proveedor de PCI asignado es 1001, el controlador de miniport proporcionado VendorId cadena sería ("1", "0", "0", "1", "1").
ReservedUshort
Reservado para uso del sistema y no está disponible para su uso por los controladores de miniport.
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 miniport. Este miembro es irrelevante para los controladores 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 miniport debe convertir los valores de identificador de dispositivo PCI para los HBA que puede admitir en DeviceId cadenas de bytes, como para el miembro VendorId. Por ejemplo, si un controlador de minipuerto puede admitir HBA 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 de HwScsiAdapterControl del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport PnP. Establézcalo en NULL si el controlador de miniporte no admite Plug and Play.
Observaciones
Cada controlador de miniport debe inicializar la estructura HW_INITIALIZATION_DATA con ceros antes de establecer los valores de los miembros pertinentes de esta estructura y llama a ScsiPortInitialize.
El Dma64BitAddresses miembro 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 miniport 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. (Consulte la discusión en PORT_CONFIGURATION_DATA para obtener más información).
Requisitos
Requisito | Valor |
---|---|
encabezado de | srb.h (include Srb.h, Strmini.h) |