Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145170120
D15692.id44043.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
70 KB
Referenced Files
None
Subscribers
None
D15692.id44043.diff
View Options
Index: sys/contrib/dev/rtwn/rtwn-rtl8188eefw.fw.uu
===================================================================
--- /dev/null
+++ sys/contrib/dev/rtwn/rtwn-rtl8188eefw.fw.uu
@@ -0,0 +1,253 @@
+begin 644 rtwn-rtl8188eefw.fw
+MX8@0``@````0)2%6L"L``*($```````````````````"134`````````````
+M````````P58`````````````````````````````````````````````````
+M````````````H<T```````#A_```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+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
++Y#3[]8/@_R(`,@@`
+`
+end
Index: sys/dev/rtwn/pci/rtwn_pci_attach.h
===================================================================
--- sys/dev/rtwn/pci/rtwn_pci_attach.h
+++ sys/dev/rtwn/pci/rtwn_pci_attach.h
@@ -17,9 +17,11 @@
*/
void r92ce_attach(struct rtwn_pci_softc *);
+void r88ee_attach(struct rtwn_pci_softc *);
enum {
RTWN_CHIP_RTL8192CE,
+ RTWN_CHIP_RTL8188EE,
RTWN_CHIP_MAX_PCI
};
@@ -32,13 +34,15 @@
static const struct rtwn_pci_ident rtwn_pci_ident_table[] = {
{ 0x10ec, 0x8176, "Realtek RTL8188CE", RTWN_CHIP_RTL8192CE },
+ { 0x10ec, 0x8179, "Realtek RTL8188EE", RTWN_CHIP_RTL8188EE },
{ 0, 0, NULL, RTWN_CHIP_MAX_PCI }
};
typedef void (*chip_pci_attach)(struct rtwn_pci_softc *);
static const chip_pci_attach rtwn_chip_pci_attach[RTWN_CHIP_MAX_PCI] = {
- [RTWN_CHIP_RTL8192CE] = r92ce_attach
+ [RTWN_CHIP_RTL8192CE] = r92ce_attach,
+ [RTWN_CHIP_RTL8188EE] = r88ee_attach
};
static __inline void
Index: sys/dev/rtwn/rtl8188e/pci/r88ee.h
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee.h
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef RTL8188EE_H
+#define RTL8188EE_H
+
+#include <dev/rtwn/rtl8188e/r88e.h>
+
+
+/*
+ * Function declarations.
+ */
+/* r88ee_calib.c */
+void r88ee_iq_calib(struct rtwn_softc *);
+
+/* r88ee_fw.c */
+#ifndef RTWN_WITHOUT_UCODE
+void r88ee_fw_reset(struct rtwn_softc *, int);
+#endif
+
+/* r88ee_init.c */
+void r88ee_init_intr(struct rtwn_softc *);
+void r88ee_init_edca(struct rtwn_softc *);
+int r88ee_power_on(struct rtwn_softc *);
+void r88ee_power_off(struct rtwn_softc *);
+void r88ee_init_ampdu(struct rtwn_softc *);
+void r88ee_post_init(struct rtwn_softc *);
+void r88ee_init_rx_agg(struct rtwn_softc *);
+void r88ee_init_rf(struct rtwn_softc *);
+
+/* r88ee_rx.c */
+int r88ee_classify_intr(struct rtwn_softc *, void *, int);
+void r88ee_enable_intr(struct rtwn_pci_softc *);
+void r88ee_start_xfers(struct rtwn_softc *);
+
+/* r88ee_tx.c */
+void r88ee_setup_tx_desc(struct rtwn_pci_softc *, void *, uint32_t);
+void r88ee_tx_postsetup(struct rtwn_pci_softc *, void *,
+ bus_dma_segment_t[]);
+void r88ee_copy_tx_desc(void *, const void *);
+void r88ee_dump_tx_desc(struct rtwn_softc *, const void *);
+
+/* r88ee_rf.c */
+uint32_t r88ee_rf_read(struct rtwn_softc *, int, uint8_t);
+void r88ee_rf_write(struct rtwn_softc *, int, uint8_t, uint32_t);
+
+#endif /* RTL8188EE_H */
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
@@ -0,0 +1,263 @@
+/* $OpenBSD: if_rtwn.c,v 1.6 2015/08/28 00:03:53 deraadt Exp $ */
+
+/*-
+ * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
+ * Copyright (c) 2015 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnreg.h>
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_nop.h>
+
+#include <dev/rtwn/rtl8188e/r88e_priv.h>
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+#include <dev/rtwn/rtl8192c/r92c.h>
+#include <dev/rtwn/rtl8192c/r92c_var.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce.h>
+
+#include <dev/rtwn/rtl8192c/r92c_var.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_priv.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_reg.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_tx_desc.h>
+#include <dev/rtwn/rtl8192c/r92c.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_priv.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_tx_desc.h>
+#include <dev/rtwn/rtl8188e/usb/r88eu.h>
+#include <dev/rtwn/rtl8192e/r92e.h>
+
+static struct rtwn_r92c_txpwr r88ee_txpwr;
+
+void r88ee_attach(struct rtwn_pci_softc *);
+
+static void
+r88ee_postattach(struct rtwn_softc *sc)
+{
+ struct r92c_softc *rs = sc->sc_priv;
+ struct ieee80211com *ic = &sc->sc_ic;
+ sc->fwname = "rtwn-rtl8188eefw";
+ sc->fwsig = 0x88E;
+
+ rs->rs_scan_start = ic->ic_scan_start;
+ ic->ic_scan_start = r92c_scan_start;
+ rs->rs_scan_end = ic->ic_scan_end;
+ ic->ic_scan_end = r92c_scan_end;
+}
+
+static void
+r88ee_set_name(struct rtwn_softc *sc)
+{
+ sc->name = "RTL8188EE";
+}
+
+static void
+r88ee_attach_private(struct rtwn_softc *sc)
+{
+ struct r92c_softc *rs;
+
+ rs = malloc(sizeof(struct r92c_softc), M_RTWN_PRIV, M_WAITOK | M_ZERO);
+
+ rs->rs_txpwr = &r88ee_txpwr;
+
+ rs->rs_set_bw20 = r88e_set_bw20;
+ rs->rs_get_txpower = r88e_get_txpower;
+ rs->rs_set_gain = r88e_set_gain;
+ rs->rs_tx_enable_ampdu = r88e_tx_enable_ampdu;
+ rs->rs_tx_setup_hwseq = r88e_tx_setup_hwseq;
+ rs->rs_tx_setup_macid = r88e_tx_setup_macid;
+ rs->rs_set_name = r88ee_set_name;
+
+ /* XXX TODO: test with net80211 ratectl! */
+#ifndef RTWN_WITHOUT_UCODE
+ rs->rs_c2h_timeout = hz;
+
+ callout_init_mtx(&rs->rs_c2h_report, &sc->sc_mtx, 0);
+#endif
+
+ rs->rf_read_delay[0] = 1000;
+ rs->rf_read_delay[1] = 1000;
+ rs->rf_read_delay[2] = 1000;
+
+ sc->sc_priv = rs;
+
+}
+
+static void
+r88ee_adj_devcaps(struct rtwn_softc *sc)
+{
+ struct ieee80211com *ic = &sc->sc_ic;
+
+ /*
+ * XXX do NOT enable PMGT until RSVD_PAGE command
+ * will not be tested / fixed + HRPWM register must be set too.
+ */
+ ic->ic_caps &= ~IEEE80211_C_PMGT;
+}
+
+void
+r88ee_attach(struct rtwn_pci_softc *pc)
+{
+ struct rtwn_softc *sc = &pc->pc_sc;
+
+ /* PCIe part. */
+ pc->pc_setup_tx_desc = r92ce_setup_tx_desc;
+ pc->pc_tx_postsetup = r92ce_tx_postsetup;
+ pc->pc_copy_tx_desc = r92ce_copy_tx_desc;
+ pc->pc_enable_intr = r88ee_enable_intr;
+
+ pc->pc_qmap = 0xe771;
+ pc->tcr = 0x8200;
+
+ /* Common part. */
+ sc->sc_flags = RTWN_FLAG_EXT_HDR;
+
+ sc->sc_start_xfers = r88ee_start_xfers;
+ sc->sc_set_chan = r92c_set_chan;
+ sc->sc_fill_tx_desc = r92c_fill_tx_desc;
+ sc->sc_fill_tx_desc_raw = r92c_fill_tx_desc_raw;
+ sc->sc_fill_tx_desc_null = r92c_fill_tx_desc_null; /* XXX recheck */
+ sc->sc_dump_tx_desc = r92ce_dump_tx_desc;
+ sc->sc_tx_radiotap_flags = r92c_tx_radiotap_flags;
+ sc->sc_rx_radiotap_flags = r92c_rx_radiotap_flags;
+ sc->sc_get_rssi_cck = r88e_get_rssi_cck;
+ sc->sc_get_rssi_ofdm = r88e_get_rssi_ofdm;
+ sc->sc_classify_intr = r88ee_classify_intr;
+ sc->sc_handle_tx_report = rtwn_nop_softc_uint8_int;
+ sc->sc_handle_c2h_report = rtwn_nop_softc_uint8_int;
+ sc->sc_check_frame = rtwn_nop_int_softc_mbuf;
+ sc->sc_rf_read = r92c_rf_read;
+ sc->sc_rf_write = r88e_rf_write;
+ sc->sc_check_condition = r92c_check_condition;
+ sc->sc_efuse_postread = r92c_efuse_postread;
+ sc->sc_parse_rom = r88ee_parse_rom;
+ sc->sc_set_led = r88e_set_led;
+ sc->sc_power_on = r88ee_power_on;
+ sc->sc_power_off = r88ee_power_off;
+#ifndef RTWN_WITHOUT_UCODE
+ sc->sc_fw_reset = r88e_fw_reset;
+ sc->sc_fw_download_enable = r88e_fw_download_enable;
+#endif
+ sc->sc_set_page_size = r92c_set_page_size;
+ sc->sc_lc_calib = r92c_lc_calib;
+ sc->sc_iq_calib = r88e_iq_calib;
+ sc->sc_read_chipid_vendor = rtwn_nop_softc_uint32;
+ sc->sc_adj_devcaps = r88ee_adj_devcaps;
+ sc->sc_vap_preattach = rtwn_nop_softc_vap;
+ sc->sc_postattach = r88ee_postattach;
+ sc->sc_detach_private = r92c_detach_private;
+ sc->sc_set_media_status = r88e_set_media_status;
+#ifndef RTWN_WITHOUT_UCODE
+ sc->sc_set_rsvd_page = r88e_set_rsvd_page;
+ sc->sc_set_pwrmode = r88e_set_pwrmode;
+ sc->sc_set_rssi = r92c_set_rssi;
+#endif
+ sc->sc_beacon_init = r92c_beacon_init;
+ sc->sc_beacon_enable = r88e_beacon_enable;
+ sc->sc_beacon_set_rate = rtwn_nop_void_int;
+ sc->sc_beacon_select = rtwn_nop_softc_int;
+ sc->sc_temp_measure = r88e_temp_measure;
+ sc->sc_temp_read = r88e_temp_read;
+ sc->sc_init_tx_agg = rtwn_nop_softc;
+ sc->sc_init_rx_agg = rtwn_nop_softc;
+ sc->sc_init_ampdu = r92ce_init_ampdu;
+ sc->sc_init_intr = r88ee_init_intr;
+ sc->sc_init_edca = r92ce_init_edca;
+ sc->sc_init_bb = r88ee_init_bb;
+ sc->sc_init_rf = r92c_init_rf;
+ sc->sc_init_antsel = rtwn_nop_softc;
+ sc->sc_post_init = r88ee_post_init;
+ sc->sc_init_bcnq1_boundary = rtwn_nop_int_softc;
+
+ sc->mac_prog = &rtl8188ee_mac[0];
+ sc->mac_size = nitems(rtl8188ee_mac);
+ sc->bb_prog = &rtl8188ee_bb[0];
+ sc->bb_size = nitems(rtl8188ee_bb);
+ sc->agc_prog = &rtl8188ee_agc[0];
+ sc->agc_size = nitems(rtl8188ee_agc);
+ sc->rf_prog = &rtl8188ee_rf[0];
+
+ sc->page_count = 0xAF;
+ sc->pktbuf_count = 0xAB;
+
+ sc->ackto = 0x40;
+ sc->npubqpages = 115;
+ sc->nhqpages = R92CE_HPQ_NPAGES;
+ sc->nnqpages = 1;
+ sc->nlqpages = 13;
+ sc->page_size = R92C_TX_PAGE_SIZE;
+
+ sc->txdesc_len = sizeof(struct r88ee_tx_desc);
+ sc->efuse_maxlen = R88E_EFUSE_MAX_LEN;
+ sc->efuse_maplen = R88E_EFUSE_MAP_LEN;
+ sc->rx_dma_size = R88E_RX_DMA_BUFFER_SIZE;
+
+ sc->macid_limit = R88E_MACID_MAX + 1;
+ sc->cam_entry_limit = R92C_CAM_ENTRY_COUNT;
+ sc->fwsize_limit = 77895;
+ sc->temp_delta = R88E_CALIB_THRESHOLD;
+
+ sc->bcn_status_reg[0] = R92C_TDECTRL;
+ /*
+ * TODO: some additional setup is required
+ * to maintain few beacons at the same time.
+ *
+ * XXX BCNQ1 mechanism is not needed here; move it to the USB module.
+ */
+ sc->bcn_status_reg[1] = R92C_TDECTRL;
+ sc->rcr = 0xf000780e;
+
+ sc->sc_llt_init = r88ee_llt_init;
+ sc->sc_get_rx_stats = r88e_get_rx_stats;
+
+ sc->ntxchains = 1;
+ sc->nrxchains = 1;
+
+ r88ee_attach_private(sc);
+}
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_calib.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_calib.c
@@ -0,0 +1,65 @@
+/* $OpenBSD: if_rtwn.c,v 1.6 2015/08/28 00:03:53 deraadt Exp $ */
+
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnreg.h>
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_debug.h>
+
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+
+
+#define RTWN_IQ_CAL_NRUN 3
+void
+r88ee_iq_calib(struct rtwn_softc *sc)
+{
+ /* Currently unimplemented */
+}
+#undef RTWN_IQ_CAL_NRUN
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_init.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_init.c
@@ -0,0 +1,256 @@
+/*-
+ * Copyright (c) 2017 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnvar.h>
+
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+#include <dev/rtwn/rtl8188e/r88e_reg.h>
+#include <dev/rtwn/rtl8192c/r92c.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_reg.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_pwrseq.h>
+#include <dev/rtwn/rtl8192c/r92c_var.h>
+
+void
+r88ee_init_intr(struct rtwn_softc *sc)
+{
+ /* Disable interrupts. */
+ rtwn_write_4(sc, R88E_HIMR, 0x200084ff);
+ rtwn_write_4(sc, R88E_HIMRE, 0x100);
+ rtwn_write_1(sc, 0x01AF, 0x0);
+ rtwn_write_4(sc, 0x0058, 0xc0);
+}
+
+void
+r88ee_init_edca(struct rtwn_softc *sc)
+{
+ rtwn_write_1(sc, R88EE_SIFS_TRX + 1, 0x0a);
+ rtwn_write_1(sc, R88EE_SIFS_SPEC + 1, 0x0a);
+ rtwn_write_1(sc, R88EE_SIFS_SPEC_MAC + 1, 0x0a);
+ rtwn_write_2(sc, R88EE_SIFS_RESP_OFDM, 0x0e0e);
+}
+
+int
+r88ee_power_on(struct rtwn_softc *sc)
+{
+ uint8_t bytetmp;
+
+ bytetmp = rtwn_read_1(sc, R92C_APS_FSMCO + 1) & (~0x80);
+ rtwn_write_1(sc, R92C_APS_FSMCO + 1, bytetmp);
+
+ rtwn_write_1(sc, R92C_RSV_CTRL, 0x00);
+
+ /* Power sequence: NIC enable flow */
+ rtwn_setbits_1(sc, 0x0005, 0x18, 0x0);
+ if (!r88ee_pwrseq_polling(sc, 0x6, 0x2, 0x2))
+ return false;
+ rtwn_setbits_1(sc, 0x0002, 0x3, 0x0);
+ rtwn_setbits_1(sc, 0x0026, 0x80, 0x80);
+ rtwn_setbits_1(sc, 0x0005, 0x80, 0x0);
+ rtwn_setbits_1(sc, 0x0005, 0x18, 0x0);
+ rtwn_setbits_1(sc, 0x0005, 0x1, 0x1);
+ if (!r88ee_pwrseq_polling(sc, 0x0005, 0x1, 0x0))
+ return false;
+ /* End of power sequence */
+
+ bytetmp = rtwn_read_1(sc, R92C_SYS_CLKR);
+
+ rtwn_write_1(sc, R92C_SYS_CLKR, bytetmp | 0x08);
+ bytetmp = rtwn_read_1(sc, R92C_GPIO_MUXCFG+1);
+ rtwn_write_1(sc, R92C_GPIO_MUXCFG+1, (bytetmp & (~0x10)));
+ rtwn_write_1(sc, 0x367, 0x80);
+
+ rtwn_write_2(sc, R92C_CR, 0x2ff);
+ rtwn_write_1(sc, R92C_CR+1, 0x06);
+ rtwn_write_1(sc, R92C_MSR, 0x00);
+
+ rtwn_write_4(sc, R92C_INT_MIG, 0);
+
+ rtwn_write_1(sc, R92C_PCIE_CTRL_REG+1, 0); /* Enable RX DMA */
+
+ rtwn_write_1(sc, 0x04CA, 0x0B);
+ rtwn_write_4(sc, R92C_RCR, sc->rcr);
+
+ rtwn_write_4(sc, R92C_MCUTST_1, 0x0);
+
+ return(0);
+
+}
+
+void
+r88ee_power_off(struct rtwn_softc *sc)
+{
+ uint32_t count = 0;
+ uint8_t tmp;
+
+ tmp = rtwn_read_1(sc, R88E_TX_RPT_CTRL);
+ rtwn_write_1(sc, R88E_TX_RPT_CTRL, tmp & (~0x02));
+
+ tmp = rtwn_read_1(sc, R92C_TRXDMA_CTRL);
+
+ while (!(tmp & 0x02) && (count++ < 100)) {
+ rtwn_delay(sc, 10);
+ tmp = rtwn_read_1(sc, R88EE_RXDMA_CTRL);
+ count++;
+ }
+
+ rtwn_write_1(sc, R92C_PCIE_CTRL_REG+1, 0xFF);
+
+ /* Power sequence: Disable NIC LPS enable Flow */
+ rtwn_setbits_1(sc, 0x0522, 0xff, 0x7f);
+ r88ee_pwrseq_polling(sc, 0x05f8, 0xff, 0x0);
+ r88ee_pwrseq_polling(sc, 0x05f9, 0xff, 0x0);
+ r88ee_pwrseq_polling(sc, 0x05fa, 0xff, 0x0);
+ r88ee_pwrseq_polling(sc, 0x05fb, 0xff, 0x0);
+ rtwn_setbits_1(sc, 0x0002, 0x01, 0x00);
+ rtwn_setbits_1(sc, 0x0100, 0xff, 0x3f);
+ rtwn_setbits_1(sc, 0x0101, 0x02, 0x00);
+ rtwn_setbits_1(sc, 0x0553, 0x20, 0x20);
+ /* End of power sequence */
+
+ rtwn_write_1(sc, R92C_RF_CTRL, 0x00);
+
+ tmp = rtwn_read_1(sc, R92C_SYS_FUNC_EN+1);
+ rtwn_write_1(sc, R92C_SYS_FUNC_EN+1, (tmp & (~0x04)));
+ rtwn_write_1(sc, R92C_SYS_FUNC_EN+1, (tmp | 0x04));
+
+ tmp = rtwn_read_1(sc, R92C_SYS_FUNC_EN+1);
+ rtwn_write_1(sc, R92C_SYS_FUNC_EN + 1, (tmp & (~0x04)));
+ rtwn_write_1(sc, R92C_MCUFWDL, 0x00);
+
+ tmp = rtwn_read_1(sc, R88E_32K_CTRL);
+ rtwn_write_1(sc, R88E_32K_CTRL, (tmp & (~0x01)));
+
+ /* Power sequence: NIC Disable flow */
+ rtwn_setbits_1(sc, 0x001f, 0xff, 0x00);
+ rtwn_setbits_1(sc, 0x0023, 0x10, 0x10);
+ rtwn_setbits_1(sc, 0x0005, 0x02, 0x02);
+ r88ee_pwrseq_polling(sc, 0x05, 0x02, 0x0);
+ rtwn_setbits_1(sc, 0x0026, 0x80, 0x80);
+ /* End of power sequence */
+
+ tmp = rtwn_read_1(sc, R92C_RSV_CTRL+1);
+ rtwn_write_1(sc, R92C_RSV_CTRL+1, (tmp & (~0x08)));
+ tmp = rtwn_read_1(sc, R92C_RSV_CTRL+1);
+ rtwn_write_1(sc, R92C_RSV_CTRL+1, (tmp | 0x08));
+
+ rtwn_write_1(sc, R92C_RSV_CTRL, 0x0E);
+
+ tmp = rtwn_read_1(sc, R92C_GPIO_IN);
+ rtwn_write_1(sc, R92C_GPIO_OUT, tmp);
+ rtwn_write_1(sc, R92C_GPIO_IO_SEL, 0x7F);
+
+ tmp = rtwn_read_1(sc, R92C_GPIO_IO_SEL);
+ rtwn_write_1(sc, R92C_GPIO_IO_SEL, (tmp << 4) | tmp);
+ tmp = rtwn_read_1(sc, R92C_GPIO_IO_SEL+1);
+ rtwn_write_1(sc, R92C_GPIO_IO_SEL+1, tmp | 0x0F);
+
+ rtwn_write_4(sc, R88EE_GPIO_IO_SEL_2+2, 0x00080808);
+}
+
+void
+r88ee_init_ampdu(struct rtwn_softc *sc)
+{
+ /* Not implemented */
+}
+
+void
+r88ee_post_init(struct rtwn_softc *sc)
+{
+ rtwn_write_2(sc, R92C_FWHW_TXQ_CTRL,
+ 0x1f00 | R92C_FWHW_TXQ_CTRL_AMPDU_RTY_NEW);
+
+ rtwn_write_1(sc, R92C_BCN_MAX_ERR, 0xff);
+
+ /* Perform LO and IQ calibrations. */
+ rtwn_iq_calib(sc);
+ /* Perform LC calibration. */
+ rtwn_lc_calib(sc);
+
+ r92c_pa_bias_init(sc);
+
+ /* Fix for lower temperature. */
+ rtwn_write_1(sc, 0x15, 0xe9);
+
+#ifndef RTWN_WITHOUT_UCODE
+ if (sc->sc_flags & RTWN_FW_LOADED) {
+ struct r92c_softc *rs = sc->sc_priv;
+
+ if (sc->sc_ratectl_sysctl == RTWN_RATECTL_FW) {
+ /* XXX TODO: fix (see comment in r92cu_init.c) */
+ sc->sc_ratectl = RTWN_RATECTL_NET80211;
+ } else
+ sc->sc_ratectl = sc->sc_ratectl_sysctl;
+
+ /* Start C2H event handling. */
+ callout_reset(&rs->rs_c2h_report, rs->rs_c2h_timeout,
+ r92c_handle_c2h_report, sc);
+ } else
+#endif
+ sc->sc_ratectl = RTWN_RATECTL_NONE;
+}
+
+void
+r88ee_init_rx_agg(struct rtwn_softc *sc) {
+ struct rtwn_pci_softc *pc = sc->sc_priv;
+
+ uint16_t tmp;
+
+ tmp = rtwn_read_2(sc, R88EE_TRXDMA_CTRL);
+ tmp &= 0xf;
+ tmp |= 0xE771;
+ rtwn_write_2(sc, R88EE_TRXDMA_CTRL, tmp);
+
+ rtwn_write_4(sc, R92C_RCR, sc->rcr);
+ rtwn_write_2(sc, R92C_RXFLTMAP2, 0xffff);
+ rtwn_write_4(sc, R92C_TCR, pc->tcr);
+
+ rtwn_write_1(sc, R92C_PCIE_CTRL_REG+1, 0);
+
+}
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_priv.h
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_priv.h
@@ -0,0 +1,236 @@
+/* $OpenBSD: if_rtwnreg.h,v 1.3 2015/06/14 08:02:47 stsp Exp $ */
+
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef R88EE_PRIV_H
+#define R88EE_PRIV_H
+
+#include <dev/rtwn/rtl8188e/r88e_priv.h>
+
+/*
+ * RF initialization values.
+ */
+static const uint8_t rtl8188ee_rf_regs0[] = {
+ 0x000, 0x008, 0x018, 0x019, 0x01E,
+ 0x01F, 0x02F, 0x03F, 0x042, 0x057,
+ 0x058, 0x067, 0x083, 0x0B0, 0x0B1,
+ 0x0B2, 0x0B4, 0x0B6, 0x0B7, 0x0B8,
+ 0x0B9, 0x0BA, 0x0BB, 0x0BF, 0x0C2,
+ 0x0C3, 0x0C4, 0x0C5, 0x0C6, 0x0C7,
+ 0x0C8, 0x0C9, 0x0CA, 0x0DF, 0x0EF,
+ 0x051, 0x052, 0x053, 0x056, 0x035,
+ 0x035, 0x035, 0x036, 0x036, 0x036,
+ 0x036, 0x0B6, 0x018, 0x05A, 0x019,
+ 0x034, 0x034, 0x034, 0x034, 0x034,
+ 0x034, 0x034, 0x034, 0x034, 0x034,
+ 0x034, 0x000, 0x084, 0x086, 0x087,
+ 0x08E, 0x08F, 0x0EF, 0x03B, 0x03B,
+ 0x03B, 0x03B, 0x03B, 0x03B, 0x03B,
+ 0x03B, 0x03B, 0x03B, 0x03B, 0x03B,
+
+ 0x03B, 0x03B, 0x03B, 0x03B, 0x0EF,
+ 0x000, 0x018, 0x0F9, 0x0F9, 0x01E,
+ 0x0F9, 0x0F9, 0x01E, 0x01F, 0x000
+
+};
+
+static const uint32_t rtl8188ee_rf_vals0[] = {
+ 0x00030000, 0x00084000, 0x00000407, 0x00000012, 0x00080009,
+ 0x00000880, 0x0001A060, 0x00000000, 0x000060C0, 0x000D0000,
+ 0x000BE180, 0x00001552, 0x00000000, 0x000FF8FC, 0x00054400,
+ 0x000CCC19, 0x00043003, 0x0004953E, 0x0001C718, 0x000060FF,
+ 0x00080001, 0x00040000, 0x00000400, 0x000C0000, 0x00002400,
+ 0x00000009, 0x00040C91, 0x00099999, 0x000000A3, 0x00088820,
+ 0x00076C06, 0x00000000, 0x00080000, 0x00000180, 0x000001A0,
+ 0x0006B27D, 0x0007E49D, 0x00000073, 0x00051FF3, 0x00000086,
+ 0x00000186, 0x00000286, 0x00001C25, 0x00009C25, 0x00011C25,
+ 0x00019C25, 0x00048538, 0x00000C07, 0x0004BD00, 0x000739D0,
+ 0x0000ADF3, 0x00009DF0, 0x00008DED, 0x00007DEA, 0x00006DE7,
+ 0x000054EE, 0x000044EB, 0x000034E8, 0x0000246B, 0x00001468,
+ 0x0000006D, 0x00030159, 0x00068200, 0x000000CE, 0x00048A00,
+ 0x00065540, 0x00088000, 0x000020A0, 0x000F02B0, 0x000EF7B0,
+ 0x000D4FB0, 0x000CF060, 0x000B0090, 0x000A0080, 0x00090080,
+ 0x0008F780, 0x000722B0, 0x0006F7B0, 0x00054FB0, 0x0004F060,
+ 0x00030090, 0x00020080, 0x00010080, 0x0000F780, 0x000000A0,
+
+ 0x00010159, 0x0000F407, 0x0000C350, 0x0000C350, 0x00080003,
+ 0x0000C350, 0x0000C350, 0x00000001, 0x00080000, 0x00033e60
+};
+
+_Static_assert(nitems(rtl8188ee_rf_regs0) == nitems(rtl8188ee_rf_vals0),
+ "rtl8188ee_rf_regs0 and rtl8188ee_rf_vals0 must be the same size!");
+
+
+static const struct rtwn_rf_prog rtl8188ee_rf[] = {
+ {
+ nitems(rtl8188ee_rf_regs0),
+ rtl8188ee_rf_regs0,
+ rtl8188ee_rf_vals0,
+ { 0x0 },
+ NULL,
+ },
+ { 0, NULL, NULL, { 0 }, NULL }
+};
+
+/*
+ * MAC initialization values.
+ */
+static const struct rtwn_mac_prog rtl8188ee_mac[] = {
+ { 0x026, 0x41 }, { 0x027, 0x35 }, { 0x428, 0x0A }, { 0x429, 0x10 },
+ { 0x430, 0x00 }, { 0x431, 0x01 }, { 0x432, 0x02 }, { 0x433, 0x04 },
+ { 0x434, 0x05 }, { 0x435, 0x06 }, { 0x436, 0x07 }, { 0x437, 0x08 },
+ { 0x438, 0x00 }, { 0x439, 0x00 }, { 0x43A, 0x01 }, { 0x43B, 0x02 },
+ { 0x43C, 0x04 }, { 0x43D, 0x05 }, { 0x43E, 0x06 }, { 0x43F, 0x07 },
+ { 0x440, 0x5D }, { 0x441, 0x01 }, { 0x442, 0x00 }, { 0x444, 0x15 },
+ { 0x445, 0xF0 }, { 0x446, 0x0F }, { 0x447, 0x00 }, { 0x458, 0x41 },
+ { 0x459, 0xA8 }, { 0x45A, 0x72 }, { 0x45B, 0xB9 }, { 0x460, 0x66 },
+ { 0x461, 0x66 }, { 0x480, 0x08 }, { 0x4C8, 0xFF }, { 0x4C9, 0x08 },
+ { 0x4CC, 0xFF }, { 0x4CD, 0xFF }, { 0x4CE, 0x01 }, { 0x4D3, 0x01 },
+ { 0x500, 0x26 }, { 0x501, 0xA2 }, { 0x502, 0x2F }, { 0x503, 0x00 },
+ { 0x504, 0x28 }, { 0x505, 0xA3 }, { 0x506, 0x5E }, { 0x507, 0x00 },
+ { 0x508, 0x2B }, { 0x509, 0xA4 }, { 0x50A, 0x5E }, { 0x50B, 0x00 },
+ { 0x50C, 0x4F }, { 0x50D, 0xA4 }, { 0x50E, 0x00 }, { 0x50F, 0x00 },
+ { 0x512, 0x1C }, { 0x514, 0x0A }, { 0x516, 0x0A }, { 0x525, 0x4F },
+ { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55D, 0xFF },
+ { 0x605, 0x30 }, { 0x608, 0x0E }, { 0x609, 0x2A }, { 0x620, 0xFF },
+ { 0x621, 0xFF }, { 0x622, 0xFF }, { 0x623, 0xFF }, { 0x624, 0xFF },
+ { 0x625, 0xFF }, { 0x626, 0xFF }, { 0x627, 0xFF }, { 0x652, 0x20 },
+ { 0x63C, 0x0A }, { 0x63D, 0x0A }, { 0x63E, 0x0E }, { 0x63F, 0x0E },
+ { 0x640, 0x40 }, { 0x66E, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 },
+ { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 },
+ { 0x70A, 0x65 }, { 0x70B, 0x87 }
+};
+
+/*
+ * Baseband initialization values.
+ */
+static const uint16_t rtl8188ee_bb_phy_regs0[] = {
+ 0x800, 0x804, 0x808, 0x80C, 0x810, 0x814, 0x818, 0x81C, 0x820,
+ 0x824, 0x828, 0x82C, 0x830, 0x834, 0x838, 0x83C, 0x840, 0x844,
+ 0x848, 0x84C, 0x850, 0x854, 0x858, 0x85C, 0x860, 0x864, 0x868,
+ 0x86C, 0x870, 0x874, 0x878, 0x87C, 0x880, 0x884, 0x888, 0x88C,
+ 0x890, 0x894, 0x898, 0x89C, 0x900, 0x904, 0x908, 0x90C, 0x910,
+ 0x914, 0xA00, 0xA04, 0xA08, 0xA0C, 0xA10, 0xA14, 0xA18, 0xA1C,
+ 0xA20, 0xA24, 0xA28, 0xA2C, 0xA70, 0xA74, 0xA78, 0xA7C, 0xA80,
+ 0xB2C, 0xC00, 0xC04, 0xC08, 0xC0C, 0xC10, 0xC14, 0xC18, 0xC1C,
+ 0xC20, 0xC24, 0xC28, 0xC2C, 0xC30, 0xC34, 0xC38, 0xC3C, 0xC40,
+ 0xC44, 0xC48, 0xC4C, 0xC50, 0xC54, 0xC58, 0xC5C, 0xC60, 0xC64,
+ 0xC68, 0xC6C, 0xC70, 0xC74, 0xC78, 0xC7C, 0xC80, 0xC84, 0xC88,
+ 0xC8C, 0xC90, 0xC94, 0xC98, 0xC9C, 0xCA0, 0xCA4, 0xCA8, 0xCAC,
+ 0xCB0, 0xCB4, 0xCB8, 0xCBC, 0xCC0, 0xCC4, 0xCC8, 0xCCC, 0xCD0,
+ 0xCD4, 0xCD8, 0xCDC, 0xCE0, 0xCE4, 0xCE8, 0xCEC, 0xD00, 0xD04,
+ 0xD08, 0xD0C, 0xD10, 0xD14, 0xD18, 0xD2C, 0xD30, 0xD34, 0xD38,
+ 0xD3C, 0xD40, 0xD44, 0xD48, 0xD4C, 0xD50, 0xD54, 0xD58, 0xD5C,
+ 0xD60, 0xD64, 0xD68, 0xD6C, 0xD70, 0xD74, 0xD78, 0xE00, 0xE04,
+ 0xE08, 0xE10, 0xE14, 0xE18, 0xE1C, 0xE28, 0xE30, 0xE34, 0xE38,
+ 0xE3C, 0xE40, 0xE44, 0xE48, 0xE4C, 0xE50, 0xE54, 0xE58, 0xE5C,
+ 0xE60, 0xE68, 0xE6C, 0xE70, 0xE74, 0xE78, 0xE7C, 0xE80, 0xE84,
+ 0xE88, 0xE8C, 0xED0, 0xED4, 0xED8, 0xEDC, 0xEE0, 0xEEC, 0xF14,
+ 0xF4C, 0xF00
+};
+
+static const uint32_t rtl8188ee_bb_phy_vals0[] = {
+ 0x80040000, 0x00000003, 0x0000FC00, 0x0000000A, 0x10001331,
+ 0x020C3D10, 0x02200385, 0x00000000, 0x01000100, 0x00390204,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x569A11A9, 0x01000014, 0x66F60110,
+ 0x061F0649, 0x00000000, 0x27272700, 0x07000760, 0x25004000,
+ 0x00000808, 0x00000000, 0xB0000C1C, 0x00000001, 0x00000000,
+ 0xCCC000C0, 0x00000800, 0xFFFFFFFE, 0x40302010, 0x00706050,
+ 0x00000000, 0x00000023, 0x00000000, 0x81121111, 0x00000002,
+ 0x00000201, 0x00D047C8, 0x80FF000C, 0x8C838300, 0x2E7F120F,
+ 0x9500BB78, 0x1114D028, 0x00881117, 0x89140F00, 0x1A1B0000,
+ 0x090E1317, 0x00000204, 0x00D30000, 0x101FBF00, 0x00000007,
+ 0x00000900, 0x225B0606, 0x218075B1, 0x80000000, 0x48071D40,
+ 0x03A05611, 0x000000E4, 0x6C6C6C6C, 0x08800000, 0x40000100,
+ 0x08800000, 0x40000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x69E9AC47, 0x469652AF, 0x49795994, 0x0A97971C,
+ 0x1F7C403F, 0x000100B7, 0xEC020107, 0x007F037F, 0x69553420,
+ 0x43BC0094, 0x00013169, 0x00250492, 0x00000000, 0x7112848B,
+ 0x47C00BFF, 0x00000036, 0x2C7F000D, 0x020610DB, 0x0000001F,
+ 0x00B91612, 0x390000E4, 0x20F60000, 0x40000100, 0x20200000,
+ 0x00091521, 0x00000000, 0x00121820, 0x00007F7F, 0x00000000,
+ 0x000300A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x64B22427, 0x00766932,
+ 0x00222222, 0x00000000, 0x37644302, 0x2F97D40C, 0x00000740,
+ 0x00020401, 0x0000907F, 0x20010201, 0xA0633333, 0x3333BC43,
+ 0x7A8F5B6F, 0xCC979975, 0x00000000, 0x80608000, 0x00000000,
+ 0x00127353, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x6437140A, 0x00000000, 0x00000282, 0x30032064, 0x4653DE68,
+ 0x04518A3C, 0x00002101, 0x2A201C16, 0x1812362E, 0x322C2220,
+ 0x000E3C24, 0x2D2D2D2D, 0x2D2D2D2D, 0x0390272D, 0x2D2D2D2D,
+ 0x2D2D2D2D, 0x2D2D2D2D, 0x2D2D2D2D, 0x00000000, 0x1000DC1F,
+ 0x10008C1F, 0x02140102, 0x681604C2, 0x01007C00, 0x01004800,
+ 0xFB000000, 0x000028D1, 0x1000DC1F, 0x10008C1F, 0x02140102,
+ 0x28160D05, 0x00000008, 0x001B25A4, 0x00C00014, 0x00C00014,
+ 0x01000014, 0x01000014, 0x01000014, 0x01000014, 0x00C00014,
+ 0x01000014, 0x00C00014, 0x00C00014, 0x00C00014, 0x00C00014,
+ 0x00000014, 0x00000014, 0x01C00014, 0x00000003, 0x00000000,
+ 0x00000300
+}, rtl8188ee_bb_agc_vals0[] = {
+ 0xFB000001, 0xFB010001, 0xFB020001, 0xFB030001, 0xFB040001,
+ 0xFB050001, 0xFA060001, 0xF9070001, 0xF8080001, 0xF7090001,
+ 0xF60A0001, 0xF50B0001, 0xF40C0001, 0xF30D0001, 0xF20E0001,
+ 0xF10F0001, 0xF0100001, 0xEF110001, 0xEE120001, 0xED130001,
+ 0xEC140001, 0xEB150001, 0xEA160001, 0xE9170001, 0xE8180001,
+ 0xE7190001, 0xE61A0001, 0xE51B0001, 0xE41C0001, 0xE31D0001,
+ 0xE21E0001, 0xE11F0001, 0x8A200001, 0x89210001, 0x88220001,
+ 0x87230001, 0x86240001, 0x85250001, 0x84260001, 0x83270001,
+ 0x82280001, 0x6B290001, 0x6A2A0001, 0x692B0001, 0x682C0001,
+ 0x672D0001, 0x662E0001, 0x652F0001, 0x64300001, 0x63310001,
+ 0x62320001, 0x61330001, 0x46340001, 0x45350001, 0x44360001,
+ 0x43370001, 0x42380001, 0x41390001, 0x403A0001, 0x403B0001,
+ 0x403C0001, 0x403D0001, 0x403E0001, 0x403F0001, 0xFB400001,
+ 0xFB410001, 0xFB420001, 0xFB430001, 0xFB440001, 0xFB450001,
+ 0xFB460001, 0xFB470001, 0xFB480001, 0xFA490001, 0xF94A0001,
+ 0xF84B0001, 0xF74C0001, 0xF64D0001, 0xF54E0001, 0xF44F0001,
+ 0xF3500001, 0xF2510001, 0xF1520001, 0xF0530001, 0xEF540001,
+ 0xEE550001, 0xED560001, 0xEC570001, 0xEB580001, 0xEA590001,
+ 0xE95A0001, 0xE85B0001, 0xE75C0001, 0xE65D0001, 0xE55E0001,
+ 0xE45F0001, 0xE3600001, 0xE2610001, 0xC3620001, 0xC2630001,
+ 0xC1640001, 0x8B650001, 0x8A660001, 0x89670001, 0x88680001,
+ 0x87690001, 0x866A0001, 0x856B0001, 0x846C0001, 0x676D0001,
+ 0x666E0001, 0x656F0001, 0x64700001, 0x63710001, 0x62720001,
+ 0x61730001, 0x60740001, 0x46750001, 0x45760001, 0x44770001,
+ 0x43780001, 0x42790001, 0x417A0001, 0x407B0001, 0x407C0001,
+ 0x407D0001, 0x407E0001, 0x407F0001
+};
+
+static const struct rtwn_bb_prog rtl8188ee_bb[] = {
+ {
+ nitems(rtl8188ee_bb_phy_regs0),
+ rtl8188ee_bb_phy_regs0,
+ rtl8188ee_bb_phy_vals0,
+ { (0x01 | 0x02) },
+ NULL
+ }
+};
+
+static const struct rtwn_agc_prog rtl8188ee_agc[] = {
+ {
+ nitems(rtl8188ee_bb_agc_vals0),
+ rtl8188ee_bb_agc_vals0,
+ { 0 },
+ NULL
+ }
+};
+
+#endif /* R88EE_PRIV_H */
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_pwrseq.h
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_pwrseq.h
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef RTL88EE_PWRSEQ_H
+#define RTL88EE_PWRSEQ_H
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+
+#include <net/if.h>
+#include <net/if_var.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+#include <net80211/ieee80211_ratectl.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+
+#include <dev/rtwn/if_rtwnreg.h>
+#include <dev/rtwn/if_rtwnvar.h>
+
+int r88ee_pwrseq_polling(struct rtwn_softc *sc, uint32_t offset, uint32_t msk, uint8_t value);
+inline void r88ee_pwrseq_delay(struct rtwn_softc *sc, uint32_t offset);
+
+#endif
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_pwrseq.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_pwrseq.c
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include <dev/rtwn/rtl8188e/pci/r88ee_pwrseq.h>
+
+int r88ee_pwrseq_polling(struct rtwn_softc *sc, uint32_t offset, uint32_t msk, uint8_t value)
+{
+ uint8_t reg;
+ uint32_t polling;
+ for(polling=0;polling<5000;polling++) {
+ reg = rtwn_read_1(sc, offset);
+ reg &= msk;
+ if (reg == (value & msk))
+ break;
+ else
+ rtwn_delay(sc, 10);
+ }
+
+ if (polling > 5000)
+ return false;
+
+ return true;
+}
+
+inline void r88ee_pwrseq_delay(struct rtwn_softc *sc, uint32_t offset)
+{
+ rtwn_delay(sc, offset * 1000);
+}
+
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_reg.h
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_reg.h
@@ -0,0 +1,51 @@
+/* $OpenBSD: if_rtwnreg.h,v 1.3 2015/06/14 08:02:47 stsp Exp $ */
+
+/*-
+ * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
+ * Copyright (c) 2015 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef R88EEE_REG_H
+#define R88EEE_REG_H
+
+#include <dev/rtwn/rtl8192c/r92c_reg.h>
+
+#define R88EE_MAX_CHAINS 4
+
+/*
+ * MAC registers.
+ */
+/* EDCA Registers */
+#define R88EE_SIFS_TRX 0x0516
+#define R88EE_SIFS_SPEC 0x0428
+#define R88EE_SIFS_SPEC_MAC 0x063A
+#define R88EE_SIFS_RESP_OFDM 0x063E
+
+/* Bits for R88EE_GPIO_IO_SEL. */
+#define R88EE_GPIO_IO_SEL_2 0x0062
+
+/* Bits for R88EE_HIMR. */
+#define R88EE_ISR 0x00B4
+#define R88EE_HISRE 0x00BC
+
+/* Power On/Off DMA */
+#define R88EE_RXDMA_CTRL 0x0286
+#define R88EE_TRXDMA_CTRL 0x0010
+
+#endif /* R99EE_REG_H */
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_rf.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_rf.c
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 2017 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_debug.h>
+
+#include <dev/rtwn/rtl8188e/r88e.h>
+#include <dev/rtwn/rtl8188e/r88e_reg.h>
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+#include <dev/rtwn/rtl8192c/r92c_var.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_reg.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnreg.h>
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_debug.h>
+
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+uint32_t
+r88ee_rf_read(struct rtwn_softc *sc, int chain, uint8_t addr)
+{
+ struct r92c_softc *rs = sc->sc_priv;
+ uint32_t reg[R88EE_MAX_CHAINS], val;
+
+ reg[0] = rtwn_bb_read(sc, R92C_HSSI_PARAM2(0));
+
+ if (chain != 0)
+ reg[chain] = rtwn_bb_read(sc, R92C_HSSI_PARAM2(chain));
+ else
+ reg[chain] = reg[0];
+
+
+ rtwn_bb_write(sc, R92C_HSSI_PARAM2(0),
+ reg[0] & ~R92C_HSSI_PARAM2_READ_EDGE);
+ rtwn_delay(sc, rs->rf_read_delay[1]);
+
+ rtwn_bb_write(sc, R92C_HSSI_PARAM2(chain),
+ (reg[chain] & (~R92C_HSSI_PARAM2_READ_ADDR_M)) |
+ (addr << 23) | R92C_HSSI_PARAM2_READ_EDGE);
+ rtwn_delay(sc, rs->rf_read_delay[2]);
+
+ if (rtwn_bb_read(sc, R92C_HSSI_PARAM1(chain)) & R92C_HSSI_PARAM1_PI)
+ val = rtwn_bb_read(sc, R92C_HSPI_READBACK(chain));
+ else
+ val = rtwn_bb_read(sc, R92C_LSSI_READBACK(chain));
+
+ return val;
+}
+
+void
+r88ee_rf_write(struct rtwn_softc *sc, int chain, uint8_t addr,
+ uint32_t val)
+{
+ rtwn_bb_write(sc, R92C_LSSI_PARAM(chain),
+ ((addr << R92C_LSSI_PARAM_ADDR_S) |
+ (val & R92C_LSSI_PARAM_DATA_M)) & 0x0fffffff);
+}
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_rx.c
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_rx.c
@@ -0,0 +1,139 @@
+/*-
+ * Copyright (c) 2017 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_debug.h>
+
+#include <dev/rtwn/rtl8188e/r88e.h>
+#include <dev/rtwn/rtl8188e/r88e_reg.h>
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_reg.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+
+int
+r88ee_classify_intr(struct rtwn_softc *sc, void *arg, int len __unused)
+{
+ uint32_t status;
+ uint32_t statusb;
+ int *rings = arg;
+ int ret;
+
+ *rings = 0;
+
+ rtwn_write_4(sc, R88E_HIMR, 0x0);
+ rtwn_write_4(sc, R88E_HIMRE, 0x0);
+
+ status = rtwn_read_4(sc, R88EE_ISR) & 0x200084ff;
+ rtwn_write_4(sc, R88EE_ISR, status);
+ statusb = rtwn_read_4(sc, R88EE_HISRE) & 0x100;
+ rtwn_write_4(sc, R88EE_HISRE, statusb);
+
+ if (!status || statusb == 0xffff) {
+ return 0;
+ }
+
+ /* Ack interrupts. */
+ if (statusb & R92C_IMR_BDOK)
+ *rings |= (1 << RTWN_PCI_BEACON_QUEUE);
+ if (statusb & R92C_IMR_HIGHDOK)
+ *rings |= (1 << RTWN_PCI_HIGH_QUEUE);
+ if (statusb & R92C_IMR_MGNTDOK)
+ *rings |= (1 << RTWN_PCI_MGNT_QUEUE);
+ if (statusb & R92C_IMR_BKDOK)
+ *rings |= (1 << RTWN_PCI_BK_QUEUE);
+ if (statusb & R92C_IMR_BEDOK)
+ *rings |= (1 << RTWN_PCI_BE_QUEUE);
+ if (statusb & R92C_IMR_VIDOK)
+ *rings |= (1 << RTWN_PCI_VI_QUEUE);
+ if (statusb & R92C_IMR_VODOK)
+ *rings |= (1 << RTWN_PCI_VO_QUEUE);
+
+ ret = 0;
+ if (status & R92C_IMR_RXFOVW)
+ ret |= RTWN_PCI_INTR_RX_OVERFLOW;
+ if (status & R92C_IMR_RDU)
+ ret |= RTWN_PCI_INTR_RX_DESC_UNAVAIL;
+ if (status & R92C_IMR_ROK)
+ ret |= RTWN_PCI_INTR_RX_DONE;
+ if (status & R92C_IMR_TXFOVW)
+ ret |= RTWN_PCI_INTR_TX_OVERFLOW;
+ if (status & R92C_IMR_PSTIMEOUT)
+ ret |= RTWN_PCI_INTR_PS_TIMEOUT;
+
+ return (ret);
+}
+
+void
+r88ee_enable_intr(struct rtwn_pci_softc *pc)
+{
+ struct rtwn_softc *sc = &pc->pc_sc;
+
+ /* Enable interrupts */
+ rtwn_write_4(sc, R88E_HIMR, 0x200084ff);
+ rtwn_write_4(sc, R88E_HIMRE, 0x100);
+
+ /* there are some C2H CMDs have been sent
+ * before system interrupt is enabled, e.g., C2H, CPWM.
+ * So we need to clear all C2H events that FW has notified,
+ * otherwise FW won't schedule any commands anymore.
+ */
+ rtwn_write_1(sc, R92C_C2H_EVT_CLEAR, 0);
+ /*enable system interrupt*/
+ rtwn_write_4(sc, R92C_HSIMR, 0xC0);
+}
+
+void
+r88ee_start_xfers(struct rtwn_softc *sc)
+{
+ rtwn_write_4(sc, R88E_HIMR, 0x200084ff);
+ rtwn_write_4(sc, R88E_HIMRE, 0x100);
+ rtwn_write_1(sc, R92C_C2H_EVT_CLEAR, 0x0);
+ rtwn_write_4(sc, R92C_HSIMR, 0xc0);
+}
+
+#undef R88EE_INT_ENABLE
Index: sys/dev/rtwn/rtl8188e/pci/r88ee_tx_desc.h
===================================================================
--- /dev/null
+++ sys/dev/rtwn/rtl8188e/pci/r88ee_tx_desc.h
@@ -0,0 +1,56 @@
+/* $OpenBSD: if_rtwnreg.h,v 1.3 2015/06/14 08:02:47 stsp Exp $ */
+
+/*-
+ * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr>
+ * Copyright (c) 2015 Stefan Sperling <stsp@openbsd.org>
+ * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org>
+ * Copyright (c) 2018 Farhan Khan <khanzf@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef R88EE_TX_DESC_H
+#define R88EE_TX_DESC_H
+
+#include <dev/rtwn/rtl8188e/r88e_tx_desc.h>
+
+/* Tx MAC descriptor (PCIe). */
+struct r88ee_tx_desc {
+ uint16_t pktlen;
+ uint8_t offset;
+ uint8_t flags0;
+
+ uint32_t txdw1;
+ uint32_t txdw2;
+ uint16_t txdw3;
+ uint16_t txdseq;
+
+ uint32_t txdw4;
+ uint32_t txdw5;
+ uint32_t txdw6;
+
+ uint16_t txbufsize;
+ uint16_t pad;
+
+ uint32_t txbufaddr;
+ uint32_t txbufaddr64;
+
+ uint32_t nextdescaddr;
+ uint32_t nextdescaddr64;
+
+ uint32_t reserved[4];
+} __packed __attribute__((aligned(4)));
+
+#endif /* R88EE_TX_DESC_H */
Index: sys/dev/rtwn/rtl8188e/r88e.h
===================================================================
--- sys/dev/rtwn/rtl8188e/r88e.h
+++ sys/dev/rtwn/rtl8188e/r88e.h
@@ -50,6 +50,8 @@
/* r88e_chan.c */
void r88e_get_txpower(struct rtwn_softc *, int,
struct ieee80211_channel *, uint8_t[]);
+void r88ee_get_txpower(struct rtwn_softc *, int,
+ struct ieee80211_channel *, uint8_t[]);
void r88e_set_bw20(struct rtwn_softc *, uint8_t);
void r88e_set_gain(struct rtwn_softc *, uint8_t);
@@ -68,8 +70,11 @@
/* r88e_init.c */
void r88e_init_bb(struct rtwn_softc *);
+void r88ee_init_bb(struct rtwn_softc *);
void r88e_init_rf(struct rtwn_softc *);
int r88e_power_on(struct rtwn_softc *);
+int r88ee_power_on(struct rtwn_softc *);
+int r88ee_llt_init(struct rtwn_softc *sc);
/* r88e_led.c */
void r88e_set_led(struct rtwn_softc *, int, int);
@@ -79,6 +84,7 @@
/* r88e_rom.c */
void r88e_parse_rom(struct rtwn_softc *, uint8_t *);
+void r88ee_parse_rom(struct rtwn_softc *, uint8_t *);
/* r88e_rx.c */
void r88e_ratectl_tx_complete(struct rtwn_softc *, uint8_t *, int);
Index: sys/dev/rtwn/rtl8188e/r88e_fw.c
===================================================================
--- sys/dev/rtwn/rtl8188e/r88e_fw.c
+++ sys/dev/rtwn/rtl8188e/r88e_fw.c
@@ -151,7 +151,6 @@
r88e_set_media_status(struct rtwn_softc *sc, int macid)
{
struct r88e_fw_cmd_msrrpt status;
-
if (macid & RTWN_MACID_VALID)
status.msrb0 = R88E_MSRRPT_B0_ASSOC;
else
Index: sys/dev/rtwn/rtl8188e/r88e_init.c
===================================================================
--- sys/dev/rtwn/rtl8188e/r88e_init.c
+++ sys/dev/rtwn/rtl8188e/r88e_init.c
@@ -54,7 +54,7 @@
#include <dev/rtwn/rtl8188e/r88e.h>
#include <dev/rtwn/rtl8188e/r88e_reg.h>
-
+#include <dev/rtwn/rtl8192c/pci/r92ce_reg.h>
static void
r88e_crystalcap_write(struct rtwn_softc *sc)
@@ -94,6 +94,93 @@
r88e_crystalcap_write(sc);
}
+int
+r88ee_llt_init(struct rtwn_softc *sc) {
+
+ rtwn_write_1(sc, R92C_RQPN_NPQ, 0x01);
+ rtwn_write_4(sc, R92C_TRXFF_BNDY, 0x80730d29);
+
+ rtwn_write_4(sc, R92C_TRXFF_BNDY, (0x25FF0000 | sc->pktbuf_count));
+ rtwn_write_1(sc, R92C_TDECTRL + 1, sc->pktbuf_count);
+
+ rtwn_write_1(sc, R88E_TXPKTBUF_BCNQ1_BDNY, sc->pktbuf_count);
+ rtwn_write_1(sc, R92C_TXPKTBUF_MGQ_BDNY, sc->pktbuf_count);
+
+ rtwn_write_1(sc, 0x45D, sc->pktbuf_count);
+ rtwn_write_1(sc, R92C_PBP, 0x11);
+ rtwn_write_1(sc, R92C_RX_DRVINFO_SZ, 0x4);
+
+ return r92c_llt_init(sc);
+}
+
+void
+r88ee_init_bb(struct rtwn_softc *sc)
+{
+ uint32_t tmp;
+ int i, j;
+
+ rtwn_setbits_2(sc, R92C_SYS_FUNC_EN, 0,
+ R92C_SYS_FUNC_EN_BBRSTB | R92C_SYS_FUNC_EN_BB_GLB_RST |
+ R92C_SYS_FUNC_EN_DIO_RF);
+
+ rtwn_write_1(sc, R92C_RF_CTRL,
+ R92C_RF_CTRL_EN | R92C_RF_CTRL_RSTB | R92C_RF_CTRL_SDMRSTB);
+
+ rtwn_write_1(sc, R92C_SYS_FUNC_EN, R92C_SYS_FUNC_EN_PPLL | R92C_SYS_FUNC_EN_PCIEA |
+ R92C_SYS_FUNC_EN_DIO_PCIE |
+ R92C_SYS_FUNC_EN_BB_GLB_RST | R92C_SYS_FUNC_EN_BBRSTB);
+
+ tmp = rtwn_read_4(sc, 0x4c);
+ rtwn_write_4(sc, 0x4c, tmp | 0xff7fffff);
+
+ for (i = 0; i < sc->bb_size; i++) {
+ const struct rtwn_bb_prog *bb_prog = &sc->bb_prog[i];
+
+ while(!rtwn_check_condition(sc, bb_prog->cond)) {
+ KASSERT(bb_prog->next != NULL,
+ ("%s: wrong condition value (i %d)\n",
+ __func__, i));
+ bb_prog = bb_prog->next;
+ }
+
+ for (j = 0; j < bb_prog->count; j++) {
+ RTWN_DPRINTF(sc, RTWN_DEBUG_RESET,
+ "BB: reg 0x%03x, val 0x%08x\n",
+ bb_prog->reg[j], bb_prog->val[j]);
+
+ rtwn_bb_write(sc, bb_prog->reg[j], bb_prog->val[j]);
+ rtwn_delay(sc, 1);
+ }
+ }
+
+ for (i = 0; i < sc->agc_size; i++) {
+ const struct rtwn_agc_prog *agc_prog = &sc->agc_prog[i];
+
+ while(!rtwn_check_condition(sc, agc_prog->cond)) {
+ KASSERT(agc_prog->next != NULL,
+ ("%s: wrong condition value (2) (i %d)\n",
+ __func__, i));
+ agc_prog = agc_prog->next;
+ }
+
+ for(j = 0; j < agc_prog->count; j++) {
+ RTWN_DPRINTF(sc, RTWN_DEBUG_RESET,
+ "AGC: val 0x%08x\n", agc_prog->val[j]);
+
+ rtwn_bb_write(sc, R92C_OFDM0_AGCRSSITABLE,
+ agc_prog->val[j]);
+ rtwn_delay(sc, 1);
+ }
+ }
+
+ if (rtwn_bb_read(sc, R92C_HSSI_PARAM2(0)) & R92C_HSSI_PARAM2_CCK_HIPWR)
+ sc->sc_flags |= RTWN_FLAG_CCK_HIPWR;
+
+ rtwn_bb_setbits(sc, R92C_FPGA0_RFMOD, 0x1000000, 0);
+ rtwn_bb_setbits(sc, R92C_FPGA0_RFMOD, 0x2000000, 0);
+
+}
+
int
r88e_power_on(struct rtwn_softc *sc)
{
Index: sys/dev/rtwn/rtl8188e/r88e_rom.c
===================================================================
--- sys/dev/rtwn/rtl8188e/r88e_rom.c
+++ sys/dev/rtwn/rtl8188e/r88e_rom.c
@@ -82,4 +82,34 @@
sc->thermal_meter = rom->thermal_meter;
IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
+
+}
+
+void
+r88ee_parse_rom(struct rtwn_softc *sc, uint8_t *buf)
+{
+ struct r92c_softc *rs = sc->sc_priv;
+ struct rtwn_r88e_txpwr *rt = rs->rs_txpwr;
+ struct r88ee_rom *rom = (struct r88ee_rom *)buf;
+ int i;
+
+ rt->bw20_tx_pwr_diff = RTWN_SIGN4TO8(MS(rom->rfpath[0].rfpath_24g.bw20_ofdm, HIGH_PART));
+ rt->ofdm_tx_pwr_diff = RTWN_SIGN4TO8(MS(rom->rfpath[0].rfpath_24g.bw20_ofdm, LOW_PART));
+
+ for(i = 0; i < R88E_GROUP_2G; i++)
+ rt->cck_tx_pwr[i] = rom->rfpath[0].rfpath_24g.index_cck_base[i];
+ for(i = 0; i < R88E_GROUP_2G - 1; i++)
+ rt->ht40_tx_pwr[i] = rom->rfpath[0].rfpath_24g.index_bw40_base[i];
+
+ rs->board_type =
+ MS(RTWN_GET_ROM_VAR(rom->rf_board_opt, R92C_BOARD_TYPE_DONGLE),
+ R92C_ROM_RF1_BOARD_TYPE);
+ rs->regulatory = MS(rom->rf_board_opt, R92C_ROM_RF1_REGULATORY);
+
+ rt->bw20_tx_pwr_diff = 0;
+ rt->ofdm_tx_pwr_diff = 0;
+
+ rtwn_r92c_set_name(sc);
+
+ IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
}
Index: sys/dev/rtwn/rtl8188e/r88e_rom_image.h
===================================================================
--- sys/dev/rtwn/rtl8188e/r88e_rom_image.h
+++ sys/dev/rtwn/rtl8188e/r88e_rom_image.h
@@ -57,4 +57,71 @@
_Static_assert(sizeof(struct r88e_rom) == R88E_EFUSE_MAP_LEN,
"R88E_EFUSE_MAP_LEN must be equal to sizeof(struct r88e_rom)!");
+/*
+ * RTL8188EE ROM image.
+ * Largely derived from this:
+ * http://src.illumos.org/source/xref/linux-master/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c#1576
+ */
+
+struct _bw40_bw20_ofdm_cck {
+ uint8_t bw40:4;
+ uint8_t bw20:4;
+ uint8_t ofdm:4;
+ uint8_t cck:4;
+} __packed;
+
+struct _r88ee_rom_24g {
+ uint8_t index_cck_base[6];
+ uint8_t index_bw40_base[6-1];
+ uint8_t bw20_ofdm;
+ struct _bw40_bw20_ofdm_cck bw40_bw20_ofdm_cck[4-1];
+} __packed;
+
+struct _r88ee_rom_5g {
+ uint8_t index_bw40_base[14];
+ uint8_t bw20_ofdm;
+ uint8_t bw40_bw20[4-1];
+ uint8_t ofdm_1[2];
+} __packed;
+
+struct _r88ee_rf_path {
+ struct _r88ee_rom_24g rfpath_24g;
+ struct _r88ee_rom_5g rfpath_5g;
+} __packed;
+
+struct r88ee_rom {
+ uint16_t id; /* Always 0x8129 */
+
+ uint8_t hpon[4];
+ uint16_t clk;
+ uint8_t testr[8];
+
+ struct _r88ee_rf_path rfpath[4];
+
+ uint8_t unknown3[16];
+ uint16_t channel_plan;
+ uint8_t xtal;
+ uint8_t thermal_meter;
+ uint8_t unknown4[5];
+ uint8_t rf_board_opt;
+ uint8_t rf_feature_opt;
+ uint8_t rf_bt_setting;
+ uint8_t version;
+ uint8_t customer_id;
+ uint8_t reserved1[3];
+ uint8_t rf_antenna_opt;
+
+ uint8_t reserved2[6];
+ uint8_t macaddr[IEEE80211_ADDR_LEN];
+ uint16_t vid;
+ uint16_t did;
+ uint16_t svid;
+ uint16_t smid;
+
+ uint8_t unknown5[290];
+} __packed; // Should be 512 byte
+
+_Static_assert(sizeof(struct r88ee_rom) == R88E_EFUSE_MAP_LEN,
+ "R88EE_EFUSE_MAP_LEN must be equal to sizeof(struct r88ee_rom)!");
+
#endif /* R88E_ROM_IMAGE_H */
Index: sys/modules/rtwn_pci/Makefile
===================================================================
--- sys/modules/rtwn_pci/Makefile
+++ sys/modules/rtwn_pci/Makefile
@@ -17,6 +17,12 @@
r92ce_rx.c r92ce_tx.c \
r92ce.h r92ce_priv.h r92ce_reg.h r92ce_rx_desc.h r92ce_tx_desc.h
+.PATH: ${.SRCTOP}/sys/dev/rtwn/rtl8188e/pci
+SRCS += r88ee_attach.c r88ee_calib.c r88ee_init.c \
+ r88ee_pwrseq.c r88ee_rx.c r88ee_rf.c \
+ r88ee.h r88ee_priv.h r88ee_reg.h r88ee_tx_desc.h \
+ r88ee_pwrseq.h
+
opt_rtwn.h:
@echo "#define RTWN_DEBUG 1" > ${.TARGET}
.if ${MK_SOURCELESS_UCODE} == "no"
Index: sys/modules/rtwnfw/Makefile
===================================================================
--- sys/modules/rtwnfw/Makefile
+++ sys/modules/rtwnfw/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
SUBDIR= rtwnrtl8188eu rtwnrtl8192cT rtwnrtl8192cU rtwnrtl8192eu rtwnrtl8812au \
- rtwnrtl8821au rtwnrtl8192cE rtwnrtl8192cEB
+ rtwnrtl8821au rtwnrtl8192cE rtwnrtl8192cEB rtwnrtl8188ee
.include <bsd.subdir.mk>
Index: sys/modules/rtwnfw/rtwnrtl8188ee/Makefile
===================================================================
--- /dev/null
+++ sys/modules/rtwnfw/rtwnrtl8188ee/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+KMOD= rtwn-rtl8188eefw
+IMG= rtwn-rtl8188eefw
+
+.include <bsd.kmod.mk>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Feb 17, 5:27 PM (14 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28819588
Default Alt Text
D15692.id44043.diff (70 KB)
Attached To
Mode
D15692: Adding rtl8188ee driver to rtwn(4)
Attached
Detach File
Event Timeline
Log In to Comment