Re: PCI Driver ISR configuration.

From: Juan de la Cerda (juandlcc_at_hotmail.com)
Date: 09/28/04


Date: 27 Sep 2004 23:27:27 -0700

Hello David,

Thanks for your answer.

> Is your network card has installable ISR?

Yes it is, I checked the registry (is a RTL81391) and is using
giisr.dll.

> Did you check hardware interrupt register that ISR installed before return
> SysInter?

I am using the generic ISR (GIISR.DLL) and I send (with the
KernelLibIoControl) the address of the card interrupt register and the
mask in order to check if the card generated the interrupt.

> Did you Reset hardware (inclues Mask all interrupt by hardware) before
> loading Installable ISR?

No I didn't, I will try and see what happens, but I'm sure that my
card isn't generating interrupts before I enable the corresponding
bit.
 
> you can not call InterruptDisable(DataIsr.SysIntr) during intialize IST.

So, Is not necessary to call InterruptDisable before the call to
InterruptInitialize?

Any other suggestion will be appreciated.

Thank you very much.

Regards,

Juan.

"David Liao \(MS\)" <davli@online.microsoft.com> wrote in message news:<um4JfzNpEHA.1160@tk2msftngp13.phx.gbl>...
> Is your network card has installable ISR?
> Did you check hardware interrupt register that ISR installed before return
> SysInter?
> Did you Reset hardware (inclues Mask all interrupt by hardware) before
> loading Installable ISR?
>
> you can not call InterruptDisable(DataIsr.SysIntr) during intialize IST.
>
> David Liao
>
> "Juan de la Cerda" <juandlcc@hotmail.com> wrote in message
> news:2a9f8977.0409270206.33515d59@posting.google.com...
> > Hi to all,
> >
> > I've developed my own PCI driver for our own PCI board (Motor
> > Controller), this board is plugged into an Advantech VIA Eden CEPC
> > Board with our own WinCE 4.2 image. The image is standalone and boots
> > with biosloader (with no KITL transport included, only TCP/IP
> > transport and Manual Server).
> >
> > Now we are developing the application (with eVC++ 4.0 SP2) that uses
> > the driver to manage the PCI board, we are debugging the app conecting
> > with the target through TCP/IP transport and Manual Server (Using a
> > telnet session to execute the command line).
> >
> > We have the following problem: sometimes, when I call the IOCTL that
> > installs the ISR for my PCI driver, the TCP/IP conection is lost.
> > Using PCIENUM utility I saw that the problem only happens when the IRQ
> > allocated for my PCI board is the same as the one used by the ethernet
> > board.
> >
> > So, my question is: Is the problen happening due to a wrong ISR
> > instalation? Or a wrong call to LoadIntChainHandler?(Following is my
> > driver source code por IRQ allocation).
> >
> > ///////////////// SNIP
> > //////////////////////////////////////////////////////
> >
> > DDKISRINFO IsrInfo;
> > GIISR_INFO DataIsr
> > HANDLE hIsr;
> > HANDLE hevent;
> > HANDLE hthread;
> >
> > IsrInfo.cbSize = sizeof(IsrInfo);
> >
> > DDKReg_GetIsrInfo(hRegEntry, &IsrInfo);
> >
> > hIsr =
> > LoadIntChainHandler(IsrInfo.szIsrDll,IsrInfo.szIsrHandler,(BYTE)IsrInfo.dwIrq);
> >
> > DataIsr.SysIntr = IsrInfo.dwSysintr;
> >
> > // Stuff loading GIISR the rest of information in DataIsr....
> >
> > KernelLibIoControl(hIsr, IOCTL_GIISR_INFO, &DataIsr, sizeof(DataIsr),
> > NULL, 0, &kioreturned);
> >
> > hevent = CreateEvent(NULL, FALSE, FALSE, NULL);
> >
> > InterruptDisable(DataIsr.SysIntr);
> >
> > InterruptInitialize(DataIsr.SysIntr, hevent, NULL, NULL);
> >
> > hthread = CreateThread(NULL,0,Driver_IST,&hevent,0,NULL);
> >
> > CeSetThreadPriority(DevData.hThread, 0);
> >
> > ////// IST Sorce Code: ////////
> >
> > DWORD WINAPI Driver_IST(LPVOID lpArg)
> > {
> > HANDLE phev;
> > DWORD intreg;
> >
> >
> > phev = *(HANDLE *)lpArg;
> >
> > while(!Global_Abort)
> > {
> > WaitForSingleObject(phev, INFINITE);
> >
> >
> > if(!Global_Abort)
> > {
> > SetEvent(ThDevData->hAppEvent);
> > InterruptDone(ThDevData->DatosIsr.SysIntr);
> > }
> > }
> >
> > return 0;
> > }
> >
> > //////////////// END SNIP
> > //////////////////////////////////////////////
> >
> > Any suggestion will be appreciated.
> >
> > Thanks in advance for your help.
> >
> > Best Regards,
> >
> > Juan.



Relevant Pages

  • Re: GIISR_INFO Struct
    ... Just want to clarify a bit, This particular device has 2 Interrupt ... I think perhaps you are confusing what you have to do in an ISR and an ... register pending/enable mask pair which is what GIISR is set up for. ...
    (microsoft.public.windowsce.platbuilder)
  • Re: Why ISR contains no arguments and return type is void
    ... If an interrupt can be caused by 3 causes, A, B, or C then the condition ... In addition, when you write an ISR, ... Check Ralph Brown's INT list. ... > in a register before returning from your ISR. ...
    (sci.electronics.design)
  • Re: GIISR_INFO Struct
    ... I think perhaps you are confusing what you have to do in an ISR and an ... all of the interrupt servicing should be in the IST. ... register pending/enable mask pair which is what GIISR is set up for. ... Now, if UseMaskReg is FALSE, the port value is masked with the Mask ...
    (microsoft.public.windowsce.platbuilder)
  • Re: Interrupt jitter caused by mouse move
    ... I think I will take the step creating an installable ISR, ... ahead and put it in the ISR. ... the OAL by using an installable interrupt handler. ... So while your IST thread might be the highest priority thread ...
    (microsoft.public.windowsce.platbuilder)
  • Re: Interrupts are not coming sometime in NIC miniport
    ... An ISR should do only what is absolutely necessary, ... This is usually done by reading some interrupt register on the ... The DPC then does all the real work. ... Fill up blob with data from the NICs data buffers. ...
    (microsoft.public.development.device.drivers)

Quantcast