[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    Re: PCI device loadable module
From:       Stefan Esser <se () FreeBSD ! ORG>
Date:       1997-09-29 21:50:03
[Download RAW message or body]

On Sep 29, "Ron G. Minnich" <rminnich@Sarnoff.COM> wrote:
> maybe this is all clear on 3.0, but i am on 2.2.1. 

Hmm, I added PCI LKM support to the then 2.2-current
in January 1997,  but it has been temporarily disabled 
there, when I replaced the PCI code by a total rewrite ...

Since I expected some data structures to change again, 
I did not move these changes into the -stable tree, yet.

You want revision 1.64 of /sys/pci/pci.c and revision 
1.8 of /sys/pci/pcibus.h, which should just fit into a 
2.2.1 source tree. Let me know, if you have any trouble 
with them!

> Here's the question: I have a loadable module for a device. How do I 
> arrange for the probe() to be called? As i understand it on fbsd this 
> happens at pci_configure time, which is done at boot time. But my driver 
> is not in at that point, obviously: so what's the right thing to do? 

You call pci_register_lkm(&xxx_device). The parameter is 
the address of the struct pci_device that is put into the 
DATA_SET in case of a compiled in driver ...

> pci_configure says it can be called more than once.  So, should my load
> entry point call pci_configure()? what's the right way here? There are no 
> examples in the lkm's that I can find that point the way. 

The following is from a message I sent to the -current list
on January 22, 1997:

% From se@freebsd.org Wed Jan 22 05:18:09 1997
% Subject: PCI LKM support added to -current
% 
% On Jan 21, se@freefall.freebsd.org (Stefan Esser) wrote:
% > se          97/01/21 15:41:44
% >
% >   Modified:    sys/pci   pcibus.h
% >   Log:
% >   Add PCI LKM support:
% >   The new function pci_register_lkm (struct pci_device *dvp) appends the
% >   driver to the list of known PCI drivers, and initiates a PCI bus rescan.
% 
% This completes my changes to add PCI LKM support to FreeBSD-current.
% 
% Some code has to be called from /etc/rc, if PCI LKMs are to be modloaded
% automatically as part of going multi-user.
% 
% I'm suggesting something as follows (to be called from rc.d):
% 
% *** /dev/null   Tue Dec 31 15:02:04 1996
% --- load-pci-lkm.sh     Tue Dec 31 14:25:31 1996
% ***************
% *** 0 ****
% --- 1,12 ----
% + #!/bin/sh
% + for dev in `pciconf -l |cut -f1`
% + do
% +     if pciconf -a $dev | grep -q "not attached"
% +     then
% +       DevVendorID=`pciconf -r $dev 0`
% +       LKM=`grep $DevVendorID /etc/pcidevices | cut -f 2`
% +       LKMfile=/lkm/pci/$LKM.o
% +       echo "$dev Loading $LKMfile for DevVendorID $DevVendorID"
% +       modload $LKMfile
% +     fi
% + done
% 
% The file /etc/pcidevices will contain lines with the PCI vendor and device
% ID, and an associated driver object file:
% 
% 0x802910ec      if_ed
% 
% 
% In order to attach a PCI LKM, just call pci_register_lkm with the address
% of a struct pci_device (which is a parameter to the DATA_SET macro in the
% non-LKM case). On return from pci_register_lkm(), all devices that have
% no driver attached, will have been offered to the new device's probe()
% function, and will have been attached, if the probe succeeded.

Regards, STefan

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic