void i1480u_bw_alloc_cb(struct uwb_rsv *rsv) { int result = 0; struct i1480u *i1480u = rsv->pal_priv; struct device *dev = &i1480u->usb_iface->dev; struct uwb_dev *target_dev = rsv->target.dev; struct uwb_rc *rc = i1480u->wlp.rc; u8 stream = rsv->stream; int type = rsv->type; int is_owner = rsv->owner == &rc->uwb_dev; unsigned long *bmp = rsv->mas.bm; dev_err(dev, "WLP callback called - sending set ip mas\n"); mutex_lock(&i1480u->options.mutex); switch (rsv->state) { case UWB_RSV_STATE_T_ACCEPTED: case UWB_RSV_STATE_O_ESTABLISHED: result = i1480u_mas_set_dev(target_dev, rc, stream, is_owner, type, bmp); if (result < 0) { dev_err(dev, "MAS reservation failed: %d\n", result); goto out; } if (is_owner) { wlp_tx_hdr_set_delivery_id_type(&i1480u->options.def_tx_hdr, WLP_DRP | stream); wlp_tx_hdr_set_rts_cts(&i1480u->options.def_tx_hdr, 0); } break; case UWB_RSV_STATE_NONE: result = i1480u_mas_set_dev(target_dev, rc, stream, is_owner, type, bmp); if (result < 0) dev_err(dev, "MAS reservation failed: %d\n", result); wlp_tx_hdr_set_delivery_id_type(&i1480u->options.def_tx_hdr, i1480u->options.pca_base_priority); wlp_tx_hdr_set_rts_cts(&i1480u->options.def_tx_hdr, 1); break; default: dev_err(dev, "unexpected WLP reservation state: %s (%d).\n", uwb_rsv_state_str(rsv->state), rsv->state); break; } out: mutex_unlock(&i1480u->options.mutex); return; }
ssize_t uwb_rts_cts_store(struct wlp_options *options, const char *buf, size_t size) { ssize_t result; unsigned value; result = sscanf(buf, "%u\n", &value); if (result != 1) { result = -EINVAL; goto out; } result = -EINVAL; wlp_tx_hdr_set_rts_cts(&options->def_tx_hdr, !!value); result = 0; out: return result < 0 ? result : size; }