Commit 5c9417f1 authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville

wl1271: Clean up firmware block allocation calculation

This patch simplifies the required block count calculation. Though it
introduces a division operator, it greatly simplifies the formula.
Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: default avatarTeemu Paasikivi <ext-teemu.3.paasikivi@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent ac5e1e39
...@@ -46,7 +46,7 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra) ...@@ -46,7 +46,7 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra)
{ {
struct wl1271_tx_hw_descr *desc; struct wl1271_tx_hw_descr *desc;
u32 total_len = skb->len + sizeof(struct wl1271_tx_hw_descr) + extra; u32 total_len = skb->len + sizeof(struct wl1271_tx_hw_descr) + extra;
u32 total_blocks, excluded; u32 total_blocks;
int id, ret = -EBUSY; int id, ret = -EBUSY;
/* allocate free identifier for the packet */ /* allocate free identifier for the packet */
...@@ -56,12 +56,8 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra) ...@@ -56,12 +56,8 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra)
/* approximate the number of blocks required for this packet /* approximate the number of blocks required for this packet
in the firmware */ in the firmware */
/* FIXME: try to figure out what is done here and make it cleaner */ total_blocks = total_len + TX_HW_BLOCK_SIZE - 1;
total_blocks = (total_len + 20) >> TX_HW_BLOCK_SHIFT_DIV; total_blocks = total_blocks / TX_HW_BLOCK_SIZE + TX_HW_BLOCK_SPARE;
excluded = (total_blocks << 2) + ((total_len + 20) & 0xff) + 34;
total_blocks += (excluded > 252) ? 2 : 1;
total_blocks += TX_HW_BLOCK_SPARE;
if (total_blocks <= wl->tx_blocks_available) { if (total_blocks <= wl->tx_blocks_available) {
desc = (struct wl1271_tx_hw_descr *)skb_push( desc = (struct wl1271_tx_hw_descr *)skb_push(
skb, total_len - skb->len); skb, total_len - skb->len);
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#define __WL1271_TX_H__ #define __WL1271_TX_H__
#define TX_HW_BLOCK_SPARE 2 #define TX_HW_BLOCK_SPARE 2
#define TX_HW_BLOCK_SHIFT_DIV 8 #define TX_HW_BLOCK_SIZE 252
#define TX_HW_MGMT_PKT_LIFETIME_TU 2000 #define TX_HW_MGMT_PKT_LIFETIME_TU 2000
/* The chipset reference driver states, that the "aid" value 1 /* The chipset reference driver states, that the "aid" value 1
......
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