The endian/mmio helpers do not belong in types.h.
Since we are already using ccan and have ccan/endian available, just
include that where needed. The implementation is 100% equivalent, even
with sparse annotations.
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
CFLAGS ?= -g -O2
-override CFLAGS += -Wall -D_GNU_SOURCE -I ../src -L ../src
+override CFLAGS += -Wall -D_GNU_SOURCE -I ../src -L ../src -I../ccan
include ../Makefile.quiet
#include <errno.h>
#include <libnvme.h>
+#include <ccan/endian/endian.h>
+
static void print_discover_log(struct nvmf_discovery_log *log)
{
int i, numrec = le64_to_cpu(log->numrec);
#
executable(
'telemetry-listen',
- ['telemetry-listen.c'],
+ ['telemetry-listen.c', ccan_config_h],
link_with: libnvme,
include_directories: incdir)
executable(
'discover-loop',
- ['discover-loop.c'],
+ ['discover-loop.c', ccan_config_h],
link_with: libnvme,
include_directories: incdir)
#include <time.h>
#include <libnvme.h>
+#include <ccan/endian/endian.h>
+
struct events {
nvme_ctrl_t c;
int uevent_fd;
#include <netdb.h>
#include <net/if.h>
+#include <ccan/endian/endian.h>
#include <ccan/list/list.h>
#include <ccan/array_size/array_size.h>
#include <sys/stat.h>
#include <ccan/build_assert/build_assert.h>
+#include <ccan/endian/endian.h>
#include "ioctl.h"
#include "util.h"
#include <fcntl.h>
#include <unistd.h>
+#include <ccan/endian/endian.h>
+
#include "linux.h"
#include "tree.h"
#include "log.h"
#include <arpa/inet.h>
#include <netdb.h>
+#include <ccan/endian/endian.h>
#include <ccan/list/list.h>
+
#include "ioctl.h"
#include "linux.h"
#include "filters.h"
#ifndef _LIBNVME_TYPES_H
#define _LIBNVME_TYPES_H
-#include <endian.h>
#include <stdbool.h>
#include <stdint.h>
#include <linux/types.h>
-#ifdef __CHECKER__
-#define __force __attribute__((force))
-#else
-#define __force
-#endif
-
/**
* NVME_GET() - extract field from complex value
* @value: The original value of a complex field
#define NVME_SET(value, name) \
(((value) & NVME_##name##_MASK) << NVME_##name##_SHIFT)
-/**
- * cpu_to_le16() -
- * @x: 16-bit CPU value to turn to little endian.
- */
-static inline __le16 cpu_to_le16(uint16_t x)
-{
- return (__force __le16)htole16(x);
-}
-
-/**
- * cpu_to_le32() -
- * @x: 32-bit CPU value to turn little endian.
- */
-static inline __le32 cpu_to_le32(uint32_t x)
-{
- return (__force __le32)htole32(x);
-}
-
-/**
- * cpu_to_le64() -
- * @x: 64-bit CPU value to turn little endian.
- */
-static inline __le64 cpu_to_le64(uint64_t x)
-{
- return (__force __le64)htole64(x);
-}
-
-/**
- * le16_to_cpu() -
- * @x: 16-bit little endian value to turn to CPU.
- */
-static inline uint16_t le16_to_cpu(__le16 x)
-{
- return le16toh((__force __u16)x);
-}
-
-/**
- * le32_to_cpu() -
- * @x: 32-bit little endian value to turn to CPU.
- */
-static inline uint32_t le32_to_cpu(__le32 x)
-{
- return le32toh((__force __u32)x);
-}
-
-/**
- * le64_to_cpu() -
- * @x: 64-bit little endian value to turn to CPU.
- */
-static inline uint64_t le64_to_cpu(__le64 x)
-{
- return le64toh((__force __u64)x);
-}
-
/**
* enum nvme_constants - A place to stash various constant nvme values
* @NVME_NSID_ALL: A broadcast value that is used to specify all
}
}
-static inline uint32_t nvme_mmio_read32(volatile void *addr)
-{
- uint32_t *p = (__le32 *)addr;
-
- return le32_to_cpu(*p);
-}
-
-static inline uint64_t nvme_mmio_read64(volatile void *addr)
-{
- volatile __u32 *p = (__u32 *)addr;
- uint32_t low, high;
-
- low = nvme_mmio_read32(p);
- high = nvme_mmio_read32(p + 1);
-
- return low + ((uint64_t)high << 32);
-}
-
enum nvme_cap {
NVME_CAP_MQES_SHIFT = 0,
NVME_CAP_CQR_SHIFT = 16,
#include <sys/types.h>
+#include <ccan/endian/endian.h>
+
#include "util.h"
static inline __u8 nvme_generic_status_to_errno(__u16 status)
CFLAGS ?= -g -O2
-override CFLAGS += -Wall -D_GNU_SOURCE -L../src/ -I../src/
+override CFLAGS += -Wall -D_GNU_SOURCE -L../src/ -I../src/ -I../ccan
include ../Makefile.quiet
#
main = executable(
'main-test',
- ['test.c'],
+ ['test.c', ccan_config_h],
dependencies: libuuid,
link_with: libnvme,
include_directories: incdir
register = executable(
'test-register',
- ['register.c'],
+ ['register.c', ccan_config_h],
link_with: libnvme,
include_directories: incdir
)
zns = executable(
'test-zns',
- ['zns.c'],
+ ['zns.c', ccan_config_h],
link_with: libnvme,
include_directories: incdir
)
#include <sys/mman.h>
+#include <ccan/endian/endian.h>
+
+static inline uint32_t nvme_mmio_read32(volatile void *addr)
+{
+ uint32_t *p = (__le32 *)addr;
+
+ return le32_to_cpu(*p);
+}
+
+static inline uint64_t nvme_mmio_read64(volatile void *addr)
+{
+ volatile __u32 *p = (__u32 *)addr;
+ uint32_t low, high;
+
+ low = nvme_mmio_read32(p);
+ high = nvme_mmio_read32(p + 1);
+
+ return low + ((uint64_t)high << 32);
+}
+
void nvme_print_registers(void *regs)
{
__u64 cap = nvme_mmio_read64(regs + NVME_REG_CAP);
#endif
#include <libnvme.h>
+#include <ccan/endian/endian.h>
+
static char *nqn_match;
static bool nvme_match_subsysnqn_filter(nvme_subsystem_t s)
#include <libnvme.h>
#include <inttypes.h>
+#include <ccan/endian/endian.h>
+
static void show_zns_properties(nvme_ns_t n)
{
struct nvme_zns_id_ns zns_ns;