PERFORCE change 106148 for review
Hans Petter Selasky
hselasky at c2i.net
Fri Sep 15 08:10:09 PDT 2006
On Friday 15 September 2006 16:39, you wrote:
> On Friday 15 September 2006 10:17, Hans Petter Selasky wrote:
> > http://perforce.freebsd.org/chv.cgi?CH=106148
> >
> > Change 106148 by hselasky at hselasky_mini_itx on 2006/09/15 14:17:12
> >
> > Initialize all driver_t structures by record. Bugfix: Some of the
> > modem drivers did not use the "ucom_devclass". Make sure that all
> > modem drivers use this devclass.
>
> That doesn't actually matter. Also, no other drivers use this style to
> initialize their driver_t. If you really wanted to do a change, you should
> change them to use DEFINE_CLASS macros to define a KOBJ class instead.
Ok. Will consider that next time.
> BTW, why the devclass doesn't matter: the devclass_t is just a pointer to
> a device class. The device classes are based on the driver name, so if you
> add a new driver with the name "foo", it will look up the device class by
> name ("foo"), creating one if it doesn't exist.
My implementation for NetBSD works like this:
static u_int8_t
devclass_create(devclass_t *dc_pp)
{
if (dc_pp == NULL) {
return 1;
}
if (dc_pp[0] == NULL) {
dc_pp[0] = malloc(sizeof(**(dc_pp)),
M_DEVBUF, M_WAITOK|M_ZERO);
if (dc_pp[0] == NULL) {
return 1;
}
}
return 0;
}
static const struct bsd_module_data *
devclass_find_create(const char *classname)
{
const struct bsd_module_data *mod;
for(mod = &bsd_module_data_start[0];
mod < &bsd_module_data_end[0];
mod++)
{
if(mod->mod_name &&
(strcmp(classname, mod->mod_name) == 0))
{
if(devclass_create(mod->devclass_pp))
{
continue;
}
return mod;
}
}
return NULL;
}
> It then saves a pointer to
> that device class object in the devclass_t pointer specified in
> DRIVER_MODULE(). So, by making them all share the same devclass_t, they are
> all just going to overwrite the same pointer when the driver module loads.
No, wrong. The devclass_t pointer is not overwritten if it is already
initialized!
> To be honest, most drivers don't even use the devclass pointer, and I'd
> actually like to axe it and make the few drivers that do care use
> 'devclass_find("foo")' when they need the devclass pointer instead.
I need the devclass to get unique unit numbers.
--HPS
More information about the p4-projects
mailing list