/******************************************************************************
|
*
|
* Copyright(c) 2019 - Realtek Corporation.
|
*
|
* This program is free software; you can redistribute it and/or modify it
|
* under the terms of version 2 of the GNU General Public License as
|
* published by the Free Software Foundation.
|
*
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* more details.
|
*
|
*****************************************************************************/
|
#include "drv_types.h"
|
|
#if 1
|
void pci_cache_wback(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
if (NULL != hwdev && NULL != bus_addr)
|
pci_dma_sync_single_for_device(hwdev, *bus_addr, size,
|
direction);
|
else
|
RTW_ERR("pcie hwdev handle or bus addr is NULL!\n");
|
}
|
void pci_cache_inv(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
if (NULL != hwdev && NULL != bus_addr)
|
pci_dma_sync_single_for_cpu(hwdev, *bus_addr, size, direction);
|
else
|
RTW_ERR("pcie hwdev handle or bus addr is NULL!\n");
|
}
|
void pci_get_bus_addr(struct pci_dev *hwdev,
|
void *vir_addr, dma_addr_t *bus_addr,
|
size_t size, int direction)
|
{
|
if (NULL != hwdev) {
|
*bus_addr = pci_map_single(hwdev, vir_addr, size, direction);
|
} else {
|
RTW_ERR("pcie hwdev handle is NULL!\n");
|
*bus_addr = (dma_addr_t)virt_to_phys(vir_addr);
|
/*RTW_ERR("Get bus_addr: %x by virt_to_phys()\n", bus_addr);*/
|
}
|
}
|
void pci_unmap_bus_addr(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
if (NULL != hwdev && NULL != bus_addr)
|
pci_unmap_single(hwdev, *bus_addr, size, direction);
|
else
|
RTW_ERR("pcie hwdev handle or bus addr is NULL!\n");
|
}
|
void *pci_alloc_cache_mem(struct pci_dev *pdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
void *vir_addr = NULL;
|
|
vir_addr = rtw_zmalloc(size);
|
|
if (!vir_addr)
|
bus_addr = NULL;
|
else
|
pci_get_bus_addr(pdev, vir_addr, bus_addr, size, direction);
|
|
return vir_addr;
|
}
|
void *pci_alloc_noncache_mem(struct pci_dev *pdev,
|
dma_addr_t *bus_addr, size_t size)
|
{
|
void *vir_addr = NULL;
|
|
if (NULL != pdev)
|
vir_addr = pci_alloc_consistent(pdev, size, bus_addr);
|
|
if (!vir_addr)
|
bus_addr = NULL;
|
else
|
bus_addr = (dma_addr_t *)((((SIZE_PTR)bus_addr + 3) / 4) * 4);
|
|
return vir_addr;
|
}
|
void pci_free_cache_mem(struct pci_dev *pdev,
|
void *vir_addr, dma_addr_t *bus_addr,
|
size_t size, int direction)
|
{
|
pci_unmap_bus_addr(pdev, bus_addr, size, direction);
|
rtw_mfree(vir_addr, size);
|
|
vir_addr = NULL;
|
}
|
void pci_free_noncache_mem(struct pci_dev *pdev,
|
void *vir_addr, dma_addr_t *bus_addr, size_t size)
|
{
|
if (NULL != pdev)
|
pci_free_consistent(pdev, size, vir_addr, *bus_addr);
|
vir_addr = NULL;
|
}
|
#endif
|
|
#if 0
|
void pci_cache_wback(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
pci_dma_sync_single_for_device(hwdev, *bus_addr, size, direction);
|
}
|
void pci_cache_inv(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
pci_dma_sync_single_for_cpu(hwdev, *bus_addr, size, direction);
|
}
|
void pci_get_bus_addr(struct pci_dev *hwdev,
|
void *vir_addr, dma_addr_t *bus_addr,
|
size_t size, int direction)
|
{
|
*bus_addr = (dma_addr_t)virt_to_phys(vir_addr);
|
|
return bus_addr;
|
}
|
void pci_unmap_bus_addr(struct pci_dev *hwdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
/* pci_unmap_single(hwdev, *bus_addr, size, direction); */
|
}
|
void *pci_alloc_cache_mem(struct pci_dev *pdev,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
void *vir_addr = NULL;
|
|
vir_addr = rtw_zmalloc(size);
|
|
if (!vir_addr) {
|
bus_addr = NULL;
|
}
|
else {
|
pci_get_bus_addr(pdev, vir_addr, bus_addr, size,
|
direction);
|
}
|
|
return vir_addr;
|
}
|
void *pci_alloc_noncache_mem(struct pci_dev *pdev,
|
dma_addr_t *bus_addr, size_t size)
|
{
|
void *vir_addr = NULL;
|
|
vir_addr = pci_alloc_consistent(pdev, size, bus_addr);
|
|
if (!vir_addr)
|
bus_addr = NULL;
|
else
|
bus_addr = (dma_addr_t *)((((SIZE_PTR)bus_addr + 3) / 4) * 4);
|
return vir_addr;
|
}
|
void pci_free_cache_mem(struct pci_dev *pdev, void *vir_addr,
|
dma_addr_t *bus_addr, size_t size, int direction)
|
{
|
platform_mips_98d_unmap_bus_addr(pdev, bus_addr, size, direction);
|
|
rtw_mfree(vir_addr, size);
|
|
vir_addr = NULL;
|
}
|
void pci_free_noncache_mem(struct pci_dev *pdev, void *vir_addr,
|
dma_addr_t *bus_addr, size_t size)
|
{
|
pci_free_consistent(pdev, size, vir_addr, *bus_addr);
|
vir_addr = NULL;
|
}
|
#endif
|