aboutsummaryrefslogblamecommitdiffstats
blob: 8082d76d151e40ae768bc829f6bb2d4e7e271077 (plain) (tree)
















































































































































                                                                               
/*
 * Copyright (c) 2013, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef __DCE_RPC_H__
#define __DCE_RPC_H__

/* RPC layer types.. these define the payload of messages between IPUMM
 * and MPU.  This should be kept in sync between firmware build and
 * driver.
 *
 * TODO: xxx_control(XDM_GETVERSION) is a bit awkward to deal with, because
 * this seems to be the one special case where status->data is used..
 * possibly we should define a special ioctl and msg to handle this case.
 */

#define DCE_DEVICE_NAME "rpmsg-dce"

/* Message-Ids:
 */
//#define DCE_RPC_CONNECT         (0x80000000 | 00) Connect not needed anymore.
typedef enum dce_rpc_call {
    DCE_RPC_ENGINE_OPEN = 0,
    DCE_RPC_ENGINE_CLOSE,
    DCE_RPC_CODEC_CREATE,
    DCE_RPC_CODEC_CONTROL,
    DCE_RPC_CODEC_GET_VERSION,
    DCE_RPC_CODEC_PROCESS,
    DCE_RPC_CODEC_DELETE
} dce_rpc_call;


typedef enum dce_codec_type {
    OMAP_DCE_VIDENC2 = 1,
    OMAP_DCE_VIDDEC3 = 2
} dce_codec_type;

/* Structures of RPC */
typedef struct dce_connect {
    uint32_t chipset_id;
    uint32_t debug;
} dce_connect;

typedef struct dce_engine_open {
    char          name[32]; /* engine name (in) */
    Engine_Error  error_code;   /* error code (out) */
    Engine_Handle eng_handle;   /* engine handle (out) */
} dce_engine_open;

typedef struct dce_engine_close {
    Engine_Handle eng_handle;   /* engine handle (in) */
} dce_engine_close;

typedef struct dce_codec_create {
    Engine_Handle  engine;
    char           codec_name[32];
    void          *static_params;
    dce_codec_type codec_id;
    void          *codec_handle;
} dce_codec_create;

typedef struct dce_codec_control {
    void          *codec_handle;
    uint32_t       cmd_id;
    void          *dyn_params;
    void          *status;
    dce_codec_type codec_id;
    int32_t        result;
} dce_codec_control;

typedef struct dce_codec_get_version {
    void          *codec_handle;
    void          *dyn_params;
    void          *status;
    void          *version;
    dce_codec_type codec_id;
    int32_t        result;
} dce_codec_get_version;

typedef struct dce_codec_delete {
    void          *codec_handle;
    dce_codec_type codec_id;
} dce_codec_delete;

/*  ---------------------- For GLP DCE -----------------------------*/
/* NOTE: CODEC_PROCESS does somewhat more than the other ioctls, in that it
 * handles buffer mapping/unmapping.  So the inBufs/outBufs are copied inline
 * (with translated addresses in the copy sent inline with codec_process_req).
 * Since we need the inputID from inArgs, and it is a small struct, it is also
 * copied inline.
 *
 * Therefore, the variable length data[] section has the format:
 *    uint8_t reloc[reloc_length * 4];
 *    uint8_t inargs[in_args_length * 4];
 *    uint8_t outbufs[in_bufs_length * 4];
 *    uint8_t inbufs[in_bufs_length * 4];
 */

#define MAX_INPUT_BUF 2 // Need to confirm for interlaced YUVs for Encoders
#define MAX_OUTPUT_BUF 2
#define MAX_TOTAl_BUF (MAX_INPUT_BUF + MAX_OUTPUT_BUF)

/* Struct to be used if approach [3] of Mmrpc call is followed */
typedef struct dce_codec_process {
    void          *codec_handle;
    void          *inBufs;
    void          *outBufs;
    void          *inArgs;
    void          *outArgs;
    int32_t        input_Buf[MAX_INPUT_BUF];
    int32_t        output_Buf[MAX_OUTPUT_BUF];
    dce_codec_type codec_id;
    int32_t        result;
} dce_codec_process;

#endif /* __DCE_RPC_H__ */