Enabling the PCI Bus Driver
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
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.
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.
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 Usado pelo enumerador de barramento PCI para solicitação de um IRQ para um dispositivo PCI.
Usado na rotina OEMIoControl para implementar IOCTL_HAL_TRANSLATE_IRQ e IOCTL_HAL_REQUEST_SYSINTR.
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.
Mapeia um SYSINTR para seu correspondente IRQ.
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.
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; }
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