/*
 * dbdcddef.h
 *
 * DSP-BIOS Bridge driver support functions for TI OMAP processors.
 *
 * DCD (DSP/BIOS Bridge Configuration Database) constants and types.
 *
 * Copyright (C) 2008 Texas Instruments, Inc.
 *
 * This package is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#ifndef DBDCDDEF_
#define DBDCDDEF_

#include <dspbridge/dbdefs.h>
#include <dspbridge/mgrpriv.h>	/* for mgr_processorextinfo */

/*
 *  The following defines are critical elements for the DCD module:
 *
 * - DCD_REGKEY enables DCD functions to locate registered DCD objects.
 * - DCD_REGISTER_SECTION identifies the COFF section where the UUID of
 *   registered DCD objects are stored.
 */
#define DCD_REGKEY              "Software\\TexasInstruments\\DspBridge\\DCD"
#define DCD_REGISTER_SECTION    ".dcd_register"

#define DCD_MAXPATHLENGTH    255

/* DCD Manager Object */
struct dcd_manager;

struct dcd_key_elem {
	struct list_head link;	/* Make it linked to a list */
	char name[DCD_MAXPATHLENGTH];	/*  Name of a given value entry */
	char *path;		/*  Pointer to the actual data */
};

/* DCD Node Properties */
struct dcd_nodeprops {
	struct dsp_ndbprops ndb_props;
	u32 msg_segid;
	u32 msg_notify_type;
	char *str_create_phase_fxn;
	char *str_delete_phase_fxn;
	char *str_execute_phase_fxn;
	char *str_i_alg_name;

	/* Dynamic load properties */
	u16 load_type;	/* Static, dynamic, overlay */
	u32 data_mem_seg_mask;		/* Data memory requirements */
	u32 code_mem_seg_mask;		/* Code memory requirements */
};

/* DCD Generic Object Type */
struct dcd_genericobj {
	union dcd_obj {
		struct dcd_nodeprops node_obj;	/* node object. */
		/* processor object. */
		struct dsp_processorinfo proc_info;
		/* extended proc object (private) */
		struct mgr_processorextinfo ext_proc_obj;
	} obj_data;
};

/* DCD Internal Callback Type */
typedef int(*dcd_registerfxn) (struct dsp_uuid *uuid_obj,
				      enum dsp_dcdobjtype obj_type,
				      void *handle);

#endif /* DBDCDDEF_ */
