BNX2X: DMA helpers
[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 #include <mmio.h>
24 #include <taskqueue.h>
25
26 #define __rcu
27 #define unlikely(x) (x)
28
29 typedef unsigned long dma_addr_t;
30 /* these dma funcs are empty in linux with !CONFIG_NEED_DMA_MAP_STATE */
31 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
32 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
33 #define dma_unmap_addr(PTR, ADDR_NAME)           (0)
34 #define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)
35 #define dma_unmap_len(PTR, LEN_NAME)             (0)
36 #define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)
37 typedef int pci_power_t;
38
39 #define DEFINE_SEMAPHORE(name)  \
40     struct semaphore name = SEMAPHORE_INITIALIZER_IRQSAVE(name, 1)
41 #define sema_init(sem, val) sem_init_irqsave(sem, val)
42 #define up(sem) sem_up(sem)
43 #define down(sem) sem_down(sem)
44 #define down_trylock(sem) ({!sem_trydown(sem);})
45 /* In lieu of spatching, I wanted to keep the distinction between down and
46  * down_interruptible/down_timeout.  Akaros doesn't have the latter. */
47 #define down_interruptible(sem) ({sem_down(sem); 0;})
48 #define down_timeout(sem, timeout) ({sem_down(sem); 0;})
49
50
51 /* I'd like to spatch all of the pci methods, but I don't know how to do the
52  * reads.  Since we're not doing the reads, then no sense doing the writes. */
53 static inline int pci_read_config_byte(struct pci_device *dev, uint32_t off,
54                                        uint8_t *val)
55 {
56         *val = pcidev_read8(dev, off);
57         return 0;
58 }
59                                        
60 static inline int pci_read_config_word(struct pci_device *dev, uint32_t off,
61                                        uint16_t *val)
62 {
63         *val = pcidev_read16(dev, off);
64         return 0;
65 }
66                                        
67 static inline int pci_read_config_dword(struct pci_device *dev, uint32_t off,
68                                         uint32_t *val)
69 {
70         *val = pcidev_read32(dev, off);
71         return 0;
72 }
73                                        
74 static inline int pci_write_config_byte(struct pci_device *dev, uint32_t off,
75                                         uint8_t val)
76 {
77         pcidev_write8(dev, off, val);
78         return 0;
79 }
80
81 static inline int pci_write_config_word(struct pci_device *dev, uint32_t off,
82                                         uint16_t val)
83 {
84         pcidev_write16(dev, off, val);
85         return 0;
86 }
87
88 static inline int pci_write_config_dword(struct pci_device *dev, uint32_t off,
89                                          uint32_t val)
90 {
91         pcidev_write32(dev, off, val);
92         return 0;
93 }
94
95 #endif /* ROS_KERN_AKAROS_COMPAT_H */