void *mali_descriptor_mapping_free(mali_descriptor_mapping *map, int descriptor) { void *old_value = NULL; mali_mem_allocation *tmp_descriptor; struct mali_session_data *session; _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RW); if ((descriptor >= 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage)) { old_value = map->table->mappings[descriptor]; map->table->mappings[descriptor] = NULL; _mali_osk_clear_nonatomic_bit(descriptor, map->table->usage); } if (NULL != old_value) { tmp_descriptor = (mali_mem_allocation *)old_value; session = tmp_descriptor->session; MALI_DEBUG_ASSERT_POINTER(session); MALI_DEBUG_ASSERT(session->mali_mem_array[tmp_descriptor->type] >= tmp_descriptor->size); session->mali_mem_array[tmp_descriptor->type] -= tmp_descriptor->size; } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RW); return old_value; }
void ump_descriptor_mapping_free(ump_descriptor_mapping *map, int descriptor) { _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RW); if ((descriptor > 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage)) { map->table->mappings[descriptor] = NULL; _mali_osk_clear_nonatomic_bit(descriptor, map->table->usage); } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RW); }
int ump_descriptor_mapping_set(ump_descriptor_mapping *map, int descriptor, void *target) { int result = -1;/*-EFAULT;*/ _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RO); if ((descriptor > 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage)) { map->table->mappings[descriptor] = target; result = 0; } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RO); return result; }
_mali_osk_errcode_t mali_descriptor_mapping_set(mali_descriptor_mapping * map, int descriptor, void * target) { _mali_osk_errcode_t result = _MALI_OSK_ERR_FAULT; _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RO); if ( (descriptor >= 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage) ) { map->table->mappings[descriptor] = target; result = _MALI_OSK_ERR_OK; } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RO); MALI_ERROR(result); }
int ump_descriptor_mapping_get(ump_descriptor_mapping *map, int descriptor, void **target) { int result = -1;/*-EFAULT;*/ DEBUG_ASSERT(map); _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RO); if ((descriptor > 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage)) { *target = map->table->mappings[descriptor]; result = 0; } else *target = NULL; _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RO); return result; }
_mali_osk_errcode_t mali_descriptor_mapping_get(mali_descriptor_mapping * map, int descriptor, void** target) { _mali_osk_errcode_t result = _MALI_OSK_ERR_FAULT; MALI_DEBUG_ASSERT_POINTER(map); _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RO); if ( (descriptor >= 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage) ) { *target = map->table->mappings[descriptor]; result = _MALI_OSK_ERR_OK; } else *target = NULL; _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RO); MALI_ERROR(result); }
void *mali_descriptor_mapping_free(mali_descriptor_mapping * map, int descriptor) { void *old_value = NULL; _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RW); if ( (descriptor >= 0) && (descriptor < map->current_nr_mappings) && _mali_osk_test_bit(descriptor, map->table->usage) ) { old_value = map->table->mappings[descriptor]; map->table->mappings[descriptor] = NULL; _mali_osk_clear_nonatomic_bit(descriptor, map->table->usage); } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RW); return old_value; }
void mali_descriptor_mapping_call_for_each(mali_descriptor_mapping * map, void (*callback)(int, void*)) { int i; MALI_DEBUG_ASSERT_POINTER(map); MALI_DEBUG_ASSERT_POINTER(callback); _mali_osk_mutex_rw_wait(map->lock, _MALI_OSK_LOCKMODE_RO); /* id 0 is skipped as it's an reserved ID not mapping to anything */ for (i = 1; i < map->current_nr_mappings; ++i) { if (_mali_osk_test_bit(i, map->table->usage)) { callback(i, map->table->mappings[i]); } } _mali_osk_mutex_rw_signal(map->lock, _MALI_OSK_LOCKMODE_RO); }
void mali_descriptor_mapping_call_for_each(mali_descriptor_mapping * map, void (*callback)(int, void*)) { int i; MALI_DEBUG_ASSERT_POINTER(map); MALI_DEBUG_ASSERT_POINTER(callback); _mali_osk_lock_wait(map->lock, _MALI_OSK_LOCKMODE_RO); for (i = 1; i < map->current_nr_mappings; ++i) { if (_mali_osk_test_bit(i, map->table->usage)) { callback(i, map->table->mappings[i]); } } _mali_osk_lock_signal(map->lock, _MALI_OSK_LOCKMODE_RO); }