diff options
author | Damien Bergamini <damien@cvs.openbsd.org> | 2005-11-23 19:56:52 +0000 |
---|---|---|
committer | Damien Bergamini <damien@cvs.openbsd.org> | 2005-11-23 19:56:52 +0000 |
commit | 4a441ee2a14944453ba1ef83b2818ccb541e2c4d (patch) | |
tree | fc9b05908584f1ee53db50d1c82ea5216749e2e7 /sys | |
parent | d66b8e9d75a34c932adf952c227220b082f408e4 (diff) |
Optimize TXTIME and PLCP LENGTH field computation.
Avoid modulus operations.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/ic/ral.c | 41 | ||||
-rw-r--r-- | sys/dev/usb/if_ral.c | 41 |
2 files changed, 24 insertions, 58 deletions
diff --git a/sys/dev/ic/ral.c b/sys/dev/ic/ral.c index fa03c9699fb..783425dd84c 100644 --- a/sys/dev/ic/ral.c +++ b/sys/dev/ic/ral.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ral.c,v 1.62 2005/10/02 14:01:52 damien Exp $ */ +/* $OpenBSD: ral.c,v 1.63 2005/11/23 19:56:49 damien Exp $ */ /*- * Copyright (c) 2005 @@ -1527,35 +1527,19 @@ uint16_t ral_txtime(int len, int rate, uint32_t flags) { uint16_t txtime; - int ceil, dbps; if (RAL_RATE_IS_OFDM(rate)) { - /* - * OFDM TXTIME calculation. - * From IEEE Std 802.11a-1999, pp. 37. - */ - dbps = rate * 2; /* data bits per OFDM symbol */ - - ceil = (16 + 8 * len + 6) / dbps; - if ((16 + 8 * len + 6) % dbps != 0) - ceil++; - - txtime = 16 + 4 + 4 * ceil + 6; + /* IEEE Std 802.11a-1999, pp. 37 */ + txtime = (8 + 4 * len + 3 + rate - 1) / rate; + txtime = 16 + 4 + 4 * txtime + 6; } else { - /* - * High Rate TXTIME calculation. - * From IEEE Std 802.11b-1999, pp. 28. - */ - ceil = (8 * len * 2) / rate; - if ((8 * len * 2) % rate != 0) - ceil++; - + /* IEEE Std 802.11b-1999, pp. 28 */ + txtime = (16 * len + rate - 1) / rate; if (rate != 2 && (flags & IEEE80211_F_SHPREAMBLE)) - txtime = 72 + 24 + ceil; + txtime += 72 + 24; else - txtime = 144 + 48 + ceil; + txtime += 144 + 48; } - return txtime; } @@ -1621,12 +1605,11 @@ ral_setup_tx_desc(struct ral_softc *sc, struct ral_tx_desc *desc, * Long PLCP LENGTH field. * From IEEE Std 802.11b-1999, pp. 16. */ - plcp_length = (8 * len * 2) / rate; - remainder = (8 * len * 2) % rate; - if (remainder != 0) { - if (rate == 22 && (rate - remainder) / 16 != 0) + plcp_length = (16 * len + rate - 1) / rate; + if (rate == 22) { + remainder = (16 * len) % 22; + if (remainder != 0 && remainder < 7) desc->plcp_service |= RAL_PLCP_LENGEXT; - plcp_length++; } desc->plcp_length = htole16(plcp_length); } diff --git a/sys/dev/usb/if_ral.c b/sys/dev/usb/if_ral.c index b69cbaf3ae1..270ae7e3a2c 100644 --- a/sys/dev/usb/if_ral.c +++ b/sys/dev/usb/if_ral.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_ral.c,v 1.45 2005/10/02 13:01:59 damien Exp $ */ +/* $OpenBSD: if_ral.c,v 1.46 2005/11/23 19:56:51 damien Exp $ */ /*- * Copyright (c) 2005 @@ -1004,35 +1004,19 @@ Static uint16_t ural_txtime(int len, int rate, uint32_t flags) { uint16_t txtime; - int ceil, dbps; if (RAL_RATE_IS_OFDM(rate)) { - /* - * OFDM TXTIME calculation. - * From IEEE Std 802.11a-1999, pp. 37. - */ - dbps = rate * 2; /* data bits per OFDM symbol */ - - ceil = (16 + 8 * len + 6) / dbps; - if ((16 + 8 * len + 6) % dbps != 0) - ceil++; - - txtime = 16 + 4 + 4 * ceil + 6; + /* IEEE Std 802.11a-1999, pp. 37 */ + txtime = (8 + 4 * len + 3 + rate - 1) / rate; + txtime = 16 + 4 + 4 * txtime + 6; } else { - /* - * High Rate TXTIME calculation. - * From IEEE Std 802.11b-1999, pp. 28. - */ - ceil = (8 * len * 2) / rate; - if ((8 * len * 2) % rate != 0) - ceil++; - + /* IEEE Std 802.11b-1999, pp. 28 */ + txtime = (16 * len + rate - 1) / rate; if (rate != 2 && (flags & IEEE80211_F_SHPREAMBLE)) - txtime = 72 + 24 + ceil; + txtime += 72 + 24; else - txtime = 144 + 48 + ceil; + txtime += 144 + 48; } - return txtime; } @@ -1097,12 +1081,11 @@ ural_setup_tx_desc(struct ural_softc *sc, struct ural_tx_desc *desc, * Long PLCP LENGTH field. * From IEEE Std 802.11b-1999, pp. 16. */ - plcp_length = (8 * len * 2) / rate; - remainder = (8 * len * 2) % rate; - if (remainder != 0) { - if (rate == 22 && (rate - remainder) / 16 != 0) + plcp_length = (16 * len + rate - 1) / rate; + if (rate == 22) { + remainder = (16 * len) % 22; + if (remainder != 0 && remainder < 7) desc->plcp_service |= RAL_PLCP_LENGEXT; - plcp_length++; } desc->plcp_length = htole16(plcp_length); } |