static int sock_ctx_control(struct fid *fid, int command, void *arg) { struct fid_ep *ep; struct sock_tx_ctx *tx_ctx; struct sock_rx_ctx *rx_ctx; int ret; switch (fid->fclass) { case FI_CLASS_TX_CTX: tx_ctx = container_of(fid, struct sock_tx_ctx, fid.ctx.fid); switch (command) { case FI_GETOPSFLAG: ret = sock_getopflags(&tx_ctx->attr, NULL, (uint64_t *) arg); if (ret) return -EINVAL; break; case FI_SETOPSFLAG: ret = sock_setopflags(&tx_ctx->attr, NULL, *(uint64_t *) arg); if (ret) return -EINVAL; break; case FI_ENABLE: ep = container_of(fid, struct fid_ep, fid); return sock_ctx_enable(ep); break; default: return -FI_ENOSYS; } break; case FI_CLASS_RX_CTX: case FI_CLASS_SRX_CTX: rx_ctx = container_of(fid, struct sock_rx_ctx, ctx.fid); switch (command) { case FI_GETOPSFLAG: ret = sock_getopflags(NULL, &rx_ctx->attr, (uint64_t *) arg); if (ret) return -EINVAL; break; case FI_SETOPSFLAG: ret = sock_setopflags(NULL, &rx_ctx->attr, *(uint64_t *) arg); if (ret) return -EINVAL; break; case FI_ENABLE: ep = container_of(fid, struct fid_ep, fid); return sock_ctx_enable(ep); break; default: return -FI_ENOSYS; } break; default: return -FI_ENOSYS; } return 0; }
static int sock_ctx_control(struct fid *fid, int command, void *arg) { struct fid_ep *ep; struct sock_tx_ctx *tx_ctx; struct sock_rx_ctx *rx_ctx; switch (fid->fclass) { case FI_CLASS_TX_CTX: tx_ctx = container_of(fid, struct sock_tx_ctx, fid.ctx.fid); switch (command) { case FI_GETOPSFLAG: *(uint64_t *) arg = tx_ctx->attr.op_flags; break; case FI_SETOPSFLAG: tx_ctx->attr.op_flags = *(uint64_t *) arg; break; case FI_ENABLE: ep = container_of(fid, struct fid_ep, fid); return sock_ctx_enable(ep); break; default: return -FI_ENOSYS; } break; case FI_CLASS_RX_CTX: rx_ctx = container_of(fid, struct sock_rx_ctx, ctx.fid); switch (command) { case FI_GETOPSFLAG: *(uint64_t *) arg = rx_ctx->attr.op_flags; break; case FI_SETOPSFLAG: rx_ctx->attr.op_flags = *(uint64_t *) arg; break; case FI_ENABLE: ep = container_of(fid, struct fid_ep, fid); return sock_ctx_enable(ep); break; default: return -FI_ENOSYS; } break; case FI_CLASS_STX_CTX: tx_ctx = container_of(fid, struct sock_tx_ctx, fid.stx.fid); switch (command) { case FI_GETOPSFLAG: *(uint64_t *) arg = tx_ctx->attr.op_flags; break; case FI_SETOPSFLAG: tx_ctx->attr.op_flags = *(uint64_t *) arg; break; default: return -FI_ENOSYS; } break; default: return -FI_ENOSYS; } return 0; }