Compartilhar via


Enabling the PCI Bus Driver

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

O driver PCI Bus está em % _WINCEROOT%\Public\Common\Oak\Drivers\PCIbus. Ele é responsável por enumerando o barramento PCI e carregando drivers dispositivo para todos os dispositivos PCI-localiza e reconhece sobre o barramento.

Para suporte driver carregando, descarregando driver e gerenciamento de energia barramento PCI, o barramento PCI driver permanece carregado. Isso permite dinâmico o carregamento dos drivers dispositivo para dispositivos PCI. Não é necessário drivers individuais dispositivo enumerar seu barramento sozinhos.

Codificar todos enumeração barramento PCI está contida em um DLL e todos os drivers dispositivo podem reutilizar essa codificar.

Observação

Para o CEPC ou qualquer plataforma hardware que usa um BIOS para configurar o barramento PCI, driver de barramento PCI não precisa configurar o barramento.

Observação

Driver de barramento PCI enumera ou lê o estado do barramento e fornece este informações para o Instância chave para um dispositivo e o driver e o Gerenciador de Recursos E/S.

Observação

Você pode ignorar a etapa configuração por configuração NoConfig igual a 1. Esse valor é uma subchave de RootKey\PCI.

Observação

Se você precisar configurar, defina NoConfig igual a 0 (zero), ou removê-lo.

A seguinte etapas apresentação você como para habilitar o driver barramento PCI e o associado rotinas serviço instalável interrupção (ISRs).

Para habilitar o driver barramento PCI

  1. Modificar a codificar carregador e inicialização inicializar.

    Normalmente, a codificar carregador e inicialização inicializar enumera o barramento PCI inteiro. Modificar essa funcionalidade de modo que a codificar carregador e inicialização inicializar enumera apenas a depuração dispositivos que residir no barramento PCI. Isso é geralmente a depuração Ethernet adaptador. Série é normalmente um herdado porta ISA.

    Certifique-se de que o enumerador manipula a maiúsculas e minúsculas onde o dispositivo depuração está atrás de um PCI para ponte PCI ou PCI para PCI pontes.

    A hospedar a ponte PCI é configurada com as janelas possíveis maiores, enquanto qualquer PCI para PCI pontes entre a hospedar e a depuração Ethernet dispositivo será configurado com janelas que são apenas tão grande quanto a depuração dispositivos.

    Esta janela começa no início do hospedar a janela ponte PCI. Isso permite que o driver barramento PCI para expansão esta janela para acomodar dispositivos adicionais.

    Se não houver depuração more than um dispositivo que compartilha a mesma tipo de recurso, memória ou espaço E/S, seus recursos devem ser posicionado próximo para each other, ou como fechar como possível permitido pelo alinhamento natural.

    Os dispositivos e pontes Other Than a depuração dispositivos devem ser desativados por configuração os bits menos significativos três de registrar o comando igual a zero. No Power-on, esse é o estado usar como padrão.

    O Registro precisa ser preenchido com informações sobre a depuração dispositivo. Isso é necessário para o enumerador barramento PCI para reconhecer que o dispositivo já está configurado e está usando recursos.

    O PCI_DEV_INFO estrutura é preenchida com informações sobre o dispositivo. Este informações inclui barramento, dispositivo e função números, memória, E/S de base endereços e assim por diante, quando a depuração dispositivo está configurado.

    Para obter um exemplo, consulte % _WINCEROOT%\Public\Common\OAK\Drivers\PCIBus\PCIcfg.c. A estrutura é gravada a chave Registro HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Instance\KITL Neste exemplo, com um chamar para IOCTL_HAL_INITREGISTRY pelo kernel.

  2. Configure a hospedar a ponte PCI.

    Normalmente, o carregador inicializar e codificar inicialização têm já corretamente configurado a hospedar a ponte PCI. A janela PCI deve coincidir com os recursos descritos o Registro sob o principal PCI chave.

  3. Implementar funções OAL.

    Implementar as seguinte funções em seu OAL. Esses são declarados no %_WINCEROOT%\Platform\ <Plataforma de hardware≫ \Inc\Oalintr.h.

    Função Descrição

    OEMGetInterrupt

    Usado pelo enumerador de barramento PCI para solicitação de um IRQ para um dispositivo PCI.

    OEMRequestSysIntr

    Usado na rotina OEMIoControl para implementar IOCTL_HAL_TRANSLATE_IRQ e IOCTL_HAL_REQUEST_SYSINTR.

    OEMTranslateIrq

    Usado pelo ISR principal para converter um IRQ não compartilhável em um SYSINTR ou o último compartilhada IRQ que não é coberta por um ISR. instalável

    Este é um direcionar um-para-um mapeamento de IRQ para SYSINTR.

    OEMTranslateSysIntr

    Mapeia um SYSINTR para seu correspondente IRQ.

  4. Atualização OEMIoControl.

    Atualização OEMIoControl Para incluir IOCTL_HAL_TRANSLATE_IRQ, IOCTL_HAL_REQUEST_SYSINTR, e IOCTL_HAL_REQUEST_IRQ.

    Consulte %_WINCEROOT%\Platform\< plataforma de hardware >\Src\Kernel\OAL e %_WINCEROOT%\Platform\< plataforma de hardware >\Src\Inc para implementações exemplo.

  5. Atualize a rotina ISR OAL principal.

    Chame o encadear de interrupções instaladas pela primeira vez para ver se algo alega a interrupção. Se nada acontecer, executar o ação padrão do convertendo o IRQ em um SYSINTR e, em seguida, retornar. Você pode ligeiramente otimizar esse por chamado NKCallIntChain Somente em IRQs para o qual instaláveis ISRs são permitidos.

    Consulte %_WINCEROOT%\Platform\Common\Src\X86\Common\Intr\fwpc.c para uma implementação exemplo.

    Essa implementação também é mostrada na exemplo de código abaixo.

    // Call interrupt chain to see if any installed ISRs handle this interrupt
    nSysIntr = NKCallIntChain(nIRQ);
    
    // IRQ not claimed by installed ISR; translate into SYSINTR
    if (nSysIntr == SYSINTR_CHAIN) {
        nSysIntr = OEMTranslateIrq(nIRQ);
    }
    
    // If we have found a valid interrupt, disable it and return SYSINTR
    if (nSysIntr != -1) {
        OEMInterruptDisable(nSysIntr);
        return nSysIntr;
    } else {
        return SYSINTR_NOP;
    }
    
  6. Atualizar Platform.reg e Platform.bib.

    O MemBase, MemLen, IoBase e IoLen Valores sob a PCI chave indicar as janelas barramento PCI usadas pelo sistema. Esses são lógicos, físico, barramento PCI-endereços relativo. Esses endereços não são traduzidos.

    Adicionar PCIbus.dll Platform.bib e adicionar o seguinte para Platform.reg.

    Os valores para MemBase, MemLen, IoBase, e IoLen São valores exemplo e não são esperado ao trabalho com cada plataforma hardware.

    Quando NoConfig é definido como 1, o MemBase, MemLen, IoBase, e IoLen Valores não são usados.

    [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI]
        "Dll"="PCIbus.dll"
        "Order"=dword:20
        "Flags"=dword:1
        "NoConfig"=dword:0
        "MemBase"=dword:40000000
        "MemLen"=dword:20000000
        "IoBase"=dword:00800000
        "IoLen"=dword:00800000
    

See Also

Other Resources

PCI Bus Driver