Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Dec 2007 10:10:57 -0800
From:      Marcel Moolenaar <marcelm@juniper.net>
To:        embedded@freebsd.org
Subject:   ocpbus(4)
Message-ID:  <B56F8F3C-7872-47B9-8154-1C08F5BEEA3D@juniper.net>

next in thread | raw e-mail | index | archive | help
All,

As part of the PowerPC e500 port we created an ocpbus
(On-Chip Peripheral bus), with devices likes uart(4).
This, of course, is perfectly normal. In fact, it's so
normal that I wondered why we don't have a single
abstract bus already.

What I'm thinking about is a handshake between bus
driver and device drivers that makes it possible for
us to create a single (abstract) bus attachment per
driver, usable whenever that particular driver is
used in an embedded environment.

The main part of the handshake seems to be the means
for a driver to probe/match the hardware. In our
implementation of ocpbus(4), we use an IVAR for the
device type, as in:

         parent = device_get_parent(dev);
         error = BUS_READ_IVAR(parent, dev, OCPBUS_IVAR_DEVTYPE,  
&devtype);
         if (error)
                 return (error);
         if (devtype != OCPBUS_DEVTYPE_PCIB)
                 return (ENXIO);

Since we only have 1 PCI-host controller driver to
worry about, this is perfectly fine. However, if we
want to generalize, then we probably need to extend
the handshake to support different classes. Take
for example an USB host controller. With EHCI, there's
always at least 1 companion host controller (either
OHCI or UHCI). Thus, checking if OCPBUS_DEVTYPE equals
OCPBUS_DEVTYPE_USB (or something along those lines) is
not enough. We need to know if it's an EHCI, OHCI or
UHCI host controller.

Anyway...

Q1: Do people think it's worthwhile to pursue a generic
     ocpbus(4) definition?
Q2: Is there a better handshake possible than IVARs?
Q3: For probing, would DEVTYPE and DEVCLASS suffice or
     do we need something more or something else?
Q4: What is minimally needed if we want to re-implement
     existing embedded busses using ocpbus(4)?
Q5: Thoughts?
Q6: Suggestions?

Thanks,

-- 
Marcel Moolenaar
marcelm@juniper.net






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B56F8F3C-7872-47B9-8154-1C08F5BEEA3D>