276 lines
6.8 KiB
C
276 lines
6.8 KiB
C
|
/*
|
||
|
* tegra_nvfx.h - Shared NVFX interface between Tegra ADSP ALSA driver and
|
||
|
* ADSP side user space code.
|
||
|
*
|
||
|
* Copyright (c) 2015-2018, NVIDIA CORPORATION. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms and conditions of the GNU General Public License,
|
||
|
* version 2, as published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||
|
* more details.
|
||
|
*/
|
||
|
|
||
|
#ifndef _TEGRA_NVFX_H_
|
||
|
#define _TEGRA_NVFX_H_
|
||
|
|
||
|
/**
|
||
|
* variant_t
|
||
|
*
|
||
|
*/
|
||
|
typedef union {
|
||
|
uint64_t ptr;
|
||
|
|
||
|
/* Standard C */
|
||
|
void *pvoid;
|
||
|
char *pchar;
|
||
|
unsigned char *puchar;
|
||
|
short *pshort;
|
||
|
unsigned short *pushort;
|
||
|
long *plong;
|
||
|
unsigned long *pulong;
|
||
|
int *pint;
|
||
|
unsigned int *puint;
|
||
|
float *pfloat;
|
||
|
long long *pllong;
|
||
|
unsigned long long *pullong;
|
||
|
double *pdouble;
|
||
|
|
||
|
/* stdint.h */
|
||
|
int8_t *pint8;
|
||
|
uint8_t *puint8;
|
||
|
int16_t *pint16;
|
||
|
uint16_t *puint16;
|
||
|
int32_t *pint32;
|
||
|
uint32_t *puint32;
|
||
|
} variant_t;
|
||
|
|
||
|
/* Memory can not be used for in-place transform */
|
||
|
#define NVFX_MEM_READ_ACCESS 0x1
|
||
|
|
||
|
/* Memory can only be written to */
|
||
|
#define NVFX_MEM_WRITE_ACCESS 0x2
|
||
|
|
||
|
/* Memory can read from or written to */
|
||
|
#define NVFX_MEM_ALL_ACCESS \
|
||
|
(NVFX_MEM_READ_ACCESS | NVFX_MEM_WRITE_ACCESS)
|
||
|
|
||
|
/**
|
||
|
* nvfx_process_state_t - Required shared process state
|
||
|
*
|
||
|
* @state Current process state (i.e. active, inactive, etc.)
|
||
|
* @count Number invfx_t::process calls
|
||
|
* @ts_last Timestamp of last invfx_t::process call
|
||
|
* @time_total Time spent in all invfx_t::process calls
|
||
|
* @time_high Highest time spent in all invfx_t::process calls
|
||
|
* @time_low Lowest time spent in all invfx_t::process calls
|
||
|
* @time_last Time spent in the last invfx_t::process calls
|
||
|
* @period Actual scheduling period
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
int32_t state;
|
||
|
uint32_t count;
|
||
|
uint64_t ts_last;
|
||
|
uint64_t time_total;
|
||
|
uint32_t time_high;
|
||
|
uint32_t time_low;
|
||
|
uint32_t time_last;
|
||
|
uint32_t period;
|
||
|
} nvfx_process_state_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_pin_state_t - Required shared pin state
|
||
|
*
|
||
|
* @bytes Bytes consumed or produced
|
||
|
* @frames Frames consumed or produced
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
uint64_t bytes;
|
||
|
uint32_t frames;
|
||
|
} nvfx_pin_state_t;
|
||
|
|
||
|
/**
|
||
|
* Pin counts
|
||
|
*
|
||
|
* @NVFX_MAX_INPUT_PINS The maximum number of input pins for an effect
|
||
|
* @NVFX_MAX_OUTPUT_PINS The maximum number of output pins for an effect
|
||
|
*/
|
||
|
#define NVFX_MAX_INPUT_PINS 6
|
||
|
#define NVFX_MAX_OUTPUT_PINS 2
|
||
|
#define NVFX_MAX_RAW_DATA_WSIZE 1024
|
||
|
|
||
|
/**
|
||
|
* nvfx_shared_state_t - Required shared state information
|
||
|
*
|
||
|
* @process invfx_t::process related state
|
||
|
* @input State of input pins
|
||
|
* @output State of output pins
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
nvfx_process_state_t process;
|
||
|
nvfx_pin_state_t input[NVFX_MAX_INPUT_PINS];
|
||
|
nvfx_pin_state_t output[NVFX_MAX_OUTPUT_PINS];
|
||
|
/* custom params */
|
||
|
} nvfx_shared_state_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_call_params_t
|
||
|
*
|
||
|
* @NVFX_MAX_CALL_PARAMS_WSIZE Max size in int32s of unioned call parameters
|
||
|
* @size Size of the call parameters
|
||
|
* @method The index of the function to call
|
||
|
* [custom params] Variable length buffer of parameters e.g.:
|
||
|
* uint32_t custom_params[...]
|
||
|
*/
|
||
|
typedef struct {
|
||
|
#define NVFX_MAX_CALL_PARAMS_WSIZE 128
|
||
|
uint32_t size;
|
||
|
uint32_t method;
|
||
|
/* custom params */
|
||
|
} nvfx_call_params_t;
|
||
|
|
||
|
/**
|
||
|
* Required FX Methods
|
||
|
*
|
||
|
* @nvfx_method_reset Resets FX to default state
|
||
|
* @nvfx_method_set_state Sets the FX state
|
||
|
* @nvfx_method_flush Flushes input and cached data buffers
|
||
|
* to support seek operations
|
||
|
*
|
||
|
* @nvfx_method_external_start: Start of externally defined FX methods
|
||
|
*
|
||
|
*/
|
||
|
enum {
|
||
|
nvfx_method_reset = 0,
|
||
|
nvfx_method_set_state,
|
||
|
nvfx_method_flush,
|
||
|
nvfx_method_read_params,
|
||
|
nvfx_method_error_event,
|
||
|
/*
|
||
|
* CPU to ADSP : Used to indicate end of stream
|
||
|
* ADSP to CPU : Used to notify that all input data is consumed
|
||
|
*/
|
||
|
nvfx_method_set_eos,
|
||
|
nvfx_method_external_start = 65536,
|
||
|
|
||
|
nvfx_method_force32 = 0x7fffffff
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* nvfx_reset_params_t - Resets FX to default state
|
||
|
*
|
||
|
* @call nvfx_call_t parameters
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
nvfx_call_params_t call;
|
||
|
} nvfx_reset_params_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_method_set_state - Required FX States
|
||
|
*
|
||
|
* @nvfx_state_inactive No processing except copying cached data
|
||
|
* @nvfx_state_active Process cached and/or new input data
|
||
|
*
|
||
|
* @nvfx_state_external_start Start of externally defined FX States
|
||
|
*
|
||
|
*/
|
||
|
enum {
|
||
|
nvfx_state_inactive = 0,
|
||
|
nvfx_state_active,
|
||
|
|
||
|
nvfx_state_external_start = 65536,
|
||
|
|
||
|
nvfx_state_force32 = 0x7fffffff
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* nvfx_set_state_params_t - Sets the FX state
|
||
|
*
|
||
|
* @call nvfx_call_t parameters
|
||
|
* @state State to set the FX
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
nvfx_call_params_t call;
|
||
|
int32_t state;
|
||
|
} nvfx_set_state_params_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_method_error_event - Required FX States
|
||
|
*
|
||
|
* @nvfx_event_no_error
|
||
|
* @nvfx_event_error
|
||
|
*
|
||
|
*/
|
||
|
enum {
|
||
|
nvfx_event_no_error = 0,
|
||
|
nvfx_event_error,
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* nvfx_error_event_params_t - Sets the FX state
|
||
|
*
|
||
|
* @call nvfx_call_t parameters
|
||
|
* @state State to set the FX
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
nvfx_call_params_t call;
|
||
|
int32_t err;
|
||
|
} nvfx_error_event_params_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_flush_params_t - Flushes input and cached data buffers to
|
||
|
* support seek operations
|
||
|
*
|
||
|
* @call nvfx_call_t parameters
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
nvfx_call_params_t call;
|
||
|
} nvfx_flush_params_t;
|
||
|
|
||
|
/**
|
||
|
* nvfx_req_call_params_t - Parameters for required call functions
|
||
|
*
|
||
|
*/
|
||
|
typedef union {
|
||
|
nvfx_call_params_t call;
|
||
|
nvfx_reset_params_t reset;
|
||
|
nvfx_set_state_params_t set_state;
|
||
|
nvfx_flush_params_t flush;
|
||
|
} nvfx_req_call_params_t;
|
||
|
|
||
|
/**
|
||
|
* FX Types
|
||
|
*
|
||
|
* @NVFX_TYPE_HARDWARE No software intervention (e.g. HW Module)
|
||
|
* @NVFX_TYPE_IN_PORT Brings data in (e.g. Stream)
|
||
|
* @NVFX_TYPE_OUT_PORT Returns data out (e.g. Stream, DMA)
|
||
|
* @NVFX_TYPE_N_INPUT Requires n input buffers (e.g. Mix)
|
||
|
* @NVFX_TYPE_N_OUTPUT Requires n output buffers (e.g. Splitter)
|
||
|
* @NVFX_TYPE_IN_PLACE Supports in place processing (e.g. Volume)
|
||
|
* @NVFX_TYPE_REFORMAT Reformats the data (e.g. Deycrypt, Decoder, SRC)
|
||
|
* @NVFX_TYPE_MULTIPASS Multiple processing passes (e.g. AEC)
|
||
|
* @NVFX_TYPE_NONLINEAR Non-linear processing (e.g. Reverb)
|
||
|
*
|
||
|
*/
|
||
|
#define NVFX_TYPE_HARDWARE 0x1
|
||
|
#define NVFX_TYPE_IN_PORT 0x2
|
||
|
#define NVFX_TYPE_OUT_PORT 0x4
|
||
|
#define NVFX_TYPE_N_INPUT 0x10
|
||
|
#define NVFX_TYPE_N_OUTPUT 0x20
|
||
|
#define NVFX_TYPE_IN_PLACE 0x40
|
||
|
#define NVFX_TYPE_REFORMAT 0x80
|
||
|
#define NVFX_TYPE_MULTIPASS 0x100
|
||
|
#define NVFX_TYPE_NONLINEAR 0x200
|
||
|
|
||
|
#endif /* #ifndef _TEGRA_NVFX_H_ */
|