summaryrefslogtreecommitdiffstats
path: root/include/asm-ia64/sn/driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-ia64/sn/driver.h')
-rw-r--r--include/asm-ia64/sn/driver.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/include/asm-ia64/sn/driver.h b/include/asm-ia64/sn/driver.h
new file mode 100644
index 000000000..f71f4348b
--- /dev/null
+++ b/include/asm-ia64/sn/driver.h
@@ -0,0 +1,150 @@
+/* $Id$
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
+ * Copyright (C) 2000 by Colin Ngam
+ */
+#ifndef _ASM_SN_DRIVER_H
+#define _ASM_SN_DRIVER_H
+
+/*
+** Interface for device driver handle management.
+**
+** These functions are mostly for use by the loadable driver code, and
+** for use by I/O bus infrastructure code.
+*/
+
+typedef struct device_driver_s *device_driver_t;
+#define DEVICE_DRIVER_NONE (device_driver_t)NULL
+
+/* == Driver thread priority support == */
+typedef int ilvl_t;
+/* default driver thread priority level */
+#define DRIVER_THREAD_PRI_DEFAULT (ilvl_t)230
+/* invalid driver thread priority level */
+#define DRIVER_THREAD_PRI_INVALID (ilvl_t)-1
+
+/* Associate a thread priority with a driver */
+extern int device_driver_thread_pri_set(device_driver_t driver,
+ ilvl_t pri);
+
+/* Get the thread priority associated with the driver */
+extern ilvl_t device_driver_thread_pri_get(device_driver_t driver);
+
+/* Get the thread priority for a driver from the sysgen paramters */
+extern ilvl_t device_driver_sysgen_thread_pri_get(char *driver_prefix);
+
+/* Initialize device driver functions. */
+extern void device_driver_init(void);
+
+
+/* Allocate a driver handle */
+extern device_driver_t device_driver_alloc(char *prefix);
+
+
+/* Free a driver handle */
+extern void device_driver_free(device_driver_t driver);
+
+
+/* Given a device driver prefix, return a handle to the driver. */
+extern device_driver_t device_driver_get(char *prefix);
+
+/* Given a device, return a handle to the driver. */
+extern device_driver_t device_driver_getbydev(devfs_handle_t device);
+
+struct cdevsw;
+struct bdevsw;
+
+/* Associate a driver with bdevsw/cdevsw pointers. */
+extern int
+device_driver_devsw_put(device_driver_t driver,
+ struct bdevsw *my_bdevsw,
+ struct cdevsw *my_cdevsw);
+
+
+/* Given a driver, return the corresponding bdevsw and cdevsw pointers. */
+extern void
+device_driver_devsw_get( device_driver_t driver,
+ struct bdevsw **bdevswp,
+ struct cdevsw **cdevswp);
+
+/* Given a driver, return its name (prefix). */
+extern void device_driver_name_get(device_driver_t driver, char *buffer, int length);
+
+
+/*
+ * A descriptor for every static device driver in the system.
+ * lboot creates a table of these and places in in master.c.
+ * device_driver_init runs through this table during initialization
+ * in order to "register" every static device driver.
+ */
+typedef struct static_device_driver_desc_s {
+ char *sdd_prefix;
+ struct bdevsw *sdd_bdevsw;
+ struct cdevsw *sdd_cdevsw;
+} *static_device_driver_desc_t;
+
+extern struct static_device_driver_desc_s static_device_driver_table[];
+extern int static_devsw_count;
+
+
+/*====== administration support ========== */
+/* structure of each entry in the table created by lboot for
+ * device / driver administration
+*/
+typedef struct dev_admin_info_s {
+ char *dai_name; /* name of the device or driver
+ * prefix
+ */
+ char *dai_param_name; /* device or driver parameter name */
+ char *dai_param_val; /* value of the parameter */
+} dev_admin_info_t;
+
+
+/* Update all the administrative hints associated with the device */
+extern void device_admin_info_update(devfs_handle_t dev_vhdl);
+
+/* Update all the administrative hints associated with the device driver */
+extern void device_driver_admin_info_update(device_driver_t driver);
+
+/* Get a particular administrative hint associated with a device */
+extern char *device_admin_info_get(devfs_handle_t dev_vhdl,
+ char *info_lbl);
+
+/* Associate a particular administrative hint for a device */
+extern int device_admin_info_set(devfs_handle_t dev_vhdl,
+ char *info_lbl,
+ char *info_val);
+
+/* Get a particular administrative hint associated with a device driver*/
+extern char *device_driver_admin_info_get(char *driver_prefix,
+ char *info_name);
+
+/* Associate a particular administrative hint for a device driver*/
+extern int device_driver_admin_info_set(char *driver_prefix,
+ char *driver_info_lbl,
+ char *driver_info_val);
+
+/* Initialize the extended device administrative hint table */
+extern void device_admin_table_init(void);
+
+/* Add a hint corresponding to a device to the extended device administrative
+ * hint table.
+ */
+extern void device_admin_table_update(char *dev_name,
+ char *param_name,
+ char *param_val);
+
+/* Initialize the extended device driver administrative hint table */
+extern void device_driver_admin_table_init(void);
+
+/* Add a hint corresponding to a device to the extended device driver
+ * administrative hint table.
+ */
+extern void device_driver_admin_table_update(char *drv_prefix,
+ char *param_name,
+ char *param_val);
+#endif /* _ASM_SN_DRIVER_H */