forked from pop-os/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tools/virtio: separate headers more.
This makes them a bit more like the kernel headers, so we can include more real kernel headers in our tests. In addition this means that we don't break tools/virtio with the next patch. Signed-off-by: Rusty Russell <[email protected]>
- Loading branch information
1 parent
a9a0fef
commit 61d0b5a
Showing
21 changed files
with
450 additions
and
147 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#if defined(__i386__) || defined(__x86_64__) | ||
#define barrier() asm volatile("" ::: "memory") | ||
#define mb() __sync_synchronize() | ||
|
||
#define smp_mb() mb() | ||
# define smp_rmb() barrier() | ||
# define smp_wmb() barrier() | ||
/* Weak barriers should be used. If not - it's a bug */ | ||
# define rmb() abort() | ||
# define wmb() abort() | ||
#else | ||
#error Please fill in barrier macros | ||
#endif | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef BUG_H | ||
#define BUG_H | ||
|
||
#define BUG_ON(__BUG_ON_cond) assert(!(__BUG_ON_cond)) | ||
|
||
#define BUILD_BUG_ON(x) | ||
|
||
#define BUG() abort() | ||
|
||
#endif /* BUG_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#ifndef ERR_H | ||
#define ERR_H | ||
#define MAX_ERRNO 4095 | ||
|
||
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) | ||
|
||
static inline void * __must_check ERR_PTR(long error) | ||
{ | ||
return (void *) error; | ||
} | ||
|
||
static inline long __must_check PTR_ERR(const void *ptr) | ||
{ | ||
return (long) ptr; | ||
} | ||
|
||
static inline long __must_check IS_ERR(const void *ptr) | ||
{ | ||
return IS_ERR_VALUE((unsigned long)ptr); | ||
} | ||
|
||
static inline long __must_check IS_ERR_OR_NULL(const void *ptr) | ||
{ | ||
return !ptr || IS_ERR_VALUE((unsigned long)ptr); | ||
} | ||
#endif /* ERR_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#define EXPORT_SYMBOL(sym) | ||
#define EXPORT_SYMBOL_GPL(sym) | ||
#define EXPORT_SYMBOL_GPL_FUTURE(sym) | ||
#define EXPORT_UNUSED_SYMBOL(sym) | ||
#define EXPORT_UNUSED_SYMBOL_GPL(sym) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
#include "../../../include/linux/irqreturn.h" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
#ifndef KERNEL_H | ||
#define KERNEL_H | ||
#include <stdbool.h> | ||
#include <stdlib.h> | ||
#include <stddef.h> | ||
#include <stdio.h> | ||
#include <string.h> | ||
#include <assert.h> | ||
#include <stdarg.h> | ||
|
||
#include <linux/types.h> | ||
#include <linux/printk.h> | ||
#include <linux/bug.h> | ||
#include <errno.h> | ||
#include <unistd.h> | ||
#include <asm/barrier.h> | ||
|
||
#define CONFIG_SMP | ||
|
||
#define PAGE_SIZE getpagesize() | ||
#define PAGE_MASK (~(PAGE_SIZE-1)) | ||
|
||
typedef unsigned long long dma_addr_t; | ||
typedef size_t __kernel_size_t; | ||
|
||
struct page { | ||
unsigned long long dummy; | ||
}; | ||
|
||
/* Physical == Virtual */ | ||
#define virt_to_phys(p) ((unsigned long)p) | ||
#define phys_to_virt(a) ((void *)(unsigned long)(a)) | ||
/* Page address: Virtual / 4K */ | ||
#define page_to_phys(p) ((dma_addr_t)(unsigned long)(p)) | ||
#define virt_to_page(p) ((struct page *)((unsigned long)p & PAGE_MASK)) | ||
|
||
#define offset_in_page(p) (((unsigned long)p) % PAGE_SIZE) | ||
|
||
#define __printf(a,b) __attribute__((format(printf,a,b))) | ||
|
||
typedef enum { | ||
GFP_KERNEL, | ||
GFP_ATOMIC, | ||
__GFP_HIGHMEM, | ||
__GFP_HIGH | ||
} gfp_t; | ||
|
||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) | ||
|
||
extern void *__kmalloc_fake, *__kfree_ignore_start, *__kfree_ignore_end; | ||
static inline void *kmalloc(size_t s, gfp_t gfp) | ||
{ | ||
if (__kmalloc_fake) | ||
return __kmalloc_fake; | ||
return malloc(s); | ||
} | ||
|
||
static inline void kfree(void *p) | ||
{ | ||
if (p >= __kfree_ignore_start && p < __kfree_ignore_end) | ||
return; | ||
free(p); | ||
} | ||
|
||
static inline void *krealloc(void *p, size_t s, gfp_t gfp) | ||
{ | ||
return realloc(p, s); | ||
} | ||
|
||
|
||
static inline unsigned long __get_free_page(gfp_t gfp) | ||
{ | ||
void *p; | ||
|
||
posix_memalign(&p, PAGE_SIZE, PAGE_SIZE); | ||
return (unsigned long)p; | ||
} | ||
|
||
static inline void free_page(unsigned long addr) | ||
{ | ||
free((void *)addr); | ||
} | ||
|
||
#define container_of(ptr, type, member) ({ \ | ||
const typeof( ((type *)0)->member ) *__mptr = (ptr); \ | ||
(type *)( (char *)__mptr - offsetof(type,member) );}) | ||
|
||
#define uninitialized_var(x) x = x | ||
|
||
# ifndef likely | ||
# define likely(x) (__builtin_expect(!!(x), 1)) | ||
# endif | ||
# ifndef unlikely | ||
# define unlikely(x) (__builtin_expect(!!(x), 0)) | ||
# endif | ||
|
||
#define pr_err(format, ...) fprintf (stderr, format, ## __VA_ARGS__) | ||
#ifdef DEBUG | ||
#define pr_debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) | ||
#else | ||
#define pr_debug(format, ...) do {} while (0) | ||
#endif | ||
#define dev_err(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__) | ||
#define dev_warn(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__) | ||
|
||
#define min(x, y) ({ \ | ||
typeof(x) _min1 = (x); \ | ||
typeof(y) _min2 = (y); \ | ||
(void) (&_min1 == &_min2); \ | ||
_min1 < _min2 ? _min1 : _min2; }) | ||
|
||
#endif /* KERNEL_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
#include <linux/export.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "../../../include/linux/kern_levels.h" | ||
|
||
#define printk printf | ||
#define vprintk vprintf |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) int name = 0 | ||
|
||
#define __ratelimit(x) (*(x)) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
#ifndef SCATTERLIST_H | ||
#define SCATTERLIST_H | ||
#include <linux/kernel.h> | ||
|
||
struct scatterlist { | ||
unsigned long page_link; | ||
unsigned int offset; | ||
unsigned int length; | ||
dma_addr_t dma_address; | ||
}; | ||
|
||
/* Scatterlist helpers, stolen from linux/scatterlist.h */ | ||
#define sg_is_chain(sg) ((sg)->page_link & 0x01) | ||
#define sg_is_last(sg) ((sg)->page_link & 0x02) | ||
#define sg_chain_ptr(sg) \ | ||
((struct scatterlist *) ((sg)->page_link & ~0x03)) | ||
|
||
/** | ||
* sg_assign_page - Assign a given page to an SG entry | ||
* @sg: SG entry | ||
* @page: The page | ||
* | ||
* Description: | ||
* Assign page to sg entry. Also see sg_set_page(), the most commonly used | ||
* variant. | ||
* | ||
**/ | ||
static inline void sg_assign_page(struct scatterlist *sg, struct page *page) | ||
{ | ||
unsigned long page_link = sg->page_link & 0x3; | ||
|
||
/* | ||
* In order for the low bit stealing approach to work, pages | ||
* must be aligned at a 32-bit boundary as a minimum. | ||
*/ | ||
BUG_ON((unsigned long) page & 0x03); | ||
#ifdef CONFIG_DEBUG_SG | ||
BUG_ON(sg->sg_magic != SG_MAGIC); | ||
BUG_ON(sg_is_chain(sg)); | ||
#endif | ||
sg->page_link = page_link | (unsigned long) page; | ||
} | ||
|
||
/** | ||
* sg_set_page - Set sg entry to point at given page | ||
* @sg: SG entry | ||
* @page: The page | ||
* @len: Length of data | ||
* @offset: Offset into page | ||
* | ||
* Description: | ||
* Use this function to set an sg entry pointing at a page, never assign | ||
* the page directly. We encode sg table information in the lower bits | ||
* of the page pointer. See sg_page() for looking up the page belonging | ||
* to an sg entry. | ||
* | ||
**/ | ||
static inline void sg_set_page(struct scatterlist *sg, struct page *page, | ||
unsigned int len, unsigned int offset) | ||
{ | ||
sg_assign_page(sg, page); | ||
sg->offset = offset; | ||
sg->length = len; | ||
} | ||
|
||
static inline struct page *sg_page(struct scatterlist *sg) | ||
{ | ||
#ifdef CONFIG_DEBUG_SG | ||
BUG_ON(sg->sg_magic != SG_MAGIC); | ||
BUG_ON(sg_is_chain(sg)); | ||
#endif | ||
return (struct page *)((sg)->page_link & ~0x3); | ||
} | ||
|
||
/* | ||
* Loop over each sg element, following the pointer to a new list if necessary | ||
*/ | ||
#define for_each_sg(sglist, sg, nr, __i) \ | ||
for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg)) | ||
|
||
/** | ||
* sg_chain - Chain two sglists together | ||
* @prv: First scatterlist | ||
* @prv_nents: Number of entries in prv | ||
* @sgl: Second scatterlist | ||
* | ||
* Description: | ||
* Links @prv@ and @sgl@ together, to form a longer scatterlist. | ||
* | ||
**/ | ||
static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, | ||
struct scatterlist *sgl) | ||
{ | ||
/* | ||
* offset and length are unused for chain entry. Clear them. | ||
*/ | ||
prv[prv_nents - 1].offset = 0; | ||
prv[prv_nents - 1].length = 0; | ||
|
||
/* | ||
* Set lowest bit to indicate a link pointer, and make sure to clear | ||
* the termination bit if it happens to be set. | ||
*/ | ||
prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02; | ||
} | ||
|
||
/** | ||
* sg_mark_end - Mark the end of the scatterlist | ||
* @sg: SG entryScatterlist | ||
* | ||
* Description: | ||
* Marks the passed in sg entry as the termination point for the sg | ||
* table. A call to sg_next() on this entry will return NULL. | ||
* | ||
**/ | ||
static inline void sg_mark_end(struct scatterlist *sg) | ||
{ | ||
#ifdef CONFIG_DEBUG_SG | ||
BUG_ON(sg->sg_magic != SG_MAGIC); | ||
#endif | ||
/* | ||
* Set termination bit, clear potential chain bit | ||
*/ | ||
sg->page_link |= 0x02; | ||
sg->page_link &= ~0x01; | ||
} | ||
|
||
static inline struct scatterlist *sg_next(struct scatterlist *sg) | ||
{ | ||
#ifdef CONFIG_DEBUG_SG | ||
BUG_ON(sg->sg_magic != SG_MAGIC); | ||
#endif | ||
if (sg_is_last(sg)) | ||
return NULL; | ||
|
||
sg++; | ||
if (unlikely(sg_is_chain(sg))) | ||
sg = sg_chain_ptr(sg); | ||
|
||
return sg; | ||
} | ||
|
||
static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents) | ||
{ | ||
memset(sgl, 0, sizeof(*sgl) * nents); | ||
#ifdef CONFIG_DEBUG_SG | ||
{ | ||
unsigned int i; | ||
for (i = 0; i < nents; i++) | ||
sgl[i].sg_magic = SG_MAGIC; | ||
} | ||
#endif | ||
sg_mark_end(&sgl[nents - 1]); | ||
} | ||
|
||
static inline dma_addr_t sg_phys(struct scatterlist *sg) | ||
{ | ||
return page_to_phys(sg_page(sg)) + sg->offset; | ||
} | ||
|
||
static inline void sg_set_buf(struct scatterlist *sg, const void *buf, | ||
unsigned int buflen) | ||
{ | ||
sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); | ||
} | ||
|
||
static inline void sg_init_one(struct scatterlist *sg, | ||
const void *buf, unsigned int buflen) | ||
{ | ||
sg_init_table(sg, 1); | ||
sg_set_buf(sg, buf, buflen); | ||
} | ||
#endif /* SCATTERLIST_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#ifndef TYPES_H | ||
#define TYPES_H | ||
#include <stdint.h> | ||
|
||
#define __force | ||
#define __user | ||
#define __must_check | ||
#define __cold | ||
|
||
typedef uint64_t u64; | ||
typedef int64_t s64; | ||
typedef uint32_t u32; | ||
typedef int32_t s32; | ||
typedef uint16_t u16; | ||
typedef int16_t s16; | ||
typedef uint8_t u8; | ||
typedef int8_t s8; | ||
|
||
typedef uint64_t __u64; | ||
typedef int64_t __s64; | ||
typedef uint32_t __u32; | ||
typedef int32_t __s32; | ||
typedef uint16_t __u16; | ||
typedef int16_t __s16; | ||
typedef uint8_t __u8; | ||
typedef int8_t __s8; | ||
|
||
#endif /* TYPES_H */ |
Oops, something went wrong.