diff options
author | cg <cg@FreeBSD.org> | 2000-12-18 01:36:41 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2000-12-18 01:36:41 +0000 |
commit | 2fae4aec24ea4529882b3ec4cda45661ccd48ea8 (patch) | |
tree | e7e32573ed48df98bed54daa386c3520e959e951 /sys/dev/sound/pcm/feeder.h | |
parent | 1fd2c926a884cc824e7da7ee1a51dad72b1dec5b (diff) | |
download | FreeBSD-src-2fae4aec24ea4529882b3ec4cda45661ccd48ea8.zip FreeBSD-src-2fae4aec24ea4529882b3ec4cda45661ccd48ea8.tar.gz |
kobjify.
this gives us several benefits, including:
* easier extensibility- new optional methods can be added to
ac97/mixer/channel classes without having to fixup every driver.
* forward compatibility for drivers, provided no new mandatory methods are
added.
Diffstat (limited to 'sys/dev/sound/pcm/feeder.h')
-rw-r--r-- | sys/dev/sound/pcm/feeder.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/sys/dev/sound/pcm/feeder.h b/sys/dev/sound/pcm/feeder.h index 40f866c..bde1218 100644 --- a/sys/dev/sound/pcm/feeder.h +++ b/sys/dev/sound/pcm/feeder.h @@ -26,17 +26,31 @@ * $FreeBSD$ */ +struct feeder_class { + KOBJ_CLASS_FIELDS; + int align; + struct pcm_feederdesc *desc; + void *data; +}; + void feeder_register(void *p); -pcm_feeder *feeder_get(struct pcm_feederdesc *desc); -pcm_feeder *feeder_getroot(void); -int feeder_set(pcm_feeder *feeder, int what, int value); +struct feeder_class *feeder_getclass(struct pcm_feederdesc *desc); u_int32_t chn_fmtchain(pcm_channel *c, u_int32_t *to); -int chn_addfeeder(pcm_channel *c, pcm_feeder *f); +int chn_addfeeder(pcm_channel *c, struct feeder_class *fc, struct pcm_feederdesc *desc); int chn_removefeeder(pcm_channel *c); pcm_feeder *chn_findfeeder(pcm_channel *c, u_int32_t type); -#define FEEDER_DECLARE(feeder) SYSINIT(feeder, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, feeder_register, &feeder) +#define FEEDER_DECLARE(feeder, palign, pdata) \ +static struct feeder_class feeder ## _class = { \ + name: #feeder, \ + methods: feeder ## _methods, \ + size: sizeof(pcm_feeder), \ + align: palign, \ + desc: feeder ## _desc, \ + data: pdata, \ +}; \ +SYSINIT(feeder, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, feeder_register, &feeder ## _class); #define FEEDER_ROOT 1 #define FEEDER_FMT 2 |