93 lines
1.9 KiB
C
93 lines
1.9 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
// Copyright 2018 NXP
|
|
// Copyright (c) 2012-2013 by Tensilica Inc.
|
|
|
|
#ifndef FSL_DSP_LIBRARY_LOAD_H
|
|
#define FSL_DSP_LIBRARY_LOAD_H
|
|
|
|
#include "fsl_dsp_pool.h"
|
|
|
|
#define Elf32_Byte unsigned char
|
|
#define xt_ptr unsigned long
|
|
#define xt_int int
|
|
#define xt_uint unsigned int
|
|
#define xt_ulong unsigned long
|
|
|
|
struct xtlib_packaged_library;
|
|
|
|
enum {
|
|
XTLIB_NO_ERR = 0,
|
|
XTLIB_NOT_ELF = 1,
|
|
XTLIB_NOT_DYNAMIC = 2,
|
|
XTLIB_NOT_STATIC = 3,
|
|
XTLIB_NO_DYNAMIC_SEGMENT = 4,
|
|
XTLIB_UNKNOWN_SYMBOL = 5,
|
|
XTLIB_NOT_ALIGNED = 6,
|
|
XTLIB_NOT_SPLITLOAD = 7,
|
|
XTLIB_RELOCATION_ERR = 8
|
|
};
|
|
|
|
enum lib_type {
|
|
DSP_CODEC_LIB = 1,
|
|
DSP_CODEC_WRAP_LIB
|
|
};
|
|
|
|
struct xtlib_loader_globals {
|
|
int err;
|
|
int byteswap;
|
|
};
|
|
|
|
struct xtlib_pil_info {
|
|
xt_uint dst_addr;
|
|
xt_uint src_offs;
|
|
xt_uint dst_data_addr;
|
|
xt_uint src_data_offs;
|
|
xt_uint start_sym;
|
|
xt_uint text_addr;
|
|
xt_uint init;
|
|
xt_uint fini;
|
|
xt_uint rel;
|
|
xt_int rela_count;
|
|
xt_uint hash;
|
|
xt_uint symtab;
|
|
xt_uint strtab;
|
|
xt_int align;
|
|
};
|
|
|
|
struct icm_xtlib_pil_info {
|
|
struct xtlib_pil_info pil_info;
|
|
unsigned int lib_type;
|
|
};
|
|
|
|
struct lib_dnld_info_t {
|
|
unsigned long pbuf_code;
|
|
unsigned long pbuf_data;
|
|
unsigned int size_code;
|
|
unsigned int size_data;
|
|
struct xtlib_pil_info *ppil_inf;
|
|
unsigned int lib_on_dpu; /* 0: not loaded, 1: loaded. */
|
|
};
|
|
|
|
struct lib_info {
|
|
struct xtlib_pil_info pil_info;
|
|
struct xtlib_loader_globals xtlib_globals;
|
|
|
|
struct xf_pool *code_section_pool;
|
|
struct xf_pool *data_section_pool;
|
|
|
|
void *code_buf_virt;
|
|
unsigned int code_buf_phys;
|
|
unsigned int code_buf_size;
|
|
void *data_buf_virt;
|
|
unsigned int data_buf_phys;
|
|
unsigned int data_buf_size;
|
|
|
|
const char *filename;
|
|
unsigned int lib_type;
|
|
};
|
|
|
|
long xf_load_lib(struct xf_client *client, struct xf_handle *handle, struct lib_info *lib_info);
|
|
long xf_unload_lib(struct xf_client *client, struct xf_handle *handle, struct lib_info *lib_info);
|
|
|
|
#endif
|