Commit 87d5efbb authored by Vasanthakumar Thiagarajan's avatar Vasanthakumar Thiagarajan Committed by John W. Linville

ath9k_hw: Add abstraction to set/get link pointer

Signed-off-by: default avatarVasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 3f3a1c80
...@@ -20,11 +20,23 @@ static void ar9003_hw_rx_enable(struct ath_hw *hw) ...@@ -20,11 +20,23 @@ static void ar9003_hw_rx_enable(struct ath_hw *hw)
REG_WRITE(hw, AR_CR, 0); REG_WRITE(hw, AR_CR, 0);
} }
static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)
{
((struct ar9003_txc *) ds)->link = ds_link;
}
static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
{
*ds_link = &((struct ar9003_txc *) ds)->link;
}
void ar9003_hw_attach_mac_ops(struct ath_hw *hw) void ar9003_hw_attach_mac_ops(struct ath_hw *hw)
{ {
struct ath_hw_ops *ops = ath9k_hw_ops(hw); struct ath_hw_ops *ops = ath9k_hw_ops(hw);
ops->rx_enable = ar9003_hw_rx_enable; ops->rx_enable = ar9003_hw_rx_enable;
ops->set_desc_link = ar9003_hw_set_desc_link;
ops->get_desc_link = ar9003_hw_get_desc_link;
} }
void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size) void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size)
......
...@@ -33,6 +33,17 @@ static inline void ath9k_hw_rxena(struct ath_hw *ah) ...@@ -33,6 +33,17 @@ static inline void ath9k_hw_rxena(struct ath_hw *ah)
ath9k_hw_ops(ah)->rx_enable(ah); ath9k_hw_ops(ah)->rx_enable(ah);
} }
static inline void ath9k_hw_set_desc_link(struct ath_hw *ah, void *ds,
u32 link)
{
ath9k_hw_ops(ah)->set_desc_link(ds, link);
}
static inline void ath9k_hw_get_desc_link(struct ath_hw *ah, void *ds,
u32 **link)
{
ath9k_hw_ops(ah)->get_desc_link(ds, link);
}
/* Private hardware call ops */ /* Private hardware call ops */
/* PHY ops */ /* PHY ops */
......
...@@ -526,6 +526,8 @@ struct ath_hw_ops { ...@@ -526,6 +526,8 @@ struct ath_hw_ops {
int restore, int restore,
int power_off); int power_off);
void (*rx_enable)(struct ath_hw *ah); void (*rx_enable)(struct ath_hw *ah);
void (*set_desc_link)(void *ds, u32 link);
void (*get_desc_link)(void *ds, u32 **link);
}; };
struct ath_hw { struct ath_hw {
......
...@@ -21,12 +21,25 @@ static void ar9002_hw_rx_enable(struct ath_hw *ah) ...@@ -21,12 +21,25 @@ static void ar9002_hw_rx_enable(struct ath_hw *ah)
REG_WRITE(ah, AR_CR, AR_CR_RXE); REG_WRITE(ah, AR_CR, AR_CR_RXE);
} }
static void ar9002_hw_set_desc_link(void *ds, u32 ds_link)
{
((struct ath_desc *) ds)->ds_link = ds_link;
}
static void ar9002_hw_get_desc_link(void *ds, u32 **ds_link)
{
*ds_link = &((struct ath_desc *)ds)->ds_link;
}
void ar9002_hw_attach_mac_ops(struct ath_hw *ah) void ar9002_hw_attach_mac_ops(struct ath_hw *ah)
{ {
struct ath_hw_ops *ops = ath9k_hw_ops(ah); struct ath_hw_ops *ops = ath9k_hw_ops(ah);
ops->rx_enable = ar9002_hw_rx_enable; ops->rx_enable = ar9002_hw_rx_enable;
ops->set_desc_link = ar9002_hw_set_desc_link;
ops->get_desc_link = ar9002_hw_get_desc_link;
} }
static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah, static void ath9k_hw_set_txq_interrupts(struct ath_hw *ah,
struct ath9k_tx_queue_info *qi) struct ath9k_tx_queue_info *qi)
{ {
......
...@@ -665,7 +665,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc, ...@@ -665,7 +665,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
bpad = PADBYTES(al_delta) + (ndelim << 2); bpad = PADBYTES(al_delta) + (ndelim << 2);
bf->bf_next = NULL; bf->bf_next = NULL;
bf->bf_desc->ds_link = 0; ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, 0);
/* link buffers of this frame to the aggregate */ /* link buffers of this frame to the aggregate */
ath_tx_addto_baw(sc, tid, bf); ath_tx_addto_baw(sc, tid, bf);
...@@ -673,7 +673,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc, ...@@ -673,7 +673,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
list_move_tail(&bf->list, bf_q); list_move_tail(&bf->list, bf_q);
if (bf_prev) { if (bf_prev) {
bf_prev->bf_next = bf; bf_prev->bf_next = bf;
bf_prev->bf_desc->ds_link = bf->bf_daddr; ath9k_hw_set_desc_link(sc->sc_ah, bf_prev->bf_desc,
bf->bf_daddr);
} }
bf_prev = bf; bf_prev = bf;
...@@ -1659,7 +1660,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf, ...@@ -1659,7 +1660,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
list_add_tail(&bf->list, &bf_head); list_add_tail(&bf->list, &bf_head);
ds = bf->bf_desc; ds = bf->bf_desc;
ds->ds_link = 0; ath9k_hw_set_desc_link(ah, ds, 0);
ath9k_hw_set11n_txdesc(ah, ds, bf->bf_frmlen, frm_type, MAX_RATE_POWER, ath9k_hw_set11n_txdesc(ah, ds, bf->bf_frmlen, frm_type, MAX_RATE_POWER,
bf->bf_keyix, bf->bf_keytype, bf->bf_flags); bf->bf_keyix, bf->bf_keytype, bf->bf_flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment