#ifndef _RTX_SERVICE_H_ #define _RTX_SERVICE_H_ //----------------------------------------------------------------------- // Include Files //----------------------------------------------------------------------- #include "wireless.h" #include "dlist.h" #include #include #include "RTX_Config.h" #include #include #include // -------------------------------------------- // Platform dependent include file // -------------------------------------------- #if defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) //#include "platform_stdlib.h" //#include "basic_types.h" #include #else // other MCU may use standard library #include #endif #if (defined CONFIG_GSPI_HCI || defined CONFIG_SDIO_HCI) || defined(CONFIG_LX_HCI) /* For SPI interface transfer and us delay implementation */ #if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) #include #endif #endif // -------------------------------------------- // Platform dependent type define // -------------------------------------------- #if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef signed char s8; typedef signed short s16; typedef signed int s32; typedef signed long long s64; typedef unsigned long long u64; typedef unsigned int uint; typedef signed int sint; #ifndef bool typedef int bool; #define true 1 #define false 0 #endif #define IN #define OUT #define VOID void #define NDIS_OID uint #define NDIS_STATUS uint #ifndef PVOID typedef void * PVOID; #endif typedef unsigned int __kernel_size_t; typedef int __kernel_ssize_t; typedef __kernel_size_t SIZE_T; typedef __kernel_ssize_t SSIZE_T; #endif //CONFIG_PLATFORM_8195A // === SEMAPHORE === typedef struct { osSemaphoreId id; osSemaphoreDef_t def; #ifdef CMSIS_OS_RTX uint32_t data[2]; #endif } rtx_sema_t; // === THREAD === typedef struct { osThreadId id; osThreadDef_t def; } rtx_thread_data_t; // === MUTEX === typedef struct { osMutexId id; osMutexDef_t def; #ifdef CMSIS_OS_RTX #if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM) int32_t data[4]; #else int32_t data[3]; #endif #endif } rtx_mutex_t; // === MAIL BOX === #define RTX_MB_SIZE 8 typedef struct { osMessageQId id; osMessageQDef_t def; #ifdef CMSIS_OS_RTX uint32_t queue; /* The (queue_size+4)*sizeof(uint32_t) is required for RTX OS_MCB overhead. */ #endif } rtx_mqueue_t; typedef struct { osMailQId id; osMailQDef_t def; #ifdef CMSIS_OS_RTX uint32_t os_mailQ_q; /* memory block, (4+queue_size)*sizeof(uint32_t)*/ uint32_t os_mailQ_m; /* memory block, (3 + (item_size+3)/4)*queue_size*/ void * os_mailQ_p[2]; #endif } rtx_mbox_t; typedef struct{ osTimerId id; osTimerDef_t def; #if defined(CMSIS_OS_RTX) && !defined(__MBED_CMSIS_RTOS_CM) uint32_t data[5]; #else uint32_t data[6]; #endif }rtx_tmr_t; #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field) // os types typedef char osdepCHAR; typedef float osdepFLOAT; typedef double osdepDOUBLE; typedef long osdepLONG; typedef short osdepSHORT; typedef unsigned long osdepSTACK_TYPE; typedef long osdepBASE_TYPE; typedef unsigned long osdepTickType; typedef void * _timerHandle; typedef void * _sema; typedef void * _mutex; typedef void * _lock; typedef void * _queueHandle; typedef void * _xqueue; typedef struct timer_list _timer; typedef struct sk_buff _pkt; typedef unsigned char _buffer; #ifndef __LIST_H #warning "DLIST_NOT_DEFINE!!!!!!" struct list_head { struct list_head *next, *prev; }; #endif struct __queue { struct list_head queue; _lock lock; }; typedef struct __queue _queue; typedef struct list_head _list; typedef unsigned long _irqL; typedef void* _thread_hdl_; typedef void thread_return; typedef void* thread_context; #define ATOMIC_T atomic_t #define HZ configTICK_RATE_HZ #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) /* emulate a modern version */ #define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 17) static __inline _list *get_next(_list *list) { return list->next; } static __inline _list *get_list_head(_queue *queue) { return (&(queue->queue)); } #define LIST_CONTAINOR(ptr, type, member) \ ((type *)((char *)(ptr)-(SIZE_T)((char *)&((type *)ptr)->member - (char *)ptr))) //#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n)) #define container_of(ptr, type, member) \ ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member))) #define TASK_PRORITY_LOW osPriorityAboveNormal//osPriorityNormal #define TASK_PRORITY_MIDDLE osPriorityHigh//osPriorityAboveNormal #define TASK_PRORITY_HIGH osPriorityRealtime//osPriorityHigh #define TASK_PRORITY_SUPER osPriorityRealtime #define TASK_PRORITY_IDEL osPriorityIdle #define TIMER_MAX_DELAY 0xFFFFFFFF void save_and_cli(void); void restore_flags(void); void cli(void); //----- ------------------------------------------------------------------ // Common Definition //----- ------------------------------------------------------------------ #define __init #define __exit #define __devinit #define __devexit #define KERN_ERR #define KERN_INFO #define KERN_NOTICE #define GFP_KERNEL 1 #define GFP_ATOMIC 1 #define SET_MODULE_OWNER(some_struct) do { } while (0) #define SET_NETDEV_DEV(dev, obj) do { } while (0) #define register_netdev(dev) (0) #define unregister_netdev(dev) do { } while (0) #define netif_queue_stopped(dev) (0) #define netif_wake_queue(dev) do { } while (0) #define printk printf #define DBG_ERR(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) #if WLAN_INTF_DBG #define DBG_TRACE(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) #define DBG_INFO(fmt, args...) printf("\n\r[%s] " fmt, __FUNCTION__, ## args) #else #define DBG_TRACE(fmt, args...) #define DBG_INFO(fmt, args...) #endif #define HALT() do { cli(); for(;;);} while(0) #define ASSERT(x) do { \ if((x) == 0) \ printf("\n\rAssert(" #x ") failed on line %d in file %s", __LINE__, __FILE__); \ HALT(); \ } while(0) #undef DBG_ASSERT #define DBG_ASSERT(x, msg) do { \ if((x) == 0) \ printf("\n\r%s, Assert(" #x ") failed on line %d in file %s", msg, __LINE__, __FILE__); \ } while(0) //----- ------------------------------------------------------------------ // Atomic Operation //----- ------------------------------------------------------------------ #if !defined(CONFIG_PLATFORM_8195A) && !defined(CONFIG_PLATFORM_8711B) // for 8195A, it is defined in ..system../basic_types.h typedef struct { volatile int counter; } atomic_t; #endif /* * atomic_read - read atomic variable * @v: pointer of type atomic_t * * Atomically reads the value of @v. Note that the guaranteed * useful range of an atomic_t is only 24 bits. */ #define atomic_read(v) ((v)->counter) /* * atomic_set - set atomic variable * @v: pointer of type atomic_t * @i: required value * * Atomically sets the value of @v to @i. Note that the guaranteed * useful range of an atomic_t is only 24 bits. */ #define atomic_set(v,i) ((v)->counter = (i)) /* * These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them * 1. Because people otherwise forget * 2. Because if the timer wrap changes in future you wont have to * alter your driver code. * * time_after(a,b) returns true if the time a is after time b. * * Do this with "<0" and ">=0" to only test the sign of the result. A * good compiler would generate better code (and a really good compiler * wouldn't care). Gcc is currently neither. */ #define time_after(a,b) ((long)(b) - (long)(a) < 0) #define time_before(a,b) time_after(b,a) #define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) #define time_before_eq(a,b) time_after_eq(b,a) extern void rtw_init_listhead(_list *list); extern u32 rtw_is_list_empty(_list *phead); extern void rtw_list_insert_head(_list *plist, _list *phead); extern void rtw_list_insert_tail(_list *plist, _list *phead); extern void rtw_list_delete(_list *plist); #define vPortExitCritical save_and_cli #endif /* _RTX_SERVICE_H_ */