Re: PCI lib for 2.4 //kwds: pci, dma, mapping memory, kernel vs. user-space.

From: Damien Couroussé
Date: Tue Dec 16 2003 - 12:51:25 EST


Hi Martin,

Thanks for your answer.

% 2 pci.h files %
I had a look at example code that comes with libpci.a. Actually, that's what I had done since that's the only way I may do it.

I did not yet understand why I find two differents pci.h files, and why I cannot use one of them (since my compiler can't link with the lib)... Is there a specific way of using the second one, which I did not understand?

I work on RedHat 8, kernel 2.4.18-14
- pci.h No 1 is in /usr/include/pci , linked with /usr/include/linux >>> the one I can use

- No 2 is in /usr/src/linux2.4.18-14/include/linux >>> the one I can't use, but I'd like to.


% dma support %
It should be OK like that, but my driver will have to support dma features... and I don't have available functions to do it, since I may not use pci.h file Number 2.
Do I have any other solution?


% mapping memory %
It seems I have many(?) ways for mapping memory, depending if the driver will be in kernel or user-space:
- I could use 'ioremap', but it seems to be designed for kernel-driver. And that's again the same thing, since I cannot use it. My <asm/io.h> file does not support it. (ugh?) I think I should find it here, as all documentation I found says that.
- I may use mmap too.

% kernel/user-space %
I have to develop a driver for a card designed for data-acquisition. The stream of data will have to be as fast as possible, since the card will have to support high data-rates.
What is the best, do you think, to develop a driver. Should I do it in kernel or user-space? I mean, it seems that kernel accesses cost many CPU resources, whereas in user-space, I could have better performances if kernel accesses are limited...

Damien




Le lundi, 15 déc 2003, à 23:14 Europe/Paris, Peter Chubb a écrit :

"Damien" == Damien Courouss <Damien> writes:

Damien> Hi, Actually, it will be first a user-space driver.

Damien> Maybe I wasn't clear:

The user-space libpci.a has headers in /usr/include/pci/pci.h
Do #include <pci/pci.h> to get at them.
On debian, at least, you need the pciutils-dev package.
Unfortunately, there are no manual pages (yet?)

And *do* look at the example code that comes with libpci.a

pci_resource_start() and so on are kernel functions; you get the same
info in a different way using libpci.a -- Look at the source of lspci
to see what you can do.

(In brief:
struct pci_access *pacc;
struct pci_dev *dev;

pacc = pci_alloc();

pci_init(pacc);
pci_scan_bus(pacc);
for (dev = pacc->devices; dev; dev = dev->next)
{
if (dev->vendor_id == PCI_VENDOR_ID_AAA &&
dev->device_id == PCI_DEVICE_ID_AAA_BBB)
break;
}
if (dev == NULL){
fprintf(stderr, "No AAA BBB device\n");
exit(1);
}

pciconf = xmalloc(sizeof *pciconf);
pciconf->pciconfig.accesstype = PCI_CONFIG;
pciconf->pciconfig.devp = dev;

pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_IRQ);

/*
* Get the first 64-bytes of config space
*/
pci_read_block(dev, 0, config, 64);
)

--
Dr Peter Chubb http://www.gelato.unsw.edu.au peterc AT gelato.unsw.edu.au
The technical we do immediately, the political takes *forever*
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/