staticint enic_pp_preassociate_rr(struct enic *enic, int vf, struct enic_port_profile *prev_pp, int *restore_pp)
{ struct enic_port_profile *pp; int err; int active = 0;
ENIC_PP_BY_INDEX(enic, vf, pp, &err); if (err) return err;
if (pp->request != PORT_REQUEST_ASSOCIATE) { /* If pre-associate is not part of an associate.
We always disassociate first */
err = enic_pp_handlers[PORT_REQUEST_DISASSOCIATE](enic, vf,
prev_pp, restore_pp); if (err) return err;
*restore_pp = 0;
}
*restore_pp = 0;
err = enic_set_port_profile(enic, vf); if (err) return err;
/* If pre-associate is not part of an associate. */ if (pp->request != PORT_REQUEST_ASSOCIATE) { /* Enable device as standby */
ENIC_DEVCMD_PROXY_BY_INDEX(vf, err, enic, vnic_dev_enable2,
active);
err = enic_dev_status_to_errno(err);
}
return err;
}
staticint enic_pp_associate(struct enic *enic, int vf, struct enic_port_profile *prev_pp, int *restore_pp)
{ struct net_device *netdev = enic->netdev; struct enic_port_profile *pp; int err; int active = 1;
ENIC_PP_BY_INDEX(enic, vf, pp, &err); if (err) return err;
/* Check if a pre-associate was called before */ if (prev_pp->request != PORT_REQUEST_PREASSOCIATE_RR ||
(prev_pp->request == PORT_REQUEST_PREASSOCIATE_RR &&
enic_are_pp_different(prev_pp, pp))) {
err = enic_pp_handlers[PORT_REQUEST_DISASSOCIATE](
enic, vf, prev_pp, restore_pp); if (err) return err;
int enic_process_set_pp_request(struct enic *enic, int vf, struct enic_port_profile *prev_pp, int *restore_pp)
{ struct enic_port_profile *pp; int err;
ENIC_PP_BY_INDEX(enic, vf, pp, &err); if (err) return err;
if (pp->request >= enic_pp_handlers_count
|| !enic_pp_handlers[pp->request]) return -EOPNOTSUPP;
int enic_process_get_pp_request(struct enic *enic, int vf, int request, u16 *response)
{ int err, status = ERR_SUCCESS;
switch (request) {
case PORT_REQUEST_PREASSOCIATE_RR: case PORT_REQUEST_ASSOCIATE:
ENIC_DEVCMD_PROXY_BY_INDEX(vf, err, enic,
vnic_dev_enable2_done, &status); break;
case PORT_REQUEST_DISASSOCIATE:
ENIC_DEVCMD_PROXY_BY_INDEX(vf, err, enic,
vnic_dev_deinit_done, &status); break;
default: return -EINVAL;
}
if (err)
status = err;
switch (status) { case ERR_SUCCESS:
*response = PORT_PROFILE_RESPONSE_SUCCESS; break; case ERR_EINVAL:
*response = PORT_PROFILE_RESPONSE_INVALID; break; case ERR_EBADSTATE:
*response = PORT_PROFILE_RESPONSE_BADSTATE; break; case ERR_ENOMEM:
*response = PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES; break; case ERR_EINPROGRESS:
*response = PORT_PROFILE_RESPONSE_INPROGRESS; break; default:
*response = PORT_PROFILE_RESPONSE_ERROR; break;
}
return 0;
}
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.