estrutura HW_INITIALIZATION_DATA (storport.h)
A estrutura HW_INITIALIZATION_DATA (Storport) contém informações específicas para cada driver de miniporto e o hardware que o driver de miniporto gerencia.
Sintaxe
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PVOID HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
UCHAR 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;
PHW_BUILDIO HwBuildIo;
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
PHW_INITIALIZE_TRACING HwInitializeTracing;
PHW_CLEANUP_TRACING HwCleanupTracing;
PHW_TRACING_ENABLED HwTracingEnabled;
ULONG FeatureSupport;
ULONG SrbTypeFlags;
ULONG AddressTypeFlags;
ULONG Reserved1;
PHW_UNIT_CONTROL HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
Membros
HwInitializationDataSize
Especifica o tamanho dessa estrutura em bytes, conforme retornado por sizeof(HW_INITIALIZATION_DATA). 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 miniport deve definir o valor desse membro para o driver de porta.
AdapterInterfaceType
O driver storport não dá suporte a ônibus herdados. Portanto, a maioria dos tipos de interface do adaptador usados com o driver de porta SCSI são inválidos para Storport. Em particular, não há suporte para Isa, Eisa, MicroChannel e TurboChannel . Além disso, ao contrário do caso da Porta SCSI, um driver de miniporto que funciona com o driver Storport não é necessário para fornecer valores para os membros VendorIdLength, VendorId, DeviceIdLength e DeviceId .
HwInitialize
Ponteiro para a rotina HwStorInitialize do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniporta.
HwStartIo
Ponteiro para a rotina HwStorStartIo do driver de miniporta, que é um ponto de entrada necessário para todos os drivers de miniporta.
HwInterrupt
Ponteiro para a rotina HwStorInterrupt do driver de miniporta, que é um ponto de entrada necessário para todos os drivers de miniporta.
HwFindAdapter
Ponteiro para a rotina HwStorFindAdapter do driver de miniport, que é um ponto de entrada necessário para todos os drivers de miniporta.
HwResetBus
Ponteiro para a rotina HwStorResetBus do driver de miniporta, que é um ponto de entrada necessário para todos os drivers de miniporta.
HwDmaStarted
O driver storport não dá suporte ao DMA de modo subordinado. Portanto, esse membro deve ser NULL.
HwAdapterState
O driver storport não dá suporte a drivers herdados. Portanto, esse membro deve ser NULL.
DeviceExtensionSize
Especifica o tamanho, em bytes, exigido pelo driver de miniporta para sua extensão de dispositivo por adaptador. Um driver de miniporta usa sua extensão de dispositivo como armazenamento para informações do HBA (adaptador de barramento de host) determinado pelo driver. O driver de porta específico do sistema operacional inicializa cada extensão de dispositivo uma vez, quando aloca a extensão pela primeira vez e a preenche com zeros. Ele passa um ponteiro para a extensão de dispositivo específica do HBA em cada chamada para um driver de miniporto. O tamanho especificado não inclui nenhum armazenamento de unidade lógica solicitado pelo driver de miniport. O tamanho do armazenamento por unidade lógica é especificado por meio do campo SpecificLuExtensionSize , descrito posteriormente neste tópico.
Embora o SCSIPort inicialize novamente a extensão do dispositivo sempre que o adaptador for interrompido e, portanto, as chamadas subsequentes para HwScsiFindAdapter receberem uma extensão de dispositivo zerada, o Storport não segue esse modelo. Em vez disso, o Storport redefine a extensão do dispositivo como zero somente quando ela é alocada pela primeira vez, portanto, somente a primeira chamada para HwStorFindAdapter para um determinado adaptador recebe uma extensão de dispositivo zerada. Chamadas subsequentes para HwStorFindAdapter e outras funções de miniporto recebem a extensão do dispositivo conforme modificado pela última vez pelo miniporto. Isso permite que o driver de miniporto mantenha o conhecimento sobre o estado do adaptador entre paradas e reinicializações de Plug and Play (PnP), possivelmente permitindo que o driver de miniporto otimize seu procedimento de inicialização.
SpecificLuExtensionSize
Especifica o tamanho em bytes exigido pelo driver de miniporta para seu armazenamento por unidade lógica, se houver. Um driver de miniporta pode usar suas extensões LU como armazenamento para informações de unidade lógica determinadas pelo driver sobre periféricos no barramento. O driver do Storport 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 deverão ser feitos nesse valor antes de usá-lo com rotinas como StorPortGetUncachedExtension.
SrbExtensionSize
Especifica o tamanho, em bytes, exigido pelo driver de miniporta para seu armazenamento por solicitação, se houver. Um driver de miniporta 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 Storport não inicializa extensões SRB, mas define um ponteiro para esse armazenamento em cada SRB que ele envia para o driver de miniporto. Uma extensão SRB pode ser acessada com segurança pelo hardware HBA. Como os drivers de miniporta que funcionam com o driver Storport devem dar suporte a listas de dispersão/coleta e as listas de dispersão/coleta por SRB geralmente são alocadas na extensão SRB, esse membro raramente é zero. 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 deverão ser feitos nesse valor antes de usá-lo com rotinas como StorPortGetUncachedExtension.
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.
Reserved
Reservado para uso do sistema e não disponível para uso por drivers de miniporta.
MapBuffers
Indica se o driver storport mapeia endereços de buffer de dados SRB para endereços virtuais do sistema. O membro MapBuffers pode ter um dos valores a seguir.
Valor | Significado |
---|---|
STOR_MAP_NO_BUFFERS | Não mapeie para nenhum SRB, exceto SRB_FUNCTION_IO_CONTROL e SRB_FUNCTION_WMI. |
STOR_MAP_ALL_BUFFERS | Obsoleto. Esse valor tem o mesmo efeito que STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS | Mapeie o buffer para todas as E/S, exceto para solicitações de leitura ou gravação. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE | Mapeie o buffer para todas as E/S, incluindo solicitações de leitura e gravação. Esse valor é válido começando com Windows 8. |
NeedPhysicalAddresses
Deve ser definido como TRUE. Um valor true indica que o driver de miniporto deve traduzir determinados tipos de endereços para endereços físicos. Os drivers de miniport que trabalham com o driver storport devem dar suporte ao DMA master barramento, portanto, eles sempre serão obrigados a fazer a conversão de endereços.
TaggedQueuing
Deve ser definido como TRUE. Um valor true indica que o driver de miniporta dá suporte à fila marcada por SCSI. Todos os drivers de miniporta que funcionam com o driver Storport devem dar suporte ao enfileiramento marcado.
AutoRequestSense
Deve ser TRUE. Um valor true indica que o HBA pode executar uma operação de sentido de solicitação sem exigir uma solicitação explícita para fazer isso. Todos os drivers de miniporta que funcionam com o driver Storport devem dar suporte ao Sensor de Solicitação Automática SCSI.
MultipleRequestPerLu
Deve ser definido como TRUE. Um valor true indica que o driver de miniporto pode enfileirar várias solicitações por unidade lógica. Os drivers de miniport que funcionam com o driver Storport devem dar suporte a várias solicitações por unidade lógica.
ReceiveEvent
O driver do Storport ignora esse membro.
VendorIdLength
O driver storport ignora esse membro, pois os drivers de miniporto que funcionam com o driver Storport devem dar suporte a PnP.
VendorId
O driver storport ignora esse membro, pois os drivers de miniporto que funcionam com o driver Storport devem dar suporte a PnP.
ReservedUshort
PortVersionFlags
Sinalizadores para indicar recursos com suporte.
DeviceIdLength
O driver storport ignora esse membro, pois os drivers de miniporto que funcionam com o driver Storport devem dar suporte a PnP.
DeviceId
O driver storport ignora esse membro, pois os drivers de miniporto que funcionam com o driver Storport devem dar suporte a PnP.
HwAdapterControl
Ponteiro para a rotina HwStorAdapterControl do driver de miniport. Essa é uma rotina necessária porque os drivers de miniporta que funcionam com o driver Storport exigem suporte API.
HwBuildIo
Ponteiro para uma rotina opcional do HwStorBuildIo que o driver de porta chama para fazer processamento não sincronizado antes de chamar a rotina HwStorStartIo do driver de miniporto. Esse retorno de chamada é específico para miniportos físicos e deve ser definido como NULL por miniportos virtuais.
HwFreeAdapterResources
Um ponteiro para a rotina HwStorFreeAdapterResources do driver de miniporta virtual, que é um ponto de entrada necessário para todos os drivers de miniporto virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.
Esse retorno de chamada é adicionado em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.
HwProcessServiceRequest
Um ponteiro para a rotina HwStorProcessServiceRequest do driver de miniporta virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.
Esse retorno de chamada é adicionado em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.
HwCompleteServiceIrp
Um ponteiro para a rotina HwStorCompleteServiceIrp do driver de miniporta virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.
Esse retorno de chamada é adicionado em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.
HwInitializeTracing
Um ponteiro para a rotina HwStorInitializeTracing do driver de miniporta virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.
Esse retorno de chamada é adicionado em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.
HwCleanupTracing
Um ponteiro para a rotina HwStorCleanupTracing do driver de miniporta virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.
Esse retorno de chamada é adicionado em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.
HwTracingEnabled
Um ponteiro para uma rotina opcional HwStorTracingEnabled que o driver de porta chama para notificar o miniporto de se o rastreamento está habilitado ou não.
FeatureSupport
Sinalizadores que indicam recursos compatíveis com o miniporto. FeatureSupport é definido como uma combinação desses valores:
Valor | Significado |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT | Este é um driver de miniporta virtual. |
STOR_FEATURE_ATA_PASS_THROUGH | O miniporto dá suporte à passagem do ATA. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES | O miniporto fornece configurações completas em sua estrutura de STOR_DEVICE_CAPABILITIES_EX . |
STOR_FEATURE_DUMP_POINTERS | O miniporto dá suporte aos SRBs do ponteiro de despejo. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX | O driver de miniporta não deseja o sufixo " ScSI type Device" como parte do nome amigável do dispositivo. |
STOR_FEATURE_DUMP_RESUME_CAPABLE | A funcionalidade de despejo do miniporta é funcional para retomar da hibernação. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD | O driver do Storport inicializa o STORAGE_DEVICE_DESCRIPTOR da página VPD de Informações do ATA em vez de dados INQUIRY. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE | O driver storport define o tipo de interface do adaptador. |
SrbTypeFlags
Sinalizadores que indicam os tipos de SRB compatíveis com o miniporto. SrbTypeFlags é definido como 0 ou uma combinação dos seguintes valores:
Valor | Significado |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK | O miniporto usa SRBs padrão. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK | O miniporto dá suporte a SRBs estendidos. |
AddressTypeFlags
Os esquemas de endereço compatíveis com o miniporto. Atualmente, há suporte para o único esquema de endereço e o miniporto deve definir esse membro como ADDRESS_TYPE_FLAG_BTL8.
Valor | Significado |
---|---|
ADDRESS_TYPE_FLAG_BTL8 | Endereçamento de 8 bits de Barramento, Destino e LUN (BTL). |
Reserved1
Reservado, definido como 0.
HwUnitControl
Um ponteiro para a rotina HwStorUnitControl do driver de miniport. O driver de porta chama essa rotina com uma solicitação de controle para um dispositivo de unidade de armazenamento.
Comentários
A rotina DriverEntry de cada driver de miniporto storport deve chamar StorPortInitialize depois que o driver de miniporto tiver zero primeiro e, em seguida, definir os membros de HW_INITIALIZATION_DATA.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | storport.h (inclua Storport.h) |