1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 #ifndef RENODE_CFU_H 8 #define RENODE_CFU_H 9 #include <stdarg.h> 10 #include <stdio.h> 11 #include "buses/cfu.h" 12 #include "renode.h" 13 14 class RenodeAgent; 15 struct Protocol; 16 17 enum CfuStatus 18 { 19 CFU_OK = 0, 20 CFU_FAIL = 1, 21 CFU_TIMEOUT = 2, 22 }; 23 24 extern RenodeAgent *Init(void); //definition has to be provided in sim_main.cpp of cosimulated CFU 25 26 extern "C" 27 { 28 uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error); 29 void initialize_native(); 30 void handle_request(Protocol* request); 31 void reset_peripheral(); 32 } 33 34 class NativeCommunicationChannel 35 { 36 public: 37 NativeCommunicationChannel() = default; 38 void sendSender(const Protocol message); 39 void log(int logLevel, const char* data); 40 Protocol* receive(); 41 }; 42 43 class RenodeAgent 44 { 45 public: 46 RenodeAgent(Cfu *cfu); 47 virtual void reset(); 48 virtual uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error); 49 virtual void handleCustomRequestType(Protocol* message); 50 virtual void log(int level, const char* fmt, ...); 51 virtual void tick(bool countEnable, uint64_t steps); 52 53 Cfu *cfu; 54 55 protected: 56 NativeCommunicationChannel* communicationChannel; 57 58 private: 59 friend void ::handle_request(Protocol* request); 60 friend void ::initialize_native(void); 61 friend void ::reset_peripheral(void); 62 }; 63 64 #endif 65