--- src/sys/bus/cam/cam_periph.h 2006/04/30 20:23:19 1.6 +++ src/sys/bus/cam/cam_periph.h 2007/11/17 20:28:46 1.7 @@ -33,15 +33,35 @@ #define _CAM_CAM_PERIPH_H 1 #include -#ifndef _SYS_LINKER_SET_H_ -#include -#endif #ifdef _KERNEL extern struct cam_periph *xpt_periph; -SET_DECLARE(periphdriver_set, struct periph_driver); +extern struct periph_driver **periph_drivers; +void periphdriver_register(void *); + +#include +#define PERIPHDRIVER_DECLARE(name, driver) \ + static int name ## _modevent(module_t mod, int type, void *data) \ + { \ + switch (type) { \ + case MOD_LOAD: \ + periphdriver_register(data); \ + break; \ + case MOD_UNLOAD: \ + kprintf(#name " module unload - not possible for this module type\n"); \ + return EINVAL; \ + } \ + return 0; \ + } \ + static moduledata_t name ## _mod = { \ + #name, \ + name ## _modevent, \ + (void *)&driver \ + }; \ + DECLARE_MODULE(name, name ## _mod, SI_SUB_DRIVERS, SI_ORDER_ANY); \ + MODULE_DEPEND(name, cam, 1, 1, 1) typedef void (periph_init_t)(void); /* * Callback informing the peripheral driver