Lines Matching refs:cp

53 static int pvr2_ioread_init(struct pvr2_ioread *cp)  in pvr2_ioread_init()  argument
57 cp->stream = NULL; in pvr2_ioread_init()
58 mutex_init(&cp->mutex); in pvr2_ioread_init()
61 cp->buffer_storage[idx] = kmalloc(BUFFER_SIZE,GFP_KERNEL); in pvr2_ioread_init()
62 if (!(cp->buffer_storage[idx])) break; in pvr2_ioread_init()
68 if (!(cp->buffer_storage[idx])) continue; in pvr2_ioread_init()
69 kfree(cp->buffer_storage[idx]); in pvr2_ioread_init()
76 static void pvr2_ioread_done(struct pvr2_ioread *cp) in pvr2_ioread_done() argument
80 pvr2_ioread_setup(cp,NULL); in pvr2_ioread_done()
82 if (!(cp->buffer_storage[idx])) continue; in pvr2_ioread_done()
83 kfree(cp->buffer_storage[idx]); in pvr2_ioread_done()
89 struct pvr2_ioread *cp; in pvr2_ioread_create() local
90 cp = kzalloc(sizeof(*cp),GFP_KERNEL); in pvr2_ioread_create()
91 if (!cp) return NULL; in pvr2_ioread_create()
92 pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_create id=%p",cp); in pvr2_ioread_create()
93 if (pvr2_ioread_init(cp) < 0) { in pvr2_ioread_create()
94 kfree(cp); in pvr2_ioread_create()
97 return cp; in pvr2_ioread_create()
100 void pvr2_ioread_destroy(struct pvr2_ioread *cp) in pvr2_ioread_destroy() argument
102 if (!cp) return; in pvr2_ioread_destroy()
103 pvr2_ioread_done(cp); in pvr2_ioread_destroy()
104 pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_destroy id=%p",cp); in pvr2_ioread_destroy()
105 if (cp->sync_key_ptr) { in pvr2_ioread_destroy()
106 kfree(cp->sync_key_ptr); in pvr2_ioread_destroy()
107 cp->sync_key_ptr = NULL; in pvr2_ioread_destroy()
109 kfree(cp); in pvr2_ioread_destroy()
112 void pvr2_ioread_set_sync_key(struct pvr2_ioread *cp, in pvr2_ioread_set_sync_key() argument
116 if (!cp) return; in pvr2_ioread_set_sync_key()
119 if ((sync_key_len == cp->sync_key_len) && in pvr2_ioread_set_sync_key()
121 (!memcmp(sync_key_ptr,cp->sync_key_ptr,sync_key_len)))) return; in pvr2_ioread_set_sync_key()
123 if (sync_key_len != cp->sync_key_len) { in pvr2_ioread_set_sync_key()
124 if (cp->sync_key_ptr) { in pvr2_ioread_set_sync_key()
125 kfree(cp->sync_key_ptr); in pvr2_ioread_set_sync_key()
126 cp->sync_key_ptr = NULL; in pvr2_ioread_set_sync_key()
128 cp->sync_key_len = 0; in pvr2_ioread_set_sync_key()
130 cp->sync_key_ptr = kmalloc(sync_key_len,GFP_KERNEL); in pvr2_ioread_set_sync_key()
131 if (cp->sync_key_ptr) { in pvr2_ioread_set_sync_key()
132 cp->sync_key_len = sync_key_len; in pvr2_ioread_set_sync_key()
136 if (!cp->sync_key_len) return; in pvr2_ioread_set_sync_key()
137 memcpy(cp->sync_key_ptr,sync_key_ptr,cp->sync_key_len); in pvr2_ioread_set_sync_key()
140 static void pvr2_ioread_stop(struct pvr2_ioread *cp) in pvr2_ioread_stop() argument
142 if (!(cp->enabled)) return; in pvr2_ioread_stop()
144 "/*---TRACE_READ---*/ pvr2_ioread_stop id=%p",cp); in pvr2_ioread_stop()
145 pvr2_stream_kill(cp->stream); in pvr2_ioread_stop()
146 cp->c_buf = NULL; in pvr2_ioread_stop()
147 cp->c_data_ptr = NULL; in pvr2_ioread_stop()
148 cp->c_data_len = 0; in pvr2_ioread_stop()
149 cp->c_data_offs = 0; in pvr2_ioread_stop()
150 cp->enabled = 0; in pvr2_ioread_stop()
151 cp->stream_running = 0; in pvr2_ioread_stop()
152 cp->spigot_open = 0; in pvr2_ioread_stop()
153 if (cp->sync_state) { in pvr2_ioread_stop()
156 cp->sync_state = 0; in pvr2_ioread_stop()
160 static int pvr2_ioread_start(struct pvr2_ioread *cp) in pvr2_ioread_start() argument
164 if (cp->enabled) return 0; in pvr2_ioread_start()
165 if (!(cp->stream)) return 0; in pvr2_ioread_start()
167 "/*---TRACE_READ---*/ pvr2_ioread_start id=%p",cp); in pvr2_ioread_start()
168 while ((bp = pvr2_stream_get_idle_buffer(cp->stream)) != NULL) { in pvr2_ioread_start()
175 cp,stat); in pvr2_ioread_start()
176 pvr2_ioread_stop(cp); in pvr2_ioread_start()
180 cp->enabled = !0; in pvr2_ioread_start()
181 cp->c_buf = NULL; in pvr2_ioread_start()
182 cp->c_data_ptr = NULL; in pvr2_ioread_start()
183 cp->c_data_len = 0; in pvr2_ioread_start()
184 cp->c_data_offs = 0; in pvr2_ioread_start()
185 cp->stream_running = 0; in pvr2_ioread_start()
186 if (cp->sync_key_len) { in pvr2_ioread_start()
189 cp->sync_state = 1; in pvr2_ioread_start()
190 cp->sync_trashed_count = 0; in pvr2_ioread_start()
191 cp->sync_buf_offs = 0; in pvr2_ioread_start()
193 cp->spigot_open = 0; in pvr2_ioread_start()
197 struct pvr2_stream *pvr2_ioread_get_stream(struct pvr2_ioread *cp) in pvr2_ioread_get_stream() argument
199 return cp->stream; in pvr2_ioread_get_stream()
202 int pvr2_ioread_setup(struct pvr2_ioread *cp,struct pvr2_stream *sp) in pvr2_ioread_setup() argument
208 mutex_lock(&cp->mutex); do { in pvr2_ioread_setup()
209 if (cp->stream) { in pvr2_ioread_setup()
212 " pvr2_ioread_setup (tear-down) id=%p",cp); in pvr2_ioread_setup()
213 pvr2_ioread_stop(cp); in pvr2_ioread_setup()
214 pvr2_stream_kill(cp->stream); in pvr2_ioread_setup()
215 if (pvr2_stream_get_buffer_count(cp->stream)) { in pvr2_ioread_setup()
216 pvr2_stream_set_buffer_count(cp->stream,0); in pvr2_ioread_setup()
218 cp->stream = NULL; in pvr2_ioread_setup()
223 " pvr2_ioread_setup (setup) id=%p",cp); in pvr2_ioread_setup()
227 mutex_unlock(&cp->mutex); in pvr2_ioread_setup()
233 cp->buffer_storage[idx], in pvr2_ioread_setup()
236 cp->stream = sp; in pvr2_ioread_setup()
238 } while (0); mutex_unlock(&cp->mutex); in pvr2_ioread_setup()
243 int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl) in pvr2_ioread_set_enabled() argument
246 if ((!fl) == (!(cp->enabled))) return ret; in pvr2_ioread_set_enabled()
248 mutex_lock(&cp->mutex); do { in pvr2_ioread_set_enabled()
250 ret = pvr2_ioread_start(cp); in pvr2_ioread_set_enabled()
252 pvr2_ioread_stop(cp); in pvr2_ioread_set_enabled()
254 } while (0); mutex_unlock(&cp->mutex); in pvr2_ioread_set_enabled()
258 static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) in pvr2_ioread_get_buffer() argument
262 while (cp->c_data_len <= cp->c_data_offs) { in pvr2_ioread_get_buffer()
263 if (cp->c_buf) { in pvr2_ioread_get_buffer()
265 stat = pvr2_buffer_queue(cp->c_buf); in pvr2_ioread_get_buffer()
272 cp,stat); in pvr2_ioread_get_buffer()
273 pvr2_ioread_stop(cp); in pvr2_ioread_get_buffer()
276 cp->c_buf = NULL; in pvr2_ioread_get_buffer()
277 cp->c_data_ptr = NULL; in pvr2_ioread_get_buffer()
278 cp->c_data_len = 0; in pvr2_ioread_get_buffer()
279 cp->c_data_offs = 0; in pvr2_ioread_get_buffer()
282 cp->c_buf = pvr2_stream_get_ready_buffer(cp->stream); in pvr2_ioread_get_buffer()
283 if (!cp->c_buf) break; // Nothing ready; done. in pvr2_ioread_get_buffer()
284 cp->c_data_len = pvr2_buffer_get_count(cp->c_buf); in pvr2_ioread_get_buffer()
285 if (!cp->c_data_len) { in pvr2_ioread_get_buffer()
287 stat = pvr2_buffer_get_status(cp->c_buf); in pvr2_ioread_get_buffer()
294 cp,stat); in pvr2_ioread_get_buffer()
295 pvr2_ioread_stop(cp); in pvr2_ioread_get_buffer()
302 cp->c_data_offs = 0; in pvr2_ioread_get_buffer()
303 cp->c_data_ptr = cp->buffer_storage[ in pvr2_ioread_get_buffer()
304 pvr2_buffer_get_id(cp->c_buf)]; in pvr2_ioread_get_buffer()
309 static void pvr2_ioread_filter(struct pvr2_ioread *cp) in pvr2_ioread_filter() argument
312 if (!cp->enabled) return; in pvr2_ioread_filter()
313 if (cp->sync_state != 1) return; in pvr2_ioread_filter()
318 mutex_lock(&cp->mutex); while (1) { in pvr2_ioread_filter()
320 if (!pvr2_ioread_get_buffer(cp)) break; in pvr2_ioread_filter()
321 if (!cp->c_data_len) break; in pvr2_ioread_filter()
325 for (idx = cp->c_data_offs; idx < cp->c_data_len; idx++) { in pvr2_ioread_filter()
326 if (cp->sync_buf_offs >= cp->sync_key_len) break; in pvr2_ioread_filter()
327 if (cp->c_data_ptr[idx] == in pvr2_ioread_filter()
328 cp->sync_key_ptr[cp->sync_buf_offs]) { in pvr2_ioread_filter()
330 (cp->sync_buf_offs)++; in pvr2_ioread_filter()
333 cp->sync_buf_offs = 0; in pvr2_ioread_filter()
338 cp->c_data_offs += idx; in pvr2_ioread_filter()
339 cp->sync_trashed_count += idx; in pvr2_ioread_filter()
342 if (cp->sync_buf_offs >= cp->sync_key_len) { in pvr2_ioread_filter()
343 cp->sync_trashed_count -= cp->sync_key_len; in pvr2_ioread_filter()
347 cp->sync_trashed_count); in pvr2_ioread_filter()
348 cp->sync_state = 2; in pvr2_ioread_filter()
349 cp->sync_buf_offs = 0; in pvr2_ioread_filter()
353 if (cp->c_data_offs < cp->c_data_len) { in pvr2_ioread_filter()
358 cp->c_data_len,cp->c_data_offs); in pvr2_ioread_filter()
365 } mutex_unlock(&cp->mutex); in pvr2_ioread_filter()
368 int pvr2_ioread_avail(struct pvr2_ioread *cp) in pvr2_ioread_avail() argument
371 if (!(cp->enabled)) { in pvr2_ioread_avail()
376 if (cp->sync_state == 1) { in pvr2_ioread_avail()
377 pvr2_ioread_filter(cp); in pvr2_ioread_avail()
378 if (cp->sync_state == 1) return -EAGAIN; in pvr2_ioread_avail()
382 if (cp->stream_running) { in pvr2_ioread_avail()
383 if (!pvr2_stream_get_ready_count(cp->stream)) { in pvr2_ioread_avail()
388 if (pvr2_stream_get_ready_count(cp->stream) < BUFFER_COUNT/2) { in pvr2_ioread_avail()
394 if ((!(cp->spigot_open)) != (!(ret == 0))) { in pvr2_ioread_avail()
395 cp->spigot_open = (ret == 0); in pvr2_ioread_avail()
398 cp->spigot_open ? "available" : "pending"); in pvr2_ioread_avail()
404 int pvr2_ioread_read(struct pvr2_ioread *cp,void __user *buf,unsigned int cnt) in pvr2_ioread_read() argument
416 " ZERO Request? Returning zero.",cp); in pvr2_ioread_read()
420 stat = pvr2_ioread_avail(cp); in pvr2_ioread_read()
423 cp->stream_running = !0; in pvr2_ioread_read()
425 mutex_lock(&cp->mutex); do { in pvr2_ioread_read()
431 if (!pvr2_ioread_get_buffer(cp)) { in pvr2_ioread_read()
438 if (cp->sync_state == 2) { in pvr2_ioread_read()
441 src = cp->sync_key_ptr + cp->sync_buf_offs; in pvr2_ioread_read()
442 bcnt = cp->sync_key_len - cp->sync_buf_offs; in pvr2_ioread_read()
445 src = cp->c_data_ptr + cp->c_data_offs; in pvr2_ioread_read()
446 bcnt = cp->c_data_len - cp->c_data_offs; in pvr2_ioread_read()
465 if (cp->sync_state == 2) { in pvr2_ioread_read()
468 cp->sync_buf_offs += bcnt; in pvr2_ioread_read()
469 if (cp->sync_buf_offs >= cp->sync_key_len) { in pvr2_ioread_read()
475 cp->sync_state = 0; in pvr2_ioread_read()
479 cp->c_data_offs += bcnt; in pvr2_ioread_read()
483 } while (0); mutex_unlock(&cp->mutex); in pvr2_ioread_read()
499 cp,req_cnt,ret); in pvr2_ioread_read()