mali_descriptor_mapping * mali_descriptor_mapping_create(int init_entries, int max_entries) { mali_descriptor_mapping * map = _mali_osk_calloc(1, sizeof(mali_descriptor_mapping)); init_entries = MALI_PAD_INT(init_entries); max_entries = MALI_PAD_INT(max_entries); if (NULL != map) { map->table = descriptor_table_alloc(init_entries); if (NULL != map->table) { #if !USING_MMU map->lock = _mali_osk_lock_init( (_mali_osk_lock_flags_t)(_MALI_OSK_LOCKFLAG_ORDERED | _MALI_OSK_LOCKFLAG_READERWRITER | _MALI_OSK_LOCKFLAG_NONINTERRUPTABLE), 0, 20); #else map->lock = _mali_osk_lock_init( (_mali_osk_lock_flags_t)(_MALI_OSK_LOCKFLAG_ORDERED | _MALI_OSK_LOCKFLAG_READERWRITER | _MALI_OSK_LOCKFLAG_NONINTERRUPTABLE), 0, 116); #endif if (NULL != map->lock) { _mali_osk_set_nonatomic_bit(0, map->table->usage); /* reserve bit 0 to prevent NULL/zero logic to kick in */ map->max_nr_mappings_allowed = max_entries; map->current_nr_mappings = init_entries; return map; } descriptor_table_free(map->table); } _mali_osk_free(map); } return NULL; }
mali_descriptor_mapping * mali_descriptor_mapping_create(int init_entries, int max_entries) { mali_descriptor_mapping * map = _mali_osk_calloc(1, sizeof(mali_descriptor_mapping)); init_entries = MALI_PAD_INT(init_entries); max_entries = MALI_PAD_INT(max_entries); if (NULL != map) { map->table = descriptor_table_alloc(init_entries); if (NULL != map->table) { map->lock = _mali_osk_lock_init( (_mali_osk_lock_flags_t)(_MALI_OSK_LOCKFLAG_ORDERED | _MALI_OSK_LOCKFLAG_READERWRITER | _MALI_OSK_LOCKFLAG_NONINTERRUPTABLE), 0, _MALI_OSK_LOCK_ORDER_DESCRIPTOR_MAP); if (NULL != map->lock) { _mali_osk_set_nonatomic_bit(0, map->table->usage); map->max_nr_mappings_allowed = max_entries; map->current_nr_mappings = init_entries; return map; } descriptor_table_free(map->table); } _mali_osk_free(map); } return NULL; }
ump_descriptor_mapping *ump_descriptor_mapping_create(int init_entries, int max_entries) { ump_descriptor_mapping *map = _mali_osk_calloc(1, sizeof(ump_descriptor_mapping)); init_entries = MALI_PAD_INT(init_entries); max_entries = MALI_PAD_INT(max_entries); if (NULL != map) { map->table = descriptor_table_alloc(init_entries); if (NULL != map->table) { map->lock = _mali_osk_mutex_rw_init(_MALI_OSK_LOCKFLAG_UNORDERED, 0); if (NULL != map->lock) { _mali_osk_set_nonatomic_bit(0, map->table->usage); /* reserve bit 0 to prevent NULL/zero logic to kick in */ map->max_nr_mappings_allowed = max_entries; map->current_nr_mappings = init_entries; return map; } descriptor_table_free(map->table); } _mali_osk_free(map); } return NULL; }
umpp_descriptor_mapping * umpp_descriptor_mapping_create(unsigned int init_entries, unsigned int max_entries) { umpp_descriptor_mapping * map = kzalloc(sizeof(umpp_descriptor_mapping), GFP_KERNEL); init_entries = MALI_PAD_INT(init_entries); max_entries = MALI_PAD_INT(max_entries); if (NULL != map) { map->table = descriptor_table_alloc(init_entries); if (NULL != map->table) { init_rwsem( &map->lock); set_bit(0, map->table->usage); map->max_nr_mappings_allowed = max_entries; map->current_nr_mappings = init_entries; return map; descriptor_table_free(map->table); } kfree(map); } return NULL; }