| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Support for Intel Camera Imaging ISP subsystem. |
| * Copyright (c) 2010-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 __SP_PRIVATE_H_INCLUDED__ |
| #define __SP_PRIVATE_H_INCLUDED__ |
| |
| #include "sp_public.h" |
| |
| #include "device_access.h" |
| |
| #include "assert_support.h" |
| |
| STORAGE_CLASS_SP_C void sp_ctrl_store( |
| const sp_ID_t ID, |
| const hrt_address reg, |
| const hrt_data value) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_CTRL_BASE[ID] != (hrt_address)-1); |
| ia_css_device_store_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data), value); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C hrt_data sp_ctrl_load( |
| const sp_ID_t ID, |
| const hrt_address reg) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_CTRL_BASE[ID] != (hrt_address)-1); |
| return ia_css_device_load_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data)); |
| } |
| |
| STORAGE_CLASS_SP_C bool sp_ctrl_getbit( |
| const sp_ID_t ID, |
| const hrt_address reg, |
| const unsigned int bit) |
| { |
| hrt_data val = sp_ctrl_load(ID, reg); |
| |
| return (val & (1UL << bit)) != 0; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_ctrl_setbit( |
| const sp_ID_t ID, |
| const hrt_address reg, |
| const unsigned int bit) |
| { |
| hrt_data data = sp_ctrl_load(ID, reg); |
| |
| sp_ctrl_store(ID, reg, (data | (1UL << bit))); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_ctrl_clearbit( |
| const sp_ID_t ID, |
| const hrt_address reg, |
| const unsigned int bit) |
| { |
| hrt_data data = sp_ctrl_load(ID, reg); |
| |
| sp_ctrl_store(ID, reg, (data & ~(1UL << bit))); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_dmem_store( |
| const sp_ID_t ID, |
| hrt_address addr, |
| const void *data, |
| const size_t size) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| ia_css_device_store(SP_DMEM_BASE[ID] + addr, data, size); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_dmem_load( |
| const sp_ID_t ID, |
| const hrt_address addr, |
| void *data, |
| const size_t size) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| ia_css_device_load(SP_DMEM_BASE[ID] + addr, data, size); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_dmem_store_uint8( |
| const sp_ID_t ID, |
| hrt_address addr, |
| const uint8_t data) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| ia_css_device_store_uint8(SP_DMEM_BASE[SP0_ID] + addr, data); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_dmem_store_uint16( |
| const sp_ID_t ID, |
| hrt_address addr, |
| const uint16_t data) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| ia_css_device_store_uint16(SP_DMEM_BASE[SP0_ID] + addr, data); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C void sp_dmem_store_uint32( |
| const sp_ID_t ID, |
| hrt_address addr, |
| const uint32_t data) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| ia_css_device_store_uint32(SP_DMEM_BASE[SP0_ID] + addr, data); |
| return; |
| } |
| |
| STORAGE_CLASS_SP_C uint8_t sp_dmem_load_uint8( |
| const sp_ID_t ID, |
| const hrt_address addr) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| return ia_css_device_load_uint8(SP_DMEM_BASE[SP0_ID] + addr); |
| } |
| |
| STORAGE_CLASS_SP_C uint16_t sp_dmem_load_uint16( |
| const sp_ID_t ID, |
| const hrt_address addr) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| return ia_css_device_load_uint16(SP_DMEM_BASE[SP0_ID] + addr); |
| } |
| |
| STORAGE_CLASS_SP_C uint32_t sp_dmem_load_uint32( |
| const sp_ID_t ID, |
| const hrt_address addr) |
| { |
| assert(ID < N_SP_ID); |
| assert(SP_DMEM_BASE[ID] != (hrt_address)-1); |
| (void)ID; |
| return ia_css_device_load_uint32(SP_DMEM_BASE[SP0_ID] + addr); |
| } |
| |
| #endif /* __SP_PRIVATE_H_INCLUDED__ */ |