HW_INITIALIZATION_DATA estrutura (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.

Nota O driver de porta SCSI e os modelos de driver de miniport scsi podem estar alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar o driver Storport e os modelos de driver de miniport do Storport .
 

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 miniport. Uma rotina driverEntry de um miniport 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 miniport de um HBA que gera interrupções. Defina isso como NULL se o driver de miniport 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 miniport se o HBA usar o DMA do sistema, ou seja, um controlador DMA do sistema. Defina isso como NULL se o HBA for um mestre 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 miniport de HBAs com BIOSs que estão vinculados a um driver de porta dependente do sistema operacional x86 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 tenha um BIOS deve ter uma rotina HwScsiAdapterState para ser compatível com o driver de porta somente x86 e portátil para um ambiente do sistema operacional somente x86. O protótipo dessa rotina é PHW_ADAPTER_STATE.

DeviceExtensionSize

Especifica o tamanho em bytes exigidos pelo driver de miniport 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 armazenamento por unidade lógica solicitado pelo driver de miniport, descrito em seguida.

SpecificLuExtensionSize

Especifica o tamanho em bytes exigidos pelo driver de miniporto para seu armazenamento por unidade lógica, se houver. Um driver de miniporto 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 manter 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 manipular 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 exigidos pelo driver de miniport 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 miniport. 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 manipular 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 do 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 lu 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 que, quando TRUE, esse driver de miniport pode dar suporte à fila marcada por SCSI. Quando FALSE, o driver de miniport não pode dar suporte à fila marcada por SCSI.

AutoRequestSense

Indica, quando TRUE, que o HBA pode executar uma operação de sentido de solicitação sem exigir uma solicitação explícita para fazê-lo. 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 miniport que conduzem HBAs com firmware interno para executar operações de sentido de solicitação devem definir esse membro como TRUE.

MultipleRequestPerLu

Indica, quando TRUE, que o driver de miniport pode enfileirar várias solicitações por unidade lógica, em particular, dentro do HBA. Quando FALSE, o driver de miniport 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 miniport para habilitar essa funcionalidade. Se um driver de miniporto definir esse membro como TRUE, ele deverá usar cada membro SRB QueueTag 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 dirige 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 miniporto. Por exemplo, se o valor de ID do fornecedor PCI atribuído for 1001, a cadeia de caracteres VendorId fornecida pelo driver de miniport seria ('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 com suporte do 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 miniporto deve converter qualquer valor(s) de ID de dispositivo PCI para os HBA(s) que ele pode dar suporte em cadeias de caracteres de byte 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 miniport PnP. Defina isso como NULL se o driver de miniport não der suporte a Plug and Play.

Comentários

Cada driver de miniporto 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 miniporto deve calcular os valores iniciais de SpecificLuExtensionSize e SrbExtensionSize em HW_INITIALIZATION_DATA com base na suposição de que o HBA é capaz de manipular 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

   
Cabeçalho srb.h (inclua Srb.h, Strmini.h)

Confira também

DriverEntry do Driver de Miniport SCSI

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize