Exemplo n.º 1
0
static int get_ts_correction(ef_driver_handle vi_dh, int res_id,
			     int* rx_ts_correction)
{
  ci_resource_op_t op;
  int rc;
  op.op = CI_RSOP_VI_GET_RX_TS_CORRECTION;
  op.id = efch_make_resource_id(res_id);
  rc = ci_resource_op(vi_dh, &op);
  *rx_ts_correction = op.u.vi_rx_ts_correction.out_rx_ts_correction;
  return rc;
}
Exemplo n.º 2
0
unsigned ef_vi_mtu(ef_vi* vi, ef_driver_handle fd)
{
  ci_resource_op_t op;
  int rc;

  op.op = CI_RSOP_VI_GET_MTU;
  op.id = efch_make_resource_id(vi->vi_resource_id);
  rc = ci_resource_op(fd, &op);
  if( rc < 0 )
    LOGV(ef_log("%s: ci_resource_op %d", __FUNCTION__, rc));
  return op.u.vi_get_mtu.out_mtu;
}
Exemplo n.º 3
0
int ef_vi_get_mac(ef_vi* vi, ef_driver_handle dh, void* mac_out)
{
  ci_resource_op_t op;
  int rc;

  op.op = CI_RSOP_VI_GET_MAC;
  op.id = efch_make_resource_id(vi->vi_resource_id);
  rc = ci_resource_op(dh, &op);
  if( rc < 0 )
    LOGV(ef_log("%s: ci_resource_op %d", __FUNCTION__, rc));
  memcpy(mac_out, op.u.vi_get_mac.out_mac, 6);
  return rc;
}
Exemplo n.º 4
0
int ef_eventq_put(unsigned evq_id, ef_driver_handle fd, unsigned ev)
{
  ci_resource_op_t  op;
  int64_t ev64;

  EF_VI_BUG_ON((ev & EFVI_FALCON_EVENT_SW_DATA_MASK) != ev);
  ev64 = ev;

  op.op = CI_RSOP_EVENTQ_PUT;
  op.id = efch_make_resource_id(evq_id);
  op.u.evq_put.ev = cpu_to_le64(ev64);
  return ci_resource_op(fd, &op);
}
Exemplo n.º 5
0
int ef_vi_flush(ef_vi* ep, ef_driver_handle fd)
{
  ci_resource_op_t op;
  int rc;

  op.op = CI_RSOP_PT_ENDPOINT_FLUSH;
  op.id = efch_make_resource_id(ep->vi_resource_id);
  rc = ci_resource_op(fd, &op);
  if( rc < 0 ) {
    LOGV(ef_log("ef_vi_flush: ci_resource_op %d", rc));
    return rc;
  }

  return 0;
}
Exemplo n.º 6
0
int ef_vi_pace(ef_vi* ep, ef_driver_handle fd, int val)
{
  ci_resource_op_t op;
  int rc;

  op.op = CI_RSOP_PT_ENDPOINT_PACE;
  op.id = efch_make_resource_id(ep->vi_resource_id);
  op.u.pt.pace = val;
  rc = ci_resource_op(fd, &op);
  if( rc < 0 ) {
    LOGV(ef_log("ef_vi_pace: ci_resource_op %d", rc));
    return rc;
  }

  return 0;
}
Exemplo n.º 7
0
static int ef_filter_del(ef_driver_handle dh, int resource_id,
			 ef_filter_cookie *filter_cookie)
{
	ci_resource_op_t op;

	if( filter_cookie->filter_type == EF_FILTER_PORT_SNIFF ) {
		op.op = CI_RSOP_PT_SNIFF;
		op.id = efch_make_resource_id(resource_id);
		op.u.pt_sniff.enable = 0;
	}
	if( filter_cookie->filter_type == EF_FILTER_TX_PORT_SNIFF ) {
		op.op = CI_RSOP_TX_PT_SNIFF;
		op.id = efch_make_resource_id(resource_id);
		op.u.tx_pt_sniff.enable = 0;
	}
	else {
		op.op = CI_RSOP_FILTER_DEL;
		op.id = efch_make_resource_id(resource_id);
		op.u.filter_del.filter_id = filter_cookie->filter_id;
	}
	return ci_resource_op(dh, &op);
}
Exemplo n.º 8
0
static int ef_filter_add(ef_driver_handle dh, int resource_id,
			 const ef_filter_spec *fs,
			 ef_filter_cookie *filter_cookie_out)
{
	ci_resource_op_t op;
	int rc;

	op.id = efch_make_resource_id(resource_id);
	op.u.filter_add.flags =
		( (fs->flags & EF_FILTER_FLAG_REPLACE) ?
		  CI_RSOP_FILTER_ADD_FLAG_REPLACE : 0 ) |
		( (fs->flags & EF_FILTER_FLAG_MCAST_LOOP_RECEIVE) ?
		  CI_RSOP_FILTER_ADD_FLAG_MCAST_LOOP_RECEIVE : 0);
	switch (fs->type) {
	case EF_FILTER_IP4 | EF_FILTER_VLAN:
		op.op = CI_RSOP_FILTER_ADD_IP4_VLAN;
		op.u.filter_add.ip4.protocol = fs->data[0];
		op.u.filter_add.ip4.host_be32 = fs->data[1];
		op.u.filter_add.ip4.port_be16 = fs->data[2];
		op.u.filter_add.ip4.rhost_be32 = fs->data[3];
		op.u.filter_add.ip4.rport_be16 = fs->data[4];
		op.u.filter_add.mac.vlan_id = fs->data[5];
		break;
	case EF_FILTER_IP4:
		op.op = CI_RSOP_FILTER_ADD_IP4;
		op.u.filter_add.ip4.protocol = fs->data[0];
		op.u.filter_add.ip4.host_be32 = fs->data[1];
		op.u.filter_add.ip4.port_be16 = fs->data[2];
		op.u.filter_add.ip4.rhost_be32 = fs->data[3];
		op.u.filter_add.ip4.rport_be16 = fs->data[4];
		break;
	case EF_FILTER_MAC:
		op.op = CI_RSOP_FILTER_ADD_MAC;
		op.u.filter_add.mac.vlan_id = fs->data[0];
		memcpy(op.u.filter_add.mac.mac, &fs->data[1], 6);
		break;
	case EF_FILTER_ALL_UNICAST:
		op.op = CI_RSOP_FILTER_ADD_ALL_UNICAST;
		break;
	case EF_FILTER_ALL_MULTICAST:
		op.op = CI_RSOP_FILTER_ADD_ALL_MULTICAST;
		break;
	case EF_FILTER_MISMATCH_UNICAST | EF_FILTER_VLAN:
		op.op = CI_RSOP_FILTER_ADD_MISMATCH_UNICAST_VLAN;
		op.u.filter_add.mac.vlan_id = fs->data[5];
		break;
	case EF_FILTER_MISMATCH_UNICAST:
		op.op = CI_RSOP_FILTER_ADD_MISMATCH_UNICAST;
		break;
	case EF_FILTER_MISMATCH_MULTICAST | EF_FILTER_VLAN:
		op.op = CI_RSOP_FILTER_ADD_MISMATCH_MULTICAST_VLAN;
		op.u.filter_add.mac.vlan_id = fs->data[5];
		break;
	case EF_FILTER_MISMATCH_MULTICAST:
		op.op = CI_RSOP_FILTER_ADD_MISMATCH_MULTICAST;
		break;
	case EF_FILTER_PORT_SNIFF:
		op.op = CI_RSOP_PT_SNIFF;
		op.u.pt_sniff.enable = 1;
		op.u.pt_sniff.promiscuous = fs->data[0];
		break;
	case EF_FILTER_TX_PORT_SNIFF:
		op.op = CI_RSOP_TX_PT_SNIFF;
		op.u.tx_pt_sniff.enable = 1;
		break;
	case EF_FILTER_BLOCK_KERNEL:
		op.op = CI_RSOP_FILTER_ADD_BLOCK_KERNEL;
		break;
	case EF_FILTER_BLOCK_KERNEL_UNICAST:
		op.op = CI_RSOP_FILTER_ADD_BLOCK_KERNEL_UNICAST;
		break;
	case EF_FILTER_BLOCK_KERNEL_MULTICAST:
		op.op = CI_RSOP_FILTER_ADD_BLOCK_KERNEL_MULTICAST;
		break;
	default:
		return -EINVAL;
	}
	rc = ci_resource_op(dh, &op);
	if( rc == 0 && filter_cookie_out != NULL ) {
		/* SNIFF does not return an ID.  The
		 * filter_id field is ignored when removing,
		 * but let's set it to something that will not be
		 * confused with a real ID
		 */
		if( fs->type == EF_FILTER_PORT_SNIFF ||
                    fs->type == EF_FILTER_TX_PORT_SNIFF )
			filter_cookie_out->filter_id = -1;
		else
			filter_cookie_out->filter_id = 
				op.u.filter_add.out_filter_id;
		filter_cookie_out->filter_type = fs->type;
	}
	return rc;
}