summaryrefslogtreecommitdiff
path: root/sys/pccard/skel.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/pccard/skel.c')
-rw-r--r--sys/pccard/skel.c84
1 files changed, 82 insertions, 2 deletions
diff --git a/sys/pccard/skel.c b/sys/pccard/skel.c
index 6991ab81d8531..b26c69a3cdc6e 100644
--- a/sys/pccard/skel.c
+++ b/sys/pccard/skel.c
@@ -41,20 +41,100 @@
#include <sys/select.h>
#include <sys/kernel.h>
-#include <sys/module.h>
#include <pccard/cardinfo.h>
#include <pccard/driver.h>
#include <pccard/slot.h>
+/*
+ * This defines the lkm_misc module use by modload
+ * to define the module name.
+ */
+MOD_MISC(skel);
+
static int skelinit(struct pccard_devinfo *); /* init device */
static void skelunload(struct pccard_devinfo *); /* Disable driver */
static int skelintr(struct pccard_devinfo *); /* Interrupt handler */
-PCCARD_MODULE(skel, skelinit, skelunload, skelintr, 0, net_imask);
+static struct pccard_device skel_info = {
+ "skel",
+ skelinit,
+ skelunload,
+ skelintr,
+ 0, /* Attributes - presently unused */
+ &net_imask /* Interrupt mask for device */
+};
+
+DATA_SET(pccarddrv_set, skel_info);
static int opened; /* Rather minimal device state... */
/*
+ * Module handler that processes loads and unloads.
+ * Once the module is loaded, the add driver routine is called
+ * to register the driver.
+ * If an unload is requested the remove driver routine is
+ * called to deregister the driver before unloading.
+ */
+static int
+skel_handle(lkmtp, cmd)
+struct lkm_table *lkmtp;
+int cmd;
+{
+ int i;
+ struct lkm_misc *args = lkmtp->private.lkm_misc;
+ int err = 0; /* default = success*/
+
+ switch( cmd) {
+ case LKM_E_LOAD:
+/*
+ * Now register the driver
+ */
+ pccard_add_driver(&skel_info);
+ break; /* Success*/
+/*
+ * Attempt to deregister the driver.
+ */
+ case LKM_E_UNLOAD:
+ pccard_remove_driver(&skel_info);
+ break; /* Success*/
+
+ default: /* we only understand load/unload*/
+ err = EINVAL;
+ break;
+ }
+
+ return( err);
+}
+
+
+/*
+ * External entry point; should generally match name of .o file. The
+ * arguments are always the same for all loaded modules. The "load",
+ * "unload", and "stat" functions in "MOD_DISPATCH" will be called under
+ * their respective circumstances unless their value is "nosys". If
+ * called, they are called with the same arguments (cmd is included to
+ * allow the use of a single function, ver is included for version
+ * matching between modules and the kernel loader for the modules).
+ *
+ * Since we expect to link in the kernel and add external symbols to
+ * the kernel symbol name space in a future version, generally all
+ * functions used in the implementation of a particular module should
+ * be static unless they are expected to be seen in other modules or
+ * to resolve unresolved symbols alread existing in the kernel (the
+ * second case is not likely to ever occur).
+ *
+ * The entry point should return 0 unless it is refusing load (in which
+ * case it should return an errno from errno.h).
+ */
+int
+skel(lkmtp, cmd, ver)
+struct lkm_table *lkmtp;
+int cmd;
+int ver;
+{
+ MOD_DISPATCH(skel,lkmtp,cmd,ver,skel_handle,skel_handle,nosys)
+}
+/*
* Skeleton driver entry points for PCCARD configuration.
*/
/*