misc questions about the device&driver arch

william wallace avalonwallace at gmail.com
Sat May 20 19:42:39 PDT 2006


still a question about newbus 's BUS interface :
usage of  DEVICE_IDENTIFY AND BUS_ADD_CHILD
I know these bus interface func r called accessor functions ,that call
the appropriate function by checking the parameter.just like the
polymorphism technic  in OOP . that's really a magic :)
 my first  QUESTION is  what if the calling device do not realize the
corresponding interface ? taking bus_add_child interface as example.
only a  few device-drivers have implement it ,but more r called for it
.what will happen when BUS_ADD_CHILD(device_t bus, int order, const
char *name, int unit) 's bus do not implement it ?

my second is :a driver's DEVICE_IDENTIFY  always call its device 's
parent's BUS_ADD_CHILD ,what is the semantic of them:)
thank u

the drivers who have registered  the bus_add_child (not too many)
Acpi.c (dev\acpica):    DEVMETHOD(bus_add_child,		acpi_add_child),
Atkbdc_isa.c (isa):	DEVMETHOD(bus_add_child,	atkbdc_add_child),
Canbus.c (pc98\pc98):	DEVMETHOD(bus_add_child,	canbus_add_child),
Firewire.c (dev\firewire):	DEVMETHOD(bus_add_child,	firewire_add_child),
Fwohci_pci.c (dev\firewire):	DEVMETHOD(bus_add_child,	fwohci_pci_add_child),
Iicbus.c (dev\iicbus):        DEVMETHOD(bus_add_child,	iicbus_add_child),
Isa_common.c (isa):	DEVMETHOD(bus_add_child,	isa_add_child),
Legacy.c (amd64\amd64):	DEVMETHOD(bus_add_child,	legacy_add_child),
Legacy.c (i386\i386):	DEVMETHOD(bus_add_child,	legacy_add_child),
Nexus.c (amd64\amd64):	DEVMETHOD(bus_add_child,	nexus_add_child),
Nexus.c (i386\i386):	DEVMETHOD(bus_add_child,	nexus_add_child),
Nexus.c (ia64\ia64):	DEVMETHOD(bus_add_child,	nexus_add_child),
Ppbconf.c (dev\ppbus):	DEVMETHOD(bus_add_child,	ppbus_add_child),
Smbus.c (dev\smbus):        DEVMETHOD(bus_add_child,	smbus_add_child),


On 5/20/06, Warner Losh <imp at bsdimp.com> wrote:
> From: "william wallace" <avalonwallace at gmail.com>
> Subject: Re: misc questions about the device&driver arch
> Date: Sat, 20 May 2006 13:39:08 +0800
>
> > comparing the method array of pci_pci and cardbusbridge:
> > what losts in pci bridge but exist in cardbusbridge:
> > 1 card interface
> > 2 power interface
> > 3 some functions :
> >   3ain bus interface
> >       (bus_driver_added,              cbb_driver_added),
> >       (bus_child_detached,            cbb_child_detached),
> >       (bus_child_present,             cbb_child_present),
> >  3b in device interface
> >       (device_detach,         cbb_detach),
> > what exists in pci bridge but losts in cardbusbridge:
> >  (pcib_route_interrupt,       pcib_route_interrupt),
> >
> > not only that ,functions r very different eventhough they realize the
> > same interface function template
> > wooo,so long to go to hotplug pci
>
> Yes.  The hardest part would be to create a pci hot swap bridge
> driver.  The interface for them tend to be underdocumented.
>
> The bus_child_present is important for detaching.
>
> Also, I think that we may need to start implementing a quiess method
> to tell the drivers they are about to be removed.   For hot plug PCI,
> the model is that you quess the driver, the os tells you somehow it is
> safe, and then you remove the card.  The details vary (some system are
> all in software, while others have a complicated interlock and LEDs),
> but they are similar.  Cardbus is harder in some ways because cards
> leave unannounced (in fact, there's not a good way to announce a card
> leaving, but there should be).
>
> Warner
>
> > On 5/20/06, Warner Losh <imp at bsdimp.com> wrote:
> >
> > > Busses create devices to represent hardware in the system.  The bus
> > > then causes these devices to be probed and attached.  This latter
> > > usage is for those cases.  As drivers are loaded these devices are
> > > offered to the new (and old) drivers in the system.
> > >
> > > FreeBSD inherently dynamic in its device system.  The hardest part of
> > > adding hotplug support is programming the bridge.  Adding new devices
> > > to the tree is easy, but knowing when to add them is hard since you
> > > have to write a bridge driver...
> > >
> > > Warner
> > >
> >
> >
> > --
> > we who r about to die,salute u!
> >
> >
>


-- 
we who r about to die,salute u!


More information about the freebsd-hackers mailing list