}
-void netfront_accelerator_call_backend_changed(struct netfront_info *np,
- struct xenbus_device *dev,
- enum xenbus_state backend_state)
-{
- struct netfront_accel_hooks *hooks;
- unsigned flags;
-
- /*
- * Call the backend_changed accelerator hook. The use count
- * for the accelerator's hooks is incremented for the duration
- * of the call to prevent the accelerator being able to modify
- * the hooks in the middle (by, for example, unloading)
- */
- if (np->accel_vif_state.hooks) {
- spin_lock_irqsave(&np->accelerator->vif_states_lock, flags);
- hooks = np->accel_vif_state.hooks;
- if (hooks) {
- kref_get(&np->accel_vif_state.vif_kref);
- spin_unlock_irqrestore
- (&np->accelerator->vif_states_lock, flags);
-
- np->accel_vif_state.hooks->backend_changed
- (dev, backend_state);
-
- kref_put(&np->accel_vif_state.vif_kref,
- vif_kref_release);
- } else {
- spin_unlock_irqrestore
- (&np->accelerator->vif_states_lock, flags);
- }
- }
-}
-
-
void netfront_accelerator_call_stop_napi_irq(struct netfront_info *np,
struct net_device *dev)
{
xenbus_frontend_closed(dev);
break;
}
-
- netfront_accelerator_call_backend_changed(np, dev, backend_state);
}
/** Send a packet on a net device to encourage switches to learn the
* remove: Opposite of new_device
*/
int (*remove)(struct xenbus_device *dev);
- /*
- * backend_changed: Callback from watch based on backend's
- * xenbus state changing
- */
- void (*backend_changed)(struct xenbus_device *dev,
- enum xenbus_state backend_state);
/*
* The net_device is being polled, check the accelerated
* hardware for any pending packets
void netfront_accelerator_resume(struct netfront_info *np,
struct xenbus_device *dev);
extern
-void netfront_accelerator_call_backend_changed(struct netfront_info *np,
- struct xenbus_device *dev,
- enum xenbus_state backend_state);
-extern
void netfront_accelerator_call_stop_napi_irq(struct netfront_info *np,
struct net_device *dev);
extern