78,6 → 78,7 |
static unsigned int v4l2 = 1; |
|
static volatile unsigned int grab_task = -1; |
static volatile unsigned int shark_task_activation = 0; |
|
/* insmod args */ |
MODULE_PARM(radio,"1-" __stringify(BTTV_MAX) "i"); |
3185,6 → 3186,9 |
return 0; |
} |
|
/* S.Ha.R.K. External function */ |
extern int task_activate(int pid); |
|
static void |
bttv_irq_wakeup_set(struct bttv *btv, struct bttv_buffer_set *wakeup, |
struct bttv_buffer_set *curr, unsigned int state) |
3223,10 → 3227,18 |
wakeup->bottom->vb.ts = ts; |
wakeup->bottom->vb.field_count = btv->field_count; |
wakeup->bottom->vb.state = state; |
//wake_up(&wakeup->bottom->vb.done); |
} |
} |
|
/* S.Ha.R.K. grab task activation */ |
if (shark_task_activation == 0) { |
shark_task_activation = 1; |
task_activate(grab_task); |
} |
|
} |
|
static void bttv_irq_timeout(unsigned long data) |
{ |
struct bttv *btv = (struct bttv *)data; |
3258,13 → 3270,21 |
list_del(&item->vb.queue); |
item->vb.state = STATE_ERROR; |
//wake_up(&item->vb.done); |
if (shark_task_activation == 0) { |
shark_task_activation = 1; |
task_activate(grab_task); |
} |
} |
while (!list_empty(&btv->vcapture)) { |
item = list_entry(btv->vcapture.next, struct bttv_buffer, vb.queue); |
list_del(&item->vb.queue); |
item->vb.state = STATE_ERROR; |
//wake_up(&item->vb.done); |
if (shark_task_activation == 0) { |
shark_task_activation = 1; |
task_activate(grab_task); |
} |
} |
|
btv->errors++; |
spin_unlock(&btv->s_lock); |
3287,12 → 3307,16 |
wakeup->vb.field_count = btv->field_count; |
wakeup->vb.state = STATE_DONE; |
//wake_up(&wakeup->vb.done); |
|
if (shark_task_activation == 0) { |
shark_task_activation = 1; |
task_activate(grab_task); |
} |
|
spin_unlock(&btv->s_lock); |
|
} |
|
extern int task_activate(int pid); |
|
static void |
bttv_irq_switch_fields(struct bttv *btv) |
{ |
3328,9 → 3352,6 |
/* wake up finished buffers */ |
bttv_irq_wakeup_set(btv, &old, &new, STATE_DONE); |
|
/* S.Ha.R.K. Task Activate */ |
task_activate(grab_task); |
|
spin_unlock(&btv->s_lock); |
} |
|
3357,6 → 3378,8 |
/* get device status bits */ |
dstat=btread(BT848_DSTATUS); |
|
shark_task_activation = 0; |
|
if (irq_debug) { |
printk(KERN_DEBUG "bttv%d: irq loop=%d fc=%d " |
"riscs=%x, riscc=%08x, ", |