/*! @brief fta_stop FTA stop function @param none @retval none */ void fta_stop(fta_stop_reason_enum reason) { if(fta_manager == NULL) return; FTA_ENTER_LOCK(); if(fta_lock_keeper.manager_status == FTA_MANAGER_STATUS_ENABLED) { fta_lock_keeper.manager_status = FTA_MANAGER_STATUS_STOP; /* - - - - - - - - */ switch(reason) { case FTA_STOP_REASON_NORMAL: FTA_LIB_CHANGEBIT_CLR(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING); fta_manager->cmn.enabled = FTA_STORE_ENABLED_FALSE; fta_manager->parity = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity); break; case FTA_STOP_REASON_ABNORMAL: break; case FTA_STOP_REASON_INTENTIONAL: FTA_LIB_CHANGEBIT_SET(fta_manager->cmn.statbit, FTA_STORE_STATBIT_INTENTIONAL); fta_manager->parity = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity); } /* - - - - - - - - */ FTA_MEMORY_FLUSH(); } FTA_LEAVE_LOCK(); _fta_manage_terminate_store_items(fta_manager); fta_reference = fta_reference_null; return; }
/*! @brief fta_initialize FTA initialize function @param none @retval none */ void fta_initialize(void) { boolean dofirst = (fta_manager == NULL ? TRUE : FALSE); if(!dofirst) { memset(&fta_lock_keeper, 0, sizeof(fta_lock_keeper)); memset(&fta_reference, 0, sizeof(fta_reference)); } memset(fta_log_area,0,FTA_CONFIG_STORE_MEMORY_SIZE); fta_manager = (fta_manager_store_header *)fta_log_area; fta_manager_initializer.fta_manager = fta_manager; fta_manager_initializer.memory_addr = FTA_LIB_OFFSET_ADDR(((uint8 *)fta_manager), FTA_CALC_MANAGER_SIZE(FTA_CONFIG_STORE_INITIAL_COUNT)); if(_fta_manage_initialize(&fta_manager_initializer)) { _fta_manage_initialize_store_items(fta_manager); fta_manager->cmn.enabled = FTA_STORE_ENABLED_TRUE; FTA_LIB_CHANGEBIT_SET(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING); fta_manager->parity = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity); FTA_MEMORY_FLUSH(); fta_lock_keeper.manager_status = FTA_MANAGER_STATUS_ENABLED; /* start logging */ FTA_LOG_MESSAGE(FTA_ADMIN, FTA_LOG_LEVEL_NOTICE, "*** FTA INITIALIZED %x %x", fta_log_area, virt_to_phys(fta_log_area),0); } return; }
/*! @brief _fta_var_init_common2 initialize for variable area (for ver 2) @param [in] store_item item for manage @retval none */ void _fta_var_init_common2(fta_manager_store_item *store_item) { fta_var_store_header *var_header = (fta_var_store_header *)(store_item->addr); var_header->count = 0; var_header->version = 2; var_header->quota = FTA_VAR_QUOTA_DEFAULT; var_header->bottom = 0; var_header->cmn.enabled = TRUE; FTA_LIB_CHANGEBIT_SET(var_header->cmn.statbit, FTA_STORE_STATBIT_RECORDING); return; }
/*! @brief _fta_listex_hash_init_common initialize for list hash area @param [in] store_item item for manage @retval none @note it is necessary to use initialize macro FTA_CONFIG_STORE_ITEM_DEF2 @note instead of FTA_CONFIG_STORE_ITEN_DEF in configuration. */ void _fta_listex_hash_init_common(fta_manager_store_item *store_item) { fta_list_store_header *list_header = (fta_list_store_header *)(store_item->addr); const fta_listex_hash_access_info *access_info; uint32 fixed_len; /* initialize */ list_header->count = 0; list_header->version = FTA_LIST_VERSION_HASH; list_header->quota = FTA_LIST_QUOTA_DEFAULT; list_header->bottom = 0; /* set to record manager */ access_info = store_item->def->add_param; if(access_info == NULL) { goto _fta_listex_hash_init_common_exit; } /* check record manager */ fixed_len = FTA_LIB_ALIGN4_32(access_info->fixed_len); if((fixed_len < access_info->key_size) || (fixed_len > list_header->cmn.size - list_header->cmn.offset) || (access_info->entry_max == 0) || (access_info->entry_max >= FTA_LISTEX_HASH_ID_EMPTY) || (access_info->entry_max * fixed_len >= list_header->cmn.size - list_header->cmn.offset) || (access_info->hash_size == 0) || (access_info->work_buffer == 0)) { goto _fta_listex_hash_init_common_exit; } /* initialize wake area */ memset(access_info->work_buffer, FTA_LISTEX_HASH_ID_EMPTY_RESET, FTA_LISTEX_HASH_WORK_MAX(access_info->entry_max, access_info->hash_size) * sizeof(fta_listex_hash_id_type)); list_header->cmn.enabled = TRUE; FTA_LIB_CHANGEBIT_SET(list_header->cmn.statbit, FTA_STORE_STATBIT_RECORDING); return; _fta_listex_hash_init_common_exit: ; FTA_LOG_MESSAGE(FTA_LIST, FTA_LOG_LEVEL_CRITICAL, "*** FTA LIST CONFIG ERROR", 0, 0, 0); return; }