Lines Matching refs:fedata
55 struct pvcalls_fedata *fedata; member
76 struct pvcalls_fedata *fedata; member
88 struct pvcalls_fedata *fedata,
262 struct pvcalls_fedata *fedata; in pvcalls_back_socket() local
266 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_socket()
278 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_socket()
313 struct pvcalls_fedata *fedata, in pvcalls_new_active_socket() argument
327 map->fedata = fedata; in pvcalls_new_active_socket()
332 ret = xenbus_map_ring_valloc(fedata->dev, &ref, 1, &page); in pvcalls_new_active_socket()
344 ret = xenbus_map_ring_valloc(fedata->dev, map->ring->ref, in pvcalls_new_active_socket()
351 fedata->dev->otherend_id, evtchn, in pvcalls_new_active_socket()
366 down(&fedata->socket_lock); in pvcalls_new_active_socket()
367 list_add_tail(&map->list, &fedata->socket_mappings); in pvcalls_new_active_socket()
368 up(&fedata->socket_lock); in pvcalls_new_active_socket()
379 down(&fedata->socket_lock); in pvcalls_new_active_socket()
381 pvcalls_back_release_active(fedata->dev, fedata, map); in pvcalls_new_active_socket()
382 up(&fedata->socket_lock); in pvcalls_new_active_socket()
389 struct pvcalls_fedata *fedata; in pvcalls_back_connect() local
396 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_connect()
412 map = pvcalls_new_active_socket(fedata, in pvcalls_back_connect()
423 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_connect()
433 struct pvcalls_fedata *fedata, in pvcalls_back_release_active() argument
458 struct pvcalls_fedata *fedata, in pvcalls_back_release_passive() argument
478 struct pvcalls_fedata *fedata; in pvcalls_back_release() local
484 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_release()
486 down(&fedata->socket_lock); in pvcalls_back_release()
487 list_for_each_entry_safe(map, n, &fedata->socket_mappings, list) { in pvcalls_back_release()
490 up(&fedata->socket_lock); in pvcalls_back_release()
491 ret = pvcalls_back_release_active(dev, fedata, map); in pvcalls_back_release()
495 mappass = radix_tree_lookup(&fedata->socketpass_mappings, in pvcalls_back_release()
498 radix_tree_delete(&fedata->socketpass_mappings, mappass->id); in pvcalls_back_release()
499 up(&fedata->socket_lock); in pvcalls_back_release()
500 ret = pvcalls_back_release_passive(dev, fedata, mappass); in pvcalls_back_release()
502 up(&fedata->socket_lock); in pvcalls_back_release()
505 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_release()
519 struct pvcalls_fedata *fedata; in __pvcalls_back_accept() local
527 fedata = mappass->fedata; in __pvcalls_back_accept()
554 map = pvcalls_new_active_socket(fedata, in __pvcalls_back_accept()
572 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in __pvcalls_back_accept()
577 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&fedata->ring, notify); in __pvcalls_back_accept()
579 notify_remote_via_irq(fedata->irq); in __pvcalls_back_accept()
587 struct pvcalls_fedata *fedata; in pvcalls_pass_sk_data_ready() local
595 fedata = mappass->fedata; in pvcalls_pass_sk_data_ready()
598 rsp = RING_GET_RESPONSE(&fedata->ring, in pvcalls_pass_sk_data_ready()
599 fedata->ring.rsp_prod_pvt++); in pvcalls_pass_sk_data_ready()
608 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&fedata->ring, notify); in pvcalls_pass_sk_data_ready()
610 notify_remote_via_irq(mappass->fedata->irq); in pvcalls_pass_sk_data_ready()
620 struct pvcalls_fedata *fedata; in pvcalls_back_bind() local
625 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_bind()
650 map->fedata = fedata; in pvcalls_back_bind()
653 down(&fedata->socket_lock); in pvcalls_back_bind()
654 ret = radix_tree_insert(&fedata->socketpass_mappings, map->id, in pvcalls_back_bind()
656 up(&fedata->socket_lock); in pvcalls_back_bind()
674 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_bind()
685 struct pvcalls_fedata *fedata; in pvcalls_back_listen() local
690 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_listen()
692 down(&fedata->socket_lock); in pvcalls_back_listen()
693 map = radix_tree_lookup(&fedata->socketpass_mappings, req->u.listen.id); in pvcalls_back_listen()
694 up(&fedata->socket_lock); in pvcalls_back_listen()
701 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_listen()
712 struct pvcalls_fedata *fedata; in pvcalls_back_accept() local
718 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_accept()
720 down(&fedata->socket_lock); in pvcalls_back_accept()
721 mappass = radix_tree_lookup(&fedata->socketpass_mappings, in pvcalls_back_accept()
723 up(&fedata->socket_lock); in pvcalls_back_accept()
746 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_accept()
757 struct pvcalls_fedata *fedata; in pvcalls_back_poll() local
766 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_poll()
768 down(&fedata->socket_lock); in pvcalls_back_poll()
769 mappass = radix_tree_lookup(&fedata->socketpass_mappings, in pvcalls_back_poll()
771 up(&fedata->socket_lock); in pvcalls_back_poll()
802 rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_poll()
839 struct pvcalls_fedata *fedata; in pvcalls_back_handle_cmd() local
842 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_handle_cmd()
844 &fedata->ring, fedata->ring.rsp_prod_pvt++); in pvcalls_back_handle_cmd()
854 static void pvcalls_back_work(struct pvcalls_fedata *fedata) in pvcalls_back_work() argument
858 struct xenbus_device *dev = fedata->dev; in pvcalls_back_work()
861 while (RING_HAS_UNCONSUMED_REQUESTS(&fedata->ring)) { in pvcalls_back_work()
862 RING_COPY_REQUEST(&fedata->ring, in pvcalls_back_work()
863 fedata->ring.req_cons++, in pvcalls_back_work()
868 &fedata->ring, notify); in pvcalls_back_work()
874 notify_remote_via_irq(fedata->irq); in pvcalls_back_work()
878 RING_FINAL_CHECK_FOR_REQUESTS(&fedata->ring, more); in pvcalls_back_work()
885 struct pvcalls_fedata *fedata = NULL; in pvcalls_back_event() local
889 fedata = dev_get_drvdata(&dev->dev); in pvcalls_back_event()
890 if (fedata) { in pvcalls_back_event()
891 pvcalls_back_work(fedata); in pvcalls_back_event()
927 struct pvcalls_fedata *fedata = NULL; in backend_connect() local
929 fedata = kzalloc(sizeof(struct pvcalls_fedata), GFP_KERNEL); in backend_connect()
930 if (!fedata) in backend_connect()
933 fedata->irq = -1; in backend_connect()
954 fedata->irq = err; in backend_connect()
956 err = request_threaded_irq(fedata->irq, NULL, pvcalls_back_event, in backend_connect()
962 (void **)&fedata->sring); in backend_connect()
966 BACK_RING_INIT(&fedata->ring, fedata->sring, XEN_PAGE_SIZE * 1); in backend_connect()
967 fedata->dev = dev; in backend_connect()
969 INIT_LIST_HEAD(&fedata->socket_mappings); in backend_connect()
970 INIT_RADIX_TREE(&fedata->socketpass_mappings, GFP_KERNEL); in backend_connect()
971 sema_init(&fedata->socket_lock, 1); in backend_connect()
972 dev_set_drvdata(&dev->dev, fedata); in backend_connect()
975 list_add_tail(&fedata->list, &pvcalls_back_global.frontends); in backend_connect()
981 if (fedata->irq >= 0) in backend_connect()
982 unbind_from_irqhandler(fedata->irq, dev); in backend_connect()
983 if (fedata->sring != NULL) in backend_connect()
984 xenbus_unmap_ring_vfree(dev, fedata->sring); in backend_connect()
985 kfree(fedata); in backend_connect()
991 struct pvcalls_fedata *fedata; in backend_disconnect() local
998 fedata = dev_get_drvdata(&dev->dev); in backend_disconnect()
1000 down(&fedata->socket_lock); in backend_disconnect()
1001 list_for_each_entry_safe(map, n, &fedata->socket_mappings, list) { in backend_disconnect()
1003 pvcalls_back_release_active(dev, fedata, map); in backend_disconnect()
1006 radix_tree_for_each_slot(slot, &fedata->socketpass_mappings, &iter, 0) { in backend_disconnect()
1014 radix_tree_delete(&fedata->socketpass_mappings, in backend_disconnect()
1016 pvcalls_back_release_passive(dev, fedata, mappass); in backend_disconnect()
1019 up(&fedata->socket_lock); in backend_disconnect()
1021 unbind_from_irqhandler(fedata->irq, dev); in backend_disconnect()
1022 xenbus_unmap_ring_vfree(dev, fedata->sring); in backend_disconnect()
1024 list_del(&fedata->list); in backend_disconnect()
1025 kfree(fedata); in backend_disconnect()
1228 struct pvcalls_fedata *fedata, *nfedata; in pvcalls_back_fin() local
1231 list_for_each_entry_safe(fedata, nfedata, in pvcalls_back_fin()
1233 backend_disconnect(fedata->dev); in pvcalls_back_fin()