mirror of
https://github.com/genodelabs/genode.git
synced 2025-03-21 03:25:34 +00:00
wifi/pc: add rtlwifi driver
Due to lacking hardware access the driver was test with one RTL8188EE based device, namely [10ec:8179] (rev 01), only. As the access to the PCI config space is restricted the driver loads the non power-saving FW and the driver port is therefor only tested with that. The accesses are documented should we choose to support them one way or another later on. The 'wifi.run' run script as well as Sculpt served as testing ground where the driver worked fine so far. Fixes #4714.
This commit is contained in:
parent
e826095e71
commit
578a8c9918
@ -1 +1 @@
|
||||
e9fdf82a31f0106cd2604a644685e7c080a12d09
|
||||
1e536cdd935a3c4fe906d49533a4762ffffdc6ee
|
||||
|
@ -2,7 +2,7 @@ LICENSE := mixed
|
||||
VERSION := 1
|
||||
DOWNLOADS := fw.archive
|
||||
|
||||
FW_REV := cbd51e5ee647ec834c30a3987225cae2341753b0
|
||||
FW_REV := 416c8baf3066e4fbf5c6bf610c37a1f50ffb77b9
|
||||
URL(fw) := https://github.com/cnuke/dde_linux_firmware/archive/$(FW_REV).tar.gz
|
||||
SHA(fw) := 486e3e4cc3022acca2b134c11feb8d3bbc4bd07a588a7c56e6fc07174bf3d573
|
||||
SHA(fw) := 60ed44d326b0f8a007b41ec46a24f8a9a3d807c40b75e3ba9757995f78ae9bcc
|
||||
DIR(fw) := firmware
|
||||
|
@ -5,6 +5,7 @@ content: ucode_files LICENSE.wifi_drv
|
||||
|
||||
.PHONY: ucode_files
|
||||
ucode_files:
|
||||
cp $(PORT_DIR)/firmware/*.bin .
|
||||
cp $(PORT_DIR)/firmware/*.ucode .
|
||||
cp $(PORT_DIR)/firmware/*.pnvm .
|
||||
cp $(PORT_DIR)/firmware/regulatory.db .
|
||||
|
@ -27,6 +27,8 @@ SRC_C += $(notdir $(wildcard $(TARGET_LIB_DIR)/generated_dummies.c))
|
||||
SRC_C += lx_emul/common_dummies.c
|
||||
|
||||
CC_C_OPT += -I$(LX_SRC_DIR)/drivers/net/wireless/intel/iwlwifi
|
||||
CC_C_OPT += -I$(LX_SRC_DIR)/drivers/net/wireless/realtek/rtlwifi
|
||||
CC_C_OPT += -I$(LX_SRC_DIR)/drivers/net/wireless/realtek/rtlwifi/rtl8188ee
|
||||
CC_C_OPT += -I$(LX_SRC_DIR)/include/linux
|
||||
|
||||
CC_C_OPT += -Wno-address-of-packed-member
|
||||
|
@ -6,6 +6,7 @@ FW_CONTRIB_DIR := $(call select_from_ports,linux-firmware)
|
||||
|
||||
IMAGES := $(notdir $(wildcard $(FW_CONTRIB_DIR)/firmware/*.ucode))
|
||||
IMAGES += $(notdir $(wildcard $(FW_CONTRIB_DIR)/firmware/*.pnvm))
|
||||
IMAGES += $(notdir $(wildcard $(FW_CONTRIB_DIR)/firmware/*.bin))
|
||||
IMAGES += $(notdir $(wildcard $(FW_CONTRIB_DIR)/firmware/*.db))
|
||||
IMAGES += $(notdir $(wildcard $(FW_CONTRIB_DIR)/firmware/*.p7s))
|
||||
BIN_DIR := $(BUILD_BASE_DIR)/bin
|
||||
@ -13,6 +14,9 @@ FW_DIR := $(FW_CONTRIB_DIR)/firmware
|
||||
|
||||
CUSTOM_TARGET_DEPS += $(addprefix $(BIN_DIR)/,$(IMAGES))
|
||||
|
||||
$(BIN_DIR)/%.bin: $(FW_DIR)/%.bin
|
||||
$(VERBOSE)cp $^ $@
|
||||
|
||||
$(BIN_DIR)/%.ucode: $(FW_DIR)/%.ucode
|
||||
$(VERBOSE)cp $^ $@
|
||||
|
||||
|
@ -314,6 +314,8 @@ set firmware_modules {
|
||||
iwlwifi-9000-pu-b0-jf-b0-34.ucode
|
||||
iwlwifi-9000-pu-b0-jf-b0-46.ucode
|
||||
iwlwifi-QuZ-a0-hr-b0-63.ucode
|
||||
rtl8192eu_nic.bin
|
||||
rtl8188efw.bin
|
||||
regulatory.db
|
||||
regulatory.db.p7s
|
||||
}
|
||||
|
@ -205,6 +205,8 @@ static const char * lx_emul_initcall_order[] = {
|
||||
"__initcall_iwl_drv_init6",
|
||||
"__initcall_iwl_init6",
|
||||
"__initcall_iwl_mvm_init6",
|
||||
"__initcall_rtl_core_module_init6",
|
||||
"__initcall_rtl88ee_driver_init6",
|
||||
"__initcall_asix_driver_init6",
|
||||
"__initcall_ax88179_178a_driver_init6",
|
||||
"__initcall_cdc_driver_init6",
|
||||
|
@ -88,6 +88,37 @@ drivers/net/wireless/intel/iwlwifi/mvm/testmode.h
|
||||
drivers/net/wireless/intel/iwlwifi/mvm/time-event.h
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/internal.h
|
||||
drivers/net/wireless/intel/iwlwifi/queue/tx.h
|
||||
drivers/net/wireless/realtek/rtlwifi/base.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbt_precomp.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8192e2ant.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b1ant.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a1ant.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a2ant.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtcoutsrc.h
|
||||
drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.h
|
||||
drivers/net/wireless/realtek/rtlwifi/cam.h
|
||||
drivers/net/wireless/realtek/rtlwifi/core.h
|
||||
drivers/net/wireless/realtek/rtlwifi/debug.h
|
||||
drivers/net/wireless/realtek/rtlwifi/efuse.h
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.h
|
||||
drivers/net/wireless/realtek/rtlwifi/ps.h
|
||||
drivers/net/wireless/realtek/rtlwifi/pwrseqcmd.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rc.h
|
||||
drivers/net/wireless/realtek/rtlwifi/regd.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/dm.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/led.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/pwrseq.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/reg.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/rf.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/table.h
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h
|
||||
drivers/net/wireless/realtek/rtlwifi/stats.h
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
include/crypto/acompress.h
|
||||
include/crypto/aead.h
|
||||
include/crypto/aes.h
|
||||
|
@ -341,6 +341,8 @@ void synchronize_rcu_expedited(void)
|
||||
}
|
||||
|
||||
|
||||
#include <linux/pci.h>
|
||||
|
||||
int pci_enable_msi(struct pci_dev *dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
@ -348,9 +350,21 @@ int pci_enable_msi(struct pci_dev *dev)
|
||||
}
|
||||
|
||||
|
||||
void pci_disable_msi(struct pci_dev *dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
||||
|
||||
int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
|
||||
int minvec, int maxvec)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
|
||||
void pci_disable_device(struct pci_dev * dev)
|
||||
{
|
||||
lx_emul_trace(__func__);
|
||||
}
|
||||
|
@ -48,6 +48,11 @@ Firmware_list fw_list[] = {
|
||||
{ "iwlwifi-so-a0-hr-b0-64.ucode", 1427384, nullptr },
|
||||
{ "iwlwifi-so-a0-gf-a0-64.ucode", 1515812, nullptr },
|
||||
{ "iwlwifi-so-a0-gf-a0.pnvm", 41808, nullptr },
|
||||
|
||||
{ "rtl8192eu_nic.bin", 31818, nullptr },
|
||||
{ "rtlwifi/rtl8192eefw.bin", 31818, "rtl8192eu_nic.bin" },
|
||||
{ "rtl8188efw.bin", 11216, nullptr },
|
||||
{ "rtlwifi/rtl8188efw.bin", 11216, "rtl8188efw.bin" }, /* FW Power Save off */
|
||||
};
|
||||
|
||||
|
||||
|
@ -594,8 +594,28 @@ int pci_write_config_byte(const struct pci_dev * dev,int where,u8 val)
|
||||
*/
|
||||
case PCI_CFG_RETRY_TIMEOUT:
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* rtlwifi: "leave D3 mode"
|
||||
*/
|
||||
case 0x44:
|
||||
case PCI_COMMAND:
|
||||
return 0;
|
||||
/*
|
||||
* rtlwifi: needed for enabling DMA 64bit support
|
||||
*/
|
||||
case 0x719:
|
||||
return 0;
|
||||
/*
|
||||
* rtlwifi: below are registers related to ASPM and PCI link
|
||||
* control that we do not handle (yet).
|
||||
*/
|
||||
case 0x81:
|
||||
case 0x98:
|
||||
return 0;
|
||||
};
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@ -605,6 +625,69 @@ int pci_read_config_word(const struct pci_dev * dev,int where,u16 * val)
|
||||
case PCI_COMMAND:
|
||||
*val = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
|
||||
return 0;
|
||||
/*
|
||||
* rtlwifi: read but ignored
|
||||
*/
|
||||
case PCI_INTERRUPT_LINE:
|
||||
*val = 0;
|
||||
return 0;
|
||||
};
|
||||
lx_emul_trace_and_stop(__func__);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int pci_read_config_byte(const struct pci_dev * dev,int where,u8 * val)
|
||||
{
|
||||
switch (where) {
|
||||
/*
|
||||
* rtlwifi: apparently needed for device distinction
|
||||
*/
|
||||
case PCI_REVISION_ID:
|
||||
*val = dev->revision;
|
||||
return 0;
|
||||
/*
|
||||
* rtlwifi: needed for enabling DMA 64bit support
|
||||
*/
|
||||
case 0x719:
|
||||
*val = 0;
|
||||
return 0;
|
||||
/*
|
||||
* rtlwifi: below are registers related to ASPM and PCI link
|
||||
* control that we do not handle (yet).
|
||||
*/
|
||||
case 0x80:
|
||||
case 0x81:
|
||||
case 0x98:
|
||||
*val = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
|
||||
{
|
||||
struct resource *r;
|
||||
unsigned long phys_addr;
|
||||
unsigned long size;
|
||||
|
||||
if (!dev || bar > 5) {
|
||||
printk("%s:%d: invalid request for dev: %p bar: %d\n",
|
||||
__func__, __LINE__, dev, bar);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
printk("pci_iomap: request for dev: %s bar: %d\n", dev_name(&dev->dev), bar);
|
||||
|
||||
r = &dev->resource[bar];
|
||||
|
||||
phys_addr = r->start;
|
||||
size = r->end - r->start;
|
||||
|
||||
if (!phys_addr || !size)
|
||||
return NULL;
|
||||
|
||||
return lx_emul_io_mem_map(phys_addr, size);
|
||||
}
|
||||
|
@ -116,6 +116,26 @@ drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/tx.c
|
||||
drivers/net/wireless/intel/iwlwifi/queue/tx.c
|
||||
drivers/net/wireless/realtek/rtlwifi/base.c
|
||||
drivers/net/wireless/realtek/rtlwifi/cam.c
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
drivers/net/wireless/realtek/rtlwifi/debug.c
|
||||
drivers/net/wireless/realtek/rtlwifi/efuse.c
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
drivers/net/wireless/realtek/rtlwifi/ps.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rc.c
|
||||
drivers/net/wireless/realtek/rtlwifi/regd.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/dm.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/led.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/pwrseq.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/rf.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/table.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c
|
||||
drivers/net/wireless/realtek/rtlwifi/stats.c
|
||||
drivers/pci/pci-driver.c
|
||||
fs/nls/nls_base.c
|
||||
kernel/irq/chip.c
|
||||
|
@ -116,6 +116,26 @@ drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/tx.c
|
||||
drivers/net/wireless/intel/iwlwifi/queue/tx.c
|
||||
drivers/net/wireless/realtek/rtlwifi/base.c
|
||||
drivers/net/wireless/realtek/rtlwifi/cam.c
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
drivers/net/wireless/realtek/rtlwifi/debug.c
|
||||
drivers/net/wireless/realtek/rtlwifi/efuse.c
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
drivers/net/wireless/realtek/rtlwifi/ps.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rc.c
|
||||
drivers/net/wireless/realtek/rtlwifi/regd.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/dm.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/led.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/pwrseq.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/rf.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/table.c
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c
|
||||
drivers/net/wireless/realtek/rtlwifi/stats.c
|
||||
drivers/pci/pci-driver.c
|
||||
fs/nls/nls_base.c
|
||||
kernel/irq/chip.c
|
||||
|
@ -31,6 +31,9 @@ LX_ENABLE += RFKILL
|
||||
# iwlwifi
|
||||
LX_ENABLE += WLAN_VENDOR_INTEL IWLWIFI IWLDVM IWLMVM
|
||||
|
||||
# rtlwifi
|
||||
LX_ENABLE += WLAN_VENDOR_REALTEK RTL_CARDS RTL8188EE
|
||||
|
||||
# USB host-controller support
|
||||
LX_ENABLE += USB_SUPPORT USB USB_ARCH_HAS_HCD USB_XHCI_HCD USB_EHCI_HCD USB_OHCI_HCD
|
||||
LX_ENABLE += USB_PCI USB_UHCI_HCD USB_USBNET
|
||||
|
Loading…
x
Reference in New Issue
Block a user