.. | .. |
---|
272 | 272 | } \ |
---|
273 | 273 | module_exit(__driver##_exit); |
---|
274 | 274 | |
---|
| 275 | +#define module_driver1(__driver, __register, __unregister, ...) \ |
---|
| 276 | +static int __init __driver##_init(void) \ |
---|
| 277 | +{ \ |
---|
| 278 | + return __register(&(__driver) , ##__VA_ARGS__); \ |
---|
| 279 | +} \ |
---|
| 280 | +arch_initcall(__driver##_init); \ |
---|
| 281 | +static void __exit __driver##_exit(void) \ |
---|
| 282 | +{ \ |
---|
| 283 | + __unregister(&(__driver) , ##__VA_ARGS__); \ |
---|
| 284 | +} \ |
---|
| 285 | +module_exit(__driver##_exit) |
---|
| 286 | + |
---|
| 287 | +#define module_driver2(__driver, __register, __unregister, ...) \ |
---|
| 288 | +static int __init __driver##_init(void) \ |
---|
| 289 | +{ \ |
---|
| 290 | + return __register(&(__driver) , ##__VA_ARGS__); \ |
---|
| 291 | +} \ |
---|
| 292 | +late_initcall(__driver##_init); \ |
---|
| 293 | +static void __exit __driver##_exit(void) \ |
---|
| 294 | +{ \ |
---|
| 295 | + __unregister(&(__driver) , ##__VA_ARGS__); \ |
---|
| 296 | +} \ |
---|
| 297 | +module_exit(__driver##_exit); |
---|
| 298 | + |
---|
275 | 299 | /** |
---|
276 | 300 | * builtin_driver() - Helper macro for drivers that don't do anything |
---|
277 | 301 | * special in init and have no exit. This eliminates some boilerplate. |
---|