• 沒有找到結果。

三、 OMAP 內部通訊架構及溝通方式

3.3 DSP G ATEWAY 傳輸協定概念(DSP G ATEWAY P ROTOCOL CONCEPT )

3.3.1 DSP Gateway 傳輸 buffer

前面提到,處理器內部的資料是由 IPBUF 來傳輸。而 IPBUF 分成兩種,一種是 Global IPBUF,另一種是 Private IPBUF。兩種 IPBUF 各有不同的特性,接下來,將說明這兩 個 IPBUF 的特性,以及操作的方式。

(1) Global IPBUF

Global IPBUFs 是用於 ARM 和 DSP 之間區塊資料的傳輸時,以 BIDs 來區分不同的 IPBUF。是所有的行程都可以使用 IPBUF,並沒有特殊的限制, IPBUF 的最大為 64kwords(128kbyte)。IPBUF 的格式如圖 3-9:

圖 3-8 Global IPBUF 格式大小及位置配置 資料來源:Linux DSP Gateway Specification Rev 2.0[1]

圖 3-9 Global IPBUF 結構圖

資料來源:Linux DSP Gateway Specification Rev2.0[1]

表 3-2 Global IPBUF 結構定義

Structure Data member Data type Description

c unsigned short ipbuf 有效的 word 數

next unsigned short 下一個 IPBLINK 的進入點

la unsigned short 當 ARM 在使用時,鎖住 ipbuf 的所有權

sa unsigned short 當 DSP 在使用時,鎖住 ipbuf 的所有權

ld unsigned short sd unsigned short

確保在 ipbuf 通訊時,接收者必需等待資 料完全寫入 IPBUF 之後才可以進行讀取

的工作

ipbuf

d[0] unsigned short 傳送資料 資料來源:Linux DSP Gateway Specification Rev2.0[1]

圖 3-9中每個 IPBUF 有 6 個 words 標頭(header),裡面包括,valid count、next BID in IPBLINK、ARM 和 DSP 的 side lock info 和 side sync word,最後才是要傳輸的主體資 料,表 3-2 表示 IPBUF 內部結構的定義。其中 side lock info,表示,當 ipbuf 被 ARM 或 DSP 使用時,此 IPBUF 的所有權將會被暫時的鎖住,直到此 IPBUF 的所有權被 ARM 或 DSP 釋放出來,才可以再使用。Sync word 則表示,當 ARM 和 DSP 利用 IPBUF 做 溝通時,用來確保寫完之後讀入(read-after-write)的機制,動作是當某一方需要另一方的 資料時,它將會一直等待到另一方資料將資料完全寫入 IPBUF 之後才進行讀取的動作。

圖 3-10表示 Sync word 的工作流程。Global IPBUF 是由 IPBLINK 所管理的,這個機制 是用於 free pool 中連接 ipbuf 的 link,它會試著讓 ARM 和 DSP 處理器,維持所持有的 buffer(IPBUF)平衡,如圖 3-11所示。

圖 3-10 Sync word 工作流程

圖 3-11 IPBLINK structure

資料來源:Linux DSP Gateway Specification Rev2.0[1]

圖 3-12為一個 ARM 和 DSP 資料傳輸的例子,其中包含 buffer 所有權的轉移的流程:

(1)初始化狀態

(2)DSP 的 task0 從 pool 中取 buffer0,並且寫入資料

(3)DSP 送 buffer0 的資料給 ARM,這時 ARM Task0 的 read link 與 buffer0 連結

(4)ARM 從 buffer0 讀取資料,並且讓出 buffer2 給 DSP

(5)buffer0 回到 free pool 中,此時又回復到平衡狀態

圖 3-12 IPBUF 轉移示意圖

資料來源:Linux DSP Gateway Specification Rev2.0[1]

(2) Private IPBUF

除了 Global IPBUF 外,一般工作也可以擁有 Private IPBUF。Private IPBUF 不同於 Global IPBUF 的架構。IPBUF 資料的主體位置在每次傳資料傳輸時都會改變,且只有執 行中的『接收工作』可以有 Private IPBUF 從 ARM 端接收資料。資料從 ARM 送給 DSP 之前,必需取得資料 buffer(IPBUF)的位置才可以接收。Private IPBUF 的格式,如圖 3-13:

圖 3-13 Private IPBUF 結構圖

資料來源:Linux DSP Gateway Specification Rev2.0[1]

Private IPBUF 和 Global IPBUF 不同,並沒有預先設定位置的問題,所以在 header 中,

並沒有所有權相關標示的參數,在 Private IPBUF 中 sync word 和 Global IPBUF 一樣,

是用來確定在處理器中寫之後讀取(read-after-write)操作。送資料的一端在寫入資料到資 料區後給定 TID,接收資料的一端等到 sync word 變成 TID 時才開始讀取資料。在讀取 完畢之後,會寫入 0xff 代表 buffer 被釋放出來,buffer 可再重複被送資料的一端使用。

表 3-3,為 Private IPBUF 的結構定義。

表 3-3 Private IPBUF 結構定義

Structure Data member Data type Description

c unsigned short ipbuf 有效的 word 數

s unsigned short 確保在 ipbuf 通訊時,接收者必需等待直 到所要的數值傳來

ipbuf_p

a

unsigned long

資料主體的位置,以一個 long 來表示

資料來源:Linux DSP Gateway Specification Rev2.0[1]