#ifndef __NVME_ARCH_H__
#define __NVME_ARCH_H__
#include <OS.h>
#include <arch_vm.h>
#include <arch_atomic.h>
#define NVME_ARCH_64 __HAIKU_ARCH_64_BIT
#define NVME_MMIO_64BIT NVME_ARCH_64
#define PAGE_SIZE B_PAGE_SIZE
#ifndef asm
#define asm __asm__
#endif
#define nvme_wmb() memory_write_barrier()
typedef uint8 __u8;
typedef uint32 __u32;
typedef uint64 __u64;
static inline __u32
nvme_mmio_read_4(const volatile __u32 *addr)
{
return *addr;
}
static inline void
nvme_mmio_write_4(volatile __u32 *addr, __u32 val)
{
*addr = val;
}
static inline __u64
nvme_mmio_read_8(volatile __u64 *addr)
{
#ifdef NVME_MMIO_64BIT
return *addr;
#else
volatile __u32 *addr32 = (volatile __u32 *)addr;
__u64 val;
val = addr32[0];
val |= (__u64)addr32[1] << 32;
return val;
#endif
}
static inline void
nvme_mmio_write_8(volatile __u64 *addr, __u64 val)
{
#ifdef NVME_MMIO_64BIT
*addr = val;
#else
volatile __u32 *addr32 = (volatile __u32 *)addr;
addr32[0] = (__u32)val;
addr32[1] = (__u32)(val >> 32);
#endif
}
#endif