1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * 3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without 4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are 5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met: 6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Redistributions of source code must retain the above copyright 7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * notice, this list of conditions and the following disclaimer. 8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Redistributions in binary form must reproduce the above 9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * copyright notice, this list of conditions and the following 10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * disclaimer in the documentation and/or other materials provided 11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * with the distribution. 12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * * Neither the name of The Linux Foundation, nor the names of its 13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * contributors may be used to endorse or promote products derived 14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * from this software without specific prior written permission. 15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * 16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */ 28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===================================================================== 30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti INCLUDE FILES FOR MODULE 32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti======================================================================*/ 34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdio.h> 35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <pthread.h> 36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <errno.h> 37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <string.h> 38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/select.h> 39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/time.h> 40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/types.h> 41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/stat.h> 42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <fcntl.h> 43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/mman.h> 44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <unistd.h> 45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdlib.h> 46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <assert.h> 47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_api_log.h> 48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <rpc/rpc.h> 50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Include RPC headers */ 52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "rpc_inc/loc_api_rpc_glue.h" 53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Callback init */ 55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "rpc_inc/loc_apicb_appinit.h" 56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Logging */ 58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_TAG "LocSvc_api_rpc_glue" 59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_NDDEBUG 0 60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifndef USE_GLIB 61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <utils/Log.h> 62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* USE_GLIB */ 63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Logging Improvement */ 65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "log_util.h" 66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "platform_lib_includes.h" 67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*Maximum number of Modem init*/ 68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_TRY_NUM 10 69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*Maximum number of Modem init*/ 71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_TRY_NUM 10 72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Uncomment to force ALOGD messages */ 74e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti// #define ALOGD ALOGI 75e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 76e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===================================================================== 77e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti External declarations 78e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti======================================================================*/ 79e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 80e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiCLIENT* loc_api_clnt = NULL; 81e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 82e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Callback ID and pointer */ 83e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_API_CB_MAX_CLIENTS 16 84e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletitypedef struct 85e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 86e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti uint32 cb_id; /* same as rpc/types.h */ 87e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_event_cb_f_type *cb_func; /* callback func */ 88e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_reset_notif_cb_f_type *rpc_cb; /* callback from RPC */ 89e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle; /* stores handle for client closing */ 90e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti void* user; /* user's own data handle */ 91e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} loc_glue_cb_entry_s_type; 92e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 93e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_glue_cb_entry_s_type loc_glue_callback_table[LOC_API_CB_MAX_CLIENTS]; 94e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 95e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_FUNC_VERSION_BASE(a,b) a ## b 96e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_FUNC_VERSION(a,b) RPC_FUNC_VERSION_BASE(a,b) 97e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 98e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_CALLBACK_FUNC_VERSION_BASE(a,v,b) a ## v ## b 99e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define RPC_CALLBACK_FUNC_VERSION(a,v,b) RPC_CALLBACK_FUNC_VERSION_BASE(a,v,b) 100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_GLUE_CHECK_INIT(ret_type) \ 102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_api_clnt == NULL) { EXIT_LOG_CALLFLOW(%d, RPC_LOC_API_RPC_FAILURE); return (ret_type) RPC_LOC_API_RPC_FAILURE; } 103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_GLUE_CHECK_RESULT(stat, ret_type) \ 105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (stat != RPC_SUCCESS) { \ 106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("%s:%d] failure code %d", __func__, __LINE__, stat); \ 107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return (ret_type)((stat == RPC_SUBSYSTEM_RESTART) ? \ 108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti RPC_LOC_API_RPC_MODEM_RESTART : RPC_LOC_API_RPC_FAILURE); \ 109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Callback functions */ 112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Returns 1 if successful */ 113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletibool_t rpc_loc_event_cb_f_type_svc( 114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_cb_f_type_args *argp, 115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_cb_f_type_rets *ret, 116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct svc_req *req) 117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti // The lower word of cd_id is the index 119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int index = argp->cb_id & 0xFFFF; 120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Callback not registered, or unexpected ID (shouldn't happen) */ 122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (index >= LOC_API_CB_MAX_CLIENTS || loc_glue_callback_table[index].cb_func == NULL) 123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("Warning: No callback handler %d.\n", index); 125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret->loc_event_cb_f_type_result = 0; 126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 1; /* simply return */ 127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("proc: %x prog: %x vers: %x\n", 130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) req->rq_proc, 131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) req->rq_prog, 132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) req->rq_vers); 133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("Callback received: %x (cb_id=%p handle=%d ret_ptr=%d)\n", 135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) argp->loc_event, 136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti argp->cb_id, 137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) argp->loc_handle, 138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int) ret); 139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Forward callback to real callback procedure */ 141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type loc_handle = argp->loc_handle; 142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_mask_type loc_event = argp->loc_event; 143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti const rpc_loc_event_payload_u_type* loc_event_payload = 144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (const rpc_loc_event_payload_u_type*) argp->loc_event_payload; 145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Gives control to synchronous call handler */ 147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_callback_process_sync_call(loc_handle, loc_event, loc_event_payload); 148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 rc = (loc_glue_callback_table[index].cb_func)(loc_glue_callback_table[index].user, 150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_handle, loc_event, loc_event_payload); 151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("cb_func=%p", loc_glue_callback_table[index].cb_func); 153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret->loc_event_cb_f_type_result = rc; 155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 1; /* ok */ 157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_apicbprog_freeresult (SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result) 160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti xdr_free (xdr_result, result); 162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* 164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Insert additional freeing code here, if needed 165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */ 166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti // LOC_LOGD("***** loc_apicbprog_freeresult\n"); 167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 1; 169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=========================================================================== 172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION rpc_loc_event_cb_f_type_<version>_svc (MACRO) 174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION 176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti Callback function for Loc API 177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE 179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 1 for success 180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 0 for failure 181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/ 183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletibool_t RPC_CALLBACK_FUNC_VERSION(rpc_loc_event_cb_f_type_, RPC_LOC_EVENT_CB_F_TYPE_VERSION, _svc) ( 184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_cb_f_type_args *argp, 185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_cb_f_type_rets *ret, 186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti struct svc_req *req) 187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return rpc_loc_event_cb_f_type_svc(argp, ret, req); 189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=========================================================================== 192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_apicbprog_<version>_freeresult (MACRO) 194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION 196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti Free up RPC data structure 197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE 199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 1 for success 200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 0 for failure 201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/ 203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define VERSION_CONCAT(MAJOR,MINOR) MAJOR##MINOR 204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define loc_apicb_prog_VER_freeresult(M,N) \ 205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint RPC_CALLBACK_FUNC_VERSION(loc_apicbprog_, VERSION_CONCAT(M,N), _freeresult) \ 206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result) \ 207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ \ 208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return loc_apicbprog_freeresult(transp, xdr_result, result); \ 209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Define all of the possible minors */ 212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0001); 213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0002); 214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0003); 215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0004); 216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0005); 217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_apicb_prog_VER_freeresult(RPC_LOC_API_API_MAJOR_NUM, 0006); 218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=========================================================================== 220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION rpc_loc_api_cb_null_<version>_svc (MACRO) [Patch for wrong RPCGEN stubs] 222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION 224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti Null callback function for Loc API 225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE 227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 1 for success 228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/ 230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define rpc_loc_api_cb_null_VER_svc(M,N) \ 231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletibool_t RPC_CALLBACK_FUNC_VERSION(rpc_loc_api_cb_null_, VERSION_CONCAT(M,N), _svc) ( \ 232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti void *a, int *b, struct svc_req *req) \ 233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ \ 234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 1; \ 235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Define all of the possible minors */ 238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0001); 239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0002); 240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0003); 241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0004); 242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0005); 243e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_api_cb_null_VER_svc(RPC_LOC_API_API_MAJOR_NUM, 0006); 244e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 245e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic void loc_api_glue_rpc_cb(CLIENT* client, enum rpc_reset_event event) 246e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 247e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int i; 248e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) { 249e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (NULL != loc_glue_callback_table[i].rpc_cb) { 250e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].rpc_cb(loc_glue_callback_table[i].user, client, event); 251e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 252e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 253e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 254e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 255e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=========================================================================== 256e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 257e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_api_glue_init 258e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 259e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION 260e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti Initiates the RPC client 261e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 262e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE 263e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 1 for success 264e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 0 for failure 265e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 266e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/ 267e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_api_glue_init(void) 268e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 269e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_api_clnt == NULL) 270e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 271e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Initialize data */ 272e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int i; 273e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int pid = getpid(); 274e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) 275e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 276e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].cb_id = i | (pid << 16); 277e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].cb_func = NULL; 278e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].handle = -1; 279e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].rpc_cb = NULL; 280e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].user = NULL; 281e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 282e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 283e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Print msg */ 284e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("Trying to create RPC client...\n"); 285e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_clnt = clnt_create(NULL, LOC_APIPROG, LOC_APIVERS, NULL); 286e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("Created loc_api_clnt ---- %x\n", (unsigned int)loc_api_clnt); 287e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 288e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_api_clnt == NULL) 289e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 290e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("Error: cannot create RPC client.\n"); 291e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 292e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 293e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 294e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Init RPC callbacks */ 295e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_api_sync_call_init(); 296e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 297e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int rc = loc_apicb_app_init(); 298e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (rc >= 0) 299e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 300e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("Loc API RPC client initialized.\n"); 301e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti clnt_register_reset_notification_cb(loc_api_clnt, loc_api_glue_rpc_cb); 302e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 303e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti else { 304e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("Loc API callback initialization failed.\n"); 305e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 0; 306e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 307e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 308e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 309e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return 1; 310e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 311e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 312e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_client_handle_type loc_open ( 313e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_event_mask_type event_reg_mask, 314e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_event_cb_f_type *event_callback, 315e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_reset_notif_cb_f_type *rpc_cb, 316e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti void* userData 317e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 318e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 319e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int try_num = RPC_TRY_NUM; 320e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ENTRY_LOG(); 321e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(rpc_loc_client_handle_type); 322e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 323e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type ret_val; 324e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 325e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_open_args args; 326e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.event_reg_mask = event_reg_mask; 327e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 328e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int i, j = LOC_API_CB_MAX_CLIENTS; 329e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) 330e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 331e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_glue_callback_table[i].user == userData) 332e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 333e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGW("Client already opened service (callback=%p)...\n", 334e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti event_callback); 335e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 336e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } else if (j == LOC_API_CB_MAX_CLIENTS && 337e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].user == NULL) { 338e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti j = i; 339e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 340e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 341e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 342e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (i == LOC_API_CB_MAX_CLIENTS) 343e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 344e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti i = j; 345e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 346e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 347e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (i == LOC_API_CB_MAX_CLIENTS) 348e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 349e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGE("Too many clients opened at once...\n"); 350e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return RPC_LOC_CLIENT_HANDLE_INVALID; 351e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 352e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 353e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].cb_func = event_callback; 354e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].rpc_cb = rpc_cb; 355e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].user = userData; 356e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 357e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.event_callback = loc_glue_callback_table[i].cb_id; 358e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGV("cb_id=%d, func=0x%x", i, (unsigned int) event_callback); 359e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 360e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_open_rets rets; 361e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 362e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 363e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti EXIT_LOG_CALLFLOW(%s, "loc client open"); 364e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 365e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /*try more for rpc_loc_open_xx()*/ 366e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 367e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti do 368e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 369e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_open_, RPC_LOC_OPEN_VERSION)(&args, &rets, loc_api_clnt); 370e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = (rpc_loc_client_handle_type) rets.loc_open_result; 371e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti try_num--; 372e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 373e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti }while( (RPC_SUCCESS != stat||0 > ret_val) && 0 != try_num ); 374e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 375e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 376e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 377e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* save the handle in the table */ 378e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].handle = (rpc_loc_client_handle_type) rets.loc_open_result; 379e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 380e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 381e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 382e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 383e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 384e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 loc_close 385e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti( 386e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle 387e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 388e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 389e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ENTRY_LOG(); 390e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(int32); 391e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 392e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 ret_val; 393e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 394e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_close_args args; 395e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.handle = handle; 396e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 397e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_close_rets rets; 398e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 399e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 400e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti EXIT_LOG_CALLFLOW(%s, "loc client close"); 401e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_close_, RPC_LOC_CLOSE_VERSION)(&args, &rets, loc_api_clnt); 402e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 403e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_clear(handle); 404e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 405e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 406e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = (int32) rets.loc_close_result; 407e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 408e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 409e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 410e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 411e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid loc_clear(rpc_loc_client_handle_type handle) { 412e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Clean the client's callback function in callback table */ 413e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int i; 414e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti for (i = 0; i < LOC_API_CB_MAX_CLIENTS; i++) 415e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 416e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (loc_glue_callback_table[i].handle == handle) 417e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 418e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Found the client */ 419e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].cb_func = NULL; 420e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].rpc_cb = NULL; 421e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].handle = -1; 422e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_glue_callback_table[i].user = NULL; 423e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 424e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 425e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 426e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 427e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (i == LOC_API_CB_MAX_CLIENTS) 428e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 429e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGW("Handle not found (handle=%d)...\n", (int) handle); 430e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } 431e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 432e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 433e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 loc_start_fix 434e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti( 435e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle 436e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 437e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 438e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ENTRY_LOG(); 439e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(int32); 440e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 441e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 ret_val; 442e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 443e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_start_fix_args args; 444e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.handle = handle; 445e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 446e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_start_fix_rets rets; 447e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 448e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 449e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti EXIT_LOG_CALLFLOW(%s, "loc start fix"); 450e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_start_fix_, RPC_LOC_START_FIX_VERSION)(&args, &rets, loc_api_clnt); 451e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 452e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 453e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = (int32) rets.loc_start_fix_result; 454e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 455e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 456e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 457e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 458e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 loc_stop_fix 459e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti( 460e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle 461e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 462e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 463e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ENTRY_LOG(); 464e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(int32); 465e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 466e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 ret_val; 467e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 468e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_stop_fix_args args; 469e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.handle = handle; 470e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 471e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_stop_fix_rets rets; 472e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 473e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 474e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti EXIT_LOG_CALLFLOW(%s, "loc stop fix"); 475e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_stop_fix_, RPC_LOC_STOP_FIX_VERSION)(&args, &rets, loc_api_clnt); 476e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 477e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 478e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = (int32) rets.loc_stop_fix_result; 479e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 480e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 481e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 482e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 483e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 loc_ioctl 484e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti( 485e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle, 486e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_e_type ioctl_type, 487e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_data_u_type* ioctl_data 488e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 489e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 490e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ENTRY_LOG(); 491e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(int32); 492e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 493e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 ret_val; 494e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 495e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_args args; 496e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.handle = handle; 497e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.ioctl_data = ioctl_data; 498e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.ioctl_type = ioctl_type; 499e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti if (ioctl_data != NULL) 500e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 501e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* Assign ioctl union discriminator */ 502e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ioctl_data->disc = ioctl_type; 503e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 504e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti /* In case the user hasn't filled in other disc fields, 505e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti automatically fill them in here */ 506e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti switch (ioctl_type) 507e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti { 508e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_API_VERSION: 509e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 510e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_FIX_CRITERIA: 511e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 512e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_FIX_CRITERIA: 513e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 514e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE: 515e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 516e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA: 517e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 518e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_VALIDITY: 519e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 520e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE: 521e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 522e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_PREDICTED_ORBITS_DATA_AUTO_DOWNLOAD: 523e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 524e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INJECT_UTC_TIME: 525e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 526e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INJECT_RTC_VALUE: 527e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 528e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INJECT_POSITION: 529e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 530e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_QUERY_ENGINE_STATE: 531e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 532e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS: 533e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 534e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS: 535e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 536e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_ENGINE_LOCK: 537e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 538e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_ENGINE_LOCK: 539e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 540e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_SBAS_CONFIG: 541e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 542e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_SBAS_CONFIG: 543e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 544e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_NMEA_TYPES: 545e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 546e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_NMEA_TYPES: 547e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 548e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR: 549e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR: 550e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR: 551e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR: 552e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.ioctl_data->rpc_loc_ioctl_data_u_type_u.server_addr.addr_info.disc = 553e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti args.ioctl_data->rpc_loc_ioctl_data_u_type_u.server_addr.addr_type; 554e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 555e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_CDMA_PDE_SERVER_ADDR: 556e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_CDMA_MPC_SERVER_ADDR: 557e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_UMTS_SLP_SERVER_ADDR: 558e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_CUSTOM_PDE_SERVER_ADDR: 559e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 560e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_SET_ON_DEMAND_LPM: 561e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 562e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_GET_ON_DEMAND_LPM: 563e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 564e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti case RPC_LOC_IOCTL_DELETE_ASSIST_DATA: 565e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 566e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti default: 567e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti break; 568e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } /* switch */ 569e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti } /* ioctl_data != NULL */ 570e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 571e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_rets rets; 572e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 573e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 574e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti EXIT_LOG_CALLFLOW(%s, loc_get_ioctl_type_name(ioctl_type)); 575e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_ioctl_, RPC_LOC_IOCTL_VERSION)(&args, &rets, loc_api_clnt); 576e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 577e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 578e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = (int32) rets.loc_ioctl_result; 579e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 580e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 581e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 582e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 583e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Returns 0 if error */ 584e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 loc_api_null(void) 585e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 586e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_INIT(int32); 587e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 588e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int32 rets; 589e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti enum clnt_stat stat = RPC_SUCCESS; 590e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 591e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti clnt_unregister_reset_notification_cb(loc_api_clnt); 592e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti stat = RPC_FUNC_VERSION(rpc_loc_api_null_, RPC_LOC_API_NULL_VERSION)(NULL, &rets, loc_api_clnt); 593e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_GLUE_CHECK_RESULT(stat, int32); 594e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 595e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return (int32) rets; 596e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 597e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 598e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*=========================================================================== 599e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 600e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_eng_ioctl 601e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 602e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION 603e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti This function calls loc_ioctl and waits for the callback result before 604e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti returning back to the user. 605e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 606e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES 607e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti N/A 608e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 609e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE 610e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti TRUE if successful 611e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti FALSE if failed 612e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 613e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS 614e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti N/A 615e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 616e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/ 617e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint loc_eng_ioctl 618e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti( 619e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_client_handle_type handle, 620e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_e_type ioctl_type, 621e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_data_u_type* ioctl_data_ptr, 622e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti uint32 timeout_msec, 623e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti rpc_loc_ioctl_callback_s_type *cb_data_ptr 624e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti) 625e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{ 626e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti int ret_val = RPC_LOC_API_SUCCESS; 627e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 628e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti ret_val = loc_api_sync_ioctl(handle, ioctl_type, ioctl_data_ptr, timeout_msec, cb_data_ptr); 629e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 630e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti LOC_LOGD("loc_eng_ioctl result: client = %d, ioctl_type = %s, returt %s\n", 631e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti (int32) handle, 632e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_get_ioctl_type_name(ioctl_type), 633e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti loc_get_ioctl_status_name(ret_val) ); 634e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti 635e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti return ret_val; 636e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti} 637