#ifndef _SYS_DEVCACHE_IMPL_H
#define _SYS_DEVCACHE_IMPL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/list.h>
#define NVPF_HDR_MAGIC 0xdeb1dcac
#define NVPF_HDR_VERSION 1
#define NVPF_HDR_SIZE 128
typedef struct nvpacked_file_hdr {
union {
struct nvfp_hdr {
uint32_t magic;
int32_t version;
int64_t size;
uint16_t hdr_chksum;
uint16_t chksum;
} nvpf;
uchar_t nvpf_pad[NVPF_HDR_SIZE];
} un;
} nvpf_hdr_t;
#define nvpf_magic un.nvpf.magic
#define nvpf_version un.nvpf.version
#define nvpf_size un.nvpf.size
#define nvpf_hdr_chksum un.nvpf.hdr_chksum
#define nvpf_chksum un.nvpf.chksum
#ifdef _KERNEL
typedef struct kfile {
struct vnode *kf_vp;
int kf_vnflags;
char *kf_fname;
offset_t kf_fpos;
int kf_state;
} kfile_t;
typedef struct nvfiledesc nvfd_t;
struct nvfiledesc {
nvf_ops_t *nvf_ops;
int nvf_flags;
list_t nvf_data_list;
krwlock_t nvf_lock;
list_node_t nvf_link;
};
#define NVF_F_DIRTY 0x01
#define NVF_F_FLUSHING 0x02
#define NVF_F_ERROR 0x04
#define NVF_F_READONLY 0x10
#define NVF_F_CREATE_MSG 0x20
#define NVF_F_REBUILD_MSG 0x40
#define NVF_IS_DIRTY(nvfd) ((nvfd)->nvf_flags & NVF_F_DIRTY)
#define NVF_MARK_DIRTY(nvfd) ((nvfd)->nvf_flags |= NVF_F_DIRTY)
#define NVF_CLEAR_DIRTY(nvfd) ((nvfd)->nvf_flags &= ~NVF_F_DIRTY)
#define NVF_IS_READONLY(nvfd) ((nvfd)->nvf_flags & NVF_F_READONLY)
#define NVF_MARK_READONLY(nvfd) ((nvfd)->nvf_flags |= NVF_F_READONLY)
#define nvf_cache_path nvf_ops->nvfr_cache_path
#define nvf_unpack_nvlist nvf_ops->nvfr_unpack_nvlist
#define nvf_pack_list nvf_ops->nvfr_pack_list
#define nvf_list_free nvf_ops->nvfr_list_free
#define nvf_write_complete nvf_ops->nvfr_write_complete
extern int kfio_report_error;
#define MAX_SUFFIX_LEN 4
#define NEW_FILENAME_SUFFIX "new"
#ifdef DEBUG
#define NVPDAEMON_DEBUG(args) { if (nvpdaemon_debug) cmn_err args; }
#define KFDEBUG(args) { if (kfio_debug) cmn_err args; }
#define KFDEBUG1(args) { if (kfio_debug > 1) cmn_err args; }
#define KFDEBUG2(args) { if (kfio_debug > 2) cmn_err args; }
#define KFDUMP(args) { if (kfio_debug > 2) args; }
#else
#define NVPDAEMON_DEBUG(args)
#define KFDEBUG(args)
#define KFDEBUG1(args)
#define KFDEBUG2(args)
#define KFDUMP(args)
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif