summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/usb/if_ral.c167
-rw-r--r--sys/dev/usb/if_ralreg.h158
2 files changed, 176 insertions, 149 deletions
diff --git a/sys/dev/usb/if_ral.c b/sys/dev/usb/if_ral.c
index ddb7f385887..416596e4418 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.67 2006/03/25 22:41:47 djm Exp $ */
+/* $OpenBSD: if_ral.c,v 1.68 2006/06/10 20:28:11 damien Exp $ */
/*-
* Copyright (c) 2005, 2006
@@ -186,166 +186,34 @@ static const struct ieee80211_rateset ural_rateset_11b =
static const struct ieee80211_rateset ural_rateset_11g =
{ 12, { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 } };
-/*
- * Default values for MAC registers; values taken from the reference driver.
- */
static const struct {
uint16_t reg;
uint16_t val;
} ural_def_mac[] = {
- { RAL_TXRX_CSR5, 0x8c8d },
- { RAL_TXRX_CSR6, 0x8b8a },
- { RAL_TXRX_CSR7, 0x8687 },
- { RAL_TXRX_CSR8, 0x0085 },
- { RAL_MAC_CSR13, 0x1111 },
- { RAL_MAC_CSR14, 0x1e11 },
- { RAL_TXRX_CSR21, 0xe78f },
- { RAL_MAC_CSR9, 0xff1d },
- { RAL_MAC_CSR11, 0x0002 },
- { RAL_MAC_CSR22, 0x0053 },
- { RAL_MAC_CSR15, 0x0000 },
- { RAL_MAC_CSR8, 0x0780 },
- { RAL_TXRX_CSR19, 0x0000 },
- { RAL_TXRX_CSR18, 0x005a },
- { RAL_PHY_CSR2, 0x0000 },
- { RAL_TXRX_CSR0, 0x1ec0 },
- { RAL_PHY_CSR4, 0x000f }
+ RAL_DEF_MAC
};
-/*
- * Default values for BBP registers; values taken from the reference driver.
- */
static const struct {
uint8_t reg;
uint8_t val;
} ural_def_bbp[] = {
- { 3, 0x02 },
- { 4, 0x19 },
- { 14, 0x1c },
- { 15, 0x30 },
- { 16, 0xac },
- { 17, 0x48 },
- { 18, 0x18 },
- { 19, 0xff },
- { 20, 0x1e },
- { 21, 0x08 },
- { 22, 0x08 },
- { 23, 0x08 },
- { 24, 0x80 },
- { 25, 0x50 },
- { 26, 0x08 },
- { 27, 0x23 },
- { 30, 0x10 },
- { 31, 0x2b },
- { 32, 0xb9 },
- { 34, 0x12 },
- { 35, 0x50 },
- { 39, 0xc4 },
- { 40, 0x02 },
- { 41, 0x60 },
- { 53, 0x10 },
- { 54, 0x18 },
- { 56, 0x08 },
- { 57, 0x10 },
- { 58, 0x08 },
- { 61, 0x60 },
- { 62, 0x10 },
- { 75, 0xff }
-};
-
-/*
- * Default values for RF register R2 indexed by channel numbers.
- */
-static const uint32_t ural_rf2522_r2[] = {
- 0x307f6, 0x307fb, 0x30800, 0x30805, 0x3080a, 0x3080f, 0x30814,
- 0x30819, 0x3081e, 0x30823, 0x30828, 0x3082d, 0x30832, 0x3083e
-};
-
-static const uint32_t ural_rf2523_r2[] = {
- 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d,
- 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346
-};
-
-static const uint32_t ural_rf2524_r2[] = {
- 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d,
- 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346
-};
-
-static const uint32_t ural_rf2525_r2[] = {
- 0x20327, 0x20328, 0x20329, 0x2032a, 0x2032b, 0x2032c, 0x2032d,
- 0x2032e, 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20346
+ RAL_DEF_BBP
};
-static const uint32_t ural_rf2525_hi_r2[] = {
- 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20344, 0x20345,
- 0x20346, 0x20347, 0x20348, 0x20349, 0x2034a, 0x2034b, 0x2034e
-};
-
-static const uint32_t ural_rf2525e_r2[] = {
- 0x2044d, 0x2044e, 0x2044f, 0x20460, 0x20461, 0x20462, 0x20463,
- 0x20464, 0x20465, 0x20466, 0x20467, 0x20468, 0x20469, 0x2046b
-};
-
-static const uint32_t ural_rf2526_hi_r2[] = {
- 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d, 0x0022d,
- 0x0022e, 0x0022e, 0x0022f, 0x0022d, 0x00240, 0x00240, 0x00241
-};
-
-static const uint32_t ural_rf2526_r2[] = {
- 0x00226, 0x00227, 0x00227, 0x00228, 0x00228, 0x00229, 0x00229,
- 0x0022a, 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d
-};
+static const uint32_t ural_rf2522_r2[] = RAL_RF2522_R2;
+static const uint32_t ural_rf2523_r2[] = RAL_RF2523_R2;
+static const uint32_t ural_rf2524_r2[] = RAL_RF2524_R2;
+static const uint32_t ural_rf2525_r2[] = RAL_RF2525_R2;
+static const uint32_t ural_rf2525_hi_r2[] = RAL_RF2525_HI_R2;
+static const uint32_t ural_rf2525e_r2[] = RAL_RF2525E_R2;
+static const uint32_t ural_rf2526_hi_r2[] = RAL_RF2526_HI_R2;
+static const uint32_t ural_rf2526_r2[] = RAL_RF2526_R2;
-/*
- * For dual-band RF, RF registers R1 and R4 also depend on channel number;
- * values taken from the reference driver.
- */
static const struct {
uint8_t chan;
- uint32_t r1;
- uint32_t r2;
- uint32_t r4;
+ uint32_t r1, r2, r4;
} ural_rf5222[] = {
- { 1, 0x08808, 0x0044d, 0x00282 },
- { 2, 0x08808, 0x0044e, 0x00282 },
- { 3, 0x08808, 0x0044f, 0x00282 },
- { 4, 0x08808, 0x00460, 0x00282 },
- { 5, 0x08808, 0x00461, 0x00282 },
- { 6, 0x08808, 0x00462, 0x00282 },
- { 7, 0x08808, 0x00463, 0x00282 },
- { 8, 0x08808, 0x00464, 0x00282 },
- { 9, 0x08808, 0x00465, 0x00282 },
- { 10, 0x08808, 0x00466, 0x00282 },
- { 11, 0x08808, 0x00467, 0x00282 },
- { 12, 0x08808, 0x00468, 0x00282 },
- { 13, 0x08808, 0x00469, 0x00282 },
- { 14, 0x08808, 0x0046b, 0x00286 },
-
- { 36, 0x08804, 0x06225, 0x00287 },
- { 40, 0x08804, 0x06226, 0x00287 },
- { 44, 0x08804, 0x06227, 0x00287 },
- { 48, 0x08804, 0x06228, 0x00287 },
- { 52, 0x08804, 0x06229, 0x00287 },
- { 56, 0x08804, 0x0622a, 0x00287 },
- { 60, 0x08804, 0x0622b, 0x00287 },
- { 64, 0x08804, 0x0622c, 0x00287 },
-
- { 100, 0x08804, 0x02200, 0x00283 },
- { 104, 0x08804, 0x02201, 0x00283 },
- { 108, 0x08804, 0x02202, 0x00283 },
- { 112, 0x08804, 0x02203, 0x00283 },
- { 116, 0x08804, 0x02204, 0x00283 },
- { 120, 0x08804, 0x02205, 0x00283 },
- { 124, 0x08804, 0x02206, 0x00283 },
- { 128, 0x08804, 0x02207, 0x00283 },
- { 132, 0x08804, 0x02208, 0x00283 },
- { 136, 0x08804, 0x02209, 0x00283 },
- { 140, 0x08804, 0x0220a, 0x00283 },
-
- { 149, 0x08808, 0x02429, 0x00281 },
- { 153, 0x08808, 0x0242b, 0x00281 },
- { 157, 0x08808, 0x0242d, 0x00281 },
- { 161, 0x08808, 0x0242f, 0x00281 }
+ RAL_RF5222
};
USB_DECLARE_DRIVER_CLASS(ural, DV_IFNET);
@@ -1319,10 +1187,15 @@ ural_tx_data(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
}
rate &= IEEE80211_RATE_VAL;
- if (ic->ic_flags & IEEE80211_F_WEPON) {
+ wh = mtod(m0, struct ieee80211_frame *);
+
+ if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
m0 = ieee80211_wep_crypt(ifp, m0, 1);
if (m0 == NULL)
return ENOBUFS;
+
+ /* packet header may have moved, reset our local pointer */
+ wh = mtod(m0, struct ieee80211_frame *);
}
data = &sc->tx_data[0];
@@ -1331,8 +1204,6 @@ ural_tx_data(struct ural_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
data->m = m0;
data->ni = ni;
- wh = mtod(m0, struct ieee80211_frame *);
-
if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
flags |= RAL_TX_ACK;
flags |= RAL_TX_RETRY(7);
diff --git a/sys/dev/usb/if_ralreg.h b/sys/dev/usb/if_ralreg.h
index 6ae5fbc3d4b..ad464e8f85b 100644
--- a/sys/dev/usb/if_ralreg.h
+++ b/sys/dev/usb/if_ralreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ralreg.h,v 1.9 2006/03/21 11:19:22 pedro Exp $ */
+/* $OpenBSD: if_ralreg.h,v 1.10 2006/06/10 20:28:11 damien Exp $ */
/*-
* Copyright (c) 2005, 2006
@@ -205,3 +205,159 @@ struct ural_rx_desc {
#define RAL_EEPROM_TXPOWER 0x003c
#define RAL_EEPROM_CONFIG0 0x0016
#define RAL_EEPROM_BBP_BASE 0x001c
+
+/*
+ * Default values for MAC registers; values taken from the reference driver.
+ */
+#define RAL_DEF_MAC \
+ { RAL_TXRX_CSR5, 0x8c8d }, \
+ { RAL_TXRX_CSR6, 0x8b8a }, \
+ { RAL_TXRX_CSR7, 0x8687 }, \
+ { RAL_TXRX_CSR8, 0x0085 }, \
+ { RAL_MAC_CSR13, 0x1111 }, \
+ { RAL_MAC_CSR14, 0x1e11 }, \
+ { RAL_TXRX_CSR21, 0xe78f }, \
+ { RAL_MAC_CSR9, 0xff1d }, \
+ { RAL_MAC_CSR11, 0x0002 }, \
+ { RAL_MAC_CSR22, 0x0053 }, \
+ { RAL_MAC_CSR15, 0x0000 }, \
+ { RAL_MAC_CSR8, 0x0780 }, \
+ { RAL_TXRX_CSR19, 0x0000 }, \
+ { RAL_TXRX_CSR18, 0x005a }, \
+ { RAL_PHY_CSR2, 0x0000 }, \
+ { RAL_TXRX_CSR0, 0x1ec0 }, \
+ { RAL_PHY_CSR4, 0x000f }
+
+/*
+ * Default values for BBP registers; values taken from the reference driver.
+ */
+#define RAL_DEF_BBP \
+ { 3, 0x02 }, \
+ { 4, 0x19 }, \
+ { 14, 0x1c }, \
+ { 15, 0x30 }, \
+ { 16, 0xac }, \
+ { 17, 0x48 }, \
+ { 18, 0x18 }, \
+ { 19, 0xff }, \
+ { 20, 0x1e }, \
+ { 21, 0x08 }, \
+ { 22, 0x08 }, \
+ { 23, 0x08 }, \
+ { 24, 0x80 }, \
+ { 25, 0x50 }, \
+ { 26, 0x08 }, \
+ { 27, 0x23 }, \
+ { 30, 0x10 }, \
+ { 31, 0x2b }, \
+ { 32, 0xb9 }, \
+ { 34, 0x12 }, \
+ { 35, 0x50 }, \
+ { 39, 0xc4 }, \
+ { 40, 0x02 }, \
+ { 41, 0x60 }, \
+ { 53, 0x10 }, \
+ { 54, 0x18 }, \
+ { 56, 0x08 }, \
+ { 57, 0x10 }, \
+ { 58, 0x08 }, \
+ { 61, 0x60 }, \
+ { 62, 0x10 }, \
+ { 75, 0xff }
+
+/*
+ * Default values for RF register R2 indexed by channel numbers.
+ */
+#define RAL_RF2522_R2 \
+{ \
+ 0x307f6, 0x307fb, 0x30800, 0x30805, 0x3080a, 0x3080f, 0x30814, \
+ 0x30819, 0x3081e, 0x30823, 0x30828, 0x3082d, 0x30832, 0x3083e \
+}
+
+#define RAL_RF2523_R2 \
+{ \
+ 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d, \
+ 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346 \
+}
+
+#define RAL_RF2524_R2 \
+{ \
+ 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d, \
+ 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346 \
+}
+
+#define RAL_RF2525_R2 \
+{ \
+ 0x20327, 0x20328, 0x20329, 0x2032a, 0x2032b, 0x2032c, 0x2032d, \
+ 0x2032e, 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20346 \
+}
+
+#define RAL_RF2525_HI_R2 \
+{ \
+ 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20344, 0x20345, \
+ 0x20346, 0x20347, 0x20348, 0x20349, 0x2034a, 0x2034b, 0x2034e \
+}
+
+#define RAL_RF2525E_R2 \
+{ \
+ 0x2044d, 0x2044e, 0x2044f, 0x20460, 0x20461, 0x20462, 0x20463, \
+ 0x20464, 0x20465, 0x20466, 0x20467, 0x20468, 0x20469, 0x2046b \
+}
+
+#define RAL_RF2526_HI_R2 \
+{ \
+ 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d, 0x0022d, \
+ 0x0022e, 0x0022e, 0x0022f, 0x0022d, 0x00240, 0x00240, 0x00241 \
+}
+
+#define RAL_RF2526_R2 \
+{ \
+ 0x00226, 0x00227, 0x00227, 0x00228, 0x00228, 0x00229, 0x00229, \
+ 0x0022a, 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d \
+}
+
+/*
+ * For dual-band RF, RF registers R1 and R4 also depend on channel number;
+ * values taken from the reference driver.
+ */
+#define RAL_RF5222 \
+ { 1, 0x08808, 0x0044d, 0x00282 }, \
+ { 2, 0x08808, 0x0044e, 0x00282 }, \
+ { 3, 0x08808, 0x0044f, 0x00282 }, \
+ { 4, 0x08808, 0x00460, 0x00282 }, \
+ { 5, 0x08808, 0x00461, 0x00282 }, \
+ { 6, 0x08808, 0x00462, 0x00282 }, \
+ { 7, 0x08808, 0x00463, 0x00282 }, \
+ { 8, 0x08808, 0x00464, 0x00282 }, \
+ { 9, 0x08808, 0x00465, 0x00282 }, \
+ { 10, 0x08808, 0x00466, 0x00282 }, \
+ { 11, 0x08808, 0x00467, 0x00282 }, \
+ { 12, 0x08808, 0x00468, 0x00282 }, \
+ { 13, 0x08808, 0x00469, 0x00282 }, \
+ { 14, 0x08808, 0x0046b, 0x00286 }, \
+ \
+ { 36, 0x08804, 0x06225, 0x00287 }, \
+ { 40, 0x08804, 0x06226, 0x00287 }, \
+ { 44, 0x08804, 0x06227, 0x00287 }, \
+ { 48, 0x08804, 0x06228, 0x00287 }, \
+ { 52, 0x08804, 0x06229, 0x00287 }, \
+ { 56, 0x08804, 0x0622a, 0x00287 }, \
+ { 60, 0x08804, 0x0622b, 0x00287 }, \
+ { 64, 0x08804, 0x0622c, 0x00287 }, \
+ \
+ { 100, 0x08804, 0x02200, 0x00283 }, \
+ { 104, 0x08804, 0x02201, 0x00283 }, \
+ { 108, 0x08804, 0x02202, 0x00283 }, \
+ { 112, 0x08804, 0x02203, 0x00283 }, \
+ { 116, 0x08804, 0x02204, 0x00283 }, \
+ { 120, 0x08804, 0x02205, 0x00283 }, \
+ { 124, 0x08804, 0x02206, 0x00283 }, \
+ { 128, 0x08804, 0x02207, 0x00283 }, \
+ { 132, 0x08804, 0x02208, 0x00283 }, \
+ { 136, 0x08804, 0x02209, 0x00283 }, \
+ { 140, 0x08804, 0x0220a, 0x00283 }, \
+ \
+ { 149, 0x08808, 0x02429, 0x00281 }, \
+ { 153, 0x08808, 0x0242b, 0x00281 }, \
+ { 157, 0x08808, 0x0242d, 0x00281 }, \
+ { 161, 0x08808, 0x0242f, 0x00281 }