Exemple #1
0
	__checkReturn	efx_rc_t
siena_nic_register_test(
	__in		efx_nic_t *enp)
{
	efx_register_set_t *rsp;
	const uint32_t *dwordp;
	unsigned int nitems;
	unsigned int count;
	efx_rc_t rc;

	/* Fill out the register mask entries */
	EFX_STATIC_ASSERT(EFX_ARRAY_SIZE(__siena_register_masks)
		    == EFX_ARRAY_SIZE(__siena_registers) * 4);

	nitems = EFX_ARRAY_SIZE(__siena_registers);
	dwordp = __siena_register_masks;
	for (count = 0; count < nitems; ++count) {
		rsp = __siena_registers + count;
		rsp->mask.eo_u32[0] = *dwordp++;
		rsp->mask.eo_u32[1] = *dwordp++;
		rsp->mask.eo_u32[2] = *dwordp++;
		rsp->mask.eo_u32[3] = *dwordp++;
	}

	/* Fill out the register table entries */
	EFX_STATIC_ASSERT(EFX_ARRAY_SIZE(__siena_table_masks)
		    == EFX_ARRAY_SIZE(__siena_tables) * 4);

	nitems = EFX_ARRAY_SIZE(__siena_tables);
	dwordp = __siena_table_masks;
	for (count = 0; count < nitems; ++count) {
		rsp = __siena_tables + count;
		rsp->mask.eo_u32[0] = *dwordp++;
		rsp->mask.eo_u32[1] = *dwordp++;
		rsp->mask.eo_u32[2] = *dwordp++;
		rsp->mask.eo_u32[3] = *dwordp++;
	}

	if ((rc = efx_nic_test_registers(enp, __siena_registers,
	    EFX_ARRAY_SIZE(__siena_registers))) != 0)
		goto fail1;

	if ((rc = efx_nic_test_tables(enp, __siena_tables,
	    EFX_PATTERN_BYTE_ALTERNATE,
	    EFX_ARRAY_SIZE(__siena_tables))) != 0)
		goto fail2;

	if ((rc = efx_nic_test_tables(enp, __siena_tables,
	    EFX_PATTERN_BYTE_CHANGING,
	    EFX_ARRAY_SIZE(__siena_tables))) != 0)
		goto fail3;

	if ((rc = efx_nic_test_tables(enp, __siena_tables,
	    EFX_PATTERN_BIT_SWEEP, EFX_ARRAY_SIZE(__siena_tables))) != 0)
		goto fail4;

	return (0);

fail4:
	EFSYS_PROBE(fail4);
fail3:
	EFSYS_PROBE(fail3);
fail2:
	EFSYS_PROBE(fail2);
fail1:
	EFSYS_PROBE1(fail1, efx_rc_t, rc);

	return (rc);
}
Exemple #2
0
{
	efx_mcdi_iface_t *emip = &(enp->en_u.siena.enu_mip);
	uint16_t *sensor_map;
	uint16_t mc_sensor;
	size_t mc_sensor_max;
	uint32_t vmask = 0;

	/* Assert the MC_CMD_SENSOR and EFX_MON_STATE namespaces agree */
	SIENA_STATIC_SENSOR_ASSERT(OK);
	SIENA_STATIC_SENSOR_ASSERT(WARNING);
	SIENA_STATIC_SENSOR_ASSERT(FATAL);
	SIENA_STATIC_SENSOR_ASSERT(BROKEN);

	EFX_STATIC_ASSERT(sizeof (__siena_mon_port1_map)
			    == sizeof (__siena_mon_port0_map));
	mc_sensor_max = EFX_ARRAY_SIZE(__siena_mon_port0_map);
	sensor_map = (emip->emi_port == 1)
		? __siena_mon_port0_map
		: __siena_mon_port1_map;

	/*
	 * dmask may legitimately contain sensors not understood by the driver
	 */
	for (mc_sensor = 0; mc_sensor < mc_sensor_max; ++mc_sensor) {
		uint16_t efx_sensor = sensor_map[mc_sensor];

		if (efx_sensor == SIENA_MON_WRONG_PORT)
			continue;
		EFSYS_ASSERT(efx_sensor < EFX_MON_NSTATS);

		if (~dmask & (1 << mc_sensor))