syntax = "proto3";
package chromite.api;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/chromite/api";

import "chromite/api/build_api.proto";
import "chromiumos/common.proto";

// Protos for executing firmware builder functionality.

// List of known location that firmware can be built from
enum FwLocation {
  FW_LOCATION_UNKNOWN = 0;
  PLATFORM_EC = 1; // platform/ec/firmware_builder.py
  PLATFORM_ZEPHYR = 2; // platform/zephyr-chrome/firmware_builder.py
  PLATFORM_TI50 = 3; // platform/ti50/common/firmware_builder.py
}

// Metrics collected on every successful firmware build
message FwBuildMetric {
  // Lowercase name of the firmware target built. E.g. phaser
  string target_name = 1;

  // Lowercase name of the platform the firmware target belongs to. May be
  // blank. E.g. octopus
  string platform_name = 2;

  // List of firmware sections and their free and total sizes in bytes
  repeated FwSection fw_section = 3;

  message FwSection {
    // Region as described in FMAP or linker script.
    // E.g. EC_RO, EC_RW, EC_NVRAM, RO_BSS, RW_BSS, SHARED_MEM
    FwRegion region = 1;

    enum FwRegion {
      FW_REGION_UNKNOWN = 0;
      EC_RO = 1;  // The entire section protected by write protect
      EC_RW = 2;  // Also RW_A for EFS1 systems
      EC_RO_BSS = 3;
      EC_RW_BSS = 4;
      EC_SHARED_MEM = 5;
    }

    // The number of bytes used in this section
    uint32 used = 2;

    // The total number of bytes available in this section
    uint32 total = 3;
  }

  // Version number components: "major.minor.tiny".
  message Version {
    uint32 major = 1;
    uint32 minor = 2;
    uint32 tiny = 3;
  }

  // Optional information related to a specific target type
  oneof image_type {
    ZephyrTarget zephyr = 4;
  }

  // Zephyr-base firmware target related build metrics
  message ZephyrTarget {
    // The version of the Zephyr kernel used during build
    Version kernel_version = 1;
  }
}

// A list of FW metrics collected on every successful firmware build
// Implementation note, this is a separate message since it serves as the
// serialization base between the build_api end point and the entry point
// in the firmware_builder.py
message FwBuildMetricList {
  repeated FwBuildMetric value = 1;
}

// Metrics collect on successful firmware unit test runs
message FwTestMetric {
  // Name of firmware test
  string name = 1;
}

// A list of FW metrics collected on every successful firmware unit test.
// Implementation note, this is a separate message since it serves as the
// serialization base between the build_api end point and the entry point
// in the firmware_builder.py
message FwTestMetricList {
  repeated FwTestMetric value = 1;
}

message BuildAllTotFirmwareRequest {
  // Location of firmware to build call into firmware_builder.py entry point.
  // The `build` subcommand will be called
  FwLocation firmware_location = 1;

  // The chroot where the operations will be executed.
  // Required.
  chromiumos.Chroot chroot = 2;
}

message BuildAllTotFirmwareResponse {
  // Metrics collected on every successful firmware build
  FwBuildMetricList metrics = 1;
}

message TestAllTotFirmwareRequest {
  // Location of firmware to build call into firmware_builder.py entry point.
  // The `test` subcommand will be called
  FwLocation firmware_location = 1;

  // The chroot where the operations will be executed.
  // Required.
  chromiumos.Chroot chroot = 2;
}

message TestAllTotFirmwareResponse {
  // Metrics collect on successfuly firmware unit test runs
  FwTestMetricList metrics = 1;
}

// The Firmware service.
service FirmwareService {
  option (service_options) = {
    module: "firmware",
    service_chroot_assert: INSIDE,
  };

  // Builds all of the firmware targets on ToT at specified location
  rpc BuildAllTotFirmware(BuildAllTotFirmwareRequest)
      returns (BuildAllTotFirmwareResponse);

  // Runs all of the firmware tests on ToT at specified location
  rpc TestAllTotFirmware(TestAllTotFirmwareRequest)
      returns (TestAllTotFirmwareResponse);
}
