Exemplo n.º 1
0
static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token)
{
    unsigned int i;
    u32 reg;

    /*
     * SOC devices don't support MCU requests.
     */
    if (rt2x00_is_soc(rt2x00dev))
        return;

    for (i = 0; i < 200; i++) {
        rt2x00pci_register_read(rt2x00dev, H2M_MAILBOX_CID, &reg);

        if ((rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD0) == token) ||
                (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD1) == token) ||
                (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD2) == token) ||
                (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD3) == token))
            break;

        udelay(REGISTER_BUSY_DELAY);
    }

    if (i == 200)
        ERROR(rt2x00dev, "MCU request failed, no response from hardware\n");

    rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
    rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
}
Exemplo n.º 2
0
static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev)
{
    if (rt2x00_is_soc(rt2x00dev)) {
        rt2800_disable_radio(rt2x00dev);
        rt2x00pci_register_write(rt2x00dev, PWR_PIN_CFG, 0);
        rt2x00pci_register_write(rt2x00dev, TX_PIN_CFG, 0);
    }
}
static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
	int retval;

	/*
	 * Allocate eeprom data.
	 */
	retval = rt2800pci_validate_eeprom(rt2x00dev);
	if (retval)
		return retval;

	retval = rt2800_init_eeprom(rt2x00dev);
	if (retval)
		return retval;

	/*
	 * Initialize hw specifications.
	 */
	retval = rt2800_probe_hw_mode(rt2x00dev);
	if (retval)
		return retval;

	/*
	 * This device has multiple filters for control frames
	 * and has a separate filter for PS Poll frames.
	 */
	__set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags);
	__set_bit(CAPABILITY_CONTROL_FILTER_PSPOLL, &rt2x00dev->cap_flags);

	/*
	 * This device has a pre tbtt interrupt and thus fetches
	 * a new beacon directly prior to transmission.
	 */
	__set_bit(CAPABILITY_PRE_TBTT_INTERRUPT, &rt2x00dev->cap_flags);

	/*
	 * This device requires firmware.
	 */
	if (!rt2x00_is_soc(rt2x00dev))
		__set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags);
	__set_bit(REQUIRE_DMA, &rt2x00dev->cap_flags);
	__set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
	__set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
	__set_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags);
	if (!modparam_nohwcrypt)
		__set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
	__set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
	__set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);

	/*
	 * Set the rssi offset.
	 */
	rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;

	return 0;
}
Exemplo n.º 4
0
/*
 * Device probe functions.
 */
static void rt2800pci_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
    if (rt2x00_is_soc(rt2x00dev) ||
            test_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags))
        rt2800pci_read_eeprom_file(rt2x00dev);
    else if (rt2800pci_efuse_detect(rt2x00dev))
        rt2800pci_read_eeprom_efuse(rt2x00dev);
    else
        rt2800pci_read_eeprom_pci(rt2x00dev);
}
Exemplo n.º 5
0
/*
 * Device probe functions.
 */
static int rt2800pci_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
	int retval;

	if (rt2x00_is_soc(rt2x00dev))
		retval = rt2800pci_read_eeprom_soc(rt2x00dev);
	else if (rt2800pci_efuse_detect(rt2x00dev))
		retval = rt2800pci_read_eeprom_efuse(rt2x00dev);
	else
		retval = rt2800pci_read_eeprom_pci(rt2x00dev);

	return retval;
}
/*
 * Device probe functions.
 */
static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
	/*
	 * Read EEPROM into buffer
	 */
	if (rt2x00_is_soc(rt2x00dev))
		rt2800pci_read_eeprom_soc(rt2x00dev);
	else if (rt2800pci_efuse_detect(rt2x00dev))
		rt2800pci_read_eeprom_efuse(rt2x00dev);
	else
		rt2800pci_read_eeprom_pci(rt2x00dev);

	return rt2800_validate_eeprom(rt2x00dev);
}
Exemplo n.º 7
0
/*
 * Device probe functions.
 */
static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
	/*
	 * Read EEPROM into buffer
	 */
	if (rt2x00_is_soc(rt2x00dev) ||
			test_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags))
		rt2800pci_read_eeprom_file(rt2x00dev);
	else if (rt2800pci_efuse_detect(rt2x00dev))
		rt2800pci_read_eeprom_efuse(rt2x00dev);
	else
		rt2800pci_read_eeprom_pci(rt2x00dev);

	return rt2800_validate_eeprom(rt2x00dev);
}