+++ /dev/null
-#ifndef _LWK_DRIVER_H
-#define _LWK_DRIVER_H
-
-#include <lwk/kernel.h>
-#include <lwk/types.h>
-
-/*
- * Drivers may set DRIVER_NAME before including this header.
- * Otherwise, the KBUILD name is used.
- */
-#ifndef DRIVER_NAME
-#define DRIVER_NAME KBUILD_MODNAME
-#endif
-
-/*
- * Driver parameter names have the form:
- *
- * driver_name.parameter_name
- *
- * Example:
- * To set integer parameter foo in driver bar, add this
- * to the kernel boot command line:
- *
- * bar.foo=1
- */
-#define __DRIVER_PARAM_PREFIX DRIVER_NAME "."
-
-/*
- * For driver parameters. Parameters can be configured via the
- * kernel boot command line or some other platform-dependent
- * runtime mechanism.
- */
-#include <lwk/params.h>
-
-#define driver_param(name, type) \
- __param_named(__DRIVER_PARAM_PREFIX, name, name, type)
-
-#define driver_param_named(name, value, type) \
- __param_named(__DRIVER_PARAM_PREFIX, name, value, type)
-
-#define driver_param_string(name, string, len) \
- __param_string(__DRIVER_PARAM_PREFIX, name, string, len)
-
-#define driver_param_array(name, type, nump) \
- __param_array_named(__DRIVER_PARAM_PREFIX, name, name, type, nump)
-
-#define driver_param_array_named(name, array, type, nump) \
- __param_array_named(__DRIVER_PARAM_PREFIX, name, array, type, nump)
-
-/*
- * Every driver defines one of these structures via the
- * driver_init() macro. The structure gets placed in the
- * __driver_table ELF section and the kernel walks this table
- * to find/initialize all drivers in the system.
- */
-struct driver_info {
- const char * name; // name of the driver
- void (*init)(void); // driver initialization function
- int init_called; // set when .init() has been called,
- // used to prevent double inits.
-};
-
-/*
- * This adds a function to the __driver_table ELF section.
- */
-#define driver_init(init_func) \
- static char __driver_name[] = DRIVER_NAME; \
- static struct driver_info const __driver_info \
- __attribute_used__ \
- __attribute__ ((unused,__section__ ("__driver_table"), \
- aligned(sizeof(void *)))) \
- = { __driver_name, init_func };
-
-/*
- * The __driver_table ELF section is surrounded by these symbols,
- * which are defined in the platform's linker script.
- */
-extern struct driver_info __start___driver_table[];
-extern struct driver_info __stop___driver_table[];
-
-/*
- * This is a placeholder. Currently drivers are never unloaded once loaded.
- */
-#define driver_exit(exit_func)
-
-extern int driver_init_by_name(const char *name);
-
-#endif