| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // The messages in this file comprise the DBus/Protobuf interface for |
| // Runtime Probe. |
| syntax = "proto3"; |
| |
| package runtime_probe; |
| option go_package = "chromiumos/system_api/runtime_probe_proto"; |
| |
| // Defined error code. |
| enum ErrorCode { |
| // 0 is the default value of ProbeResult::error. It should never be used. |
| RUNTIME_PROBE_ERROR_NOT_SET = 0; |
| |
| // Not able to read the ProbeRequest as DBus signature indicated. |
| RUNTIME_PROBE_ERROR_PROBE_REQUEST_INVALID = 1; |
| reserved 2, 3; |
| // Assigned probe config contains functions not able to be constructed. |
| RUNTIME_PROBE_ERROR_PROBE_CONFIG_INCOMPLETE_PROBE_FUNCTION = 4; |
| // Not able to parse the ProbeResult JSON string as protobuf message. |
| RUNTIME_PROBE_ERROR_PROBE_RESULT_INVALID = 5; |
| // Assigned probe config doesn't exist or is not holding a correct JSON |
| // format. |
| RUNTIME_PROBE_ERROR_PROBE_CONFIG_INVALID = 6; |
| } |
| |
| // Request from client that indicates what categories to probe. Category must |
| // be existed on the per-board probe statement in rootfs. |
| message ProbeRequest { |
| // The name style here is on purposely align with factory probe output. |
| enum SupportCategory { |
| UNKNOWN = 0; |
| audio_codec = 1; |
| battery = 2; |
| storage = 3; |
| vpd_cached = 4; |
| // Obsolete in M91. |
| network = 5; |
| camera = 6; |
| stylus = 7; |
| touchpad = 8; |
| touchscreen = 9; |
| dram = 10; |
| display_panel = 11; |
| cellular = 12; |
| ethernet = 13; |
| wireless = 14; |
| } |
| reserved 1; |
| repeated SupportCategory categories = 4; |
| // This option allows clients to retrieve data with privacy implication from |
| // D-Bus call to runtime_probe. Default to false and please use with caution. |
| bool include_privacy_fields = 2; |
| // If probe_default_category is True, the supplied categories above will be |
| // ignored. |
| bool probe_default_category = 3; |
| } |
| |
| // Extra information for each probe result. |
| message Information { |
| // comp_group, used for grouping different probed components. |
| string comp_group = 1; |
| } |
| |
| // TODO(b/158765173): Collect the possible HW interface types into an enum. |
| |
| // Things about audio_codec. |
| message AudioCodec { |
| message Fields { |
| // The name of the codec presents in sysfs. |
| string name = 1; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about battery. |
| message Battery { |
| // TODO(itspeter): Add more fileds for battery. |
| message Fields { |
| // (1) Most fields are following the naming of exposed ACPI interface. |
| // (2) Most units is in µ because of this unexplained kernel patch: |
| // https://chromium.git.corp.google.com/chromiumos/third_party/kernel/+/d7380965752505951668e85de59c128d1d6fd21f%5E%21/#F1 |
| |
| // Index number of this battery, starts from 1. |
| int32 index = 1; |
| // Manufacturer for length not exceeding EC_COMM_TEXT_MAX. |
| string manufacturer = 2; |
| // Model name for length not exceeding EC_COMM_TEXT_MAX. |
| string model_name = 3; |
| // Serial number for length not exceeding EC_COMM_TEXT_MAX. |
| string serial_number = 4; |
| // Design Capacity (µAh). |
| int32 charge_full_design = 5; |
| // Full Capacity (µAh, might change occasionally). |
| int32 charge_full = 6; |
| // Remaining capacity (µAh) |
| int32 charge_now = 7; |
| // Current Battery voltage (µV) |
| int32 voltage_now = 8; |
| // Designed minimum output voltage (µV) |
| int32 voltage_min_design = 9; |
| // Smart Battery Cycle Count in http://sbs-forum.org/specs/sbdat110.pdf |
| int32 cycle_count_smart = 10; |
| // Smart Battery Status defined in http://sbs-forum.org/specs/sbdat110.pdf |
| int32 status_smart = 11; |
| // Temperature in 0.1°K as Smart Battery Temperature defined in |
| // http://sbs-forum.org/specs/sbdat110.pdf |
| int32 temperature_smart = 12; |
| // The path of this battery in system. It is useful if caller needs to |
| // correlate with other information |
| string path = 13; |
| // Smart Manufacture Date is defined in |
| // http://sbs-forum.org/specs/sbdat110.pdf. |
| // The value is calculated by ((year-1980) * 512 + month * 32 + day). |
| int32 manufacture_date_smart = 14; |
| // Technology is defined in |
| // /sys/class/power_supply/<supply_name>/technology section in |
| // https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-power. |
| string technology = 15; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about storage. |
| message Storage { |
| message Fields { |
| // The path of this storage in system. It is useful if caller needs to |
| // correlate with other information. |
| string path = 1; |
| // Number of sectors of this storage, traditionally 1 sector = 512 Bytes. |
| int64 sectors = 2; |
| // Exact size of this storage, reported in bytes |
| int64 size = 3; |
| // Storage type, could be MMC / NVMe / ATA |
| string type = 4; |
| |
| // Below are based on JEDEC Standard No. 84-B51, and kernel MMC driver |
| // exposed in sysfs: |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v3.18/drivers/mmc/core/mmc.c#71 |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v3.18/include/linux/mmc/card.h#17 |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v3.18/Documentation/mmc/mmc-dev-attrs.txt |
| |
| // MID: Manufacturer ID, 8 bits. |
| uint32 mmc_manfid = 5; |
| // PNM: Product name, ASCII characters for 6 bytes. |
| string mmc_name = 6; |
| // Hardware/Product Revision, 4 bits. (SD and MMCv1 only) |
| uint32 mmc_hwrev = 15; |
| // PRV: Product revision, 8 bits. (SD and MMCv4 only) |
| uint32 mmc_prv = 7; |
| // PSN: Product serial number, 32 bits. |
| uint32 mmc_serial = 8; |
| // OID: OEM/Application ID, 8 bits. |
| uint32 mmc_oemid = 9; |
| |
| // The following are fields for NVMe. Every field name comes with |
| // prefix "pci_" as NVMe is a PCI device. |
| // These fields are based on what kernel pci driver exposes in sysfs: |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v4.4/include/linux/pci.h#267 |
| |
| // Vendor ID, 16 bits |
| uint32 pci_vendor = 10; |
| // Device ID, 16 bits |
| uint32 pci_device = 11; |
| // Device class indicator, 32 bits |
| uint32 pci_class = 12; |
| |
| // The following are fields for SATA. Every field name comes with |
| // prefix "ata_". |
| // These fields based on what kernel pci driver exposes in sysfs: |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v4.4/drivers/scsi/scsi_devinfo.c#22 |
| |
| // Vendor name, 8 bytes |
| string ata_vendor = 13; |
| // Model name, 16 bytes |
| string ata_model = 14; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about VPD (Vital Product Data) , cached version. |
| message VpdCached { |
| // TODO(itspeter): Add more fileds for Vpd. |
| message Fields { |
| // Allowed VPD fileds are reviewed on https://b/131849646 |
| // Up to date documentation on VPD fields for each Chromebook is on |
| // https://www.google.com/chromeos/partner/fe/docs/factory/vpd.html |
| |
| // SKU number of the unit |
| string vpd_sku_number = 1; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about network. |
| message Network { |
| message Fields { |
| // The path of this network in system. It is useful if caller needs to |
| // correlate with other information. |
| string path = 1; |
| // Network type, could be wireless / ethernet / cellular |
| string type = 2; |
| // Network bus, could be pci / usb / sdio |
| string bus_type = 3; |
| |
| // The following are fields for PCI. Every field name comes with |
| // prefix "pci_". |
| // These fields are based on what kernel pci driver exposes in sysfs: |
| // https://chromium.googlesource.com/chromiumos/third_party/kernel/+/v4.4/include/linux/pci.h#267 |
| |
| // Vendor ID, 16 bits |
| uint32 pci_vendor_id = 4; |
| // Device ID, 16 bits |
| uint32 pci_device_id = 5; |
| // Device revision, 8 bits |
| uint32 pci_revision = 6; |
| // Subsystem ID, 16 bits |
| uint32 pci_subsystem = 12; |
| |
| // The following are fields for USB. Every field name comes with |
| // prefix "usb_". |
| |
| // Vendor ID, 16 bits |
| uint32 usb_vendor_id = 7; |
| // Product ID, 16 bits |
| uint32 usb_product_id = 8; |
| // Device Release Number, 16 bits. |
| uint32 usb_bcd_device = 9; |
| |
| // The following are fields for SDIO. Every field name comes with |
| // prefix "sdio_". |
| |
| // Vendor ID, 16 bits |
| uint32 sdio_vendor_id = 10; |
| // Product ID, 16 bits |
| uint32 sdio_device_id = 11; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| enum UsbRemovable { |
| UNKNOWN = 0; |
| REMOVABLE = 1; |
| FIXED = 2; |
| } |
| |
| // Things about cameras. |
| message Camera { |
| message Fields { |
| // The device path of this camera (e.g. "/dev/video0"). It is useful |
| // if the caller needs to correlate with other information. |
| string path = 1; |
| |
| // HW interface type, currently must be "usb". |
| string bus_type = 2; |
| |
| // The following are fields for USB. Every field name must start with |
| // prefix "usb_". |
| |
| // Vendor ID, 16 bits. |
| uint32 usb_vendor_id = 3; |
| // Product ID, 16 bits. |
| uint32 usb_product_id = 4; |
| // Device Release Number, 16 bits. |
| uint32 usb_bcd_device = 5; |
| |
| // Whether this USB device is removable or not. |
| UsbRemovable usb_removable = 6; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about input_device. |
| message InputDevice { |
| message Fields { |
| // The name of the device. |
| string name = 1; |
| // The pathname of the sysfs entry of that device. |
| string path = 2; |
| // The event of the device. |
| string event = 3; |
| // The bus number, 16 bits. |
| uint32 bus = 4; |
| // The vendor code, 16 bits. |
| uint32 vendor = 5; |
| // The product code, 16 bits. |
| uint32 product = 6; |
| // The version number, 16 bits. |
| uint32 version = 7; |
| // The firmware version. |
| string fw_version = 8; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // Things about memory. |
| message Memory { |
| message Fields { |
| // Part number. |
| string part = 1; |
| // Memory size in MiB. |
| uint32 size = 2; |
| // Memory slot index, 0-based |
| uint32 slot = 3; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| message Edid { |
| enum Vendor { |
| VENDOR_UNKNOWN = 0; |
| VENDOR_AAA = 1; |
| VENDOR_ACI = 61; |
| VENDOR_ACR = 70; |
| VENDOR_ACT = 72; |
| VENDOR_ADA = 79; |
| VENDOR_AGO = 171; |
| VENDOR_AOP = 380; |
| VENDOR_API = 399; |
| VENDOR_APP = 406; |
| VENDOR_ARD = 446; |
| VENDOR_ART = 462; |
| VENDOR_ASK = 479; |
| VENDOR_ATO = 509; |
| VENDOR_AUO = 535; |
| VENDOR_AUS = 539; |
| VENDOR_AVT = 566; |
| VENDOR_BEL = 792; |
| VENDOR_BMD = 992; |
| VENDOR_BNO = 1029; |
| VENDOR_BOE = 1045; |
| VENDOR_BPS = 1085; |
| VENDOR_CAT = 1372; |
| VENDOR_CHR = 1552; |
| VENDOR_CIN = 1574; |
| VENDOR_CMN = 1678; |
| VENDOR_CMO = 1679; |
| VENDOR_CNC = 1693; |
| VENDOR_CPL = 1754; |
| VENDOR_CPT = 1762; |
| VENDOR_CRO = 1809; |
| VENDOR_CSO = 1835; |
| VENDOR_CTO = 1861; |
| VENDOR_CTX = 1870; |
| VENDOR_CUK = 1883; |
| VENDOR_DEL = 2144; |
| VENDOR_DGC = 2187; |
| VENDOR_DMO = 2355; |
| VENDOR_DON = 2406; |
| VENDOR_DPL = 2430; |
| VENDOR_EGA = 2861; |
| VENDOR_ENC = 3045; |
| VENDOR_EPH = 3102; |
| VENDOR_EXN = 3316; |
| VENDOR_EXP = 3318; |
| VENDOR_FNI = 3727; |
| VENDOR_FUS = 3919; |
| VENDOR_GBT = 4102; |
| VENDOR_GFN = 4200; |
| VENDOR_GGL = 4224; |
| VENDOR_GSM = 4537; |
| VENDOR_HIQ = 4957; |
| VENDOR_HKC = 4995; |
| VENDOR_HOL = 5108; |
| VENDOR_HPN = 5136; |
| VENDOR_HSD = 5204; |
| VENDOR_HTC = 5229; |
| VENDOR_HWP = 5320; |
| VENDOR_HYT = 5376; |
| VENDOR_INO = 5761; |
| VENDOR_INT = 5766; |
| VENDOR_INX = 5770; |
| VENDOR_ITE = 5907; |
| VENDOR_IVM = 5967; |
| VENDOR_IVO = 5969; |
| VENDOR_JVC = 6633; |
| VENDOR_KDB = 6840; |
| VENDOR_KDC = 6841; |
| VENDOR_KTC = 7257; |
| VENDOR_LEN = 7554; |
| VENDOR_LGD = 7596; |
| VENDOR_LNX = 7798; |
| VENDOR_LPL = 7838; |
| VENDOR_LWR = 8026; |
| VENDOR_MAX = 8136; |
| VENDOR_MEG = 8223; |
| VENDOR_MEI = 8225; |
| VENDOR_MEL = 8228; |
| VENDOR_MJI = 8355; |
| VENDOR_MOM = 8489; |
| VENDOR_MST = 8600; |
| VENDOR_MSX = 8604; |
| VENDOR_MTC = 8609; |
| VENDOR_MTX = 8630; |
| VENDOR_NCP = 8856; |
| VENDOR_NCR = 8858; |
| VENDOR_NEC = 8895; |
| VENDOR_NEX = 8916; |
| VENDOR_NVD = 9338; |
| VENDOR_ONK = 9813; |
| VENDOR_ORN = 9920; |
| VENDOR_OTM = 9971; |
| VENDOR_OVR = 10028; |
| VENDOR_PAR = 10158; |
| VENDOR_PCC = 10195; |
| VENDOR_PHL = 10334; |
| VENDOR_PIO = 10363; |
| VENDOR_PLY = 10451; |
| VENDOR_PNR = 10496; |
| VENDOR_QDS = 10913; |
| VENDOR_QNT = 11174; |
| VENDOR_RAT = 11512; |
| VENDOR_REN = 11610; |
| VENDOR_RTK = 11997; |
| VENDOR_SAM = 12181; |
| VENDOR_SAN = 12182; |
| VENDOR_SDC = 12249; |
| VENDOR_SEC = 12275; |
| VENDOR_SGT = 12344; |
| VENDOR_SHP = 12366; |
| VENDOR_SII = 12385; |
| VENDOR_SIS = 12395; |
| VENDOR_SLA = 12455; |
| VENDOR_SMC = 12483; |
| VENDOR_SNY = 12531; |
| VENDOR_STA = 12663; |
| VENDOR_STD = 12666; |
| VENDOR_STN = 12676; |
| VENDOR_SVS = 12733; |
| VENDOR_SYN = 12806; |
| VENDOR_TAI = 12853; |
| VENDOR_TCL = 12908; |
| VENDOR_TDC = 12925; |
| VENDOR_TOP = 13224; |
| VENDOR_TOS = 13227; |
| VENDOR_TSB = 13314; |
| VENDOR_TST = 13332; |
| VENDOR_UNK = 13869; |
| VENDOR_VES = 14319; |
| VENDOR_VID = 14408; |
| VENDOR_VIT = 14424; |
| VENDOR_VIZ = 14430; |
| VENDOR_VSC = 14667; |
| VENDOR_VTK = 14701; |
| VENDOR_WDE = 14955; |
| VENDOR_WST = 15360; |
| VENDOR_WYS = 15515; |
| VENDOR_XLX = 15858; |
| VENDOR_YMH = 16544; |
| } |
| message Fields { |
| // The absolute path to the Edid file of the device. |
| string path = 1; |
| // The vendor code, 3 capital letters. |
| string vendor = 2; |
| // The product ID, 16 bits. |
| uint32 product_id = 3; |
| // The height of the device. |
| uint32 height = 4; |
| // The width of the device. |
| uint32 width = 5; |
| } |
| // Component alias. |
| string name = 1; |
| // Component's details. |
| Fields values = 2; |
| // Component probe info. |
| Information information = 3; |
| } |
| |
| // A ProbeResult contains all potential probe results. For category not |
| // existed or not requested for probing, field is expected to be empty. |
| message ProbeResult { |
| // If a call was successful, error will not be defined. |
| // If a call failed, it must set an error code. |
| ErrorCode error = 1; |
| // The checksum of probe config content calculated using SHA1 hash. |
| string probe_config_checksum = 6; |
| // The following are the fields for different component categories. |
| repeated AudioCodec audio_codec = 2; |
| repeated Battery battery = 3; |
| repeated Storage storage = 4; |
| repeated VpdCached vpd_cached = 5; |
| // Obsolete in M91. |
| repeated Network network = 7; |
| repeated Camera camera = 8; |
| repeated InputDevice stylus = 9; |
| repeated InputDevice touchpad = 10; |
| repeated InputDevice touchscreen = 11; |
| repeated Memory dram = 12; |
| repeated Edid display_panel = 13; |
| repeated Network cellular = 14; |
| repeated Network ethernet = 15; |
| repeated Network wireless = 16; |
| } |
| |
| message GetKnownComponentsRequest { |
| ProbeRequest.SupportCategory category = 1; |
| } |
| |
| message GetKnownComponentsResult { |
| ErrorCode error = 1; |
| repeated string component_names = 2; |
| } |