Compartilhar via


NdisMRegisterInterrupt

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa função configura um mapeamento entre do um driver NIC MiniportISR e MiniportHandleInterrupt funções, já registradas com NdisMRegisterMiniporte o barramento-relativo vetor e nível no qual seu NIC interrupções.

Syntax

NDIS_STATUS NdisMRegisterInterrupt(
  PNDIS_MINIPORT_INTERRUPT Interrupt,
  NDIS_HANDLE MiniportAdapterHandle,
  UINT InterruptVector,
  UINT InterruptLevel,
  BOOLEAN RequestIsr,
  BOOLEAN SharedInterrupt,
  NDIS_INTERRUPT_MODE InterruptMode
);

Parameters

  • Interrupção
    [out] Ponteiro para Caller-allocated memória residente contendo uma opacidade objeto interrupção, que inicializa essa função e para o qual ele retorna um identificador que usa a miniporta em chamadas subseqüentes para o NdisMSynchronizeWithInterrupt função.
  • InterruptVector
    [no] Especifica o barramento-relativo número vetor usado pelo NIC.
  • InterruptLevel
    [no] Ignorado.
  • RequestIsr
    [no] Especifica TRUE se o MiniportISR função deve ser chamado cada tempo interrompe a NIC. Se a NIC pode compartilhar uma interrupção com outros dispositivos no barramento de E/S, este parâmetro deve ser definida como TRUE.
  • SharedInterrupt
    [no] Especifica se outros dispositivos no barramento de E/S podem usar esta linha interrupção TRUE. Se este parâmetro for definido como FALSE e outro dispositivo já foi solicitado o vetor interrupção especificada no Registro, essa função falhará.
  • InterruptMode
    [no] Ignorado.

Return Value

A seguinte tabela mostra os valores de retorno para esta função.

Valor Descrição

NDIS_STATUS_SUCCESS

NDIS o objeto interrupção inicializado e retornou um válido Interrupção identificador, recursos hardware alegado no Registro para o NIC, such as o vetor especificado se o NIC não compartilhar um IRQ e configurar o MiniportISR Ou MiniportDisableInterrupt e associado MiniportHandleInterrupt funções ser chamado quando uma interrupção ocorre conforme solicitado na chamar para essa função.

NDIS_STATUS_RESOURCE_CONFLICT

Tentar solicitar o vetor ou nível no Registro tem falha, possivelmente porque outro driver já referentes a interrupção para seu dispositivo. Essa função registra um erro se isso ocorrer.

NDIS_STATUS_RESOURCES

NDIS não pôde alocar memória suficiente para reclamar recursos o Registro para a NIC.

NDIS_STATUS_FAILURE

A tentativa inicializar o objeto interrupção falha, possivelmente devido a outro driver é anterior reclamar sobre a InterruptVector Ou InterruptLevel no Registro.

Remarks

Um driver NIC deve chamar esta função do seu MiniportInitialize função se seu NIC gera interrupções. Interrompe o driver de uma NIC que não gera chamadas a NdisMInitializeTimer e NdisMSetPeriodicTimer funções instead of esta função.

MiniportInitialize deve chamar NdisMSetAttributes Ou NdisMSetAttributesEx Antes chamado essa função.

MiniportInitialize Obtém o barramento-relativo valores passados para essa função a partir de Registro ou por chamado um barramento - tipo - específico NDISXXX função configuração.

Se seu chamar para esta função falhar, MiniportInitialize Libera todos os recursos que ele já alocado para seu NIC e, em seguida, inicialização falhar para que NIC.

Essa função distingue entre o InterruptVector e o InterruptLevel. O InterruptVector é a linha interrupção que declara o cartão para interrupção de sistema e o InterruptLevel é ignorado em Windows Embedded CE. Geralmente, esses valores podem ser considerados igual a menos que o gravador driver sabe que eles são diferentes para um determinado NIC ou a menos que a miniporta controla múltiplo placas de rede que recursos compartilhar o atual plataforma.

Se um valor SYSINTR não é especificado no Registro, NDIS irá usar o IOCTL_HAL_REQUEST_SYSINTR IOCTL para converter o InterruptVector valor que é passado para NDISMRegisterInterrupt Em um valor SYSINTR. Se um valor SYSINTR for especificado no Registro, NDIS irá ignorar o InterruptLevel parâmetro e o uso de valor do Registro SYSINTR no seu local. Para obter mais informações sobre as interrupções sistema, consulte Interrupções.

Se seu NIC pode compartilhar um IRQ com outros dispositivos no barramento de E/S, o chamador desta função deve definir ambos o SharedInterrupt e RequestIsr Parâmetros para TRUE. Em CE, o MiniportISR irá executar como um ist. Como resultado, ele não pode ser parte de um encadear de ISRs anexado para uma interrupção compartilhada. Para compartilhar as interrupções requer usando um ISR. instalável Para obter informações adicionais, consulte ISRs Instaláveis e drivers de dispositivo. NDIS CE oferece suporte a este modelo. O seguinte configurações Registro para um adaptador serão usadas pelo NDIS para configurar seus interrupções compartilhadas:

  • "IsrDll" = "< dllfilename >"   
    Especifica o nome da DLL que contém o ISR compartilhado
  • "IsrHandler" = "< funcname >"
    Especifica o nome da função de ISR

Além disso, se o < dllfilename > é "giisr.dll", o genérico compartilhada manipulador ISR e a seguinte configurações Registro podem ser utilizadas para definir as configurações para o manipulador:

  • "PortIsIO" = dword
    Especifica se a porta seja ler é espaço de E/S ou memória
  • "PortOffset" = dword
    Especifica o deslocamento porta do IOBase ou MemBase
  • "PortSize" = dword
    Especifica o tamanho byte da porta (1, 2 ou 4)
  • "PortMask" = dword
    Um máscara de bits especificando quais bits são de interesse na porta
  • "UseMaskReg" = dword
    Definido como 1 para habilitar o uso de um registrar máscara
  •    "MaskOffset" = dword
    Offset do IOBase ou MemBase para registrar a máscara

Quando as interrupções estão habilitado no do NIC, um driver MiniportISR função pode ser chamado a qualquer momento seguinte um bem-sucedido chamar para esta função, mesmo durante inicialização. Tal de um driver MiniportInitialize função não deve chamar essa função até que ele configurou todas as estado que o driver precisa identificador uma interrupção. O MiniportHandleInterrupt função não é enfileirado para execução subseqüente se do o driver MiniportInitialize função no momento está sendo executado e uma interrupção ocorre.

Para a maioria dos drivers de placas de rede que não compartilhar um IRQ, MiniportISR Raramente é executado, exceto, possivelmente, durante inicialização driver. Define tal uma miniporta RequestIsr Para FALSE quando MiniportInitialize Chamadas essa função e tal um driver tiver uma MiniportDisableInterrupt função e, possivelmente, um MiniportEnableInterrupt função. A biblioteca NDIS, em seguida, chama do o driver MiniportDisableInterrupt função quando ocorre uma interrupção no NIC e do o driver MiniportHandleInterrupt função não a maioria do processamento E/S para a interrupção. Antes MiniportHandleInterrupt controle retorna, ambos chamadas NDIS MiniportEnableInterrupt Ou MiniportHandleInterrupt Reativa interrupções em NIC si mesmo.

Se uma miniporta com um ISR define RequestIsr Para TRUE quando ela chama essa função ou não, NDIS confirma a interrupção para o sistema operacional para que as interrupções de outros dispositivos não são bloqueadas.

Se define uma miniporta RequestIsr Para TRUE quando ela chama essa função, ele deve descartar a interrupção no seu NIC por configuração o estado do NIC para que ele declara no longer a interrupção. Interrupções podem permanecer habilitado na NIC seguinte a dismissal da interrupção ou eles podem ser desabilitados, depending on o design do driver.

Quando uma miniporta suporta full-duplex envia e recebe, NDIS serializa chamadas para sua MiniportISR Ou MiniportDisableInterrupt função de envia. NDIS separadamente serializa chamadas para sua MiniportISR Ou MiniportDisableInterrupt função para todas as outras operações que podem causar uma interrupção. Chamadas para o MiniportReset função são tanto sincronizado síncrono; NDIS impede que todos os outros caminhos codificar em uma miniporta full-duplex sendo inserido enquanto um dispositivo - operação redefinir está ocorrendo.

Se uma miniporta não suporte full-duplex envia e recebe, NDIS serializa todas as chamadas para o MiniportISR ou o MiniportDisableInterrupt função de qualquer NIC que controla a miniporta. Embora tal de um driver MiniportISR Ou MiniportDisableInterrupt função é processamento uma interrupção NIC particular, não é chamado para identificador uma interrupção segunda a partir de NIC mesmo em outro processador em uma plataforma multiprocessador simétrico (SMP).

No entanto, o ISR ou MiniportDisableInterrupt função de qualquer driver que controla more than um dispositivo pode executar simultaneamente em plataformas SMP se dois dispositivos do driver que acontecer para gerar interrupções quase simultaneamente e interrupções habilitado no NIC.

Se for possível que uma interrupção pode ocorrer enquanto outra função driver está acessando recursos que também podem ser acessados a partir MiniportISR Ou MiniportDisableInterrupt, a outra função deve chamar NdisMSynchronizeWithInterrupt Para sincronizar acessar aos recursos compartilhados.

Requirements

Header ndis.h
Library ndis.dll
Windows Embedded CE Windows CE .NET 4.0 and later

See Also

Reference

MiniportDisableInterrupt
MiniportEnableInterrupt
MiniportHalt
MiniportHandleInterrupt
MiniportInitialize
MiniportISR
MiniportReset
NdisMInitializeTimer
NdisMSetAttributes
NdisMSetAttributesEx
NdisMSetPeriodicTimer
NdisMSynchronizeWithInterrupt

Concepts

Installable ISRs and Device Drivers