/*****************************************************************************
 * sdla_56k.h	Sangoma 56K configuration definitions.
 *
 * Author:      Nenad Corbic
 *
 * Copyright:	(c) 1995-2001 Sangoma Technologies Inc.
 *
 *		This program is free software; you can redistribute it and/or
 *		modify it under the terms of the GNU General Public License
 *		as published by the Free Software Foundation; either version
 *		2 of the License, or (at your option) any later version.

 * ============================================================================
 * July 20, 2001	Nenad Corbic	Initial version.
 ****************************************************************************
*/

#ifndef _SDLA_56K_H_
#define _SDLA_56K_H_

/*******************************************************************************
			  DEFINES AND MACROS
 ******************************************************************************/

#define IS_56K_CARD(card)	IS_56K_FEMEDIA(&(card)->fe)

#define RRA(alarm) ((alarm>>8)&0xFF)
#define RRC(alarm) ((alarm)&0xFF)
			
#define INS_ALARM_56K(alarm) ((RRA(alarm)&0x0F) > 8) ? "GREEN" : "RED"
#define DMI_ALARM_56K(alarm) (RRC(alarm)&0x80) ? "RED" : "OFF"
#define ZCS_ALARM_56K(alarm) (RRC(alarm)&0x40) ? "RED" : "OFF"
#define CMI_ALARM_56K(alarm) (RRC(alarm)&0x20) ? "RED" : "OFF"
#define OOS_ALARM_56K(alarm) (RRC(alarm)&0x10) ? "RED" : "OFF"
#define OOF_ALARM_56K(alarm) (RRC(alarm)&0x08) ? "RED" : "OFF"
#define DLP_ALARM_56K(alarm) (RRC(alarm)&0x04) ? "RED" : "OFF"
#define UMC_ALARM_56K(alarm) (RRC(alarm)&0x02) ? "RED" : "OFF"
#define RLOS_ALARM_56K(alarm) (RRA(alarm)&0x80) ? "RED" : "OFF"


/* registers on 56K card */
#define REG_DEV_CTRL		0x00
#define REG_TX_CTRL		0x01
#define REG_RX_CTRL		0x02
#define REG_EIA_SEL		0x05
#define REG_EIA_TX_DATA		0x07
#define REG_INT_EN_STAT		0x08
#define REG_EIA_CTRL		0x09
#define REG_DEV_STAT		0x0A
#define REG_RX_SLICER_LVL	0x0B
#define REG_RX_CODES		0x0C
#define REG_RX_INVALID_BPV	0x0D

/* setting for each register */ 
#define BIT_DEV_CTRL_DDS_PRI	0x00
#define BIT_DEV_CTRL_SCT_E_OUT	0x10
#define BIT_DEV_CTRL_XTALI_INT	0x40

#define BIT_INT_EN_STAT_ACTIVE	0x01
#define BIT_INT_EN_STAT_RX_CODE	0x20
#define BIT_INT_EN_STAT_IDEL	0x40

#define BIT_EIA_CTRL_RTS_ACTIVE	0x01
#define BIT_EIA_CTRL_DTR_ACTIVE 0x02
#define	BIT_EIA_CTRL_DTE_ENABLE	0x04
#define BIT_DEV_STAT_IL_44_dB	0x08
#define BIT_DEV_STAT_RLOS	0x80

#define BIT_RX_CTRL_DSU_LOOP	0x80
#define BIT_RX_CTRL_CSU_LOOP	0x20

#define BIT_RX_CODES_UNMTCH	0x01
#define BIT_RX_CODES_UMC	0x02
#define BIT_RX_CODES_DLP	0x04
#define BIT_RX_CODES_OOF	0x08
#define BIT_RX_CODES_OOS	0x10
#define BIT_RX_CODES_CMI	0x20
#define BIT_RX_CODES_ZSC	0x40
#define BIT_RX_CODES_DMI	0x80


/*******************************************************************************
			  FUNCTION PROTOTYPES
 ******************************************************************************/

#ifdef WAN_KERNEL

#if defined(__NetBSD__) || defined (__FreeBSD__) || defined (__OpenBSD__)
/*# include <sdla_front_end.h>*/
#elif defined (__WINDOWS__)
//# include <sdla_front_end.h>
#else
//# include <linux/sdla_front_end.h>
#endif

typedef struct {
	unsigned char	RLOS_56k;
	unsigned char	RR8_reg_56k;
	unsigned char	RRA_reg_56k;
	unsigned char	RRC_reg_56k;
	unsigned char	prev_RRC_reg_56k;
	unsigned char	delta_RRC_reg_56k;
} sdla_56k_param_t;

extern int sdla_56k_default_cfg(void* arg1, void* p56k_cfg);
extern int sdla_56k_iface_init(void* pfe, void *p_fe_iface);

#endif /* WAN_KERNEL */

#endif
