Example #1
0
void *cc_config_status_via(void *payload, void *rcvbuf, ib_portid_t * portid,
                           unsigned attrid, unsigned mod, unsigned timeout,
                           int *rstatus, const struct ibmad_port * srcport,
                           uint64_t cckey)
{
	ib_rpc_cc_t rpc = { 0 };
	void *res;

	DEBUG("attr 0x%x mod 0x%x route %s", attrid, mod, portid2str(portid));
	rpc.method = IB_MAD_METHOD_SET;
	rpc.attr.id = attrid;
	rpc.attr.mod = mod;
	rpc.timeout = timeout;
	if (attrid == IB_CC_ATTR_CONGESTION_LOG) {
		rpc.datasz = IB_CC_LOG_DATA_SZ;
		rpc.dataoffs = IB_CC_LOG_DATA_OFFS;
	}
	else {
		rpc.datasz = IB_CC_DATA_SZ;
		rpc.dataoffs = IB_CC_DATA_OFFS;
	}
	rpc.mgtclass = IB_CC_CLASS;
	rpc.cckey = cckey;

	portid->qp = 1;
	if (!portid->qkey)
		portid->qkey = IB_DEFAULT_QP1_QKEY;

	res = mad_rpc(srcport, (ib_rpc_t *)&rpc, portid, payload, rcvbuf);
	if (rstatus)
		*rstatus = rpc.rstatus;

	return res;
}
Example #2
0
uint8_t *smp_set_status_via(void *data, ib_portid_t * portid, unsigned attrid,
			    unsigned mod, unsigned timeout, int *rstatus,
			    const struct ibmad_port *srcport)
{
	ib_rpc_t rpc = { 0 };
	uint8_t *res;

	DEBUG("attr 0x%x mod 0x%x route %s", attrid, mod, portid2str(portid));
	if ((portid->lid <= 0) ||
	    (portid->drpath.drslid == 0xffff) ||
	    (portid->drpath.drdlid == 0xffff))
		rpc.mgtclass = IB_SMI_DIRECT_CLASS;	/* direct SMI */
	else
		rpc.mgtclass = IB_SMI_CLASS;	/* Lid routed SMI */

	rpc.method = IB_MAD_METHOD_SET;
	rpc.attr.id = attrid;
	rpc.attr.mod = mod;
	rpc.timeout = timeout;
	rpc.datasz = IB_SMP_DATA_SIZE;
	rpc.dataoffs = IB_SMP_DATA_OFFS;
	rpc.mkey = srcport->smp_mkey;

	portid->sl = 0;
	portid->qp = 0;

	res = mad_rpc(srcport, &rpc, portid, data, data);
	if (rstatus)
		*rstatus = rpc.rstatus;
	return res;
}
Example #3
0
static uint8_t *
pma_query_via(void *rcvbuf, ib_portid_t *dest, int port,
	      unsigned timeout, unsigned id, const void *srcport)
{
	ib_rpc_t rpc = {0};
	int lid = dest->lid;

	DEBUG("lid %d port %d", lid, port);

	if (lid == -1) {
		IBWARN("only lid routed is supported");
		return 0;
	}

	rpc.mgtclass = IB_PERFORMANCE_CLASS;
	rpc.method = IB_MAD_METHOD_GET;
	rpc.attr.id = id;

	/* Same for attribute IDs */
	mad_set_field(rcvbuf, 0, IB_PC_PORT_SELECT_F, port);
	rpc.attr.mod = 0;
	rpc.timeout = timeout;
	rpc.datasz = IB_PC_DATA_SZ;
	rpc.dataoffs = IB_PC_DATA_OFFS;

	dest->qp = 1;
	if (!dest->qkey)
		dest->qkey = IB_DEFAULT_QP1_QKEY;

	if (srcport) {
		return mad_rpc(srcport, &rpc, dest, rcvbuf, rcvbuf);
	} else {
		return madrpc(&rpc, dest, rcvbuf, rcvbuf);
	}
}
Example #4
0
void *
madrpc(ib_rpc_t *rpc, ib_portid_t *dport, void *payload, void *rcvdata)
{
	struct ibmad_port port;

	port.port_id = mad_portid;
	port.class_agents[rpc->mgtclass] = mad_class_agent(rpc->mgtclass);
	return mad_rpc(&port, rpc, dport, payload, rcvdata);
}
Example #5
0
uint8_t *reset_pc_ext(void *rcvbuf, ib_portid_t * dest,
		      int port, unsigned mask, unsigned timeout,
		      const struct ibmad_port * srcport)
{
	ib_rpc_t rpc = { 0 };
	int lid = dest->lid;

	DEBUG("lid %u port %d mask 0x%x", lid, port, mask);

	if (lid == -1) {
		IBWARN("only lid routed is supported");
		return NULL;
	}

	if (!mask)
		mask = ~0;

	rpc.mgtclass = IB_PERFORMANCE_CLASS;
	rpc.method = IB_MAD_METHOD_SET;
	rpc.attr.id = IB_GSI_PORT_COUNTERS_EXT;

	memset(rcvbuf, 0, IB_MAD_SIZE);

	/* Same for attribute IDs */
	mad_set_field(rcvbuf, 0, IB_PC_EXT_PORT_SELECT_F, port);
	mad_set_field(rcvbuf, 0, IB_PC_EXT_COUNTER_SELECT_F, mask);
	rpc.attr.mod = 0;
	rpc.timeout = timeout;
	rpc.datasz = IB_PC_DATA_SZ;
	rpc.dataoffs = IB_PC_DATA_OFFS;
	if (!dest->qp)
		dest->qp = 1;
	if (!dest->qkey)
		dest->qkey = IB_DEFAULT_QP1_QKEY;

	return mad_rpc(srcport, &rpc, dest, rcvbuf, rcvbuf);
}