On Sat, Mar 29, 2008 at 04:35:31PM +0000, Matt Fleming wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > As some of you may know I've been working devfs support for NetBSD as > part of a project for my final year at the University of Leeds. Woot! [snip] > Now, for device driver conversion. I've provided an API that device drivers > can use when they need device nodes, > > int device_register_name(dev_t, device_t, boolean_t, enum devtype, > const char *, ...); You need to add something to indicate if the dev_t is a character or block dev_t. > 'devtype' specifies the type of device which will be used for matching rules. > See sys/sys/conf.h for details. > > int device_unregister_name(dev_t, const char *, ...); > > We maintain a TAILQ of structs which is appended with the register function > and has entries removed with the unregister function. When a new struct is > added to this queue dctl(4) creates a message and places it on an internal > queue which is picked up by devfsd(8). Ok, while I can see the need for an unregister_name(), I think what you really want is device_unregister_all(dev_t, is_block) which zapps everything for that device. Saves snprintf()s in detatch. :-) Actually, if you pass in the device_t, just have device_unregister(device_t) and blow away anything keyed to that device. > Now, an example of how to convert a device driver, > > void > mydriver_attach(struct device *parent, struct device *self, void *aux) > { > int major = cdevsw_lookup_major(&mydriver_cdevsw); > int unit = device_unit(self); > > device_register_name(makedev(major, unit), self, true, > DEV_OTHER, "mydriver%d", unit); > } > > int > mydriver_detach(struct device *self, int flags) > { > int major = cdevsw_lookup_major(&mydriver_cdevsw); > int unit = device_unit(self); > > device_unregister_name(makedev(major, unit), "mydriver%d", unit); > return 0; > } Take care, Bill
Attachment:
pgpxcTMfePs5I.pgp
Description: PGP signature