20 #ifndef ESI_RUNTIME_SERVICES_H
21 #define ESI_RUNTIME_SERVICES_H
30 class AcceleratorConnection;
40 virtual std::optional<std::string>
toString()
const {
return std::nullopt; }
47 using Type =
const std::type_info &;
61 std::string implName = {},
68 const std::map<std::string, ChannelPort &> &,
111 static constexpr std::string_view
StdName =
"esi.service.std.mmio";
125 virtual uint64_t
read(uint32_t addr)
const = 0;
127 virtual void write(uint32_t addr, uint64_t data) = 0;
130 const std::map<AppIDPath, RegionDescriptor> &
getRegions()
const {
138 std::string implName = {},
145 virtual ServicePort *
getPort(AppIDPath
id,
const BundleType *type,
146 const std::map<std::string, ChannelPort &> &,
147 AcceleratorConnection &)
const override;
151 std::map<AppIDPath, RegionDescriptor>
regions;
164 virtual uint64_t
read(uint32_t addr)
const;
166 virtual void write(uint32_t addr, uint64_t data);
168 virtual std::optional<std::string>
toString()
const override {
204 operator void *()
const {
return getPtr(); }
218 virtual std::unique_ptr<HostMemRegion>
allocate(std::size_t size,
243 const std::map<std::string, ChannelPort &> &,
258 virtual std::optional<std::string>
toString()
const override {
263 return "function " + resultType->
getID() +
"(" + argType->
getID() +
")";
284 const std::map<std::string, ChannelPort &> &,
291 const std::map<std::string, ChannelPort &> &
channels);
304 virtual std::optional<std::string>
toString()
const override {
309 return "callback " + resultType->
getID() +
"(" + argType->
getID() +
")";
330 std::string implName,
Abstract class representing a connection to an accelerator.
Services provide connections to 'bundles' – collections of named, unidirectional communication channe...
std::map< std::string, ChannelPort & > channels
BundlePort(AppID id, std::map< std::string, ChannelPort & > channels)
Construct a port.
Bundles represent a collection of channels.
const Type * getType() const
Channels are the basic communication primitives.
AcceleratorConnections, Accelerators, and Manifests must all share a context.
A logical chunk of data representing serialized data.
A ChannelPort which reads data from the accelerator.
Root class of the ESI type system.
A ChannelPort which sends data to the accelerator.
A function call which gets attached to a service port.
WriteChannelPort & result
static Callback * get(AcceleratorConnection &acc, AppID id, WriteChannelPort &result, ReadChannelPort &arg)
Callback(AcceleratorConnection &acc, AppID id, const std::map< std::string, ChannelPort & > &channels)
void connect(std::function< MessageData(const MessageData &)> callback, bool quick=false)
Connect a callback to code which will be executed when the accelerator invokes the callback.
virtual std::optional< std::string > toString() const override
AcceleratorConnection & acc
Service for servicing function calls from the accelerator.
CallService(AcceleratorConnection *acc, AppIDPath id, std::string implName, ServiceImplDetails details, HWClientDetails clients)
virtual std::string getServiceSymbol() const override
virtual ServicePort * getPort(AppIDPath id, const BundleType *type, const std::map< std::string, ChannelPort & > &, AcceleratorConnection &) const override
Get specialized port for this service to attach to the given appid path.
A service for which there are no standard services registered.
CustomService(AppIDPath idPath, const ServiceImplDetails &details, const HWClientDetails &clients)
virtual ~CustomService()=default
virtual std::string getServiceSymbol() const override
std::string serviceSymbol
A function call which gets attached to a service port.
std::future< MessageData > call(const MessageData &arg)
virtual std::optional< std::string > toString() const override
static Function * get(AppID id, WriteChannelPort &arg, ReadChannelPort &result)
Function(AppID id, const std::map< std::string, ChannelPort & > &channels)
Service for calling functions.
virtual std::string getServiceSymbol() const override
virtual ServicePort * getPort(AppIDPath id, const BundleType *type, const std::map< std::string, ChannelPort & > &, AcceleratorConnection &) const override
Get specialized port for this service to attach to the given appid path.
FuncService(AcceleratorConnection *acc, AppIDPath id, const std::string &implName, ServiceImplDetails details, HWClientDetails clients)
virtual ~HostMem()=default
virtual std::string getServiceSymbol() const override
virtual std::unique_ptr< HostMemRegion > allocate(std::size_t size, Options opts) const =0
Allocate a region of host memory in accelerator accessible address space.
virtual void start()
In cases where necessary, enable host memory services.
virtual void unmapMemory(void *ptr) const
Unmap memory which was previously mapped with 'mapMemory'.
virtual bool mapMemory(void *ptr, std::size_t size, Options opts) const
Try to make a region of host memory accessible to the accelerator.
Implement the SysInfo API for a standard MMIO protocol.
virtual std::vector< uint8_t > getCompressedManifest() const override
Return the zlib compressed JSON system manifest.
uint32_t getEsiVersion() const override
Get the ESI version number to check version compatibility.
MMIOSysInfo(const MMIO *)
A "slice" of some parent MMIO space.
virtual uint64_t read(uint32_t addr) const
Read a 64-bit value from this region, not the global address space.
MMIORegion(AppID id, MMIO *parent, RegionDescriptor desc)
virtual void write(uint32_t addr, uint64_t data)
Write a 64-bit value to this region, not the global address space.
virtual RegionDescriptor getDescriptor() const
Get the offset (and size) of the region in the parent (usually global) MMIO address space.
virtual std::optional< std::string > toString() const override
virtual uint64_t read(uint32_t addr) const =0
Read a 64-bit value from the global MMIO space.
virtual Service * getChildService(AcceleratorConnection *conn, Service::Type service, AppIDPath id={}, std::string implName={}, ServiceImplDetails details={}, HWClientDetails clients={}) override
If the service is a MMIO service, return a region of the MMIO space which peers into ours.
virtual void write(uint32_t addr, uint64_t data)=0
Write a 64-bit value to the global MMIO space.
std::map< AppIDPath, RegionDescriptor > regions
MMIO base address table.
static constexpr std::string_view StdName
const std::map< AppIDPath, RegionDescriptor > & getRegions() const
Get the regions of MMIO space that this service manages.
virtual ServicePort * getPort(AppIDPath id, const BundleType *type, const std::map< std::string, ChannelPort & > &, AcceleratorConnection &) const override
Get a MMIO region port for a particular region descriptor.
virtual std::string getServiceSymbol() const override
Add a custom interface to a service client at a particular point in the design hierarchy.
virtual ~ServicePort()=default
virtual std::optional< std::string > toString() const
Registry of services which can be instantiated directly by the Accelerator class if the backend doesn...
static Service::Type lookupServiceType(const std::string &)
Resolve a service type from a string.
static Service * createService(AcceleratorConnection *acc, Service::Type svcType, AppIDPath id, std::string implName, ServiceImplDetails details, HWClientDetails clients)
Create a service instance from the given details.
Parent class of all APIs modeled as 'services'.
virtual std::string getServiceSymbol() const =0
const std::type_info & Type
virtual ~Service()=default
virtual Service * getChildService(AcceleratorConnection *conn, Service::Type service, AppIDPath id={}, std::string implName={}, ServiceImplDetails details={}, HWClientDetails clients={})
Create a "child" service of this service.
virtual ServicePort * getPort(AppIDPath id, const BundleType *type, const std::map< std::string, ChannelPort & > &, AcceleratorConnection &) const
Get specialized port for this service to attach to the given appid path.
Information about the Accelerator system.
virtual std::string getJsonManifest() const
Return the JSON-formatted system manifest.
virtual uint32_t getEsiVersion() const =0
Get the ESI version number to check version compatibility.
virtual std::vector< uint8_t > getCompressedManifest() const =0
Return the zlib compressed JSON system manifest.
virtual std::string getServiceSymbol() const override
virtual ~SysInfo()=default
std::map< std::string, std::any > ServiceImplDetails
std::string toHex(uint32_t val)
std::vector< HWClientDetail > HWClientDetails
RAII memory region for host memory.
virtual ~HostMemRegion()=default
virtual void * getPtr() const =0
virtual std::size_t getSize() const =0
Options for allocating host memory.
Describe a region (slice) of MMIO space.