Skip to content

Commit

Permalink
[PATCH] rt2x00: Move TSF sync values into rt2x00config
Browse files Browse the repository at this point in the history
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: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Ivo van Doorn authored and David S. Miller committed Oct 10, 2007
1 parent 81873e9 commit feb2469
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 51 deletions.
12 changes: 3 additions & 9 deletions drivers/net/wireless/rt2x00/rt2400pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
}

Expand Down
12 changes: 3 additions & 9 deletions drivers/net/wireless/rt2x00/rt2500pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
}

Expand Down
14 changes: 4 additions & 10 deletions drivers/net/wireless/rt2x00/rt2500usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
}

Expand Down
3 changes: 2 additions & 1 deletion drivers/net/wireless/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
20 changes: 17 additions & 3 deletions drivers/net/wireless/rt2x00/rt2x00config.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/rt2x00/rt2x00lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev);
*/
void rt2x00lib_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *mac);
void rt2x00lib_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid);
void rt2x00lib_config_type(struct rt2x00_dev *rt2x00dev, int type);
void rt2x00lib_config_type(struct rt2x00_dev *rt2x00dev, const int type);
void rt2x00lib_config(struct rt2x00_dev *rt2x00dev,
struct ieee80211_conf *conf, const int force_config);

Expand Down
9 changes: 9 additions & 0 deletions drivers/net/wireless/rt2x00/rt2x00reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,15 @@ enum led_mode {
LED_MODE_ALPHA = 4,
};

/*
* TSF sync values
*/
enum tsf_sync {
TSF_SYNC_NONE = 0,
TSF_SYNC_INFRA = 1,
TSF_SYNC_BEACON = 2,
};

/*
* Device states
*/
Expand Down
12 changes: 3 additions & 9 deletions drivers/net/wireless/rt2x00/rt61pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,9 @@ static void rt61pci_config_bssid(struct rt2x00_dev *rt2x00dev, __le32 *bssid)
(2 * sizeof(__le32)));
}

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

/*
Expand All @@ -324,13 +324,7 @@ static void rt61pci_config_type(struct rt2x00_dev *rt2x00dev, const int type)
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 1);
rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 1);
rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
if (is_interface_type(intf, IEEE80211_IF_TYPE_IBSS) ||
is_interface_type(intf, IEEE80211_IF_TYPE_AP))
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 2);
else if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 1);
else
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, tsf_sync);
rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg);
}

Expand Down
12 changes: 3 additions & 9 deletions drivers/net/wireless/rt2x00/rt73usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,9 @@ static void rt73usb_config_bssid(struct rt2x00_dev *rt2x00dev, __le32 *bssid)
(2 * sizeof(__le32)));
}

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

/*
Expand All @@ -303,13 +303,7 @@ static void rt73usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 1);
rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 1);
rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
if (is_interface_type(intf, IEEE80211_IF_TYPE_IBSS) ||
is_interface_type(intf, IEEE80211_IF_TYPE_AP))
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 2);
else if (is_interface_type(intf, IEEE80211_IF_TYPE_STA))
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 1);
else
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, tsf_sync);
rt73usb_register_write(rt2x00dev, TXRX_CSR9, reg);
}

Expand Down

0 comments on commit feb2469

Please sign in to comment.