Commit 4b45e3424e7210688f95039b8cdffb11d2e48934
Committed by
David S. Miller
1 parent
b38310e99e
Exists in
master
and in
39 other branches
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 | } |