Commit feb24691 authored by Ivo van Doorn's avatar Ivo van Doorn Committed by David S. Miller
Browse files

[PATCH] rt2x00: Move TSF sync values into rt2x00config



All drivers use the same values for TSF sync,
this will move the value determination into rt2x00config.c,
and the definition for the values to rt2x00reg.h

Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 81873e9c
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -265,9 +265,9 @@ static void rt2400pci_config_bssid(struct rt2x00_dev *rt2x00dev,
				      (2 * sizeof(__le32)));
}

static void rt2400pci_config_type(struct rt2x00_dev *rt2x00dev, int type)
static void rt2400pci_config_type(struct rt2x00_dev *rt2x00dev, const int type,
				  const int tsf_sync)
{
	struct interface *intf = &rt2x00dev->interface;
	u32 reg;

	rt2x00pci_register_write(rt2x00dev, CSR14, 0);
@@ -287,13 +287,7 @@ static void rt2400pci_config_type(struct rt2x00_dev *rt2x00dev, int type)
	rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 1);
	rt2x00_set_field32(&reg, CSR14_TBCN, 1);
	rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
	if (is_interface_type(intf, IEEE80211_IF_TYPE_IBSS) ||
	    is_interface_type(intf, IEEE80211_IF_TYPE_AP))
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 2);
	else if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 1);
	else
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 0);
	rt2x00_set_field32(&reg, CSR14_TSF_SYNC, tsf_sync);
	rt2x00pci_register_write(rt2x00dev, CSR14, reg);
}

+3 −9
Original line number Diff line number Diff line
@@ -265,9 +265,9 @@ static void rt2500pci_config_bssid(struct rt2x00_dev *rt2x00dev,
				      (2 * sizeof(__le32)));
}

static void rt2500pci_config_type(struct rt2x00_dev *rt2x00dev, const int type)
static void rt2500pci_config_type(struct rt2x00_dev *rt2x00dev, const int type,
				  const int tsf_sync)
{
	struct interface *intf = &rt2x00dev->interface;
	u32 reg;

	rt2x00pci_register_write(rt2x00dev, CSR14, 0);
@@ -291,13 +291,7 @@ static void rt2500pci_config_type(struct rt2x00_dev *rt2x00dev, const int type)
	rt2x00_set_field32(&reg, CSR14_TSF_COUNT, 1);
	rt2x00_set_field32(&reg, CSR14_TBCN, 1);
	rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 0);
	if (is_interface_type(intf, IEEE80211_IF_TYPE_IBSS) ||
	    is_interface_type(intf, IEEE80211_IF_TYPE_AP))
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 2);
	else if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 1);
	else
		rt2x00_set_field32(&reg, CSR14_TSF_SYNC, 0);
	rt2x00_set_field32(&reg, CSR14_TSF_SYNC, tsf_sync);
	rt2x00pci_register_write(rt2x00dev, CSR14, reg);
}

+4 −10
Original line number Diff line number Diff line
@@ -268,9 +268,9 @@ static void rt2500usb_config_bssid(struct rt2x00_dev *rt2x00dev,
				      (3 * sizeof(__le16)));
}

static void rt2500usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)
static void rt2500usb_config_type(struct rt2x00_dev *rt2x00dev, const int type,
				  const int tsf_sync)
{
	struct interface *intf = &rt2x00dev->interface;
	u16 reg;

	rt2500usb_register_write(rt2x00dev, TXRX_CSR19, 0);
@@ -281,7 +281,7 @@ static void rt2500usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)
	rt2500usb_register_read(rt2x00dev, TXRX_CSR20, &reg);
	rt2x00_set_field16(&reg, TXRX_CSR20_OFFSET,
			   (PREAMBLE + get_duration(IEEE80211_HEADER, 2)) >> 6);
	if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
	if (type == IEEE80211_IF_TYPE_STA)
		rt2x00_set_field16(&reg, TXRX_CSR20_BCN_EXPECT_WINDOW, 0);
	else
		rt2x00_set_field16(&reg, TXRX_CSR20_BCN_EXPECT_WINDOW, 2);
@@ -298,13 +298,7 @@ static void rt2500usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)
	rt2x00_set_field16(&reg, TXRX_CSR19_TSF_COUNT, 1);
	rt2x00_set_field16(&reg, TXRX_CSR19_TBCN, 1);
	rt2x00_set_field16(&reg, TXRX_CSR19_BEACON_GEN, 0);
	if (is_interface_type(intf, IEEE80211_IF_TYPE_IBSS) ||
	    is_interface_type(intf, IEEE80211_IF_TYPE_AP))
		rt2x00_set_field16(&reg, TXRX_CSR19_TSF_SYNC, 2);
	else if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
		rt2x00_set_field16(&reg, TXRX_CSR19_TSF_SYNC, 1);
	else
		rt2x00_set_field16(&reg, TXRX_CSR19_TSF_SYNC, 0);
	rt2x00_set_field16(&reg, TXRX_CSR19_TSF_SYNC, tsf_sync);
	rt2500usb_register_write(rt2x00dev, TXRX_CSR19, reg);
}

+2 −1
Original line number Diff line number Diff line
@@ -410,7 +410,8 @@ struct rt2x00lib_ops {
	 */
	void (*config_mac_addr) (struct rt2x00_dev *rt2x00dev, __le32 *mac);
	void (*config_bssid) (struct rt2x00_dev *rt2x00dev, __le32 *bssid);
	void (*config_type) (struct rt2x00_dev *rt2x00dev, const int type);
	void (*config_type) (struct rt2x00_dev *rt2x00dev, const int type,
							   const int tsf_sync);
	void (*config) (struct rt2x00_dev *rt2x00dev, const unsigned int flags,
			struct ieee80211_conf *conf);
#define CONFIG_UPDATE_PHYMODE		( 1 << 1 )
+17 −3
Original line number Diff line number Diff line
@@ -74,10 +74,24 @@ void rt2x00lib_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid)
	rt2x00dev->ops->lib->config_bssid(rt2x00dev, &reg[0]);
}

void rt2x00lib_config_type(struct rt2x00_dev *rt2x00dev, int type)
void rt2x00lib_config_type(struct rt2x00_dev *rt2x00dev, const int type)
{
	if (type != INVALID_INTERFACE)
		rt2x00dev->ops->lib->config_type(rt2x00dev, type);
	int tsf_sync;

	switch (type) {
	case IEEE80211_IF_TYPE_IBSS:
	case IEEE80211_IF_TYPE_AP:
		tsf_sync = TSF_SYNC_BEACON;
		break;
	case IEEE80211_IF_TYPE_STA:
		tsf_sync = TSF_SYNC_INFRA;
		break;
	default:
		tsf_sync = TSF_SYNC_NONE;
		break;
	}

	rt2x00dev->ops->lib->config_type(rt2x00dev, type, tsf_sync);
}

void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
Loading