155 lines
5.3 KiB
C
155 lines
5.3 KiB
C
/**************************************************************************
|
|
* *
|
|
* Copyright (C) 1992-1995 Silicon Graphics, Inc. *
|
|
* *
|
|
* These coded instructions, statements, and computer programs contain *
|
|
* unpublished proprietary information of Silicon Graphics, Inc., and *
|
|
* are protected by Federal copyright law. They may not be disclosed *
|
|
* to third parties or copied or duplicated in any form, in whole or *
|
|
* in part, without the prior written consent of Silicon Graphics, Inc. *
|
|
* *
|
|
**************************************************************************/
|
|
#ifndef _DRIVER_H
|
|
#define _DRIVER_H
|
|
|
|
#ident "$Revision: 1.9 $"
|
|
|
|
/*
|
|
** 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(dev_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(vertex_hdl_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(vertex_hdl_t dev_vhdl,
|
|
char *info_lbl);
|
|
|
|
/* Associate a particular administrative hint for a device */
|
|
extern int device_admin_info_set(vertex_hdl_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 /* _DRIVER_H */
|