Lines Matching refs:be
41 static int connect_rings(struct backend_info *be, struct xenvif_queue *queue);
42 static void connect(struct backend_info *be);
43 static int read_xenbus_vif_flags(struct backend_info *be);
44 static int backend_create_xenvif(struct backend_info *be);
45 static void unregister_hotplug_status_watch(struct backend_info *be);
47 static void set_backend_state(struct backend_info *be,
231 struct backend_info *be = dev_get_drvdata(&dev->dev); in netback_remove() local
233 set_backend_state(be, XenbusStateClosed); in netback_remove()
235 unregister_hotplug_status_watch(be); in netback_remove()
236 if (be->vif) { in netback_remove()
238 xen_unregister_watchers(be->vif); in netback_remove()
240 xenvif_free(be->vif); in netback_remove()
241 be->vif = NULL; in netback_remove()
243 kfree(be->hotplug_script); in netback_remove()
244 kfree(be); in netback_remove()
262 struct backend_info *be = kzalloc(sizeof(struct backend_info), in netback_probe() local
264 if (!be) { in netback_probe()
270 be->dev = dev; in netback_probe()
271 dev_set_drvdata(&dev->dev, be); in netback_probe()
369 be->hotplug_script = script; in netback_probe()
375 be->state = XenbusStateInitWait; in netback_probe()
378 err = backend_create_xenvif(be); in netback_probe()
402 struct backend_info *be = dev_get_drvdata(&xdev->dev); in netback_uevent() local
404 if (!be) in netback_uevent()
407 if (add_uevent_var(env, "script=%s", be->hotplug_script)) in netback_uevent()
410 if (!be->vif) in netback_uevent()
413 return add_uevent_var(env, "vif=%s", be->vif->dev->name); in netback_uevent()
417 static int backend_create_xenvif(struct backend_info *be) in backend_create_xenvif() argument
421 struct xenbus_device *dev = be->dev; in backend_create_xenvif()
424 if (be->vif != NULL) in backend_create_xenvif()
439 be->vif = vif; in backend_create_xenvif()
445 static void backend_disconnect(struct backend_info *be) in backend_disconnect() argument
447 if (be->vif) { in backend_disconnect()
448 xen_unregister_watchers(be->vif); in backend_disconnect()
450 xenvif_debugfs_delif(be->vif); in backend_disconnect()
452 xenvif_disconnect(be->vif); in backend_disconnect()
456 static void backend_connect(struct backend_info *be) in backend_connect() argument
458 if (be->vif) in backend_connect()
459 connect(be); in backend_connect()
462 static inline void backend_switch_state(struct backend_info *be, in backend_switch_state() argument
465 struct xenbus_device *dev = be->dev; in backend_switch_state()
468 be->state = state; in backend_switch_state()
473 if (!be->have_hotplug_status_watch) in backend_switch_state()
497 static void set_backend_state(struct backend_info *be, in set_backend_state() argument
500 while (be->state != state) { in set_backend_state()
501 switch (be->state) { in set_backend_state()
507 be->dev->nodename); in set_backend_state()
508 backend_switch_state(be, XenbusStateInitWait); in set_backend_state()
511 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
520 backend_connect(be); in set_backend_state()
521 backend_switch_state(be, XenbusStateConnected); in set_backend_state()
525 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
536 backend_disconnect(be); in set_backend_state()
537 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
548 backend_switch_state(be, XenbusStateClosed); in set_backend_state()
566 struct backend_info *be = dev_get_drvdata(&dev->dev); in frontend_changed() local
570 be->frontend_state = frontend_state; in frontend_changed()
574 set_backend_state(be, XenbusStateInitWait); in frontend_changed()
581 set_backend_state(be, XenbusStateConnected); in frontend_changed()
585 set_backend_state(be, XenbusStateClosing); in frontend_changed()
589 set_backend_state(be, XenbusStateClosed); in frontend_changed()
594 set_backend_state(be, XenbusStateClosed); in frontend_changed()
720 static void unregister_hotplug_status_watch(struct backend_info *be) in unregister_hotplug_status_watch() argument
722 if (be->have_hotplug_status_watch) { in unregister_hotplug_status_watch()
723 unregister_xenbus_watch(&be->hotplug_status_watch); in unregister_hotplug_status_watch()
724 kfree(be->hotplug_status_watch.node); in unregister_hotplug_status_watch()
726 be->have_hotplug_status_watch = 0; in unregister_hotplug_status_watch()
733 struct backend_info *be = container_of(watch, in hotplug_status_changed() local
739 str = xenbus_read(XBT_NIL, be->dev->nodename, "hotplug-status", &len); in hotplug_status_changed()
744 xenbus_switch_state(be->dev, be->state); in hotplug_status_changed()
747 unregister_hotplug_status_watch(be); in hotplug_status_changed()
752 static void connect(struct backend_info *be) in connect() argument
755 struct xenbus_device *dev = be->dev; in connect()
777 err = xen_net_read_mac(dev, be->vif->fe_dev_addr); in connect()
784 xen_unregister_watchers(be->vif); in connect()
785 xen_register_watchers(dev, be->vif); in connect()
786 read_xenbus_vif_flags(be); in connect()
789 be->vif->queues = vzalloc(requested_num_queues * in connect()
791 if (!be->vif->queues) { in connect()
797 be->vif->num_queues = requested_num_queues; in connect()
798 be->vif->stalled_queues = requested_num_queues; in connect()
801 queue = &be->vif->queues[queue_index]; in connect()
802 queue->vif = be->vif; in connect()
805 be->vif->dev->name, queue->id); in connect()
815 be->vif->num_queues = queue_index; in connect()
823 err = connect_rings(be, queue); in connect()
830 be->vif->num_queues = queue_index; in connect()
836 xenvif_debugfs_addif(be->vif); in connect()
843 netif_set_real_num_tx_queues(be->vif->dev, requested_num_queues); in connect()
844 netif_set_real_num_rx_queues(be->vif->dev, requested_num_queues); in connect()
847 xenvif_carrier_on(be->vif); in connect()
849 unregister_hotplug_status_watch(be); in connect()
850 err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, in connect()
854 be->have_hotplug_status_watch = 1; in connect()
856 netif_tx_wake_all_queues(be->vif->dev); in connect()
861 if (be->vif->num_queues > 0) in connect()
862 xenvif_disconnect(be->vif); /* Clean up existing queues */ in connect()
863 vfree(be->vif->queues); in connect()
864 be->vif->queues = NULL; in connect()
865 be->vif->num_queues = 0; in connect()
870 static int connect_rings(struct backend_info *be, struct xenvif_queue *queue) in connect_rings() argument
872 struct xenbus_device *dev = be->dev; in connect_rings()
950 static int read_xenbus_vif_flags(struct backend_info *be) in read_xenbus_vif_flags() argument
952 struct xenvif *vif = be->vif; in read_xenbus_vif_flags()
953 struct xenbus_device *dev = be->dev; in read_xenbus_vif_flags()
979 be->vif->drain_timeout = msecs_to_jiffies(30); in read_xenbus_vif_flags()
980 be->vif->stall_timeout = 0; in read_xenbus_vif_flags()