Blame cs46xx/cs46xx-fw.c

Packit e67170
/*
Packit e67170
 * 32bit LE only
Packit e67170
 */
Packit e67170
Packit e67170
#include <stdio.h>
Packit e67170
Packit e67170
#define DSP_MAX_SYMBOL_NAME 100
Packit e67170
typedef unsigned int u32;
Packit e67170
Packit e67170
struct dsp_symbol_entry {
Packit e67170
	unsigned int address;
Packit e67170
	char symbol_name[DSP_MAX_SYMBOL_NAME];
Packit e67170
	int symbol_type;
Packit e67170
};
Packit e67170
Packit e67170
struct dsp_segment_desc {
Packit e67170
	int segment_type;
Packit e67170
	unsigned int offset;
Packit e67170
	unsigned int size;
Packit e67170
	u32 *data;
Packit e67170
};
Packit e67170
Packit e67170
struct dsp_symbol_desc {
Packit e67170
	int nsymbols;
Packit e67170
	struct dsp_symbol_entry *symbols;
Packit e67170
};
Packit e67170
Packit e67170
struct dsp_module_desc {
Packit e67170
	char * module_name;
Packit e67170
	struct dsp_symbol_desc symbol_table;
Packit e67170
	int nsegments;
Packit e67170
	struct dsp_segment_desc * segments;
Packit e67170
};
Packit e67170
Packit e67170
#define SEGTYPE_SP_PROGRAM              0x00000001
Packit e67170
#define SEGTYPE_SP_PARAMETER            0x00000002
Packit e67170
#define SEGTYPE_SP_SAMPLE               0x00000003
Packit e67170
#define SEGTYPE_SP_COEFFICIENT          0x00000004
Packit e67170
Packit e67170
Packit e67170
#include "cwc4630.h"
Packit e67170
#include "cwcasync.h"
Packit e67170
#include "cwcbinhack.h"
Packit e67170
#include "cwcdma.h"
Packit e67170
#include "cwcsnoop.h"
Packit e67170
Packit e67170
/* 3*1024 parameter, 3.5*1024 sample, 2*3.5*1024 code */
Packit e67170
#define BA1_DWORD_SIZE		(13 * 1024 + 512)
Packit e67170
#define BA1_MEMORY_COUNT	3
Packit e67170
Packit e67170
#include "cs46xx_image.h"
Packit e67170
Packit e67170
int main(int argc, char **argv)
Packit e67170
{
Packit e67170
	struct dsp_module_desc *desc;
Packit e67170
	static struct dsp_module_desc *list[] = {
Packit e67170
		&cwc4630_module,
Packit e67170
		&cwcasync_module,
Packit e67170
		&cwcbinhack_module,
Packit e67170
		&cwcdma_module,
Packit e67170
		&cwcsnoop_module,
Packit e67170
	};
Packit e67170
	static const char *names[] = {
Packit e67170
		"cwc4630", "cwcasync", "cwcbinhack", "cwcdma", "cwcsnoop"
Packit e67170
	};
Packit e67170
	FILE *fp;
Packit e67170
	int i, n;
Packit e67170
Packit e67170
	for (n = 0; n < 5; n++) {
Packit e67170
		fp = fopen(names[n], "w");
Packit e67170
		if (!fp)
Packit e67170
			return 1;
Packit e67170
		desc = list[n];
Packit e67170
		fwrite(&desc->symbol_table.nsymbols, 4, 1, fp);
Packit e67170
		fwrite(desc->symbol_table.symbols, sizeof(struct dsp_symbol_entry), desc->symbol_table.nsymbols, fp);
Packit e67170
		fwrite(&desc->nsegments, 4, 1, fp);
Packit e67170
		for (i = 0; i < desc->nsegments; i++) {
Packit e67170
			fwrite(&desc->segments[i], 4, 3, fp);
Packit e67170
			fwrite(desc->segments[i].data, 4, desc->segments[i].size, fp);
Packit e67170
		}
Packit e67170
		fclose(fp);
Packit e67170
	}
Packit e67170
Packit e67170
	fp = fopen("ba1", "w");
Packit e67170
	if (!fp)
Packit e67170
		return 1;
Packit e67170
	fwrite(&BA1Struct, sizeof(BA1Struct), 1, fp);
Packit e67170
	fclose(fp);
Packit e67170
Packit e67170
	return 0;
Packit e67170
}