X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Fsrc%2Fdma.c;h=9b83fcf9b4777ff2ff048a66af94695479d2fe37;hb=34bf5a5839f48f61e794cb141487e53e18d7a5ab;hp=18c57ce1392e45405a0a75f0a45a7a5429035e2e;hpb=c9ae7f9a14af3330eaf62abfd6de5dfab31bf708;p=carl9170fw.git diff --git a/carlfw/src/dma.c b/carlfw/src/dma.c index 18c57ce..9b83fcf 100644 --- a/carlfw/src/dma.c +++ b/carlfw/src/dma.c @@ -57,6 +57,11 @@ static void fill_descriptor(struct dma_desc *d, uint16_t size, uint8_t *data) d->nextAddr = NULL; } +static void init_queue(struct dma_queue *q, struct dma_desc *d) +{ + q->head = q->terminator = d; +} + /* * - Init up_queue, down_queue, tx_queue[5], rx_queue. * - Setup descriptors and data buffer address. @@ -74,27 +79,21 @@ void dma_init_descriptors(void) /* Assign terminators to DMA queues */ i = 0; - fw.pta.up_queue.head = fw.pta.up_queue.terminator = &dma_mem.terminator[i++]; - fw.pta.down_queue.head = fw.pta.down_queue.terminator = &dma_mem.terminator[i++]; + init_queue(&fw.pta.up_queue, &dma_mem.terminator[i++]); + init_queue(&fw.pta.down_queue, &dma_mem.terminator[i++]); for (j = 0; j < __AR9170_NUM_TX_QUEUES; j++) - fw.wlan.tx_queue[j].head = fw.wlan.tx_queue[j].terminator = &dma_mem.terminator[i++]; - fw.wlan.tx_retry.head = fw.wlan.tx_retry.terminator = &dma_mem.terminator[i++]; - fw.wlan.rx_queue.head = fw.wlan.rx_queue.terminator = &dma_mem.terminator[i++]; + init_queue(&fw.wlan.tx_queue[j], &dma_mem.terminator[i++]); + init_queue(&fw.wlan.tx_retry, &dma_mem.terminator[i++]); + init_queue(&fw.wlan.rx_queue, &dma_mem.terminator[i++]); fw.usb.int_desc = &dma_mem.terminator[i++]; - fw.wlan.ba_desc = &dma_mem.terminator[i++]; + fw.wlan.fw_desc = &dma_mem.terminator[i++]; #ifdef CONFIG_CARL9170FW_CAB_QUEUE - /* GCC bug ? */ -# if (CARL9170_INTF_NUM != 2) for (j = 0; j < CARL9170_INTF_NUM; j++) - fw.wlan.cab_queue[j].head = fw.wlan.cab_queue[j].terminator = &dma_mem.terminator[i++]; -#else - fw.wlan.cab_queue[0].head = fw.wlan.cab_queue[0].terminator = &dma_mem.terminator[i++]; - fw.wlan.cab_queue[1].head = fw.wlan.cab_queue[1].terminator = &dma_mem.terminator[i++]; -#endif + init_queue(&fw.wlan.cab_queue[j], &dma_mem.terminator[i++]); #endif /* CONFIG_CARL9170FW_CAB_QUEUE */ - BUILD_BUG_ON(AR9170_TERMINATOR_NUMBER != j); + BUG_ON(AR9170_TERMINATOR_NUMBER != i); DBG("Blocks:%d [tx:%d, rx:%d] Terminators:%d/%d\n", AR9170_BLOCK_NUMBER, AR9170_TX_BLOCK_NUMBER, @@ -120,7 +119,6 @@ void dma_init_descriptors(void) set_wlan_txq_dma_addr(i, (uint32_t) fw.wlan.tx_queue[i].head); set(AR9170_MAC_REG_DMA_RXQ_ADDR, (uint32_t) fw.wlan.rx_queue.head); - fw.usb.int_desc->dataSize = AR9170_BLOCK_SIZE; fw.usb.int_desc->dataAddr = (void *) &dma_mem.reserved.rsp; @@ -132,9 +130,8 @@ void dma_init_descriptors(void) /* rsp is now available for use */ fw.usb.int_desc_available = 1; - fw.wlan.ba_desc->dataAddr = (void *) &dma_mem.reserved.ba; - memset(DESC_PAYLOAD(fw.wlan.ba_desc), 0, 128); - fw.wlan.ba_desc_available = 1; + memset(DESC_PAYLOAD(fw.wlan.fw_desc), 0, 128); + fw.wlan.fw_desc_available = 1; } /*