diff options
Diffstat (limited to 'driver_library/include/ethosu.hpp')
-rw-r--r-- | driver_library/include/ethosu.hpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/driver_library/include/ethosu.hpp b/driver_library/include/ethosu.hpp new file mode 100644 index 0000000..3c8f814 --- /dev/null +++ b/driver_library/include/ethosu.hpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 + * + * 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. + */ + +#pragma once + +#include <uapi/ethosu.h> + +#include <memory> +#include <string> + +namespace EthosU +{ + +class Exception : + public std::exception +{ +public: + Exception(const char *msg); + virtual ~Exception() throw(); + virtual const char *what() const throw(); + +private: + std::string msg; +}; + +class Device +{ +public: + Device(const char *device = "/dev/ethosu0"); + virtual ~Device(); + + int ioctl(unsigned long cmd, void *data = nullptr); + +private: + int fd; +}; + +class Buffer +{ +public: + Buffer(Device &device, const size_t capacity); + virtual ~Buffer(); + + size_t capacity() const; + void clear(); + char *data(); + void resize(size_t size, size_t offset = 0); + size_t offset() const; + size_t size() const; + + int getFd() const; + +private: + int fd; + char *dataPtr; + const size_t dataCapacity; +}; + +class Network +{ +public: + Network(Device &device, std::shared_ptr<Buffer> &buffer); + virtual ~Network(); + + int ioctl(unsigned long cmd, void *data = nullptr); + std::shared_ptr<Buffer> getBuffer(); + +private: + int fd; + std::shared_ptr<Buffer> buffer; +}; + +class Inference +{ +public: + Inference(std::shared_ptr<Network> &network, std::shared_ptr<Buffer> &ifm, std::shared_ptr<Buffer> &ofm); + virtual ~Inference(); + + void wait(int timeoutSec = -1); + bool failed(); + int getFd(); + std::shared_ptr<Network> getNetwork(); + std::shared_ptr<Buffer> getIfmBuffer(); + std::shared_ptr<Buffer> getOfmBuffer(); + +private: + int fd; + std::shared_ptr<Network> network; + std::shared_ptr<Buffer> ifmBuffer; + std::shared_ptr<Buffer> ofmBuffer; +}; + +} |