blob: 932779914946377ed8bfb48a8e7afe799cb71f46 [file] [log] [blame]
#pragma once
/* NOTE: IIRC, wak@ is working on exposing some of this in stdplus, so we can
* transition when that's ready.
*
* Copied some from gpioplus to enable unit-testing of lpc nuvoton and later
* other pieces.
*/
#include <sys/mman.h>
#include <cinttypes>
#include <cstddef>
namespace blobs
{
namespace flash
{
namespace internal
{
/**
* @class Sys
* @brief Overridable direct syscall interface
*/
class Sys
{
public:
virtual ~Sys() = default;
virtual int open(const char* pathname, int flags) const = 0;
virtual int close(int fd) const = 0;
virtual void* mmap(void* addr, size_t length, int prot, int flags, int fd,
off_t offset) const = 0;
virtual int munmap(void* addr, size_t length) const = 0;
virtual int getpagesize() const = 0;
virtual int ioctl(int fd, unsigned long request, void* param) const = 0;
};
/**
* @class SysImpl
* @brief syscall concrete implementation
* @details Passes through all calls to the normal linux syscalls
*/
class SysImpl : public Sys
{
public:
int open(const char* pathname, int flags) const override;
int close(int fd) const override;
void* mmap(void* addr, size_t length, int prot, int flags, int fd,
off_t offset) const override;
int munmap(void* addr, size_t length) const override;
int getpagesize() const override;
int ioctl(int fd, unsigned long request, void* param) const override;
};
/** @brief Default instantiation of sys */
extern SysImpl sys_impl;
} // namespace internal
} // namespace flash
} // namespace blobs