|  | #ifndef __mISDNdsp_H__ | 
|  | #define __mISDNdsp_H__ | 
|  |  | 
|  | struct mISDN_dsp_element_arg { | 
|  | char	*name; | 
|  | char	*def; | 
|  | char	*desc; | 
|  | }; | 
|  |  | 
|  | struct mISDN_dsp_element { | 
|  | char	*name; | 
|  | void	*(*new)(const char *arg); | 
|  | void	(*free)(void *p); | 
|  | void	(*process_tx)(void *p, unsigned char *data, int len); | 
|  | void	(*process_rx)(void *p, unsigned char *data, int len, | 
|  | unsigned int txlen); | 
|  | int	num_args; | 
|  | struct mISDN_dsp_element_arg | 
|  | *args; | 
|  | }; | 
|  |  | 
|  | extern int  mISDN_dsp_element_register(struct mISDN_dsp_element *elem); | 
|  | extern void mISDN_dsp_element_unregister(struct mISDN_dsp_element *elem); | 
|  |  | 
|  | struct dsp_features { | 
|  | int	hfc_id; /* unique id to identify the chip (or -1) */ | 
|  | int	hfc_dtmf; /* set if HFCmulti card supports dtmf */ | 
|  | int	hfc_conf; /* set if HFCmulti card supports conferences */ | 
|  | int	hfc_loops; /* set if card supports tone loops */ | 
|  | int	hfc_echocanhw; /* set if card supports echocancelation*/ | 
|  | int	pcm_id; /* unique id to identify the pcm bus (or -1) */ | 
|  | int	pcm_slots; /* number of slots on the pcm bus */ | 
|  | int	pcm_banks; /* number of IO banks of pcm bus */ | 
|  | int	unclocked; /* data is not clocked (has jitter/loss) */ | 
|  | int	unordered; /* data is unordered (packets have index) */ | 
|  | }; | 
|  |  | 
|  | #endif | 
|  |  |