34 static void backend_create_xenvif(
struct backend_info *be);
35 static void unregister_hotplug_status_watch(
struct backend_info *be);
41 unregister_hotplug_status_watch(be);
69 "allocating backend structure");
87 message =
"writing feature-sg";
88 goto abort_transaction;
94 message =
"writing feature-gso-tcpv4";
95 goto abort_transaction;
100 "feature-rx-copy",
"%d", 1);
102 message =
"writing feature-rx-copy";
103 goto abort_transaction;
111 "feature-rx-flip",
"%d", 0);
113 message =
"writing feature-rx-flip";
114 goto abort_transaction;
130 backend_create_xenvif(be);
157 int err = PTR_ERR(val);
175 static void backend_create_xenvif(
struct backend_info *be)
191 if (IS_ERR(be->
vif)) {
192 err = PTR_ERR(be->
vif);
225 switch (frontend_state) {
240 backend_create_xenvif(be);
248 disconnect_backend(dev);
270 unsigned long *
bytes,
unsigned long *usec)
286 if ((s == e) || (*e !=
','))
291 if ((s == e) || (*e !=
'\0'))
301 pr_warn(
"Failed to parse network rate limit. Traffic unlimited.\n");
307 char *
s, *
e, *macstr;
312 return PTR_ERR(macstr);
316 if ((s == e) || (*e != ((i == ETH_ALEN-1) ?
'\0' :
':'))) {
327 static void unregister_hotplug_status_watch(
struct backend_info *be)
338 unsigned int vec_size)
349 if (len ==
sizeof(
"connected")-1 && !
memcmp(str,
"connected", len)) {
352 unregister_hotplug_status_watch(be);
362 err = connect_rings(be);
366 err = xen_net_read_mac(dev, be->
vif->fe_dev_addr);
372 xen_net_read_rate(dev, &be->
vif->credit_bytes,
373 &be->
vif->credit_usec);
374 be->
vif->remaining_credit = be->
vif->credit_bytes;
376 unregister_hotplug_status_watch(be);
378 hotplug_status_changed,
379 "%s/%s", dev->
nodename,
"hotplug-status");
387 netif_wake_queue(be->
vif->dev);
395 unsigned long tx_ring_ref, rx_ring_ref;
396 unsigned int evtchn, rx_copy;
401 "tx-ring-ref",
"%lu", &tx_ring_ref,
402 "rx-ring-ref",
"%lu", &rx_ring_ref,
403 "event-channel",
"%u", &evtchn,
NULL);
406 "reading %s/ring-ref and event-channel",
425 if (vif->
dev->tx_queue_len != 0) {
427 "feature-rx-notify",
"%d", &val) < 0)
433 vif->
dev->tx_queue_len = 1;
460 "mapping shared-frames %lu/%lu port %u",
461 tx_ring_ref, rx_ring_ref, evtchn);
478 .probe = netback_probe,
479 .
remove = netback_remove,
480 .uevent = netback_uevent,
481 .otherend_changed = frontend_changed,