diff options
author | Linas Vepstas <linas@austin.ibm.com> | 2006-12-13 16:06:59 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-05 16:58:43 -0500 |
commit | d4ed8f8d1fb7d59eb63d2eada9a32c2f8c3795e2 (patch) | |
tree | 5deb53b975439ce61e40bee57259c2d113df598a /drivers/net/spider_net.h | |
parent | 834324687d08e0f67b167934cb56406aa98ff8c6 (diff) |
Spidernet DMA coalescing
The current driver code performs 512 DMA mappings of a bunch of
32-byte ring descriptor structures. This is silly, as they are
all in contiguous memory. This patch changes the code to
dma_map_coherent() each rx/tx ring as a whole.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/spider_net.h')
-rw-r--r-- | drivers/net/spider_net.h | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/drivers/net/spider_net.h b/drivers/net/spider_net.h index 3e196df29790..4b76ef9524d1 100644 --- a/drivers/net/spider_net.h +++ b/drivers/net/spider_net.h | |||
@@ -378,6 +378,9 @@ struct spider_net_descr_chain { | |||
378 | spinlock_t lock; | 378 | spinlock_t lock; |
379 | struct spider_net_descr *head; | 379 | struct spider_net_descr *head; |
380 | struct spider_net_descr *tail; | 380 | struct spider_net_descr *tail; |
381 | struct spider_net_descr *ring; | ||
382 | int num_desc; | ||
383 | dma_addr_t dma_addr; | ||
381 | }; | 384 | }; |
382 | 385 | ||
383 | /* descriptor data_status bits */ | 386 | /* descriptor data_status bits */ |
@@ -397,8 +400,6 @@ struct spider_net_descr_chain { | |||
397 | * 701b8000 would be correct, but every packets gets that flag */ | 400 | * 701b8000 would be correct, but every packets gets that flag */ |
398 | #define SPIDER_NET_DESTROY_RX_FLAGS 0x700b8000 | 401 | #define SPIDER_NET_DESTROY_RX_FLAGS 0x700b8000 |
399 | 402 | ||
400 | #define SPIDER_NET_DESCR_SIZE 32 | ||
401 | |||
402 | /* this will be bigger some time */ | 403 | /* this will be bigger some time */ |
403 | struct spider_net_options { | 404 | struct spider_net_options { |
404 | int rx_csum; /* for rx: if 0 ip_summed=NONE, | 405 | int rx_csum; /* for rx: if 0 ip_summed=NONE, |
@@ -441,25 +442,17 @@ struct spider_net_card { | |||
441 | struct spider_net_descr_chain rx_chain; | 442 | struct spider_net_descr_chain rx_chain; |
442 | struct spider_net_descr *low_watermark; | 443 | struct spider_net_descr *low_watermark; |
443 | 444 | ||
444 | struct net_device_stats netdev_stats; | ||
445 | |||
446 | struct spider_net_options options; | ||
447 | |||
448 | spinlock_t intmask_lock; | ||
449 | struct tasklet_struct rxram_full_tl; | 445 | struct tasklet_struct rxram_full_tl; |
450 | struct timer_list tx_timer; | 446 | struct timer_list tx_timer; |
451 | |||
452 | struct work_struct tx_timeout_task; | 447 | struct work_struct tx_timeout_task; |
453 | atomic_t tx_timeout_task_counter; | 448 | atomic_t tx_timeout_task_counter; |
454 | wait_queue_head_t waitq; | 449 | wait_queue_head_t waitq; |
455 | 450 | ||
456 | /* for ethtool */ | 451 | /* for ethtool */ |
457 | int msg_enable; | 452 | int msg_enable; |
458 | int num_rx_desc; | 453 | struct net_device_stats netdev_stats; |
459 | int num_tx_desc; | ||
460 | struct spider_net_extra_stats spider_stats; | 454 | struct spider_net_extra_stats spider_stats; |
461 | 455 | struct spider_net_options options; | |
462 | struct spider_net_descr descr[0]; | ||
463 | }; | 456 | }; |
464 | 457 | ||
465 | #define pr_err(fmt,arg...) \ | 458 | #define pr_err(fmt,arg...) \ |