Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332983
  • 博文数量: 102
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1146
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-21 22:33
文章分类

全部博文(102)

文章存档

2011年(8)

2010年(94)

我的朋友

分类: LINUX

2011-01-14 10:32:11

高通平台AP与CP直接通信由Share Memory负责,这是一块两端可以同时操作的内存区域。由于高通平台Modem占主导作用,在Application Processor启动初始化时,从Share Memory区读取已经由Modem predeclared的一些数据。

Share memory根据功能,分为静态+动态部分,每个部分又分为数个小区,每个区的大小不一,与本区实现的功能相关。Modem会把所有区的offset+size信息存放在静态去Heapinfo里。Linux通过读取这个Heapinfo区信息,就知道Share memory的布局了。

简单的说,Linux平台高通驱动主要在如下几个部分应用share memory服务:
1) Process command.
用来传输少量数据。实现两边的通信。比如不同驱动模块上下电,电压配置等。share memory最开始位置就是PROC区。
2)SMSM
实现两边的machine state同步。电源管理部分会用到。
3)RPC/DIAG
RPC是高通平台AP和Modem之间通信最常用的通道,有很完整的封装协议,Linux根据两个参数(proc+version)以client的身份可以找到Modem段的server,请求提供相应服务,同时有完备的request/reply机制,完成数据传输。同理,AP也可以作为server提供给Modem服务。

share memory有个channel allocation table,里面存放这64个channel的通道信息。每个通道可以实现数据传输。共享内存驱动(smd)初始化过程中,会建立64个通道的维护。RPC就是基于其中之一的channel.

Share memory两边都有线程在监控,一旦有数据更新,立刻通知监听的模块。当然,有些模块中断驱动,在中断上下文里完成通知。


阅读(2081) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-08 20:28:46

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com