Lines Matching full:pf

147 	struct sndstat_file *pf;  in sndstat_open()  local
149 pf = malloc(sizeof(*pf), M_DEVBUF, M_WAITOK | M_ZERO); in sndstat_open()
151 sbuf_new(&pf->sbuf, NULL, 4096, SBUF_AUTOEXTEND); in sndstat_open()
153 pf->fflags = flags; in sndstat_open()
154 TAILQ_INIT(&pf->userdev_list); in sndstat_open()
155 sx_init(&pf->lock, "sndstat_file"); in sndstat_open()
158 TAILQ_INSERT_TAIL(&sndstat_filelist, pf, entry); in sndstat_open()
161 devfs_set_cdevpriv(pf, &sndstat_close); in sndstat_open()
169 * * pf->lock held
172 sndstat_remove_all_userdevs(struct sndstat_file *pf) in sndstat_remove_all_userdevs() argument
177 sx_xlocked(&pf->lock), ("%s: Called without pf->lock", __func__)); in sndstat_remove_all_userdevs()
178 while ((ud = TAILQ_FIRST(&pf->userdev_list)) != NULL) { in sndstat_remove_all_userdevs()
179 TAILQ_REMOVE(&pf->userdev_list, ud, link); in sndstat_remove_all_userdevs()
192 struct sndstat_file *pf = (struct sndstat_file *)sndstat_file; in sndstat_close() local
195 sbuf_delete(&pf->sbuf); in sndstat_close()
196 TAILQ_REMOVE(&sndstat_filelist, pf, entry); in sndstat_close()
199 free(pf->devs_nvlbuf, M_NVLIST); in sndstat_close()
200 sx_xlock(&pf->lock); in sndstat_close()
201 sndstat_remove_all_userdevs(pf); in sndstat_close()
202 sx_xunlock(&pf->lock); in sndstat_close()
203 sx_destroy(&pf->lock); in sndstat_close()
205 free(pf, M_DEVBUF); in sndstat_close()
211 struct sndstat_file *pf; in sndstat_read() local
215 err = devfs_get_cdevpriv((void **)&pf); in sndstat_read()
224 if (pf->out_offset != 0) { in sndstat_read()
228 } else if (pf->in_offset == 0) { in sndstat_read()
229 err = sndstat_prepare(pf); in sndstat_read()
235 len = sbuf_len(&pf->sbuf) - pf->in_offset; in sndstat_read()
239 err = uiomove(sbuf_data(&pf->sbuf) + pf->in_offset, len, buf); in sndstat_read()
240 pf->in_offset += len; in sndstat_read()
249 struct sndstat_file *pf; in sndstat_write() local
254 err = devfs_get_cdevpriv((void **)&pf); in sndstat_write()
267 if (pf->in_offset != 0) { in sndstat_write()
272 sx_xlock(&pf->lock); in sndstat_write()
273 sndstat_remove_all_userdevs(pf); in sndstat_write()
274 sx_xunlock(&pf->lock); in sndstat_write()
287 if (sbuf_bcat(&pf->sbuf, temp, len) < 0) { in sndstat_write()
292 sbuf_finish(&pf->sbuf); in sndstat_write()
297 str = sbuf_data(&pf->sbuf); in sndstat_write()
301 ud = sndstat_line2userdev(pf, line, strlen(line)); in sndstat_write()
305 sx_xlock(&pf->lock); in sndstat_write()
306 TAILQ_INSERT_TAIL(&pf->userdev_list, ud, link); in sndstat_write()
307 sx_xunlock(&pf->lock); in sndstat_write()
310 pf->out_offset = sbuf_len(&pf->sbuf); in sndstat_write()
312 pf->out_offset = 0; in sndstat_write()
314 sbuf_clear(&pf->sbuf); in sndstat_write()
680 struct sndstat_file *pf; in sndstat_create_devs_nvlist() local
705 TAILQ_FOREACH(pf, &sndstat_filelist, entry) { in sndstat_create_devs_nvlist()
708 sx_xlock(&pf->lock); in sndstat_create_devs_nvlist()
710 TAILQ_FOREACH(ud, &pf->userdev_list, link) { in sndstat_create_devs_nvlist()
715 sx_xunlock(&pf->lock); in sndstat_create_devs_nvlist()
723 sx_xunlock(&pf->lock); in sndstat_create_devs_nvlist()
728 sx_xunlock(&pf->lock); in sndstat_create_devs_nvlist()
740 sndstat_refresh_devs(struct sndstat_file *pf) in sndstat_refresh_devs() argument
742 sx_xlock(&pf->lock); in sndstat_refresh_devs()
743 free(pf->devs_nvlbuf, M_NVLIST); in sndstat_refresh_devs()
744 pf->devs_nvlbuf = NULL; in sndstat_refresh_devs()
745 pf->devs_nbytes = 0; in sndstat_refresh_devs()
746 sx_unlock(&pf->lock); in sndstat_refresh_devs()
752 sndstat_get_devs(struct sndstat_file *pf, void *arg_buf, size_t *arg_nbytes) in sndstat_get_devs() argument
757 sx_xlock(&pf->lock); in sndstat_get_devs()
759 if (pf->devs_nvlbuf == NULL) { in sndstat_get_devs()
765 sx_xunlock(&pf->lock); in sndstat_get_devs()
773 sx_xlock(&pf->lock); in sndstat_get_devs()
780 sx_xunlock(&pf->lock); in sndstat_get_devs()
786 free(pf->devs_nvlbuf, M_NVLIST); in sndstat_get_devs()
787 pf->devs_nvlbuf = nvlbuf; in sndstat_get_devs()
788 pf->devs_nbytes = nbytes; in sndstat_get_devs()
794 *arg_nbytes = pf->devs_nbytes; in sndstat_get_devs()
798 if (*arg_nbytes < pf->devs_nbytes) { in sndstat_get_devs()
804 err = copyout(pf->devs_nvlbuf, arg_buf, pf->devs_nbytes); in sndstat_get_devs()
808 *arg_nbytes = pf->devs_nbytes; in sndstat_get_devs()
810 free(pf->devs_nvlbuf, M_NVLIST); in sndstat_get_devs()
811 pf->devs_nvlbuf = NULL; in sndstat_get_devs()
812 pf->devs_nbytes = 0; in sndstat_get_devs()
815 sx_unlock(&pf->lock); in sndstat_get_devs()
979 sndstat_add_user_devs(struct sndstat_file *pf, void *nvlbuf, size_t nbytes) in sndstat_add_user_devs() argument
986 if ((pf->fflags & FWRITE) == 0) { in sndstat_add_user_devs()
1011 sx_xlock(&pf->lock); in sndstat_add_user_devs()
1017 sx_unlock(&pf->lock); in sndstat_add_user_devs()
1020 TAILQ_INSERT_TAIL(&pf->userdev_list, ud, link); in sndstat_add_user_devs()
1022 sx_unlock(&pf->lock); in sndstat_add_user_devs()
1030 sndstat_flush_user_devs(struct sndstat_file *pf) in sndstat_flush_user_devs() argument
1032 if ((pf->fflags & FWRITE) == 0) in sndstat_flush_user_devs()
1035 sx_xlock(&pf->lock); in sndstat_flush_user_devs()
1036 sndstat_remove_all_userdevs(pf); in sndstat_flush_user_devs()
1037 sx_xunlock(&pf->lock); in sndstat_flush_user_devs()
1047 struct sndstat_file *pf; in sndstat_ioctl() local
1054 err = devfs_get_cdevpriv((void **)&pf); in sndstat_ioctl()
1061 err = sndstat_get_devs(pf, arg->buf, &arg->nbytes); in sndstat_ioctl()
1067 err = sndstat_get_devs(pf, (void *)(uintptr_t)arg32->buf, in sndstat_ioctl()
1077 err = sndstat_add_user_devs(pf, arg->buf, arg->nbytes); in sndstat_ioctl()
1082 err = sndstat_add_user_devs(pf, (void *)(uintptr_t)arg32->buf, in sndstat_ioctl()
1087 err = sndstat_refresh_devs(pf); in sndstat_ioctl()
1090 err = sndstat_flush_user_devs(pf); in sndstat_ioctl()
1100 sndstat_line2userdev(struct sndstat_file *pf, const char *line, int n) in sndstat_line2userdev() argument
1376 struct sndstat_file *pf; in sndstat_prepare() local
1408 TAILQ_FOREACH(pf, &sndstat_filelist, entry) { in sndstat_prepare()
1411 if (pf == pf_self) in sndstat_prepare()
1413 sx_xlock(&pf->lock); in sndstat_prepare()
1414 if (TAILQ_EMPTY(&pf->userdev_list)) { in sndstat_prepare()
1415 sx_unlock(&pf->lock); in sndstat_prepare()
1420 TAILQ_FOREACH(ud, &pf->userdev_list, link) { in sndstat_prepare()
1428 sx_unlock(&pf->lock); in sndstat_prepare()