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>