Updates from Broadcom SDK 5.10.147.0
[tomato.git] / release / src-rt / include / min_osl.h
blob37e7e6ab3edb4b4584be92ab4a7220ef01b3811e
1 /*
2 * HND Minimal OS Abstraction Layer.
4 * Copyright (C) 2008, Broadcom Corporation
5 * All Rights Reserved.
6 *
7 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 * $Id: min_osl.h,v 13.22.2.6 2009/11/04 01:17:49 Exp $
15 #ifndef _min_osl_h_
16 #define _min_osl_h_
18 #include <typedefs.h>
19 #include <hndsoc.h>
20 #include <mipsinc.h>
21 #include <bcmstdlib.h>
23 #ifdef mips
24 /* Cache support */
25 extern void caches_on(void);
26 extern void blast_dcache(void);
27 extern void blast_icache(void);
28 #else /* !mips */
29 /* Cache support (or lack thereof) */
30 static inline void caches_on(void) { return; };
31 static inline void blast_dcache(void) { return; };
32 static inline void blast_icache(void) { return; };
33 #endif /* mips */
35 /* assert & debugging */
36 #define ASSERT(exp) do {} while (0)
37 #define BCMDBG_TRACE(val) do {} while (0)
39 /* PCMCIA attribute space access macros */
40 #define OSL_PCMCIA_READ_ATTR(osh, offset, buf, size) \
41 ASSERT(0)
42 #define OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size) \
43 ASSERT(0)
45 /* PCI configuration space access macros */
46 #define OSL_PCI_READ_CONFIG(loc, offset, size) \
47 (offset == 8 ? 0 : 0xffffffff)
48 #define OSL_PCI_WRITE_CONFIG(loc, offset, size, val) \
49 do {} while (0)
51 /* PCI device bus # and slot # */
52 #define OSL_PCI_BUS(osh) (0)
53 #define OSL_PCI_SLOT(osh) (0)
55 /* register access macros */
56 #ifdef IL_BIGENDIAN
57 #ifdef BCMHND74K
59 #define wreg32(r, v) (*(volatile uint32 *)((uint32)(r) ^ 4) = (uint32)(v))
60 #define rreg32(r) (*(volatile uint32 *)((uint32)(r) ^ 4))
61 #define wreg16(r, v) (*(volatile uint16 *)((uint32)(r) ^ 6) = (uint16)(v))
62 #define rreg16(r) (*(volatile uint16 *)((uint32)(r) ^ 6))
63 #define wreg8(r, v) (*(volatile uint8 *)((uint32)(r) ^ 7) = (uint8)(v))
64 #define rreg8(r) (*(volatile uint8 *)((uint32)(r) ^ 7))
66 #else /* !BCMHND74K */
68 #define wreg32(r, v) (*(volatile uint32*)(r) = (uint32)(v))
69 #define rreg32(r) (*(volatile uint32*)(r))
70 #define wreg16(r, v) (*(volatile uint16 *)((uint32)(r) ^ 2) = (uint16)(v))
71 #define rreg16(r) (*(volatile uint16 *)((uint32)(r) ^ 2))
72 #define wreg8(r, v) (*(volatile uint8 *)((uint32)(r) ^ 3) = (uint8)(v))
73 #define rreg8(r) (*(volatile uint8 *)((uint32)(r) ^ 3))
75 #endif /* BCMHND74K */
77 #else /* !IL_BIGENDIAN */
79 #define wreg32(r, v) (*(volatile uint32*)(r) = (uint32)(v))
80 #define rreg32(r) (*(volatile uint32*)(r))
81 #define wreg16(r, v) (*(volatile uint16*)(r) = (uint16)(v))
82 #define rreg16(r) (*(volatile uint16*)(r))
83 #define wreg8(r, v) (*(volatile uint8*)(r) = (uint8)(v))
84 #define rreg8(r) (*(volatile uint8*)(r))
86 #endif /* IL_BIGENDIAN */
88 #define R_REG(osh, r) ({ \
89 __typeof(*(r)) __osl_v; \
90 switch (sizeof(*(r))) { \
91 case sizeof(uint8): __osl_v = rreg8((void *)(r)); break; \
92 case sizeof(uint16): __osl_v = rreg16((void *)(r)); break; \
93 case sizeof(uint32): __osl_v = rreg32((void *)(r)); break; \
94 } \
95 __osl_v; \
97 #define W_REG(osh, r, v) do { \
98 switch (sizeof(*(r))) { \
99 case sizeof(uint8): wreg8((void *)(r), (v)); break; \
100 case sizeof(uint16): wreg16((void *)(r), (v)); break; \
101 case sizeof(uint32): wreg32((void *)(r), (v)); break; \
103 } while (0)
104 #define AND_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) & (v))
105 #define OR_REG(osh, r, v) W_REG(osh, (r), R_REG(osh, r) | (v))
107 /* general purpose memory allocation */
108 #define MALLOC(osh, size) malloc(size)
109 #define MFREE(osh, addr, size) free(addr)
110 #define MALLOCED(osh) 0
111 #define MALLOC_FAILED(osh) 0
112 #define MALLOC_DUMP(osh, b)
113 extern int free(void *ptr);
114 extern void *malloc(uint size);
116 /* uncached virtual address */
117 #ifdef __mips__
118 #define OSL_UNCACHED(va) ((void *)KSEG1ADDR((ulong)(va)))
119 #define OSL_CACHED(va) ((void *)KSEG0ADDR((ulong)(va)))
120 #else
121 #define OSL_UNCACHED(va) ((void *)(va))
122 #define OSL_CACHED(va) ((void *)(va))
123 #endif
125 #ifdef __mips__
126 #define OSL_PREF_RANGE_LD(va, sz) prefetch_range_PREF_LOAD_RETAINED(va, sz)
127 #define OSL_PREF_RANGE_ST(va, sz) prefetch_range_PREF_STORE_RETAINED(va, sz)
128 #else /* __mips__ */
129 #define OSL_PREF_RANGE_LD(va, sz)
130 #define OSL_PREF_RANGE_ST(va, sz)
131 #endif /* __mips__ */
133 /* host/bus architecture-specific address byte swap */
134 #define BUS_SWAP32(v) (v)
136 /* microsecond delay */
137 #define OSL_DELAY(usec) udelay(usec)
138 extern void udelay(uint32 usec);
140 /* map/unmap physical to virtual I/O */
141 #define REG_MAP(pa, size) (OSL_UNCACHED(pa))
142 #define REG_UNMAP(va) do {} while (0)
144 /* dereference an address that may cause a bus exception */
145 #define BUSPROBE(val, addr) (uint32 *)(addr) = (val)
147 /* Misc stubs */
148 #define osl_attach(pdev) ((osl_t*)pdev)
149 #define osl_detach(osh)
151 #define PKTFREESETCB(osh, _tx_fn, _tx_ctx)
153 extern void *osl_init(void);
154 #define OSL_ERROR(bcmerror) osl_error(bcmerror)
155 extern int osl_error(int);
157 /* the largest reasonable packet buffer driver uses for ethernet MTU in bytes */
158 #define PKTBUFSZ (MAXPKTBUFSZ - LBUFSZ)
160 /* packet primitives */
161 #define PKTGET(osh, len, send) ((void *)NULL)
162 #define PKTFREE(osh, p, send)
163 #define PKTDATA(osh, lb) ((void *)NULL)
164 #define PKTLEN(osh, lb) 0
165 #define PKTHEADROOM(osh, lb) 0
166 #define PKTTAILROOM(osh, lb) 0
167 #define PKTNEXT(osh, lb) ((void *)NULL)
168 #define PKTSETNEXT(osh, lb, x)
169 #define PKTSETLEN(osh, lb, len)
170 #define PKTPUSH(osh, lb, bytes)
171 #define PKTPULL(osh, lb, bytes)
172 #define PKTDUP(osh, p)
173 #define PKTTAG(lb) ((void *)NULL)
174 #define PKTLINK(lb) ((void *)NULL)
175 #define PKTSETLINK(lb, x)
176 #define PKTPRIO(lb) 0
177 #define PKTSETPRIO(lb, x)
178 #define PKTSHARED(lb) 1
179 #define PKTALLOCED(osh) 0
180 #define PKTLIST_DUMP(osh, buf)
181 #define PKTFRMNATIVE(osh, lb) ((void *)NULL)
182 #define PKTTONATIVE(osh, p) ((struct lbuf *)NULL)
184 /* Global ASSERT type */
185 extern uint32 g_assert_type;
187 #endif /* _min_osl_h_ */