projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
carl9170 firmware: handle download queue exceptions
[carl9170fw.git]
/
carlfw
/
include
/
dma.h
diff --git
a/carlfw/include/dma.h
b/carlfw/include/dma.h
index 565c48ddcbc706d7e5667f3efd0eae24827cecba..11a760dfc98139cb68c921d188d1cc19c8b71941 100644
(file)
--- a/
carlfw/include/dma.h
+++ b/
carlfw/include/dma.h
@@
-46,17
+46,11
@@
struct dma_desc {
struct dma_desc *nextAddr; /* Next TD address */
} __packed __aligned(4);
struct dma_desc *nextAddr; /* Next TD address */
} __packed __aligned(4);
-/*
(Up, Dn, 5x Tx, Rx), USB Int, (5x delayed Tx + retry), CAB, BA
*/
-#define AR9170_TERMINATOR_NUMBER_B
8
+/*
Up, Dn, 5x Tx, retry, Rx, [USB Int], (CAB), (BA)
*/
+#define AR9170_TERMINATOR_NUMBER_B
9
#define AR9170_TERMINATOR_NUMBER_INT 1
#define AR9170_TERMINATOR_NUMBER_INT 1
-#ifdef CONFIG_CARL9170FW_DELAYED_TX
-#define AR9170_TERMINATOR_NUMBER_DELAY 6
-#else
-#define AR9170_TERMINATOR_NUMBER_DELAY 0
-#endif /* CONFIG_CARL9170FW_DELAYED_TX */
-
#ifdef CONFIG_CARL9170FW_CAB_QUEUE
#define AR9170_TERMINATOR_NUMBER_CAB CARL9170_INTF_NUM
#else
#ifdef CONFIG_CARL9170FW_CAB_QUEUE
#define AR9170_TERMINATOR_NUMBER_CAB CARL9170_INTF_NUM
#else
@@
-70,7
+64,6
@@
struct dma_desc {
#endif /* CONFIG_CARL9170FW_HANDLE_BACK_REQ */
#define AR9170_TERMINATOR_NUMBER (AR9170_TERMINATOR_NUMBER_B + \
AR9170_TERMINATOR_NUMBER_INT + \
#endif /* CONFIG_CARL9170FW_HANDLE_BACK_REQ */
#define AR9170_TERMINATOR_NUMBER (AR9170_TERMINATOR_NUMBER_B + \
AR9170_TERMINATOR_NUMBER_INT + \
- AR9170_TERMINATOR_NUMBER_DELAY + \
AR9170_TERMINATOR_NUMBER_CAB + \
AR9170_TERMINATOR_NUMBER_BA)
AR9170_TERMINATOR_NUMBER_CAB + \
AR9170_TERMINATOR_NUMBER_BA)
@@
-121,11
+114,11
@@
struct carl9170_sram_reserved {
* | - Up (to USB host)
* | - Down (from USB host)
* | - TX (5x, to wifi)
* | - Up (to USB host)
* | - Down (from USB host)
* | - TX (5x, to wifi)
+ * | - AMPDU TX retry
* | - RX (from wifi)
* | - CAB Queue
* | - FW cmd & req descriptor
* | - BlockAck descriptor
* | - RX (from wifi)
* | - CAB Queue
* | - FW cmd & req descriptor
* | - BlockAck descriptor
- * | - Delayed TX (5x)
* | total: AR9170_TERMINATOR_NUMBER
* +--
* | block descriptors (dma_desc)
* | total: AR9170_TERMINATOR_NUMBER
* +--
* | block descriptors (dma_desc)
@@
-222,7
+215,6
@@
struct dma_desc *dma_unlink_head(struct dma_queue *queue);
void dma_init_descriptors(void);
void dma_reclaim(struct dma_queue *q, struct dma_desc *desc);
void dma_put(struct dma_queue *q, struct dma_desc *desc);
void dma_init_descriptors(void);
void dma_reclaim(struct dma_queue *q, struct dma_desc *desc);
void dma_put(struct dma_queue *q, struct dma_desc *desc);
-void dma_queue_reclaim(struct dma_queue *dst, struct dma_queue *src);
static inline __inline bool is_terminator(struct dma_queue *q, struct dma_desc *desc)
{
static inline __inline bool is_terminator(struct dma_queue *q, struct dma_desc *desc)
{
@@
-282,6
+274,10
@@
static inline __inline struct dma_desc *dma_dequeue_not_bits(struct dma_queue *q
(desc->status & AR9170_OWN_BITS) == bits); \
desc = (queue)->head)
(desc->status & AR9170_OWN_BITS) == bits); \
desc = (queue)->head)
+#define __for_each_desc_continue(desc, queue) \
+ for (;desc != (queue)->terminator; \
+ desc = (desc)->lastAddr->nextAddr)
+
#define __for_each_desc(desc, queue) \
for (desc = (queue)->head; \
desc != (queue)->terminator; \
#define __for_each_desc(desc, queue) \
for (desc = (queue)->head; \
desc != (queue)->terminator; \
@@
-318,6
+314,15
@@
static inline __inline void dma_rearm(struct dma_desc *desc)
AR9170_OWN_BITS_HW);
}
AR9170_OWN_BITS_HW);
}
+static inline __inline void dma_fix_downqueue(struct dma_desc *desc)
+{
+ desc->status = AR9170_OWN_BITS_HW;
+ desc->ctrl = 0;
+ desc->dataSize = 0;
+ desc->totalLen = AR9170_BLOCK_SIZE;
+ desc->lastAddr = desc;
+}
+
static inline void __check_desc(void)
{
struct ar9170_dma_memory mem;
static inline void __check_desc(void)
{
struct ar9170_dma_memory mem;