Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Jul 2009 14:05:15 +0000
From:      Norbert Koch <nkoch@demig.de>
To:        freebsd-hackers@freebsd.org
Subject:   bus device driver
Message-ID:  <4A5B3F1B.3040207@demig.de>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A5B3F1B.3040207>