SoundWire 鎖定¶
本文件解釋了 SoundWire 匯流排的鎖定機制。匯流排使用以下鎖來避免在共享資源的匯流排操作中出現競爭情況。
匯流排鎖
訊息鎖
匯流排鎖¶
SoundWire 匯流排鎖是一個互斥鎖,並且是匯流排資料結構 (sdw_bus) 的一部分,該結構用於每個匯流排例項。此鎖用於序列化 SoundWire 匯流排例項中的以下每個操作:
新增和刪除從裝置,更改從裝置狀態。
準備、啟用、停用和取消準備流操作。
訪問流資料結構。
訊息鎖¶
SoundWire 訊息傳輸鎖。 此互斥鎖是匯流排資料結構 (sdw_bus) 的一部分。 此鎖用於序列化 SoundWire 匯流排例項中的訊息傳輸(讀取/寫入)。
以下示例顯示瞭如何獲取鎖。
示例 1¶
訊息傳輸。
對於每個訊息傳輸
獲取訊息鎖。
將訊息(讀取/寫入)傳輸到 Slave1 或在 bank switch 的情況下在總線上廣播訊息。
釋放訊息鎖
+----------+ +---------+ | | | | | Bus | | Master | | | | Driver | | | | | +----+-----+ +----+----+ | | | bus->ops->xfer_msg() | <-------------------------------+ a. Acquire Message lock | | b. Transfer message | | +-------------------------------> c. Release Message lock | return success/error | d. Return success/error | | + +
示例 2¶
準備操作。
獲取與 Master 1 關聯的匯流排例項的鎖。
對於準備操作中的每個訊息傳輸
獲取訊息鎖。
將訊息(讀取/寫入)傳輸到 Slave1 或在 bank switch 的情況下在總線上廣播訊息。
釋放訊息鎖。
釋放與 Master 1 關聯的匯流排例項的鎖
+----------+ +---------+ | | | | | Bus | | Master | | | | Driver | | | | | +----+-----+ +----+----+ | | | sdw_prepare_stream() | <-------------------------------+ 1. Acquire bus lock | | 2. Perform stream prepare | | | | | bus->ops->xfer_msg() | <-------------------------------+ a. Acquire Message lock | | b. Transfer message | | +-------------------------------> c. Release Message lock | return success/error | d. Return success/error | | | | | return success/error | 3. Release bus lock +-------------------------------> 4. Return success/error | | + +