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

omap-iopgtable.h (2739B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * omap iommu: pagetable definitions
      4 *
      5 * Copyright (C) 2008-2010 Nokia Corporation
      6 *
      7 * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
      8 */
      9
     10#ifndef _OMAP_IOPGTABLE_H
     11#define _OMAP_IOPGTABLE_H
     12
     13#include <linux/bitops.h>
     14
     15/*
     16 * "L2 table" address mask and size definitions.
     17 */
     18#define IOPGD_SHIFT		20
     19#define IOPGD_SIZE		BIT(IOPGD_SHIFT)
     20#define IOPGD_MASK		(~(IOPGD_SIZE - 1))
     21
     22/*
     23 * "section" address mask and size definitions.
     24 */
     25#define IOSECTION_SHIFT		20
     26#define IOSECTION_SIZE		BIT(IOSECTION_SHIFT)
     27#define IOSECTION_MASK		(~(IOSECTION_SIZE - 1))
     28
     29/*
     30 * "supersection" address mask and size definitions.
     31 */
     32#define IOSUPER_SHIFT		24
     33#define IOSUPER_SIZE		BIT(IOSUPER_SHIFT)
     34#define IOSUPER_MASK		(~(IOSUPER_SIZE - 1))
     35
     36#define PTRS_PER_IOPGD		(1UL << (32 - IOPGD_SHIFT))
     37#define IOPGD_TABLE_SIZE	(PTRS_PER_IOPGD * sizeof(u32))
     38
     39/*
     40 * "small page" address mask and size definitions.
     41 */
     42#define IOPTE_SHIFT		12
     43#define IOPTE_SIZE		BIT(IOPTE_SHIFT)
     44#define IOPTE_MASK		(~(IOPTE_SIZE - 1))
     45
     46/*
     47 * "large page" address mask and size definitions.
     48 */
     49#define IOLARGE_SHIFT		16
     50#define IOLARGE_SIZE		BIT(IOLARGE_SHIFT)
     51#define IOLARGE_MASK		(~(IOLARGE_SIZE - 1))
     52
     53#define PTRS_PER_IOPTE		(1UL << (IOPGD_SHIFT - IOPTE_SHIFT))
     54#define IOPTE_TABLE_SIZE	(PTRS_PER_IOPTE * sizeof(u32))
     55
     56#define IOPAGE_MASK		IOPTE_MASK
     57
     58/**
     59 * omap_iommu_translate() - va to pa translation
     60 * @d:		omap iommu descriptor
     61 * @va:		virtual address
     62 * @mask:	omap iommu descriptor mask
     63 *
     64 * va to pa translation
     65 */
     66static inline phys_addr_t omap_iommu_translate(unsigned long d, dma_addr_t va,
     67					       dma_addr_t mask)
     68{
     69	return (d & mask) | (va & (~mask));
     70}
     71
     72/*
     73 * some descriptor attributes.
     74 */
     75#define IOPGD_TABLE		(1)
     76#define IOPGD_SECTION		(2)
     77#define IOPGD_SUPER		(BIT(18) | IOPGD_SECTION)
     78
     79#define iopgd_is_table(x)	(((x) & 3) == IOPGD_TABLE)
     80#define iopgd_is_section(x)	(((x) & (1 << 18 | 3)) == IOPGD_SECTION)
     81#define iopgd_is_super(x)	(((x) & (1 << 18 | 3)) == IOPGD_SUPER)
     82
     83#define IOPTE_SMALL		(2)
     84#define IOPTE_LARGE		(1)
     85
     86#define iopte_is_small(x)	(((x) & 2) == IOPTE_SMALL)
     87#define iopte_is_large(x)	(((x) & 3) == IOPTE_LARGE)
     88
     89/* to find an entry in a page-table-directory */
     90#define iopgd_index(da)		(((da) >> IOPGD_SHIFT) & (PTRS_PER_IOPGD - 1))
     91#define iopgd_offset(obj, da)	((obj)->iopgd + iopgd_index(da))
     92
     93#define iopgd_page_paddr(iopgd)	(*iopgd & ~((1 << 10) - 1))
     94#define iopgd_page_vaddr(iopgd)	((u32 *)phys_to_virt(iopgd_page_paddr(iopgd)))
     95
     96/* to find an entry in the second-level page table. */
     97#define iopte_index(da)		(((da) >> IOPTE_SHIFT) & (PTRS_PER_IOPTE - 1))
     98#define iopte_offset(iopgd, da)	(iopgd_page_vaddr(iopgd) + iopte_index(da))
     99
    100#endif /* _OMAP_IOPGTABLE_H */