Move uninitialized_var() to compiler.h
[akaros.git] / kern / drivers / net / udrvr / compat.h
1 /*
2  * Copyright (c) 2016 Google Inc.
3  * Author: Kanoj Sarcar <kanoj@google.com>
4  * See LICENSE for details.
5  *
6  * A majority of macros in this file should migrate to compat_todo.h,
7  * which should hold source copied from Linux. Some part of macros
8  * will also move into linux_compat.h to translate from Linux to
9  * Akaros. A tiny portion should remain here, since those are stub
10  * or hack definitions whose scope should be restricted only to mlx4u/
11  * and udrvr/
12  */
13 #include <linux_compat.h>
14
15 #include <arch/uaccess.h>       /* copy_from_user(), copy_to_user() */
16
17 #define access_ok(type, addr, size)     1
18
19 /*
20  * Device file /dev/XXXX has a dentry and inode that is associated
21  * with the "struct file" for each user process opening the device file.
22  * Thus, we can stash private data into file->f_dentry->d_fs_info or
23  * into file->f_dentry->d_inode->i_fs_info.
24  */
25 #define set_fs_info(_p_, _v_)           \
26         do { (_p_)->f_dentry->d_fs_info = (_v_); } while(0)
27 #define get_fs_info(_p_)        ((_p_)->f_dentry->d_fs_info)
28 #define private_data                    f_privdata
29
30 typedef uint8_t u8;
31 typedef uint8_t __u8;
32 typedef uint16_t u16;
33 typedef uint16_t __u16;
34 typedef uint32_t u32;
35 typedef uint32_t __u32;
36 typedef uint64_t u64;
37 typedef uint64_t __u64;
38
39 typedef int32_t __s32;
40
41 typedef off64_t loff_t;
42
43 typedef atomic_t                        atomic64_t;
44
45 #define atomic64_set                    atomic_set
46 #define atomic64_read                   atomic_read
47 #define atomic_dec_and_test(e)          atomic_sub_and_test(e, 1)
48 #define atomic_inc_not_zero(p)          atomic_add_not_zero(p, 1)
49
50 #define mutex_init(a)                   qlock_init(a)
51 #define mutex_lock(a)                   qlock(a)
52 #define mutex_unlock(a)                 qunlock(a)
53
54 extern unsigned long pgprot_noncached(int vmprot);
55 extern unsigned long pgprot_writecombine(int vmprot);
56
57 #define is_vm_hugetlb_page(vma) 0
58
59 extern int map_upage_at_addr(struct proc *p, physaddr_t paddr, uintptr_t addr,
60                              int pteprot, int dolock);
61 extern int get_user_page(struct proc *p, unsigned long uvastart, int write,
62                          int force, struct page **plist);
63 extern void put_page(struct page *pagep);
64 extern void set_page_dirty_lock(struct page *pagep);
65
66 #define io_remap_pfn_range(vma, vmstart, pfn, rangesz, pteprot) \
67         (rangesz == PAGE_SIZE ? map_upage_at_addr(current,      \
68         ((pfn) << PAGE_SHIFT), vmstart, pteprot, 1) : -1)
69
70 #define get_user_pages(task, mm, uvastart, numpages, write, force,      \
71         plist, vlist)                                                   \
72                 get_user_page(task, uvastart, write, force, plist)
73
74 /* The foll is only true for mlx4/ code */
75 #define read_lock(p)
76 #define read_unlock(p)
77
78 #define GFP_KERNEL                      MEM_WAIT
79 #define GFP_ATOMIC                      0
80 #define GFP_NOIO                        MEM_WAIT
81 #define GFP_NOWAIT                      0
82
83 #define __get_free_page(f)              kpage_alloc_addr()
84
85 static inline void free_page(unsigned long addr)
86 {
87         if (addr != 0)
88                 kpages_free((void*)addr, PGSIZE);
89 }
90
91 #define get_zeroed_page(f)              kpage_zalloc_addr()
92
93 #define kzalloc(SZ, FL)                 kzmalloc(SZ, FL)
94 #define kcalloc(CNT, SZ, FL)            kzmalloc((CNT) * (SZ), FL)
95
96 #define roundup_pow_of_two(E)           ROUNDUPPWR2(E)
97 #define roundup(VAL, UP)                ROUNDUP(VAL, UP)
98 #define min(A0, A1)                     MIN(A0, A1)
99 #define max(A0, A1)                     MAX(A0, A1)
100
101 #define LIST_HEAD(l)                    LINUX_LIST_HEAD(l)
102
103 /*
104  * Careful: these will replace "struct mutex" to "struct semaphore" but
105  * also replace ptr->mutex to ptr->semaphore aka structure field rename.
106  */
107 #define mutex           semaphore
108 #define rw_semaphore    semaphore
109
110 /* From include/linux/netdevice.h */
111 #define dev_hold(p)
112 #define dev_put(p)
113
114 #define pr_info_once    printk
115
116 /* From Linux include/linux/scatterlist.h: move to compat_todo.h */
117 struct sg_table {
118         struct scatterlist *sgl;
119         unsigned int nents;
120         unsigned int orig_nents;
121 };
122
123 extern int sg_alloc_table(struct sg_table *ptr, unsigned int npages, gfp_t mask);
124 void sg_free_table(struct sg_table *ptr);
125
126
127 /* From include/linux/compiler.h: move to compat_todo.h */
128 #define __acquires(x)
129 #define __releases(x)
130 #define __acquire(x)                    (void)0
131 #define __release(x)                    (void)0
132
133 /* From include/asm-generic/bug.h: move to compat_todo.h */
134 #define WARN_ON(condition) ({                                           \
135         int __ret_warn_on = !!(condition);                              \
136         if (unlikely(__ret_warn_on))                                    \
137                 printk("BUG: %s:%d/%s()!\n", __FILE__, __LINE__, __func__);\
138         unlikely(__ret_warn_on);                                        \
139 })
140
141 #define BUG_ON(condition)       \
142         do {                                                            \
143                 if (unlikely(condition))                                \
144                         panic("BADBUG");                                \
145         } while(0)
146
147 #define BUG()           BUG_ON(1)
148
149 /* Akaros cpu_to_be32() does not handle constants */
150 #undef cpu_to_be32
151 #define ___constant_swab32(x) ((__u32)(                                 \
152         (((__u32)(x) & (__u32)0x000000ffUL) << 24) |                    \
153         (((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |                    \
154         (((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |                    \
155         (((__u32)(x) & (__u32)0xff000000UL) >> 24)))
156
157 #define cpu_to_be32(x)                                                  \
158         (__builtin_constant_p((__u32)(x)) ?                             \
159         ___constant_swab32(x) :                                         \
160         byte_swap32(x))
161
162 #define MAXITEMS        128
163
164 struct idr {
165         spinlock_t      lock;
166         void            *values[MAXITEMS];
167 };
168
169 #define idr_destroy(p)
170 #define idr_preload(f)
171 #define idr_preload_end()
172
173 #define DEFINE_IDR(name)                        \
174                 struct idr name = { .lock = SPINLOCK_INITIALIZER }
175
176 void idr_remove(struct idr *idp, int id);
177 void *idr_find(struct idr *idr, int id);
178 int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask);
179
180 struct net_device {
181         unsigned char dev_addr[MAX_ADDR_LEN];
182 };
183
184 /* Conflicting definitions in compat_todo.h */
185 #define netif_carrier_ok(p)     1
186 #define vm_area_struct          vm_region
187
188 #define vm_start                vm_base
189 #define vm_pgoff                vm_foff >> PAGE_SHIFT
190
191 #undef __init
192 #undef __exit
193 #define __init  __attribute__((used))
194 #define __exit  __attribute__((used))
195
196 struct cdev {
197 };
198
199 struct kobject {
200 };
201
202 typedef struct  wait_queue_head {
203 } wait_queue_head_t;
204
205 struct lock_class_key {
206 };
207
208 struct attribute {
209 };
210
211 struct ib_ud_header {
212 };
213
214 extern void sysfs_init(void);
215 extern void sysfs_create(int devnum, const struct file_operations *verb_fops,
216                          void *ptr);
217
218 extern ssize_t check_old_abi(struct file *filp, const char __user *buf,
219                              size_t count);