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); in pvr2_ioread_setup()
210 if (cp->stream) { in pvr2_ioread_setup()
213 " pvr2_ioread_setup (tear-down) id=%p",cp); in pvr2_ioread_setup()
214 pvr2_ioread_stop(cp); in pvr2_ioread_setup()
215 pvr2_stream_kill(cp->stream); in pvr2_ioread_setup()
216 if (pvr2_stream_get_buffer_count(cp->stream)) { in pvr2_ioread_setup()
217 pvr2_stream_set_buffer_count(cp->stream,0); in pvr2_ioread_setup()
219 cp->stream = NULL; in pvr2_ioread_setup()
224 " pvr2_ioread_setup (setup) id=%p",cp); in pvr2_ioread_setup()
228 mutex_unlock(&cp->mutex); in pvr2_ioread_setup()
234 cp->buffer_storage[idx], in pvr2_ioread_setup()
237 cp->stream = sp; in pvr2_ioread_setup()
240 mutex_unlock(&cp->mutex); in pvr2_ioread_setup()
245 int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl) in pvr2_ioread_set_enabled() argument
248 if ((!fl) == (!(cp->enabled))) return ret; in pvr2_ioread_set_enabled()
250 mutex_lock(&cp->mutex); in pvr2_ioread_set_enabled()
253 ret = pvr2_ioread_start(cp); in pvr2_ioread_set_enabled()
255 pvr2_ioread_stop(cp); in pvr2_ioread_set_enabled()
258 mutex_unlock(&cp->mutex); in pvr2_ioread_set_enabled()
262 static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp) in pvr2_ioread_get_buffer() argument
266 while (cp->c_data_len <= cp->c_data_offs) { in pvr2_ioread_get_buffer()
267 if (cp->c_buf) { in pvr2_ioread_get_buffer()
269 stat = pvr2_buffer_queue(cp->c_buf); in pvr2_ioread_get_buffer()
276 cp,stat); in pvr2_ioread_get_buffer()
277 pvr2_ioread_stop(cp); in pvr2_ioread_get_buffer()
280 cp->c_buf = NULL; in pvr2_ioread_get_buffer()
281 cp->c_data_ptr = NULL; in pvr2_ioread_get_buffer()
282 cp->c_data_len = 0; in pvr2_ioread_get_buffer()
283 cp->c_data_offs = 0; in pvr2_ioread_get_buffer()
286 cp->c_buf = pvr2_stream_get_ready_buffer(cp->stream); in pvr2_ioread_get_buffer()
287 if (!cp->c_buf) break; // Nothing ready; done. in pvr2_ioread_get_buffer()
288 cp->c_data_len = pvr2_buffer_get_count(cp->c_buf); in pvr2_ioread_get_buffer()
289 if (!cp->c_data_len) { in pvr2_ioread_get_buffer()
291 stat = pvr2_buffer_get_status(cp->c_buf); in pvr2_ioread_get_buffer()
298 cp,stat); in pvr2_ioread_get_buffer()
299 pvr2_ioread_stop(cp); in pvr2_ioread_get_buffer()
306 cp->c_data_offs = 0; in pvr2_ioread_get_buffer()
307 cp->c_data_ptr = cp->buffer_storage[ in pvr2_ioread_get_buffer()
308 pvr2_buffer_get_id(cp->c_buf)]; in pvr2_ioread_get_buffer()
313 static void pvr2_ioread_filter(struct pvr2_ioread *cp) in pvr2_ioread_filter() argument
316 if (!cp->enabled) return; in pvr2_ioread_filter()
317 if (cp->sync_state != 1) return; in pvr2_ioread_filter()
322 mutex_lock(&cp->mutex); in pvr2_ioread_filter()
325 if (!pvr2_ioread_get_buffer(cp)) break; in pvr2_ioread_filter()
326 if (!cp->c_data_len) break; in pvr2_ioread_filter()
330 for (idx = cp->c_data_offs; idx < cp->c_data_len; idx++) { in pvr2_ioread_filter()
331 if (cp->sync_buf_offs >= cp->sync_key_len) break; in pvr2_ioread_filter()
332 if (cp->c_data_ptr[idx] == in pvr2_ioread_filter()
333 cp->sync_key_ptr[cp->sync_buf_offs]) { in pvr2_ioread_filter()
335 (cp->sync_buf_offs)++; in pvr2_ioread_filter()
338 cp->sync_buf_offs = 0; in pvr2_ioread_filter()
343 cp->c_data_offs += idx; in pvr2_ioread_filter()
344 cp->sync_trashed_count += idx; in pvr2_ioread_filter()
347 if (cp->sync_buf_offs >= cp->sync_key_len) { in pvr2_ioread_filter()
348 cp->sync_trashed_count -= cp->sync_key_len; in pvr2_ioread_filter()
352 cp->sync_trashed_count); in pvr2_ioread_filter()
353 cp->sync_state = 2; in pvr2_ioread_filter()
354 cp->sync_buf_offs = 0; in pvr2_ioread_filter()
358 if (cp->c_data_offs < cp->c_data_len) { in pvr2_ioread_filter()
363 cp->c_data_len,cp->c_data_offs); in pvr2_ioread_filter()
371 mutex_unlock(&cp->mutex); in pvr2_ioread_filter()
374 int pvr2_ioread_avail(struct pvr2_ioread *cp) in pvr2_ioread_avail() argument
377 if (!(cp->enabled)) { in pvr2_ioread_avail()
382 if (cp->sync_state == 1) { in pvr2_ioread_avail()
383 pvr2_ioread_filter(cp); in pvr2_ioread_avail()
384 if (cp->sync_state == 1) return -EAGAIN; in pvr2_ioread_avail()
388 if (cp->stream_running) { in pvr2_ioread_avail()
389 if (!pvr2_stream_get_ready_count(cp->stream)) { in pvr2_ioread_avail()
394 if (pvr2_stream_get_ready_count(cp->stream) < BUFFER_COUNT/2) { in pvr2_ioread_avail()
400 if ((!(cp->spigot_open)) != (!(ret == 0))) { in pvr2_ioread_avail()
401 cp->spigot_open = (ret == 0); in pvr2_ioread_avail()
404 cp->spigot_open ? "available" : "pending"); in pvr2_ioread_avail()
410 int pvr2_ioread_read(struct pvr2_ioread *cp,void __user *buf,unsigned int cnt) in pvr2_ioread_read() argument
422 " ZERO Request? Returning zero.",cp); in pvr2_ioread_read()
426 stat = pvr2_ioread_avail(cp); in pvr2_ioread_read()
429 cp->stream_running = !0; in pvr2_ioread_read()
431 mutex_lock(&cp->mutex); in pvr2_ioread_read()
438 if (!pvr2_ioread_get_buffer(cp)) { in pvr2_ioread_read()
445 if (cp->sync_state == 2) { in pvr2_ioread_read()
448 src = cp->sync_key_ptr + cp->sync_buf_offs; in pvr2_ioread_read()
449 bcnt = cp->sync_key_len - cp->sync_buf_offs; in pvr2_ioread_read()
452 src = cp->c_data_ptr + cp->c_data_offs; in pvr2_ioread_read()
453 bcnt = cp->c_data_len - cp->c_data_offs; in pvr2_ioread_read()
472 if (cp->sync_state == 2) { in pvr2_ioread_read()
475 cp->sync_buf_offs += bcnt; in pvr2_ioread_read()
476 if (cp->sync_buf_offs >= cp->sync_key_len) { in pvr2_ioread_read()
482 cp->sync_state = 0; in pvr2_ioread_read()
486 cp->c_data_offs += bcnt; in pvr2_ioread_read()
491 mutex_unlock(&cp->mutex); in pvr2_ioread_read()
507 cp,req_cnt,ret); in pvr2_ioread_read()