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()
361 be->hotplug_script = script; in netback_probe()
367 be->state = XenbusStateInitWait; in netback_probe()
370 err = backend_create_xenvif(be); in netback_probe()
394 struct backend_info *be = dev_get_drvdata(&xdev->dev); in netback_uevent() local
396 if (!be) in netback_uevent()
399 if (add_uevent_var(env, "script=%s", be->hotplug_script)) in netback_uevent()
402 if (!be->vif) in netback_uevent()
405 return add_uevent_var(env, "vif=%s", be->vif->dev->name); in netback_uevent()
409 static int backend_create_xenvif(struct backend_info *be) in backend_create_xenvif() argument
413 struct xenbus_device *dev = be->dev; in backend_create_xenvif()
416 if (be->vif != NULL) in backend_create_xenvif()
431 be->vif = vif; in backend_create_xenvif()
437 static void backend_disconnect(struct backend_info *be) in backend_disconnect() argument
439 if (be->vif) { in backend_disconnect()
440 xen_unregister_watchers(be->vif); in backend_disconnect()
442 xenvif_debugfs_delif(be->vif); in backend_disconnect()
444 xenvif_disconnect(be->vif); in backend_disconnect()
448 static void backend_connect(struct backend_info *be) in backend_connect() argument
450 if (be->vif) in backend_connect()
451 connect(be); in backend_connect()
454 static inline void backend_switch_state(struct backend_info *be, in backend_switch_state() argument
457 struct xenbus_device *dev = be->dev; in backend_switch_state()
460 be->state = state; in backend_switch_state()
465 if (!be->have_hotplug_status_watch) in backend_switch_state()
489 static void set_backend_state(struct backend_info *be, in set_backend_state() argument
492 while (be->state != state) { in set_backend_state()
493 switch (be->state) { in set_backend_state()
499 be->dev->nodename); in set_backend_state()
500 backend_switch_state(be, XenbusStateInitWait); in set_backend_state()
503 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
512 backend_connect(be); in set_backend_state()
513 backend_switch_state(be, XenbusStateConnected); in set_backend_state()
517 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
528 backend_disconnect(be); in set_backend_state()
529 backend_switch_state(be, XenbusStateClosing); in set_backend_state()
540 backend_switch_state(be, XenbusStateClosed); in set_backend_state()
558 struct backend_info *be = dev_get_drvdata(&dev->dev); in frontend_changed() local
562 be->frontend_state = frontend_state; in frontend_changed()
566 set_backend_state(be, XenbusStateInitWait); in frontend_changed()
573 set_backend_state(be, XenbusStateConnected); in frontend_changed()
577 set_backend_state(be, XenbusStateClosing); in frontend_changed()
581 set_backend_state(be, XenbusStateClosed); in frontend_changed()
586 set_backend_state(be, XenbusStateClosed); in frontend_changed()
712 static void unregister_hotplug_status_watch(struct backend_info *be) in unregister_hotplug_status_watch() argument
714 if (be->have_hotplug_status_watch) { in unregister_hotplug_status_watch()
715 unregister_xenbus_watch(&be->hotplug_status_watch); in unregister_hotplug_status_watch()
716 kfree(be->hotplug_status_watch.node); in unregister_hotplug_status_watch()
718 be->have_hotplug_status_watch = 0; in unregister_hotplug_status_watch()
725 struct backend_info *be = container_of(watch, in hotplug_status_changed() local
731 str = xenbus_read(XBT_NIL, be->dev->nodename, "hotplug-status", &len); in hotplug_status_changed()
736 xenbus_switch_state(be->dev, be->state); in hotplug_status_changed()
739 unregister_hotplug_status_watch(be); in hotplug_status_changed()
744 static void connect(struct backend_info *be) in connect() argument
747 struct xenbus_device *dev = be->dev; in connect()
769 err = xen_net_read_mac(dev, be->vif->fe_dev_addr); in connect()
776 xen_unregister_watchers(be->vif); in connect()
777 xen_register_watchers(dev, be->vif); in connect()
778 read_xenbus_vif_flags(be); in connect()
781 be->vif->queues = vzalloc(requested_num_queues * in connect()
783 be->vif->num_queues = requested_num_queues; in connect()
784 be->vif->stalled_queues = requested_num_queues; in connect()
787 queue = &be->vif->queues[queue_index]; in connect()
788 queue->vif = be->vif; in connect()
791 be->vif->dev->name, queue->id); in connect()
801 be->vif->num_queues = queue_index; in connect()
809 err = connect_rings(be, queue); in connect()
816 be->vif->num_queues = queue_index; in connect()
822 xenvif_debugfs_addif(be->vif); in connect()
829 netif_set_real_num_tx_queues(be->vif->dev, requested_num_queues); in connect()
830 netif_set_real_num_rx_queues(be->vif->dev, requested_num_queues); in connect()
833 xenvif_carrier_on(be->vif); in connect()
835 unregister_hotplug_status_watch(be); in connect()
836 err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, in connect()
840 be->have_hotplug_status_watch = 1; in connect()
842 netif_tx_wake_all_queues(be->vif->dev); in connect()
847 if (be->vif->num_queues > 0) in connect()
848 xenvif_disconnect(be->vif); /* Clean up existing queues */ in connect()
849 vfree(be->vif->queues); in connect()
850 be->vif->queues = NULL; in connect()
851 be->vif->num_queues = 0; in connect()
856 static int connect_rings(struct backend_info *be, struct xenvif_queue *queue) in connect_rings() argument
858 struct xenbus_device *dev = be->dev; in connect_rings()
936 static int read_xenbus_vif_flags(struct backend_info *be) in read_xenbus_vif_flags() argument
938 struct xenvif *vif = be->vif; in read_xenbus_vif_flags()
939 struct xenbus_device *dev = be->dev; in read_xenbus_vif_flags()
965 be->vif->drain_timeout = msecs_to_jiffies(30); in read_xenbus_vif_flags()
966 be->vif->stall_timeout = 0; in read_xenbus_vif_flags()