aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-dev.h
diff options
context:
space:
mode:
authorReinette Chatre <reinette.chatre@intel.com>2009-04-21 13:55:48 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-04-21 16:43:34 -0400
commitdf833b1d73680f9f9dc72cbc3215edbbc6ab740d (patch)
tree07b4e4c829c8e9c2c31936b4db7ad3553d9dafc6 /drivers/net/wireless/iwlwifi/iwl-dev.h
parentd2ee9cd2e2bdfa2e5817142d6f044697066d3977 (diff)
iwlwifi: DMA fixes
A few issues wrt DMA were uncovered when using the driver with swiotlb. - driver should not use memory after it has been mapped - iwl3945's RX queue management cannot use all of iwlagn because the size of the RX buffer is different. Revert back to using iwl3945 specific routines that map/unmap memory. - no need to "dma_syn_single_range_for_cpu" followed by pci_unmap_single, we can just call pci_unmap_single initially - only map the memory area that will be used by device. this is especially relevant to the mapping of iwl_cmd. we should not map the entire structure because the meta data at the beginning of structure contains the address to be used later for unmapping. If the address to be used for unmapping is stored in mapped data it creates a problem. - ensure that _if_ memory needs to be modified after it is mapped that we call _sync_single_for_cpu first, and then release it back to device with _sync_single_for_device - we mapped the wrong length of data for host commands, with mapped length differing with length provided to device, fix that. Thanks to Jason Andryuk <jandryuk@gmail.com> for significant bisecting help to find these issues. This fixes http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1964 Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Tested-by: Jason Andryuk <jandryuk@gmail.com> Tested-by: Ben Gamari <bgamari@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-dev.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index ec9a13846edd..cf7f0db58fcf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -360,12 +360,16 @@ struct iwl_host_cmd {
360 360
361/** 361/**
362 * struct iwl_rx_queue - Rx queue 362 * struct iwl_rx_queue - Rx queue
363 * @bd: driver's pointer to buffer of receive buffer descriptors (rbd)
364 * @dma_addr: bus address of buffer of receive buffer descriptors (rbd)
363 * @read: Shared index to newest available Rx buffer 365 * @read: Shared index to newest available Rx buffer
364 * @write: Shared index to oldest written Rx packet 366 * @write: Shared index to oldest written Rx packet
365 * @free_count: Number of pre-allocated buffers in rx_free 367 * @free_count: Number of pre-allocated buffers in rx_free
366 * @rx_free: list of free SKBs for use 368 * @rx_free: list of free SKBs for use
367 * @rx_used: List of Rx buffers with no SKB 369 * @rx_used: List of Rx buffers with no SKB
368 * @need_update: flag to indicate we need to update read/write index 370 * @need_update: flag to indicate we need to update read/write index
371 * @rb_stts: driver's pointer to receive buffer status
372 * @rb_stts_dma: bus address of receive buffer status
369 * 373 *
370 * NOTE: rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers 374 * NOTE: rx_free and rx_used are used as a FIFO for iwl_rx_mem_buffers
371 */ 375 */