/****************************************************************************** * * Copyright(c) 2007 - 2017 Realtek Corporation. * * 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. * *****************************************************************************/ #ifndef __OSDEP_CE_SERVICE_H_ #define __OSDEP_CE_SERVICE_H_ #include #include #ifdef CONFIG_SDIO_HCI #include "SDCardDDK.h" #endif #ifdef CONFIG_USB_HCI #include #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; struct rtw_timer_list { NDIS_MINIPORT_TIMER ndis_timer; void (*function)(void *); void *arg; }; 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 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); } static inline void timer_hdl( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) { _timer *timer = (_timer *)FunctionContext; timer->function(timer->arg); } static inline void _init_timer(_timer *ptimer, _nic_hdl nic_hdl, void *pfunc, void *cntx) { ptimer->function = pfunc; ptimer->arg = cntx; NdisMInitializeTimer(&ptimer->ndis_timer, nic_hdl, timer_hdl, ptimer); } static inline void _set_timer(_timer *ptimer, u32 delay_time) { NdisMSetTimer(ptimer, delay_time); } static inline 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