PACKED void * diag_userDataBackUp_handler(PACKED void *req_pkt_ptr,uint16 pkt_len) { udbp_req_type *req_ptr = (udbp_req_type *) req_pkt_ptr; udbp_rsp_type *rsp_ptr = NULL; const rsp_len = sizeof( udbp_rsp_type ); rsp_ptr = (udbp_rsp_type *) diagpkt_alloc (DIAG_USET_DATA_BACKUP, rsp_len); if(rsp_ptr) { switch(req_ptr->header.sub_cmd) { case SRD_INIT_OPERATION : diag_SRD_Init(req_ptr,rsp_ptr); break; case USERDATA_BACKUP_REQUEST : diag_userDataBackUp_entrySet(req_ptr,rsp_ptr); break; case GET_DOWNLOAD_INFO : break; case EXTRA_NV_OPERATION : #ifdef LG_FW_SRD_EXTRA_NV diag_extraNv_entrySet(req_ptr,rsp_ptr); #endif break; case PRL_OPERATION : #ifdef LG_FW_SRD_PRL diag_PRL_entrySet(req_ptr,rsp_ptr); #endif break; default : rsp_ptr = (void *) diagpkt_err_rsp (DIAG_BAD_PARM_F, req_ptr, pkt_len); break; } } /* Execption*/ if (rsp_ptr == NULL){ return NULL; } if (!diagcomm_status()){ diagpkt_free(rsp_ptr); return NULL; } return rsp_ptr; }
/*=========================================================================== FUNCTION REX_DIAG_COREDUMP_HANDLER DESCRIPTION Forces a core dump ============================================================================*/ PACKED void * rex_diag_coredump_handler( PACKED void *in_req_ptr, word pkt_len ) { DIAG_SUBSYS_REX_COREDUMP_F_req_type *req_ptr; DIAG_SUBSYS_REX_COREDUMP_F_rsp_type *rsp_ptr; req_ptr = (DIAG_SUBSYS_REX_COREDUMP_F_req_type *) in_req_ptr; /* Verify that the length passed in and the action specified are ** valid. */ if ( pkt_len != sizeof(DIAG_SUBSYS_REX_COREDUMP_F_req_type) ) { return diagpkt_err_rsp( DIAG_BAD_LEN_F, req_ptr, sizeof(DIAG_SUBSYS_REX_COREDUMP_F_req_type) ); } rsp_ptr = (DIAG_SUBSYS_REX_COREDUMP_F_rsp_type *) diagpkt_alloc( diagpkt_get_cmd_code( req_ptr ), sizeof(DIAG_SUBSYS_REX_COREDUMP_F_rsp_type) ); if ( rsp_ptr == NULL ) { /* Allocation failed, and diagpkt_err_rsp will fail as well. ** So just return NULL. */ return NULL; } (void)memcpy( (void*)rsp_ptr, (void*)req_ptr, sizeof(diagpkt_subsys_header_type) ); #ifdef FEATURE_REX_CORE_DUMP switch( req_ptr->action ) { case 1: rex_jettison_core(); break; case 2: rex_log_core_dump( __LINE__, __FILE__, "CORE_DUMP: %d %d %d", 1, 2, 3 ); break; case 3: ERR_FATAL( "REX CORE DUMP TEST",0,0,0 ); break; } #endif return (void *) rsp_ptr; } /* END rex_diag_coredump_handler */
/*=========================================================================== FUNCTION REX_DIAG_CODECOVERAGE_HANDLER DESCRIPTION This function handles the request to start or stop collection of code coverage information. ============================================================================*/ PACKED void * rex_diag_codecoverage_handler( PACKED void *req_ptr, word pkt_len ) { DIAG_SUBSYS_REX_CODECOVERAGE_F_req_type *codecoverage_req_ptr; DIAG_SUBSYS_REX_CODECOVERAGE_F_rsp_type *codecoverage_rsp_ptr; codecoverage_req_ptr = (DIAG_SUBSYS_REX_CODECOVERAGE_F_req_type *) req_ptr; /* Verify that the length passed in and the action specified are ** valid. */ if ( pkt_len != sizeof(DIAG_SUBSYS_REX_CODECOVERAGE_F_req_type) ) { return diagpkt_err_rsp( DIAG_BAD_LEN_F, codecoverage_req_ptr, sizeof(DIAG_SUBSYS_REX_CODECOVERAGE_F_req_type) ); } if( ( codecoverage_req_ptr->action != 1 ) && ( codecoverage_req_ptr->action != 2 ) ) { return diagpkt_err_rsp( DIAG_BAD_PARM_F, codecoverage_req_ptr, sizeof(DIAG_SUBSYS_REX_CODECOVERAGE_F_req_type) ); } codecoverage_rsp_ptr = (DIAG_SUBSYS_REX_CODECOVERAGE_F_rsp_type *) diagpkt_alloc( diagpkt_get_cmd_code( req_ptr ), sizeof(DIAG_SUBSYS_REX_CODECOVERAGE_F_rsp_type) ); if ( codecoverage_rsp_ptr == NULL ) { /* Allocation failed, and diagpkt_err_rsp will fail as well. ** So just return NULL. */ return NULL; } switch( codecoverage_req_ptr->action ) { case 1: rex_codecoverage_enable( ); codecoverage_rsp_ptr->status = 1; break; case 2: rex_codecoverage_disable( ); codecoverage_rsp_ptr->status = 1; break; default: /* This should never happen. */ codecoverage_rsp_ptr->status = 0; break; } return (void *) codecoverage_rsp_ptr; } /* END rex_diag_codecoverage_handler */
/*=========================================================================== FUNCTION REX_DIAG_TASKPROFILE_HANDLER DESCRIPTION This function handles the request to start or stop program counter profiling. action = 1 -> enable task profiling action = 2 -> disable task profiling ============================================================================*/ PACKED void * rex_diag_taskprofile_handler( PACKED void *req_ptr, uint16 pkt_len ) { DIAG_SUBSYS_REX_TASKPROFILE_F_req_type *taskprofile_req_ptr; DIAG_SUBSYS_REX_TASKPROFILE_F_rsp_type *taskprofile_rsp_ptr; taskprofile_req_ptr = (DIAG_SUBSYS_REX_TASKPROFILE_F_req_type *) req_ptr; /* Verify that the length passed in and the action specified are ** valid. */ /* if ( pkt_len != sizeof(DIAG_SUBSYS_REX_TASKPROFILE_F_req_type) ) { return diagpkt_err_rsp( DIAG_BAD_LEN_F, taskprofile_req_ptr, sizeof(DIAG_SUBSYS_REX_TASKPROFILE_F_req_type) ); } */ if( ( taskprofile_req_ptr->action == 0 ) || ( taskprofile_req_ptr->action > 3 ) ) { return diagpkt_err_rsp( DIAG_BAD_PARM_F, taskprofile_req_ptr, sizeof(DIAG_SUBSYS_REX_TASKPROFILE_F_req_type) ); } taskprofile_rsp_ptr = (DIAG_SUBSYS_REX_TASKPROFILE_F_rsp_type *) diagpkt_alloc( diagpkt_get_cmd_code( req_ptr ), sizeof(DIAG_SUBSYS_REX_TASKPROFILE_F_rsp_type) ); if ( taskprofile_rsp_ptr == NULL ) { /* Allocation failed, and diagpkt_err_rsp will fail as well. ** So just return NULL. */ return NULL; } (void)memcpy( (void*)taskprofile_rsp_ptr, (void*)taskprofile_req_ptr, sizeof(diagpkt_subsys_header_type) ); switch( taskprofile_req_ptr->action ) { #ifdef FEATURE_REX_PROFILE case 1: MSG_HIGH( "PROF - ENABLE",0,0,0 ); rex_enable_task_profile( taskprofile_req_ptr->sys_period, taskprofile_req_ptr->task_period, taskprofile_req_ptr->tasks_per_period ); taskprofile_rsp_ptr->status = 1; break; #endif #ifdef FEATURE_REX_PROFILE case 2: MSG_HIGH( "PROF - DISABLE",0,0,0 ); rex_disable_task_profile(); taskprofile_rsp_ptr->status = 1; break; #endif #ifdef FEATURE_REX_PROFILE case 3: rextp_log_per_task_profile(); break; #endif default: taskprofile_rsp_ptr->status = 0; break; } return (void *) taskprofile_rsp_ptr; } /* rex_diag_taskprofile_handler */