int do_frd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
{
	unsigned int fslnum;
	unsigned int num;
	unsigned int blocking;

	if (argc < 2) {
		cmd_usage(cmdtp);
		return 1;
	}

	fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16);
	blocking = (unsigned int)simple_strtoul (argv[2], NULL, 16);
	if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) {
		puts ("Bad number of FSL\n");
		cmd_usage(cmdtp);
		return 1;
	}

	switch (fslnum) {
#if (XILINX_FSL_NUMBER > 0)
	case 0:
		switch (blocking) {
		case 0:	NGET (num, 0);
			break;
		case 1:	NCGET (num, 0);
			break;
		case 2:	GET (num, 0);
			break;
		case 3:	CGET (num, 0);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 1)
	case 1:
		switch (blocking) {
		case 0:	NGET (num, 1);
			break;
		case 1:	NCGET (num, 1);
			break;
		case 2:	GET (num, 1);
			break;
		case 3:	CGET (num, 1);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 2)
	case 2:
		switch (blocking) {
		case 0:	NGET (num, 2);
			break;
		case 1:	NCGET (num, 2);
			break;
		case 2:	GET (num, 2);
			break;
		case 3:	CGET (num, 2);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 3)
	case 3:
		switch (blocking) {
		case 0:	NGET (num, 3);
			break;
		case 1:	NCGET (num, 3);
			break;
		case 2:	GET (num, 3);
			break;
		case 3:	CGET (num, 3);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 4)
	case 4:
		switch (blocking) {
		case 0:	NGET (num, 4);
			break;
		case 1:	NCGET (num, 4);
			break;
		case 2:	GET (num, 4);
			break;
		case 3:	CGET (num, 4);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 5)
	case 5:
		switch (blocking) {
		case 0:	NGET (num, 5);
			break;
		case 1:	NCGET (num, 5);
			break;
		case 2:	GET (num, 5);
			break;
		case 3:	CGET (num, 5);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 6)
	case 6:
		switch (blocking) {
		case 0:	NGET (num, 6);
			break;
		case 1:	NCGET (num, 6);
			break;
		case 2:	GET (num, 6);
			break;
		case 3:	CGET (num, 6);
			break;
		default:
			return 2;
		}
		break;
#endif
#if (XILINX_FSL_NUMBER > 7)
	case 7:
		switch (blocking) {
		case 0:	NGET (num, 7);
			break;
		case 1:	NCGET (num, 7);
			break;
		case 2:	GET (num, 7);
			break;
		case 3:	CGET (num, 7);
			break;
		default:
			return 2;
		}
		break;
#endif
	default:
		return 1;
	}

	printf ("%01x: 0x%08x - %s %s read\n", fslnum, num,
		blocking < 2  ? "non blocking" : "blocking",
		((blocking == 1) || (blocking == 3)) ? "control" : "data" );
	return 0;
}
Exemple #2
0
int ReadVarFromCDF(int cdfid, int vid, VarDesc *v, size_t **d, size_t *coords, BOOL bigdim)
{
  int lnx, lny, offs, startloop;
  int startoff = ((v->option & STARTING_WITH_ZERO) != 0);
  double tmp;
  nc_type vartype;
  nc_inq_vartype(cdfid, vid, &vartype);
  lnx = nxm + bigdim + startoff; lny = nym + bigdim + startoff;
  offs = !startoff && !bigdim;
  startloop = !startoff && bigdim;
  switch (v->storetype)  {
  case GRID_VAL :
    if (!g[v->v.et])  g[v->v.et] = (double *)calloc(mesh, sizeof(double));
    for (*d[2] = 0; *d[2] < nz; (*d[2])++)
      for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
	for (*d[1] = startloop; *d[1] < lny; (*d[1])++)
	  NCGET(g[v->v.et][F(*d[2],*d[0]+offs,*d[1]+offs)]);
    break;
  case DOUBLE_PTR :
    switch (v->dims)  {
    case (ALL_DIM) :
      for (*d[2] = 0; *d[2] < nz; (*d[2])++)
	for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
	  for (*d[1] = startloop; *d[1] < lny; (*d[1])++)
	    NCGET(v->v.d[F(*d[2],*d[0]+offs,*d[1]+offs)]);
      break;
    case (X_DIM | Y_DIM) :
      for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
	for (*d[1] = 0; *d[1] < lny; (*d[1])++)
	  NCGET(v->v.d[FH(*d[0]+offs,*d[1]+offs)]);
      break;
    case (Y_DIM | Z_DIM) :
      for (*d[2] = 0; *d[2] < nz; (*d[2])++)
	for (*d[1] = startloop; *d[1] < lny; (*d[1])++)
	  NCGET(v->v.d[FH(*d[2],*d[1]+offs)]);
      break;
    case (X_DIM | Z_DIM) :
      for (*d[2] = 0; *d[2] < nz; (*d[2])++)
	for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
	  NCGET(v->v.d[*d[2] * xrow + *d[0]+offs]);
      break;
    case X_DIM : for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
      NCGET(v->v.d[*d[0]+offs]);
    break;
    case Y_DIM : for (*d[1] = startloop; *d[1] < lny; (*d[1])++)
      NCGET(v->v.d[*d[1]+offs]);
    break;
    case Z_DIM : for (*d[2] = 0; *d[2] < nz; (*d[2])++)
      NCGET(v->v.d[*d[2]]);
    break;
    case COUNT_DIM :
      for (*d[4] = 0; *d[4] < v->ncoord; (*d[4])++)
	NCGET(v->v.d[*d[4]]);
      break;
    case 0     : NCGET(*v->v.d); break;
    default : InputError(ERROR, "Internal implementation error (2)");
      break;
    }
    break;
  case GROUND_PARAM :
    for (*d[0] = startloop; *d[0] < lnx; (*d[0])++)
      for (*d[1] = startloop; *d[1] < lny; (*d[1])++)
	NCGET(v->v.g[(*d[0]+offs)*row+*d[1]+offs].Tg[0]);
    break;
  default :
    InputError(ERROR, "Variable %s cannot be set via CDF-File. (Wrong-Type)", v->name);
    return (1);
  }
  return (0);
}