Transparent bridges (a. k. a. HUB-to-PCI bridges)?

John-Mark Gurney gurney_j at resnet.uoregon.edu
Wed Nov 24 13:44:43 PST 2004


Charles Swiger wrote this message on Wed, Nov 24, 2004 at 15:29 -0500:
> On Nov 24, 2004, at 1:41 PM, John-Mark Gurney wrote:
> >>True OOP involves encapsulation, polymorphism, and inheritence, and
> >>requires language support which is not really available in pure C.  
> >>That
> >>being said, careful programming in C lets you create several
> >>closely-related structs for different types of "objects" which can 
> >>all be
> >>utilized by a common set of functions.
> >
> >You should read up on KOBJ's which is how device_t's are implemented
> >in FreeBSD...  kobj's are a loop more OOP that you think...
> 
> OK.  I've taken a look at sys/kobj.h and sys/kern/subr_kobj.c, is there 
> something else I should read?

There is also a man page, but it's not much more complete...

> My take on it, for what it is worth, is that KOBJs implement the class 
> versus instance paradigm, have a dynamic runtime & method dispatch 
> rather similar to the implementation of Objective-C or virtual C++ 
> methods.  Yes, this is a lot more object-oriented than what I said 
> about being disciplined using C struct's.  :-)

Correct, kobj implements the class side of things, and then if you
look at device(9), you'll see the instance implementation part of kobj's..

> Things that one still doesn't have is encapsulation in the sense of 
> data hiding; what Java calls protected or private ivar's.  Object 
> memory management for instances via reference counting or GC would also 
> be nice, although I even saw a hint of that in kobj_delete(), as well 
> as a bit of the alloc/init & delete/free seperation.

As part of the device instance API, it provides the abilty to get/set
ivars...

You can look at the various *.m files for various device API calls.
kern/device_if.m is the most common, but then you can also look at
sys/dev/iicbus/*.m for a good example of how useful the kobj API is..

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."


More information about the freebsd-current mailing list