Exemplo n.º 1
0
/*!
 @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;
}
Exemplo n.º 2
0
/*!
 @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;
}
Exemplo n.º 3
0
/*!
 @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;
}
Exemplo n.º 4
0
/*!
 @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;
}