/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/kernel/sys/strconf.h 1.13.1.1                           */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1991,2013              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)37       1.13.1.1  src/bos/kernel/sys/strconf.h, sysxpse, bos720 3/19/13 04:17:54 */
/*
 *   COMPONENT_NAME: SYSXPSE strconf.h
 *
 *   ORIGINS: 27 83
 *
 *
 *   (C) COPYRIGHT International Business Machines Corp. 1991
 *   All Rights Reserved
 *   Licensed Materials - Property of IBM
 *   US Government Users Restricted Rights - Use, duplication or
 *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */
/*
 *  LEVEL 1, 5 Years Bull Confidential Information
 */

#ifndef	_STRCONF_H_
#define	_STRCONF_H_

#include <sys/types.h>

#ifdef __cplusplus
extern "C" {
#endif

struct streamtab;

/*
 * kernel configuration parameters
 */

typedef struct {
	char *sc_name;		/* null-terminated module/device name	*/
	struct streamtab *sc_str;	/* pointer to streamtab		*/
	int sc_flags;		/* which style open to use		*/
	int sc_major;		/* major number for device		*/
	int sc_sqlevel;		/* Synchronization level mode		*/
	caddr_t sc_sqinfo;	/* pointer for SQLVL_ELSEWHERE case	*/
} kstrconf_t;
#define	strconf_t kstrconf_t

#define sc_open_style   sc_flags

#define	STR_NEW_OPEN	0	/* SVR4 style opens ("default")		*/
#define	STR_OLD_OPEN	1	/* SVR3 style opens			*/
#define STR_MPSAFE	2	/* must be treated as MP safe or efficient */
#define STR_Q_SAFETY	4	/* Module needs safe callbacks */
#define STR_Q_NOTTOSPEC	8	/* Module may sleep or fault in service routine.
				 * Needs schedule.
				 */
#define STR_PERSTREAM	0x10
#define STR_64BIT	0x20	/* 64-bit flag */
#define STR_NEWCLONING	0x40	/* new-style cloning flag */
#define STR_WPAR_AWARE	0x80	/* wpar aware device */
#define STR_READ_Q_NOTTOSPEC  0x100
#define STR_WRITE_Q_NOTTOSPEC 0x200


#define	STR_LOAD_DEV		1
#define	STR_LOAD_MOD		2
#define	STR_UNLOAD_DEV		3
#define	STR_UNLOAD_MOD		4

/*
 * Synchronization level codes.
 * These are supplied to fmodsw_install and dmodsw_install and stored
 * in the appropriate tables.  sth_osr_open and sth_ipush use these to
 * set up synch queue subordination for new devices and modules.
 */

#define SQLVL_DEFAULT           0
#define SQLVL_GLOBAL            1
#define SQLVL_ELSEWHERE         2
#define SQLVL_MODULE            3
#define SQLVL_QUEUEPAIR         4
#define SQLVL_QUEUE             5
#define SQLVL_NOP               6


extern  int             str_install(int , strconf_t *);

#ifndef	_KERNEL

/*
 * user configuration parameters
 */

typedef struct node {
	dev_t	dev;		/* device major,minor pair		*/
	char	*name;		/* node name in filesystem		*/
} node_t;

typedef struct ustrconf {
	int	version;	/* data structure version		*/
	char	*extname;	/* kernel extension to operate upon	*/
	int	flags;		/* generic flags			*/
	int	maj;		/* device major				*/
	void	*dds;		/* DDS/MDI to give to extension		*/
	int	ddslen;		/* length of DDS/MDI			*/
	char	*odmkey;	/* key to gen a unique device major	*/
	node_t	*nodes;		/* nodes for this device		*/
} ustrconf_t;

/* ustrconf.version */
#define	STRCONF_V1	1	/* version of data structure		*/

/* ustrconf.flags */
#define	SF_MODULE	0x0000	/* describes a module			*/
#define	SF_DEVICE	0x0001	/* describes a device			*/
#define	SF_DUP		0x0002	/* can be loaded several times		*/
#define	SF_KEEPNODES	0x0004	/* create/remove nodes on first/last load */

/* cmds */
#define	STR_LOAD	1	/* load extension			*/
#define	STR_UNLOAD	2	/* unload extension			*/
#define	STR_QUERY	3	/* query extension's existance		*/
#define	STR_INIT	4	/* init extension			*/
#define	STR_TERM	5	/* terminate extension			*/

#endif	/* _KERNEL */

#ifdef __cplusplus
}
#endif
#endif	/* _STRCONF_H_ */
