diff options
-rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000.h | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/e1000/e1000_main.c | 35 |
3 files changed, 27 insertions, 23 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000.h b/drivers/net/ethernet/intel/e1000/e1000.h index 10a0f221b183..81efe3358350 100644 --- a/drivers/net/ethernet/intel/e1000/e1000.h +++ b/drivers/net/ethernet/intel/e1000/e1000.h | |||
@@ -160,6 +160,12 @@ struct e1000_buffer { | |||
160 | u16 mapped_as_page; | 160 | u16 mapped_as_page; |
161 | }; | 161 | }; |
162 | 162 | ||
163 | struct e1000_rx_buffer { | ||
164 | struct sk_buff *skb; | ||
165 | dma_addr_t dma; | ||
166 | struct page *page; | ||
167 | }; | ||
168 | |||
163 | struct e1000_tx_ring { | 169 | struct e1000_tx_ring { |
164 | /* pointer to the descriptor ring memory */ | 170 | /* pointer to the descriptor ring memory */ |
165 | void *desc; | 171 | void *desc; |
@@ -195,7 +201,7 @@ struct e1000_rx_ring { | |||
195 | /* next descriptor to check for DD status bit */ | 201 | /* next descriptor to check for DD status bit */ |
196 | unsigned int next_to_clean; | 202 | unsigned int next_to_clean; |
197 | /* array of buffer information structs */ | 203 | /* array of buffer information structs */ |
198 | struct e1000_buffer *buffer_info; | 204 | struct e1000_rx_buffer *buffer_info; |
199 | struct sk_buff *rx_skb_top; | 205 | struct sk_buff *rx_skb_top; |
200 | 206 | ||
201 | /* cpu for rx queue */ | 207 | /* cpu for rx queue */ |
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c index 9b50272824a1..5ebc2407595b 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c +++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c | |||
@@ -968,7 +968,7 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter) | |||
968 | if (rxdr->buffer_info[i].dma) | 968 | if (rxdr->buffer_info[i].dma) |
969 | dma_unmap_single(&pdev->dev, | 969 | dma_unmap_single(&pdev->dev, |
970 | rxdr->buffer_info[i].dma, | 970 | rxdr->buffer_info[i].dma, |
971 | rxdr->buffer_info[i].length, | 971 | E1000_RXBUFFER_2048, |
972 | DMA_FROM_DEVICE); | 972 | DMA_FROM_DEVICE); |
973 | if (rxdr->buffer_info[i].skb) | 973 | if (rxdr->buffer_info[i].skb) |
974 | dev_kfree_skb(rxdr->buffer_info[i].skb); | 974 | dev_kfree_skb(rxdr->buffer_info[i].skb); |
@@ -1065,7 +1065,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) | |||
1065 | if (!rxdr->count) | 1065 | if (!rxdr->count) |
1066 | rxdr->count = E1000_DEFAULT_RXD; | 1066 | rxdr->count = E1000_DEFAULT_RXD; |
1067 | 1067 | ||
1068 | rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_buffer), | 1068 | rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_rx_buffer), |
1069 | GFP_KERNEL); | 1069 | GFP_KERNEL); |
1070 | if (!rxdr->buffer_info) { | 1070 | if (!rxdr->buffer_info) { |
1071 | ret_val = 5; | 1071 | ret_val = 5; |
@@ -1104,7 +1104,6 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) | |||
1104 | } | 1104 | } |
1105 | skb_reserve(skb, NET_IP_ALIGN); | 1105 | skb_reserve(skb, NET_IP_ALIGN); |
1106 | rxdr->buffer_info[i].skb = skb; | 1106 | rxdr->buffer_info[i].skb = skb; |
1107 | rxdr->buffer_info[i].length = E1000_RXBUFFER_2048; | ||
1108 | rxdr->buffer_info[i].dma = | 1107 | rxdr->buffer_info[i].dma = |
1109 | dma_map_single(&pdev->dev, skb->data, | 1108 | dma_map_single(&pdev->dev, skb->data, |
1110 | E1000_RXBUFFER_2048, DMA_FROM_DEVICE); | 1109 | E1000_RXBUFFER_2048, DMA_FROM_DEVICE); |
@@ -1440,7 +1439,7 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter) | |||
1440 | do { /* receive the sent packets */ | 1439 | do { /* receive the sent packets */ |
1441 | dma_sync_single_for_cpu(&pdev->dev, | 1440 | dma_sync_single_for_cpu(&pdev->dev, |
1442 | rxdr->buffer_info[l].dma, | 1441 | rxdr->buffer_info[l].dma, |
1443 | rxdr->buffer_info[l].length, | 1442 | E1000_RXBUFFER_2048, |
1444 | DMA_FROM_DEVICE); | 1443 | DMA_FROM_DEVICE); |
1445 | 1444 | ||
1446 | ret_val = e1000_check_lbtest_frame( | 1445 | ret_val = e1000_check_lbtest_frame( |
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 79626ba7e87a..694db74ddea3 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c | |||
@@ -1687,7 +1687,7 @@ static int e1000_setup_rx_resources(struct e1000_adapter *adapter, | |||
1687 | struct pci_dev *pdev = adapter->pdev; | 1687 | struct pci_dev *pdev = adapter->pdev; |
1688 | int size, desc_len; | 1688 | int size, desc_len; |
1689 | 1689 | ||
1690 | size = sizeof(struct e1000_buffer) * rxdr->count; | 1690 | size = sizeof(struct e1000_rx_buffer) * rxdr->count; |
1691 | rxdr->buffer_info = vzalloc(size); | 1691 | rxdr->buffer_info = vzalloc(size); |
1692 | if (!rxdr->buffer_info) | 1692 | if (!rxdr->buffer_info) |
1693 | return -ENOMEM; | 1693 | return -ENOMEM; |
@@ -2062,7 +2062,7 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter, | |||
2062 | struct e1000_rx_ring *rx_ring) | 2062 | struct e1000_rx_ring *rx_ring) |
2063 | { | 2063 | { |
2064 | struct e1000_hw *hw = &adapter->hw; | 2064 | struct e1000_hw *hw = &adapter->hw; |
2065 | struct e1000_buffer *buffer_info; | 2065 | struct e1000_rx_buffer *buffer_info; |
2066 | struct pci_dev *pdev = adapter->pdev; | 2066 | struct pci_dev *pdev = adapter->pdev; |
2067 | unsigned long size; | 2067 | unsigned long size; |
2068 | unsigned int i; | 2068 | unsigned int i; |
@@ -2073,12 +2073,12 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter, | |||
2073 | if (buffer_info->dma && | 2073 | if (buffer_info->dma && |
2074 | adapter->clean_rx == e1000_clean_rx_irq) { | 2074 | adapter->clean_rx == e1000_clean_rx_irq) { |
2075 | dma_unmap_single(&pdev->dev, buffer_info->dma, | 2075 | dma_unmap_single(&pdev->dev, buffer_info->dma, |
2076 | buffer_info->length, | 2076 | adapter->rx_buffer_len, |
2077 | DMA_FROM_DEVICE); | 2077 | DMA_FROM_DEVICE); |
2078 | } else if (buffer_info->dma && | 2078 | } else if (buffer_info->dma && |
2079 | adapter->clean_rx == e1000_clean_jumbo_rx_irq) { | 2079 | adapter->clean_rx == e1000_clean_jumbo_rx_irq) { |
2080 | dma_unmap_page(&pdev->dev, buffer_info->dma, | 2080 | dma_unmap_page(&pdev->dev, buffer_info->dma, |
2081 | buffer_info->length, | 2081 | adapter->rx_buffer_len, |
2082 | DMA_FROM_DEVICE); | 2082 | DMA_FROM_DEVICE); |
2083 | } | 2083 | } |
2084 | 2084 | ||
@@ -2099,7 +2099,7 @@ static void e1000_clean_rx_ring(struct e1000_adapter *adapter, | |||
2099 | rx_ring->rx_skb_top = NULL; | 2099 | rx_ring->rx_skb_top = NULL; |
2100 | } | 2100 | } |
2101 | 2101 | ||
2102 | size = sizeof(struct e1000_buffer) * rx_ring->count; | 2102 | size = sizeof(struct e1000_rx_buffer) * rx_ring->count; |
2103 | memset(rx_ring->buffer_info, 0, size); | 2103 | memset(rx_ring->buffer_info, 0, size); |
2104 | 2104 | ||
2105 | /* Zero out the descriptor ring */ | 2105 | /* Zero out the descriptor ring */ |
@@ -3415,7 +3415,7 @@ rx_ring_summary: | |||
3415 | 3415 | ||
3416 | for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) { | 3416 | for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) { |
3417 | struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i); | 3417 | struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i); |
3418 | struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i]; | 3418 | struct e1000_rx_buffer *buffer_info = &rx_ring->buffer_info[i]; |
3419 | struct my_u { __le64 a; __le64 b; }; | 3419 | struct my_u { __le64 a; __le64 b; }; |
3420 | struct my_u *u = (struct my_u *)rx_desc; | 3420 | struct my_u *u = (struct my_u *)rx_desc; |
3421 | const char *type; | 3421 | const char *type; |
@@ -3951,7 +3951,7 @@ static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err, | |||
3951 | /** | 3951 | /** |
3952 | * e1000_consume_page - helper function | 3952 | * e1000_consume_page - helper function |
3953 | **/ | 3953 | **/ |
3954 | static void e1000_consume_page(struct e1000_buffer *bi, struct sk_buff *skb, | 3954 | static void e1000_consume_page(struct e1000_rx_buffer *bi, struct sk_buff *skb, |
3955 | u16 length) | 3955 | u16 length) |
3956 | { | 3956 | { |
3957 | bi->page = NULL; | 3957 | bi->page = NULL; |
@@ -4104,7 +4104,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter, | |||
4104 | struct net_device *netdev = adapter->netdev; | 4104 | struct net_device *netdev = adapter->netdev; |
4105 | struct pci_dev *pdev = adapter->pdev; | 4105 | struct pci_dev *pdev = adapter->pdev; |
4106 | struct e1000_rx_desc *rx_desc, *next_rxd; | 4106 | struct e1000_rx_desc *rx_desc, *next_rxd; |
4107 | struct e1000_buffer *buffer_info, *next_buffer; | 4107 | struct e1000_rx_buffer *buffer_info, *next_buffer; |
4108 | u32 length; | 4108 | u32 length; |
4109 | unsigned int i; | 4109 | unsigned int i; |
4110 | int cleaned_count = 0; | 4110 | int cleaned_count = 0; |
@@ -4137,7 +4137,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter, | |||
4137 | cleaned = true; | 4137 | cleaned = true; |
4138 | cleaned_count++; | 4138 | cleaned_count++; |
4139 | dma_unmap_page(&pdev->dev, buffer_info->dma, | 4139 | dma_unmap_page(&pdev->dev, buffer_info->dma, |
4140 | buffer_info->length, DMA_FROM_DEVICE); | 4140 | adapter->rx_buffer_len, DMA_FROM_DEVICE); |
4141 | buffer_info->dma = 0; | 4141 | buffer_info->dma = 0; |
4142 | 4142 | ||
4143 | length = le16_to_cpu(rx_desc->length); | 4143 | length = le16_to_cpu(rx_desc->length); |
@@ -4273,7 +4273,7 @@ next_desc: | |||
4273 | * of reassembly being done in the stack | 4273 | * of reassembly being done in the stack |
4274 | */ | 4274 | */ |
4275 | static struct sk_buff *e1000_copybreak(struct e1000_adapter *adapter, | 4275 | static struct sk_buff *e1000_copybreak(struct e1000_adapter *adapter, |
4276 | struct e1000_buffer *buffer_info, | 4276 | struct e1000_rx_buffer *buffer_info, |
4277 | u32 length, const void *data) | 4277 | u32 length, const void *data) |
4278 | { | 4278 | { |
4279 | struct sk_buff *skb; | 4279 | struct sk_buff *skb; |
@@ -4307,7 +4307,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
4307 | struct net_device *netdev = adapter->netdev; | 4307 | struct net_device *netdev = adapter->netdev; |
4308 | struct pci_dev *pdev = adapter->pdev; | 4308 | struct pci_dev *pdev = adapter->pdev; |
4309 | struct e1000_rx_desc *rx_desc, *next_rxd; | 4309 | struct e1000_rx_desc *rx_desc, *next_rxd; |
4310 | struct e1000_buffer *buffer_info, *next_buffer; | 4310 | struct e1000_rx_buffer *buffer_info, *next_buffer; |
4311 | u32 length; | 4311 | u32 length; |
4312 | unsigned int i; | 4312 | unsigned int i; |
4313 | int cleaned_count = 0; | 4313 | int cleaned_count = 0; |
@@ -4337,7 +4337,8 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
4337 | skb = buffer_info->skb; | 4337 | skb = buffer_info->skb; |
4338 | buffer_info->skb = NULL; | 4338 | buffer_info->skb = NULL; |
4339 | dma_unmap_single(&pdev->dev, buffer_info->dma, | 4339 | dma_unmap_single(&pdev->dev, buffer_info->dma, |
4340 | buffer_info->length, DMA_FROM_DEVICE); | 4340 | adapter->rx_buffer_len, |
4341 | DMA_FROM_DEVICE); | ||
4341 | buffer_info->dma = 0; | 4342 | buffer_info->dma = 0; |
4342 | } | 4343 | } |
4343 | 4344 | ||
@@ -4443,7 +4444,7 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter, | |||
4443 | struct net_device *netdev = adapter->netdev; | 4444 | struct net_device *netdev = adapter->netdev; |
4444 | struct pci_dev *pdev = adapter->pdev; | 4445 | struct pci_dev *pdev = adapter->pdev; |
4445 | struct e1000_rx_desc *rx_desc; | 4446 | struct e1000_rx_desc *rx_desc; |
4446 | struct e1000_buffer *buffer_info; | 4447 | struct e1000_rx_buffer *buffer_info; |
4447 | struct sk_buff *skb; | 4448 | struct sk_buff *skb; |
4448 | unsigned int i; | 4449 | unsigned int i; |
4449 | unsigned int bufsz = 256 - 16 /*for skb_reserve */ ; | 4450 | unsigned int bufsz = 256 - 16 /*for skb_reserve */ ; |
@@ -4466,7 +4467,6 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter, | |||
4466 | } | 4467 | } |
4467 | 4468 | ||
4468 | buffer_info->skb = skb; | 4469 | buffer_info->skb = skb; |
4469 | buffer_info->length = adapter->rx_buffer_len; | ||
4470 | check_page: | 4470 | check_page: |
4471 | /* allocate a new page if necessary */ | 4471 | /* allocate a new page if necessary */ |
4472 | if (!buffer_info->page) { | 4472 | if (!buffer_info->page) { |
@@ -4480,7 +4480,7 @@ check_page: | |||
4480 | if (!buffer_info->dma) { | 4480 | if (!buffer_info->dma) { |
4481 | buffer_info->dma = dma_map_page(&pdev->dev, | 4481 | buffer_info->dma = dma_map_page(&pdev->dev, |
4482 | buffer_info->page, 0, | 4482 | buffer_info->page, 0, |
4483 | buffer_info->length, | 4483 | PAGE_SIZE, |
4484 | DMA_FROM_DEVICE); | 4484 | DMA_FROM_DEVICE); |
4485 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) { | 4485 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) { |
4486 | put_page(buffer_info->page); | 4486 | put_page(buffer_info->page); |
@@ -4528,7 +4528,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter, | |||
4528 | struct net_device *netdev = adapter->netdev; | 4528 | struct net_device *netdev = adapter->netdev; |
4529 | struct pci_dev *pdev = adapter->pdev; | 4529 | struct pci_dev *pdev = adapter->pdev; |
4530 | struct e1000_rx_desc *rx_desc; | 4530 | struct e1000_rx_desc *rx_desc; |
4531 | struct e1000_buffer *buffer_info; | 4531 | struct e1000_rx_buffer *buffer_info; |
4532 | struct sk_buff *skb; | 4532 | struct sk_buff *skb; |
4533 | unsigned int i; | 4533 | unsigned int i; |
4534 | unsigned int bufsz = adapter->rx_buffer_len; | 4534 | unsigned int bufsz = adapter->rx_buffer_len; |
@@ -4576,10 +4576,9 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter, | |||
4576 | dev_kfree_skb(oldskb); | 4576 | dev_kfree_skb(oldskb); |
4577 | } | 4577 | } |
4578 | buffer_info->skb = skb; | 4578 | buffer_info->skb = skb; |
4579 | buffer_info->length = adapter->rx_buffer_len; | ||
4580 | buffer_info->dma = dma_map_single(&pdev->dev, | 4579 | buffer_info->dma = dma_map_single(&pdev->dev, |
4581 | skb->data, | 4580 | skb->data, |
4582 | buffer_info->length, | 4581 | adapter->rx_buffer_len, |
4583 | DMA_FROM_DEVICE); | 4582 | DMA_FROM_DEVICE); |
4584 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) { | 4583 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) { |
4585 | dev_kfree_skb(skb); | 4584 | dev_kfree_skb(skb); |