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