root/arch/mips/fw/cfe/cfe_api_int.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2000, 2001, 2002 Broadcom Corporation
 */
#ifndef CFE_API_INT_H
#define CFE_API_INT_H

/*
 * Constants.
 */
#define CFE_CMD_FW_GETINFO      0
#define CFE_CMD_FW_RESTART      1
#define CFE_CMD_FW_BOOT         2
#define CFE_CMD_FW_CPUCTL       3
#define CFE_CMD_FW_GETTIME      4
#define CFE_CMD_FW_MEMENUM      5
#define CFE_CMD_FW_FLUSHCACHE   6

#define CFE_CMD_DEV_GETHANDLE   9
#define CFE_CMD_DEV_ENUM        10
#define CFE_CMD_DEV_OPEN        11
#define CFE_CMD_DEV_INPSTAT     12
#define CFE_CMD_DEV_READ        13
#define CFE_CMD_DEV_WRITE       14
#define CFE_CMD_DEV_IOCTL       15
#define CFE_CMD_DEV_CLOSE       16
#define CFE_CMD_DEV_GETINFO     17

#define CFE_CMD_ENV_ENUM        20
#define CFE_CMD_ENV_GET         22
#define CFE_CMD_ENV_SET         23
#define CFE_CMD_ENV_DEL         24

#define CFE_CMD_MAX             32

#define CFE_CMD_VENDOR_USE      0x8000  /* codes above this are for customer use */

/*
 * Structures.
 */

/* eeek, signed "pointers" */
typedef s64 cfe_xptr_t;

struct xiocb_buffer {
        u64 buf_offset;         /* offset on device (bytes) */
        cfe_xptr_t  buf_ptr;            /* pointer to a buffer */
        u64 buf_length;         /* length of this buffer */
        u64 buf_retlen;         /* returned length (for read ops) */
        u64 buf_ioctlcmd;       /* IOCTL command (used only for IOCTLs) */
};

struct xiocb_inpstat {
        u64 inp_status;         /* 1 means input available */
};

struct xiocb_envbuf {
        s64 enum_idx;           /* 0-based enumeration index */
        cfe_xptr_t name_ptr;            /* name string buffer */
        s64 name_length;                /* size of name buffer */
        cfe_xptr_t val_ptr;             /* value string buffer */
        s64 val_length;         /* size of value string buffer */
};

struct xiocb_cpuctl {
        u64 cpu_number;         /* cpu number to control */
        u64 cpu_command;        /* command to issue to CPU */
        u64 start_addr;         /* CPU start address */
        u64 gp_val;             /* starting GP value */
        u64 sp_val;             /* starting SP value */
        u64 a1_val;             /* starting A1 value */
};

struct xiocb_time {
        s64 ticks;              /* current time in ticks */
};

struct xiocb_exitstat{
        s64 status;
};

struct xiocb_meminfo {
        s64 mi_idx;             /* 0-based enumeration index */
        s64 mi_type;            /* type of memory block */
        u64 mi_addr;            /* physical start address */
        u64 mi_size;            /* block size */
};

struct xiocb_fwinfo {
        s64 fwi_version;                /* major, minor, eco version */
        s64 fwi_totalmem;       /* total installed mem */
        s64 fwi_flags;          /* various flags */
        s64 fwi_boardid;                /* board ID */
        s64 fwi_bootarea_va;    /* VA of boot area */
        s64 fwi_bootarea_pa;    /* PA of boot area */
        s64 fwi_bootarea_size;  /* size of boot area */
        s64 fwi_reserved1;
        s64 fwi_reserved2;
        s64 fwi_reserved3;
};

struct cfe_xiocb {
        u64 xiocb_fcode;        /* IOCB function code */
        s64 xiocb_status;       /* return status */
        s64 xiocb_handle;       /* file/device handle */
        u64 xiocb_flags;        /* flags for this IOCB */
        u64 xiocb_psize;        /* size of parameter list */
        union {
                /* buffer parameters */
                struct xiocb_buffer xiocb_buffer;

                /* input status parameters */
                struct xiocb_inpstat xiocb_inpstat;

                /* environment function parameters */
                struct xiocb_envbuf xiocb_envbuf;

                /* CPU control parameters */
                struct xiocb_cpuctl xiocb_cpuctl;

                /* timer parameters */
                struct xiocb_time xiocb_time;

                /* memory arena info parameters */
                struct xiocb_meminfo xiocb_meminfo;

                /* firmware information */
                struct xiocb_fwinfo xiocb_fwinfo;

                /* Exit Status */
                struct xiocb_exitstat xiocb_exitstat;
        } plist;
};

#endif /* CFE_API_INT_H */