Skip to content

Commit

Permalink
rt2x00: Introduce tasklets for interrupt handling
Browse files Browse the repository at this point in the history
No functional changes, just preparation for moving interrupt handling to
tasklets. The tasklets are disabled by default. Drivers making use of
them need to enable the tasklets when the device state is set to IRQ_ON.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Helmut Schaa authored and John W. Linville committed Jan 31, 2011
1 parent 8d59c4e commit c5c6576
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
13 changes: 13 additions & 0 deletions drivers/net/wireless/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,10 @@ struct rt2x00lib_ops {
* TX status tasklet handler.
*/
void (*txstatus_tasklet) (unsigned long data);
void (*pretbtt_tasklet) (unsigned long data);
void (*tbtt_tasklet) (unsigned long data);
void (*rxdone_tasklet) (unsigned long data);
void (*autowake_tasklet) (unsigned long data);

/*
* Device init handlers.
Expand Down Expand Up @@ -905,6 +909,15 @@ struct rt2x00_dev {
* Tasklet for processing tx status reports (rt2800pci).
*/
struct tasklet_struct txstatus_tasklet;
struct tasklet_struct pretbtt_tasklet;
struct tasklet_struct tbtt_tasklet;
struct tasklet_struct rxdone_tasklet;
struct tasklet_struct autowake_tasklet;

/*
* Protect the interrupt mask register.
*/
spinlock_t irqmask_lock;
};

/*
Expand Down
21 changes: 21 additions & 0 deletions drivers/net/wireless/rt2x00/rt2x00dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -830,6 +830,26 @@ static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)

}

/*
* Initialize tasklets if used by the driver. Tasklets are
* disabled until the interrupts are turned on. The driver
* has to handle that.
*/
#define RT2X00_TASKLET_INIT(taskletname) \
if (rt2x00dev->ops->lib->taskletname) { \
tasklet_init(&rt2x00dev->taskletname, \
rt2x00dev->ops->lib->taskletname, \
(unsigned long)rt2x00dev); \
tasklet_disable(&rt2x00dev->taskletname); \
}

RT2X00_TASKLET_INIT(pretbtt_tasklet);
RT2X00_TASKLET_INIT(tbtt_tasklet);
RT2X00_TASKLET_INIT(rxdone_tasklet);
RT2X00_TASKLET_INIT(autowake_tasklet);

#undef RT2X00_TASKLET_INIT

/*
* Register HW.
*/
Expand Down Expand Up @@ -958,6 +978,7 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
{
int retval = -ENOMEM;

spin_lock_init(&rt2x00dev->irqmask_lock);
mutex_init(&rt2x00dev->csr_mutex);

set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
Expand Down

0 comments on commit c5c6576

Please sign in to comment.