root/arch/sparc/include/uapi/asm/oradax.h
/* SPDX-License-Identifier: GPL-2.0-or-later WITH Linux-syscall-note */
/*
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
 */

/*
 * Oracle DAX driver API definitions
 */

#ifndef _ORADAX_H
#define _ORADAX_H

#include <linux/types.h>

#define CCB_KILL 0
#define CCB_INFO 1
#define CCB_DEQUEUE 2

struct dax_command {
        __u16 command;          /* CCB_KILL/INFO/DEQUEUE */
        __u16 ca_offset;        /* offset into mmapped completion area */
};

struct ccb_kill_result {
        __u16 action;           /* action taken to kill ccb */
};

struct ccb_info_result {
        __u16 state;            /* state of enqueued ccb */
        __u16 inst_num;         /* dax instance number of enqueued ccb */
        __u16 q_num;            /* queue number of enqueued ccb */
        __u16 q_pos;            /* ccb position in queue */
};

struct ccb_exec_result {
        __u64   status_data;    /* additional status data (e.g. bad VA) */
        __u32   status;         /* one of DAX_SUBMIT_* */
};

union ccb_result {
        struct ccb_exec_result exec;
        struct ccb_info_result info;
        struct ccb_kill_result kill;
};

#define DAX_MMAP_LEN            (16 * 1024)
#define DAX_MAX_CCBS            15
#define DAX_CCB_BUF_MAXLEN      (DAX_MAX_CCBS * 64)
#define DAX_NAME                "oradax"

/* CCB_EXEC status */
#define DAX_SUBMIT_OK                   0
#define DAX_SUBMIT_ERR_RETRY            1
#define DAX_SUBMIT_ERR_WOULDBLOCK       2
#define DAX_SUBMIT_ERR_BUSY             3
#define DAX_SUBMIT_ERR_THR_INIT         4
#define DAX_SUBMIT_ERR_ARG_INVAL        5
#define DAX_SUBMIT_ERR_CCB_INVAL        6
#define DAX_SUBMIT_ERR_NO_CA_AVAIL      7
#define DAX_SUBMIT_ERR_CCB_ARR_MMU_MISS 8
#define DAX_SUBMIT_ERR_NOMAP            9
#define DAX_SUBMIT_ERR_NOACCESS         10
#define DAX_SUBMIT_ERR_TOOMANY          11
#define DAX_SUBMIT_ERR_UNAVAIL          12
#define DAX_SUBMIT_ERR_INTERNAL         13

/* CCB_INFO states - must match HV_CCB_STATE_* definitions */
#define DAX_CCB_COMPLETED       0
#define DAX_CCB_ENQUEUED        1
#define DAX_CCB_INPROGRESS      2
#define DAX_CCB_NOTFOUND        3

/* CCB_KILL actions - must match HV_CCB_KILL_* definitions */
#define DAX_KILL_COMPLETED      0
#define DAX_KILL_DEQUEUED       1
#define DAX_KILL_KILLED         2
#define DAX_KILL_NOTFOUND       3

#endif /* _ORADAX_H */