I'm new to FreeBSD, but an experienced kernel guy. I'm workgin with
4.1.1 on IA32 and need help understanding the ways of your world. :-)
I'd like my project to look like a "normal" driver and use supported
interfaces, but I'll patch the core code if I need to.
I have a need to walk the PCI bus, gleaning PCI IDs and other data.
(Yes, I know a dozen reasons why to NOT do that.) What I *almost*
need is the loop in pci_ioctl that walks pci_dev[]. The catch here is
that this is a private data structure (static, lots of dependencies on
private headers not in <sys/...>, etc) and therefore unavailable. I
considered calling the ioctl code myself from withing my driver, but
that seems too weird. I thought about shipping the data to myself by
way of user-space (daemon does an ioctl ('pciconf -l'ish) to PCI driver,
turns around and hands data to me on an ioctl) but that sounds like an
application to be punished.
Is there a "normal" way for a conforming driver to walk the busses,
pluck out bus number, slot number, device id, subsystem id, and all that
traditional stuff, or do I just need to carve up pci.c and build my own
interface to do it?
Also, I have a question on loadable character devices. Is there a way
to avoid the hard-coded major numbers in the cdevsw[] entry that's
passed? It seems like make_dev() should be able to roam cdevsw, find
an empty slot, and create the dev nodes for me. I'm envisioning a very
dynamic system with lots of modules (enough that we really don't want to
allocate them with a human involved) being popped in and out and would
like to not handle the major number management and inevitable conflicts
on my own.
How is this handled for, say, third-party drivers?
Thanx for any help offered.
RJL
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message