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.

Nota Os modelos de driver de porta SCSI e driver de miniporto SCSI podem ser alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar os modelos de driver do Storport e do driver de miniporto 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 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)

Confira também

DriverEntry of SCSI Miniport Driver

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize