1/*-
2 * Copyright (c) 2011 Hans Petter Selasky. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 */
25
26#ifndef _BSD_KERNEL_H_
27#define	_BSD_KERNEL_H_
28
29#include <los_typedef.h>
30#include <stdint.h>
31
32#define	_KERNEL
33#include "sys/module.h"
34#include "sys/bus.h"
35
36#define	__FreeBSD_version 1000000
37
38#define	rebooting 0
39#define	M_USB 0
40#define	M_USBDEV 0
41#define	USB_PROC_MAX 3
42#define	M_DEVBUF 1
43
44
45#define	SYSCTL_DECL(...)
46#define	SYSCTL_INT(...)
47#define	TUNABLE_INT(...)
48#define	EVENTHANDLER_DECLARE(...)
49#define	EVENTHANDLER_INVOKE(...)
50#define	SCHEDULER_STOPPED(x) (0)
51#define	PI_SWI(...) (0)
52#define	UNIQ_NAME(x) x
53#define	UNIQ_NAME_STR(x) #x
54
55#define	hz  LOSCFG_BASE_CORE_TICK_PER_SECOND
56#ifndef PAGE_SIZE
57#define	PAGE_SIZE 4096
58#endif
59
60typedef unsigned long bus_addr_t;
61typedef unsigned long bus_size_t;
62
63typedef void *bus_dmamap_t;
64typedef void *bus_dma_tag_t;
65
66typedef unsigned long bus_space_handle_t;
67
68typedef struct bus_dma_segment {
69	bus_addr_t	ds_addr;	/* DMA address */
70	bus_size_t	ds_len;		/* length of transfer */
71} bus_dma_segment_t;
72
73typedef enum {
74	BUS_DMA_LOCK	= 0x01,
75	BUS_DMA_UNLOCK	= 0x02,
76} bus_dma_lock_op_t;
77
78extern struct mtx Giant;
79
80#define CUR_TICKS (LOS_TickCountGet() & 0xFFFFFFFF)
81
82#ifdef LOSCFG_USB_DEBUG
83#define DEBUG_MODULE(name, func)        \
84/*   static  */struct debug_module_data debug_##name##_mod = {  \
85        func, #name, { 0, 0 } };
86
87struct debug_module_data {
88        void    (*callback) (int arg);
89        const char *mod_name;
90        TAILQ_ENTRY(debug_module_data) entry;
91};
92
93void debug_module_register(void *data);
94void debug_module_unregister(void *data);
95struct debug_module_data *get_debug_module(const char *modname);
96void debug_module_dump(void);
97
98#define usb_debug(fmt, ...) \
99	dprintf("[USB_DEBUG]: In %s %d, " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__);
100#else
101#define usb_debug(fmt, ...)
102#endif
103
104#define usb_err(fmt, ...) \
105	dprintf("[USB_ERR]: In %s %d, " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__);
106
107#define	device_printf(dev, fmt,...) \
108	dprintf("%s (%s): " fmt, __FUNCTION__, device_get_nameunit(dev), ##__VA_ARGS__)
109
110#define	bus_get_dma_tag(...) (NULL)
111
112/* BUS SPACE API */
113
114void module_register(void *);
115void module_unregister(void *);
116/* USB */
117
118typedef int usb_handle_request_t (device_t dev, const void *req, void **pptr, uint16_t *plen,
119								    uint16_t offset, uint8_t *pstate);
120typedef int usb_take_controller_t (device_t dev);
121
122/* set some defaults */
123
124#ifndef USB_POOL_SIZE
125#define	USB_POOL_SIZE (1024*1024)	/* 1 MByte */
126#endif
127
128#ifndef	__DECONST
129#define	__DECONST(type, var)	((type)(__uintptr_t)(const void *)(var))
130#endif
131
132/* BUS SPACE API */
133void	bus_space_write_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset, uint8_t data);
134void	bus_space_write_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset, uint16_t data);
135void	bus_space_write_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset, uint32_t data);
136
137uint8_t	bus_space_read_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset);
138uint16_t bus_space_read_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset);
139uint32_t bus_space_read_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset);
140
141void	bus_space_read_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
142							    uint8_t *datap, bus_size_t count);
143void	bus_space_read_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
144							    uint16_t *datap, bus_size_t count);
145void	bus_space_read_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
146							    uint32_t *datap, bus_size_t count);
147
148void	bus_space_write_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
149							    uint8_t *datap, bus_size_t count);
150void	bus_space_write_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
151							    uint16_t *datap, bus_size_t count);
152void	bus_space_write_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t offset,
153							    uint32_t *datap, bus_size_t count);
154
155void	bus_space_read_region_1(bus_space_tag_t space, bus_space_handle_t handle, bus_size_t offset,
156							    uint8_t *datap, bus_size_t count);
157void	bus_space_write_region_1(bus_space_tag_t space, bus_space_handle_t handle, bus_size_t offset,
158							    uint8_t *datap, bus_size_t count);
159void	bus_space_read_region_4(bus_space_tag_t space, bus_space_handle_t handle, bus_size_t offset,
160							    uint32_t *datap, bus_size_t count);
161void	bus_space_write_region_4(bus_space_tag_t space, bus_space_handle_t handle, bus_size_t offset,
162							    uint32_t *datap, bus_size_t count);
163
164extern void devclass_module_dump(void);
165
166#endif					/* _BSD_KERNEL_H_ */
167