SAMA5D4 Xplained Ultra Board BSP
guowenxue
2019-08-19 2e7235d10c6dbff81960282e1a1e2e798f9b8db8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/******************************************************************************
 *
 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
 *                                        
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 *
 ******************************************************************************/
 
#ifndef __OSDEP_CE_SERVICE_H_
#define __OSDEP_CE_SERVICE_H_
 
 
#include <ndis.h>
#include <ntddndis.h>
 
#ifdef CONFIG_SDIO_HCI
#include "SDCardDDK.h"
#endif
 
#ifdef CONFIG_USB_HCI
#include <usbdi.h>
#endif
 
typedef HANDLE     _sema;
typedef    LIST_ENTRY    _list;
typedef NDIS_STATUS _OS_STATUS;
 
typedef NDIS_SPIN_LOCK    _lock;
 
typedef HANDLE         _rwlock; //Mutex
 
typedef u32    _irqL;
 
typedef NDIS_HANDLE  _nic_hdl;
 
 
typedef NDIS_MINIPORT_TIMER    _timer;
 
struct    __queue    {
    LIST_ENTRY    queue;
    _lock    lock;
};
 
typedef    NDIS_PACKET    _pkt;
typedef NDIS_BUFFER    _buffer;
typedef struct    __queue    _queue;
 
typedef HANDLE     _thread_hdl_;
typedef DWORD thread_return;
typedef void*    thread_context;
typedef NDIS_WORK_ITEM _workitem;
 
#define thread_exit() ExitThread(STATUS_SUCCESS); return 0;
 
 
#define SEMA_UPBND    (0x7FFFFFFF)   //8192
 
__inline static _list *get_prev(_list    *list)
{
    return list->Blink;
}
    
__inline static _list *get_next(_list    *list)
{
    return list->Flink;
}
 
__inline static _list    *get_list_head(_queue    *queue)
{
    return (&(queue->queue));
}
 
#define LIST_CONTAINOR(ptr, type, member) CONTAINING_RECORD(ptr, type, member)
 
__inline static void _enter_critical(_lock *plock, _irqL *pirqL)
{
    NdisAcquireSpinLock(plock);
}
 
__inline static void _exit_critical(_lock *plock, _irqL *pirqL)
{
    NdisReleaseSpinLock(plock);
}
 
__inline static _enter_critical_ex(_lock *plock, _irqL *pirqL)
{
    NdisDprAcquireSpinLock(plock);    
}
 
__inline static _exit_critical_ex(_lock *plock, _irqL *pirqL)
{
    NdisDprReleaseSpinLock(plock);    
}
 
 
__inline static void _enter_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
{
    WaitForSingleObject(*prwlock, INFINITE );
 
}
 
__inline static void _exit_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
{
    ReleaseMutex(*prwlock);
}
 
__inline static void rtw_list_delete(_list *plist)
{
    RemoveEntryList(plist);
    InitializeListHead(plist);
}
 
#define RTW_TIMER_HDL_ARGS IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3
 
__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,PVOID cntx)
{
    NdisMInitializeTimer(ptimer, nic_hdl, pfunc, cntx);
}
 
__inline static void _set_timer(_timer *ptimer,u32 delay_time)
{
     NdisMSetTimer(ptimer,delay_time);
}
 
__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
{
    NdisMCancelTimer(ptimer,bcancelled);
}
 
__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)
{
 
    NdisInitializeWorkItem(pwork, pfunc, cntx);
}
 
__inline static void _set_workitem(_workitem *pwork)
{
    NdisScheduleWorkItem(pwork);
}
 
#define ATOMIC_INIT(i)  { (i) }
 
//
// Global Mutex: can only be used at PASSIVE level.
//
 
#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter)                              \
{                                                               \
    while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\
    {                                                           \
        NdisInterlockedDecrement((PULONG)&(_MutexCounter));        \
        NdisMSleep(10000);                          \
    }                                                           \
}
 
#define RELEASE_GLOBAL_MUTEX(_MutexCounter)                              \
{                                                               \
    NdisInterlockedDecrement((PULONG)&(_MutexCounter));              \
}
 
// limitation of path length
#define PATH_LENGTH_MAX MAX_PATH
 
//Atomic integer operations
#define ATOMIC_T LONG
 
#define NDEV_FMT "%s"
#define NDEV_ARG(ndev) ""
#define ADPT_FMT "%s"
#define ADPT_ARG(adapter) ""
#define FUNC_NDEV_FMT "%s"
#define FUNC_NDEV_ARG(ndev) __func__
#define FUNC_ADPT_FMT "%s"
#define FUNC_ADPT_ARG(adapter) __func__
 
#define STRUCT_PACKED
 
 
#endif