blob: bb5abdacf1696d9a5931f2fd11930274ce0d2c16 [file]
//
// Copyright (c) 2010-2024 Antmicro
//
// This file is licensed under the MIT License.
// Full license text is available in 'licenses/MIT.txt'.
//
#ifndef RENODE_CFU_H
#define RENODE_CFU_H
#include <stdarg.h>
#include <stdio.h>
#include "buses/cfu.h"
#include "renode.h"
class RenodeAgent;
struct Protocol;
enum CfuStatus
{
CFU_OK = 0,
CFU_FAIL = 1,
CFU_TIMEOUT = 2,
};
extern RenodeAgent *Init(void); //definition has to be provided in sim_main.cpp of cosimulated CFU
extern "C"
{
uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error);
void initialize_native();
void handle_request(Protocol* request);
void reset_peripheral();
}
class NativeCommunicationChannel
{
public:
NativeCommunicationChannel() = default;
void sendSender(const Protocol message);
void log(int logLevel, const char* data);
Protocol* receive();
};
class RenodeAgent
{
public:
RenodeAgent(Cfu *cfu);
virtual void reset();
virtual uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error);
virtual void handleCustomRequestType(Protocol* message);
virtual void log(int level, const char* fmt, ...);
virtual void tick(bool countEnable, uint64_t steps);
Cfu *cfu;
protected:
NativeCommunicationChannel* communicationChannel;
private:
friend void ::handle_request(Protocol* request);
friend void ::initialize_native(void);
friend void ::reset_peripheral(void);
};
#endif