Android高通平臺處理器間通訊驅動

jiangjingui2011發表於2011-12-21
 

高通平臺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兩邊都有執行緒在監控,一旦有資料更新,立刻通知監聽的模組。當然,有些模組中斷驅動,在中斷上下文裡完成通知。

相關文章