File:  [MW Coherent from dump] / coherent / b / STREAMS / conf_79 / mdev.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed May 29 04:56:36 2019 UTC (7 years, 2 months ago) by root
Branches: MarkWilliams, MAIN
CVS tags: relic, HEAD
coherent

#ifndef	MDEV_H
#define	MDEV_H

/*
 *-IMPORTS:
 *	<sys/compat.h>
 *		CONST
 *		EXTERN_C_BEGIN
 *		EXTERN_C_END
 *		PROTO ()
 */

#include <sys/compat.h>

#ifndef	SYMBOL_T
#define	SYMBOL_T
typedef	struct symbol	symbol_t;
#endif

#ifndef	SDEV_T
#define	SDEV_T
typedef	struct sdevice	sdev_t;
#endif

#ifndef	MDEV_T
#define	MDEV_T
typedef	struct mdevice	mdev_t;
#endif

#ifndef	MDLIST_T
#define	MDLIST_T
typedef struct mdlist	mdlist_t;
#endif


enum {
	MD_DISABLED,
	MD_INSTALLABLE,
	MD_ENABLED
};


/*
 * Structure of the data gathered by the mkdev routines.
 */

typedef	unsigned int	maj_t;
typedef	unsigned int	min_t;

struct mdevice {
	mdev_t	      *	md_next;	/* global list of all entries */
	mdev_t	      *	md_link1;	/* for sorts */
	mdev_t	      *	md_link2;	/* for sorts */
	mdev_t	      *	md_link3;	/* for sorts */

	sdev_t	      *	md_sdevices;	/* thread of "sdevice" entries */
	int		md_configure;	/* See MD_... constants */
	int		md_interrupt;	/* has an enabled interrupt */

	symbol_t      *	md_devname;	/* internal module/device name */
	symbol_t      *	md_functions;	/* present driver entry points */
	symbol_t      *	md_flags;	/* driver characteristics */
	symbol_t      *	md_prefix;	/* driver prefix */
	maj_t		md_blk_maj [2];	/* block major number low, high */
	maj_t		md_chr_maj [2];	/* character major number low, high */
	min_t		md_minor_min;	/* minor number minimum */
	min_t		md_minor_max;	/* minor number maximum */

	/*
	 * The following fields are not used in the Coherent system as yet
	 * but are defined by mdevice (4) so we read them.
	 */

	int		md_dma_chan;	/* DMA channel number */
	int		md_cpu_id;	/* processor-id */
};


/*
 * Structure of a list of "mdevice" entries.
 */

struct mdlist {
	mdev_t	      *	mdl_first;	/* first mdevice in list */
	mdev_t	      *	mdl_last;	/* last mdevice in list */
	int		mdl_count;	/* count of mdevices */
};


/*
 * Types suitable for use as selection and comparison predicates for the
 * mdev_sort () function.
 */

typedef	int  (*	msel_t)		PROTO ((mdev_t * _mdevp));
typedef int  (*	mcmp_t)		PROTO ((mdev_t * _left, mdev_t * _right));


/*
 * For Coherent, the first 32 major numbers are reserved for the use of the
 * old-style Coherent device-driver system.
 */

enum {	MAJOR_RESERVED = 32,
	MAX_DEVNAME = 8,
	MAX_PREFIX = 4
};


#define	MDEV_OPEN		'o'
#define	MDEV_CLOSE		'c'
#define	MDEV_READ		'r'
#define	MDEV_WRITE		'w'
#define	MDEV_IOCTL		'i'
#define	MDEV_STARTUP		's'
#define	MDEV_EXIT		'x'
#define	MDEV_INIT		'I'
#define	MDEV_HALT		'h'
#define	MDEV_CHPOLL		'p'

#define	MDEV_MMAP		'M'	/* not defined in SVR4 mdevice (4) */
#define	MDEV_SIZE		'z'	/* not defined in SVR4 mdevice (4) */

#define	MDEV_FUNCS		"ocrwisxIhpMz"


#define	MDEV_INSTALLABLE	'i'
#define	MDEV_CHAR		'c'
#define	MDEV_BLOCK		'b'
#define	MDEV_STREAM		'S'
#define	MDEV_DDI_DDK		'f'
#define	MDEV_TTY		't'
#define	MDEV_ONE_SDEVICE	'o'
#define	MDEV_REQUIRED		'r'
#define	MDEV_SAME_MAJORS	'u'
#define	MDEV_HARDWARE		'H'
#define	MDEV_NO_INT		'G'
#define	MDEV_SHARE_DMA		'D'
#define	MDEV_MULTIPLE_MAJORS	'M'
#define	MDEV_ALLOW_IOA_OVERLAP	'O'

#define	MDEV_FLAGS		"icbSftoruHGDMO"


EXTERN_C_BEGIN

mdev_t	      *	find_mdev	PROTO ((symbol_t * _sym));
mdev_t	      *	mdevices	PROTO ((void));
int		mdev_func	PROTO ((mdev_t * _mdevp, char _func));
int		mdev_flag	PROTO ((mdev_t * _mdevp, char _flag));
void		read_mdev_file	PROTO ((CONST char * _name));
void		mdev_sort	PROTO ((mdlist_t * _mlistp, msel_t _selpred,
					mcmp_t _cmppred, size_t ptroff));

EXTERN_C_END

#endif	/* ! defined (MDEV_H) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.