bt_system.h

来自「AMLOGIC DPF source code」· C头文件 代码 · 共 211 行

H
211
字号
#ifndef __SYSTEM_H
#define __SYSTEM_H

#ifndef AVOS
	typedef unsigned int   OS_STK;               /* Each stack entry is 32-bit wide                    */
#endif

#define	BT_TASK_STACK_SIZE          	(1024*2)         /* Size of each task's stacks (# of WORDs)            */

#define BT_TASK_BASE_PRIO				5
#define HCI_TASK_RX_PRIO				(BT_TASK_BASE_PRIO+0)
#define HCI_TASK_CMD_PRIO				(BT_TASK_BASE_PRIO+0)
#define HCI_TASK_TX_PRIO				(BT_TASK_BASE_PRIO+0)
//#define RFCOMM_TASK_RX_PRIO				(BT_TASK_BASE_PRIO+1)
//#define RFCOMM_TASK_TX_PRIO				(BT_TASK_BASE_PRIO+2)
#define RFCOMM_TASK_SESSION_PRIO		(BT_TASK_BASE_PRIO+1)
#define SDP_TASK_SESSION_PRIO			(BT_TASK_BASE_PRIO+1)

typedef struct tasklet_struct
{
	void (*func)(void *arg);
	void 	*arg;
	unsigned char prio;
	unsigned short	id;
	unsigned char	err;
	//tasklet_struct *next
	//unsigned long state;
	//atomic_t count;
	
#ifdef AVOS
	OS_STK stack[BT_TASK_STACK_SIZE];
	OS_EVENT *sem;
#endif
} tasklet_struct_t;


void tasklet_init(tasklet_struct_t *t, void (*func)(void *arg), void *arg, unsigned char prio);
void tasklet_kill(tasklet_struct_t *t);
void tasklet_enable(tasklet_struct_t *t);
void tasklet_disable(tasklet_struct_t *t);
void tasklet_schedule(tasklet_struct_t *t);
void tasklet_wait_sched(tasklet_struct_t *t);


typedef struct timer_struct
{
	//struct list_head entry;
	unsigned long expires;

	unsigned long magic;

	void (*func)(void *arg);
	void *arg;

	//struct timer_base_s *base;
#ifdef AVOS
	AVTimer_t handle;
#endif
} timer_struct_t;

#define TIMER_MAGIC	0x4b87ad6e

void init_timer(timer_struct_t *timer);
int mod_timer(timer_struct_t *timer, unsigned long expires);
int del_timer(timer_struct_t *timer);


typedef struct wait_struct
{
#ifdef AVOS
	OS_EVENT *sem;
#endif
	unsigned char	err;
} wait_struct_t;

void signal_wait_create(wait_struct_t *wait);
int signal_wait_pend(wait_struct_t *wait, __u32 timeout);
int signal_pend(wait_struct_t *wait, __u32 timeout);
int signal_wait_valid(wait_struct_t *wait);
void signal_wait_post(wait_struct_t *wait);
int signal_wait_remove(wait_struct_t *wait);

void bt_sleep(unsigned long ticks);

/* ----- RFCOMM equests ----- */
#define BT_REQUEST_DONE	  		0
#define BT_REQUEST_PEND			1
#define BT_REQUEST_CANCELED		2
#define BT_REQUEST_CONTINUE		3

#define BT_REQUEST_LIST_CTRL

typedef struct bt_request
{
#ifdef BT_REQUEST_LIST_CTRL
	struct list_head list;
#endif

	wait_struct_t wait;
	unsigned long	status;
	unsigned long	result;
	void *userdata;
} bt_request_t;

/* ---- RFCOMM requests ---- */
void bt_request_complete(bt_request_t *bt_req, void *userdata, __u32 result);
void bt_request_cancel(bt_request_t *bt_req, void *userdata, __u32 result);
void bt_request_continue(bt_request_t *bt_req, void *userdata, __u32 result);
void bt_request_signal(bt_request_t *bt_req, void *userdata);
int bt_request_create(bt_request_t *bt_req, void *userdata);
int bt_request_wait_remove(bt_request_t *bt_req, __u32 timeout);
int bt_request_wait(bt_request_t *bt_req, __u32 timeout);
int bt_request_remove(bt_request_t *bt_req);
int bt_request_reset(bt_request_t *bt_req);
int bt_request_status(bt_request_t *bt_req);
int bt_request_result(bt_request_t *bt_req);
int bt_request_signal_all();


typedef struct _semaphore
{
	atomic_t count;	//used by Linux
#ifdef AVOS
	OS_EVENT * av_event; //link to AVOS
#endif
	//wait_queue_head_t wait; //used by Linux
	unsigned char err;
} semaphore_t;

                                  	
#define	SPIN_LOCK_LOCKED							1
#define	SPIN_LOCK_UNLOCKED							0
#define	RW_LOCK_LOCKED								1
#define	RW_LOCK_UNLOCKED							0

#ifdef AVOS

	#define _spin_lock_init(plock)					{(*plock)=SPIN_LOCK_UNLOCKED;}
	#define _rwlock_init							_spin_lock_init
	#define _spin_lock(plock) 						{AVSchedLock();(*plock)=SPIN_LOCK_LOCKED;}
	#define _spin_unlock(plock)						{AVSchedUnlock();(*plock)=SPIN_LOCK_UNLOCKED;}
	#define _spin_lock_bh							_spin_lock
	#define _spin_unlock_bh							_spin_unlock
	
	#define	_local_irq_disable()					OS_DISABLE_ALL()
	#define	_local_irq_enable()						OS_ENABLE_ALL()
	#define _spin_lock_irq(plock)					{_local_irq_disable();(*plock)=SPIN_LOCK_LOCKED;}
	#define _spin_unlock_irq(plock)					{_local_irq_enable();(*plock)=SPIN_LOCK_UNLOCKED;}
	
	#define	_local_irq_save(flags)					{flags=OSCPUSaveSR();}
	#define	_local_irq_restore(flags)				{OSCPURestoreSR(flags);}
	#define _spin_lock_irqsave(plock, flag)			{_local_irq_save(flags);(*plock)=SPIN_LOCK_LOCKED;}
	#define _spin_unlock_irqrestore(plock, flag)	{_local_irq_restore(flags);(*plock)=SPIN_LOCK_UNLOCKED;}
	
	#define _read_lock(plock) 						{AVSchedLock();(*plock)=RW_LOCK_LOCKED;}
	#define _read_unlock(plock)						{AVSchedUnlock();(*plock)=RW_LOCK_UNLOCKED;}
	#define _read_lock_bh							_read_lock
	#define _read_unlock_bh							_read_unlock
	#define _write_lock(plock) 						{AVSchedLock();(*plock)=RW_LOCK_LOCKED;}
	#define _write_unlock(plock)					{AVSchedUnlock();(*plock)=RW_LOCK_UNLOCKED;}
	#define _write_lock_bh							_write_lock
	#define _write_unlock_bh						_write_unlock
	                                            	
	#define DECLARE_MUTEX(sem)  					semaphore_t sem
	#define	init_MUTEX(sem)							{(sem)->av_event = AVMutexCreate(&(sem)->err);}
	#define down(sem)								{AVMutexPend((sem)->av_event, 0, &(sem)->err);}
	#define up(sem)									{AVMutexPost((sem)->av_event);}
	                                            	
	#define DEFINE_SPINLOCK(x) 						spin_lock_t x = SPIN_LOCK_UNLOCKED
	#define DEFINE_RWLOCK(x) 						rw_lock_t x = RW_LOCK_UNLOCKED

#else //AVOS

	#define _spin_lock_init(plock)
	#define _rwlock_init
	#define _spin_lock(plock)
	#define _spin_unlock(plock)
	#define _spin_lock_bh
	#define _spin_unlock_bh
	
	#define	_local_irq_disable()
	#define	_local_irq_enable()
	#define _spin_lock_irq(plock)
	#define _spin_unlock_irq(plock)
	
	#define	_local_irq_save(flags)
	#define	_local_irq_restore(flags)
	#define _spin_lock_irqsave(plock, flag)
	#define _spin_unlock_irqrestore(plock, flag)
	
	#define _read_lock(plock)
	#define _read_unlock(plock)
	#define _read_lock_bh
	#define _read_unlock_bh
	#define _write_lock(plock)
	#define _write_unlock(plock)
	#define _write_lock_bh
	#define _write_unlock_bh
	
	#define DECLARE_MUTEX(sem)  					semaphore_t sem
	#define	init_MUTEX(sem)                     	
	#define down(sem)                           	
	#define up(sem)                             	
	                                            	
	#define DEFINE_SPINLOCK(x) 						spin_lock_t x = SPIN_LOCK_UNLOCKED
	#define DEFINE_RWLOCK(x) 						rw_lock_t x = RW_LOCK_UNLOCKED

#endif //AVOS


#endif // __SYSTEM_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?