estrutura HW_INITIALIZATION_DATA (srb.h)
A rotina driverEntry de cada driver de miniport scsi deve ser inicializada com zeros e, em seguida, preencher as informações relevantes de HW_INITIALIZATION_DATA (SCSI) para o driver de porta específico do sistema operacional.
Sintaxe
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;
Membros
HwInitializationDataSize
Especifica o tamanho dessa estrutura em bytes, conforme retornado por sizeof(). Na verdade, esse membro indica a versão dessa estrutura que está sendo usada pelo driver de miniporto. A rotina DriverEntry de um driver de miniporte deve definir o valor desse membro para o driver de porta.
AdapterInterfaceType
Especifica o tipo de barramento de E/S ao qual o HBA está conectado, que pode ser um dos seguintes: Interno, Isa, Eisa, MicroChannel, TurboChannel ou PCIBus. No entanto, haverá suporte para tipos adicionais de ônibus no futuro. O limite superior nos tipos de ônibus com suporte é sempre MaximumInterfaceType.
Se isso estiver definido como PCIBus, o driver de miniporto deverá fornecer valores para os membros VendorIdLength, VendorId, DeviceIdLength e DeviceId , descritos posteriormente.
HwInitialize
Ponteiro para a rotina HwScsiInitialize do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniport. O protótipo dessa rotina é PHW_INITIALIZE.
HwStartIo
Ponteiro para a rotina HwScsiStartIo do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniport. O protótipo dessa rotina é PHW_STARTIO.
HwInterrupt
Ponteiro para a rotina HwScsiInterrupt do driver de miniport, que é um ponto de entrada necessário para qualquer driver de miniporto de um HBA que gera interrupções. Defina isso como NULL se o driver de miniporto não precisar de ISR. O protótipo dessa rotina é PHW_INTERRUPT.
HwFindAdapter
Ponteiro para a rotina HwScsiFindAdapter do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniport. O protótipo dessa rotina é PHW_FIND_ADAPTER.
HwResetBus
Ponteiro para a rotina HwScsiResetBus do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniport. O protótipo dessa rotina é PHW_RESET_BUS.
HwDmaStarted
Ponteiro para a rotina HwScsiDmaStarted do driver de miniporte se o HBA usar o DMA do sistema, ou seja, um controlador DMA do sistema. Defina isso como NULL se o HBA for um master de barramento ou usar PIO. O protótipo dessa rotina é PHW_DMA_STARTED.
HwAdapterState
Ponteiro para a rotina HwScsiAdapterState do driver de miniport, que é um ponto de entrada necessário para drivers de miniporte de HBAs com BIOSs que estão vinculados a um driver de porta dependente do sistema operacional, x86-platform-only que deve alternar entre os modos de processador x86 protegidos e reais. Se o driver de miniport não precisar de rotina HwScsiAdapterState , defina esse membro como NULL. Um driver de miniporto para um HBA que tem um BIOS deve ter uma rotina HwScsiAdapterState para ser compatível com o driver de porta somente x86 e portátil para um ambiente de sistema operacional somente x86. O protótipo dessa rotina é PHW_ADAPTER_STATE.
DeviceExtensionSize
Especifica o tamanho em bytes exigido pelo driver de miniporto para sua extensão de dispositivo por HBA. Um driver de miniporto usa sua extensão de dispositivo como armazenamento para informações de HBA determinadas pelo driver. O driver de porta específico do sistema operacional inicializa cada extensão de dispositivo alocada com zeros e passa um ponteiro para a extensão de dispositivo específica do HBA em cada chamada para um driver de miniporto, exceto para sua rotina driverEntry . O tamanho especificado não inclui nenhum miniportor solicitado pelo driver por armazenamento de unidade lógica, descrito em seguida.
SpecificLuExtensionSize
Especifica o tamanho em bytes exigido pelo driver de miniporto para seu armazenamento por unidade lógica, se houver. Um driver de miniporte pode usar suas extensões LU como armazenamento para informações de unidade lógica determinadas pelo driver sobre periféricos SCSI no barramento. O driver de porta específico do sistema operacional inicializa cada extensão LU alocada com zeros. Deixe esse membro definido como zero se o driver de miniporto não mantiver informações por LU para as quais ele requer armazenamento. Esse valor baseia-se na suposição de que o HBA é capaz de receber endereços de 32 bits, independentemente do que o controlador possa realmente dar suporte. Se for necessário espaço adicional nas extensões LUN ou SRB para lidar com endereços de 64 bits, os ajustes apropriados devem ser feitos nesse valor antes de usá-lo com rotinas como ScsiPortGetUncachedExtension.
SrbExtensionSize
Especifica o tamanho em bytes exigido pelo driver de miniporto para seu armazenamento por solicitação, se houver. Um driver de miniporto pode usar extensões SRB como armazenamento para informações específicas de solicitação determinadas pelo driver, como dados necessários para processar uma solicitação específica. O driver de porta específico do sistema operacional não inicializa extensões SRB, mas define um ponteiro para esse armazenamento em cada SRB que ele envia para o driver de miniporte. Uma extensão SRB pode ser acessada com segurança pelo hardware HBA. Deixe esse membro definido como zero se o driver de miniporto não mantiver informações por SRB para as quais ele requer armazenamento. Esse valor baseia-se na suposição de que o HBA é capaz de receber endereços de 32 bits, independentemente do que o controlador possa realmente dar suporte. Se for necessário espaço adicional nas extensões LUN ou SRB para lidar com endereços de 64 bits, os ajustes apropriados devem ser feitos nesse valor antes de usá-lo com rotinas como ScsiPortGetUncachedExtension.
NumberOfAccessRanges
Especifica quantos intervalos de acesso o adaptador usa. Cada um é um intervalo de endereços de memória ou endereços de porta de E/S. Um HBA típico usa dois intervalos, um para suas portas de E/S e outro para o intervalo de memória do dispositivo.
Reserved
Reservado para uso do sistema e não disponível para uso por drivers de miniport.
MapBuffers
Indica, quando TRUE, que todos os endereços de buffer de dados devem ser mapeados para endereços virtuais para acesso pelo driver de miniport. Quando FALSE, os endereços de buffer de dados não precisam ser mapeados para endereços virtuais.
NeedPhysicalAddresses
Indica, quando TRUE, que o driver de miniporto precisa traduzir seu dispositivo, qualquer por LU e quaisquer endereços de extensão por SRB, bem como endereços de buffer SRB, para endereços físicos, conforme exigido pelo HBA. Quando FALSE, nenhum desses endereços precisa ser convertido em endereços físicos.
TaggedQueuing
Indica, quando TRUE, que o driver de miniporto pode dar suporte à fila marcada por SCSI. Quando FALSE, o driver de miniporto não pode dar suporte à fila marcada por SCSI.
AutoRequestSense
Indica, quando TRUE, que o HBA pode executar uma operação de sensor de solicitação sem exigir uma solicitação explícita para fazer isso. Quando FALSE, o HBA requer uma solicitação explícita antes de poder executar uma operação de sentido de solicitação. Somente os drivers de miniporta que conduzem HBAs com firmware interno para executar operações de sensor de solicitação devem definir esse membro como TRUE.
MultipleRequestPerLu
Indica, quando TRUE, que o driver de miniporto pode enfileirar várias solicitações por unidade lógica, em particular, dentro do HBA. Quando FALSE, o driver de miniporto não pode enfileirar várias solicitações por unidade lógica. Observe que um HBA deve dar suporte ao sentido de solicitação automática para seu driver de miniporto para habilitar essa funcionalidade. Se um driver de miniporto definir esse membro como TRUE, ele deverá usar cada membro QueueTag SRB para solicitações desse tipo, mas o SRB_FLAGS_QUEUE_ACTION_ENABLE não está definido no membro SrbFlags da estrutura SCSI_REQUEST_BLOCK.
ReceiveEvent
Indica, quando TRUE, que o driver de miniporto conduz um HBA que pode dar suporte ao SRB de evento de recebimento para eventos assíncronos SCSI. Quando FALSE, o HBA não pode dar suporte ao SRB de evento de recebimento para eventos assíncronos SCSI.
VendorIdLength
Especifica o tamanho em bytes da cadeia de caracteres VendorId , descrita em seguida.
VendorId
Ponteiro para uma cadeia de caracteres de bytes ASCII que identifica o fabricante do HBA. Esse membro é irrelevante para Plug and Play drivers.
Se o AdapterInterfaceType fornecido for PCIBus, a ID do fornecedor será um valor USHORT alocado pelo SIG PCI, que deve ser convertido em uma cadeia de caracteres de bytes pelo driver de miniporte. Por exemplo, se o valor da ID do fornecedor PCI atribuído for 1001, a cadeia de caracteres VendorId fornecida pelo miniportor será ('1', '0', '0', '1').
ReservedUshort
Reservado para uso do sistema e não está disponível para uso por drivers de miniport.
PortVersionFlags
DeviceIdLength
Especifica o tamanho em bytes da cadeia de caracteres DeviceId , descrita em seguida.
DeviceId
Ponteiro para uma cadeia de caracteres de bytes ASCII que identifica os modelos HBA compatíveis com o driver de miniport. Esse membro é irrelevante para Plug and Play drivers.
Se o AdapterInterfaceType fornecido for PCIBus, uma ID do dispositivo será um valor USHORT atribuído pelo fabricante do HBA. O driver de miniporte deve converter qualquer valor de ID do dispositivo PCI para os HBA(s) que ele possa dar suporte em cadeias de caracteres de bytes DeviceId , como para o membro VendorId . Por exemplo, se um driver de miniporto puder dar suporte a HBAs com as IDs de dispositivo PCI 8040 e 8050, ele poderá definir DeviceId com um ponteiro para a cadeia de caracteres de byte ('8', '0').
HwAdapterControl
Ponteiro para a rotina HwScsiAdapterControl do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniporto PnP. Defina isso como NULL se o driver de miniporte não der suporte a Plug and Play.
Comentários
Cada driver de miniporte deve inicializar a estrutura HW_INITIALIZATION_DATA com zeros antes de definir os valores dos membros relevantes nessa estrutura e chamar ScsiPortInitialize.
O membro Dma64BitAddresses do HW_INITIALIZATION_DATA foi eliminado no Windows 2000 (consulte a discussão em PORT_CONFIGURATION_DATA para obter mais detalhes).
Tanto HW_INITIALIZATION_DATA quanto PORT_CONFIGURATION_INFORMATION têm um par de membros chamados SpecificLuExtensionSize e SrbExtensionSize cujos valores são tratados de forma diferente do que eram antes do Windows 2000. O driver de miniporte deve calcular os valores iniciais de SpecificLuExtensionSize e SrbExtensionSize em HW_INITIALIZATION_DATA com base na suposição de que o HBA é capaz de lidar com endereços de 32 bits, independentemente do que o controlador possa realmente dar suporte. (Consulte a discussão em PORT_CONFIGURATION_DATA para obter mais detalhes.)
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | srb.h (inclua Srb.h, Strmini.h) |