uwb: per-radio controller event thread and beacon cache

Use an event thread per-radio controller so processing events from one
radio controller doesn't delay another.

A radio controller shouldn't have information on devices seen by a
different radio controller (they may be on different channels) so make the
beacon cache per-radio controller.

Signed-off-by: Stefano Panella <stefano.panella@csr.com>
Signed-off-by: David Vrabel <david.vrabel@csr.com>
This commit is contained in:
Stefano Panella 2008-11-04 15:39:08 +00:00 committed by David Vrabel
parent 6d5a681dfb
commit fec1a5932f
6 changed files with 100 additions and 122 deletions

View file

@ -30,6 +30,7 @@
#include <linux/device.h>
#include <linux/mutex.h>
#include <linux/timer.h>
#include <linux/wait.h>
#include <linux/workqueue.h>
#include <linux/uwb/spec.h>
@ -86,6 +87,22 @@ struct uwb_notifs_chain {
struct mutex mutex;
};
/* Beacon cache list */
struct uwb_beca {
struct list_head list;
size_t entries;
struct mutex mutex;
};
/* Event handling thread. */
struct uwbd {
int pid;
struct task_struct *task;
wait_queue_head_t wq;
struct list_head event_list;
spinlock_t event_list_lock;
};
/**
* struct uwb_mas_bm - a bitmap of all MAS in a superframe
* @bm: a bitmap of length #UWB_NUM_MAS
@ -342,6 +359,9 @@ struct uwb_rc {
enum uwb_scan_type scan_type:3;
unsigned ready:1;
struct uwb_notifs_chain notifs_chain;
struct uwb_beca uwb_beca;
struct uwbd uwbd;
struct uwb_drp_avail drp_avail;
struct list_head reservations;