Lines Matching refs:wrch

57 	struct pcm_channel *rdch, *wrch;
64 #define PCM_WRCH(x) (((struct dsp_cdevinfo *)(x)->si_drv1)->wrch)
101 static int dsp_oss_syncgroup(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_syncgroup *group);
103 static int dsp_oss_policy(struct pcm_channel *wrch, struct pcm_channel *rdch, int policy);
104 static int dsp_oss_cookedmode(struct pcm_channel *wrch, struct pcm_channel *rdch, int enabled);
105 static int dsp_oss_getchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map);
106 static int dsp_oss_setchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map);
107 static int dsp_oss_getchannelmask(struct pcm_channel *wrch, struct pcm_channel *rdch, int *mask);
109 static int dsp_oss_getlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label);
110 static int dsp_oss_setlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label);
111 static int dsp_oss_getsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song);
112 static int dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song);
113 static int dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name);
148 getchns(struct cdev *dev, struct pcm_channel **rdch, struct pcm_channel **wrch,
203 *wrch = PCM_WRCH(dev);
207 if (*wrch != NULL && (prio & SD_F_PRIO_WR))
208 CHN_LOCK(*wrch);
215 relchns(struct cdev *dev, struct pcm_channel *rdch, struct pcm_channel *wrch,
218 if (wrch != NULL && (prio & SD_F_PRIO_WR))
219 CHN_UNLOCK(wrch);
226 struct pcm_channel *rdch, struct pcm_channel *wrch,
236 ((rdch == NULL && wrch == NULL) || rdch != wrch),
251 cdi->wrch = wrch;
264 cdi->wrch = wrch;
292 cdi->wrch = NULL;
315 if (cdi->wrch != NULL)
451 struct pcm_channel *rdch, *wrch;
555 wrch = NULL;
605 wrerror = pcm_chnalloc(d, &wrch, PCMDIR_PLAY,
608 if (wrerror == 0 && chn_reset(wrch, fmt, spd) != 0)
615 if (wrch != NULL)
616 pcm_chnrelease(wrch);
632 wrch = NULL;
634 if (wrch != NULL) {
635 pcm_chnref(wrch, 1);
636 pcm_chnrelease(wrch);
640 wrch->flags |= CHN_F_NBIO;
642 wrch->flags |= CHN_F_EXCLUSIVE;
643 pcm_chnref(wrch, 1);
645 chn_vpc_reset(wrch, SND_VOL_C_PCM, 0);
646 CHN_UNLOCK(wrch);
658 KASSERT(wrch == NULL, ("wrch=%p not null!", wrch));
663 dsp_cdevinfo_alloc(i_dev, NULL, NULL, wrch);
667 if (wrch == NULL && rdch == NULL) {
678 dsp_cdevinfo_alloc(i_dev, rdch, wrch, NULL);
681 if (wrch != NULL)
682 CHN_INSERT_HEAD(d, wrch, channels.pcm.opened);
702 struct pcm_channel *rdch, *wrch, *volch;
717 wrch = PCM_WRCH(i_dev);
730 else if (volch == wrch)
741 if (wrch != NULL)
742 CHN_REMOVE(d, wrch, channels.pcm.opened);
744 if (rdch != NULL || wrch != NULL) {
772 if (wrch != NULL) {
777 sg_ids = chn_syncdestroy(wrch);
782 CHN_LOCK(wrch);
783 pcm_chnref(wrch, wdref);
784 chn_flush(wrch); /* may sleep */
785 wrch->flags &= ~(CHN_F_RUNNING | CHN_F_MMAP |
787 chn_reset(wrch, 0, 0);
788 pcm_chnrelease(wrch);
821 struct pcm_channel **ch, *rdch, *wrch;
844 ch = &wrch;
853 wrch = NULL;
856 getchns(i_dev, &rdch, &wrch, prio);
865 relchns(i_dev, rdch, wrch, prio);
884 relchns(i_dev, rdch, wrch, prio);
963 struct pcm_channel *rdch, *wrch;
975 wrch = PCM_WRCH(dev);
985 else if (j == SOUND_MIXER_PCM && wrch != NULL)
986 volch = wrch;
1010 wrch = volch;
1035 } else if (rdch != NULL || wrch != NULL) {
1044 if (wrch != NULL)
1070 struct pcm_channel *chn, *rdch, *wrch;
1140 getchns(i_dev, &rdch, &wrch, 0);
1142 if (wrch != NULL && (wrch->flags & CHN_F_DEAD))
1143 wrch = NULL;
1147 if (wrch == NULL && rdch == NULL) {
1158 if (wrch) {
1159 CHN_LOCK(wrch);
1161 if (wrch && wrch->bufhard.dl)
1162 while (chn_wrfeed(wrch) == 0);
1164 *arg_i = sndbuf_getfree(wrch->bufsoft);
1165 CHN_UNLOCK(wrch);
1179 if (wrch) {
1180 CHN_LOCK(wrch);
1181 chn_setblocksize(wrch, 2, p->play_size);
1182 p->play_size = sndbuf_getblksz(wrch->bufsoft);
1183 CHN_UNLOCK(wrch);
1198 if (wrch) {
1199 CHN_LOCK(wrch);
1200 p->play_size = sndbuf_getblksz(wrch->bufsoft);
1201 CHN_UNLOCK(wrch);
1223 if (wrch) {
1224 CHN_LOCK(wrch);
1226 chn_setformat(wrch,
1228 AFMT_CHANNEL(wrch->format),
1229 AFMT_EXTCHANNEL(wrch->format)));
1230 chn_setspeed(wrch, p->play_rate);
1232 p->play_rate = wrch->speed;
1233 p->play_format = AFMT_ENCODING(wrch->format);
1234 CHN_UNLOCK(wrch);
1270 if (wrch) {
1271 CHN_LOCK(wrch);
1272 pcaps = chn_getcaps(wrch);
1279 wrch? sndbuf_getsize(wrch->bufsoft) : 1000000);
1282 (wrch? chn_getformats(wrch) : 0xffffffff);
1283 if (rdch && wrch)
1289 if (wrch)
1290 CHN_UNLOCK(wrch);
1298 if (*arg_i == AIOSYNC_PLAY && wrch) {
1299 CHN_LOCK(wrch);
1300 *arg_i = chn_abort(wrch);
1301 CHN_UNLOCK(wrch);
1348 if (wrch) {
1349 CHN_LOCK(wrch);
1351 wrch->flags |= CHN_F_NBIO;
1353 wrch->flags &= ~CHN_F_NBIO;
1354 CHN_UNLOCK(wrch);
1364 chn = wrch ? wrch : rdch;
1378 if (wrch) {
1379 CHN_LOCK(wrch);
1380 chn_setblocksize(wrch, 2, *arg_i);
1381 CHN_UNLOCK(wrch);
1393 if (wrch) {
1394 CHN_LOCK(wrch);
1395 chn_abort(wrch);
1396 chn_resetbuf(wrch);
1397 CHN_UNLOCK(wrch);
1410 if (wrch) {
1411 CHN_LOCK(wrch);
1412 chn_sync(wrch, 0);
1413 CHN_UNLOCK(wrch);
1421 if (wrch) {
1422 CHN_LOCK(wrch);
1423 ret = chn_setspeed(wrch, *arg_i);
1424 tmp = wrch->speed;
1425 CHN_UNLOCK(wrch);
1439 chn = wrch ? wrch : rdch;
1454 if (wrch) {
1455 CHN_LOCK(wrch);
1456 ret = chn_setformat(wrch,
1457 SND_FORMAT(wrch->format, *arg_i, 0));
1458 tmp = (AFMT_CHANNEL(wrch->format) > 1)? 1 : 0;
1459 CHN_UNLOCK(wrch);
1495 if (wrch) {
1496 CHN_LOCK(wrch);
1497 ret = chn_setformat(wrch,
1498 SND_FORMAT(wrch->format, *arg_i, ext));
1499 tmp = AFMT_CHANNEL(wrch->format);
1500 CHN_UNLOCK(wrch);
1513 chn = wrch ? wrch : rdch;
1521 chn = wrch ? wrch : rdch;
1533 chn = wrch ? wrch : rdch;
1548 if (wrch) {
1549 CHN_LOCK(wrch);
1550 ret = chn_setformat(wrch, SND_FORMAT(*arg_i,
1551 AFMT_CHANNEL(wrch->format),
1552 AFMT_EXTCHANNEL(wrch->format)));
1553 tmp = wrch->format;
1554 CHN_UNLOCK(wrch);
1568 chn = wrch ? wrch : rdch;
1605 if (wrch && ret == 0) {
1606 CHN_LOCK(wrch);
1607 ret = chn_setblocksize(wrch, maxfrags, fragsz);
1608 maxfrags = sndbuf_getblkcnt(wrch->bufsoft);
1609 fragsz = sndbuf_getblksz(wrch->bufsoft);
1610 CHN_UNLOCK(wrch);
1648 if (wrch) {
1649 struct snd_dbuf *bs = wrch->bufsoft;
1651 CHN_LOCK(wrch);
1652 /* XXX abusive DMA update: chn_wrupdate(wrch); */
1657 CHN_UNLOCK(wrch);
1684 if (wrch) {
1685 struct snd_dbuf *bs = wrch->bufsoft;
1687 CHN_LOCK(wrch);
1688 /* XXX abusive DMA update: chn_wrupdate(wrch); */
1690 a->blocks = sndbuf_getblocks(bs) - wrch->blocks;
1692 wrch->blocks = sndbuf_getblocks(bs);
1693 CHN_UNLOCK(wrch);
1702 if (rdch && wrch && !(dsp_get_flags(i_dev) & SD_F_SIMPLEX))
1706 if (wrch && (wrch->flags & CHN_F_VIRTUAL) != 0)
1712 chn = wrch ? wrch : rdch;
1745 if (wrch) {
1746 CHN_LOCK(wrch);
1747 wrch->flags &= ~CHN_F_NOTRIGGER;
1749 chn_start(wrch, 1);
1751 chn_abort(wrch);
1752 chn_resetbuf(wrch);
1753 wrch->flags |= CHN_F_NOTRIGGER;
1755 CHN_UNLOCK(wrch);
1761 if (wrch) {
1762 CHN_LOCK(wrch);
1763 if (wrch->flags & CHN_F_TRIGGERED)
1765 CHN_UNLOCK(wrch);
1776 if (wrch) {
1777 struct snd_dbuf *bs = wrch->bufsoft;
1779 CHN_LOCK(wrch);
1780 /* XXX abusive DMA update: chn_wrupdate(wrch); */
1782 CHN_UNLOCK(wrch);
1788 if (wrch) {
1789 CHN_LOCK(wrch);
1790 wrch->flags &= ~CHN_F_NOTRIGGER;
1791 chn_start(wrch, 1);
1792 CHN_UNLOCK(wrch);
1802 if (rdch && wrch && (dsp_get_flags(i_dev) & SD_F_SIMPLEX))
1827 chn = wrch;
1833 chn = wrch;
1868 * the wrch bound to this cdev).
1879 if (wrch != NULL) {
1881 strlcpy(ei->strings, wrch->name,
1897 if (wrch != NULL)
1910 if (wrch == NULL)
1914 CHN_LOCK(wrch);
1915 while (wrch->inprog != 0)
1916 cv_wait(&wrch->cv, wrch->lock);
1917 bs = wrch->bufsoft;
1922 chn_start(wrch, 0);
1924 CHN_UNLOCK(wrch);
1934 if (wrch == NULL)
1938 CHN_LOCK(wrch);
1939 while (wrch->inprog != 0)
1940 cv_wait(&wrch->cv, wrch->lock);
1941 bs = wrch->bufsoft;
1946 chn_start(wrch, 0);
1948 CHN_UNLOCK(wrch);
1966 chn = (cmd == SNDCTL_DSP_CURRENT_OPTR) ? wrch : rdch;
1991 chn = (cmd == SNDCTL_DSP_HALT_OUTPUT) ? wrch : rdch;
2006 if (wrch != NULL) {
2007 CHN_LOCK(wrch);
2008 wrch->lw = (*arg_i > 1) ? *arg_i : 1;
2009 CHN_UNLOCK(wrch);
2031 if (wrch != NULL) {
2032 CHN_LOCK(wrch);
2033 ei->play_underruns = wrch->xruns;
2034 wrch->xruns = 0;
2035 CHN_UNLOCK(wrch);
2048 ret = dsp_oss_syncgroup(wrch, rdch, (oss_syncgroup *)arg);
2060 ret = dsp_oss_policy(wrch, rdch, *arg_i);
2067 ret = dsp_oss_cookedmode(wrch, rdch, *arg_i);
2072 ret = dsp_oss_getchnorder(wrch, rdch, (unsigned long long *)arg);
2077 ret = dsp_oss_setchnorder(wrch, rdch, (unsigned long long *)arg);
2082 ret = dsp_oss_getchannelmask(wrch, rdch, (int *)arg);
2095 chn = (cmd == SNDCTL_DSP_GETOPEAKS) ? wrch : rdch;
2119 ret = dsp_oss_getlabel(wrch, rdch, (oss_label_t *)arg);
2122 ret = dsp_oss_setlabel(wrch, rdch, (oss_label_t *)arg);
2125 ret = dsp_oss_getsong(wrch, rdch, (oss_longname_t *)arg);
2128 ret = dsp_oss_setsong(wrch, rdch, (oss_longname_t *)arg);
2131 ret = dsp_oss_setname(wrch, rdch, (oss_longname_t *)arg);
2171 struct pcm_channel *wrch, *rdch;
2182 wrch = NULL;
2186 getchns(i_dev, &rdch, &wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
2188 if (wrch != NULL && !(wrch->flags & CHN_F_DEAD)) {
2191 ret |= chn_poll(wrch, e, td);
2200 relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
2222 struct pcm_channel *wrch, *rdch, *c;
2255 getchns(i_dev, &rdch, &wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
2257 c = ((nprot & PROT_WRITE) != 0) ? wrch : rdch;
2260 (wrch != NULL && (wrch->flags & CHN_F_MMAP_INVALID)) ||
2262 relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
2267 if (wrch != NULL)
2268 wrch->flags |= CHN_F_MMAP;
2273 relchns(i_dev, rdch, wrch, SD_F_PRIO_RD | SD_F_PRIO_WR);
2765 * sync group is created. Otherwise, wrch and rdch (if set) are added to
2772 * @param wrch output channel associated w/ device (if any)
2780 dsp_oss_syncgroup(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_syncgroup *group)
2808 if (wrch) {
2809 CHN_LOCK(wrch);
2810 sg_ids[0] = chn_syncdestroy(wrch);
2820 * - Bail if PCM_ENABLE_OUTPUT && wrch == NULL.
2823 if (((wrch == NULL) && (group->mode & PCM_ENABLE_OUTPUT)) ||
2885 smwr->ch = wrch;
2887 chn_abort(wrch);
2888 wrch->flags |= CHN_F_NOTRIGGER;
2889 wrch->sm = smwr;
2903 if (wrch)
2904 wrch->sm = NULL;
2909 if (wrch)
2910 CHN_UNLOCK(wrch);
3055 * @param wrch Pointer to opened playback channel (optional; may be NULL)
3062 dsp_oss_policy(struct pcm_channel *wrch, struct pcm_channel *rdch, int policy)
3078 if (wrch && ret == 0) {
3079 CHN_LOCK(wrch);
3080 ret = chn_setlatency(wrch, policy);
3081 CHN_UNLOCK(wrch);
3106 * @param wrch playback channel (optional; may be NULL)
3113 dsp_oss_cookedmode(struct pcm_channel *wrch, struct pcm_channel *rdch, int enabled)
3132 if (wrch != NULL) {
3133 CHN_LOCK(wrch);
3134 wrch->flags &= ~CHN_F_BITPERFECT;
3135 wrch->flags |= (enabled != 0) ? CHN_F_BITPERFECT : 0x00000000;
3136 CHN_UNLOCK(wrch);
3160 * @param wrch playback channel (optional; may be NULL)
3167 dsp_oss_getchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map)
3172 ch = (wrch != NULL) ? wrch : rdch;
3191 * @param wrch playback channel (optional; may be NULL)
3198 dsp_oss_setchnorder(struct pcm_channel *wrch, struct pcm_channel *rdch, unsigned long long *map)
3204 if (wrch != NULL) {
3205 CHN_LOCK(wrch);
3206 ret = chn_oss_setorder(wrch, map);
3207 CHN_UNLOCK(wrch);
3220 dsp_oss_getchannelmask(struct pcm_channel *wrch, struct pcm_channel *rdch,
3228 ch = (wrch != NULL) ? wrch : rdch;
3260 * @param wrch playback channel (optional; may be NULL)
3267 dsp_oss_getlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label)
3284 * @param wrch playback channel (optional; may be NULL)
3291 dsp_oss_setlabel(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_label_t *label)
3309 * @param wrch playback channel (optional; may be NULL)
3316 dsp_oss_getsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song)
3334 * @param wrch playback channel (optional; may be NULL)
3341 dsp_oss_setsong(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *song)
3363 * @param wrch playback channel (optional; may be NULL)
3370 dsp_oss_setname(struct pcm_channel *wrch, struct pcm_channel *rdch, oss_longname_t *name)