CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
orangepi-xunlong

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: orangepi-xunlong/orangepi-build
Path: blob/next/external/cache/sources/wl/include/linux_osl.h
Views: 3959
1
/*
2
* Linux OS Independent Layer
3
*
4
* $Copyright Open Broadcom Corporation$
5
*
6
* $Id: linux_osl.h 383331 2013-02-06 10:27:24Z $
7
*/
8
9
#ifndef _linux_osl_h_
10
#define _linux_osl_h_
11
12
#include <typedefs.h>
13
14
15
extern void * osl_os_open_image(char * filename);
16
extern int osl_os_get_image_block(char * buf, int len, void * image);
17
extern void osl_os_close_image(void * image);
18
extern int osl_os_image_size(void *image);
19
20
21
#ifdef BCMDRIVER
22
23
24
extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag);
25
extern void osl_detach(osl_t *osh);
26
27
28
extern uint32 g_assert_type;
29
30
31
#if defined(BCMASSERT_LOG)
32
#define ASSERT(exp) \
33
do { if (!(exp)) osl_assert(#exp, __FILE__, __LINE__); } while (0)
34
extern void osl_assert(const char *exp, const char *file, int line);
35
#else
36
#ifdef __GNUC__
37
#define GCC_VERSION \
38
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
39
#if GCC_VERSION > 30100
40
#define ASSERT(exp) do {} while (0)
41
#else
42
43
#define ASSERT(exp)
44
#endif
45
#endif
46
#endif
47
48
49
#define OSL_DELAY(usec) osl_delay(usec)
50
extern void osl_delay(uint usec);
51
52
#define OSL_PCMCIA_READ_ATTR(osh, offset, buf, size) \
53
osl_pcmcia_read_attr((osh), (offset), (buf), (size))
54
#define OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size) \
55
osl_pcmcia_write_attr((osh), (offset), (buf), (size))
56
extern void osl_pcmcia_read_attr(osl_t *osh, uint offset, void *buf, int size);
57
extern void osl_pcmcia_write_attr(osl_t *osh, uint offset, void *buf, int size);
58
59
60
#define OSL_PCI_READ_CONFIG(osh, offset, size) \
61
osl_pci_read_config((osh), (offset), (size))
62
#define OSL_PCI_WRITE_CONFIG(osh, offset, size, val) \
63
osl_pci_write_config((osh), (offset), (size), (val))
64
extern uint32 osl_pci_read_config(osl_t *osh, uint offset, uint size);
65
extern void osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val);
66
67
68
#define OSL_PCI_BUS(osh) osl_pci_bus(osh)
69
#define OSL_PCI_SLOT(osh) osl_pci_slot(osh)
70
extern uint osl_pci_bus(osl_t *osh);
71
extern uint osl_pci_slot(osl_t *osh);
72
extern struct pci_dev *osl_pci_device(osl_t *osh);
73
74
75
typedef struct {
76
bool pkttag;
77
bool mmbus;
78
pktfree_cb_fn_t tx_fn;
79
void *tx_ctx;
80
void *unused[3];
81
} osl_pubinfo_t;
82
83
#define PKTFREESETCB(osh, _tx_fn, _tx_ctx) \
84
do { \
85
((osl_pubinfo_t*)osh)->tx_fn = _tx_fn; \
86
((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \
87
} while (0)
88
89
90
91
#define BUS_SWAP32(v) (v)
92
93
#define MALLOC(osh, size) osl_malloc((osh), (size))
94
#define MFREE(osh, addr, size) osl_mfree((osh), (addr), (size))
95
#define MALLOCED(osh) osl_malloced((osh))
96
extern void *osl_malloc(osl_t *osh, uint size);
97
extern void osl_mfree(osl_t *osh, void *addr, uint size);
98
extern uint osl_malloced(osl_t *osh);
99
100
#define NATIVE_MALLOC(osh, size) kmalloc(size, GFP_ATOMIC)
101
#define NATIVE_MFREE(osh, addr, size) kfree(addr)
102
103
#define MALLOC_FAILED(osh) osl_malloc_failed((osh))
104
extern uint osl_malloc_failed(osl_t *osh);
105
106
107
#define DMA_CONSISTENT_ALIGN osl_dma_consistent_align()
108
#define DMA_ALLOC_CONSISTENT(osh, size, align, tot, pap, dmah) \
109
osl_dma_alloc_consistent((osh), (size), (align), (tot), (pap))
110
#define DMA_FREE_CONSISTENT(osh, va, size, pa, dmah) \
111
osl_dma_free_consistent((osh), (void*)(va), (size), (pa))
112
113
#define DMA_ALLOC_CONSISTENT_FORCE32(osh, size, align, tot, pap, dmah) \
114
osl_dma_alloc_consistent((osh), (size), (align), (tot), (pap))
115
#define DMA_FREE_CONSISTENT_FORCE32(osh, va, size, pa, dmah) \
116
osl_dma_free_consistent((osh), (void*)(va), (size), (pa))
117
118
extern uint osl_dma_consistent_align(void);
119
extern void *osl_dma_alloc_consistent(osl_t *osh, uint size, uint16 align, uint *tot, ulong *pap);
120
extern void osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa);
121
122
123
#define DMA_TX 1
124
#define DMA_RX 2
125
126
127
#define DMA_UNMAP(osh, pa, size, direction, p, dmah) \
128
osl_dma_unmap((osh), (pa), (size), (direction))
129
extern uint osl_dma_map(osl_t *osh, void *va, uint size, int direction, void *p,
130
hnddma_seg_map_t *txp_dmah);
131
extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction);
132
133
134
#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)
135
136
137
#include <bcmsdh.h>
138
#define OSL_WRITE_REG(osh, r, v) (bcmsdh_reg_write(NULL, (uintptr)(r), sizeof(*(r)), (v)))
139
#define OSL_READ_REG(osh, r) (bcmsdh_reg_read(NULL, (uintptr)(r), sizeof(*(r))))
140
141
#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \
142
mmap_op else bus_op
143
#define SELECT_BUS_READ(osh, mmap_op, bus_op) (((osl_pubinfo_t*)(osh))->mmbus) ? \
144
mmap_op : bus_op
145
146
#define OSL_ERROR(bcmerror) osl_error(bcmerror)
147
extern int osl_error(int bcmerror);
148
149
150
#define PKTBUFSZ 2048
151
152
153
#include <linuxver.h>
154
#include <linux/kernel.h>
155
#include <linux/string.h>
156
157
#define OSL_SYSUPTIME() ((uint32)jiffies * (1000 / HZ))
158
#define printf(fmt, args...) printk(fmt , ## args)
159
#include <linux/kernel.h>
160
#include <linux/string.h>
161
162
#define bcopy(src, dst, len) memcpy((dst), (src), (len))
163
#define bcmp(b1, b2, len) memcmp((b1), (b2), (len))
164
#define bzero(b, len) memset((b), '\0', (len))
165
166
167
168
#define R_REG(osh, r) (\
169
SELECT_BUS_READ(osh, \
170
({ \
171
__typeof(*(r)) __osl_v; \
172
BCM_REFERENCE(osh); \
173
switch (sizeof(*(r))) { \
174
case sizeof(uint8): __osl_v = \
175
readb((volatile uint8*)(r)); break; \
176
case sizeof(uint16): __osl_v = \
177
readw((volatile uint16*)(r)); break; \
178
case sizeof(uint32): __osl_v = \
179
readl((volatile uint32*)(r)); break; \
180
} \
181
__osl_v; \
182
}), \
183
OSL_READ_REG(osh, r)) \
184
)
185
186
#define W_REG(osh, r, v) do { \
187
BCM_REFERENCE(osh); \
188
SELECT_BUS_WRITE(osh, \
189
switch (sizeof(*(r))) { \
190
case sizeof(uint8): writeb((uint8)(v), (volatile uint8*)(r)); break; \
191
case sizeof(uint16): writew((uint16)(v), (volatile uint16*)(r)); break; \
192
case sizeof(uint32): writel((uint32)(v), (volatile uint32*)(r)); break; \
193
}, \
194
(OSL_WRITE_REG(osh, r, v))); \
195
} while (0)
196
197
#define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))
198
#define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))
199
200
201
#define bcopy(src, dst, len) memcpy((dst), (src), (len))
202
#define bcmp(b1, b2, len) memcmp((b1), (b2), (len))
203
#define bzero(b, len) memset((b), '\0', (len))
204
205
206
#define OSL_UNCACHED(va) ((void *)va)
207
#define OSL_CACHED(va) ((void *)va)
208
209
210
#define OSL_CACHE_FLUSH(va, len)
211
212
#define OSL_PREF_RANGE_LD(va, sz)
213
#define OSL_PREF_RANGE_ST(va, sz)
214
215
216
#if defined(__i386__)
217
#define OSL_GETCYCLES(x) rdtscl((x))
218
#else
219
#define OSL_GETCYCLES(x) ((x) = 0)
220
#endif
221
222
223
#define BUSPROBE(val, addr) ({ (val) = R_REG(NULL, (addr)); 0; })
224
225
226
#if !defined(CONFIG_MMC_MSM7X00A)
227
#define REG_MAP(pa, size) ioremap_nocache((unsigned long)(pa), (unsigned long)(size))
228
#else
229
#define REG_MAP(pa, size) (void *)(0)
230
#endif
231
#define REG_UNMAP(va) iounmap((va))
232
233
234
#define R_SM(r) *(r)
235
#define W_SM(r, v) (*(r) = (v))
236
#define BZERO_SM(r, len) memset((r), '\0', (len))
237
238
239
#include <linuxver.h>
240
241
242
#ifdef BCMDBG_CTRACE
243
#define PKTGET(osh, len, send) osl_pktget((osh), (len), __LINE__, __FILE__)
244
#define PKTDUP(osh, skb) osl_pktdup((osh), (skb), __LINE__, __FILE__)
245
#else
246
#define PKTGET(osh, len, send) osl_pktget((osh), (len))
247
#define PKTDUP(osh, skb) osl_pktdup((osh), (skb))
248
#endif
249
#define PKTLIST_DUMP(osh, buf)
250
#define PKTDBG_TRACE(osh, pkt, bit)
251
#define PKTFREE(osh, skb, send) osl_pktfree((osh), (skb), (send))
252
#ifdef DHD_USE_STATIC_BUF
253
#define PKTGET_STATIC(osh, len, send) osl_pktget_static((osh), (len))
254
#define PKTFREE_STATIC(osh, skb, send) osl_pktfree_static((osh), (skb), (send))
255
#endif
256
#define PKTDATA(osh, skb) (((struct sk_buff*)(skb))->data)
257
#define PKTLEN(osh, skb) (((struct sk_buff*)(skb))->len)
258
#define PKTHEADROOM(osh, skb) (PKTDATA(osh, skb)-(((struct sk_buff*)(skb))->head))
259
#define PKTTAILROOM(osh, skb) skb_tailroom((struct sk_buff*)(skb))
260
#define PKTNEXT(osh, skb) (((struct sk_buff*)(skb))->next)
261
#define PKTSETNEXT(osh, skb, x) (((struct sk_buff*)(skb))->next = (struct sk_buff*)(x))
262
#define PKTSETLEN(osh, skb, len) __skb_trim((struct sk_buff*)(skb), (len))
263
#define PKTPUSH(osh, skb, bytes) skb_push((struct sk_buff*)(skb), (bytes))
264
#define PKTPULL(osh, skb, bytes) skb_pull((struct sk_buff*)(skb), (bytes))
265
#define PKTTAG(skb) ((void*)(((struct sk_buff*)(skb))->cb))
266
#define PKTSETPOOL(osh, skb, x, y) do {} while (0)
267
#define PKTPOOL(osh, skb) FALSE
268
#define PKTSHRINK(osh, m) (m)
269
270
#ifdef BCMDBG_CTRACE
271
#define DEL_CTRACE(zosh, zskb) { \
272
unsigned long zflags; \
273
spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \
274
list_del(&(zskb)->ctrace_list); \
275
(zosh)->ctrace_num--; \
276
(zskb)->ctrace_start = 0; \
277
(zskb)->ctrace_count = 0; \
278
spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \
279
}
280
281
#define UPDATE_CTRACE(zskb, zfile, zline) { \
282
struct sk_buff *_zskb = (struct sk_buff *)(zskb); \
283
if (_zskb->ctrace_count < CTRACE_NUM) { \
284
_zskb->func[_zskb->ctrace_count] = zfile; \
285
_zskb->line[_zskb->ctrace_count] = zline; \
286
_zskb->ctrace_count++; \
287
} \
288
else { \
289
_zskb->func[_zskb->ctrace_start] = zfile; \
290
_zskb->line[_zskb->ctrace_start] = zline; \
291
_zskb->ctrace_start++; \
292
if (_zskb->ctrace_start >= CTRACE_NUM) \
293
_zskb->ctrace_start = 0; \
294
} \
295
}
296
297
#define ADD_CTRACE(zosh, zskb, zfile, zline) { \
298
unsigned long zflags; \
299
spin_lock_irqsave(&(zosh)->ctrace_lock, zflags); \
300
list_add(&(zskb)->ctrace_list, &(zosh)->ctrace_list); \
301
(zosh)->ctrace_num++; \
302
UPDATE_CTRACE(zskb, zfile, zline); \
303
spin_unlock_irqrestore(&(zosh)->ctrace_lock, zflags); \
304
}
305
306
#define PKTCALLER(zskb) UPDATE_CTRACE((struct sk_buff *)zskb, (char *)__FUNCTION__, __LINE__)
307
#endif
308
309
#ifdef CTFPOOL
310
#define CTFPOOL_REFILL_THRESH 3
311
typedef struct ctfpool {
312
void *head;
313
spinlock_t lock;
314
uint max_obj;
315
uint curr_obj;
316
uint obj_size;
317
uint refills;
318
uint fast_allocs;
319
uint fast_frees;
320
uint slow_allocs;
321
} ctfpool_t;
322
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
323
324
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
325
#define FASTBUF (1 << 0)
326
#define CTFBUF (1 << 1)
327
#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) |= FASTBUF)
328
#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) &= (~FASTBUF))
329
#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) |= CTFBUF)
330
#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) &= (~CTFBUF))
331
#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) & FASTBUF)
332
#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->pktc_flags) & CTFBUF)
333
#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->pktc_flags)
334
#else
335
#define FASTBUF (1 << 16)
336
#define CTFBUF (1 << 17)
337
#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) |= FASTBUF)
338
#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) &= (~FASTBUF))
339
#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) |= CTFBUF)
340
#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) &= (~CTFBUF))
341
#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->mac_len) & FASTBUF)
342
#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->mac_len) & CTFBUF)
343
#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->mac_len)
344
#endif
345
#else
346
#define FASTBUF (1 << 0)
347
#define CTFBUF (1 << 1)
348
#define PKTSETFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) |= FASTBUF)
349
#define PKTCLRFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) &= (~FASTBUF))
350
#define PKTSETCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) |= CTFBUF)
351
#define PKTCLRCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) &= (~CTFBUF))
352
#define PKTISFAST(osh, skb) ((((struct sk_buff*)(skb))->__unused) & FASTBUF)
353
#define PKTISCTF(osh, skb) ((((struct sk_buff*)(skb))->__unused) & CTFBUF)
354
#define PKTFAST(osh, skb) (((struct sk_buff*)(skb))->__unused)
355
#endif
356
357
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
358
#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->ctfpool)
359
#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->ctfpool)->head)
360
#else
361
#define CTFPOOLPTR(osh, skb) (((struct sk_buff*)(skb))->sk)
362
#define CTFPOOLHEAD(osh, skb) (((ctfpool_t *)((struct sk_buff*)(skb))->sk)->head)
363
#endif
364
365
extern void *osl_ctfpool_add(osl_t *osh);
366
extern void osl_ctfpool_replenish(osl_t *osh, uint thresh);
367
extern int32 osl_ctfpool_init(osl_t *osh, uint numobj, uint size);
368
extern void osl_ctfpool_cleanup(osl_t *osh);
369
extern void osl_ctfpool_stats(osl_t *osh, void *b);
370
#endif
371
372
373
#ifdef HNDCTF
374
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
375
376
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
377
#define SKIPCT (1 << 2)
378
#define CHAINED (1 << 3)
379
#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags |= SKIPCT)
380
#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags &= (~SKIPCT))
381
#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->pktc_flags & SKIPCT)
382
#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->pktc_flags |= CHAINED)
383
#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->pktc_flags &= (~CHAINED))
384
#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->pktc_flags & CHAINED)
385
#else
386
#define SKIPCT (1 << 18)
387
#define CHAINED (1 << 19)
388
#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len |= SKIPCT)
389
#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len &= (~SKIPCT))
390
#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->mac_len & SKIPCT)
391
#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->mac_len |= CHAINED)
392
#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->mac_len &= (~CHAINED))
393
#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->mac_len & CHAINED)
394
#endif
395
#else
396
#define SKIPCT (1 << 2)
397
#define CHAINED (1 << 3)
398
#define PKTSETSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused |= SKIPCT)
399
#define PKTCLRSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused &= (~SKIPCT))
400
#define PKTSKIPCT(osh, skb) (((struct sk_buff*)(skb))->__unused & SKIPCT)
401
#define PKTSETCHAINED(osh, skb) (((struct sk_buff*)(skb))->__unused |= CHAINED)
402
#define PKTCLRCHAINED(osh, skb) (((struct sk_buff*)(skb))->__unused &= (~CHAINED))
403
#define PKTISCHAINED(skb) (((struct sk_buff*)(skb))->__unused & CHAINED)
404
#endif
405
typedef struct ctf_mark {
406
uint32 value;
407
} ctf_mark_t;
408
#define CTF_MARK(m) (m.value)
409
#else
410
#define PKTSETSKIPCT(osh, skb)
411
#define PKTCLRSKIPCT(osh, skb)
412
#define PKTSKIPCT(osh, skb)
413
#define CTF_MARK(m) 0
414
#endif
415
416
extern void osl_pktfree(osl_t *osh, void *skb, bool send);
417
extern void *osl_pktget_static(osl_t *osh, uint len);
418
extern void osl_pktfree_static(osl_t *osh, void *skb, bool send);
419
420
#ifdef BCMDBG_CTRACE
421
#define PKT_CTRACE_DUMP(osh, b) osl_ctrace_dump((osh), (b))
422
extern void *osl_pktget(osl_t *osh, uint len, int line, char *file);
423
extern void *osl_pkt_frmnative(osl_t *osh, void *skb, int line, char *file);
424
extern int osl_pkt_is_frmnative(osl_t *osh, struct sk_buff *pkt);
425
extern void *osl_pktdup(osl_t *osh, void *skb, int line, char *file);
426
struct bcmstrbuf;
427
extern void osl_ctrace_dump(osl_t *osh, struct bcmstrbuf *b);
428
#else
429
extern void *osl_pkt_frmnative(osl_t *osh, void *skb);
430
extern void *osl_pktget(osl_t *osh, uint len);
431
extern void *osl_pktdup(osl_t *osh, void *skb);
432
#endif
433
extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);
434
#ifdef BCMDBG_CTRACE
435
#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), \
436
(struct sk_buff*)(skb), __LINE__, __FILE__)
437
#define PKTISFRMNATIVE(osh, skb) osl_pkt_is_frmnative((osl_t *)(osh), (struct sk_buff *)(skb))
438
#else
439
#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_t *)osh), (struct sk_buff*)(skb))
440
#endif
441
#define PKTTONATIVE(osh, pkt) osl_pkt_tonative((osl_t *)(osh), (pkt))
442
443
#define PKTLINK(skb) (((struct sk_buff*)(skb))->prev)
444
#define PKTSETLINK(skb, x) (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x))
445
#define PKTPRIO(skb) (((struct sk_buff*)(skb))->priority)
446
#define PKTSETPRIO(skb, x) (((struct sk_buff*)(skb))->priority = (x))
447
#define PKTSUMNEEDED(skb) (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW)
448
#define PKTSETSUMGOOD(skb, x) (((struct sk_buff*)(skb))->ip_summed = \
449
((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE))
450
451
#define PKTSHARED(skb) (((struct sk_buff*)(skb))->cloned)
452
453
#ifdef CONFIG_NF_CONNTRACK_MARK
454
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
455
#define PKTMARK(p) (((struct sk_buff *)(p))->mark)
456
#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->mark = (m)
457
#else
458
#define PKTMARK(p) (((struct sk_buff *)(p))->nfmark)
459
#define PKTSETMARK(p, m) ((struct sk_buff *)(p))->nfmark = (m)
460
#endif
461
#else
462
#define PKTMARK(p) 0
463
#define PKTSETMARK(p, m)
464
#endif
465
466
#define PKTALLOCED(osh) osl_pktalloced(osh)
467
extern uint osl_pktalloced(osl_t *osh);
468
469
#define DMA_MAP(osh, va, size, direction, p, dmah) \
470
osl_dma_map((osh), (va), (size), (direction), (p), (dmah))
471
472
#ifdef PKTC
473
474
struct chain_node {
475
struct sk_buff *link;
476
unsigned int flags:3, pkts:9, bytes:20;
477
};
478
479
#define CHAIN_NODE(skb) ((struct chain_node*)(((struct sk_buff*)skb)->pktc_cb))
480
481
#define PKTCSETATTR(s, f, p, b) ({CHAIN_NODE(s)->flags = (f); CHAIN_NODE(s)->pkts = (p); \
482
CHAIN_NODE(s)->bytes = (b);})
483
#define PKTCCLRATTR(s) ({CHAIN_NODE(s)->flags = CHAIN_NODE(s)->pkts = \
484
CHAIN_NODE(s)->bytes = 0;})
485
#define PKTCGETATTR(s) (CHAIN_NODE(s)->flags << 29 | CHAIN_NODE(s)->pkts << 20 | \
486
CHAIN_NODE(s)->bytes)
487
#define PKTCCNT(skb) (CHAIN_NODE(skb)->pkts)
488
#define PKTCLEN(skb) (CHAIN_NODE(skb)->bytes)
489
#define PKTCGETFLAGS(skb) (CHAIN_NODE(skb)->flags)
490
#define PKTCSETFLAGS(skb, f) (CHAIN_NODE(skb)->flags = (f))
491
#define PKTCCLRFLAGS(skb) (CHAIN_NODE(skb)->flags = 0)
492
#define PKTCFLAGS(skb) (CHAIN_NODE(skb)->flags)
493
#define PKTCSETCNT(skb, c) (CHAIN_NODE(skb)->pkts = (c))
494
#define PKTCINCRCNT(skb) (CHAIN_NODE(skb)->pkts++)
495
#define PKTCADDCNT(skb, c) (CHAIN_NODE(skb)->pkts += (c))
496
#define PKTCSETLEN(skb, l) (CHAIN_NODE(skb)->bytes = (l))
497
#define PKTCADDLEN(skb, l) (CHAIN_NODE(skb)->bytes += (l))
498
#define PKTCSETFLAG(skb, fb) (CHAIN_NODE(skb)->flags |= (fb))
499
#define PKTCCLRFLAG(skb, fb) (CHAIN_NODE(skb)->flags &= ~(fb))
500
#define PKTCLINK(skb) (CHAIN_NODE(skb)->link)
501
#define PKTSETCLINK(skb, x) (CHAIN_NODE(skb)->link = (struct sk_buff*)(x))
502
#define FOREACH_CHAINED_PKT(skb, nskb) \
503
for (; (skb) != NULL; (skb) = (nskb)) \
504
if ((nskb) = (PKTISCHAINED(skb) ? PKTCLINK(skb) : NULL), \
505
PKTSETCLINK((skb), NULL), 1)
506
#define PKTCFREE(osh, skb, send) \
507
do { \
508
void *nskb; \
509
ASSERT((skb) != NULL); \
510
FOREACH_CHAINED_PKT((skb), nskb) { \
511
PKTCLRCHAINED((osh), (skb)); \
512
PKTCCLRFLAGS((skb)); \
513
PKTFREE((osh), (skb), (send)); \
514
} \
515
} while (0)
516
#define PKTCENQTAIL(h, t, p) \
517
do { \
518
if ((t) == NULL) { \
519
(h) = (t) = (p); \
520
} else { \
521
PKTSETCLINK((t), (p)); \
522
(t) = (p); \
523
} \
524
} while (0)
525
#endif
526
527
#else
528
529
530
531
#define ASSERT(exp) do {} while (0)
532
533
534
#define MALLOC(o, l) malloc(l)
535
#define MFREE(o, p, l) free(p)
536
#include <stdlib.h>
537
538
539
#include <string.h>
540
541
542
#include <stdio.h>
543
544
545
extern void bcopy(const void *src, void *dst, size_t len);
546
extern int bcmp(const void *b1, const void *b2, size_t len);
547
extern void bzero(void *b, size_t len);
548
#endif
549
550
#endif
551
552