# Copyright 2018 The Hafnium Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/image/image.gni")

# Service to expose race conditions when running a vcpu.
source_set("check_state") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "check_state.c",
  ]

  deps = [
    "//src/arch/aarch64/hftest:state",
  ]
}

# Service to listen for messages and echo them back to the sender.
source_set("echo") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "echo.c",
  ]
}

# Echo service that waits for recipient to become writable.
source_set("echo_with_notification") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "echo_with_notification.c",
  ]

  deps = [
    "//src/arch/aarch64/hftest:interrupts_gicv3",
  ]
}

# Service for floating point register save/restore checks.
source_set("floating_point") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "floating_point.c",
  ]

  deps = [
    "//src/arch/aarch64/hftest:registers",
  ]
}

# Services related to memory sharing.
source_set("memory") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "memory.c",
  ]
}

# Services related to aborting VMs.
source_set("abort") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "abort.c",
  ]
}

# Services related to the boot process for VMs.
source_set("boot") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "boot.c",
  ]
}

# Service that can be interrupted.
source_set("interruptible") {
  testonly = true
  public_configs = [
    "..:config",
    "//test/hftest:hftest_config",
  ]

  sources = [
    "interruptible.c",
    "interruptible_echo.c",
  ]

  deps = [
    "//src/arch/aarch64/hftest:interrupts_gicv3",
  ]
}

# Service to check that hf_mailbox_receive can't block when there are pending
# interrupts.
source_set("receive_block") {
  testonly = true
  public_configs = [
    "..:config",
    "//test/hftest:hftest_config",
  ]
  sources = [
    "receive_block.c",
  ]
}

# Service to listen for messages and forward them on to another.
source_set("relay") {
  testonly = true
  public_configs = [ "//test/hftest:hftest_config" ]

  sources = [
    "relay.c",
  ]
}

# Service to check that WFI is a no-op when there are pending interrupts.
source_set("wfi") {
  testonly = true
  public_configs = [
    "..:config",
    "//test/hftest:hftest_config",
  ]
  sources = [
    "wfi.c",
  ]
}

# Service to receive messages in a secondary VM and ensure that the header fields are correctly set.
source_set("spci_check") {
  testonly = true
  public_configs = [
    "..:config",
    "//test/hftest:hftest_config",
  ]

  sources = [
    "spci_check.c",
  ]
}

# Group services together into VMs.

vm_kernel("service_vm0") {
  testonly = true

  deps = [
    ":abort",
    ":boot",
    ":check_state",
    ":echo",
    ":echo_with_notification",
    ":floating_point",
    ":interruptible",
    ":memory",
    ":receive_block",
    ":relay",
    ":spci_check",
    ":wfi",
    "//test/hftest:hftest_secondary_vm",
  ]
}

vm_kernel("service_vm1") {
  testonly = true

  deps = [
    ":relay",
    "//test/hftest:hftest_secondary_vm",
  ]
}
