官术网_书友最值得收藏!

5.4.9 高通特有的組件相關內容

MSM處理器SOC內部集成應用處理器和基帶處理器,因此還包含了很多高通獨有的組件驅動。

這些文件在arch/arm/mach-msm/目錄中,主要內容如下所示。

smd_private.h:共享內存相關的結構和內存區域等定義

smd.c:共享內存的部分底層機制的實現

proc_comm.c:處理器間簡單遠程命令接口實現

smd_rpcrouter.c:ONCRPC實現部分

smd_rpcrouter_device.c:ONCRPC實現部分

smd_rpcrouter_servers.c:ONCRPC實現部分

1.SMEM

SMEM(Shared Memory)用于管理共享內存的區域。有靜態和動態兩種區域。靜態區域一般是定義好的,可以由兩個CPU分別直接訪問。而動態區域一般通過smem的分配機制來分配。

SMEM是最基礎的共享內存管理機制,所有使用共享內存的通信機制或協議都基于它來實現。區域很多,有用于存放基本的版本等信息的,也有用于實現簡單的RPC機制的,還有分配Buffer以用于大量數據傳輸的。

SMEM的區域定義在arch/arm/mach-msm/目錄smd_private.h中,實現代碼大多在該目錄下的smd.c中。

2.SMSM

SMSM利用SMEM中SMEM_SMSM_SHARED_STATE等區域,傳送兩個CPU的狀態信息,諸如modem重啟,休眠等狀態。

SMSM信息變化后,通常通過中斷來通知到另一處理器。

3.PROC COMM

PROC COMM使用SMEM中的最前面一個區域:SMEM_PROC_COMM。它是一套應用處理器向MODEM發送簡單命令的接口。

PROC COMM能傳遞的信息非常有限,僅能傳遞兩個uint32的數據作為參數,也只能接受兩個uint32的數據,加一個boolean作為返回值。但相對于后面提到的RPC,PROC COMM更輕量級。

PROC COMM定義在proc_comm.c中,通常應用處理器會使用msm_proc_comm接口函數來發送命令,并通過輪詢進行等待返回。注意需要支持的命令,要在modem側啟動時,注冊好對應的處理程序。

常用的PROC COMM命令有:

SMEM_PROC_COMM_GET_BATT_LEVEL:獲取電池電量級別

SMEM_PROC_COMM_CHG_IS_CHARGING:判斷是否在充電

SMEM_PROC_COMM_POWER_DOWN:關機

SMEM_PROC_COMM_RESET_MODEM:重啟modem

4.SMD

SMD用于在處理器之間,是一套通過共享內存,同步大量數據的協議。

目前SMD支持64個通道,其中36個已經定義。分別用于藍牙,RPC,modem數據鏈接等。為了防止沖突,每個通道使用兩路連接,將發送和接收分開。

SMD使用SMEM中的對應區域分配適當大小的緩沖,并定義了詳細的協議,用于控制傳輸的開啟、停止等??刂频臉擞涱愃朴赗S-232,而且支持流控。

SMD支持stream模式和packet模式。后者會對數據進行封包,保證對端獲取到的數據與傳送時分塊一致。

SMD主要實現在smd.c中。有一整套的函數接口:

smd_open:打開一個smd通道

smd_close:關閉一個smd通道

smd_read:從一個通道中讀取

smd_write:寫入到一個通道

smd_alloc_channel:分配一個通道

5.ONCRPC

RPC的含義為Remote Procedure Calls(遠程過程調用)。此處特指處理器間的遠程過程調用。在高通平臺中,這一機制又叫ONCRPC(Open Network Computing Remote Procedure Call),以下提及ONCRPC,都是特指高通平臺上的具體實現。

ONCRPC基于共享內存上的SMD實現。使應用處理器端的應用程序,可以直接訪問modem端的服務,支持的服務如下:

Call Manager (CM API)

Wireless Messaging Service (WMS API)

GSDI (SIM/USIM)

GSTK (Toolkit)

PDSM API (GPS)

其他

ONCRPC基于服務端/客戶端的思想構建,代碼分布在smd_rpcrouter開頭的源碼文件中。服務端實現到modem的具體服務訪問,而客戶端暴露透明的API給用戶程序調用。用戶程序如果需要使用ONCRPC,需要鏈接ONCRPC-shared,AMSS RPC exported等庫。

主站蜘蛛池模板: 延吉市| 吉水县| 石河子市| 调兵山市| 正宁县| 衢州市| 黄陵县| 阿巴嘎旗| 湖北省| 庆阳市| 呼图壁县| 襄垣县| 池州市| 柘荣县| 同江市| 分宜县| 德化县| 克东县| 海伦市| 深泽县| 肥西县| 黑山县| 金山区| 乐东| 喀喇沁旗| 榆中县| 娱乐| 塔城市| 平远县| 休宁县| 新宾| 礼泉县| 建水县| 永安市| 渭源县| 正定县| 黔南| 定南县| 封丘县| 科尔| 海伦市|