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 + -
显示快捷键?