diff options
author | Francois Romieu <romieu@fr.zoreil.com> | 2008-07-10 18:04:33 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-07-11 01:10:14 -0400 |
commit | 8ac53afccf7ab383fd97db8910117ae7892c72a7 (patch) | |
tree | 622a36a9ee9bd762f70345545d73ed06223ccf16 /drivers/net/via-velocity.c | |
parent | 580a690208321ed45addef5ef12e25b87f9f5dec (diff) |
via-velocity: lean and clean velocity_init_rings
- PCI consistent areas need no memset
- use dev_err instead of plain printk
- avoid a few casts
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/via-velocity.c')
-rw-r--r-- | drivers/net/via-velocity.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index fce2dfd0e9e6..86b256cbeaf3 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c | |||
@@ -1102,47 +1102,41 @@ static int __devinit velocity_get_pci_info(struct velocity_info *vptr, struct pc | |||
1102 | 1102 | ||
1103 | static int velocity_init_rings(struct velocity_info *vptr) | 1103 | static int velocity_init_rings(struct velocity_info *vptr) |
1104 | { | 1104 | { |
1105 | int i; | 1105 | struct velocity_opt *opt = &vptr->options; |
1106 | unsigned int psize; | 1106 | const unsigned int rx_ring_size = opt->numrx * sizeof(struct rx_desc); |
1107 | const unsigned int tx_ring_size = opt->numtx * sizeof(struct tx_desc); | ||
1108 | struct pci_dev *pdev = vptr->pdev; | ||
1107 | dma_addr_t pool_dma; | 1109 | dma_addr_t pool_dma; |
1108 | u8 *pool; | 1110 | void *pool; |
1109 | 1111 | unsigned int i; | |
1110 | /* | ||
1111 | * Allocate all RD/TD rings a single pool | ||
1112 | */ | ||
1113 | |||
1114 | psize = vptr->options.numrx * sizeof(struct rx_desc) + | ||
1115 | vptr->options.numtx * sizeof(struct tx_desc) * vptr->num_txq; | ||
1116 | 1112 | ||
1117 | /* | 1113 | /* |
1114 | * Allocate all RD/TD rings a single pool. | ||
1115 | * | ||
1118 | * pci_alloc_consistent() fulfills the requirement for 64 bytes | 1116 | * pci_alloc_consistent() fulfills the requirement for 64 bytes |
1119 | * alignment | 1117 | * alignment |
1120 | */ | 1118 | */ |
1121 | pool = pci_alloc_consistent(vptr->pdev, psize, &pool_dma); | 1119 | pool = pci_alloc_consistent(pdev, tx_ring_size * vptr->num_txq + |
1122 | 1120 | rx_ring_size, &pool_dma); | |
1123 | if (pool == NULL) { | 1121 | if (!pool) { |
1124 | printk(KERN_ERR "%s : DMA memory allocation failed.\n", | 1122 | dev_err(&pdev->dev, "%s : DMA memory allocation failed.\n", |
1125 | vptr->dev->name); | 1123 | vptr->dev->name); |
1126 | return -ENOMEM; | 1124 | return -ENOMEM; |
1127 | } | 1125 | } |
1128 | 1126 | ||
1129 | memset(pool, 0, psize); | 1127 | vptr->rd_ring = pool; |
1130 | |||
1131 | vptr->rd_ring = (struct rx_desc *) pool; | ||
1132 | |||
1133 | vptr->rd_pool_dma = pool_dma; | 1128 | vptr->rd_pool_dma = pool_dma; |
1134 | 1129 | ||
1135 | i = vptr->options.numrx * sizeof(struct rx_desc); | 1130 | pool += rx_ring_size; |
1136 | pool += i; | 1131 | pool_dma += rx_ring_size; |
1137 | pool_dma += i; | ||
1138 | for (i = 0; i < vptr->num_txq; i++) { | ||
1139 | int offset = vptr->options.numtx * sizeof(struct tx_desc); | ||
1140 | 1132 | ||
1133 | for (i = 0; i < vptr->num_txq; i++) { | ||
1134 | vptr->td_rings[i] = pool; | ||
1141 | vptr->td_pool_dma[i] = pool_dma; | 1135 | vptr->td_pool_dma[i] = pool_dma; |
1142 | vptr->td_rings[i] = (struct tx_desc *) pool; | 1136 | pool += tx_ring_size; |
1143 | pool += offset; | 1137 | pool_dma += tx_ring_size; |
1144 | pool_dma += offset; | ||
1145 | } | 1138 | } |
1139 | |||
1146 | return 0; | 1140 | return 0; |
1147 | } | 1141 | } |
1148 | 1142 | ||