Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef KERNEL_H
0003 #define KERNEL_H
0004 #include <stdbool.h>
0005 #include <stdlib.h>
0006 #include <stddef.h>
0007 #include <stdio.h>
0008 #include <string.h>
0009 #include <assert.h>
0010 #include <stdarg.h>
0011 
0012 #include <linux/compiler.h>
0013 #include <linux/types.h>
0014 #include <linux/overflow.h>
0015 #include <linux/list.h>
0016 #include <linux/printk.h>
0017 #include <linux/bug.h>
0018 #include <errno.h>
0019 #include <unistd.h>
0020 #include <asm/barrier.h>
0021 
0022 #define CONFIG_SMP
0023 
0024 #define PAGE_SIZE getpagesize()
0025 #define PAGE_MASK (~(PAGE_SIZE-1))
0026 #define PAGE_ALIGN(x) ((x + PAGE_SIZE - 1) & PAGE_MASK)
0027 
0028 /* generic data direction definitions */
0029 #define READ                    0
0030 #define WRITE                   1
0031 
0032 typedef unsigned long long dma_addr_t;
0033 typedef size_t __kernel_size_t;
0034 typedef unsigned int __wsum;
0035 
0036 struct page {
0037     unsigned long long dummy;
0038 };
0039 
0040 /* Physical == Virtual */
0041 #define virt_to_phys(p) ((unsigned long)p)
0042 #define phys_to_virt(a) ((void *)(unsigned long)(a))
0043 /* Page address: Virtual / 4K */
0044 #define page_to_phys(p) ((dma_addr_t)(unsigned long)(p))
0045 #define virt_to_page(p) ((struct page *)((unsigned long)p & PAGE_MASK))
0046 
0047 #define offset_in_page(p) (((unsigned long)p) % PAGE_SIZE)
0048 
0049 #define __printf(a,b) __attribute__((format(printf,a,b)))
0050 
0051 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
0052 
0053 extern void *__kmalloc_fake, *__kfree_ignore_start, *__kfree_ignore_end;
0054 static inline void *kmalloc(size_t s, gfp_t gfp)
0055 {
0056     if (__kmalloc_fake)
0057         return __kmalloc_fake;
0058     return malloc(s);
0059 }
0060 static inline void *kmalloc_array(unsigned n, size_t s, gfp_t gfp)
0061 {
0062     return kmalloc(n * s, gfp);
0063 }
0064 
0065 static inline void *kzalloc(size_t s, gfp_t gfp)
0066 {
0067     void *p = kmalloc(s, gfp);
0068 
0069     memset(p, 0, s);
0070     return p;
0071 }
0072 
0073 static inline void *alloc_pages_exact(size_t s, gfp_t gfp)
0074 {
0075     return kmalloc(s, gfp);
0076 }
0077 
0078 static inline void kfree(void *p)
0079 {
0080     if (p >= __kfree_ignore_start && p < __kfree_ignore_end)
0081         return;
0082     free(p);
0083 }
0084 
0085 static inline void free_pages_exact(void *p, size_t s)
0086 {
0087     kfree(p);
0088 }
0089 
0090 static inline void *krealloc(void *p, size_t s, gfp_t gfp)
0091 {
0092     return realloc(p, s);
0093 }
0094 
0095 
0096 static inline unsigned long __get_free_page(gfp_t gfp)
0097 {
0098     void *p;
0099 
0100     posix_memalign(&p, PAGE_SIZE, PAGE_SIZE);
0101     return (unsigned long)p;
0102 }
0103 
0104 static inline void free_page(unsigned long addr)
0105 {
0106     free((void *)addr);
0107 }
0108 
0109 #define container_of(ptr, type, member) ({          \
0110     const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
0111     (type *)( (char *)__mptr - offsetof(type,member) );})
0112 
0113 # ifndef likely
0114 #  define likely(x) (__builtin_expect(!!(x), 1))
0115 # endif
0116 # ifndef unlikely
0117 #  define unlikely(x)   (__builtin_expect(!!(x), 0))
0118 # endif
0119 
0120 static inline void *krealloc_array(void *p, size_t new_n, size_t new_size, gfp_t gfp)
0121 {
0122     size_t bytes;
0123 
0124     if (unlikely(check_mul_overflow(new_n, new_size, &bytes)))
0125         return NULL;
0126 
0127     return krealloc(p, bytes, gfp);
0128 }
0129 
0130 #define pr_err(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
0131 #ifdef DEBUG
0132 #define pr_debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
0133 #else
0134 #define pr_debug(format, ...) do {} while (0)
0135 #endif
0136 #define dev_err(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__)
0137 #define dev_warn(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__)
0138 #define dev_warn_once(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__)
0139 
0140 #define min(x, y) ({                \
0141     typeof(x) _min1 = (x);          \
0142     typeof(y) _min2 = (y);          \
0143     (void) (&_min1 == &_min2);      \
0144     _min1 < _min2 ? _min1 : _min2; })
0145 
0146 #endif /* KERNEL_H */