/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/kernel/sys/xfops.h 1.2                                  */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2015                   */
/* 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                                                     */
/* @(#)77     1.2  src/bos/kernel/sys/xfops.h, syslfs, bos720, 1522A_720 5/23/15 07:55:32 */
#ifndef _H_XFOPS
#define _H_XFOPS

/*
 * COMPONENT_NAME: SYSLFS - Logical File System
 */

#include <sys/types.h>
#include <sys/cred.h>
#include <sys/uio.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef _KERNEL

/* File system operation external validator */
typedef struct fskv {
	int	kv_version;			/* structure version */
	char	kv_name[12];			/* validator id */
	int	(*kv_open)(struct xfid *xfp,	/* open callout */
			long flags,
			void *nrp,
			cred_ext_t *crxp);
	int	(*kv_setattr)(struct xfid *xfp,	/* setattr callout */
			long op,
			long arg1,
			long arg2,
			long arg3,
			void *nrp,
			cred_ext_t *crxp);
} fskv_t;

/* Version numbering */
/* Version 1 supports only open and setattr callouts */
#define FSKV_VERSION_1	1
#define FSKV_VERSION	FSKV_VERSION_1
/* Special version number indicating no validator is configured */
#define FSKV_NONE	-1

/* External file identifier struct */
typedef struct xfid {
	fsid_t	x_fsid;
	fid_t	x_fid;
} xfid_t;

/* Globals */
extern int32 fskvState;
extern fskv_t fskvalidator;

/* Global state values */
#define KV_UNCONFIGURED	0
#define KV_INITIALIZING	1
#define KV_CONFIGURED	2


#ifndef _NO_PROTO
int	fskv_reg(fskv_t *fs_kv, ulong options);
int	fskv_unreg(ulong options);
int     nameToXfid(char *pathname, struct xfid *xfp,
		   struct vattr *vap, long flags);
int     xfidToName(struct xfid *xfp, void *nrp, char *pathname,
		   unsigned int pbuflen, long flags);
#else
int	fskv_reg();
int	fskv_unreg();
int     nameToXfid();
int     xfidToName();
#endif /*_NO_PROTO*/
#endif /*_KERNEL*/

#ifdef __cplusplus
}
#endif

#endif /* _H_XFOPS */
