/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/kernel/kdm/kdm_dmi.h 1.5                                */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2000,2002              */
/* 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                                                     */
/* @(#)43  1.5  src/bos/kernel/kdm/kdm_dmi.h, syskdm, bos720 11/18/02 16:38:58 */

/*
 * Copyright (c) 1998 VERITAS Software Corporation.  ALL RIGHTS RESERVED.
 * UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT
 * LAWS OF THE UNITED STATES.  USE OF A COPYRIGHT NOTICE
 * IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
 * OR DISCLOSURE.
 *
 * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND
 * TRADE SECRETS OF VERITAS SOFTWARE.  USE, DISCLOSURE,
 * OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR
 * EXPRESS WRITTEN PERMISSION OF VERITAS SOFTWARE.
 *
 *		RESTRICTED RIGHTS LEGEND
 * USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS
 * SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBPARAGRAPH
 * (C) (1) (ii) OF THE RIGHTS IN TECHNICAL DATA AND
 * COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013.
 *		VERITAS SOFTWARE
 * 1600 PLYMOUTH STREET, MOUNTAIN VIEW, CA 94043
 */

#ifndef _H_KDM_DMI
#define _H_KDM_DMI

#define	DM_ACTIVE	1
#define	DM_PENDING	2

/*
 * name descrepancies ..
 */

#define	vd_off	vd_offset
#define	vd_len	vd_length

/*
 * hsm file handle
 * we need it here to simplify allocations
 * in variable length structures
 */

struct kdm_handle {
	dm_fsid_t	fsid;
	dm_ino_t	ino;
/*	dm_u32_t	pad1; */	/* no need to pad 64-bit dm_ino_t */
	dm_igen_t	gen;
	short		flags;
	char		type;
	char		pad2[5];
};
typedef struct kdm_handle kdm_handle_t;

#define KDM_HANDLE_SIZE_OK(len)		\
	((len) == sizeof (kdm_handle_t))

struct kdm_data_event {
	dm_data_event_t	kde_base;
	kdm_handle_t	kde_vhandle;	/* private */
};
typedef struct kdm_data_event kdm_data_event_t;

#define	kde_handle	kde_base.de_handle
#define	kde_offset	kde_base.de_offset
#define	kde_length	kde_base.de_length

struct kdm_namesp_event {
	dm_namesp_event_t	kne_base;
	kdm_handle_t		kne_phandle1;		/* private */
	kdm_handle_t		kne_phandle2;
	char			kne_pathnames[4];
};
typedef	struct kdm_namesp_event kdm_namesp_event_t;

#define	kne_mode		kne_base.ne_mode
#define	kne_handle1		kne_base.ne_handle1
#define	kne_handle2		kne_base.ne_handle2
#define	kne_name1		kne_base.ne_name1
#define	kne_name2		kne_base.ne_name2
#define	kne_retcode		kne_base.ne_retcode

struct kdm_mount_event {
	dm_mount_event_t	kme_base;
	kdm_handle_t		kme_pfshandle;
	kdm_handle_t		kme_pmnthandle;
	kdm_handle_t		kme_proothandle;
	char			kme_pathnames[4];
};
typedef	struct kdm_mount_event kdm_mount_event_t;

#define	kme_mode		kme_base.me_mode
#define	kme_fshandle		kme_base.me_handle1
#define	kme_mnthandle		kme_base.me_handle2
#define	kme_roothandle		kme_base.me_roothandle
#define	kme_path		kme_base.me_name1
#define	kme_media		kme_base.me_name2
#define	kme_retcode		kme_base.me_retcode

struct kdm_destroy_event {
	dm_destroy_event_t	kds_base;
	kdm_handle_t		kds_phandle;
	char			kds_pattrdata[4];
};
typedef	struct kdm_destroy_event kdm_destroy_event_t;

#define	kds_handle		kds_base.ds_handle
#define	kds_attrname		kds_base.ds_attrname
#define	kds_attrdata		kds_base.ds_attrdata

struct kdm_dispinfo {
	dm_dispinfo_t	kdi_base;
	kdm_handle_t	kdi_handle;
};
typedef struct kdm_dispinfo kdm_dispinfo_t;

#define	kdi_handleoff	kdi_base.di_fshandle.vd_offset
#define	kdi_handlelen	kdi_base.di_fshandle.vd_length
#define	kdi_link	kdi_base._link
#define	kdi_eventset	kdi_base.di_eventset
#define	kdi_fsid	kdi_handle.fsid
#define	kdi_type	kdi_handle.type
#define	kdi_handlestart	kdi_handle.fsid

struct kdm_sessinfo {
	int		hsmsi_id;		/* session id */
	int		hsmsi_nexttoken;	/* next event token */
	int		hsmsi_numoutq;		/* # messages on hsms_outq */
	int		hsmsi_totmsg;		/* total outmsgs for session  */
	int		hsmsi_waitcnt;		/* waiters on outq */
	int		hsmsi_namlen;		/* name length */
	char		hsmsi_name[DM_MAXNAME];	/* session name string */
};

struct kdm_eventinfo {
	int		hsmei_status;
	int		hsmei_origactive;	/* active level at posting */
	int		hsmei_curactive;	/* current active level */
};

/*
 * hsmei_status values : flags
 */

#define KDM_NEEDCONTEXT		0x01
#define	KDM_NEEDDISP		0x02	/* return error if no disposition */
#define	KDM_FORCEASYNC_EV	0x04	/* force async for user event */

/* values for type field of kdm_handle */
#define KDM_INODE_HANDLE	1		/* inode */
#define KDM_GENERIC_HANDLE	2		/* generic handle for fs */
#define KDM_GLOBAL_HANDLE	4		/* global hsm handle */
#define KDM_INVALID_HANDLE	8		/* invalid hsm handle */

#define KDM_ROOTINO		2

/*
 * values for flags field of kdm_handle
 */

#define KDM_IGNORE_GEN	0x1			/* ignore gen part of handle */

#define KDM_MAXBUF		65536
#define KDM_MAXREG		(KDM_MAXBUF / sizeof (dm_region_t))

struct kdm_stat {
	dm_stat_t	kdt_base;
	kdm_handle_t	kdt_phandle;
	char		kdt_pname[4];
};
typedef	struct kdm_stat	kdm_stat_t;

#define	kdt_link	kdt_base._link
#define	kdt_handle	kdt_base.dt_handle
#define	kdt_compname	kdt_base.dt_compname
#define	kdt_emask	kdt_base.dt_emask
#define	kdt_nevents	kdt_base.dt_nevents
#define	kdt_dtime	kdt_base.dt_dtime
#define	kdt_change	kdt_base.dt_change
#define	kdt_dev		kdt_base.dt_dev
#define	kdt_ino		kdt_base.dt_ino
#define	kdt_mode	kdt_base.dt_mode
#define	kdt_nlink	kdt_base.dt_nlink
#define	kdt_uid		kdt_base.dt_uid
#define	kdt_gid		kdt_base.dt_gid
#define	kdt_rdev	kdt_base.dt_rdev
#define	kdt_size	kdt_base.dt_size
#define	kdt_atime	kdt_base.dt_atime
#define	kdt_ctime	kdt_base.dt_ctime
#define	kdt_mtime	kdt_base.dt_mtime
#define	kdt_blocksize	kdt_base.dt_blksize
#define	kdt_blocks	kdt_base.dt_blocks
#define kdt_pers	kdt_base.dt_pers
#define kdt_pmanreg	kdt_base.dt_pmanreg

struct kdm_xstat {
	dm_xstat_t	kdxt_base;
	kdm_handle_t	kdxt_phandle;
	char		kdxt_vardata[4];
};
typedef struct kdm_xstat	kdm_xstat_t;

#define	kdxt_link	kdxt_base._link
#define	kdxt_stat	kdxt_base.dx_statinfo
#define kdxt_sublink	kdxt_base.dx_statinfo._link
#define kdxt_handle	kdxt_base.dx_statinfo.dt_handle
#define kdxt_compname	kdxt_base.dx_statinfo.dt_compname
#define kdxt_emask	kdxt_base.dx_statinfo.dt_emask
#define kdxt_nevents	kdxt_base.dx_statinfo.dt_nevents
#define kdxt_dtime	kdxt_base.dx_statinfo.dt_dtime
#define kdxt_change	kdxt_base.dx_statinfo.dt_change
#define kdxt_dev	kdxt_base.dx_statinfo.dt_dev
#define kdxt_ino	kdxt_base.dx_statinfo.dt_ino
#define kdxt_mode	kdxt_base.dx_statinfo.dt_mode
#define kdxt_nlink	kdxt_base.dx_statinfo.dt_nlink
#define kdxt_uid	kdxt_base.dx_statinfo.dt_uid
#define kdxt_gid	kdxt_base.dx_statinfo.dt_gid
#define kdxt_rdev	kdxt_base.dx_statinfo.dt_rdev
#define kdxt_size	kdxt_base.dx_statinfo.dt_size
#define kdxt_atime	kdxt_base.dx_statinfo.dt_atime
#define kdxt_ctime	kdxt_base.dx_statinfo.dt_ctime
#define kdxt_mtime	kdxt_base.dx_statinfo.dt_mtime
#define kdxt_blocksize	kdxt_base.dx_statinfo.dt_blksize
#define kdxt_blocks	kdxt_base.dx_statinfo.dt_blocks
#define kdxt_pers	kdxt_base.dx_statinfo.dt_pers
#define kdxt_pmanreg	kdxt_base.dx_statinfo.dt_pmanreg
#define kdxt_attrdata	kdxt_base.dx_attrdata

#define _OS_PAGESIZE	    4096
#define DM_EXTENTSPERPAGE	(_OS_PAGESIZE / sizeof (dm_extent_t))
#define DM_EXTENTBUFLEN		(DM_EXTENTSPERPAGE * sizeof (dm_extent_t))

/*
 * This structure is returned for each event disposition as part of a
 * GETSESSIONINFO call
 */

struct kdm_u_dispinfo {
	int		eventnum;
	dm_sessid_t	id;		/* id of session */
	int		type;		/* KDM_GENERIC_HANDLE or GLOBAL */
	dev_t		fsid;		/* no value if KDM_GLOBAL_HANDLE */
};

/*
 * lock flags, must not overlap dmapi.h lock flag(s)
 * #define DM_RR_WAIT		0x01
 */

#define DM_KEEPLOCK		0x0200	/* retain lock after event complete */
#define DM_NORLSE		0x0400	/* lock acquired outside of event */
#define DM_LOCKHANDOFF		0x0800	/* hand off lock to user thread */

/* lock info */
struct kdm_lockinfo {
	kdm_handle_t		handle;
	short			flags;
	char			right;
};

#define KDM_U_IOCTL(f, c, a) kdm_u_ioctl(f, c, a)

/*
 * The DMAPI ioctl for VxFS is VX_DMAPI_IOCTL.
 * The KDM_IOC_XXX numbers are embedded in a structure
 * that gets passed in with a VX_DMAPI_GROUP ioctl, to identify
 * which DMAPI operation has been requested.
 */

#define KDM_IOC	(10000)
#define	KDM_IOC_OPENSESSION	(KDM_IOC + 0)	/* open a session */
#define	KDM_IOC_CLOSESESSION	(KDM_IOC + 1)	/* close a session */
#define	KDM_IOC_GETALLTOKENS	(KDM_IOC + 2)	/* get tokens for session */
#define	KDM_IOC_REQUESTRIGHT	(KDM_IOC + 3)	/* request a right */
#define	KDM_IOC_RELEASERIGHT	(KDM_IOC + 4)	/* release a right */
#define	KDM_IOC_GETALLOCINFO	(KDM_IOC + 5)	/* get allocation info */
#define	KDM_IOC_PROBEHOLE	(KDM_IOC + 6)	/* punch a hole */
#define	KDM_IOC_READINVIS	(KDM_IOC + 7)	/* invisible read */
#define	KDM_IOC_WRITEINVIS	(KDM_IOC + 8)	/* invisible write */
#define	KDM_IOC_GETREGION	(KDM_IOC + 9)	/* get managed regions*/
#define	KDM_IOC_SETREGION	(KDM_IOC + 10)	/* set managed regions*/
#define	KDM_IOC_GETBULKATTR	(KDM_IOC + 11)	/* bulk attribute get */
#define	KDM_IOC_GETFILEATTR	(KDM_IOC + 12)	/* single attribute get */
#define	KDM_IOC_GETDMATTR	(KDM_IOC + 13)	/* get hsm attribute */
#define	KDM_IOC_SETDMATTR	(KDM_IOC + 14)	/* set hsm attribute */
#define	KDM_IOC_REMOVEDMATTR	(KDM_IOC + 15)	/* remove hsm attribute */
#define	KDM_IOC_GETMOUNTINFO	(KDM_IOC + 16)	/* return mount info */
#define	KDM_IOC_LISTDMATTR	(KDM_IOC + 17)	/* list hsm attribute */
#define	KDM_IOC_LISTINHERIT	(KDM_IOC + 18)	/* list inheritable */
#define	KDM_IOC_SETINHERIT	(KDM_IOC + 19)	/* mark as inheritable*/
#define	KDM_IOC_CLEARINHERIT	(KDM_IOC + 20)	/* mark as not inheritable */
#define	KDM_IOC_SETFILEATTR	(KDM_IOC + 21)	/* invisible setattr */
#define	KDM_IOC_SETEVENTLIST	(KDM_IOC + 22)	/* event enable */
#define	KDM_IOC_GETEVENTLIST	(KDM_IOC + 23)	/* event list */
#define	KDM_IOC_GETDIRATTR	(KDM_IOC + 24)	/* invisible readdir */
#define	KDM_IOC_GETNEXTEVENT	(KDM_IOC + 25)	/* event get */
#define	KDM_IOC_RESPONDEVENT	(KDM_IOC + 26)	/* event respond */
#define	KDM_IOC_MOVEEVENT	(KDM_IOC + 27)	/* move event */
#define	KDM_IOC_QUERYSESSION	(KDM_IOC + 28)	/* return session name */
#define	KDM_IOC_QUERYRIGHT	(KDM_IOC + 29)	/* check for a right */
#define	KDM_IOC_PUNCHHOLE	(KDM_IOC + 30)	/* punch a hole */
#define	KDM_IOC_FINDEVENTMSG	(KDM_IOC + 31)	/* return message for event */
#define	KDM_IOC_SENDMSG		(KDM_IOC + 32)	/* add a user event */
#define	KDM_IOC_GETDISP		(KDM_IOC + 33)	/* get event disposition */
#define	KDM_IOC_SETDISP		(KDM_IOC + 34)	/* set event disposition */
#define	KDM_IOC_ATTACHEVENT	(KDM_IOC + 35)	/* attach to an event */
#define	KDM_IOC_GETSESSIONINFO	(KDM_IOC + 36)	/* get session info */
#define	KDM_IOC_GETEVENTINFO	(KDM_IOC + 37)	/* get event info */
#define	KDM_IOC_LISTSESSIONS	(KDM_IOC + 38)	/* list sessions */
#define	KDM_IOC_FDTOHANDLE	(KDM_IOC + 39)	/* fdtohandle */
#define	KDM_IOC_SETRESIDENT	(KDM_IOC + 40)	/* set_resident */
#define	KDM_IOC_CREATEUSER	(KDM_IOC + 41)	/* create msg with thread */
#define KDM_IOC_GETBULKALL	(KDM_IOC + 42)	/* bulkall attribute get */
#define KDM_IOC_SYNC		(KDM_IOC + 43)	/* sync by handle */
#define KDM_IOC_SETONDESTROY	(KDM_IOC + 44)	/* set dm attr on destroy */
#define KDM_IOC_PATHTOHANDLE	(KDM_IOC + 45)	/* pathtohandle : nofollow */
#define KDM_IOC_CREATBYHAN	(KDM_IOC + 46)	/* create object by handle */
#define KDM_IOC_VER_STR		(KDM_IOC + 47)	/* get version string */
#define KDM_IOC_EVENTQUERY	(KDM_IOC + 48)	/* query event thread state */
/* extensions */
#define KDM_IOC_GETCONFIG	(KDM_IOC + 49)	/* query implementation cfg */

struct kdm_ioctl_param {
	int	oplen;
	int	aplen;
	int	(*func)();
};

struct	kdm_pathtohandleargs {
	kdm_handle_t	*handlep;
	char		*path;
};

struct	kdm_fdtohandleargs {
	kdm_handle_t	*handlep;
	int		fdes;
};

struct kdm_open_session_args {
	dm_sessid_t	old_session;
	dm_sessid_t	*new_session;
	int		newnamlen;
	char		newname[DM_MAXNAME];
};

struct kdm_ver_str_args {
	dm_size_t	buflen;
	caddr_t		bufp;
};

struct kdm_query_session_args {
	dm_sessid_t	id;
	dm_size_t	buflen;
	char		*buf;
	dm_size_t	*rlenp;
};

struct kdm_list_sessions_args {
	int		numentries;
	dm_sessid_t	*sidp;
	int		*rnump;
};

struct kdm_getall_tokens_args {
	dm_sessid_t	id;
	dm_token_t	*tokenbuf;
	int		numentries;
	int		*rnump;
};

struct kdm_request_right_args {
	dm_sessid_t	id;
	dm_token_t	token;
	kdm_handle_t	handle;
	short		flags;
	char		right;
	char		noblock;
};

struct kdm_query_right_args {
	dm_sessid_t		id;
	kdm_handle_t		handle;
	dm_token_t		token;
	struct kdm_lockinfo	*infop;
};

struct kdm_get_allocinfo_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	dm_off_t	off;
	int		nextents;
	dm_off_t	*offsp;
	dm_extent_t	*extentp;
	int		*rextentp;
	int		*retvalp;
};

struct kdm_punch_hole_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		op;
	dm_off_t	off;
	dm_size_t	len;
	dm_off_t	*roffp;
	dm_size_t	*rlenp;
};

struct kdm_invisread_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	dm_off_t	off;
	dm_size_t	len;
	char		*buf;
	int		flag;	/* buffered write */
};

struct kdm_sync_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		flags;
};

struct kdm_get_region_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		nregions;
	dm_region_t	*regbufp;
	int		*ret_regions;
};

struct kdm_set_region_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		nregions;
	dm_region_t	*regbufp;
	int		*exactflagp;
};

struct kdm_get_dirattr_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	dm_u32_t	mask;
	dm_attrloc_t	*rlocp;
	dm_attrloc_t	loc;
	dm_stat_t	*bufp;
	dm_size_t	buflen;
	int		*nretlen;
	int		*retvalp;
};

struct kdm_get_bulkattr_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		mask;
	dm_attrloc_t	*rlocp;
	dm_attrloc_t	loc;
	dm_stat_t	*bufp;
	int		nelem;
	int		*nretp;
	int		*retvalp;
};
typedef struct kdm_get_bulkattr_args	kdm_get_bulkattr_args_t;

struct kdm_get_bulkall_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		mask;
	dm_attrloc_t	*rlocp;
	dm_attrloc_t	loc;
	dm_attrname_t	attrname;
	dm_stat_t	*bufp;
	dm_size_t	len;
	dm_size_t	*rlenp;
	int		*retvalp;
};
typedef struct kdm_get_bulkall_args	kdm_get_bulkall_args_t;

struct kdm_get_dmattr_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	char		attrname[9];
	dm_updtimes_t	dmtime;
	void		*buf;
	dm_size_t	len;
	dm_size_t	*rlenp;
};

struct kdm_set_resident_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		res;
};

struct kdm_getattrtimes_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	time_t		*tp;
};

struct kdm_list_dmattr_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	dm_inherit_t	*bufp;
	u_int		nelem;
	u_int		*nelemp;
};

struct kdm_set_inherit_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	char		attrname[9];
	mode_t		mode;
};

struct kdm_setondestroy_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	char		attrname[9];
	int		length;
	int		flag;
};
typedef struct kdm_setondestroy_args	kdm_setondestroy_args_t;

struct kdm_fileattr_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	dm_fileattr_t	attrstruct;
};

struct kdm_set_eventlist_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		eventmask;
	int		maxevent;
	int		*retmaskp;
};

struct kdm_getall_disp_args {
	dm_sessid_t	id;
	dm_size_t	buflen;
	dm_dispinfo_t	*dispbuf;
	dm_size_t	*rlenp;
};

struct kdm_getmountinfo_args {
	dm_sessid_t	id;
	dm_token_t	token;
	kdm_handle_t	handle;
	dm_size_t	len;
	char		*buf;
	dm_size_t	*rlenp;
};

struct kdm_get_eventlist_args {
	dm_sessid_t	id;
	kdm_handle_t	handle;
	dm_token_t	token;
	int		*eventmaskp;
};

struct kdm_get_nextevent_args {
	dm_sessid_t	id;
	char		*msgbuf;
	dm_size_t	buflen;
	dm_size_t	*rlenp;
	int		maxmsgs;
	int		nowait;
};

struct kdm_find_eventmsg_args {
	dm_sessid_t	id;
	dm_token_t	token;
	dm_size_t	buflen;
	dm_eventmsg_t	*msgbuf;
	dm_size_t	*rlenp;
};

struct kdm_respond_event_args {
	dm_sessid_t	id;
	dm_token_t	token;
	void		*buf;
	dm_size_t	buflen;
	int		action;
	int		err;
};

struct kdm_create_msg_args {
	dm_sessid_t	id;
	int		type;
	dm_size_t	buflen;
	char		*msgbuf;
	dm_token_t	*tokenp;
};

struct kdm_attach_event_args {
	dm_sessid_t	id;
	dm_token_t	token;
};

struct kdm_move_event_args {
	dm_token_t	token;
	dm_sessid_t	fromid;
	dm_sessid_t	toid;
	dm_token_t	*rtokenp;
};

struct kdm_get_sessioninfo_args {
	dm_sessid_t		id;
	struct kdm_sessinfo	*sesinfop;
	struct kdm_dispinfo	*infop;
	int			nentries;
	int			*rnump;
};

struct kdm_get_eventinfo_args {
	dm_sessid_t		id;
	dm_token_t		token;
	struct kdm_eventinfo	*eventinfop;
	struct kdm_lockinfo	*lockbuf;
	int			numentries;
	int			*rnump;
};

struct kdm_posix_byhandle_args {
	dm_sessid_t	id;
	dm_token_t	token;
	kdm_handle_t	dhandle;
	kdm_handle_t	handle;
	int		opcode;
	char		*name;
	int		namelen;
	char		*symlink;
	int		linklen;
};

struct kdm_eventquery_args {
	dm_sessid_t	sid;
	dm_token_t	token;
	dm_eventquery_t	queryname;
	dm_size_t	*value;
};

struct	kdm_get_config_args {
	kdm_handle_t	handle;
	dm_config_t	flag;
	dm_size_t	*retvalp;
};

/*
 * opcode values for the above
 */

#define	DM_CREATE_FILE	1
#define	DM_CREATE_DIR	2
#define	DM_CREATE_SYML	3

#endif	/* _H_KDM_DMI */
