/*=========================================================================== FUNCTION DIAGCOMM_SMD_SEND DESCRIPTION Sends a packet over SMD channel PARAMETERS req_pkt - packet to send pkt_len - length of 'req_pkt' port_num - channel to send pkt on RETURN VALUE None ===========================================================================*/ void diagcomm_smd_send( void *req_pkt, uint16 pkt_len, diagcomm_enum_port_type port_num ) { diagcomm_io_tx_params_type tx_params; dsm_item_type *app_req_item_ptr = NULL; if( diagcomm_status() && diagcomm_smd_status(port_num) ) { ASSERT(req_pkt != NULL); if( dsm_pushdown_tail(&app_req_item_ptr, req_pkt, pkt_len, DSM_DIAG_SMD_RX_ITEM_POOL) == pkt_len ) { tx_params.dsm_ptr = app_req_item_ptr; diagcomm_io_transmit( &diagcomm_io_conn[DIAGCOMM_PORT_SMD][port_num], &tx_params, FALSE ); diag_sleep_vote(DIAG_SLEEP_DIAG, TRUE); } else { dsm_free_packet(&app_req_item_ptr); MSG(MSG_SSID_DIAG, MSG_LEGACY_HIGH, "diagcomm_smd_send - Ran out of DSM items"); } } } /* diagcomm_smd_send */
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; }
void diagcomm_smd_process_slave_tx(diagcomm_enum_port_type port_num) { static dsm_item_type *diagcomm_app_item_ptr = NULL; diagcomm_io_tx_params_type tx_params; if (DIAGCOMM_PORT_2 == port_num) { #if defined (DIAG_MP_MASTER) && defined (FEATURE_DIAG_8K_QDSP6) {} #else return; #endif } if (diagcomm_status()) { diagcomm_app_item_ptr = diagcomm_io_dequeue_rx_wmq( &diagcomm_io_conn[DIAGCOMM_PORT_SMD][port_num] ); if(diagcomm_app_item_ptr!=NULL) { tx_params.dsm_ptr = diagcomm_app_item_ptr; diagcomm_io_transmit( &diagcomm_io_conn[DIAGCOMM_PORT_SIO][DIAGCOMM_PORT_1], &tx_params, FALSE ); } } } /* diagcomm_smd_process_slave_tx */