Steven Kauffmann wrote:
> On Oct 31, 2007 4:42 PM, Wolfgang Grandegger <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
> 
> 
> 
>     >
>     > Hi
>     >
>     > I'm writing a RTDM driver that works with a PCI FPGA card. This card
>     > generates an interrupt when its calculation is done. To deal with
>     interrupts
>     > I have to know the interrupt line number. I found this in Linux device
>     > drivers:
>     >
>     > result = pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &my_irq);
> 
>     You should use "dev->irq". There is no need to read that PCI
>     configuration register (have a look to the PCI drivers in drivers/net").
> 
> 
> Ok, dev->irq gives number 22 and interrupt is working.
> 
> 
>     >
>     > The result is 10, but the result of lspci -v is:
>     >
>     > 01:01.0 Bridge: Teradyne Inc Unknown device fa56
>     >         Subsystem: Unknown device 0004:0299
>     >         Flags: medium devsel, IRQ 22
>     >         Memory at fc000000 (32-bit, non-prefetchable) [size=32M]
>     >
>     > So the interrupt line number is now 22. If I use this interrupt line
>     number
>     > in the function rtdm_irq_request, than the interrupt handler is
>     working.
>     > When I use the interrupt line number received from the
>     read_config_byte
>     > function nothing happens.
>     > In linux device drivers they write that the value of
>     PCI_INTERRUPT_LINE is
>     > guaranteed to be the right one, but why is it not working?
>     >
>     > The intention of the driver is that an user space application
>     writes some
>     > data to the PCI card, the card does something with it. The user space
>     > application have to wait until an interrupt occures, than it reads
>     the
>     > result from the PCI card. How can the driver informs the user space
>     > application that an interrupt occurred?
> 
>     Even if it is not needed by the PCI card, the IRQ vector is normally
>     written to the card. What does the following command for your card
>     show:
> 
>      $ od -t x4 /proc/bus/pci/01/08.0
> 
> 
> The last number should be 01.0 instead of 08.0 I think or am I wrong?

You are right, of course.

> lspci give this result:
> 
>  lspci
> 
> 01:01.0 Bridge: Teradyne Inc Unknown device fa56
> 01:08.0 Ethernet controller: Intel Corporation 82562EZ 10/100 Ethernet
> Controller (rev 02)
> 
>   od -t x4 /proc/bus/pci/01/01.0
> 0000000 fa561316 02000102 06800000 00000000
> 0000020 fc000000 00000000 00000000 00000000
> 0000040 00000000 00000000 00000000 02990004
> 0000060 00000000 00000000 00000000 0000010a
                                           ^^

The interrupt line written to the device is 10 and therefore wrong.
Don't know why, but you do not need it anyhow.

> 0000100 00000000 00000000 00000000 00000000
> *
> 0000400
> 
> Is there not something like a signal I can set in the interrupt routine
> of the driver. The user space application have to wait its execution
> until the signal is set?

I'm not sure if I understand your question. You can send an asynchronous
signal from the driver to a user space application. It's documented in
the Linux devic drivers book, IIRC.

Wolfgang.

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to