Lines Matching refs:bp

22 #define BUFFER_CHECK(bp) do { \
23 if ((bp)->signature != BUFFER_SIG) { \
26 (bp), __FILE__, __LINE__); \
27 pvr2_buffer_describe(bp, "BadSig"); \
32 #define BUFFER_CHECK(bp) do {} while (0)
99 static void pvr2_buffer_describe(struct pvr2_buffer *bp, const char *msg)
105 bp,
106 (bp ? pvr2_buffer_state_decode(bp->state) : "(invalid)"),
107 (bp ? bp->id : 0),
108 (bp ? bp->status : 0),
109 (bp ? bp->stream : NULL),
110 (bp ? bp->purb : NULL),
111 (bp ? bp->signature : 0));
115 static void pvr2_buffer_remove(struct pvr2_buffer *bp)
120 struct pvr2_stream *sp = bp->stream;
121 switch (bp->state) {
125 ccnt = bp->max_count;
130 ccnt = bp->max_count;
135 ccnt = bp->used_count;
140 list_del_init(&bp->list_overhead);
145 pvr2_buffer_state_decode(bp->state), *bcnt, *cnt);
146 bp->state = pvr2_buffer_state_none;
149 static void pvr2_buffer_set_none(struct pvr2_buffer *bp)
153 BUFFER_CHECK(bp);
154 sp = bp->stream;
157 bp,
158 pvr2_buffer_state_decode(bp->state),
161 pvr2_buffer_remove(bp);
165 static int pvr2_buffer_set_ready(struct pvr2_buffer *bp)
170 BUFFER_CHECK(bp);
171 sp = bp->stream;
174 bp,
175 pvr2_buffer_state_decode(bp->state),
179 pvr2_buffer_remove(bp);
180 list_add_tail(&bp->list_overhead, &sp->ready_list);
181 bp->state = pvr2_buffer_state_ready;
183 sp->r_bcount += bp->used_count;
186 pvr2_buffer_state_decode(bp->state),
192 static void pvr2_buffer_set_idle(struct pvr2_buffer *bp)
196 BUFFER_CHECK(bp);
197 sp = bp->stream;
200 bp,
201 pvr2_buffer_state_decode(bp->state),
204 pvr2_buffer_remove(bp);
205 list_add_tail(&bp->list_overhead, &sp->idle_list);
206 bp->state = pvr2_buffer_state_idle;
208 sp->i_bcount += bp->max_count;
211 pvr2_buffer_state_decode(bp->state),
216 static void pvr2_buffer_set_queued(struct pvr2_buffer *bp)
220 BUFFER_CHECK(bp);
221 sp = bp->stream;
224 bp,
225 pvr2_buffer_state_decode(bp->state),
228 pvr2_buffer_remove(bp);
229 list_add_tail(&bp->list_overhead, &sp->queued_list);
230 bp->state = pvr2_buffer_state_queued;
232 sp->q_bcount += bp->max_count;
235 pvr2_buffer_state_decode(bp->state),
240 static void pvr2_buffer_wipe(struct pvr2_buffer *bp)
242 if (bp->state == pvr2_buffer_state_queued) {
243 usb_kill_urb(bp->purb);
247 static int pvr2_buffer_init(struct pvr2_buffer *bp,
251 memset(bp, 0, sizeof(*bp));
252 bp->signature = BUFFER_SIG;
253 bp->id = id;
255 "/*---TRACE_FLOW---*/ bufferInit %p stream=%p", bp, sp);
256 bp->stream = sp;
257 bp->state = pvr2_buffer_state_none;
258 INIT_LIST_HEAD(&bp->list_overhead);
259 bp->purb = usb_alloc_urb(0, GFP_KERNEL);
260 if (! bp->purb) return -ENOMEM;
262 pvr2_buffer_describe(bp, "create");
267 static void pvr2_buffer_done(struct pvr2_buffer *bp)
270 pvr2_buffer_describe(bp, "delete");
272 pvr2_buffer_wipe(bp);
273 pvr2_buffer_set_none(bp);
274 bp->signature = 0;
275 bp->stream = NULL;
276 usb_free_urb(bp->purb);
278 bp);
313 struct pvr2_buffer *bp;
314 bp = kmalloc(sizeof(*bp), GFP_KERNEL);
315 if (!bp) return -ENOMEM;
316 ret = pvr2_buffer_init(bp, sp, sp->buffer_total_count);
318 kfree(bp);
321 sp->buffers[sp->buffer_total_count] = bp;
323 pvr2_buffer_set_idle(bp);
327 struct pvr2_buffer *bp;
328 bp = sp->buffers[sp->buffer_total_count - 1];
332 pvr2_buffer_done(bp);
333 kfree(bp);
352 struct pvr2_buffer *bp;
367 bp = sp->buffers[sp->buffer_total_count - (cnt + 1)];
368 if (bp->state != pvr2_buffer_state_idle) break;
417 struct pvr2_buffer *bp = urb->context;
420 BUFFER_CHECK(bp);
421 sp = bp->stream;
422 bp->used_count = 0;
423 bp->status = 0;
426 bp, urb->status, urb->actual_length);
434 bp->used_count = urb->actual_length;
451 bp->status = urb->status;
454 pvr2_buffer_set_ready(bp);
575 struct pvr2_buffer *bp;
579 while ((bp = pvr2_stream_get_ready_buffer(sp)) != NULL) {
580 pvr2_buffer_set_idle(bp);
589 int pvr2_buffer_queue(struct pvr2_buffer *bp)
598 if (!bp) return -EINVAL;
599 sp = bp->stream;
602 pvr2_buffer_wipe(bp);
607 pvr2_buffer_set_queued(bp);
609 for (idx = 0; idx < (bp->max_count) / 4; idx++) {
610 val = bp->id << 24;
612 ((unsigned int *)(bp->ptr))[idx] = val;
615 bp->status = -EINPROGRESS;
616 usb_fill_bulk_urb(bp->purb, // struct urb *urb
620 bp->ptr, // void *transfer_buffer
621 bp->max_count, // int buffer_length
623 bp);
624 usb_submit_urb(bp->purb, GFP_KERNEL);
630 int pvr2_buffer_set_buffer(struct pvr2_buffer *bp, void *ptr, unsigned int cnt)
635 if (!bp) return -EINVAL;
636 sp = bp->stream;
640 if (bp->state != pvr2_buffer_state_idle) {
643 bp->ptr = ptr;
644 bp->stream->i_bcount -= bp->max_count;
645 bp->max_count = cnt;
646 bp->stream->i_bcount += bp->max_count;
651 bp->stream->i_bcount, bp->stream->i_count);
659 unsigned int pvr2_buffer_get_count(struct pvr2_buffer *bp)
661 return bp->used_count;
664 int pvr2_buffer_get_status(struct pvr2_buffer *bp)
666 return bp->status;
669 int pvr2_buffer_get_id(struct pvr2_buffer *bp)
671 return bp->id;