staging: r8712u: Merging Realtek's latest (v2.6.6). Tx-code refactoring.

Refactor the TX code to prepare for aggregation.

Signed-off-by: Ali Bahar <ali@internetDog.org>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Ali Bahar 2011-09-04 03:14:16 +08:00 committed by Greg Kroah-Hartman
parent c13b6f2498
commit 07a6b03707
3 changed files with 43 additions and 27 deletions

View File

@ -423,31 +423,31 @@ int r8712_xmitframe_complete(struct _adapter *padapter,
if (!pxmitbuf)
return false;
}
do {
pxmitframe = dequeue_xframe_ex(pxmitpriv, phwxmits, hwentry);
if (pxmitframe) {
pxmitframe->pxmitbuf = pxmitbuf;
pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0];
pxmitframe->buf_addr = pxmitbuf->pbuf;
if (pxmitframe->frame_tag == DATA_FRAMETAG) {
if (pxmitframe->attrib.priority <= 15)
res = r8712_xmitframe_coalesce(padapter,
pxmitframe->pkt, pxmitframe);
/* always return ndis_packet after
* r8712_xmitframe_coalesce */
r8712_xmit_complete(padapter, pxmitframe);
}
if (res == _SUCCESS)
dump_xframe(padapter, pxmitframe);
else
r8712_free_xmitframe_ex(pxmitpriv, pxmitframe);
xcnt++;
} else {
r8712_free_xmitbuf(pxmitpriv, pxmitbuf);
return false;
/* 1st frame dequeued */
pxmitframe = dequeue_xframe_ex(pxmitpriv, phwxmits, hwentry);
/* need to remember the 1st frame */
if (pxmitframe != NULL) {
xmitframe_xmitbuf_attach(pxmitframe, pxmitbuf);
if (pxmitframe->frame_tag == DATA_FRAMETAG) {
if (pxmitframe->attrib.priority <= 15)
res = r8712_xmitframe_coalesce(padapter,
pxmitframe->pkt, pxmitframe);
/* always return ndis_packet after
* r8712_xmitframe_coalesce */
r8712_xmit_complete(padapter, pxmitframe);
}
break;
} while (0);
if (res == _SUCCESS)
dump_xframe(padapter, pxmitframe);
else
r8712_free_xmitframe_ex(pxmitpriv, pxmitframe);
xcnt++;
} else { /* pxmitframe == NULL && p2ndxmitframe == NULL */
r8712_free_xmitbuf(pxmitpriv, pxmitbuf);
return false;
}
return true;
}

View File

@ -1011,6 +1011,19 @@ static void init_hwxmits(struct hw_xmit *phwxmit, sint entry)
}
}
void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe,
struct xmit_buf *pxmitbuf)
{
/* pxmitbuf attach to pxmitframe */
pxmitframe->pxmitbuf = pxmitbuf;
/* urb and irp connection */
pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0];
/* buffer addr assoc */
pxmitframe->buf_addr = pxmitbuf->pbuf;
/* pxmitframe attach to pxmitbuf */
pxmitbuf->priv_data = pxmitframe;
}
/*
* tx_action == 0 == no frames to transmit
* tx_action > 0 ==> we have frames to transmit
@ -1042,9 +1055,7 @@ int r8712_pre_xmit(struct _adapter *padapter, struct xmit_frame *pxmitframe)
} else { /*dump packet directly*/
spin_unlock_irqrestore(&pxmitpriv->lock, irqL);
ret = true;
pxmitframe->pxmitbuf = pxmitbuf;
pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0];
pxmitframe->buf_addr = pxmitbuf->pbuf;
xmitframe_xmitbuf_attach(pxmitframe, pxmitbuf);
r8712_xmit_direct(padapter, pxmitframe);
}
return ret;

View File

@ -135,7 +135,9 @@ struct xmit_buf {
u8 *pallocated_buf;
u8 *pbuf;
void *priv_data;
struct urb *pxmit_urb[8];
u32 aggr_nr;
};
struct xmit_frame {
@ -280,6 +282,9 @@ int r8712_xmit_enqueue(struct _adapter *padapter,
int r8712_xmit_direct(struct _adapter *padapter, struct xmit_frame *pxmitframe);
void r8712_xmit_bh(void *priv);
void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe,
struct xmit_buf *pxmitbuf);
#include "rtl8712_xmit.h"
#endif /*_RTL871X_XMIT_H_*/