/*******************************************************************************
* Copyright (C) 2018 Cadence Design Systems, Inc.
* 
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to use this Software with Cadence processor cores only and 
* not with any other processors and platforms, subject to
* the following conditions:
* 
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

******************************************************************************/

/*******************************************************************************
 * xf-shmem.h
 *
 * Definitions for Xtensa SHMEM configuration
 *
 *******************************************************************************/

#ifndef __XF_H
#error "xf-shmem.h mustn't be included directly"
#endif

/*******************************************************************************
 * Memory structures
 ******************************************************************************/

/* ...data managed by host CPU (remote) - in case of shunt it is a IPC layer */
struct xf_proxy_host_data
{
    /* ...command queue */
    xf_proxy_message_t      command[XF_PROXY_MESSAGE_QUEUE_LENGTH];
    
    /* ...writing index into command queue */
    u32                     cmd_write_idx;
    
    /* ...reading index for response queue */
    u32                     rsp_read_idx;
#ifdef XAF_ENABLE_NON_HIKEY
}   __attribute__((__packed__, __aligned__(XF_PROXY_ALIGNMENT)));
#else
}/*   __attribute__((__packed__, __aligned__(XF_PROXY_ALIGNMENT)))*/;
#endif

/* ...data managed by DSP (local) */
struct xf_proxy_dsp_data
{
    /* ...response queue */
    xf_proxy_message_t      response[XF_PROXY_MESSAGE_QUEUE_LENGTH];
    
    /* ...writing index into response queue */
    u32                     rsp_write_idx;
    
    /* ...reading index for command queue */
    u32                     cmd_read_idx;
#ifdef XAF_ENABLE_NON_HIKEY
}   __attribute__((__packed__, __aligned__(XF_PROXY_ALIGNMENT)));
#else
}/*   __attribute__((__packed__, __aligned__(XF_PROXY_ALIGNMENT)))*/;
#endif
/* ...shared memory data */
typedef struct xf_shmem_data 
{
    /* ...outgoing data (maintained by host CPU (remote side)) */
#ifdef XAF_ENABLE_NON_HIKEY
    struct xf_proxy_host_data   remote      __xf_shmem__;
    
    /* ...ingoing data (maintained by DSP (local side)) */
    struct xf_proxy_dsp_data    local       __xf_shmem__;

    /* ...shared memory pool (page-aligned; why? we map memory to user-space) */
    u8                          buffer[XF_CFG_REMOTE_IPC_POOL_SIZE]   __attribute__((__aligned__(4096)));
#else
    /* ...outgoing data (maintained by host CPU (remote side)) */
    struct xf_proxy_host_data   remote/*      __xf_shmem__*/;
    
    /* ...ingoing data (maintained by DSP (local side)) */
    struct xf_proxy_dsp_data    local/*       __xf_shmem__*/;

    /* ...shared memory pool (page-aligned; why? we map memory to user-space) */
    uint8_t*                          buffer;
#endif

}   xf_shmem_data_t;

/*******************************************************************************
 * Shared memory accessors
 ******************************************************************************/

/* ...shared memory pointer for a core */
#define XF_SHMEM_DATA(core)                         \
    ((xf_shmem_data_t *)XF_CORE_DATA(core)->shmem)

/* ...atomic reading */
#define XF_PROXY_READ_ATOMIC(var)                   \
    ({ XF_PROXY_INVALIDATE(&(var), sizeof(var)); (var); })

/* ...atomic writing */
#define XF_PROXY_WRITE_ATOMIC(var, value)           \
    ({(var) = (value); XF_PROXY_FLUSH(&(var), sizeof(var)); (value); })

/* ...accessors */
#define XF_PROXY_READ(core, field)                  \
    __XF_PROXY_READ_##field(XF_SHMEM_DATA(core))

#define XF_PROXY_WRITE(core, field, v)              \
    __XF_PROXY_WRITE_##field(XF_SHMEM_DATA(core), (v))

/* ...individual fields accessors */
#define __XF_PROXY_READ_cmd_write_idx(proxy)        \
    XF_PROXY_READ_ATOMIC(proxy->remote.cmd_write_idx)

#define __XF_PROXY_READ_cmd_read_idx(proxy)         \
    proxy->local.cmd_read_idx

#define __XF_PROXY_READ_rsp_write_idx(proxy)        \
    proxy->local.rsp_write_idx

#define __XF_PROXY_READ_rsp_read_idx(proxy)         \
    XF_PROXY_READ_ATOMIC(proxy->remote.rsp_read_idx)

/* ...individual fields accessors */
#define __XF_PROXY_WRITE_cmd_write_idx(proxy, v)    \
    XF_PROXY_WRITE_ATOMIC(proxy->remote.cmd_write_idx, v)

#define __XF_PROXY_WRITE_cmd_read_idx(proxy, v)     \
    XF_PROXY_WRITE_ATOMIC(proxy->local.cmd_read_idx, v)

#define __XF_PROXY_WRITE_rsp_read_idx(proxy, v)     \
    XF_PROXY_WRITE_ATOMIC(proxy->remote.rsp_read_idx, v)

#define __XF_PROXY_WRITE_rsp_write_idx(proxy, v)    \
    XF_PROXY_WRITE_ATOMIC(proxy->local.rsp_write_idx, v)

/* ...command buffer accessor */
#define XF_PROXY_COMMAND(core, idx)                 \
    (&XF_SHMEM_DATA((core))->remote.command[(idx)])

/* ...response buffer accessor */
#define XF_PROXY_RESPONSE(core, idx)                \
    (&XF_SHMEM_DATA((core))->local.response[(idx)])

/*******************************************************************************
 * Platform-specific SHMEM enable status
 ******************************************************************************/

static inline int xf_shmem_enabled(u32 core)
{
    return (core == 0);
}

/*******************************************************************************
 * API functions
 ******************************************************************************/

/* ...process shared memory interface on given DSP core */
extern void xf_shmem_process_queues(u32 core);

/* ...completion callback for message originating from remote proxy */
extern void xf_msg_proxy_complete(xf_message_t *m);

/* ...initialize shared memory interface (DSP side) */
extern int xf_shmem_init(u32 core);
