| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Support for Intel Camera Imaging ISP subsystem. |
| * Copyright (c) 2015, Intel Corporation. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms and conditions of the GNU General Public License, |
| * version 2, as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope 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. |
| */ |
| |
| #ifndef __MMU_PUBLIC_H_INCLUDED__ |
| #define __MMU_PUBLIC_H_INCLUDED__ |
| |
| #include "system_local.h" |
| #include "device_access.h" |
| #include "assert_support.h" |
| |
| /*! Set the page table base index of MMU[ID] |
| |
| \param ID[in] MMU identifier |
| \param base_index[in] page table base index |
| |
| \return none, MMU[ID].page_table_base_index = base_index |
| */ |
| void mmu_set_page_table_base_index( |
| const mmu_ID_t ID, |
| const hrt_data base_index); |
| |
| /*! Get the page table base index of MMU[ID] |
| |
| \param ID[in] MMU identifier |
| \param base_index[in] page table base index |
| |
| \return MMU[ID].page_table_base_index |
| */ |
| hrt_data mmu_get_page_table_base_index( |
| const mmu_ID_t ID); |
| |
| /*! Invalidate the page table cache of MMU[ID] |
| |
| \param ID[in] MMU identifier |
| |
| \return none |
| */ |
| void mmu_invalidate_cache( |
| const mmu_ID_t ID); |
| |
| /*! Invalidate the page table cache of all MMUs |
| |
| \return none |
| */ |
| void mmu_invalidate_cache_all(void); |
| |
| /*! Write to a control register of MMU[ID] |
| |
| \param ID[in] MMU identifier |
| \param reg[in] register index |
| \param value[in] The data to be written |
| |
| \return none, MMU[ID].ctrl[reg] = value |
| */ |
| static inline void mmu_reg_store( |
| const mmu_ID_t ID, |
| const unsigned int reg, |
| const hrt_data value) |
| { |
| assert(ID < N_MMU_ID); |
| assert(MMU_BASE[ID] != (hrt_address) - 1); |
| ia_css_device_store_uint32(MMU_BASE[ID] + reg * sizeof(hrt_data), value); |
| return; |
| } |
| |
| /*! Read from a control register of MMU[ID] |
| |
| \param ID[in] MMU identifier |
| \param reg[in] register index |
| \param value[in] The data to be written |
| |
| \return MMU[ID].ctrl[reg] |
| */ |
| static inline hrt_data mmu_reg_load( |
| const mmu_ID_t ID, |
| const unsigned int reg) |
| { |
| assert(ID < N_MMU_ID); |
| assert(MMU_BASE[ID] != (hrt_address) - 1); |
| return ia_css_device_load_uint32(MMU_BASE[ID] + reg * sizeof(hrt_data)); |
| } |
| |
| #endif /* __MMU_PUBLIC_H_INCLUDED__ */ |