Re: PCI driver

Jiri Slaby
2005-09-14T12:22:33Z

Manu Abraham napsal(a):
> Jiri Slaby wrote:
>
>> Manu Abraham napsal(a):
>>
>>> Jiri Slaby wrote:
>>>
>>>> Manu Abraham napsal(a):
>>>>
>>>>> Now that i have been trying to implement the driver using the new
>>>>> PCI API, i feel a bit lost at the different changes gone into the
>>>>> PCI API. So if someone could give me a brief idea how a minimal PCI
>>>>> probe routine should consist of, that would be quite helpful.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Maybe, you want to read http://lwn.net/Kernel/LDD3/, chapter 12,
>>>> pages 311+.
>>>>
>>>
>>> I have been updating myself from LDD2 to LDD3. What i was wondering
>>> was in what order should i be calling the functions.
>>
>>
>>
>> You won't call anything, kernel does. You only register driver.
>> struct pcitbl {venids, devids}
>>
>> struct driver ... = {probe=a, remove=b, tbl=pcitbl};
>> a() { if device from pcitbl is in the system (or has been added before
>> some little time) this function is called}
>> b() {if the device was removed from system: modules and hotplug: never
>> called; modules: so if modules unload; if both: if the device was
>> removed on the fly, or module unload}
>>
>> module_init() { register_driver(driver)}
>> module_exit() { unregister_driver(driver); }
>>
>
> I was wondering whether pci_enable_device() should come first or
> pci_dev_put() in the probe routine.
pci_dev_put? No, it counts down reference count, so you would loose the
structure. You do NOT do pci_dev_put anymore with pci probing (but some very
very specific cases).
--
Jiri Slaby www.fi.muni.cz/~xslaby
~\-/~ jirislaby@gmail.com ~\-/~
241B347EC88228DE51EE A49C4A73A25004CB2A10