Lines Matching refs:fl
142 struct fastrpc_user *fl; member
164 struct fastrpc_user *fl; member
191 struct fastrpc_user *fl; member
265 static int fastrpc_map_find(struct fastrpc_user *fl, int fd, in fastrpc_map_find() argument
270 mutex_lock(&fl->mutex); in fastrpc_map_find()
271 list_for_each_entry(map, &fl->maps, node) { in fastrpc_map_find()
275 mutex_unlock(&fl->mutex); in fastrpc_map_find()
279 mutex_unlock(&fl->mutex); in fastrpc_map_find()
291 static int fastrpc_buf_alloc(struct fastrpc_user *fl, struct device *dev, in fastrpc_buf_alloc() argument
304 buf->fl = fl; in fastrpc_buf_alloc()
319 if (fl->sctx && fl->sctx->sid) in fastrpc_buf_alloc()
320 buf->phys += ((u64)fl->sctx->sid << 32); in fastrpc_buf_alloc()
454 ctx->fl = user; in fastrpc_context_alloc()
616 static int fastrpc_map_create(struct fastrpc_user *fl, int fd, in fastrpc_map_create() argument
619 struct fastrpc_session_ctx *sess = fl->sctx; in fastrpc_map_create()
623 if (!fastrpc_map_find(fl, fd, ppmap)) in fastrpc_map_create()
631 map->fl = fl; in fastrpc_map_create()
653 map->phys += ((u64)fl->sctx->sid << 32); in fastrpc_map_create()
659 spin_lock(&fl->lock); in fastrpc_map_create()
660 list_add_tail(&map->node, &fl->maps); in fastrpc_map_create()
661 spin_unlock(&fl->lock); in fastrpc_map_create()
737 struct device *dev = ctx->fl->sctx->dev; in fastrpc_create_maps()
749 err = fastrpc_map_create(ctx->fl, ctx->args[i].fd, in fastrpc_create_maps()
762 struct device *dev = ctx->fl->sctx->dev; in fastrpc_get_args()
782 err = fastrpc_buf_alloc(ctx->fl, dev, pkt_size, &ctx->buf); in fastrpc_get_args()
910 struct fastrpc_user *fl = ctx->fl; in fastrpc_invoke_send() local
914 cctx = fl->cctx; in fastrpc_invoke_send()
915 msg->pid = fl->tgid; in fastrpc_invoke_send()
921 msg->ctx = ctx->ctxid | fl->pd; in fastrpc_invoke_send()
937 static int fastrpc_internal_invoke(struct fastrpc_user *fl, u32 kernel, in fastrpc_internal_invoke() argument
944 if (!fl->sctx) in fastrpc_internal_invoke()
947 if (!fl->cctx->rpdev) in fastrpc_internal_invoke()
950 ctx = fastrpc_context_alloc(fl, kernel, sc, args); in fastrpc_internal_invoke()
963 err = fastrpc_invoke_send(fl->sctx, ctx, kernel, handle); in fastrpc_internal_invoke()
994 spin_lock(&fl->lock); in fastrpc_internal_invoke()
996 spin_unlock(&fl->lock); in fastrpc_internal_invoke()
1000 dev_dbg(fl->sctx->dev, "Error: Invoke Failed %d\n", err); in fastrpc_internal_invoke()
1005 static int fastrpc_init_create_process(struct fastrpc_user *fl, in fastrpc_init_create_process() argument
1039 inbuf.pgid = fl->tgid; in fastrpc_init_create_process()
1045 fl->pd = USER_PD; in fastrpc_init_create_process()
1048 err = fastrpc_map_create(fl, init.filefd, init.filelen, &map); in fastrpc_init_create_process()
1055 err = fastrpc_buf_alloc(fl, fl->sctx->dev, memlen, in fastrpc_init_create_process()
1060 fl->init_mem = imem; in fastrpc_init_create_process()
1092 err = fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, in fastrpc_init_create_process()
1102 fl->init_mem = NULL; in fastrpc_init_create_process()
1106 spin_lock(&fl->lock); in fastrpc_init_create_process()
1108 spin_unlock(&fl->lock); in fastrpc_init_create_process()
1147 static int fastrpc_release_current_dsp_process(struct fastrpc_user *fl) in fastrpc_release_current_dsp_process() argument
1153 tgid = fl->tgid; in fastrpc_release_current_dsp_process()
1160 return fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, in fastrpc_release_current_dsp_process()
1166 struct fastrpc_user *fl = (struct fastrpc_user *)file->private_data; in fastrpc_device_release() local
1167 struct fastrpc_channel_ctx *cctx = fl->cctx; in fastrpc_device_release()
1173 fastrpc_release_current_dsp_process(fl); in fastrpc_device_release()
1176 list_del(&fl->user); in fastrpc_device_release()
1179 if (fl->init_mem) in fastrpc_device_release()
1180 fastrpc_buf_free(fl->init_mem); in fastrpc_device_release()
1182 list_for_each_entry_safe(ctx, n, &fl->pending, node) { in fastrpc_device_release()
1187 list_for_each_entry_safe(map, m, &fl->maps, node) { in fastrpc_device_release()
1192 list_for_each_entry_safe(buf, b, &fl->mmaps, node) { in fastrpc_device_release()
1197 fastrpc_session_free(cctx, fl->sctx); in fastrpc_device_release()
1200 mutex_destroy(&fl->mutex); in fastrpc_device_release()
1201 kfree(fl); in fastrpc_device_release()
1210 struct fastrpc_user *fl = NULL; in fastrpc_device_open() local
1213 fl = kzalloc(sizeof(*fl), GFP_KERNEL); in fastrpc_device_open()
1214 if (!fl) in fastrpc_device_open()
1220 filp->private_data = fl; in fastrpc_device_open()
1221 spin_lock_init(&fl->lock); in fastrpc_device_open()
1222 mutex_init(&fl->mutex); in fastrpc_device_open()
1223 INIT_LIST_HEAD(&fl->pending); in fastrpc_device_open()
1224 INIT_LIST_HEAD(&fl->maps); in fastrpc_device_open()
1225 INIT_LIST_HEAD(&fl->mmaps); in fastrpc_device_open()
1226 INIT_LIST_HEAD(&fl->user); in fastrpc_device_open()
1227 fl->tgid = current->tgid; in fastrpc_device_open()
1228 fl->cctx = cctx; in fastrpc_device_open()
1230 fl->sctx = fastrpc_session_alloc(cctx); in fastrpc_device_open()
1231 if (!fl->sctx) { in fastrpc_device_open()
1233 mutex_destroy(&fl->mutex); in fastrpc_device_open()
1234 kfree(fl); in fastrpc_device_open()
1240 list_add_tail(&fl->user, &cctx->users); in fastrpc_device_open()
1246 static int fastrpc_dmabuf_alloc(struct fastrpc_user *fl, char __user *argp) in fastrpc_dmabuf_alloc() argument
1256 err = fastrpc_buf_alloc(fl, fl->sctx->dev, bp.size, &buf); in fastrpc_dmabuf_alloc()
1284 static int fastrpc_init_attach(struct fastrpc_user *fl, int pd) in fastrpc_init_attach() argument
1287 int tgid = fl->tgid; in fastrpc_init_attach()
1295 fl->pd = pd; in fastrpc_init_attach()
1297 return fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, in fastrpc_init_attach()
1301 static int fastrpc_invoke(struct fastrpc_user *fl, char __user *argp) in fastrpc_invoke() argument
1325 err = fastrpc_internal_invoke(fl, false, inv.handle, inv.sc, args); in fastrpc_invoke()
1331 static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, in fastrpc_req_munmap_impl() argument
1337 struct device *dev = fl->sctx->dev; in fastrpc_req_munmap_impl()
1341 spin_lock(&fl->lock); in fastrpc_req_munmap_impl()
1342 list_for_each_entry_safe(buf, b, &fl->mmaps, node) { in fastrpc_req_munmap_impl()
1347 spin_unlock(&fl->lock); in fastrpc_req_munmap_impl()
1354 req_msg.pgid = fl->tgid; in fastrpc_req_munmap_impl()
1362 err = fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, in fastrpc_req_munmap_impl()
1366 spin_lock(&fl->lock); in fastrpc_req_munmap_impl()
1368 spin_unlock(&fl->lock); in fastrpc_req_munmap_impl()
1377 static int fastrpc_req_munmap(struct fastrpc_user *fl, char __user *argp) in fastrpc_req_munmap() argument
1384 return fastrpc_req_munmap_impl(fl, &req); in fastrpc_req_munmap()
1387 static int fastrpc_req_mmap(struct fastrpc_user *fl, char __user *argp) in fastrpc_req_mmap() argument
1396 struct device *dev = fl->sctx->dev; in fastrpc_req_mmap()
1413 err = fastrpc_buf_alloc(fl, fl->sctx->dev, req.size, &buf); in fastrpc_req_mmap()
1419 req_msg.pgid = fl->tgid; in fastrpc_req_mmap()
1437 err = fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, in fastrpc_req_mmap()
1450 spin_lock(&fl->lock); in fastrpc_req_mmap()
1451 list_add_tail(&buf->node, &fl->mmaps); in fastrpc_req_mmap()
1452 spin_unlock(&fl->lock); in fastrpc_req_mmap()
1458 fastrpc_req_munmap_impl(fl, &req_unmap); in fastrpc_req_mmap()
1476 struct fastrpc_user *fl = (struct fastrpc_user *)file->private_data; in fastrpc_device_ioctl() local
1482 err = fastrpc_invoke(fl, argp); in fastrpc_device_ioctl()
1485 err = fastrpc_init_attach(fl, AUDIO_PD); in fastrpc_device_ioctl()
1488 err = fastrpc_init_attach(fl, SENSORS_PD); in fastrpc_device_ioctl()
1491 err = fastrpc_init_create_process(fl, argp); in fastrpc_device_ioctl()
1494 err = fastrpc_dmabuf_alloc(fl, argp); in fastrpc_device_ioctl()
1497 err = fastrpc_req_mmap(fl, argp); in fastrpc_device_ioctl()
1500 err = fastrpc_req_munmap(fl, argp); in fastrpc_device_ioctl()