Example #1
0
static void rt2400pci_config_erp(struct rt2x00_dev *rt2x00dev,
				 struct rt2x00lib_erp *erp)
{
	int preamble_mask;
	u32 reg;

	/*
	 * When short preamble is enabled, we should set bit 0x08
	 */
	preamble_mask = erp->short_preamble << 3;

	rt2x00pci_register_read(rt2x00dev, TXCSR1, &reg);
	rt2x00_set_field32(&reg, TXCSR1_ACK_TIMEOUT,
			   erp->ack_timeout);
	rt2x00_set_field32(&reg, TXCSR1_ACK_CONSUME_TIME,
			   erp->ack_consume_time);
	rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);

	rt2x00pci_register_read(rt2x00dev, ARCSR2, &reg);
	rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00);
	rt2x00_set_field32(&reg, ARCSR2_SERVICE, 0x04);
	rt2x00_set_field32(&reg, ARCSR2_LENGTH, GET_DURATION(ACK_SIZE, 10));
	rt2x00pci_register_write(rt2x00dev, ARCSR2, reg);

	rt2x00pci_register_read(rt2x00dev, ARCSR3, &reg);
	rt2x00_set_field32(&reg, ARCSR3_SIGNAL, 0x01 | preamble_mask);
	rt2x00_set_field32(&reg, ARCSR3_SERVICE, 0x04);
	rt2x00_set_field32(&reg, ARCSR2_LENGTH, GET_DURATION(ACK_SIZE, 20));
	rt2x00pci_register_write(rt2x00dev, ARCSR3, reg);

	rt2x00pci_register_read(rt2x00dev, ARCSR4, &reg);
	rt2x00_set_field32(&reg, ARCSR4_SIGNAL, 0x02 | preamble_mask);
	rt2x00_set_field32(&reg, ARCSR4_SERVICE, 0x04);
	rt2x00_set_field32(&reg, ARCSR2_LENGTH, GET_DURATION(ACK_SIZE, 55));
	rt2x00pci_register_write(rt2x00dev, ARCSR4, reg);

	rt2x00pci_register_read(rt2x00dev, ARCSR5, &reg);
	rt2x00_set_field32(&reg, ARCSR5_SIGNAL, 0x03 | preamble_mask);
	rt2x00_set_field32(&reg, ARCSR5_SERVICE, 0x84);
	rt2x00_set_field32(&reg, ARCSR2_LENGTH, GET_DURATION(ACK_SIZE, 110));
	rt2x00pci_register_write(rt2x00dev, ARCSR5, reg);

	rt2x00pci_register_write(rt2x00dev, ARCSR1, erp->basic_rates);

	rt2x00pci_register_read(rt2x00dev, CSR11, &reg);
	rt2x00_set_field32(&reg, CSR11_SLOT_TIME, erp->slot_time);
	rt2x00pci_register_write(rt2x00dev, CSR11, reg);

	rt2x00pci_register_read(rt2x00dev, CSR18, &reg);
	rt2x00_set_field32(&reg, CSR18_SIFS, erp->sifs);
	rt2x00_set_field32(&reg, CSR18_PIFS, erp->pifs);
	rt2x00pci_register_write(rt2x00dev, CSR18, reg);

	rt2x00pci_register_read(rt2x00dev, CSR19, &reg);
	rt2x00_set_field32(&reg, CSR19_DIFS, erp->difs);
	rt2x00_set_field32(&reg, CSR19_EIFS, erp->eifs);
	rt2x00pci_register_write(rt2x00dev, CSR19, reg);
}
Example #2
0
static void rt2400pci_config_intf(struct rt2x00_dev *rt2x00dev,
				  struct rt2x00_intf *intf,
				  struct rt2x00intf_conf *conf,
				  const unsigned int flags)
{
	unsigned int bcn_preload;
	u32 reg;

	if (flags & CONFIG_UPDATE_TYPE) {
		/*
		 * Enable beacon config
		 */
		bcn_preload = PREAMBLE + GET_DURATION(IEEE80211_HEADER, 20);
		rt2x00pci_register_read(rt2x00dev, BCNCSR1, &reg);
		rt2x00_set_field32(&reg, BCNCSR1_PRELOAD, bcn_preload);
		rt2x00pci_register_write(rt2x00dev, BCNCSR1, reg);

		/*
		 * Enable synchronisation.
		 */
		rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
		rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 1);
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, conf->sync);
		rt2x00_set_field32(&reg, CSR14_TBCN, 1);
		rt2x00pci_register_write(rt2x00dev, CSR14, reg);
	}

	if (flags & CONFIG_UPDATE_MAC)
		rt2x00pci_register_multiwrite(rt2x00dev, CSR3,
					      conf->mac, sizeof(conf->mac));

	if (flags & CONFIG_UPDATE_BSSID)
		rt2x00pci_register_multiwrite(rt2x00dev, CSR5,
					      conf->bssid, sizeof(conf->bssid));
}
Example #3
0
static void rt2400pci_config_erp(struct rt2x00_dev *rt2x00dev,
				 struct rt2x00lib_erp *erp,
				 u32 changed)
{
	int preamble_mask;
	u32 reg;

	/*
	 * When short preamble is enabled, we should set bit 0x08
	 */
	if (changed & BSS_CHANGED_ERP_PREAMBLE) {
		preamble_mask = erp->short_preamble << 3;

		rt2x00pci_register_read(rt2x00dev, TXCSR1, &reg);
		rt2x00_set_field32(&reg, TXCSR1_ACK_TIMEOUT, 0x1ff);
		rt2x00_set_field32(&reg, TXCSR1_ACK_CONSUME_TIME, 0x13a);
		rt2x00_set_field32(&reg, TXCSR1_TSF_OFFSET, IEEE80211_HEADER);
		rt2x00_set_field32(&reg, TXCSR1_AUTORESPONDER, 1);
		rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);

		rt2x00pci_register_read(rt2x00dev, ARCSR2, &reg);
		rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00);
		rt2x00_set_field32(&reg, ARCSR2_SERVICE, 0x04);
		rt2x00_set_field32(&reg, ARCSR2_LENGTH,
				   GET_DURATION(ACK_SIZE, 10));
		rt2x00pci_register_write(rt2x00dev, ARCSR2, reg);

		rt2x00pci_register_read(rt2x00dev, ARCSR3, &reg);
		rt2x00_set_field32(&reg, ARCSR3_SIGNAL, 0x01 | preamble_mask);
		rt2x00_set_field32(&reg, ARCSR3_SERVICE, 0x04);
		rt2x00_set_field32(&reg, ARCSR2_LENGTH,
				   GET_DURATION(ACK_SIZE, 20));
		rt2x00pci_register_write(rt2x00dev, ARCSR3, reg);

		rt2x00pci_register_read(rt2x00dev, ARCSR4, &reg);
		rt2x00_set_field32(&reg, ARCSR4_SIGNAL, 0x02 | preamble_mask);
		rt2x00_set_field32(&reg, ARCSR4_SERVICE, 0x04);
		rt2x00_set_field32(&reg, ARCSR2_LENGTH,
				   GET_DURATION(ACK_SIZE, 55));
		rt2x00pci_register_write(rt2x00dev, ARCSR4, reg);

		rt2x00pci_register_read(rt2x00dev, ARCSR5, &reg);
		rt2x00_set_field32(&reg, ARCSR5_SIGNAL, 0x03 | preamble_mask);
		rt2x00_set_field32(&reg, ARCSR5_SERVICE, 0x84);
		rt2x00_set_field32(&reg, ARCSR2_LENGTH,
				   GET_DURATION(ACK_SIZE, 110));
		rt2x00pci_register_write(rt2x00dev, ARCSR5, reg);
	}

	if (changed & BSS_CHANGED_BASIC_RATES)
		rt2x00pci_register_write(rt2x00dev, ARCSR1, erp->basic_rates);

	if (changed & BSS_CHANGED_ERP_SLOT) {
		rt2x00pci_register_read(rt2x00dev, CSR11, &reg);
		rt2x00_set_field32(&reg, CSR11_SLOT_TIME, erp->slot_time);
		rt2x00pci_register_write(rt2x00dev, CSR11, reg);

		rt2x00pci_register_read(rt2x00dev, CSR18, &reg);
		rt2x00_set_field32(&reg, CSR18_SIFS, erp->sifs);
		rt2x00_set_field32(&reg, CSR18_PIFS, erp->pifs);
		rt2x00pci_register_write(rt2x00dev, CSR18, reg);

		rt2x00pci_register_read(rt2x00dev, CSR19, &reg);
		rt2x00_set_field32(&reg, CSR19_DIFS, erp->difs);
		rt2x00_set_field32(&reg, CSR19_EIFS, erp->eifs);
		rt2x00pci_register_write(rt2x00dev, CSR19, reg);
	}

	if (changed & BSS_CHANGED_BEACON_INT) {
		rt2x00pci_register_read(rt2x00dev, CSR12, &reg);
		rt2x00_set_field32(&reg, CSR12_BEACON_INTERVAL,
				   erp->beacon_int * 16);
		rt2x00_set_field32(&reg, CSR12_CFP_MAX_DURATION,
				   erp->beacon_int * 16);
		rt2x00pci_register_write(rt2x00dev, CSR12, reg);
	}
}
Example #4
0
void test_pfunc(void)
{

    struct timespec tb, te;
    matlib_real dn;
    
    START_TIMMING(tb);

    matlib_index num_threads = 4;
    pthpool_data_t mp[num_threads];
    
    pthpool_create_threads(num_threads, mp);
    /* define the domain */ 
    matlib_real x_l = -5.0;
    matlib_real x_r =  5.0;

    matlib_index p = 1;
    matlib_xv xi, quadW;
    legendre_LGLdataLT1( p, TOL, &xi, &quadW);

    matlib_index N = 10000;
    matlib_xv x;
    fem1d_ref2mesh (xi, N, x_l, x_r, &x);
    debug_body("length of x: %d", x.len);
    
    matlib_zv u_serial, u_parallel;
    matlib_create_zv( x.len, &u_serial, MATLIB_COL_VECT);
    matlib_create_zv( x.len, &u_parallel, MATLIB_COL_VECT);

    GET_DURATION(tb, te, dn);
    debug_print("Initialization time[msec]: %0.4f", dn);
    
    START_TIMMING(tb);
    serial_Gaussian(x, u_serial);
    GET_DURATION(tb, te, dn);
    debug_print("Serial time[msec]: %0.4f", dn);

    void* param = {0};
    matlib_index Np[2] = {x.len/num_threads, x.len};
    void* shared_data[3] = { (void*) &x,
                             (void*) &u_parallel,
                             (void*) param};
    START_TIMMING(tb);
    pthpool_func( Np, shared_data, thfunc_Gaussian, num_threads, mp);
    
    GET_DURATION(tb, te, dn);
    debug_print("parallel time[msec]: %0.4f", dn);

    matlib_real norm_actual = matlib_znrm2(u_serial);
    matlib_zaxpy(-1.0, u_serial, u_parallel);
    matlib_real e_relative = matlib_znrm2(u_parallel)/norm_actual;
    debug_body("Relative error: % 0.16g", e_relative);
    
    CU_ASSERT_TRUE(e_relative<TOL);

    matlib_free(x.elem_p);
    matlib_free(u_serial.elem_p);
    matlib_free(u_parallel.elem_p);
    
    debug_body("%s", "signal threads to exit!");
    pthpool_destroy_threads(num_threads, mp);

}
Example #5
0
List<Movement> Movement::ParseFrom(String fromString)
{	
	List<Movement> movements;
	/// Tokenize.
	List<String> parts = TokenizeIgnore(fromString, ",", "()");
	for (int i = 0; i < parts.Size(); ++i)
	{
		String part = parts[i];
		List<String> broken = part.Tokenize("()");
		if (broken.Size() == 0)
		{
			LogMain("Empty movement pattern when parsing string '"+fromString+"'.", INFO);
			continue;
		}
		String partPreParenthesis = broken[0];
		partPreParenthesis.RemoveSurroundingWhitespaces();
		Movement move;
		move.type = -1;
		for (int j = 0; j < Movement::TYPES; ++j)
		{
			String name = Movement::Name(j);
			if (name == partPreParenthesis)
			{
				move.type = j;
				break;
			}
			if (name == "n/a")
				move.type = Movement::NONE;
		}
		if (move.type == -1)
		{
			String typesString;
			for (int j = 0; j < Movement::TYPES; ++j)
			{
				typesString += "\n\t"+Movement::Name(j);
			}
			LogMain("Unrecognized movement pattern \'"+partPreParenthesis+"\' when parsing ship \'"+fromString+"\'. Available types are as follows: "+typesString, INFO);
			continue;
		}
		// Add it and continue.
		if (move.type == Movement::NONE)
		{
			movements.Add(move);
			continue;
		}
		// Demand arguments depending on type?
		if (broken.Size() < 2)
		{
			LogMain("Lacking arguments for movement pattern \'"+partPreParenthesis+"\' when parsing data for ship \'"+fromString+"\'.", INFO);
			continue;
		}
		List<String> args = broken[1].Tokenize(",");
#define DEMAND_ARGS(a) if (args.Size() < a){ \
	LogMain("Expected "+String(a)+" arguments for movement type \'"+\
	Movement::Name(move.type)+"\', encountered "+String(args.Size())+".", INFO); \
	continue;}
#define GET_DURATION(a) if (args[a] == "inf") move.durationMs = -1; else move.durationMs = args[a].ParseInt();
		switch(move.type)
		{
			case Movement::STRAIGHT:
				DEMAND_ARGS(1);
				GET_DURATION(0);
				break;	
			case Movement::ZAG:
				DEMAND_ARGS(3);
				move.vec.ParseFrom(args[0]);
				move.zagTimeMs = args[1].ParseInt();
				GET_DURATION(2);
				break;
			case Movement::MOVE_TO:
			{
				DEMAND_ARGS(2);
				// Optionally parse some string for where to go.
				String arg = args[0];
				arg.RemoveSurroundingWhitespaces();
				arg.SetComparisonMode(String::NOT_CASE_SENSITIVE);
				if (arg == "upper edge")
				{
					move.location = Location::UPPER_EDGE; 	
				}
				else if (arg == "lower edge")
				{
					move.location = Location::LOWER_EDGE;
				}
				else if (arg == "center")
				{
					move.location = Location::CENTER;
				}
				else if (arg == "player")
				{
					move.location = Location::PLAYER;
				}
				else 
				{
					move.vec.ParseFrom(args[0]);
					move.location = Location::VECTOR;
				}
				GET_DURATION(1);
				break;
			}
			case Movement::MOVE_DIR:
			{
				DEMAND_ARGS(2);
				move.vec.ParseFrom(args[0]);
				GET_DURATION(1);
				break;
			}
			case Movement::CIRCLE:
			{
				DEMAND_ARGS(4);
				move.target = args[0];
				move.radius = args[1].ParseFloat();
				move.clockwise = args[2].ParseBool();
				GET_DURATION(3);
				break;
			}
			case Movement::UP_N_DOWN:
			{
				DEMAND_ARGS(2);
				move.distance = args[0].ParseFloat();
				GET_DURATION(1);
				break;
			}
		}
		move.vec.Normalize();
		movements.Add(move);
	}
	return movements;
};