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 | |||||