compat: add kstrtou8_from_user
[~tnikolova/compat/.git] / include / linux / compat-3.0.h
1 #ifndef LINUX_3_0_COMPAT_H
2 #define LINUX_3_0_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
7
8 /*
9  * since commit 1c5cae815d19ffe02bdfda1260949ef2b1806171
10  * "net: call dev_alloc_name from register_netdevice" dev_alloc_name is
11  * called automatically. This is not implemented in older kernel
12  * versions so it will result in device wrong names.
13  */
14 static inline int register_netdevice_name(struct net_device *dev)
15 {
16         int err;
17
18         if (strchr(dev->name, '%')) {
19                 err = dev_alloc_name(dev, dev->name);
20                 if (err < 0)
21                         return err;
22         }
23
24         return register_netdevice(dev);
25 }
26
27 #define register_netdevice(dev) register_netdevice_name(dev)
28
29 /* BCMA core, see drivers/bcma/ */
30 #ifndef BCMA_CORE
31 /* Broadcom's specific AMBA core, see drivers/bcma/ */
32 struct bcma_device_id {
33         __u16   manuf;
34         __u16   id;
35         __u8    rev;
36         __u8    class;
37 };
38 #define BCMA_CORE(_manuf, _id, _rev, _class)  \
39         { .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, }
40 #define BCMA_CORETABLE_END  \
41         { 0, },
42
43 #define BCMA_ANY_MANUF          0xFFFF
44 #define BCMA_ANY_ID             0xFFFF
45 #define BCMA_ANY_REV            0xFF
46 #define BCMA_ANY_CLASS          0xFF
47 #endif /* BCMA_CORE */
48
49 int mac_pton(const char *s, u8 *mac);
50
51 int __must_check kstrtoull_from_user(const char __user *s, size_t count, unsigned int base, unsigned long long *res);
52 int __must_check kstrtoll_from_user(const char __user *s, size_t count, unsigned int base, long long *res);
53 int __must_check kstrtoul_from_user(const char __user *s, size_t count, unsigned int base, unsigned long *res);
54 int __must_check kstrtol_from_user(const char __user *s, size_t count, unsigned int base, long *res);
55 int __must_check kstrtouint_from_user(const char __user *s, size_t count, unsigned int base, unsigned int *res);
56 int __must_check kstrtoint_from_user(const char __user *s, size_t count, unsigned int base, int *res);
57 int __must_check kstrtou16_from_user(const char __user *s, size_t count, unsigned int base, u16 *res);
58 int __must_check kstrtos16_from_user(const char __user *s, size_t count, unsigned int base, s16 *res);
59 int __must_check kstrtou8_from_user(const char __user *s, size_t count, unsigned int base, u8 *res);
60 int __must_check kstrtos8_from_user(const char __user *s, size_t count, unsigned int base, s8 *res);
61
62 static inline int __must_check kstrtou64_from_user(const char __user *s, size_t count, unsigned int base, u64 *res)
63 {
64         return kstrtoull_from_user(s, count, base, res);
65 }
66
67 static inline int __must_check kstrtos64_from_user(const char __user *s, size_t count, unsigned int base, s64 *res)
68 {
69         return kstrtoll_from_user(s, count, base, res);
70 }
71
72 static inline int __must_check kstrtou32_from_user(const char __user *s, size_t count, unsigned int base, u32 *res)
73 {
74         return kstrtouint_from_user(s, count, base, res);
75 }
76
77 static inline int __must_check kstrtos32_from_user(const char __user *s, size_t count, unsigned int base, s32 *res)
78 {
79         return kstrtoint_from_user(s, count, base, res);
80 }
81
82 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) */
83
84 #endif /* LINUX_3_0_COMPAT_H */