> Ok, let me see how many things I still have wrong: > on init I need to call pci_register_module? ATM I am calling > pci_module_init. For exit I am calling pci_unregister_driver. pci_module_init is the same thing with some additional bits so it does the right things on modular load thats fine > In the init func I am calling pci_enable_device, then pci_resource_start > (to get the IO port base addr) and finally pci_request_regions. What you > are saying is that I don't need pci_request_regions. You don't need it but its fine to do it. > Now, all of this is before I add interrupt handling, DMA, etc... > Is there any doco on this that is consistent? The skeleton pci network driver may actuall be one of the cleanest references to all of this Basically pci_module_init says "I want know about this type of card" It calls you when one is found (hotplug, cardbus, boot whatever) pci_enable_device allocates resources and enables it (turns on IO/MEM bits etc) pci_resource() macros read the PCI bar registers portably pcidev->irq is the IRQ line If you bus master you can also use pci_set_master(dev) Turns on the PCI master bits Does any platform workarounds And if it does MWI you can do pci_set_mwi(dev)