fuchsia.driver.framework

新增:HEAD

通訊協定

CompositeNodeManager

定義於 fuchsia.driver.framework/composite_node_spec.fidl

板卡驅動程式可透過此通訊協定建立複合節點規格。

複合節點規格會在執行階段建立,以動態方式連結複合驅動程式的靜態繫結規則與系統中節點的動態繫結屬性,讓驅動程式庫繫結規則更通用且可重複使用。

AddSpec

將指定的複合節點規格新增至驅動程式庫架構。

要求

名稱類型
payload CompositeNodeSpec

回應

名稱類型
payload CompositeNodeManager_AddSpec_Result

駕駛

定義於 fuchsia.driver.framework/driver.fidl

驅動程式架構的驅動程式代管程序會使用這個通訊協定,將各種訊息和生命週期掛鉤傳送至驅動程式庫。這個通訊協定的連線是透過 driver_symbols 程式庫中定義的 |DriverRegistration| 建立。

驅動程式庫關閉伺服器端後,驅動程式架構會啟動關閉程序,關閉屬於該驅動程式庫的所有調度工具。

繼續

在驅動程式庫恢復硬體時傳回。當電源架構要求電源元素進入開啟電源狀態時,系統會呼叫這個方法。驅動程式應重新開啟硬體,以回應這項呼叫。

如果喚醒來自喚醒向量,|power_element_lease| 是與目前喚醒相關聯的租約。否則為 None。

電源元素要求恢復後,執行順序的注意事項:

  • 呼叫這個方法 (調度工具此時不接受任何其他工作)
  • 這個方法完成後,調度工具就會開始接受工作佇列中的新工作
新增:HEAD

要求

名稱類型
power_element_lease fuchsia.power.broker/LeaseToken

回應

名稱類型
payload Driver_Resume_Result

開始

使用指定的 |start_args| 啟動驅動程式庫。

驅動程式應先完成初始設定和列舉,再從 |Start| 傳回。具體來說,驅動程式應利用 fuchsia.driver.framework/Node.AddChild 列舉所有目前可用的節點,並等待所有呼叫完成。

在呼叫成功傳回前,架構不會將驅動程式庫視為已啟動。因此,驅動程式庫必須成功回覆 |Start|,系統才會呼叫 |Stop|。

如果驅動程式庫傳回錯誤,在驅動程式架構啟動驅動程式庫調度工具的關閉程序之前,系統不會對該驅動程式呼叫 |Stop|。因此,在傳回錯誤之前,應已執行所有必要的清理作業。

要求

名稱類型
start_args DriverStartArgs

回應

名稱類型
payload Driver_Start_Result

停止

停止驅動程式庫。如要停止,驅動程式庫應拆除在 |Start| 中或之後設定的所有資源。這是一種單向 FIDL 方法。驅動程式庫停止後,應關閉伺服器端。非同步作業應在關閉伺服器端前完全完成。

要求

<EMPTY>

暫停使用

在驅動程式庫暫停硬體時傳回。當電源元素要求關閉電源狀態時,系統會呼叫這個方法。驅動程式應關閉硬體,以回應這項呼叫。

電源元素要求暫停後,執行順序的注意事項:

  • 調度工具停止接受工作佇列中的新工作
  • 調度工具會清空先前排入佇列的工作
  • 所有工作都完成後,系統會呼叫這個方法

驅動程式在暫停後不會立即 |停止|。系統會先執行 |Resume|,再執行 |Stop|。

新增:HEAD

要求

<EMPTY>

回應

名稱類型
payload Driver_Suspend_Result

健康度

定義於 fuchsia.driver.framework/health.fidl

通訊協定已整合至 Driver,用於執行主動健康狀態檢查,以及接收主動健康狀態警示。

HealthCheck

要求驅動程式庫執行自我診斷檢查。

驅動程式代管程序絕不會在 Driver.Suspend 和 Driver.Resume 完成之間發出 HealthCheck,而是在驅動程式庫暫停或轉換電源狀態時,自行回答 HealthCheckError.INVALID_STATE。

要求

名稱類型
request HealthCheckRequest

回應

名稱類型
payload Health_HealthCheck_Result

OnHealthAlert

當驅動程式庫偵測到非同步自我錯誤,或懷疑上游/下游鄰近節點時,會主動發出。

回應

名稱類型
alert HealthAlert

節點

定義於 fuchsia.driver.framework/topology.fidl

驅動程式庫用來管理繫結節點的通訊協定。驅動程式應維持與節點的用戶端連線。如果在驅動程式庫執行期間中斷用戶端連線,驅動程式庫架構會從拓撲中移除驅動程式庫和節點。如果驅動程式庫在元件資訊清單中將 host_restart_on_crash 設為「true」,中斷連線會啟動驅動程式代管程序和驅動程式庫的重新啟動程序。

AddChild

為這個節點新增子節點。

如果 node 存在,這個驅動程式庫會負責繫結至新建立的子項。否則,驅動程式庫架構會尋找適當的驅動程式庫,將子項繫結至該驅動程式。

要求

名稱類型
args NodeAddArgs
controller server_end:NodeController
node server_end:Node?

回應

名稱類型
payload Node_AddChild_Result

ProvideResource

提供其他節點可依附的資源。所提供資源的生命週期會與 controller 用戶端連線連結。如果中斷用戶端連線,系統就會移除資源。

新增:HEAD

要求

名稱類型
resource ResourceArgs
controller server_end:ResourceController

回應

名稱類型
payload Node_ProvideResource_Result

NodeController

定義於 fuchsia.driver.framework/topology.fidl

父節點用來控制子節點的通訊協定。

OnBind

當相關聯的 Node 繫結至驅動程式庫時,系統會觸發這個事件。已替換為 WaitForDriver。

回應

名稱類型
payload NodeControllerOnBindRequest

移除

移除節點及其所有子項。

要求

<EMPTY>

RequestBind

要求架構嘗試將驅動程式庫繫結至這個節點。這是額外的繫結要求,因為架構會在節點建立時嘗試繫結節點一次。

  • 如果節點已繫結且 force_rebind 為 false,則會發生錯誤 ZX_ERR_ALREADY_BOUND。
  • 如果節點有未完成的 |RequestBind| 呼叫,則會傳回錯誤 ZX_ERR_ALREADY_EXISTS。

要求

名稱類型
payload NodeControllerRequestBindRequest

回應

名稱類型
payload NodeController_RequestBind_Result

WaitForDriver

Hanging get 樣式呼叫,會傳回相關聯 Node 的終端狀態,或以此節點為父項的複合節點。如果驅動程式庫成功啟動,這個函式會立即傳回驅動程式庫啟動時所在節點的權杖。如果發生錯誤,系統會等到啟動完成 (即所有可繫結及啟動的驅動程式都已完成) 後,再傳回錯誤。

要求

<EMPTY>

回應

名稱類型
payload NodeController_WaitForDriver_Result

NodeManager

定義於 fuchsia.driver.framework/topology.fidl

用戶端可透過這個通訊協定,將 Node2 新增至驅動程式庫拓撲。

新增:HEAD

AddNode

在驅動程式庫程式架構中新增 Node2。

要求

名稱類型
node Node2
controller server_end:NodeController
node_ref server_end:Node?

回應

名稱類型
payload NodeManager_AddNode_Result

ResourceController

定義於 fuchsia.driver.framework/topology.fidl

資源提供者可用來控制資源的通訊協定。

新增:HEAD

移除

移除資源。

要求

<EMPTY>

STRUCTS

BindRule2

定義於 fuchsia.driver.framework/composite_node_spec.fidl

代表父項規格中的繫結規則。

欄位類型說明預設
key NodePropertyKeyString

屬性鍵。

無預設值
condition Condition

在比對程序中評估屬性值的條件。值必須是 ACCEPT 或 REJECT。

無預設值
values vector<NodePropertyValue>:64

屬性值清單。不得留空。屬性值必須屬於相同類型。

無預設值

CompositeNodeManager_AddSpec_Response

定義於 fuchsia.driver.framework/composite_node_spec.fidl

<EMPTY>

Driver_Resume_Response

定義於 fuchsia.driver.framework/driver.fidl

<EMPTY>

Driver_Start_Response

定義於 fuchsia.driver.framework/driver.fidl

<EMPTY>

Driver_Suspend_Response

定義於 fuchsia.driver.framework/driver.fidl

<EMPTY>

HealthDiagnosticItem

定義於 fuchsia.driver.framework/health.fidl

在驅動程式庫健康狀態檢查期間擷取的鍵/值診斷屬性。

欄位類型說明預設
key string:64 無預設值
value HealthDiagnosticValue 無預設值

NodeController_RequestBind_Response

定義於 fuchsia.driver.framework/topology.fidl

<EMPTY>

NodeManager_AddNode_Response

定義於 fuchsia.driver.framework/topology.fidl

<EMPTY>

NodeProperty2

定義於 fuchsia.driver.framework/topology.fidl

欄位類型說明預設
key NodePropertyKeyString

屬性鍵。

無預設值
value NodePropertyValue

屬性值。

無預設值

NodePropertyEntry2

定義於 fuchsia.driver.framework/driver_start_args.fidl

包含屬於節點的節點屬性。

欄位類型說明預設
name NodeName

具有 |node_properties| 的節點名稱。

無預設值
properties NodeProperties

屬於名稱為 |node_name| 的節點的節點屬性。如果節點是複合節點,則 |properties| 為空白,且不包含其父項的屬性。

無預設值

Node_AddChild_Response

定義於 fuchsia.driver.framework/topology.fidl

<EMPTY>

Node_ProvideResource_Response

定義於 fuchsia.driver.framework/topology.fidl

<EMPTY>

ParentSpec2

定義於 fuchsia.driver.framework/composite_node_spec.fidl

節點規格,用於指定從複合節點規格建立的複合節點的父項。

欄位類型說明預設
bind_rules vector<BindRule2>:64

父項的繫結規則。屬性鍵不得重複。不得留空。

無預設值
properties vector<NodeProperty2>:64

用於比對複合驅動程式庫繫結規則的屬性。鍵不得重複,且必須是字串。

無預設值

ResourceProperty

定義於 fuchsia.driver.framework/topology.fidl

新增:HEAD

欄位類型說明預設
key string

屬性的鍵。

無預設值
value ResourcePropertyValue

屬性的值。

無預設值

列舉

BusType flexible

類型:uint32

定義於 fuchsia.driver.framework/topology.fidl

名稱值說明
1
2
3
4
5
6
7
8
9
10
11
12
13

CompositeNodeSpecError 彈性

類型:uint32

定義於 fuchsia.driver.framework/composite_node_spec.fidl

CompositeNodeManager 通訊協定的錯誤代碼。

名稱值說明
1

未提供複合節點規格的引數。

2

指定複合節點規格的 nodes 為空白。

3

指定複合節點規格中的 name 與已建立的複合節點規格重複。

4

無法將規格新增至驅動程式庫索引。

5

同時指定了 parents 和 parents2 欄位。

條件 strict

類型:uint32

定義於 fuchsia.driver.framework/composite_node_spec.fidl

代表繫結規則條件。

名稱值說明
0
1
2

DeviceAddressStability 彈性

類型:uint32

定義於 fuchsia.driver.framework/topology.fidl

名稱值說明
0

驅動程式庫重新啟動時,裝置位址可能會變更。

1

系統重新啟動時,裝置位址可能會變更。

2

系統更新後,裝置位址可能會變更。

3

匯流排上的裝置位址在系統生命週期內保證穩定。

DriverPackageType flexible

類型:uint8

定義於 fuchsia.driver.framework/driver_info.fidl

驅動程式庫元件所在的 Fuchsia 套件類型。如要進一步瞭解各種套件類別,請前往: https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages

名稱值說明
0

BOOT 套件位於 Zircon 開機映像檔中。

1

BASE 套件會以靜態本機套件的形式,包含在 Fuchsia 版本中。

2

CACHED 套件是 BASE 套件,如果可以使用完整套件解析器,則可在解析期間更新。

3

UNIVERSE 套件只有在由完整套件解析器解析時,才會安裝到裝置上。

彈性健康狀態檢查錯誤

類型:uint32

定義於 fuchsia.driver.framework/health.fidl

無法完成健康狀態檢查時傳回的錯誤代碼。

名稱值說明
1

驅動程式未在層級期限內回應 (調度工具卡住)。

2

轉送檢查時,發生內部架構或傳輸錯誤。

3

不支援驅動程式或要求的 HealthCheckRequest 層級。

4

驅動程式未處於「執行中」狀態 (例如「啟動中」、「停止中」、「已暫停」)。

5

目前無法評估要求的層級:硬體已關機、暫停、尚未初始化或暫時忙碌。消費者必須將此視為沒有資訊,而非不健康。PING 絕不能傳回這個值。

6

執行檢查時發生匯流排、MMIO 或傳輸錯誤。

7

沒有繫結節點與要求的路徑名稱相符 (由 fuchsia.driver.development/Manager.RunHealthCheck 傳回)。

HealthCheckRequest 彈性

類型:uint32

定義於 fuchsia.driver.framework/health.fidl

指定驅動程式庫健康狀態檢查的深度和延遲時間預算。

名稱值說明
1

僅限軟體活躍度:調度工具回應、可取得鎖定、記憶體內狀態一致。沒有匯流排 I/O (I2C/SPI/DSI);只有在區塊已知有供電和時脈時,才會讀取 MMIO。不得傳回 UNAVAILABLE。建議:< 1 毫秒。期限 (由驅動程式庫代管程序強制執行):250 毫秒。

2

有界限、非破壞性的硬體讀取或進度視窗 (等待 TE/VSync 邊緣的一個影格週期,透過 I2C/DSI 讀取狀態暫存器)。不得清除讀取時清除暫存器,或干擾進行中的 DMA 或掃描。建議:< 25 毫秒。期限:2 秒。

3

擴充自我測試 / BIST。在檢查期間,可能會中斷進行中的 I/O,但必須還原先前的狀態。僅在操作員明確要求 (ffx / 實驗室測試) 時發出,絕不會在架構啟動的掃描期間發出。建議:< 10 秒。Deadline: 2min.

HealthStatus 彈性

類型:uint32

定義於 fuchsia.driver.framework/health.fidl

回報驅動程式庫或條件的運作健康狀態。

名稱值說明
1

驅動程式和硬體在正常參數範圍內運作。

2

驅動程式可正常運作,但錯誤率偏高、資源外洩或品質下降。

3

驅動程式或基礎硬體卡住、沒有回應或無法初始化。

NodeError 彈性

類型:uint32

定義於 fuchsia.driver.framework/topology.fidl

Node 通訊協定的錯誤代碼。

名稱值說明
1
2
3
4

節點名稱無效。具體來說,名稱不得包含句號。

5

已有同名的同層節點。

6

這個節點的優惠缺少來源名稱。

7

這個節點的優惠不應有來源或目標。

8

這個節點的符號缺少名稱。

9

這個節點的符號缺少位址。

10

這個節點已有另一個名稱相同的符號。

11

節點正在解除繫結所有子項。

12

節點包含不支援的引數,例如已淘汰的屬性鍵或優惠。

13

節點包含多個鍵相同的屬性。

14

節點缺少來源執行個體篩選器,

15

節點缺少重新命名的執行個體,

TABLES

BusInfo

定義於 fuchsia.driver.framework/topology.fidl

序數欄位類型說明
bus BusType

這個節點所在的匯流排類型。

address DeviceAddress

專屬 ID,用於描述此裝置在指定匯流排上的身分。

address_stability DeviceAddressStability

位址的穩定性。

CompositeDriverInfo

定義於 fuchsia.driver.framework/driver_info.fidl

複合驅動程式庫的資訊。

序數欄位類型說明
composite_name string

驅動程式庫複合繫結規則中指定的複合名稱。

driver_info DriverInfo

驅動程式庫的一般資訊。

CompositeDriverMatch

定義於 fuchsia.driver.framework/driver_info.fidl

與複合資料相符的複合資料驅動程式庫資訊。

序數欄位類型說明
composite_driver CompositeDriverInfo

相符複合驅動程式庫的資訊。

parent_names vector<string>

所有父項名稱的清單,依索引排序。這些名稱來自驅動程式庫複合繫結規則中的節點定義。

primary_parent_index uint32

主要節點索引。由驅動程式庫複合繫結規則中的主要節點識別。

CompositeInfo

定義於 fuchsia.driver.framework/driver_info.fidl

由複合節點規格定義的複合資訊。

序數欄位類型說明
spec CompositeNodeSpec

建立這個複合節點規格時使用的規格資訊。

matched_driver CompositeDriverMatch

節點規格的資訊,只有在驅動程式庫與這個規格父項中的屬性相符時,才能使用。

CompositeNodeSpec

定義於 fuchsia.driver.framework/composite_node_spec.fidl

代表複合節點規格的結構。

序數欄位類型說明
name string

複合節點規格的名稱。

parents2 vector<ParentSpec2>

複合節點規格中的節點,不得留空。第一個節點是主要節點。

driver_host string:128

驅動程式代管程序的 ID,繫結至這個節點規格的驅動程式庫應位於其中。指定相同 ID 的所有驅動程式,都會集中在同一個驅動程式庫代管程序中。如果驅動程式代管程序尚未啟動,則會在節點繫結時啟動。

CompositeParent

定義於 fuchsia.driver.framework/driver_info.fidl

複合節點規格定義的複合節點父項。

序數欄位類型說明
composite CompositeInfo

此複合資料的子項複合資料相關資訊。

index uint32

這個父項在規格父項中的索引。

依附元件

定義於 fuchsia.driver.framework/topology.fidl

代表節點對資源的依附元件。系統會比對資源與 selector 的限制,解決依附元件問題。

新增:HEAD

序數欄位類型說明
selector Selector

資源必須符合選取器的限制,才能做為依附元件。

tags vector<ResourceProperty>:64

標記至資源的其他屬性,用於驅動程式庫繫結

DevfsAddArgs 資源

定義於 fuchsia.driver.framework/topology.fidl

序數欄位類型說明
connector client_end:fuchsia.device.fs/Connector

這是要安裝在 devfs 中的連接器。當用戶端連線至檔案系統中的這個節點時,系統會呼叫 Connect()。選用:如未提供,devfs 中會顯示空白節點。

class_name string:255

這是用於在 devfs 中安裝這個節點的類別名稱。節點會放在 /dev/class/{class_name} 中。如果 /dev/class/ 下沒有 class_name,系統會建立該目錄。選用:如未提供,則只會透過拓撲路徑新增節點。

inspect handle<vmo>

這是檢查資料的 VMO,將安裝在 devfs 中。選用:如未提供,devfs 的檢查資料會留空。

connector_supports fuchsia.device.fs/ConnectionType

指定 |connector| 支援的連線類型。驅動程式庫架構應處理連接器不支援的連線類型。如未提供,則系統只會假設連接器支援裝置類型。

controller_connector client_end:fuchsia.device.fs/Connector

這是要安裝在 devfs 中的控制器連接器。當用戶端連線至檔案系統中這個節點的 device_controller 連線時,系統會呼叫 Connect()。選用:如未提供,節點會以原生方式處理連線。這個選項僅限相容性填充碼或測試使用

新增:HEAD

DeviceCategory

定義於 fuchsia.driver.framework/driver_info.fidl

驅動程式庫元件資訊清單中提供的裝置類別。

序數欄位類型說明
category string
subcategory string

DriverInfo

定義於 fuchsia.driver.framework/driver_info.fidl

驅動程式庫的一般資訊,適用於複合和一般驅動程式。

序數欄位類型說明
url string:4096

驅動程式庫元件的網址。

name string

驅動程式庫名稱,取自驅動程式庫中 ZIRCON_DRIVER 巨集的第一個欄位。

colocate bool

如果這個值為 true,驅動程式庫應與父項的 DriverHost 位於同一位置。

package_type DriverPackageType

這個驅動程式庫所在的套件類型。

is_fallback bool

如果這個值為 true,則驅動程式庫為備用驅動程式庫。備用驅動程式的繫結優先順序較低,因此只有在沒有相符的非備用驅動程式庫時,才會選擇繫結。

device_categories vector<DeviceCategory>

裝置類別

bind_rules_bytecode vector<uint8>

繫結規則會宣告一組要評估的限制,以判斷驅動程式庫索引器是否應將此驅動程式庫繫結至裝置。

driver_framework_version uint8

這個驅動程式庫使用的驅動程式庫架構版本。支援的值為 1 (DFv1) 和 2 (DFv2)。如未提供,系統會假設版本為 1。

is_disabled bool

驅動程式庫是否已停用。如果為 true,系統就不會選擇這個驅動程式庫繫結至節點。

DriverStartArgs 資源

定義於 fuchsia.driver.framework/driver_start_args.fidl

啟動驅動程式庫的引數。

序數欄位類型說明
node client_end:Node

驅動程式庫繫結的節點。

symbols vector<NodeSymbol>:64

提供給驅動程式庫符號,用於 |node|。這些符號來自新增 |node| 的驅動程式庫,並經過篩選,只保留繫結程式中要求的符號。

url fuchsia.url/Url

包含驅動程式庫的套件網址。這純粹是資訊,僅用於提供檢查資料。

program fuchsia.data/Dictionary

首先,請提供驅動程式庫資訊。目前支援的項目如下:

  1. 「binary」:字串,包含驅動程式庫二進位檔的套件相對路徑。
  2. 「colocate」(選用):包含「true」或「false」的字串,指定驅動程式庫是否應與新增 |node| 的驅動程式庫程式位於同一個驅動程式代管程序。如未指定,驅動程式庫會在新的驅動程式代管程序中啟動。
  3. 「default_dispatcher_opts」(選用):字串陣列,指定建立預設調度工具的選項。字串可以是下列其中一項:
    • allow_sync_calls:允許在預設調度工具的執行緒上執行同步呼叫。
  4. 「default_dispatcher_scheduler_role」(選用):為驅動程式庫建立的預設調度員設定排程器角色。
incoming vector<fuchsia.component.runner/ComponentNamespaceEntry>:32

提供給驅動程式庫傳入命名空間。

outgoing_dir server_end:fuchsia.io/Directory

由驅動程式庫提供的傳出目錄。

config handle<vmo>

傳遞至驅動程式庫設定。

node_name string

驅動程式庫繫結的節點名稱。

node_offers NodeOffersVector

驅動程式庫繫結節點的節點供應項目。

node_token handle<event>

提供代表這個節點的權杖,可與驅動程式庫程式架構交換,以辨別這個節點的其他資訊。

node_properties_2 NodePropertyDictionary2
vmar handle<vmar>

驅動程式庫對應至的根 VMAR。如要套用相同的排程器設定檔,所有子項對應都應放在這個 VMAR 中。

power_element_args PowerElementArgs

在透過 fuchsia.power.SuspendEnabled 設定能力啟用暫停的產品上,處理與驅動程式庫電源元素相關的控制代碼。如果驅動程式庫的資訊清單在資訊清單的程式區段中包含 suspend_enabled = "true",則 element_server、lessor_client 和 token 會傳遞至驅動程式庫,否則控制代碼會由驅動程式代管程序保留。control_client 一律由驅動程式代管程序保留,絕不會傳遞給驅動程式庫。

新增:HEAD
log_sink client_end:fuchsia.logger/LogSink

記錄檔接收器管道。

HealthCheckResponse

定義於 fuchsia.driver.framework/health.fidl

驅動程式庫健康狀態檢查傳回的回應。

序數欄位類型說明
diagnostics vector<HealthDiagnosticItem>:32

驅動程式庫整體診斷鍵/值遙測資料 (電源模式、活動計數器、上次事件時間戳記),而非單一條件。

conditions vector<HealthCondition>:16

目前有故障或警告。如果驅動程式庫健康狀態良好 (HealthStatus.OK),則會省略或留空。整體驅動程式庫狀態是 conditions (UNHEALTHY > DEGRADED > OK) 的最大嚴重程度,如果省略或留空,則為 OK。

HealthCondition

定義於 fuchsia.driver.framework/health.fidl

驅動程式庫健康狀態檢查偵測到一項狀況。

序數欄位類型說明
status HealthStatus

此病症的嚴重程度。消費者會將省略或無法辨識的值視為 UNHEALTHY,因此請務必設定這個值。

reason_code string:128

機器可讀的簡短權杖 (例如「DSI_CRI_FIFO_WEDGED」、「TE_INTERRUPT_STALLED」)。在回應中不得重複。

message string:1024

人類可讀的條件詳細資料。

diagnostics vector<HealthDiagnosticItem>:32

此條件專屬的診斷值。

first_observed zx/InstantBoot

首次觀察到此情況的開機時間軸。

last_observed zx/InstantBoot

最近一次觀察到這個條件的開機時間軸。

occurrence_count uint64

自 first_observed以來,觀察到這個條件的次數。

Node2

定義於 fuchsia.driver.framework/topology.fidl

代表新增至驅動程式庫拓撲的節點。所有依附元件都與資源相符後,系統就會建立節點。

新增:HEAD

序數欄位類型說明
name string
dependencies vector<Dependency>

NodeAddArgs 資源

定義於 fuchsia.driver.framework/topology.fidl

新增節點的引數。

序數欄位類型說明
name NodeName

節點名稱。

symbols vector<NodeSymbol>:64

要提供給繫結至這個節點的驅動程式庫的函式。

devfs_args DevfsAddArgs

這個節點應如何新增至 devfs 的引數。

offers2 NodeOffersVector

要提供給繫結至這個節點的驅動程式庫的功能。驅動程式庫必須確保這些功能已新增至傳出目錄或 |offers_dictionary| (如果其中有任何功能屬於 |dictionary_offer| 類型),才能新增子節點。

bus_info BusInfo

提供給裝置結構化匯流排拓撲的資訊。只有匯流排驅動程式可以指定,最好是預設包含的驅動程式。

properties2 NodeProperties

節點的屬性。

offers_dictionary fuchsia.component.sandbox/DictionaryRef

這可用於透過字典,向繫結至這個節點的驅動程式庫提供額外優惠。使用者必須使用 |offers2| 欄位,為這個字典中存在的優惠指定 |dictionary_offer| 類型優惠。

新增:HEAD
driver_host string:128

驅動程式代管程序的 ID,繫結至這個節點的驅動程式庫應位於其中。指定相同 ID 的所有驅動程式,都會集中在同一個驅動程式代管程序。如果驅動程式代管程序尚未啟動,則會在節點繫結時啟動。只有在驅動程式庫直接繫結至這個節點時,系統才會遵循這項設定。如果複合節點繫結至這個節點,系統會忽略這個欄位,因為這個欄位應改為在複合節點規格中表示。

資源

定義於 fuchsia.driver.framework/topology.fidl

序數欄位類型說明
node_token handle<event>

提供代表這個節點的權杖,可與驅動程式庫程式架構交換,以辨別這個節點的其他資訊。

NodeControllerRequestBindRequest

定義於 fuchsia.driver.framework/topology.fidl

序數欄位類型說明
force_rebind bool

如果為 true,節點會先與相符的驅動程式庫解除繫結,再嘗試透過一般繫結程序繫結。

driver_url_suffix string

如果設定這個欄位,系統只會考慮與這個網址後置字串相符的驅動程式,並進行繫結。例如:「gpt.cm」、「meta/gpt.cm」、「fuchsia-boot:///#meta/gpt.cm」。

NodeSymbol

定義於 fuchsia.driver.framework/topology.fidl

驅動程式庫為節點提供的符號定義。符號是驅動程式代管程序的本機符號。

序數欄位類型說明
name string:128

符號名稱。

address uint64

驅動程式代管程序中符號的虛擬位址。

module_name string:128

提供符號的模組名稱。如果符號源自主要父項,則不會提供。

PowerElementArgs 資源

定義於 fuchsia.driver.framework/driver_start_args.fidl

新增:HEAD

序數欄位類型說明
control_client client_end:fuchsia.power.broker/ElementControl
runner_server server_end:fuchsia.power.broker/ElementRunner
lessor_client client_end:fuchsia.power.broker/Lessor
token fuchsia.power.broker/DependencyToken

ResourceArgs 資源

定義於 fuchsia.driver.framework/topology.fidl

提供資源的引數。

新增:HEAD

序數欄位類型說明
name ResourceName

資源名稱。必填。

properties ResourceProperties

資源的屬性。必填。

offers NodeOffersVector

資源提供給依附節點的功能。必填。

bus_info BusInfo

提供給裝置結構化匯流排拓撲的資訊。只有匯流排驅動程式才能指定這個值,最好是預設包含的驅動程式。(選用)

選取器

定義於 fuchsia.driver.framework/topology.fidl

用於比對資源做為節點依附元件的選取器。

新增:HEAD

序數欄位類型說明
offers vector<Offer>:128

資源必須包含這些優惠。

include_properties vector<ResourceProperty>:64

資源必須包含這些屬性。屬性鍵不得重複,選取器才有效。

exclude_properties vector<ResourceProperty>:64

資源不得包含這些屬性。

UNIONS

CompositeNodeManager_AddSpec_Result strict

定義於 fuchsia.driver.framework/composite_node_spec.fidl

序數Variant類型說明
response CompositeNodeManager_AddSpec_Response
err CompositeNodeSpecError
framework_err internal

DeviceAddress 彈性

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
int_value uint8

固定的整數 ID,例如 SPI 匯流排位址

array_int_value vector<uint8>:10

整數陣列,例如 PCI BDF。

char_int_value string:4

uint32 值,可解讀為 4 個字元的序列。

array_char_int_value vector<string:4>:10

字元序列陣列,例如 ACPI 節點路徑。

string_value string:32

一般字串,例如裝置樹狀結構節點路徑。

DriverResult 彈性 資源

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
driver_started_node_token handle<event>

驅動程式庫已成功啟動的節點所屬權杖。

match_error zx/Result

節點找不到相符的驅動程式庫或複合規格。

start_error zx/Result

繫結至節點的驅動程式無法順利啟動。

Driver_Resume_Result strict

定義於 fuchsia.driver.framework/driver.fidl

序數Variant類型說明
response Driver_Resume_Response
err zx/Status
framework_err internal

Driver_Start_Result strict

定義於 fuchsia.driver.framework/driver.fidl

序數Variant類型說明
response Driver_Start_Response
err zx/Status
framework_err internal

Driver_Suspend_Result strict

定義於 fuchsia.driver.framework/driver.fidl

序數Variant類型說明
response Driver_Suspend_Response
err zx/Status
framework_err internal

HealthAlert 彈性

定義於 fuchsia.driver.framework/health.fidl

驅動程式庫透過 OnHealthAlert 發出的主動健康警示酬載。「上游」是驅動程式庫依附的項目 (父項:匯流排、時鐘、電源網域、複合父項)。「下游」是指依賴驅動程式庫項目 (子項 / 消費者)。

序數Variant類型說明
self_fault HealthCheckResponse

驅動程式偵測到內部硬體或軟體故障,或從先前回報的故障中復原 (conditions 為空白時)。邊緣觸發:在驅動程式庫的整體狀態惡化時傳送 (OK->DEGRADED、DEGRADED->UNHEALTHY),並在恢復時再次傳送空白 conditions;絕不會在已回報的狀況發生時傳送。

upstream_neighbor_fault HealthCheckResponse

上游依附元件 (父項/匯流排/時鐘/電源/註冊供應商) 沒有回應或無效,因此驅動程式無法繼續執行。

downstream_neighbor_fault HealthCheckResponse

下游消費者 (子項/用戶端) 停滯或無法清空佇列/緩衝區,因此驅動程式無法繼續執行。

HealthDiagnosticValue 彈性

定義於 fuchsia.driver.framework/health.fidl

HealthCheckResponse 傳回的診斷值。

序數Variant類型說明
string_value string:256
int_value int64
uint_value uint64
bool_value bool
timestamp zx/InstantBoot

開機時間軸,例如上次中斷或輸入報告的時間。

Health_HealthCheck_Result strict

定義於 fuchsia.driver.framework/health.fidl

序數Variant類型說明
response HealthCheckResponse
err HealthCheckError
framework_err internal

NodeController_RequestBind_Result strict

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response NodeController_RequestBind_Response
err zx/Status
framework_err internal

NodeController_WaitForDriver_Result strict resource

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response DriverResult
err zx/Status
framework_err internal

NodeManager_AddNode_Result strict

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response NodeManager_AddNode_Response
err NodeError
framework_err internal

NodePropertyValue 彈性

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
int_value NodePropertyValueUint
string_value NodePropertyValueString
bool_value NodePropertyValueBool
enum_value NodePropertyValueEnum

Node_AddChild_Result strict

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response Node_AddChild_Response
err NodeError
framework_err internal

Node_ProvideResource_Result strict

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
response Node_ProvideResource_Response
err NodeError
framework_err internal

提供彈性

定義於 fuchsia.driver.framework/topology.fidl

序數Variant類型說明
zircon_transport fuchsia.component.decl/Offer
driver_transport fuchsia.component.decl/Offer
dictionary_offer fuchsia.component.decl/Offer

位於 |offers_dictionary| 中的供應項目。這相當於 |zircon_transport| 供應項目,適用於所有其他用途 (例如繫結屬性產生)。

常數

名稱值類型說明
MAX_DEVICE_ADDRESS_ARRAY_LEN 10 uint32
MAX_DEVICE_ADDRESS_STR_LEN 32 uint32
MAX_DRIVER_HOST_LENGTH 128 uint8
MAX_MODULE_NAME_LENGTH 128 uint8
MAX_NAMESPACE_COUNT fuchsia.component.runner/MAX_NAMESPACE_COUNT uint32
MAX_NODE_NAME_LENGTH 128 uint8
MAX_OFFER_COUNT fuchsia.component/MAX_DYNAMIC_OFFER_COUNT uint32
MAX_PROPERTY_COUNT 64 uint8
MAX_RESOURCE_NAME_LENGTH 128 uint8
MAX_SYMBOL_COUNT 64 uint8
MAX_SYMBOL_NAME_LENGTH 128 uint8

別名

名稱值說明
NodeName string[MAX_NODE_NAME_LENGTH]
NodeOffersVector vector[MAX_OFFER_COUNT]
NodeProperties vector[MAX_PROPERTY_COUNT]
NodePropertyDictionary2 vector[fidl/MAX]
NodePropertyKeyString string[256]
NodePropertyKeyUint uint32
NodePropertyValueBool bool
NodePropertyValueEnum string[256]
NodePropertyValueString string[256]
NodePropertyValueUint uint32
ResourceName string
新增:HEAD
ResourceProperties vector[MAX_PROPERTY_COUNT]
新增:HEAD
ResourcePropertyValue fuchsia.driver.framework/NodePropertyValue
新增:HEAD
ResourcePropertyValueBool bool
新增:HEAD
ResourcePropertyValueString string
新增:HEAD
ResourcePropertyValueUint uint32
新增:HEAD