diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:24:33 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:24:33 +0000 |
commit | 7a19c99f661602b67db95fd1d8aca5fe3a387441 (patch) | |
tree | 215ff04ec522779fa83acf394d296c2356c6b382 /lib/types.h | |
parent | Initial commit. (diff) | |
download | pciutils-80b48659d5b3bdd36c7b3c9d0c0331ff0d08e44f.tar.xz pciutils-80b48659d5b3bdd36c7b3c9d0c0331ff0d08e44f.zip |
Adding upstream version 1:3.9.0.upstream/1%3.9.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | lib/types.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/types.h b/lib/types.h new file mode 100644 index 0000000..ab53f7c --- /dev/null +++ b/lib/types.h @@ -0,0 +1,83 @@ +/* + * The PCI Library -- Types and Format Strings + * + * Copyright (c) 1997--2022 Martin Mares <mj@ucw.cz> + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include <sys/types.h> + +#ifndef PCI_HAVE_Uxx_TYPES + +#ifdef PCI_OS_WINDOWS +/* On Windows compilers, use <windows.h> */ +#include <windows.h> +typedef BYTE u8; +typedef WORD u16; +typedef DWORD u32; +typedef unsigned __int64 u64; +#define PCI_U64_FMT_X "I64x" +#define PCI_U64_FMT_U "I64u" + +#elif defined(PCI_HAVE_STDINT_H) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +/* Use standard types in C99 and newer */ +#include <stdint.h> +#include <inttypes.h> +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +#define PCI_U64_FMT_X PRIx64 +#define PCI_U64_FMT_U PRIu64 + +#else +/* Hope for POSIX types from <sys/types.h> */ +typedef u_int8_t u8; +typedef u_int16_t u16; +typedef u_int32_t u32; + +/* u64 will be unsigned (long) long */ +#include <limits.h> +#if ULONG_MAX > 0xffffffff +typedef unsigned long u64; +#define PCI_U64_FMT_X "lx" +#define PCI_U64_FMT_U "lu" +#else +typedef unsigned long long u64; +#define PCI_U64_FMT_X "llx" +#define PCI_U64_FMT_U "llu" +#endif + +#endif + +#endif /* PCI_HAVE_Uxx_TYPES */ + +#ifdef PCI_HAVE_64BIT_ADDRESS +typedef u64 pciaddr_t; +#define PCIADDR_T_FMT "%08" PCI_U64_FMT_X +#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT_X +#else +typedef u32 pciaddr_t; +#define PCIADDR_T_FMT "%08x" +#define PCIADDR_PORT_FMT "%04x" +#endif + +#ifdef PCI_ARCH_SPARC64 +/* On sparc64 Linux the kernel reports remapped port addresses and IRQ numbers */ +#undef PCIADDR_PORT_FMT +#define PCIADDR_PORT_FMT PCIADDR_T_FMT +#define PCIIRQ_FMT "%08x" +#else +#define PCIIRQ_FMT "%d" +#endif + +#if defined(__GNUC__) && __GNUC__ > 2 +#define PCI_PRINTF(x,y) __attribute__((format(printf, x, y))) +#define PCI_NONRET __attribute((noreturn)) +#define PCI_PACKED __attribute((packed)) +#else +#define PCI_PRINTF(x,y) +#define PCI_NONRET +#define PCI_PACKED +#endif |