Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/bus.h
Show First 20 Lines • Show All 794 Lines • ▼ Show 20 Lines | struct driver_module_data { | ||||
int (*dmd_chainevh)(struct module *, int, void *); | int (*dmd_chainevh)(struct module *, int, void *); | ||||
void *dmd_chainarg; | void *dmd_chainarg; | ||||
const char *dmd_busname; | const char *dmd_busname; | ||||
kobj_class_t dmd_driver; | kobj_class_t dmd_driver; | ||||
devclass_t *dmd_devclass; | devclass_t *dmd_devclass; | ||||
int dmd_pass; | int dmd_pass; | ||||
}; | }; | ||||
#define _DRIVER_MODULE_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, NAME, ...) \ | #define EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, evh, arg, \ | ||||
NAME | order, pass) \ | ||||
#define _EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, devclass, \ | |||||
evh, arg, order, pass) \ | |||||
\ | \ | ||||
static struct driver_module_data name##_##busname##_driver_mod = { \ | static struct driver_module_data name##_##busname##_driver_mod = { \ | ||||
evh, arg, \ | evh, arg, \ | ||||
#busname, \ | #busname, \ | ||||
(kobj_class_t) &driver, \ | (kobj_class_t) &driver, \ | ||||
devclass, \ | NULL, \ | ||||
pass \ | pass \ | ||||
}; \ | }; \ | ||||
\ | \ | ||||
static moduledata_t name##_##busname##_mod = { \ | static moduledata_t name##_##busname##_mod = { \ | ||||
#busname "/" #name, \ | #busname "/" #name, \ | ||||
driver_module_handler, \ | driver_module_handler, \ | ||||
&name##_##busname##_driver_mod \ | &name##_##busname##_driver_mod \ | ||||
}; \ | }; \ | ||||
DECLARE_MODULE(name##_##busname, name##_##busname##_mod, \ | DECLARE_MODULE(name##_##busname, name##_##busname##_mod, \ | ||||
SI_SUB_DRIVERS, order) | SI_SUB_DRIVERS, order) | ||||
#define EARLY_DRIVER_MODULE_ORDERED7(name, busname, driver, evh, arg, \ | #define EARLY_DRIVER_MODULE(name, busname, driver, evh, arg, pass) \ | ||||
order, pass) \ | EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, evh, arg, \ | ||||
_EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, NULL, evh, \ | |||||
arg, order, pass) | |||||
#define EARLY_DRIVER_MODULE_ORDERED8(name, busname, driver, devclass, \ | |||||
evh, arg, order, pass) \ | |||||
_EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, &devclass, \ | |||||
evh, arg, order, pass) | |||||
#define EARLY_DRIVER_MODULE_ORDERED(...) \ | |||||
_DRIVER_MODULE_MACRO(__VA_ARGS__, EARLY_DRIVER_MODULE_ORDERED8, \ | |||||
EARLY_DRIVER_MODULE_ORDERED7)(__VA_ARGS__) | |||||
#define EARLY_DRIVER_MODULE7(name, busname, driver, devclass, evh, arg, pass) \ | |||||
EARLY_DRIVER_MODULE_ORDERED8(name, busname, driver, devclass, \ | |||||
evh, arg, SI_ORDER_MIDDLE, pass) | |||||
#define EARLY_DRIVER_MODULE6(name, busname, driver, evh, arg, pass) \ | |||||
EARLY_DRIVER_MODULE_ORDERED7(name, busname, driver, evh, arg, \ | |||||
SI_ORDER_MIDDLE, pass) | SI_ORDER_MIDDLE, pass) | ||||
#define EARLY_DRIVER_MODULE(...) \ | #define DRIVER_MODULE_ORDERED(name, busname, driver, evh, arg, order) \ | ||||
_DRIVER_MODULE_MACRO(__VA_ARGS__, INVALID, \ | EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, evh, arg, \ | ||||
EARLY_DRIVER_MODULE7, EARLY_DRIVER_MODULE6)(__VA_ARGS__) | |||||
#define DRIVER_MODULE_ORDERED7(name, busname, driver, devclass, evh, arg,\ | |||||
order) \ | |||||
EARLY_DRIVER_MODULE_ORDERED8(name, busname, driver, devclass, \ | |||||
evh, arg, order, BUS_PASS_DEFAULT) | |||||
#define DRIVER_MODULE_ORDERED6(name, busname, driver, evh, arg, order) \ | |||||
EARLY_DRIVER_MODULE_ORDERED7(name, busname, driver, evh, arg, \ | |||||
order, BUS_PASS_DEFAULT) | order, BUS_PASS_DEFAULT) | ||||
#define DRIVER_MODULE_ORDERED(...) \ | #define DRIVER_MODULE(name, busname, driver, evh, arg) \ | ||||
_DRIVER_MODULE_MACRO(__VA_ARGS__, INVALID, \ | EARLY_DRIVER_MODULE(name, busname, driver, evh, arg, \ | ||||
DRIVER_MODULE_ORDERED7, DRIVER_MODULE_ORDERED6)(__VA_ARGS__) | |||||
#define DRIVER_MODULE6(name, busname, driver, devclass, evh, arg) \ | |||||
EARLY_DRIVER_MODULE7(name, busname, driver, devclass, evh, arg, \ | |||||
BUS_PASS_DEFAULT) | BUS_PASS_DEFAULT) | ||||
#define DRIVER_MODULE5(name, busname, driver, evh, arg) \ | |||||
EARLY_DRIVER_MODULE6(name, busname, driver, evh, arg, \ | |||||
BUS_PASS_DEFAULT) | |||||
#define DRIVER_MODULE(...) \ | |||||
_DRIVER_MODULE_MACRO(__VA_ARGS__, INVALID, INVALID, \ | |||||
DRIVER_MODULE6, DRIVER_MODULE5)(__VA_ARGS__) | |||||
/** | /** | ||||
* Generic ivar accessor generation macros for bus drivers | * Generic ivar accessor generation macros for bus drivers | ||||
*/ | */ | ||||
#define __BUS_ACCESSOR(varp, var, ivarp, ivar, type) \ | #define __BUS_ACCESSOR(varp, var, ivarp, ivar, type) \ | ||||
\ | \ | ||||
static __inline type varp ## _get_ ## var(device_t dev) \ | static __inline type varp ## _get_ ## var(device_t dev) \ | ||||
{ \ | { \ | ||||
▲ Show 20 Lines • Show All 182 Lines • Show Last 20 Lines |