Commit 86d03a0f authored by Rupesh Gujare's avatar Rupesh Gujare Committed by Greg Kroah-Hartman

staging: ozwpan: isoc latency for audio burst

Set audio latency. This fixes issue where audio clips heard during
link outage.
Signed-off-by: default avatarRupesh Gujare <rgujare@ozmodevices.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5494ebdf
...@@ -24,12 +24,6 @@ ...@@ -24,12 +24,6 @@
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
*/ */
#define OZ_MAX_TX_POOL_SIZE 6 #define OZ_MAX_TX_POOL_SIZE 6
/* Maximum number of uncompleted isoc frames that can be pending in network.
*/
#define OZ_MAX_SUBMITTED_ISOC 16
/* Maximum number of uncompleted isoc frames that can be pending in Tx Queue.
*/
#define OZ_MAX_TX_QUEUE_ISOC 32
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
*/ */
static struct oz_tx_frame *oz_tx_frame_alloc(struct oz_pd *pd); static struct oz_tx_frame *oz_tx_frame_alloc(struct oz_pd *pd);
...@@ -854,7 +848,7 @@ int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len) ...@@ -854,7 +848,7 @@ int oz_send_isoc_unit(struct oz_pd *pd, u8 ep_num, u8 *data, int len)
if (!(pd->mode & OZ_F_ISOC_ANYTIME)) { if (!(pd->mode & OZ_F_ISOC_ANYTIME)) {
struct oz_tx_frame *isoc_unit = NULL; struct oz_tx_frame *isoc_unit = NULL;
int nb = pd->nb_queued_isoc_frames; int nb = pd->nb_queued_isoc_frames;
if (nb >= OZ_MAX_TX_QUEUE_ISOC) { if (nb >= pd->isoc_latency) {
oz_trace2(OZ_TRACE_TX_FRAMES, oz_trace2(OZ_TRACE_TX_FRAMES,
"Dropping ISOC Unit nb= %d\n", "Dropping ISOC Unit nb= %d\n",
nb); nb);
......
...@@ -82,6 +82,7 @@ struct oz_pd { ...@@ -82,6 +82,7 @@ struct oz_pd {
u8 heartbeat_requested; u8 heartbeat_requested;
u8 mode; u8 mode;
u8 ms_per_isoc; u8 ms_per_isoc;
unsigned isoc_latency;
unsigned max_stream_buffering; unsigned max_stream_buffering;
int nb_queued_frames; int nb_queued_frames;
int nb_queued_isoc_frames; int nb_queued_isoc_frames;
......
...@@ -220,6 +220,19 @@ static struct oz_pd *oz_connect_req(struct oz_pd *cur_pd, struct oz_elt *elt, ...@@ -220,6 +220,19 @@ static struct oz_pd *oz_connect_req(struct oz_pd *cur_pd, struct oz_elt *elt,
pd->ms_per_isoc = body->ms_per_isoc; pd->ms_per_isoc = body->ms_per_isoc;
if (!pd->ms_per_isoc) if (!pd->ms_per_isoc)
pd->ms_per_isoc = 4; pd->ms_per_isoc = 4;
switch (body->ms_isoc_latency & OZ_LATENCY_MASK) {
case OZ_ONE_MS_LATENCY:
pd->isoc_latency = (body->ms_isoc_latency &
~OZ_LATENCY_MASK) / pd->ms_per_isoc;
break;
case OZ_TEN_MS_LATENCY:
pd->isoc_latency = ((body->ms_isoc_latency &
~OZ_LATENCY_MASK) * 10) / pd->ms_per_isoc;
break;
default:
pd->isoc_latency = OZ_MAX_TX_QUEUE_ISOC;
}
} }
if (body->max_len_div16) if (body->max_len_div16)
pd->max_tx_size = ((u16)body->max_len_div16)<<4; pd->max_tx_size = ((u16)body->max_len_div16)<<4;
......
...@@ -30,6 +30,12 @@ ...@@ -30,6 +30,12 @@
/* Maximun sizes of tx frames. */ /* Maximun sizes of tx frames. */
#define OZ_MAX_TX_SIZE 1514 #define OZ_MAX_TX_SIZE 1514
/* Maximum number of uncompleted isoc frames that can be pending in network. */
#define OZ_MAX_SUBMITTED_ISOC 16
/* Maximum number of uncompleted isoc frames that can be pending in Tx Queue. */
#define OZ_MAX_TX_QUEUE_ISOC 32
/* Application handler functions. /* Application handler functions.
*/ */
typedef int (*oz_app_init_fn_t)(void); typedef int (*oz_app_init_fn_t)(void);
......
...@@ -65,6 +65,10 @@ struct oz_hdr { ...@@ -65,6 +65,10 @@ struct oz_hdr {
#define OZ_LAST_PN_HALF_CYCLE 127 #define OZ_LAST_PN_HALF_CYCLE 127
#define OZ_LATENCY_MASK 0xc0
#define OZ_ONE_MS_LATENCY 0x40
#define OZ_TEN_MS_LATENCY 0x80
/* Connect request data structure. /* Connect request data structure.
*/ */
struct oz_elt_connect_req { struct oz_elt_connect_req {
...@@ -73,7 +77,7 @@ struct oz_elt_connect_req { ...@@ -73,7 +77,7 @@ struct oz_elt_connect_req {
u8 pd_info; u8 pd_info;
u8 session_id; u8 session_id;
u8 presleep; u8 presleep;
u8 resv2; u8 ms_isoc_latency;
u8 host_vendor; u8 host_vendor;
u8 keep_alive; u8 keep_alive;
u16 apps; u16 apps;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment