Commit 69cc611a9bec67b47abdf92eee2548a071976546

Started playing with android's libgps
  
352352void msm_arch_idle(void);
353353static void htcraphael_reset(void)
354354{
355 struct msm_dex_command dex = { .cmd = PCOM_RESET_ARM9 };
356// struct msm_dex_command dex = { .cmd = PCOM_NOTIFY_ARM9_REBOOT };
355 //struct msm_dex_command dex = { .cmd = PCOM_RESET_ARM9 };
356 while(!readl(MSM_SHARED_RAM_BASE+0xfc13c));
357 struct msm_dex_command dex = { .cmd = PCOM_NOTIFY_ARM9_REBOOT };
357358 msm_proc_comm_wince(&dex, 0);
358359 mdelay(0x15e);
359 gpio_configure(25, GPIOF_OWNER_ARM11);
360 gpio_direction_output(25, 0);
360 //gpio_configure(25, GPIOF_OWNER_ARM11);
361 //gpio_set_value(25, 0);
362 /*
361363 printk(KERN_INFO "%s: Soft reset done.\n", __func__);
362364 while(1)
363365 msm_arch_idle();
366 */
364367}
365368
366369static void htcraphael_set_vibrate(uint32_t val)
  
6666 .pa_reg_msg4 = 0x003fefe0,
6767};
6868
69#define RPC_PDSM_ATL_PROG 0x3000001d
70#define RPC_PDSM_ATL_CB_PROG 0x3100001d
69//#define RPC_PDSM_ATL_PROG 0x3000001d
70//#define RPC_PDSM_ATL_CB_PROG 0x3100001d
7171//#define L2_PROXY_REG 4
7272
7373/* TODO: replace with msm_rpc_call_reply() values */
141141 } rep;
142142
143143 /* register CB */
144 pdapi_rpc_server.prog = amss_get_num_value(RPC_PDAPI_CB_PROG);
145 pdsm_atl_rpc_server.prog = amss_get_num_value(RPC_PDSM_ATL_CB_PROG);
144 pdapi_rpc_server.prog = 0x3100005b;
145 pdsm_atl_rpc_server.prog = 0x3100001d;
146146 msm_rpc_create_server(&pdapi_rpc_server);
147147 msm_rpc_create_server(&pdsm_atl_rpc_server);
148 return;
149 //Let android's libgps.so handle that
148150
149151 /* init pd */
150152 printk ("init_pd\n");
  
5454 DOG_KEEPALIVE_PROG,
5555 DOG_KEEPALIVE_VERS,
5656 RPC_PDAPI_PROG,
57 RPC_PDAPI_CB_PROG
57 RPC_PDAPI_CB_PROG,
58 RPC_PDSM_ATL_PROG,
59 RPC_PDSM_ATL_CB_PROG
5860};
5961
6062extern uint32_t amss_get_num_value(int);
  
2828#include <mach/system.h>
2929#include <mach/fiq.h>
3030#include <asm/io.h>
31#include <mach/io.h>
32#include <mach/gpio.h>
3133
3234#include "smd_private.h"
3335#include "acpuclock.h"
480480 * reset command.
481481 */
482482#ifdef CONFIG_MSM_AMSS_VERSION_WINCE
483 if (msm_hw_reset_hook)
484 msm_hw_reset_hook();
485 else
486 printk(KERN_ERR "No msm_hw_reset_hook() available! System halted.\n");
483 writel(0x55aa00ff, MSM_SHARED_RAM_BASE+0xfc08c);
484 gpio_configure(25, GPIOF_OWNER_ARM11);
485 gpio_set_value(25, 0);
486
487487#else
488488 if ((restart_reason == 0x776655AA) && msm_hw_reset_hook) {
489489 msm_hw_reset_hook();
  
108108 {
109109 printk(KERN_WARNING "%s: DEX cmd timed out. status=0x%x, A2Mcntr=%x, M2Acntr=%x\n",
110110 __func__, readl(base + PC_STATUS), num, readl(base + PC_SERIAL_CHECK));
111 printk("DEX IRQ=%x\n", readl(MSM_SHARED_RAM_BASE+0xfc138));
111112 goto end;
112113 }
113114
  
5353 {DOG_KEEPALIVE_VERS, 0, ""},
5454 {RPC_PDAPI_PROG, 0x3000005b, ""},
5555 {RPC_PDAPI_CB_PROG, 0x3100005b, ""},
56 {RPC_PDSM_ATL_PROG, 0x3000001d, ""},
57 {RPC_PDSM_ATL_CB_PROG, 0x3100001d, ""},
5658};
5759
5860
  
8383 pr_info("smem: DIAG '%s'\n", x);
8484 }
8585}
86extern int msm_proc_comm_wince_init();
8687
8788/* call when SMSM_RESET flag is set in the A9's smsm_state */
8889static void handle_modem_crash(void)
9191 pr_err("ARM9 has CRASHED\n");
9292 smd_diag();
9393
94 /* hard reboot if possible */
95 if (msm_hw_reset_hook)
96 msm_hw_reset_hook();
94 printk("DEX IRQ=%x\n", readl(MSM_SHARED_RAM_BASE+0xfc138));
95 while(!readl(MSM_SHARED_RAM_BASE+0xfc13c));
96 printk("DEX READY\n");
97 struct msm_dex_command dex = { .cmd = PCOM_NOTIFY_ARM9_REBOOT };
98 msm_proc_comm_wince(&dex, 0);
99 mdelay(0x15e);
100 printk("notify_arm9_reboot sent\n");
101 printk("DEX IRQ=%x\n", readl(MSM_SHARED_RAM_BASE+0xfc138));
102 while(!readl(MSM_SHARED_RAM_BASE+0xfc13c));
103 printk("DEX READY\n");
104 printk("DEX IRQ=%x\n", readl(MSM_SHARED_RAM_BASE+0xfc138));
97105
98 /* in this case the modem or watchdog should reboot us */
99 for (;;)
100 ;
106
101107}
102108
103109extern int (*msm_check_for_modem_crash)(void);
  
7575 struct msm_rpc_endpoint *ept;
7676 struct rr_fragment *frag, *next;
7777 int rc;
78 int i;
79 unsigned int *tmp,*base;
7880
7981 ept = (struct msm_rpc_endpoint *) filp->private_data;
8082
8585 return rc;
8686
8787 count = rc;
88 base=buf;
8889
90 printk("oncrpc read\n\t");
8991 while (frag != NULL) {
9092 if (copy_to_user(buf, frag->data, frag->length)) {
9193 printk(KERN_ERR
9999 kfree(frag);
100100 frag = next;
101101 }
102 for(i=0;i<(count/4);i++) {
103 if(be32_to_cpu(base[i])==0x3100005b) {
104 base[i+1]=cpu_to_be32(0xB93145F7);
105 base[i+2]=cpu_to_be32(be32_to_cpu(base[i+2])-1);
106 }
107 if(be32_to_cpu(base[i])==0x3100001d)
108 base[i+1]=cpu_to_be32(0x728B7ED4);
109 printk("%08x ", be32_to_cpu(base[i]));
110 }
102111
112 printk("\n");
103113 return rc;
104114}
105115
118118{
119119 struct msm_rpc_endpoint *ept;
120120 int rc = 0;
121 void *k_buffer;
121 unsigned long *k_buffer;
122 struct rpc_request_hdr *rq;
122123
123124 ept = (struct msm_rpc_endpoint *) filp->private_data;
124125
134134 rc = -EFAULT;
135135 goto write_out_free;
136136 }
137 rq=k_buffer;
138 printk("oncrpc write\n");
139 printk("before diverting\n\t");
140 for(rc=0;rc<(count/4);rc++) {
141 if(k_buffer[1]==0 && (rc==1 || rc==2|| rc==6 || rc==7 || rc==8 || rc==9))
142 continue;
143 printk("%08x ", be32_to_cpu(k_buffer[rc]));
144 }
145 printk("\n");
137146
147 if(be32_to_cpu(rq->prog)==0x3000005b) {
148 printk("PDAPI call\n");
149 rq->vers=0;
150 switch(be32_to_cpu(rq->procedure)) {
151 case 2:
152 case 4:
153 case 5:
154 case 6:
155 case 7:
156 case 8:
157 case 9:
158 case 0xa:
159 case 0xb:
160 case 0xc:
161 case 0x1d:
162 //Ok seriously. Which calls aren't translated by 1 ?
163 default:
164 rq->procedure=cpu_to_be32(be32_to_cpu(rq->procedure)+1);
165 break;
166 }
167 switch(be32_to_cpu(rq->procedure)) {
168 case 3:
169 printk("pdsm_client_init\n");
170 break;
171 case 5:
172 printk("pdsm_client_pd_reg\n");
173 break;
174 case 6:
175 printk("pdsm_client_pa_reg\n");
176 break;
177 case 7:
178 printk("pdsm_client_lcs_reg\n");
179 break;
180 case 8:
181 printk("pdsm_client_xtra_reg\n");
182 break;
183 case 9:
184 printk("pdsm_client_ext_status_reg\n");
185 break;
186 case 0xa:
187 printk("pdsm_client_act\n");
188 break;
189 case 0xc:
190 printk("pdsm_get_position\n");
191 break;
192 case 0xd:
193 printk("pdsm_end_position\n");
194 break;
195 };
196 } else if(be32_to_cpu(rq->prog)==0x3000001d) {
197 printk("ATL call\n");
198 rq->vers=0;
199 rq->procedure=cpu_to_be32(be32_to_cpu(rq->procedure)+1);
200 if(be32_to_cpu(rq->procedure)==4) {
201 k_buffer[11]=cpu_to_be32(4);
202 k_buffer[12]=cpu_to_be32(5);
203 }
204 }
205 printk("after\n\t");
206 for(rc=0;rc<(count/4);rc++) {
207 if( k_buffer[1]==0 && (rc==1 || rc==2|| rc==6 || rc==7 || rc==8 || rc==9))
208 continue;
209 printk("%08x ", be32_to_cpu(k_buffer[rc]));
210 }
211 printk("\n");
138212 rc = msm_rpc_write(ept, k_buffer, count);
139213 if (rc < 0)
140214 goto write_out_free;
272272 sizeof(server_args));
273273 if (rc < 0)
274274 break;
275 if(server_args.prog==0x3100001d)
276 server_args.vers=0;
275277 msm_rpc_register_server(ept,
276278 server_args.prog,
277279 server_args.vers);