bus device driver
Norbert Koch
nkoch at demig.de
Mon Jul 13 14:32:42 UTC 2009
Hello.
I just started to write a device
driver for a multi-function pci card.
This card replaces a number of
independant isa hardware devices.
This pci card contains memory, i/o
and interrupt sources.
I want my device driver to
serve as a bus driver between
the pci driver and the specific
device drivers.
Do I need more than the following (see below)?
Do I have to do any bookkeeping for allocated resources?
/*****************************************/
int mypci_probe (device_t dev)
{
if (pci_get_vendor (dev) == MYVENDOR
&& pci_get_devid (dev) == MYDEVID) {
device_set_desc (dev, "MYPCI bus");
return 0;
};
return ENXIO;
}
static devclass_t mypci_devclass;
/* stolen from ISA/PCI brigde */
static device_method_t mypci_methods[] =
{
/* device */
DEVMETHOD (device_probe, mypci_probe),
DEVMETHOD (device_attach, bus_generic_attach),
DEVMETHOD (device_detach, bus_generic_detach),
/* bus */
DEVMETHOD (bus_print_child, bus_generic_print_child),
DEVMETHOD (bus_alloc_resource, bus_generic_alloc_resource),
DEVMETHOD (bus_release_resource, bus_generic_release_resource),
DEVMETHOD (bus_activate_resource, bus_generic_activate_resource),
DEVMETHOD (bus_deactivate_resource, bus_generic_deactivate_resource),
DEVMETHOD (bus_setup_intr, bus_generic_setup_intr),
DEVMETHOD (bus_teardown_intr, bus_generic_teardown_intr),
{0, 0}
};
static driver_t mypci_driver = {
"mypci",
mypci_methods,
0
};
/*****************************************/
Thank you for any help.
Norbert Koch
More information about the freebsd-hackers
mailing list