INT32 stp_dbg_deinit(MTKSTP_DBG_T *stp_dbg) { STP_DBG_INFO_FUNC("stp-dbg deinit\n"); if (&(stp_dbg->logsys->lock)){ osal_unsleepable_lock_deinit(&(stp_dbg->logsys->lock)); } if (stp_dbg->logsys){ osal_vfree(stp_dbg->logsys); stp_dbg->logsys = NULL; } if (stp_dbg){ osal_kfree(stp_dbg); stp_dbg = NULL; } return 0; }
MTKSTP_DBG_T *stp_dbg_init(VOID *btm_half) { MTKSTP_DBG_T *stp_dbg= NULL; STP_DBG_INFO_FUNC("stp-dbg init\n"); stp_dbg = osal_kzalloc_sleep(osal_sizeof(MTKSTP_DBG_T)); if (!stp_dbg){ STP_DBG_ERR_FUNC("-ENOMEM\n"); goto ERR_EXIT1; } stp_dbg->logsys = osal_malloc(osal_sizeof(MTKSTP_LOG_SYS_T)); if (!stp_dbg->logsys){ STP_DBG_ERR_FUNC("-ENOMEM stp_gdb->logsys\n"); goto ERR_EXIT2; } osal_memset(stp_dbg->logsys, 0, osal_sizeof(MTKSTP_LOG_SYS_T)); osal_unsleepable_lock_init(&(stp_dbg->logsys->lock)); stp_dbg->pkt_trace_no = 0; stp_dbg->is_enable = 0; if (btm_half != NULL){ stp_dbg->btm = btm_half; } else { stp_dbg->btm = NULL; } return stp_dbg; ERR_EXIT2: osal_kfree(stp_dbg); return NULL; ERR_EXIT1: return NULL; }
int read_info (int part_index, uint32 part_off, uint32 search_region, char* info_name, uint32 info_name_len, uint32 info_sz, char* info_buf) { int ret = ERR_MTD_INFO_NOT_FOUND; char part_path[32]; uint32 off = 0; uchar *buf; MtdRCtx *ctx = (MtdRCtx*) osal_kmalloc(sizeof(MtdRCtx)); if (ctx == NULL) { ret = ERR_ROM_INFO_ALLOCATE_BUF_FAIL; goto _end; } ctx->buf = osal_kmalloc(search_region); memset(ctx->buf,0,search_region); if (ctx->buf == NULL) { ret = ERR_ROM_INFO_ALLOCATE_BUF_FAIL; goto _end; } /* ------------------------ */ /* open file */ /* ------------------------ */ /* in order to keep key finding process securely, open file in kernel module */ if(TRUE == sec_usif_enabled()) { sec_usif_part_path(part_index,part_path,sizeof(part_path)); if(FALSE == dump_search_info) { SMSG(TRUE,"[%s] open '%s'\n",MOD,part_path); dump_search_info = TRUE; } } else { sprintf(part_path, "/dev/mtd/mtd%d", part_index); if(FALSE == dump_search_info) { SMSG(TRUE,"[%s] open '%s'\n",MOD,part_path); dump_search_info = TRUE; } } ctx->fd = ASF_OPEN(part_path); if (ASF_IS_ERR(ctx->fd)) { SMSG(true,"[%s] open fail\n",MOD); ret = ERR_INFO_PART_NOT_FOUND; goto _open_fail; } /* ------------------------ */ /* read partition */ /* ------------------------ */ /* configure file system type */ osal_set_kernel_fs(); /* adjust read off */ ASF_SEEK_SET(ctx->fd,part_off); /* read partition */ if(0 >= (ret = ASF_READ(ctx->fd,ctx->buf,search_region))) { SMSG(TRUE,"[%s] read fail (%d)\n",MOD,ret); ret = ERR_ROM_INFO_MTD_READ_FAIL; goto _end; } else { /* ------------------------ */ /* search info */ /* ------------------------ */ for(off = 0; off<(search_region-info_sz); off++) { buf = ctx->buf + off; if(0 == strncmp(buf,info_name,info_name_len)) { osal_mtd_lock(); /* ------------------------ */ /* fill info */ /* ------------------------ */ mcpy(info_buf, buf, info_sz); ret = SEC_OK; osal_mtd_unlock(); break; } } } _end: ASF_CLOSE(ctx->fd); osal_restore_fs(); _open_fail : osal_kfree(ctx->buf); osal_kfree(ctx); return ret; }
void sec_dev_find_parts(void) { ASF_FILE fd; const uint32 buf_len = 2048; char *buf = osal_kmalloc(buf_len); char *pmtdbufp; uint32 mtd_part_cnt = 0; uint32 off = 0; uint32 rn = 0; ssize_t pm_sz; int cnt; osal_set_kernel_fs(); /* -------------------------- */ /* open proc device */ /* -------------------------- */ if(TRUE == sec_usif_enabled()) { /* -------------------------- */ /* open proc/dumchar_info */ /* -------------------------- */ SMSG(TRUE,"[%s] open /proc/dumchar_info\n",MOD); fd = ASF_OPEN("/proc/dumchar_info"); } else { /* -------------------------- */ /* open proc/mtd */ /* -------------------------- */ SMSG(TRUE,"[%s] open /proc/mtd\n",MOD); fd = ASF_OPEN("/proc/mtd"); } if (ASF_IS_ERR(fd)) { goto _end; } buf[buf_len - 1] = '\0'; pm_sz = ASF_READ(fd, buf, buf_len - 1); pmtdbufp = buf; /* -------------------------- */ /* parsing proc device */ /* -------------------------- */ while (pm_sz > 0) { int m_num, m_sz, mtd_e_sz; char m_name[16]; m_name[0] = '\0'; m_num = -1; m_num ++; if(TRUE == sec_usif_enabled()) { /* -------------------------- */ /* parsing proc/dumchar_info */ /* -------------------------- */ cnt = sscanf(pmtdbufp, "%15s %x %x %x",m_name, &m_sz, &mtd_e_sz, &rn); //SMSG(TRUE,"[%s] find parts %s, size 0x%x, cnt 0x%x, rn 0x%x\n",MOD,m_name,m_sz,cnt,rn); if ((cnt == 4) && (rn == 2)) { if (mtd_part_cnt < MAX_MTD_PARTITIONS) { /* ===================== */ /* uboot */ /* ===================== */ if(0 == mcmp(m_name,USIF_UBOOT,strlen(USIF_UBOOT))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_UBOOT, strlen(PL_UBOOT)); } /* ===================== */ /* logo */ /* ===================== */ else if(0 == mcmp(m_name,USIF_LOGO,strlen(USIF_LOGO))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_LOGO, strlen(PL_LOGO)); } /* ===================== */ /* boot image */ /* ===================== */ else if(0 == mcmp(m_name,USIF_BOOTIMG,strlen(USIF_BOOTIMG))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_BOOTIMG, strlen(PL_BOOTIMG)); } /* ===================== */ /* user data */ /* ===================== */ else if(0 == mcmp(m_name,USIF_USER,strlen(USIF_USER))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_USER, strlen(PL_USER)); } /* ===================== */ /* android system image */ /* ===================== */ else if(0 == mcmp(m_name,USIF_ANDSYSIMG,strlen(USIF_ANDSYSIMG))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_ANDSYSIMG, strlen(PL_ANDSYSIMG)); } /* ===================== */ /* recovery */ /* ===================== */ else if(0 == mcmp(m_name,USIF_RECOVERY,strlen(USIF_RECOVERY))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_RECOVERY, strlen(PL_RECOVERY)); } /* ===================== */ /* secroimg */ /* ===================== */ else if(0 == mcmp(m_name,USIF_SECRO,strlen(USIF_SECRO))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_SECRO, strlen(PL_SECRO)); secro_img_mtd_num = mtd_part_cnt; } /* ===================== */ /* other */ /* ===================== */ else { mcpy(mtd_part_map[mtd_part_cnt].name, m_name, sizeof(m_name)-1); } /* fill partition size */ mtd_part_map[mtd_part_cnt].sz = m_sz; /* calculate partition off */ mtd_part_map[mtd_part_cnt].off = off; /* update off and part count */ off += m_sz; mtd_part_cnt++; } else { SMSG(TRUE,"too many mtd partitions\n"); } } } else { /* -------------------------- */ /* parsing proc/mtd */ /* -------------------------- */ cnt = sscanf(pmtdbufp, "mtd%d: %x %x %15s",&m_num, &m_sz, &mtd_e_sz, m_name); if ((cnt == 4) && (m_name[0] == '"')) { char *x = strchr(m_name + 1, '"'); if (x) { *x = 0; } if (mtd_part_cnt < MAX_MTD_PARTITIONS) { /* ===================== */ /* uboot */ /* ===================== */ if(0 == mcmp(m_name+1,MTD_UBOOT,strlen(MTD_UBOOT))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_UBOOT, strlen(PL_UBOOT)); } /* ===================== */ /* logo */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_LOGO,strlen(MTD_LOGO))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_LOGO, strlen(PL_LOGO)); } /* ===================== */ /* boot image */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_BOOTIMG,strlen(MTD_BOOTIMG))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_BOOTIMG, strlen(PL_BOOTIMG)); } /* ===================== */ /* user data */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_USER,strlen(MTD_USER))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_USER, strlen(PL_USER)); } /* ===================== */ /* android system image */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_ANDSYSIMG,strlen(MTD_ANDSYSIMG))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_ANDSYSIMG, strlen(PL_ANDSYSIMG)); } /* ===================== */ /* recovery */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_RECOVERY,strlen(MTD_RECOVERY))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_RECOVERY, strlen(PL_RECOVERY)); } /* ===================== */ /* secroimg */ /* ===================== */ else if(0 == mcmp(m_name+1,MTD_SECRO,strlen(MTD_SECRO))) { mcpy(mtd_part_map[mtd_part_cnt].name, PL_SECRO, strlen(PL_SECRO)); secro_img_mtd_num = mtd_part_cnt; } /* ===================== */ /* other */ /* ===================== */ else { mcpy(mtd_part_map[mtd_part_cnt].name, m_name+1, sizeof(m_name)-1); } /* fill partition size */ mtd_part_map[mtd_part_cnt].sz = m_sz; /* calculate partition off */ mtd_part_map[mtd_part_cnt].off = off; /* update off and part count */ off += m_sz; mtd_part_cnt++; } else { SMSG(TRUE,"too many mtd partitions\n"); } } } while (pm_sz > 0 && *pmtdbufp != '\n') { pmtdbufp++; pm_sz--; } if (pm_sz > 0) { pmtdbufp++; pm_sz--; } } ASF_CLOSE(fd); _end: osal_kfree(buf); osal_restore_fs(); /* ------------------------ */ /* dump partition */ /* ------------------------ */ //sec_dev_dump_part(); }