146 lines
3.2 KiB
C
146 lines
3.2 KiB
C
/*
|
|
* tegra_adspff.h - Shared ADSPFF interface between Tegra ADSP File
|
|
* System driver and ADSP side user space code.
|
|
* Copyright (c) 2016-2019 NVIDIA Corporation. All rights reserved.
|
|
*
|
|
* NVIDIA Corporation and its licensors retain all intellectual property
|
|
* and proprietary rights in and to this software, related documentation
|
|
* and any modifications thereto. Any use, reproduction, disclosure or
|
|
* distribution of this software and related documentation without an express
|
|
* license agreement from NVIDIA Corporation is strictly prohibited.
|
|
*/
|
|
|
|
|
|
#ifndef _TEGRA_ADSPFF_H_
|
|
#define _TEGRA_ADSPFF_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/******************************************************************************
|
|
* Defines
|
|
******************************************************************************/
|
|
|
|
|
|
/* TODO: fine tuning */
|
|
#define ADSPFF_MSG_QUEUE_WSIZE 1024
|
|
#define ADSPFF_WRITE_DATA_SIZE 512
|
|
#define ADSPFF_READ_DATA_SIZE 1024
|
|
#define ADSPFF_SHARED_BUFFER_SIZE (128 * 1024)
|
|
#define ADSPFF_MAX_FILENAME_SIZE (250)
|
|
|
|
/**
|
|
* adspff_mbx_cmd: commands exchanged using mailbox.
|
|
*
|
|
* @adspff_cmd_fopen: open file on host
|
|
* @adspff_cmd_fclose: close file on host
|
|
* @adspff_cmd_fwrite: write data in an open file on host
|
|
* @adspff_cmd_fread: read data from an open file on host
|
|
*/
|
|
|
|
enum adspff_mbx_cmd {
|
|
adspff_cmd_fopen = 0,
|
|
adspff_cmd_fclose,
|
|
adspff_cmd_fwrite,
|
|
adspff_cmd_fread,
|
|
adspff_cmd_fopen_recv,
|
|
adspff_cmd_ack,
|
|
adspff_cmd_fsize,
|
|
};
|
|
|
|
|
|
/******************************************************************************
|
|
* Types
|
|
******************************************************************************/
|
|
|
|
/* supported message payloads */
|
|
struct fopen_msg_t {
|
|
uint8_t fname[ADSPFF_MAX_FILENAME_SIZE];
|
|
uint8_t modes[3];
|
|
};
|
|
|
|
struct fwrite_msg_t {
|
|
int64_t file;
|
|
int32_t size;
|
|
};
|
|
|
|
struct fread_msg_t {
|
|
int64_t file;
|
|
int32_t size;
|
|
};
|
|
|
|
struct fclose_msg_t {
|
|
int64_t file;
|
|
};
|
|
|
|
struct fopen_recv_msg_t {
|
|
int64_t file;
|
|
};
|
|
|
|
struct fsize_msg_t {
|
|
int64_t file;
|
|
};
|
|
|
|
struct ack_msg_t {
|
|
int32_t size;
|
|
};
|
|
|
|
#pragma pack(4)
|
|
/* app message definition */
|
|
union adspff_message_t {
|
|
msgq_message_t msgq_msg;
|
|
struct {
|
|
int32_t header[MSGQ_MESSAGE_HEADER_WSIZE];
|
|
union {
|
|
struct fopen_msg_t fopen_msg;
|
|
struct fwrite_msg_t fwrite_msg;
|
|
struct fread_msg_t fread_msg;
|
|
struct fclose_msg_t fclose_msg;
|
|
struct fopen_recv_msg_t fopen_recv_msg;
|
|
struct ack_msg_t ack_msg;
|
|
struct fsize_msg_t fsize_msg;
|
|
} payload;
|
|
} msg;
|
|
};
|
|
|
|
/* app queue definition */
|
|
union adspff_msgq_t {
|
|
msgq_t msgq;
|
|
struct {
|
|
int32_t header[MSGQ_HEADER_WSIZE];
|
|
int32_t queue[ADSPFF_MSG_QUEUE_WSIZE];
|
|
} app_msgq;
|
|
};
|
|
#pragma pack()
|
|
|
|
#define MSGQ_MSG_SIZE(x) \
|
|
(((sizeof(x) + sizeof(int32_t) - 1) & (~(sizeof(int32_t)-1))) >> 2)
|
|
|
|
|
|
/**
|
|
* ADSPFF state structure shared between ADSP & CPU
|
|
*/
|
|
typedef struct {
|
|
uint32_t write_index;
|
|
uint32_t read_index;
|
|
uint8_t data[ADSPFF_SHARED_BUFFER_SIZE];
|
|
} adspff_shared_buffer_t;
|
|
|
|
struct adspff_shared_state_t {
|
|
uint16_t mbox_id;
|
|
union adspff_msgq_t msgq_recv;
|
|
union adspff_msgq_t msgq_send;
|
|
adspff_shared_buffer_t write_buf;
|
|
adspff_shared_buffer_t read_buf;
|
|
};
|
|
|
|
#define ADSPFF_SHARED_STATE(x) \
|
|
((struct adspff_shared_state_t *)x)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* #ifndef TEGRA_ADSPFF_H_ */
|