1/*
2 * HND Minimal OS Abstraction Layer.
3 *
4 * Copyright 2007, 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.
11 *
12 * $Id: min_osl.h,v 1.1.1.1 2008/10/15 03:25:54 james26_jang Exp $
13 */
14
15#ifndef _min_osl_h_
16#define _min_osl_h_
17
18#include <typedefs.h>
19#include <sbconfig.h>
20#include <mipsinc.h>
21#include <bcmstdlib.h>
22
23/* Cache support */
24extern void caches_on(void);
25extern void blast_dcache(void);
26extern void blast_icache(void);
27
28/* assert & debugging */
29#define	ASSERT(exp)		do {} while (0)
30
31/* PCMCIA attribute space access macros */
32#define	OSL_PCMCIA_READ_ATTR(osh, offset, buf, size) \
33	ASSERT(0)
34#define	OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size) \
35	ASSERT(0)
36
37/* PCI configuration space access macros */
38#define	OSL_PCI_READ_CONFIG(loc, offset, size) \
39	(offset == 8 ? 0 : 0xffffffff)
40#define	OSL_PCI_WRITE_CONFIG(loc, offset, size, val) \
41	do {} while (0)
42
43/* PCI device bus # and slot # */
44#define OSL_PCI_BUS(osh)	(0)
45#define OSL_PCI_SLOT(osh)	(0)
46
47/* register access macros */
48#define wreg32(r, v)		(*(volatile uint32*)(r) = (uint32)(v))
49#define rreg32(r)		(*(volatile uint32*)(r))
50#define wreg16(r, v)		(*(volatile uint16*)(r) = (uint16)(v))
51#define rreg16(r)		(*(volatile uint16*)(r))
52#define wreg8(r, v)		(*(volatile uint8*)(r) = (uint8)(v))
53#define rreg8(r)		(*(volatile uint8*)(r))
54#define R_REG(osh, r) ({ \
55	__typeof(*(r)) __osl_v; \
56	switch (sizeof(*(r))) { \
57	case sizeof(uint8):	__osl_v = rreg8((r)); break; \
58	case sizeof(uint16):	__osl_v = rreg16((r)); break; \
59	case sizeof(uint32):	__osl_v = rreg32((r)); break; \
60	} \
61	__osl_v; \
62})
63#define W_REG(osh, r, v) do { \
64	switch (sizeof(*(r))) { \
65	case sizeof(uint8):	wreg8((r), (v)); break; \
66	case sizeof(uint16):	wreg16((r), (v)); break; \
67	case sizeof(uint32):	wreg32((r), (v)); break; \
68	} \
69} while (0)
70#define	AND_REG(osh, r, v)		W_REG(osh, (r), R_REG(osh, r) & (v))
71#define	OR_REG(osh, r, v)		W_REG(osh, (r), R_REG(osh, r) | (v))
72
73/* general purpose memory allocation */
74#define	MALLOC(osh, size)	malloc(size)
75#define	MFREE(osh, addr, size)	free(addr)
76#define	MALLOCED(osh)		0
77#define	MALLOC_FAILED(osh)	0
78#define	MALLOC_DUMP(osh, b)
79extern int free(void *ptr);
80extern void *malloc(uint size);
81
82/* uncached virtual address */
83#define	OSL_UNCACHED(va)	((void*)KSEG1ADDR((ulong)(va)))
84
85/* host/bus architecture-specific address byte swap */
86#define BUS_SWAP32(v)		(v)
87
88/* microsecond delay */
89#define	OSL_DELAY(usec)		udelay(usec)
90extern void udelay(uint32 usec);
91
92/* map/unmap physical to virtual I/O */
93#define	REG_MAP(pa, size)	((void*)KSEG1ADDR((ulong)(pa)))
94#define	REG_UNMAP(va)		do {} while (0)
95
96/* dereference an address that may cause a bus exception */
97#define	BUSPROBE(val, addr)	(uint32 *)(addr) = (val)
98
99/* Misc stubs */
100#define osl_attach(pdev)	((osl_t*)pdev)
101#define osl_detach(osh)
102
103#define PKTFREESETCB(osh, _tx_fn, _tx_ctx)
104
105extern void *osl_init(void);
106#define OSL_ERROR(bcmerror)	osl_error(bcmerror)
107extern int osl_error(int);
108
109/* the largest reasonable packet buffer driver uses for ethernet MTU in bytes */
110#define	PKTBUFSZ			(MAXPKTBUFSZ - LBUFSZ)
111
112/* packet primitives */
113#define PKTGET(osh, len, send)		((void *)NULL)
114#define PKTFREE(osh, p, send)
115#define	PKTDATA(osh, lb)		((void *)NULL)
116#define	PKTLEN(osh, lb)			0
117#define	PKTHEADROOM(osh, lb)		0
118#define	PKTTAILROOM(osh, lb)		0
119#define	PKTNEXT(osh, lb)		((void *)NULL)
120#define	PKTSETNEXT(osh, lb, x)
121#define	PKTSETLEN(osh, lb, len)
122#define	PKTPUSH(osh, lb, bytes)
123#define	PKTPULL(osh, lb, bytes)
124#define PKTDUP(osh, p)
125#define	PKTTAG(lb)			((void *)NULL)
126#define	PKTLINK(lb)			((void *)NULL)
127#define	PKTSETLINK(lb, x)
128#define	PKTPRIO(lb)			0
129#define	PKTSETPRIO(lb, x)
130#define PKTSHARED(lb)			1
131#define PKTALLOCED(osh)			0
132#define PKTLIST_DUMP(osh, buf)
133#define PKTFRMNATIVE(osh, lb)		((void *)NULL)
134#define PKTTONATIVE(osh, p)		((struct lbuf *)NULL)
135
136#endif	/* _min_osl_h_ */
137