* Copyright (c) 2000-2005 ZyDAS Technology Corporation
* Copyright (c) 2007-2009 Atheros Communications, Inc.
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
- * Copyright 2009, 2010 Christian Lamparter <chunkeey@googlemail.com>
+ * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
fw.usb.int_desc = &dma_mem.terminator[i++];
#ifdef CONFIG_CARL9170FW_CAB_QUEUE
- fw.wlan.cab_queue.head = fw.wlan.cab_queue.terminator = &dma_mem.terminator[i++];
+ /* 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
#endif /* CONFIG_CARL9170FW_CAB_QUEUE */
#ifdef CONFIG_CARL9170FW_HANDLE_BACK_REQ
fw.wlan.tx_delay[j].head = fw.wlan.tx_delay[j].terminator = &dma_mem.terminator[i++];
#endif /* CONFIG_CARL9170FW_DELAYED_TX */
+ BUILD_BUG_ON(AR9170_TERMINATOR_NUMBER != j);
+
DBG("Blocks:%d [tx:%d, rx:%d] Terminators:%d/%d\n",
AR9170_BLOCK_NUMBER, AR9170_TX_BLOCK_NUMBER,
AR9170_RX_BLOCK_NUMBER, AR9170_TERMINATOR_NUMBER, i);
desc->status = AR9170_OWN_BITS_SW;
/* 5. Copy TTD to last TD */
- tdesc.status &= (~AR9170_OWN_BITS_MASK);
+ tdesc.status &= (~AR9170_OWN_BITS);
copy_dma_desc((void *)q->terminator, (void *)&tdesc);
q->terminator->status |= AR9170_OWN_BITS_HW;
tmpDesc = desc;
- /* force correct CTRL_BITS */
- tmpDesc->ctrl = 0;
- tmpDesc->ctrl |= AR9170_CTRL_FS_BIT;
while (1) {
/* update totalLen */
tmpDesc->totalLen = desc->totalLen;
break;
tmpDesc = tmpDesc->nextAddr;
- tmpDesc->ctrl = 0;
}
- tmpDesc->ctrl |= AR9170_CTRL_LS_BIT;
/* 2. Next address of Last TD to be added = first TD */
desc->lastAddr->nextAddr = desc;
desc->dataAddr = NULL;
/* 5. Copy TTD to last TD */
- tdesc.status &= (~AR9170_OWN_BITS_MASK);
+ tdesc.status &= (~AR9170_OWN_BITS);
copy_dma_desc((void *)q->terminator, (void *)&tdesc);
q->terminator->status |= AR9170_OWN_BITS_HW;