#ifndef XIVO_TDM_API_H #define XIVO_TDM_API_H /* XXX matches with ICP_HSSDRV_PORT_XHFC_MEGREZ_PROTO_XIVO_CONFIG */ #define XHFC_MEGREZ_PROTO_XIVO_CONFIG (4) /* XXX matches with ICP_HSSDRV_PORT_LE89316_MEGREZ_PROTO_XIVO_CONFIG */ #define LE89316_MEGREZ_PROTO_XIVO_CONFIG (5) /* fixed for now: */ #define XIVO_TDM_TS_NUM (32) /* for audio propagation, xivo_tdm_cb will be called every ms (hopefully...) */ struct xivo_tdm_tick_cb_struct { void (*tick)(void *data); void *tick_data; }; struct xivo_tdm_port; /* TDM port allocation * Returns a xivo_tdm_port pointer if available, else NULL. */ /* hardirq: no -- softirq: no -- user: yes */ struct xivo_tdm_port *xivo_tdm_get_port(int tdm_port_num); /* TDM port release */ /* hardirq: no -- softirq: no -- user: yes */ void xivo_tdm_put_port(struct xivo_tdm_port *); /* TDM port config + startup */ /* hardirq: no -- softirq: no -- user: yes */ int xivo_tdm_config_port( struct xivo_tdm_port* xtp, unsigned int port_config); /* hardirq: no -- softirq: no -- user: yes */ void xivo_tdm_register_port0_started( struct xivo_tdm_port* xtp, void (*port0_started)(void *), void *port0_started_data); /* hardirq: no -- softirq: no -- user: yes */ int xivo_tdm_start_chans( struct xivo_tdm_port* xtp, u32 chans, struct xivo_tdm_tick_cb_struct *cb_struct); // optional, can be null void xivo_tdm_stop_chans( struct xivo_tdm_port* xtp); /* If cb_struct is NULL, the user has to regularly call * xivo_tdm_receive(), xivo_tdm_transmit() and xivo_tdm_tick() */ /* hardirq: yes -- softirq: yes -- user: yes */ void xivo_tdm_receive( struct xivo_tdm_port* xtp, const unsigned int cnum, u8 samples[8]); /* hardirq: yes -- softirq: yes -- user: yes */ void xivo_tdm_transmit( struct xivo_tdm_port* xtp, const unsigned int cnum, const u8 samples[8]); /* hardirq: yes -- softirq: yes -- user: yes */ void xivo_tdm_tick( struct xivo_tdm_port* xtp); #endif /* XIVO_TDM_API_H */