// Copyright 2024 Google LLC
//
// 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.

#ifndef MPACT_SIM_UTIL_RENODE_RENODE_MPACT_H_
#define MPACT_SIM_UTIL_RENODE_RENODE_MPACT_H_

#include <cstddef>
#include <cstdint>

#include "absl/container/flat_hash_map.h"
#include "absl/functional/any_invocable.h"
#include "mpact/sim/util/renode/renode_debug_interface.h"
#include "mpact/sim/util/renode/renode_memory_access.h"

// This file defines the interface that Renode uses to communicate with the
// simulator as well as support classes to implement the interface.

// C interface used by Renode.
extern "C" {
// There are two ways to create debug instances: create and connect. The main
// difference between them is that connect specifies the debug instance id to
// use (and thus must be managed by the caller). This also also allows multiple
// connections to the debug instance, which is useful if the debug instance
// is used both as a bus initiator as well as a bus target in a system
// simulation.

// Create a debug instance, returning its id. A return value of zero indicates
// and error. The sysbus variant of the call provides methods to perform loads
// and stores from a memory space managed by the caller.
int32_t construct(int32_t max_name_length);
int32_t construct_with_sysbus(int32_t max_name_length,
                              int32_t (*read_callback)(uint64_t, char *,
                                                       int32_t),
                              int32_t (*write_callback)(uint64_t, char *,
                                                        int32_t));
// Connect with, or construct, a debug instance connected to a simulator with
// the given id. A return value of zero indicates an error. The sysbus variant
// of the call provides methods to perform loads and stores from a memory space
// managed by the caller.
int32_t connect(int32_t id, int32_t max_name_length);
int32_t connect_with_sysbus(int32_t id, int32_t max_name_length,
                            int32_t (*read_callback)(uint64_t, char *, int32_t),
                            int32_t (*write_callback)(uint64_t, char *,
                                                      int32_t));
// Destruct the given debug instance. A negative return value indicates an
// error.
void destruct(int32_t id);
// Return the number of register entries.
int32_t get_reg_info_size(int32_t id);
// Return the register entry with the given index. The info pointer should
// store an object of type RenodeCpuRegister.
int32_t get_reg_info(int32_t id, int32_t index, char *name, void *info);
// Use the loader to read in the given ELF executable. If the for_symbols_only
// is true, do not write it to memory or set the PC to the entry point. The
// memory and register initialization will be performed by ReNode. In this case
// the file is loaded only to provide symbol lookup.
uint64_t load_elf(int32_t id, const char *elf_file_name, bool for_symbols_only,
                  int32_t *status);
// Load the content of the given file into memory, starting at the given
// address.
int32_t load_image(int32_t id, const char *file_name, uint64_t address);
// Read register reg_id in the instance id, store the value in the pointer
// given. A return value < 0 is an error.
int32_t read_register(int32_t id, uint32_t reg_id, uint64_t *value);
// Write register reg_id in the instance id. A return value < 0 is an error.
int32_t write_register(int32_t id, uint32_t reg_id, uint64_t value);
// Read/Write memory.
uint64_t read_memory(int32_t id, uint64_t address, char *buffer,
                     uint64_t length);
uint64_t write_memory(int32_t id, uint64_t address, const char *buffer,
                      uint64_t length);
// Reset the instance. A return value < 0 is an error.
int32_t reset(int32_t id);
// Step the instance id by num_to_step instructions. Return the number of
// instructions stepped. The status is written to the pointer *status.
uint64_t step(int32_t id, uint64_t num_to_step, int32_t *status);
// Set configuration items. This passes in the id, two arrays of strings (names
// and values), and the size of the two arrays. Depending on the name of the
// configuration item, the string will be interpreted according to the expected
// type.
int32_t set_config(int32_t id, const char *config_name[],
                   const char *config_value[], int32_t size);
// Set the given irq number (if valid) to the provided value.
int32_t set_irq_value(int32_t id, int32_t irq_number, bool irq_value);
}  // extern "C"

namespace mpact {
namespace sim {
namespace util {
namespace renode {

// Execution results.
enum class ExecutionResult : int32_t {
  kOk = 0,
  kInterrupted = 1,
  kWaitingForInterrupt = 2,
  kStoppedAtBreakpoint = 3,
  kStoppedAtWatchpoint = 4,
  kExternalMmuFault = 5,
  kAborted = -1,
};

// Intermediary between the C interface above and the actual debug interface
// of the simulator.
class RenodeAgent {
 public:
  constexpr static size_t kBufferSize = 64 * 1024;
  // This is a singleton class, so need a static Instance method.
  static RenodeAgent *Instance() {
    if (instance_ != nullptr) return instance_;

    instance_ = new RenodeAgent();
    return instance_;
  }

  // These methods correspond to the C methods defined above.
  int32_t Construct(int32_t max_name_length,
                    int32_t (*read_callback)(uint64_t, char *, int32_t),
                    int32_t (*write_callback)(uint64_t, char *, int32_t));
  int32_t Connect(int32_t id, int32_t max_name_length,
                  int32_t (*read_callback)(uint64_t, char *, int32_t),
                  int32_t (*write_callback)(uint64_t, char *, int32_t));
  void Destroy(int32_t id);
  int32_t Reset(int32_t id);
  int32_t GetRegisterInfoSize(int32_t id) const;
  int32_t GetRegisterInfo(int32_t id, int32_t index, char *name,
                          RenodeCpuRegister *info);
  int32_t ReadRegister(int32_t id, uint32_t reg_id, uint64_t *value);
  int32_t WriteRegister(int32_t id, uint32_t reg_id, uint64_t value);
  uint64_t ReadMemory(int32_t id, uint64_t address, char *buffer,
                      uint64_t length);
  uint64_t WriteMemory(int32_t id, uint64_t address, const char *buffer,
                       uint64_t length);

  uint64_t LoadExecutable(int32_t id, const char *elf_file_name,
                          bool for_symbols_only, int32_t *status);
  int32_t LoadImage(int32_t id, const char *file_name, uint64_t address);
  uint64_t Step(int32_t id, uint64_t num_to_step, int32_t *status);
  int32_t SetConfig(int32_t id, const char *config_names[],
                    const char *config_values[], int32_t size);
  int32_t SetIrqValue(int32_t id, int32_t irq_number, bool irq_value);

  // Accessor.
  RenodeDebugInterface *core_dbg(int32_t id) const {
    auto ptr = core_dbg_instances_.find(id);
    if (ptr != core_dbg_instances_.end()) return ptr->second;
    return nullptr;
  }

 private:
  using RenodeMemoryFcn =
      absl::AnyInvocable<int32_t(uint64_t, char *, int32_t)>;
  // Private constructor.
  RenodeAgent() = default;
  static RenodeAgent *instance_;
  static int32_t count_;
  // Map of renode memory access interfaces used to access devices and memory
  // off the system bus.
  absl::flat_hash_map<int32_t, RenodeMemoryAccess *> renode_memory_access_;
  // Map of debug instances.
  absl::flat_hash_map<int32_t, RenodeDebugInterface *> core_dbg_instances_;
  absl::flat_hash_map<int32_t, int32_t> name_length_map_;
  absl::flat_hash_map<int32_t, uint64_t> memory_bases_;
  absl::flat_hash_map<int32_t, uint64_t> memory_sizes_;
};

}  // namespace renode
}  // namespace util
}  // namespace sim
}  // namespace mpact

#endif  // MPACT_SIM_UTIL_RENODE_RENODE_MPACT_H_
