cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

of_address.h (4270B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __OF_ADDRESS_H
      3#define __OF_ADDRESS_H
      4#include <linux/ioport.h>
      5#include <linux/errno.h>
      6#include <linux/of.h>
      7#include <linux/io.h>
      8
      9struct of_bus;
     10
     11struct of_pci_range_parser {
     12	struct device_node *node;
     13	struct of_bus *bus;
     14	const __be32 *range;
     15	const __be32 *end;
     16	int na;
     17	int ns;
     18	int pna;
     19	bool dma;
     20};
     21#define of_range_parser of_pci_range_parser
     22
     23struct of_pci_range {
     24	union {
     25		u64 pci_addr;
     26		u64 bus_addr;
     27	};
     28	u64 cpu_addr;
     29	u64 size;
     30	u32 flags;
     31};
     32#define of_range of_pci_range
     33
     34#define for_each_of_pci_range(parser, range) \
     35	for (; of_pci_range_parser_one(parser, range);)
     36#define for_each_of_range for_each_of_pci_range
     37
     38/* Translate a DMA address from device space to CPU space */
     39extern u64 of_translate_dma_address(struct device_node *dev,
     40				    const __be32 *in_addr);
     41
     42#ifdef CONFIG_OF_ADDRESS
     43extern u64 of_translate_address(struct device_node *np, const __be32 *addr);
     44extern int of_address_to_resource(struct device_node *dev, int index,
     45				  struct resource *r);
     46extern void __iomem *of_iomap(struct device_node *device, int index);
     47void __iomem *of_io_request_and_map(struct device_node *device,
     48				    int index, const char *name);
     49
     50/* Extract an address from a device, returns the region size and
     51 * the address space flags too. The PCI version uses a BAR number
     52 * instead of an absolute index
     53 */
     54extern const __be32 *__of_get_address(struct device_node *dev, int index, int bar_no,
     55				      u64 *size, unsigned int *flags);
     56
     57extern int of_pci_range_parser_init(struct of_pci_range_parser *parser,
     58			struct device_node *node);
     59extern int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
     60			struct device_node *node);
     61extern struct of_pci_range *of_pci_range_parser_one(
     62					struct of_pci_range_parser *parser,
     63					struct of_pci_range *range);
     64extern int of_pci_address_to_resource(struct device_node *dev, int bar,
     65				      struct resource *r);
     66extern int of_pci_range_to_resource(struct of_pci_range *range,
     67				    struct device_node *np,
     68				    struct resource *res);
     69extern bool of_dma_is_coherent(struct device_node *np);
     70#else /* CONFIG_OF_ADDRESS */
     71static inline void __iomem *of_io_request_and_map(struct device_node *device,
     72						  int index, const char *name)
     73{
     74	return IOMEM_ERR_PTR(-EINVAL);
     75}
     76
     77static inline u64 of_translate_address(struct device_node *np,
     78				       const __be32 *addr)
     79{
     80	return OF_BAD_ADDR;
     81}
     82
     83static inline const __be32 *__of_get_address(struct device_node *dev, int index, int bar_no,
     84					     u64 *size, unsigned int *flags)
     85{
     86	return NULL;
     87}
     88
     89static inline int of_pci_range_parser_init(struct of_pci_range_parser *parser,
     90			struct device_node *node)
     91{
     92	return -ENOSYS;
     93}
     94
     95static inline int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
     96			struct device_node *node)
     97{
     98	return -ENOSYS;
     99}
    100
    101static inline struct of_pci_range *of_pci_range_parser_one(
    102					struct of_pci_range_parser *parser,
    103					struct of_pci_range *range)
    104{
    105	return NULL;
    106}
    107
    108static inline int of_pci_address_to_resource(struct device_node *dev, int bar,
    109				             struct resource *r)
    110{
    111	return -ENOSYS;
    112}
    113
    114static inline int of_pci_range_to_resource(struct of_pci_range *range,
    115					   struct device_node *np,
    116					   struct resource *res)
    117{
    118	return -ENOSYS;
    119}
    120
    121static inline bool of_dma_is_coherent(struct device_node *np)
    122{
    123	return false;
    124}
    125#endif /* CONFIG_OF_ADDRESS */
    126
    127#ifdef CONFIG_OF
    128extern int of_address_to_resource(struct device_node *dev, int index,
    129				  struct resource *r);
    130void __iomem *of_iomap(struct device_node *node, int index);
    131#else
    132static inline int of_address_to_resource(struct device_node *dev, int index,
    133					 struct resource *r)
    134{
    135	return -EINVAL;
    136}
    137
    138static inline void __iomem *of_iomap(struct device_node *device, int index)
    139{
    140	return NULL;
    141}
    142#endif
    143#define of_range_parser_init of_pci_range_parser_init
    144
    145static inline const __be32 *of_get_address(struct device_node *dev, int index,
    146					   u64 *size, unsigned int *flags)
    147{
    148	return __of_get_address(dev, index, -1, size, flags);
    149}
    150
    151static inline const __be32 *of_get_pci_address(struct device_node *dev, int bar_no,
    152					       u64 *size, unsigned int *flags)
    153{
    154	return __of_get_address(dev, -1, bar_no, size, flags);
    155}
    156
    157#endif /* __OF_ADDRESS_H */