⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swkmsghd.h

📁 VRTX 商用嵌入式实时操作系统
💻 H
字号:
/***************************************************************************
*
*               Copyright (c) 1993 READY SYSTEMS CORPORATION.
*
*       All rights reserved. READY SYSTEMS' source code is an unpublished
*       work and the use of a copyright notice does not imply otherwise.
*       This source code contains confidential, trade secret material of
*       READY SYSTEMS. Any attempt or participation in deciphering, decoding,
*       reverse engineering or in any way altering the source code is
*       strictly prohibited, unless the prior written consent of
*       READY SYSTEMS is obtained.
*
*
*       Module Name:            swkmsghdr.h
*
*       Identification:         @(#) 2.2 swkmsghdr.h
*
*       Date:                   9/16/94  17:53:56
*
****************************************************************************
*/

/* swkmsghdr.h,v 1.2 1995/02/23 21:45:02 sford Exp */
/*
 * Copyrighted as an unpublished work.
 * (c) Copyright Lachman Technology, Inc. 1993
 * All rights reserved.
 *
 * RESTRICTED RIGHTS:
 *
 * These programs are supplied under a license.  They may be used,
 * disclosed, and/or copied only as permitted under such license
 * agreement.  Any copy must contain the above copyright notice and
 * this restricted rights notice.  Use, copying, and/or disclosure of
 * the programs is strictly prohibited unless otherwise provided in
 * the license agreement.
 */

#ifndef __SWKMSGHDR_H
#define __SWKMSGHDR_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * SwK System Call Message Primitives
 */
#define SWK_OPEN_MSG		0
#define SWK_CLOSE_MSG		1
#define SWK_READ_MSG		2
#define SWK_WRITE_MSG		3
#define SWK_IOCTL_MSG		4
#define SWK_GETMSG_MSG		5
#define SWK_GETPMSG_MSG		6
#define SWK_PUTMSG_MSG		7
#define SWK_PUTPMSG_MSG		8
#define SWK_POLL_MSG		9
#define SWK_FCNTL_MSG		10

#define SWK_NUM_MSGS		11


#define SWK_SYSCALL_REQ		1
#define	SWK_INTERRUPT_REQ	2



/*
 * SwK System Call Argument Passing Interface
 */
struct swk_open_args {
	char		*dev;		/* name of device to open */
	unsigned int	flags;		/* flags for open() */
};

struct swk_close_args {
	int	fd;		/* file descriptor for device to close */
};

struct swk_read_args {
	int	fd;		/* file descriptor to read from */
	char	*buffer;	/* buffer to read data into */
	int	count;		/* number of bytes to read */
};

struct swk_write_args {
	int	fd;		/* file descriptor to write to */
	char	*buffer;	/* buffer to write data from */
	int	count;		/* number of bytes to write */
};

struct swk_ioctl_args {
	int	fd;		/* file descriptor to send ioctl request on */
	int	cmd;		/* ioctl command */
	char	*arg;		/* argument for ioctl request */
};

struct swk_getmsg_args {
	int		fd;		/* file descriptor to get msg from */
	struct strbuf	*ctlptr;	/* buffer for control information */
	struct strbuf	*dataptr;	/* buffer for data */
	int		*flagsp;	/* flags to/from getmsg() */
};

struct swk_getpmsg_args {
	int		fd;		/* file descriptor to get msg from */
	struct strbuf	*ctlptr;	/* buffer for control information */
	struct strbuf	*dataptr;	/* buffer for data */
	int		*bandp;		/* priority band to read from */
	int		*flagsp;	/* flags to/from getpmsg() */
};

struct swk_putmsg_args {
	int		fd;		/* file descriptor to put msg to */
	struct strbuf	*ctlptr;	/* control information buffer */
	struct strbuf	*dataptr;	/* data buffer */
	int		flags;		/* flags for putmsg() */
};

struct swk_putpmsg_args {
	int		fd;		/* file descriptor to put msg to */
	struct strbuf	*ctlptr;	/* control information buffer */
	struct strbuf	*dataptr;	/* data buffer */
	int		band;		/* priority band to put to */
	int		flags;		/* flags for putpmsg() */
};

struct swk_poll_args {
	struct pollfd	*fds;		/* list of file descriptors to poll */
	size_t		nfds;		/* number of fds to poll */
	long		waittime;	/* time to wait on poll */
};

struct swk_fcntl_args {
	int		fd;		/* file descriptor to do request on */
	int		cmd;		/* fcntl command to perform */
	caddr_t		arg;		/* optional argument */
};


union swk_args {
	int			type;
	struct swk_open_args	open_args;
	struct swk_close_args	close_args;
	struct swk_read_args	read_args;
	struct swk_write_args	write_args;
	struct swk_ioctl_args	ioctl_args;
	struct swk_getmsg_args	getmsg_args;
	struct swk_getpmsg_args	getpmsg_args;
	struct swk_putmsg_args	putmsg_args;
	struct swk_putpmsg_args	putpmsg_args;
	struct swk_poll_args	poll_args;
	struct swk_fcntl_args	fcntl_args;
};

struct swk_request {
	int		type;		/* system call id */
	int		in_use;		/* 0=no, 1=yes, 2=task deleted */
	int		rval;		/* return value */
	int		errnum;		/* error number */
	char		*mbox_addr;	/* address of mailbox */
	union swk_args	args;		/* arguments for system call */
};



/*
 * SwK System Call Message Interface
 */
struct swk_open_priv {
	stdata_t		*shp;		/* stream head ptr */
	queue_t			*shrdq;		/* sream head read queue */
	queue_t			*drvrdq;	/* driver read queue */
	queue_t			*q;		/* tmp queue ptr */
	cred_t			*credp;		/* credentials of caller */
	struct sdev_tbl		*dp;		/* device table ptr */
	dev_t			dev;		/* device to open */
	int			sflag;		/* STREAMS flag */
	int			fd;		/* file descriptor */
	int			i;		/* tmp counter */
	cred_t			cred;		/* actual cred structure */
    	struct swk_oc_request	ocreq;		/* open/close request */
};

struct swk_kclose_priv {
	dev_t			dev;		/* device to close */
	stdata_t		*shp;		/* stream head ptr */
	cred_t			*credp;		/* credentials of caller */
	int			rc;		/* return value */
	cred_t			cred;		/* actual cred structure */
};

struct swk_read_priv {
	int			cnt;		/* num bytes read so far */
	stdata_t		*shp;		/* stream head data */
	mblk_t			*mp;		/* pending streams msg */
};

struct swk_write_priv {
	stdata_t	*shp;			/* stream head data */
	int		cnt;			/* num bytes written so far */
	int		size;			/* size of cur msg */
	mblk_t		*mp;			/* pending streams msg */
};

struct swk_ioctl_priv {
	stdata_t		*shp;		/* stream head data */
	cred_t			*credp;		/* credentials of caller */
	queue_t			*q;		/* read queue for I_POP */
	mblk_t			*mp;		/* msg for I_RECVFD */
	int			index;		/* index for I_(P)UNLINK */
	int			i;		/* counter for I_PUNLINK */
	cred_t			cred;		/* actual cred structure */
	char			name[FMNAMESZ+1]; /* mod name for I_PUSH */
	struct strfdinsert	fdi;		/* fd insert struct */
    	struct swk_oc_request	ocreq;		/* open/close request */
};

struct swk_getmsg_priv {
	stdata_t		*shp;		/* stream head data */
	int			flags;		/* getmsg flags */
#ifndef SNX
	struct strbuf		ctl;		/* control data */
	struct strbuf		data;		/* message data */
#endif /* !SNX */
};

struct swk_getpmsg_priv {
	stdata_t		*shp;		/* stream head data */
	int			flags;		/* getmsg flags */
	int			band;		/* priority band */
#ifndef SNX
	struct strbuf		ctl;		/* control data */
	struct strbuf		data;		/* message data */
#endif /* !SNX */
};

struct swk_getcmn_priv {
	queue_t			*q;		/* queue to read from */
	mblk_t			*mp;		/* pending streams msg */
	struct strbuf		*ctlptr;	/* control data */
	struct strbuf		*dataptr;	/* message data */
};

struct swk_putcmn_priv {
	stdata_t		*shp;		/* stream head data */
	struct strbuf		*ctlptr;	/* ptr to control data */
	struct strbuf		*dataptr;	/* ptr to message data */
	int			type;		/* message type */
	int			band;		/* priority band to use */
	int			offset;		/* offset into data buffer */
	void			*ptr;		/* ptr to FDINSERT data */
	mblk_t			*mp;		/* pending streams msg */
#ifndef SNX
	struct strbuf		ctl;		/* control data */
	struct strbuf		data;		/* message data */
#endif /* !SNX */
};

struct swk_poll_priv {
	pollevent_t	*pep;			/* list of poll events */
	stdata_t	*shp;			/* stream head data */
};

struct swk_lock_priv {
	stdata_t	*shp;			/* stream head data */
};

struct swk_modopen_priv {
	stdata_t		*shp;		/* stream head data */
	queue_t			*q;		/* q to open */
	cred_t			*credp;		/* credentials of caller */
	struct swk_oc_request	ocreq;		/* open/close request */
	dev_t			dev;
};

struct swk_link_priv {
	stdata_t	*shp;			/* stream head data */
	dev_t		dev;			/* device to link */
	int		pflag;			/* persistent link flag */
	cred_t		*credp;			/* credentials of caller */
	stdata_t	*lshp;			/* lower stream head data */
	mblk_t		*mp;			/* msg for m_ioctl */
	int		index;			/* link index */
};

struct swk_unlink_priv {
	stdata_t	*shp;			/* stream head data */
	int		index;			/* MUX index */
	int		pflag;			/* persistent link flag */
	cred_t		*credp;			/* credentials of caller */
	stdata_t	*lshp;			/* lower stream head data */
	queue_t		*q;			/* queue to unlink */
};

struct swk_dismantle_priv {
	stdata_t		*shp;		/* stream head data */
	cred_t			*credp;		/* credentials of caller */
	int			unlink_only;	/* unlink flag */
	queue_t			*q;		/* queue to dismantle */
	int			tid;            /* dismantle timer id */
    	struct swk_oc_request	ocreq;		/* open/close request */
};

struct swk_autopush_priv {
	struct strapush	*ap;			/* autopush info */
	stdata_t	*shp;			/* stream head data */
	cred_t		*credp;			/* credentials of caller */
	int		i;			/* tmp counter */
};

struct swk_mioctl_priv {
	stdata_t	*shp;			/* stream head data */
	int		cmd;			/* IOCTL cmd to perform */
	mblk_t		*mp1;			/* IOCTL msg info block */
	char		*uaddr;			/* return buffer */
	int		*ulen;			/* return len ptr */
	int		timout;			/* time to wait for resp. */
	cred_t		*credp;			/* credentials of caller */
	mblk_t		*mp;			/* IOCTL msg header block */
	struct iocblk	*iocp;			/* IOC info block */
	int		tid;			/* timeout ID */
	int		iocid;			/* ID for pending IOCTL */
	int		ubufsize;		/* size of user's rtn buf */
};

struct swk_transparent_priv {
	stdata_t	*shp;			/* stream head data */
	int		cmd;			/* IOCTL cmd to perform */
	char		*arg;			/* IOCTL argument */
	cred_t		*credp;			/* credentials of caller */
	mblk_t		*mp;			/* transparent msg */
	struct iocblk	*iocp;			/* IOCTL info block */
	int		iocid;			/* ID for pending IOCTL */
	int		rc;			/* return value */
};

union swk_priv {
	struct swk_open_priv		open_priv;
	struct swk_kclose_priv		kclose_priv;
	struct swk_read_priv		read_priv;
	struct swk_write_priv		write_priv;
	struct swk_ioctl_priv		ioctl_priv;
	struct swk_getmsg_priv		getmsg_priv;
	struct swk_getpmsg_priv		getpmsg_priv;
	struct swk_getcmn_priv		getcmn_priv;
	struct swk_putcmn_priv		putcmn_priv;
	struct swk_poll_priv		poll_priv;
	struct swk_lock_priv		lock_priv;
	struct swk_modopen_priv		modopen_priv;
	struct swk_link_priv		link_priv;
	struct swk_unlink_priv		unlink_priv;
	struct swk_dismantle_priv	dismantle_priv;
	struct swk_autopush_priv	autopush_priv;
	struct swk_mioctl_priv		mioctl_priv;
	struct swk_transparent_priv	transparent_priv;
};

struct swk_stack {
	struct swk_stack	*rtnp;		/* stack of return func. */
	int			(*rtn_fn)();	/* return function */
	int			state;		/* state of cur func. */
	int			prealloc;	/* pre-allocation flag */
	union swk_priv		priv;		/* private data area */
};

struct swk_message {
	int			(*scm_fn)();	/* system call func to call */
	int			scm_addr;	/* address to sleep/wakeup on */
	struct swk_request	*scm_req;	/* system call request */
	struct swk_stack	*scm_stack;	/* stack area for sys call */
	struct swk_message	*scm_next;	/* next msg in message list */
	struct swk_stack	scm_first;	/* stack for first call */

#define scm_type	scm_req->type
#define scm_rval	scm_req->rval
#define scm_error	scm_req->errnum
};



/*
 * SwK Interrupt Request Message Interface
 */
struct swk_irq_req {
	int	dev_id;
	int	irq_type;
	int	(*irq_routine)();
};

/*
 * SwK Generic Message Interface
 */
struct swk_gen_msg {
	int	type;		/* request type */
	union {
		struct swk_request	*scr_req;
		struct swk_irq_req	*irq_req;
	} req;
};

#ifdef __cplusplus
}
#endif

#endif /* __SWKMSGHDR_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -