1 /*
2  * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /*
8  * @file	generic/io.c
9  * @brief	Generic libmetal io operations
10  */
11 
12 #include <metal/io.h>
13 
metal_sys_io_mem_map(struct metal_io_region * io)14 void metal_sys_io_mem_map(struct metal_io_region *io)
15 {
16 	unsigned long p;
17 	size_t psize;
18 	size_t *va;
19 
20 	va = io->virt;
21 	psize = (size_t)io->size;
22 	if (psize) {
23 		if (psize >> io->page_shift)
24 			psize = (size_t)1 << io->page_shift;
25 		for (p = 0; p <= (io->size >> io->page_shift); p++) {
26 			metal_machine_io_mem_map(va, io->physmap[p],
27 						 psize, io->mem_flags);
28 			va += psize;
29 		}
30 	}
31 }
32