Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 89861
b: refs/heads/master
c: 5957da4
h: refs/heads/master
i:
  89859: 4704d51
v: v3
  • Loading branch information
Ivo van Doorn authored and John W. Linville committed Feb 29, 2008
1 parent e3bf83b commit 8e9b3ce
Show file tree
Hide file tree
Showing 13 changed files with 140 additions and 91 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 091ed315ef77a4949a6ce22e43af15a504ada348
refs/heads/master: 5957da4c6e67a5447e75c2ad65252fdd5e22f9d0
53 changes: 48 additions & 5 deletions trunk/drivers/net/wireless/rt2x00/rt2400pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1041,11 +1041,11 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
* TX data initialization
*/
static void rt2400pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
unsigned int queue)
const unsigned int queue)
{
u32 reg;

if (queue == IEEE80211_TX_QUEUE_BEACON) {
if (queue == RT2X00_BCN_QUEUE_BEACON) {
rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
if (!rt2x00_get_field32(reg, CSR14_BEACON_GEN)) {
rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 1);
Expand All @@ -1060,7 +1060,7 @@ static void rt2400pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field32(&reg, TXCSR0_KICK_TX,
(queue == IEEE80211_TX_QUEUE_DATA1));
rt2x00_set_field32(&reg, TXCSR0_KICK_ATIM,
(queue == IEEE80211_TX_QUEUE_AFTER_BEACON));
(queue == RT2X00_BCN_QUEUE_ATIM));
rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
}

Expand Down Expand Up @@ -1165,7 +1165,7 @@ static irqreturn_t rt2400pci_interrupt(int irq, void *dev_instance)
* 3 - Atim ring transmit done interrupt.
*/
if (rt2x00_get_field32(reg, CSR7_TXDONE_ATIMRING))
rt2400pci_txdone(rt2x00dev, IEEE80211_TX_QUEUE_AFTER_BEACON);
rt2400pci_txdone(rt2x00dev, RT2X00_BCN_QUEUE_ATIM);

/*
* 4 - Priority ring transmit done interrupt.
Expand Down Expand Up @@ -1510,6 +1510,49 @@ static void rt2400pci_reset_tsf(struct ieee80211_hw *hw)
rt2x00pci_register_write(rt2x00dev, CSR17, 0);
}

static int rt2400pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
struct ieee80211_tx_control *control)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct rt2x00_intf *intf = vif_to_intf(control->vif);
struct queue_entry_priv_pci_tx *priv_tx;
struct skb_frame_desc *skbdesc;

if (unlikely(!intf->beacon))
return -ENOBUFS;

priv_tx = intf->beacon->priv_data;

/*
* Fill in skb descriptor
*/
skbdesc = get_skb_frame_desc(skb);
memset(skbdesc, 0, sizeof(*skbdesc));
skbdesc->data = skb->data;
skbdesc->data_len = skb->len;
skbdesc->desc = priv_tx->desc;
skbdesc->desc_len = intf->beacon->queue->desc_size;
skbdesc->entry = intf->beacon;

/*
* mac80211 doesn't provide the control->queue variable
* for beacons. Set our own queue identification so
* it can be used during descriptor initialization.
*/
control->queue = RT2X00_BCN_QUEUE_BEACON;
rt2x00lib_write_tx_desc(rt2x00dev, skb, control);

/*
* Enable beacon generation.
* Write entire beacon with descriptor to register,
* and kick the beacon generator.
*/
memcpy(priv_tx->data, skb->data, skb->len);
rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, control->queue);

return 0;
}

static int rt2400pci_tx_last_beacon(struct ieee80211_hw *hw)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
Expand All @@ -1535,7 +1578,7 @@ static const struct ieee80211_ops rt2400pci_mac80211_ops = {
.get_tx_stats = rt2x00mac_get_tx_stats,
.get_tsf = rt2400pci_get_tsf,
.reset_tsf = rt2400pci_reset_tsf,
.beacon_update = rt2x00pci_beacon_update,
.beacon_update = rt2400pci_beacon_update,
.tx_last_beacon = rt2400pci_tx_last_beacon,
};

Expand Down
55 changes: 49 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2500pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ static void rt2500pci_config_intf(struct rt2x00_dev *rt2x00dev,
const unsigned int flags)
{
struct data_queue *queue =
rt2x00queue_get_queue(rt2x00dev, IEEE80211_TX_QUEUE_BEACON);
rt2x00queue_get_queue(rt2x00dev, RT2X00_BCN_QUEUE_BEACON);
unsigned int bcn_preload;
u32 reg;

Expand Down Expand Up @@ -1195,11 +1195,11 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
* TX data initialization
*/
static void rt2500pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
unsigned int queue)
const unsigned int queue)
{
u32 reg;

if (queue == IEEE80211_TX_QUEUE_BEACON) {
if (queue == RT2X00_BCN_QUEUE_BEACON) {
rt2x00pci_register_read(rt2x00dev, CSR14, &reg);
if (!rt2x00_get_field32(reg, CSR14_BEACON_GEN)) {
rt2x00_set_field32(&reg, CSR14_BEACON_GEN, 1);
Expand All @@ -1214,7 +1214,7 @@ static void rt2500pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field32(&reg, TXCSR0_KICK_TX,
(queue == IEEE80211_TX_QUEUE_DATA1));
rt2x00_set_field32(&reg, TXCSR0_KICK_ATIM,
(queue == IEEE80211_TX_QUEUE_AFTER_BEACON));
(queue == RT2X00_BCN_QUEUE_ATIM));
rt2x00pci_register_write(rt2x00dev, TXCSR0, reg);
}

Expand Down Expand Up @@ -1316,7 +1316,7 @@ static irqreturn_t rt2500pci_interrupt(int irq, void *dev_instance)
* 3 - Atim ring transmit done interrupt.
*/
if (rt2x00_get_field32(reg, CSR7_TXDONE_ATIMRING))
rt2500pci_txdone(rt2x00dev, IEEE80211_TX_QUEUE_AFTER_BEACON);
rt2500pci_txdone(rt2x00dev, RT2X00_BCN_QUEUE_ATIM);

/*
* 4 - Priority ring transmit done interrupt.
Expand Down Expand Up @@ -1822,6 +1822,49 @@ static void rt2500pci_reset_tsf(struct ieee80211_hw *hw)
rt2x00pci_register_write(rt2x00dev, CSR17, 0);
}

static int rt2500pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
struct ieee80211_tx_control *control)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct rt2x00_intf *intf = vif_to_intf(control->vif);
struct queue_entry_priv_pci_tx *priv_tx;
struct skb_frame_desc *skbdesc;

if (unlikely(!intf->beacon))
return -ENOBUFS;

priv_tx = intf->beacon->priv_data;

/*
* Fill in skb descriptor
*/
skbdesc = get_skb_frame_desc(skb);
memset(skbdesc, 0, sizeof(*skbdesc));
skbdesc->data = skb->data;
skbdesc->data_len = skb->len;
skbdesc->desc = priv_tx->desc;
skbdesc->desc_len = intf->beacon->queue->desc_size;
skbdesc->entry = intf->beacon;

/*
* mac80211 doesn't provide the control->queue variable
* for beacons. Set our own queue identification so
* it can be used during descriptor initialization.
*/
control->queue = RT2X00_BCN_QUEUE_BEACON;
rt2x00lib_write_tx_desc(rt2x00dev, skb, control);

/*
* Enable beacon generation.
* Write entire beacon with descriptor to register,
* and kick the beacon generator.
*/
memcpy(priv_tx->data, skb->data, skb->len);
rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, control->queue);

return 0;
}

static int rt2500pci_tx_last_beacon(struct ieee80211_hw *hw)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
Expand All @@ -1847,7 +1890,7 @@ static const struct ieee80211_ops rt2500pci_mac80211_ops = {
.get_tx_stats = rt2x00mac_get_tx_stats,
.get_tsf = rt2500pci_get_tsf,
.reset_tsf = rt2500pci_reset_tsf,
.beacon_update = rt2x00pci_beacon_update,
.beacon_update = rt2500pci_beacon_update,
.tx_last_beacon = rt2500pci_tx_last_beacon,
};

Expand Down
12 changes: 6 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2500usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1100,11 +1100,11 @@ static int rt2500usb_get_tx_data_len(struct rt2x00_dev *rt2x00dev,
* TX data initialization
*/
static void rt2500usb_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
unsigned int queue)
const unsigned int queue)
{
u16 reg;

if (queue != IEEE80211_TX_QUEUE_BEACON)
if (queue != RT2X00_BCN_QUEUE_BEACON)
return;

rt2500usb_register_read(rt2x00dev, TXRX_CSR19, &reg);
Expand Down Expand Up @@ -1758,11 +1758,11 @@ static int rt2500usb_beacon_update(struct ieee80211_hw *hw,
skbdesc->entry = intf->beacon;

/*
* Just in case mac80211 doesn't set this correctly,
* but we need this queue set for the descriptor
* initialization.
* mac80211 doesn't provide the control->queue variable
* for beacons. Set our own queue identification so
* it can be used during descriptor initialization.
*/
control->queue = IEEE80211_TX_QUEUE_BEACON;
control->queue = RT2X00_BCN_QUEUE_BEACON;
rt2x00lib_write_tx_desc(rt2x00dev, skb, control);

/*
Expand Down
7 changes: 4 additions & 3 deletions trunk/drivers/net/wireless/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ struct rt2x00lib_ops {
int (*get_tx_data_len) (struct rt2x00_dev *rt2x00dev,
struct sk_buff *skb);
void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
unsigned int queue);
const unsigned int queue);

/*
* RX control handlers
Expand Down Expand Up @@ -906,10 +906,11 @@ static inline u16 get_duration_res(const unsigned int size, const u8 rate)
/**
* rt2x00queue_get_queue - Convert mac80211 queue index to rt2x00 queue
* @rt2x00dev: Pointer to &struct rt2x00_dev.
* @queue: mac80211 queue index (see &enum ieee80211_tx_queue).
* @queue: mac80211/rt2x00 queue index
* (see &enum ieee80211_tx_queue and &enum rt2x00_bcn_queue).
*/
struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
const enum ieee80211_tx_queue queue);
const unsigned int queue);

/**
* rt2x00queue_get_entry - Get queue entry where the given index points to.
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/rt2x00/rt2x00dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
* Beacons and probe responses require the tsf timestamp
* to be inserted into the frame.
*/
if (control->queue == IEEE80211_TX_QUEUE_BEACON ||
if (control->queue == RT2X00_BCN_QUEUE_BEACON ||
is_probe_resp(frame_control))
__set_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc.flags);

Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/rt2x00/rt2x00mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,
struct rt2x00_dev *rt2x00dev = hw->priv;
struct rt2x00_intf *intf = vif_to_intf(conf->vif);
struct data_queue *queue =
rt2x00queue_get_queue(rt2x00dev, IEEE80211_TX_QUEUE_BEACON);
rt2x00queue_get_queue(rt2x00dev, RT2X00_BCN_QUEUE_BEACON);
struct queue_entry *entry = NULL;
unsigned int i;

Expand Down
47 changes: 0 additions & 47 deletions trunk/drivers/net/wireless/rt2x00/rt2x00pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,53 +31,6 @@
#include "rt2x00.h"
#include "rt2x00pci.h"

/*
* Beacon handlers.
*/
int rt2x00pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
struct ieee80211_tx_control *control)
{
struct rt2x00_dev *rt2x00dev = hw->priv;
struct rt2x00_intf *intf = vif_to_intf(control->vif);
struct queue_entry_priv_pci_tx *priv_tx;
struct skb_frame_desc *skbdesc;

if (unlikely(!intf->beacon))
return -ENOBUFS;

priv_tx = intf->beacon->priv_data;

/*
* Fill in skb descriptor
*/
skbdesc = get_skb_frame_desc(skb);
memset(skbdesc, 0, sizeof(*skbdesc));
skbdesc->data = skb->data;
skbdesc->data_len = skb->len;
skbdesc->desc = priv_tx->desc;
skbdesc->desc_len = intf->beacon->queue->desc_size;
skbdesc->entry = intf->beacon;

/*
* Just in case mac80211 doesn't set this correctly,
* but we need this queue set for the descriptor
* initialization.
*/
control->queue = IEEE80211_TX_QUEUE_BEACON;
rt2x00lib_write_tx_desc(rt2x00dev, skb, control);

/*
* Enable beacon generation.
* Write entire beacon with descriptor to register,
* and kick the beacon generator.
*/
memcpy(priv_tx->data, skb->data, skb->len);
rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, control->queue);

return 0;
}
EXPORT_SYMBOL_GPL(rt2x00pci_beacon_update);

/*
* TX data handlers.
*/
Expand Down
6 changes: 0 additions & 6 deletions trunk/drivers/net/wireless/rt2x00/rt2x00pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,6 @@ rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev,
memcpy_toio(rt2x00dev->csr_addr + offset, value, length);
}

/*
* Beacon handlers.
*/
int rt2x00pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb,
struct ieee80211_tx_control *control);

/*
* TX data handlers.
*/
Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/net/wireless/rt2x00/rt2x00queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#include "rt2x00lib.h"

struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
const enum ieee80211_tx_queue queue)
const unsigned int queue)
{
int atim = test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags);

Expand All @@ -40,9 +40,9 @@ struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
if (!rt2x00dev->bcn)
return NULL;

if (queue == IEEE80211_TX_QUEUE_BEACON)
if (queue == RT2X00_BCN_QUEUE_BEACON)
return &rt2x00dev->bcn[0];
else if (queue == IEEE80211_TX_QUEUE_AFTER_BEACON && atim)
else if (queue == RT2X00_BCN_QUEUE_ATIM && atim)
return &rt2x00dev->bcn[1];

return NULL;
Expand Down
15 changes: 15 additions & 0 deletions trunk/drivers/net/wireless/rt2x00/rt2x00queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,21 @@ enum data_queue_qid {
QID_OTHER = 15,
};

/**
* enum rt2x00_bcn_queue: Beacon queue index
*
* Start counting with a high offset, this because this enumeration
* supplements &enum ieee80211_tx_queue and we should prevent value
* conflicts.
*
* @RT2X00_BCN_QUEUE_BEACON: Beacon queue
* @RT2X00_BCN_QUEUE_ATIM: Atim queue (sends frame after beacon)
*/
enum rt2x00_bcn_queue {
RT2X00_BCN_QUEUE_BEACON = 100,
RT2X00_BCN_QUEUE_ATIM = 101,
};

/**
* struct skb_frame_desc: Descriptor information for the skb buffer
*
Expand Down
Loading

0 comments on commit 8e9b3ce

Please sign in to comment.