Thread (34 messages) 34 messages, 7 authors, 2010-09-07

Re: [PATCH] Gigabit Ethernet driver of Topcliff PCH

From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Date: 2010-09-03 02:24:55
Also in: lkml

On Tue, 31 Aug 2010 23:15:22 +0900
Masayuki Ohtake [off-list ref] wrote:
Gigabit Ethernet driver of Topcliff PCH
Patch created against 2.6.35

Topcliff PCH is the platform controller hub that is going to be used in
Intel's upcoming general embedded platform. All IO peripherals in
Topcliff PCH are actually devices sitting on AMBA bus. 
Topcliff PCH has Gigabit Ethernet I/F. Using this I/F, it is able to 
access system devices connected to Gigabit Ethernet.

Signed-off-by: Masayuki Ohtake <redacted>
---
 drivers/net/Kconfig                   |   10 +
 drivers/net/Makefile                  |    1 +
 drivers/net/pch_gbe/Makefile          |    4 +
 drivers/net/pch_gbe/pch_gbe.h         |  683 +++++++++
 drivers/net/pch_gbe/pch_gbe_api.c     |  246 ++++
 drivers/net/pch_gbe/pch_gbe_api.h     |   34 +
 drivers/net/pch_gbe/pch_gbe_ethtool.c |  618 ++++++++
 drivers/net/pch_gbe/pch_gbe_main.c    | 2591 +++++++++++++++++++++++++++++++++
 drivers/net/pch_gbe/pch_gbe_param.c   |  519 +++++++
 drivers/net/pch_gbe/pch_gbe_phy.c     |  276 ++++
 drivers/net/pch_gbe/pch_gbe_phy.h     |   35 +
 11 files changed, 5017 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/pch_gbe/Makefile
 create mode 100644 drivers/net/pch_gbe/pch_gbe.h
 create mode 100644 drivers/net/pch_gbe/pch_gbe_api.c
 create mode 100644 drivers/net/pch_gbe/pch_gbe_api.h
 create mode 100644 drivers/net/pch_gbe/pch_gbe_ethtool.c
 create mode 100644 drivers/net/pch_gbe/pch_gbe_main.c
 create mode 100644 drivers/net/pch_gbe/pch_gbe_param.c
 create mode 100644 drivers/net/pch_gbe/pch_gbe_phy.c
 create mode 100644 drivers/net/pch_gbe/pch_gbe_phy.h
(snip)
+/**
+ * pch_gbe_unmap_and_free_rx_resource - Unmap and free rx socket buffer
+ * @adapter:      Board private structure
+ * @buffer_info:  Buffer information structure
+ */
+static void pch_gbe_unmap_and_free_rx_resource(
+					struct pch_gbe_adapter *adapter,
+					struct pch_gbe_buffer *buffer_info)
+{
+	if (buffer_info->dma) {
+		pci_unmap_single(adapter->pdev, buffer_info->dma,
+				 buffer_info->length, PCI_DMA_FROMDEVICE);
+		buffer_info->dma = 0;
Probably, this trick doesn't work because zero could be a valid DMA
address on some architctures.

+	/*-- Set Buffer infomation --*/
+	buffer_info->length = skb->len;
+	buffer_info->dma =
+	    pci_map_single(adapter->pdev, skb->data, buffer_info->length,
+			   PCI_DMA_TODEVICE);
Needs to handle mapping failure (dma_mapping_errro)?

I found the same problems in other places.


Can you use dma_map_* API instead of pci_map_*? Please read:

Documentation/DMA-API.txt
Documentation/DMA-API-HOWTO.txt


Thanks,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help