My question was more about general concept of PCI device driver. I didn't see how a driver can't interact with a PCI card with base address space I/O. I just saw that base address are define when the system boot. (Is that right ?) So, if that is right, I can use inb/outb to access I/O PCI space. If not, how can I config a proper base address to avoid confusion ? > > > > > > >I create a pci device which I want to interact with Linux for a user > > > >application. This pci device is a FPGA. I create a kernel module for > > > >communication kernel - user space and now I want to send settings > > > >information to this pci device. > > > > > > > > > > > > > > > Ive been looking for a PCI card with a user-programmable FPGA, tell us more. > > > > > > does it have a hardwired PCI interface (ie already in silicon) > > > if so, it should have a pci-config-space (64 bytes, i think), and > > > could be programmable thru that. > > > > > yes, I can't config it. > oups, i can config it, sorry :) > > The problem is to interact with the device. The FPGA do some calcul > > and I need to change some value (register) of the algo that it > > perform. > > > > Here a partial code : > > > > u32 io_addr; > > #define SLOPE_REGISTER 0x04 > > ... > > pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &io_addr); > > ... > > if(PCI_BASE_ADDRESS_SPACE_IO& io_addr) > > { > > //here I want set a register > > u8 slope = 10; > > outb(slope , io_addr + SLOPE_REGISTER ); //can I do that ?? > > } > > > > > >I need to use (I/O memory) to do that. But I don't how. I can't get > > > >the base address with pci_read_config and after that I am confuse. > > > > > > > yeah - something doesnt add up. Does it appear in /sys ? > > > > > > $> file /sys/bus/pci/devices/0000\:00\:00.0/config > > > /sys/bus/pci/devices/0000:00:00.0/config: data > > > > > > > I > > > >think I can use both function outb or writeb to send information but I > > > >don't know which is better. > > > > > > > > > > > > > > > Read LDD-3, both ch 3(chr-driver), 8-(mem) IIRC. > > > > > > The choice between them is basically ioport or iomem, > > > and I think its somewhat dicated by the processor. > > > x86 has a separate IO-addr-space so inb, outb just work, > > > 68k does not, so those boards must map IO ops into memory, > > > and U must use ioremap to tell the kernel where the IO-space is. > > > > > > But I dont have one of these, and U shouldnt just take my word for it. > > > > > > what kind of board are u using. > > > > > > >outb seem to be Intel specific and writeb need to map I/0 memory with ioremap > > > > > > > > > > > > > > > I think youve got ioremap usage backwards. > > > I have intel board, im using inb,outb, and have no ioremap, > > > and Im getting expected results. > > > > > > >Which method is more standard for a pci device (portable)? > > > > > > > >On 6/22/05, Christophe Lucas <clucas@xxxxxxxxxxxxx> wrote: > > > > > > > > > > > >>Eric Clément (clement.eric@xxxxxxxxx) wrote: > > > >> > > > >> > > > >>>Hi, > > > >>> > > > >>>I know the base address (I/O memory) of my device, but I don't know > > > >>>how to write information to the device. > > > >>> > > > >>>Which fonction shoud I use : > > > >>> > > > >>>outb, writeb or ... ? > > > >>> > > > >>> > > > >>I think you should use outb(); > > > >>You can see how is declared writeb() for x86 : > > > >> > > > >> http://lxr.linux.no/source/include/asm-i386/io.h#L165 > > > >> > > > >>But I think you should give more information to us to be able to help > > > >>you. > > > >> > > > >> - Christophe > > > >> > > > >> > > > >> > > > > > > > >-- > > > >Kernelnewbies: Help each other learn about the Linux kernel. > > > >Archive: http://mail.nl.linux.org/kernelnewbies/ > > > >FAQ: http://kernelnewbies.org/faq/ > > > > > > > > > > > > > > > > > > > > > -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/