/*
 * (C) 2001 Clemson University and The University of Chicago
 *
 * See COPYING in top-level directory.
 */

/*
 *  Definitions of downcalls used in Linux kernel module.
 */

#ifndef __DOWNCALL_H
#define __DOWNCALL_H

/*
 * Sanitized the device-client core interaction
 * for clean 32-64 bit usage
 */
struct orangefs_io_response {
	__s64 amt_complete;
};

struct orangefs_lookup_response {
	struct orangefs_object_kref refn;
};

struct orangefs_create_response {
	struct orangefs_object_kref refn;
};

struct orangefs_symlink_response {
	struct orangefs_object_kref refn;
};

struct orangefs_getattr_response {
	struct ORANGEFS_sys_attr_s attributes;
	char link_target[ORANGEFS_NAME_MAX];
};

struct orangefs_mkdir_response {
	struct orangefs_object_kref refn;
};

/*
 * duplication of some system interface structures so that I don't have
 * to allocate extra memory
 */
struct orangefs_dirent {
	char *d_name;
	int d_length;
	struct orangefs_khandle khandle;
};

struct orangefs_statfs_response {
	__s64 block_size;
	__s64 blocks_total;
	__s64 blocks_avail;
	__s64 files_total;
	__s64 files_avail;
};

struct orangefs_fs_mount_response {
	__s32 fs_id;
	__s32 id;
	struct orangefs_khandle root_khandle;
};

/* the getxattr response is the attribute value */
struct orangefs_getxattr_response {
	__s32 val_sz;
	__s32 __pad1;
	char val[ORANGEFS_MAX_XATTR_VALUELEN];
};

/* the listxattr response is an array of attribute names */
struct orangefs_listxattr_response {
	__s32 returned_count;
	__s32 __pad1;
	__u64 token;
	char key[ORANGEFS_MAX_XATTR_LISTLEN * ORANGEFS_MAX_XATTR_NAMELEN];
	__s32 keylen;
	__s32 __pad2;
	__s32 lengths[ORANGEFS_MAX_XATTR_LISTLEN];
};

struct orangefs_param_response {
	__s64 value;
};

#define PERF_COUNT_BUF_SIZE 4096
struct orangefs_perf_count_response {
	char buffer[PERF_COUNT_BUF_SIZE];
};

#define FS_KEY_BUF_SIZE 4096
struct orangefs_fs_key_response {
	__s32 fs_keylen;
	__s32 __pad1;
	char fs_key[FS_KEY_BUF_SIZE];
};

struct orangefs_downcall_s {
	__s32 type;
	__s32 status;
	/* currently trailer is used only by readdir */
	__s64 trailer_size;
	char *trailer_buf;

	union {
		struct orangefs_io_response io;
		struct orangefs_lookup_response lookup;
		struct orangefs_create_response create;
		struct orangefs_symlink_response sym;
		struct orangefs_getattr_response getattr;
		struct orangefs_mkdir_response mkdir;
		struct orangefs_statfs_response statfs;
		struct orangefs_fs_mount_response fs_mount;
		struct orangefs_getxattr_response getxattr;
		struct orangefs_listxattr_response listxattr;
		struct orangefs_param_response param;
		struct orangefs_perf_count_response perf_count;
		struct orangefs_fs_key_response fs_key;
	} resp;
};

struct orangefs_readdir_response_s {
	__u64 token;
	__u64 directory_version;
	__u32 __pad2;
	__u32 orangefs_dirent_outcount;
	struct orangefs_dirent *dirent_array;
};

#endif /* __DOWNCALL_H */
