Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Mapeia uma interrupção MSI ou MSI-X para um dispositivo PCI virtual atribuído e devolve o endereço MSI e os dados para programar no dispositivo.
Sintaxe
typedef enum WHV_VPCI_INTERRUPT_TARGET_FLAGS
{
WHvVpciInterruptTargetFlagNone = 0x00000000,
WHvVpciInterruptTargetFlagMulticast = 0x00000001,
} WHV_VPCI_INTERRUPT_TARGET_FLAGS;
// Enables bitwise operators on the WHV_VPCI_INTERRUPT_TARGET_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_VPCI_INTERRUPT_TARGET_FLAGS);
typedef struct WHV_VPCI_INTERRUPT_TARGET
{
UINT32 Vector;
WHV_VPCI_INTERRUPT_TARGET_FLAGS Flags;
UINT32 ProcessorCount;
UINT32 Processors[ANYSIZE_ARRAY];
} WHV_VPCI_INTERRUPT_TARGET;
HRESULT
WINAPI
WHvMapVpciDeviceInterrupt(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT64 LogicalDeviceId,
_In_ UINT32 Index,
_In_ UINT32 MessageCount,
_In_ const WHV_VPCI_INTERRUPT_TARGET* Target,
_Out_ UINT64* MsiAddress,
_Out_ UINT32* MsiData
);
Parameters
Partition
Handle para a partição que possui o dispositivo PCI virtual.
LogicalDeviceId
Especifica o ID lógico do dispositivo PCI virtual, conforme atribuído quando o dispositivo foi criado.
Index
Especifica o índice da entrada de mapeamento de interrupções a criar. Cada pedido de mapeamento deve especificar um índice único e não utilizado.
MessageCount
Especifica o número de mensagens solicitadas para a interrupção. Para uma interrupção MSI multi-mensagem, esta é uma potência de dois entre 1 e 32, inclusive. Para uma interrupção MSI-X, defina este valor para 1.
Target
Especifica um ponteiro para uma WHV_VPCI_INTERRUPT_TARGET estrutura que fornece o vetor de destino e o conjunto de processador para a interrupção. Quando MessageCount é maior que 1, cada mensagem é inicializada com o mesmo conjunto de processadores de destino.
MsiAddress
Recebe o endereço MSI atribuído à interrupção. Programe este valor na capacidade MSI ou MSI-X do dispositivo.
MsiData
Recebe a carga útil de dados MSI atribuída à interrupção. Programe este valor na capacidade MSI ou MSI-X do dispositivo.
Valor de retorno
Se a função tiver sucesso, o valor de retorno é S_OK.
A função devolve E_INVALIDARG quando Index é maior que 65535, quando MessageCount é 0 ou superior a 32, quando Target->Flags especifica uma bandeira indefinida, quando Target->ProcessorCount é 0 ou excede o número de processadores virtuais na partição, quando um processador em Target->Processors não é um índice válido de processador virtual, ou quando WHvVpciInterruptTargetFlagMulticast está definido juntamente com um único processador alvo. No Arm64, a função retorna E_INVALIDARG quando Target->ProcessorCount é maior que 1 ou quando WHvVpciInterruptTargetFlagMulticast está definido, porque o hipervisor direciona cada MSI para um único processador virtual no Arm64.
Remarks
A WHvMapVpciDeviceInterrupt função estabelece um mapeamento para que as interrupções emitidas pelos recursos físicos que suportam o dispositivo atribuído sejam encaminhadas para os processadores virtuais alvo da partição que detém o dispositivo. Depois de criado o mapeamento, programe os valores retornados MsiAddressMsiData e no MSI ou MSI-X capacidade do dispositivo.
Quando o dispositivo foi criado com as interrupções lógicas ativadas, o chamador pode também afirmar a interrupção diretamente ao passar o retorno MsiAddress e MsiData para WHvRequestVpciDeviceInterrupt.
Ao mapear uma interrupção MSI multi-mensagem (MessageCount maior que 1), todas as mensagens são inicializadas com o mesmo conjunto de processadores alvo. Use WHvRetargetVpciDeviceInterrupt After para redirecionar mensagens individuais para um conjunto de processadores diferente. Consulte o alvo atual de uma interrupção mapeada com WHvGetVpciDeviceInterruptTarget, e remova o mapeamento com WHvUnmapVpciDeviceInterrupt.
Requirements
| Requirement | Value |
|---|---|
| Windows mínimo suportado | Windows 10, versão 20H2 (x64); Windows 11, versão 24H2, build 26100.3915 (Arm64) |
| Header | WinHvPlatform.h |
| Biblioteca | WinHvPlatform.lib |
| DLL | WinHvPlatform.dll |
| Arquitetura | x64, ARM64 |