Lines Matching refs:ds
52 struct dtv_stream *ds = &sc->sc_stream;
61 mutex_enter(&ds->ds_ingress_lock);
63 if (SIMPLEQ_EMPTY(&ds->ds_ingress)) {
66 mutex_exit(&ds->ds_ingress_lock);
70 db = SIMPLEQ_FIRST(&ds->ds_ingress);
71 mutex_exit(&ds->ds_ingress_lock);
74 if (dtv_scatter_io_init(&ds->ds_data,
83 mutex_enter(&ds->ds_ingress_lock);
84 SIMPLEQ_REMOVE_HEAD(&ds->ds_ingress, db_entries);
85 mutex_exit(&ds->ds_ingress_lock);
86 mutex_enter(&ds->ds_egress_lock);
87 SIMPLEQ_INSERT_TAIL(&ds->ds_egress, db, db_entries);
88 selnotify(&ds->ds_sel, 0, 0);
89 cv_broadcast(&ds->ds_sample_cv);
90 mutex_exit(&ds->ds_egress_lock);
131 struct dtv_stream *ds = &sc->sc_stream;
139 error = dtv_scatter_buf_set_size(&ds->ds_data, bufsize);
143 oldnbufs = ds->ds_nbufs;
144 oldbuf = ds->ds_buf;
146 ds->ds_nbufs = nbufs;
148 ds->ds_buf = kmem_alloc(sizeof(struct dtv_buffer *) * nbufs,
151 ds->ds_buf = NULL;
156 ds->ds_buf[i] = oldbuf[i];
158 ds->ds_buf[i] = dtv_buffer_alloc();
168 ds->ds_buf[i]->db_offset = offset;
169 ds->ds_buf[i]->db_bytesused = 0;
170 ds->ds_buf[i]->db_length = BLOCK_SIZE;
178 dtv_stream_dequeue(struct dtv_stream *ds)
182 if (!SIMPLEQ_EMPTY(&ds->ds_egress)) {
183 db = SIMPLEQ_FIRST(&ds->ds_egress);
184 SIMPLEQ_REMOVE_HEAD(&ds->ds_egress, db_entries);
192 dtv_stream_enqueue(struct dtv_stream *ds, struct dtv_buffer *db)
195 SIMPLEQ_INSERT_TAIL(&ds->ds_ingress, db, db_entries);
201 struct dtv_stream *ds = &sc->sc_stream;
204 mutex_enter(&ds->ds_ingress_lock);
205 for (i = 0; i < ds->ds_nbufs; i++)
206 dtv_stream_enqueue(ds, ds->ds_buf[i]);
207 mutex_exit(&ds->ds_ingress_lock);
215 struct dtv_stream *ds = &sc->sc_stream;
217 mutex_enter(&ds->ds_ingress_lock);
218 while (SIMPLEQ_FIRST(&ds->ds_ingress))
219 SIMPLEQ_REMOVE_HEAD(&ds->ds_ingress, db_entries);
220 mutex_exit(&ds->ds_ingress_lock);
221 mutex_enter(&ds->ds_egress_lock);
222 while (SIMPLEQ_FIRST(&ds->ds_egress))
223 SIMPLEQ_REMOVE_HEAD(&ds->ds_egress, db_entries);
224 mutex_exit(&ds->ds_egress_lock);
232 struct dtv_stream *ds = &sc->sc_stream;
241 mutex_enter(&ds->ds_egress_lock);
242 while (SIMPLEQ_EMPTY(&ds->ds_egress)) {
244 mutex_exit(&ds->ds_egress_lock);
248 error = cv_wait_sig(&ds->ds_sample_cv,
249 &ds->ds_egress_lock);
251 mutex_exit(&ds->ds_egress_lock);
255 db = SIMPLEQ_FIRST(&ds->ds_egress);
256 mutex_exit(&ds->ds_egress_lock);
259 mutex_enter(&ds->ds_egress_lock);
260 db = dtv_stream_dequeue(ds);
261 mutex_exit(&ds->ds_egress_lock);
262 mutex_enter(&ds->ds_ingress_lock);
263 dtv_stream_enqueue(ds, db);
264 mutex_exit(&ds->ds_ingress_lock);
265 ds->ds_bytesread = 0;
269 len = uimin(uio->uio_resid, db->db_bytesused - ds->ds_bytesread);
270 offset = db->db_offset + ds->ds_bytesread;
272 if (dtv_scatter_io_init(&ds->ds_data, offset, len, &sio)) {
276 ds->ds_bytesread += (len - sio.sio_resid);
280 if (ds->ds_bytesread >= db->db_bytesused) {
281 mutex_enter(&ds->ds_egress_lock);
282 db = dtv_stream_dequeue(ds);
283 mutex_exit(&ds->ds_egress_lock);
284 mutex_enter(&ds->ds_ingress_lock);
285 dtv_stream_enqueue(ds, db);
286 mutex_exit(&ds->ds_ingress_lock);
288 ds->ds_bytesread = 0;
298 struct dtv_stream *ds = &sc->sc_stream;
305 mutex_enter(&ds->ds_egress_lock);
306 if (!SIMPLEQ_EMPTY(&ds->ds_egress)) {
308 SIMPLEQ_FOREACH(db, &ds->ds_egress, db_entries)
313 selrecord(l, &ds->ds_sel);
315 mutex_exit(&ds->ds_egress_lock);