Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/cavium/thunder_pcie_common.c
Show First 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
#include "thunder_pcie_common.h" | #include "thunder_pcie_common.h" | ||||
uint32_t | uint32_t | ||||
range_addr_is_pci(struct pcie_range *ranges, uint64_t addr, uint64_t size) | range_addr_is_pci(struct pcie_range *ranges, uint64_t addr, uint64_t size) | ||||
{ | { | ||||
struct pcie_range *r; | struct pcie_range *r; | ||||
int tuple; | int tuple; | ||||
for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) { | for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) { | ||||
r = &ranges[tuple]; | r = &ranges[tuple]; | ||||
if (addr >= r->pci_base && | if (addr >= r->pci_base && | ||||
addr < (r->pci_base + r->size) && | addr < (r->pci_base + r->size) && | ||||
size < r->size) { | size < r->size) { | ||||
/* Address is within PCI range */ | /* Address is within PCI range */ | ||||
return (1); | return (1); | ||||
} | } | ||||
} | } | ||||
/* Address is outside PCI range */ | /* Address is outside PCI range */ | ||||
return (0); | return (0); | ||||
} | } | ||||
uint32_t | uint32_t | ||||
range_addr_is_phys(struct pcie_range *ranges, uint64_t addr, uint64_t size) | range_addr_is_phys(struct pcie_range *ranges, uint64_t addr, uint64_t size) | ||||
{ | { | ||||
struct pcie_range *r; | struct pcie_range *r; | ||||
int tuple; | int tuple; | ||||
for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) { | for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) { | ||||
r = &ranges[tuple]; | r = &ranges[tuple]; | ||||
if (addr >= r->phys_base && | if (addr >= r->phys_base && | ||||
addr < (r->phys_base + r->size) && | addr < (r->phys_base + r->size) && | ||||
size < r->size) { | size < r->size) { | ||||
/* Address is within Physical range */ | /* Address is within Physical range */ | ||||
return (1); | return (1); | ||||
} | } | ||||
} | } | ||||
/* Address is outside Physical range */ | /* Address is outside Physical range */ | ||||
return (0); | return (0); | ||||
} | } | ||||
uint64_t | uint64_t | ||||
range_addr_pci_to_phys(struct pcie_range *ranges, uint64_t pci_addr) | range_addr_pci_to_phys(struct pcie_range *ranges, uint64_t pci_addr) | ||||
{ | { | ||||
struct pcie_range *r; | struct pcie_range *r; | ||||
uint64_t offset; | uint64_t offset; | ||||
int tuple; | int tuple; | ||||
/* Find physical address corresponding to given bus address */ | /* Find physical address corresponding to given bus address */ | ||||
for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) { | for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) { | ||||
r = &ranges[tuple]; | r = &ranges[tuple]; | ||||
if (pci_addr >= r->pci_base && | if (pci_addr >= r->pci_base && | ||||
pci_addr < (r->pci_base + r->size)) { | pci_addr < (r->pci_base + r->size)) { | ||||
/* Given pci addr is in this range. | /* Given pci addr is in this range. | ||||
* Translate bus addr to phys addr. | * Translate bus addr to phys addr. | ||||
*/ | */ | ||||
offset = pci_addr - r->pci_base; | offset = pci_addr - r->pci_base; | ||||
return (r->phys_base + offset); | return (r->phys_base + offset); | ||||
} | } | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||