/*
 * wdt.h
 *
 * DSP-BIOS Bridge driver support functions for TI OMAP processors.
 *
 * IO dispatcher for a shared memory channel driver.
 *
 * Copyright (C) 2010 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 __DSP_WDT3_H_
#define __DSP_WDT3_H_

/* WDT defines */
#define OMAP3_WDT3_ISR_OFFSET	0x0018


/**
 * struct dsp_wdt_setting - the basic dsp_wdt_setting structure
 * @reg_base:	pointer to the base of the wdt registers
 * @sm_wdt:	pointer to flags in shared memory
 * @wdt3_tasklet	tasklet to manage wdt event
 * @fclk		handle to wdt3 functional clock
 * @iclk		handle to wdt3 interface clock
 *
 * This struct is used in the function to manage wdt3.
 */

struct dsp_wdt_setting {
	void __iomem *reg_base;
	struct shm *sm_wdt;
	struct tasklet_struct wdt3_tasklet;
	struct clk *fclk;
	struct clk *iclk;
};

/**
 * dsp_wdt_init() - initialize wdt3 module.
 *
 * This function initialize to wdt3 module, so that
 * other wdt3 function can be used.
 */
int dsp_wdt_init(void);

/**
 * dsp_wdt_exit() - initialize wdt3 module.
 *
 * This function frees all resources allocated for wdt3 module.
 */
void dsp_wdt_exit(void);

/**
 * dsp_wdt_enable() - enable/disable wdt3
 * @enable:	bool value to enable/disable wdt3
 *
 * This function enables or disables wdt3 base on @enable value.
 *
 */
void dsp_wdt_enable(bool enable);

/**
 * dsp_wdt_sm_set() - store pointer to the share memory
 * @data:		pointer to dspbridge share memory
 *
 * This function is used to pass a valid pointer to share memory,
 * so that the flags can be set in order DSP side can read them.
 *
 */
void dsp_wdt_sm_set(void *data);

#endif

