// 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. */ #include "system_global.h" #ifdef ISP2401 #include "assert_support.h" #include "platform_support.h" #include "ia_css_isys.h" #include "bitop_support.h" #include "isys_stream2mmio_rmgr.h" static isys_stream2mmio_rsrc_t isys_stream2mmio_rsrc[N_STREAM2MMIO_ID]; void ia_css_isys_stream2mmio_sid_rmgr_init(void) { memset(isys_stream2mmio_rsrc, 0, sizeof(isys_stream2mmio_rsrc)); } void ia_css_isys_stream2mmio_sid_rmgr_uninit(void) { memset(isys_stream2mmio_rsrc, 0, sizeof(isys_stream2mmio_rsrc)); } bool ia_css_isys_stream2mmio_sid_rmgr_acquire( stream2mmio_ID_t stream2mmio, stream2mmio_sid_ID_t *sid) { bool retval = false; stream2mmio_sid_ID_t max_sid; isys_stream2mmio_rsrc_t *cur_rsrc = NULL; stream2mmio_sid_ID_t i; assert(stream2mmio < N_STREAM2MMIO_ID); assert(sid); if ((stream2mmio < N_STREAM2MMIO_ID) && (sid)) { max_sid = N_STREAM2MMIO_SID_PROCS[stream2mmio]; cur_rsrc = &isys_stream2mmio_rsrc[stream2mmio]; if (cur_rsrc->num_active < max_sid) { for (i = STREAM2MMIO_SID0_ID; i < max_sid; i++) { if (bitop_getbit(cur_rsrc->active_table, i) == 0) { bitop_setbit(cur_rsrc->active_table, i); *sid = i; cur_rsrc->num_active++; retval = true; break; } } } } return retval; } void ia_css_isys_stream2mmio_sid_rmgr_release( stream2mmio_ID_t stream2mmio, stream2mmio_sid_ID_t *sid) { stream2mmio_sid_ID_t max_sid; isys_stream2mmio_rsrc_t *cur_rsrc = NULL; assert(stream2mmio < N_STREAM2MMIO_ID); assert(sid); if ((stream2mmio < N_STREAM2MMIO_ID) && (sid)) { max_sid = N_STREAM2MMIO_SID_PROCS[stream2mmio]; cur_rsrc = &isys_stream2mmio_rsrc[stream2mmio]; if ((*sid < max_sid) && (cur_rsrc->num_active > 0)) { if (bitop_getbit(cur_rsrc->active_table, *sid) == 1) { bitop_clearbit(cur_rsrc->active_table, *sid); cur_rsrc->num_active--; } } } } #endif