提交 3392bece 编写于 作者: I Ivo van Doorn 提交者: John W. Linville

rt2x00: Add helper function for reporting tx status

At some points, some drivers can't report the full TX status
information. This can happen for the UNKNOWN state, or the
FAILURE state (in case the URB failed).
Add a wrapper function to simplify reporting the
empty TX information.
Signed-off-by: NIvo van Doorn <IvDoorn@gmail.com>
Acked-by: NHelmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 84804cdc
...@@ -1078,6 +1078,7 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev); ...@@ -1078,6 +1078,7 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev);
void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev); void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev);
void rt2x00lib_txdone(struct queue_entry *entry, void rt2x00lib_txdone(struct queue_entry *entry,
struct txdone_entry_desc *txdesc); struct txdone_entry_desc *txdesc);
void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status);
void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev, void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
struct queue_entry *entry); struct queue_entry *entry);
......
...@@ -408,6 +408,18 @@ void rt2x00lib_txdone(struct queue_entry *entry, ...@@ -408,6 +408,18 @@ void rt2x00lib_txdone(struct queue_entry *entry,
} }
EXPORT_SYMBOL_GPL(rt2x00lib_txdone); EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status)
{
struct txdone_entry_desc txdesc;
txdesc.flags = 0;
__set_bit(status, &txdesc.flags);
txdesc.retry = 0;
rt2x00lib_txdone(entry, &txdesc);
}
EXPORT_SYMBOL_GPL(rt2x00lib_txdone_noinfo);
static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev, static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
struct rxdone_entry_desc *rxdesc) struct rxdone_entry_desc *rxdesc)
{ {
......
...@@ -170,8 +170,6 @@ EXPORT_SYMBOL_GPL(rt2x00usb_regbusy_read); ...@@ -170,8 +170,6 @@ EXPORT_SYMBOL_GPL(rt2x00usb_regbusy_read);
*/ */
static void rt2x00usb_work_txdone_entry(struct queue_entry *entry) static void rt2x00usb_work_txdone_entry(struct queue_entry *entry)
{ {
struct txdone_entry_desc txdesc;
/* /*
* If the transfer to hardware succeeded, it does not mean the * If the transfer to hardware succeeded, it does not mean the
* frame was send out correctly. It only means the frame * frame was send out correctly. It only means the frame
...@@ -180,14 +178,10 @@ static void rt2x00usb_work_txdone_entry(struct queue_entry *entry) ...@@ -180,14 +178,10 @@ static void rt2x00usb_work_txdone_entry(struct queue_entry *entry)
* (Only indirectly by looking at the failed TX counters * (Only indirectly by looking at the failed TX counters
* in the register). * in the register).
*/ */
txdesc.flags = 0;
if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
__set_bit(TXDONE_FAILURE, &txdesc.flags); rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);
else else
__set_bit(TXDONE_UNKNOWN, &txdesc.flags); rt2x00lib_txdone_noinfo(entry, TXDONE_UNKNOWN);
txdesc.retry = 0;
rt2x00lib_txdone(entry, &txdesc);
} }
static void rt2x00usb_work_txdone(struct work_struct *work) static void rt2x00usb_work_txdone(struct work_struct *work)
......
...@@ -2107,11 +2107,7 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev) ...@@ -2107,11 +2107,7 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev)
"TX status report missed for entry %d\n", "TX status report missed for entry %d\n",
entry_done->entry_idx); entry_done->entry_idx);
txdesc.flags = 0; rt2x00lib_txdone_noinfo(entry, TXDONE_UNKNOWN);
__set_bit(TXDONE_UNKNOWN, &txdesc.flags);
txdesc.retry = 0;
rt2x00lib_txdone(entry_done, &txdesc);
entry_done = rt2x00queue_get_entry(queue, Q_INDEX_DONE); entry_done = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册