dc9215958b5ed58464239bc6e66e4d5820c9b12a
[akaros.git] / kern / drivers / net / bnx2x / akaros_compat.h
1 /* Copyright (c) 2015 Google Inc.
2  *
3  * Dumping ground for converting between Akaros and other OSs. */
4
5 #ifndef ROS_KERN_AKAROS_COMPAT_H
6 #define ROS_KERN_AKAROS_COMPAT_H
7
8 /* Common headers that most driver files will need */
9
10 #include <assert.h>
11 #include <error.h>
12 #include <ip.h>
13 #include <kmalloc.h>
14 #include <kref.h>
15 #include <pmap.h>
16 #include <slab.h>
17 #include <smp.h>
18 #include <stdio.h>
19 #include <string.h>
20 #include <bitmap.h>
21 #include <mii.h>
22 #include <umem.h>
23
24 #define __rcu
25 typedef unsigned long dma_addr_t;
26 typedef int pci_power_t;
27
28 #define DEFINE_SEMAPHORE(name)  \
29     struct semaphore name = SEMAPHORE_INITIALIZER_IRQSAVE(name, 1)
30 #define sema_init(sem, val) sem_init_irqsave(sem, val)
31 #define up(sem) sem_up(sem)
32 #define down(sem) sem_down(sem)
33 #define down_trylock(sem) ({!sem_trydown(sem);})
34 /* In lieu of spatching, I wanted to keep the distinction between down and
35  * down_interruptible/down_timeout.  Akaros doesn't have the latter. */
36 #define down_interruptible(sem) ({sem_down(sem); 0;})
37 #define down_timeout(sem, timeout) ({sem_down(sem); 0;})
38
39
40 /* I'd like to spatch all of the pci methods, but I don't know how to do the
41  * reads.  Since we're not doing the reads, then no sense doing the writes. */
42 static inline int pci_read_config_byte(struct pci_device *dev, uint32_t off,
43                                        uint8_t *val)
44 {
45         *val = pcidev_read8(dev, off);
46         return 0;
47 }
48                                        
49 static inline int pci_read_config_word(struct pci_device *dev, uint32_t off,
50                                        uint16_t *val)
51 {
52         *val = pcidev_read16(dev, off);
53         return 0;
54 }
55                                        
56 static inline int pci_read_config_dword(struct pci_device *dev, uint32_t off,
57                                         uint32_t *val)
58 {
59         *val = pcidev_read32(dev, off);
60         return 0;
61 }
62                                        
63 static inline int pci_write_config_byte(struct pci_device *dev, uint32_t off,
64                                         uint8_t val)
65 {
66         pcidev_write8(dev, off, val);
67         return 0;
68 }
69
70 static inline int pci_write_config_word(struct pci_device *dev, uint32_t off,
71                                         uint16_t val)
72 {
73         pcidev_write16(dev, off, val);
74         return 0;
75 }
76
77 static inline int pci_write_config_dword(struct pci_device *dev, uint32_t off,
78                                          uint32_t val)
79 {
80         pcidev_write32(dev, off, val);
81         return 0;
82 }
83
84 #endif /* ROS_KERN_AKAROS_COMPAT_H */