Commit 4b45e3424e7210688f95039b8cdffb11d2e48934

Authored by Jie Yang
Committed by David S. Miller
1 parent b38310e99e

atl1c:add pci map direction in atl1c_buffer flags

add pci map direction in atl1c_buffer flags, it is used when call pci_unmap
apis.
Signed-off-by: Jie Yang <jie.yang@atheros.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 2 changed files with 24 additions and 9 deletions Side-by-side Diff

drivers/net/atl1c/atl1c.h
... ... @@ -479,6 +479,9 @@
479 479 #define ATL1C_PCIMAP_PAGE 0x0008
480 480 #define ATL1C_PCIMAP_TYPE_MASK 0x000C
481 481  
  482 +#define ATL1C_PCIMAP_TODEVICE 0x0010
  483 +#define ATL1C_PCIMAP_FROMDEVICE 0x0020
  484 +#define ATL1C_PCIMAP_DIRECTION_MASK 0x0030
482 485 dma_addr_t dma;
483 486 };
484 487  
... ... @@ -487,9 +490,11 @@
487 490 ((buff)->flags) |= (state); \
488 491 } while (0)
489 492  
490   -#define ATL1C_SET_PCIMAP_TYPE(buff, type) do { \
491   - ((buff)->flags) &= ~ATL1C_PCIMAP_TYPE_MASK; \
492   - ((buff)->flags) |= (type); \
  493 +#define ATL1C_SET_PCIMAP_TYPE(buff, type, direction) do { \
  494 + ((buff)->flags) &= ~ATL1C_PCIMAP_TYPE_MASK; \
  495 + ((buff)->flags) |= (type); \
  496 + ((buff)->flags) &= ~ATL1C_PCIMAP_DIRECTION_MASK; \
  497 + ((buff)->flags) |= (direction); \
493 498 } while (0)
494 499  
495 500 /* transimit packet descriptor (tpd) ring */
drivers/net/atl1c/atl1c_main.c
... ... @@ -713,15 +713,21 @@
713 713 static inline void atl1c_clean_buffer(struct pci_dev *pdev,
714 714 struct atl1c_buffer *buffer_info, int in_irq)
715 715 {
  716 + u16 pci_driection;
716 717 if (buffer_info->flags & ATL1C_BUFFER_FREE)
717 718 return;
718 719 if (buffer_info->dma) {
  720 + if (buffer_info->flags & ATL1C_PCIMAP_FROMDEVICE)
  721 + pci_driection = PCI_DMA_FROMDEVICE;
  722 + else
  723 + pci_driection = PCI_DMA_TODEVICE;
  724 +
719 725 if (buffer_info->flags & ATL1C_PCIMAP_SINGLE)
720 726 pci_unmap_single(pdev, buffer_info->dma,
721   - buffer_info->length, PCI_DMA_TODEVICE);
  727 + buffer_info->length, pci_driection);
722 728 else if (buffer_info->flags & ATL1C_PCIMAP_PAGE)
723 729 pci_unmap_page(pdev, buffer_info->dma,
724   - buffer_info->length, PCI_DMA_TODEVICE);
  730 + buffer_info->length, pci_driection);
725 731 }
726 732 if (buffer_info->skb) {
727 733 if (in_irq)
... ... @@ -1606,7 +1612,8 @@
1606 1612 buffer_info->dma = pci_map_single(pdev, vir_addr,
1607 1613 buffer_info->length,
1608 1614 PCI_DMA_FROMDEVICE);
1609   - ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE);
  1615 + ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  1616 + ATL1C_PCIMAP_FROMDEVICE);
1610 1617 rfd_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
1611 1618 rfd_next_to_use = next_next;
1612 1619 if (++next_next == rfd_ring->count)
... ... @@ -1967,7 +1974,8 @@
1967 1974 buffer_info->dma = pci_map_single(adapter->pdev,
1968 1975 skb->data, hdr_len, PCI_DMA_TODEVICE);
1969 1976 ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
1970   - ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE);
  1977 + ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  1978 + ATL1C_PCIMAP_TODEVICE);
1971 1979 mapped_len += map_len;
1972 1980 use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
1973 1981 use_tpd->buffer_len = cpu_to_le16(buffer_info->length);
... ... @@ -1988,7 +1996,8 @@
1988 1996 pci_map_single(adapter->pdev, skb->data + mapped_len,
1989 1997 buffer_info->length, PCI_DMA_TODEVICE);
1990 1998 ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
1991   - ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE);
  1999 + ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE,
  2000 + ATL1C_PCIMAP_TODEVICE);
1992 2001 use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
1993 2002 use_tpd->buffer_len = cpu_to_le16(buffer_info->length);
1994 2003 }
... ... @@ -2009,7 +2018,8 @@
2009 2018 buffer_info->length,
2010 2019 PCI_DMA_TODEVICE);
2011 2020 ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY);
2012   - ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_PAGE);
  2021 + ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_PAGE,
  2022 + ATL1C_PCIMAP_TODEVICE);
2013 2023 use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
2014 2024 use_tpd->buffer_len = cpu_to_le16(buffer_info->length);
2015 2025 }