📄 swkmsghd.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 + -