ath(4): Remove MIPS AHB frontend and join PCI one w/ main support again
Following the removal of general MIPS support, there's no longer a need to have the AHB bus-frontend in place, which according to Linux sources also isn't used with any non-MIPS SoCs. For simplicity, PCI bus support is only made conditional on the main one again, i. e. device ath_pci is removed, and built into the main module, i. e. if_ath_pci.ko obsoleted, respectively. Effectively, this reverts the following commits and associated changes:dba9c85977e849bb3ecbApproved by: adrian Relnotes: yes Differential Revision: https://reviews.freebsd.org/D41354
This commit is contained in:
@@ -52,6 +52,10 @@
|
|||||||
# xargs -n1 | sort | uniq -d;
|
# xargs -n1 | sort | uniq -d;
|
||||||
# done
|
# done
|
||||||
|
|
||||||
|
# 20230807: Removal of the ath(4) AHB bus-frontend or MIPS
|
||||||
|
OLD_FILES+=usr/share/man/man4/ath_ahb.4
|
||||||
|
OLD_FILES+=usr/share/man/man4/ath_pci.4
|
||||||
|
|
||||||
# 20230803: Removal of support for cloning pseudo interfaces from iflib(9)
|
# 20230803: Removal of support for cloning pseudo interfaces from iflib(9)
|
||||||
OLD_FILES+=usr/include/net/iflib_private.h
|
OLD_FILES+=usr/include/net/iflib_private.h
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 14.x IS SLOW:
|
|||||||
world, or to merely disable the most expensive debugging functionality
|
world, or to merely disable the most expensive debugging functionality
|
||||||
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||||
|
|
||||||
|
20230807:
|
||||||
|
Following the general removal of MIPS support, the ath(4) AHB bus-
|
||||||
|
frontend has been removed, too, and building of the PCI support is
|
||||||
|
integrated with the ath(4) main module again. As a result, there's
|
||||||
|
no longer a need for if_ath_pci_load="YES" in /boot/loader.conf or
|
||||||
|
"device ath_pci" in the kernel configuration.
|
||||||
|
|
||||||
20230803:
|
20230803:
|
||||||
MAXCPU has been increased to 1024 in the amd64 GENERIC kernel config.
|
MAXCPU has been increased to 1024 in the amd64 GENERIC kernel config.
|
||||||
Out-of-tree kernel modules will need to be rebuilt.
|
Out-of-tree kernel modules will need to be rebuilt.
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ MAN= aac.4 \
|
|||||||
at45d.4 \
|
at45d.4 \
|
||||||
ata.4 \
|
ata.4 \
|
||||||
ath.4 \
|
ath.4 \
|
||||||
ath_ahb.4 \
|
|
||||||
ath_hal.4 \
|
ath_hal.4 \
|
||||||
ath_pci.4 \
|
|
||||||
atkbd.4 \
|
atkbd.4 \
|
||||||
atkbdc.4 \
|
atkbdc.4 \
|
||||||
atp.4 \
|
atp.4 \
|
||||||
|
|||||||
+1
-16
@@ -28,7 +28,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"/
|
.\"/
|
||||||
.Dd June 16, 2020
|
.Dd August 7, 2023
|
||||||
.Dt ATH 4
|
.Dt ATH 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@@ -40,7 +40,6 @@ place the following lines in your
|
|||||||
kernel configuration file:
|
kernel configuration file:
|
||||||
.Bd -ragged -offset indent
|
.Bd -ragged -offset indent
|
||||||
.Cd "device ath"
|
.Cd "device ath"
|
||||||
.Cd "device ath_pci"
|
|
||||||
.Cd "device ath_hal"
|
.Cd "device ath_hal"
|
||||||
.Cd "device ath_rate_sample"
|
.Cd "device ath_rate_sample"
|
||||||
.Cd "device wlan"
|
.Cd "device wlan"
|
||||||
@@ -51,7 +50,6 @@ module at boot time, place the following line in
|
|||||||
.Xr loader.conf 5 :
|
.Xr loader.conf 5 :
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
if_ath_load="YES"
|
if_ath_load="YES"
|
||||||
if_ath_pci_load="YES"
|
|
||||||
.Ed
|
.Ed
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
@@ -65,19 +63,6 @@ Supported features include 802.11 and 802.3 frames, power management, BSS,
|
|||||||
IBSS, MBSS, WDS/DWDS TDMA, and host-based access point operation modes.
|
IBSS, MBSS, WDS/DWDS TDMA, and host-based access point operation modes.
|
||||||
All host/device interaction is via DMA.
|
All host/device interaction is via DMA.
|
||||||
.Pp
|
.Pp
|
||||||
Please note that from FreeBSD-9.0, the
|
|
||||||
.Nm
|
|
||||||
driver does not include the PCI/PCIe bus glue.
|
|
||||||
The same driver supports multiple underlying bus types, including PCI/PCIe,
|
|
||||||
but also embedded (AHB) and USB in the future.
|
|
||||||
.Pp
|
|
||||||
To enable use for PCI/PCIe systems, see the
|
|
||||||
.Xr ath_pci 4
|
|
||||||
driver.
|
|
||||||
For embedded systems which use the AHB to connect the wireless MAC, see the
|
|
||||||
.Xr ath_ahb 4
|
|
||||||
driver.
|
|
||||||
.Pp
|
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
driver encapsulates all IP and ARP traffic as 802.11 frames, however
|
driver encapsulates all IP and ARP traffic as 802.11 frames, however
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
.\"-
|
|
||||||
.\" Copyright (c) 2011 Adrian Chadd, Xenion Pty Ltd
|
|
||||||
.\" All rights reserved.
|
|
||||||
.\""
|
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
|
||||||
.\" modification, are permitted provided that the following conditions
|
|
||||||
.\" are met:
|
|
||||||
.\" 1. Redistributions of source code must retain the above copyright
|
|
||||||
.\" notice, this list of conditions and the following disclaimer,
|
|
||||||
.\" without modification.
|
|
||||||
.\" 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
||||||
.\" similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
|
|
||||||
.\" redistribution must be conditioned upon including a substantially
|
|
||||||
.\" similar Disclaimer requirement for further binary redistribution.
|
|
||||||
.\"
|
|
||||||
.\" NO WARRANTY
|
|
||||||
.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
.\" LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
|
|
||||||
.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
.\" THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
|
|
||||||
.\" OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
.\" THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
.\"
|
|
||||||
.\" $FreeBSD$
|
|
||||||
.\"/
|
|
||||||
.Dd May 30, 2011
|
|
||||||
.Dt ATH_AHB 4
|
|
||||||
.Os
|
|
||||||
.Sh NAME
|
|
||||||
.Nm ath_ahb
|
|
||||||
.Nd "Atheros AHB device glue"
|
|
||||||
.Sh SYNOPSIS
|
|
||||||
.Cd "device ath_ahb"
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
This module provides the AHB bus glue needed for the devices supported
|
|
||||||
by the
|
|
||||||
.Xr ath 4
|
|
||||||
and
|
|
||||||
.Xr ath_hal 4
|
|
||||||
drivers.
|
|
||||||
.Pp
|
|
||||||
This is only relevant for embedded System-on-Chip (SoC) devices such as
|
|
||||||
the Atheros AR913x series, which include an Atheros wireless MAC on-die.
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr ath 4 ,
|
|
||||||
.Xr ath_hal 4
|
|
||||||
.Sh HISTORY
|
|
||||||
The
|
|
||||||
.Nm
|
|
||||||
module first appeared in
|
|
||||||
.Fx 9.0 .
|
|
||||||
.Sh BUGS
|
|
||||||
See
|
|
||||||
.Xr ath 4
|
|
||||||
for known bugs.
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
.\"-
|
|
||||||
.\" Copyright (c) 2011 Adrian Chadd, Xenion Pty Ltd
|
|
||||||
.\" All rights reserved.
|
|
||||||
.\""
|
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
|
||||||
.\" modification, are permitted provided that the following conditions
|
|
||||||
.\" are met:
|
|
||||||
.\" 1. Redistributions of source code must retain the above copyright
|
|
||||||
.\" notice, this list of conditions and the following disclaimer,
|
|
||||||
.\" without modification.
|
|
||||||
.\" 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
||||||
.\" similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
|
|
||||||
.\" redistribution must be conditioned upon including a substantially
|
|
||||||
.\" similar Disclaimer requirement for further binary redistribution.
|
|
||||||
.\"
|
|
||||||
.\" NO WARRANTY
|
|
||||||
.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
.\" LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
|
|
||||||
.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
.\" THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
|
|
||||||
.\" OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
.\" THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
.\"
|
|
||||||
.\" $FreeBSD$
|
|
||||||
.\"/
|
|
||||||
.Dd May 30, 2011
|
|
||||||
.Dt ATH_PCI 4
|
|
||||||
.Os
|
|
||||||
.Sh NAME
|
|
||||||
.Nm ath_pci
|
|
||||||
.Nd "Atheros PCI device glue"
|
|
||||||
.Sh SYNOPSIS
|
|
||||||
.Cd "device ath_pci"
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
This module provides the PCI/PCIe bus glue needed for the devices supported
|
|
||||||
by the
|
|
||||||
.Xr ath 4
|
|
||||||
and
|
|
||||||
.Xr ath_hal 4
|
|
||||||
drivers.
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr ath 4 ,
|
|
||||||
.Xr ath_hal 4
|
|
||||||
.Sh HISTORY
|
|
||||||
The
|
|
||||||
.Nm
|
|
||||||
module first appeared in
|
|
||||||
.Fx 9.0 .
|
|
||||||
.Sh BUGS
|
|
||||||
See
|
|
||||||
.Xr ath 4
|
|
||||||
for known bugs.
|
|
||||||
@@ -303,9 +303,8 @@ device wlan_wep # 802.11 WEP support
|
|||||||
device wlan_ccmp # 802.11 CCMP support
|
device wlan_ccmp # 802.11 CCMP support
|
||||||
device wlan_tkip # 802.11 TKIP support
|
device wlan_tkip # 802.11 TKIP support
|
||||||
device wlan_amrr # AMRR transmit rate control algorithm
|
device wlan_amrr # AMRR transmit rate control algorithm
|
||||||
device ath # Atheros NICs
|
device ath # Atheros CardBus/PCI NICs
|
||||||
device ath_pci # Atheros pci/cardbus glue
|
device ath_hal # Atheros CardBus/PCI chip support
|
||||||
device ath_hal # pci/cardbus chip support
|
|
||||||
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
||||||
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
||||||
device ath_rate_sample # SampleRate tx rate control for ath
|
device ath_rate_sample # SampleRate tx rate control for ath
|
||||||
|
|||||||
@@ -88,8 +88,7 @@ device mv_spi
|
|||||||
|
|
||||||
# Wireless NIC cards
|
# Wireless NIC cards
|
||||||
device wlan # 802.11 support
|
device wlan # 802.11 support
|
||||||
device ath # Atheros NIC's
|
device ath # Atheros CardBus/PCI NICs
|
||||||
device ath_pci # Atheros pci/cardbus glue
|
|
||||||
device ath_hal
|
device ath_hal
|
||||||
device ath_rate_sample
|
device ath_rate_sample
|
||||||
options ATH_ENABLE_11N
|
options ATH_ENABLE_11N
|
||||||
|
|||||||
+2
-6
@@ -892,12 +892,6 @@ dev/ata/chipsets/ata-siliconimage.c optional ata pci | atasiliconimage | ataati
|
|||||||
dev/ata/chipsets/ata-sis.c optional ata pci | atasis
|
dev/ata/chipsets/ata-sis.c optional ata pci | atasis
|
||||||
dev/ata/chipsets/ata-via.c optional ata pci | atavia
|
dev/ata/chipsets/ata-via.c optional ata pci | atavia
|
||||||
#
|
#
|
||||||
dev/ath/if_ath_pci.c optional ath_pci pci \
|
|
||||||
compile-with "${ATH_C}"
|
|
||||||
#
|
|
||||||
dev/ath/if_ath_ahb.c optional ath_ahb \
|
|
||||||
compile-with "${ATH_C}"
|
|
||||||
#
|
|
||||||
dev/ath/if_ath.c optional ath \
|
dev/ath/if_ath.c optional ath \
|
||||||
compile-with "${ATH_C}"
|
compile-with "${ATH_C}"
|
||||||
dev/ath/if_ath_alq.c optional ath \
|
dev/ath/if_ath_alq.c optional ath \
|
||||||
@@ -920,6 +914,8 @@ dev/ath/if_ath_led.c optional ath \
|
|||||||
compile-with "${ATH_C}"
|
compile-with "${ATH_C}"
|
||||||
dev/ath/if_ath_lna_div.c optional ath \
|
dev/ath/if_ath_lna_div.c optional ath \
|
||||||
compile-with "${ATH_C}"
|
compile-with "${ATH_C}"
|
||||||
|
dev/ath/if_ath_pci.c optional ath pci \
|
||||||
|
compile-with "${ATH_C}"
|
||||||
dev/ath/if_ath_tx.c optional ath \
|
dev/ath/if_ath_tx.c optional ath \
|
||||||
compile-with "${ATH_C}"
|
compile-with "${ATH_C}"
|
||||||
dev/ath/if_ath_tx_edma.c optional ath \
|
dev/ath/if_ath_tx_edma.c optional ath \
|
||||||
|
|||||||
@@ -1,353 +0,0 @@
|
|||||||
/*-
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
|
|
||||||
* Copyright (c) 2010-2011 Adrian Chadd, Xenion Pty Ltd
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer,
|
|
||||||
* without modification.
|
|
||||||
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
||||||
* similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
|
|
||||||
* redistribution must be conditioned upon including a substantially
|
|
||||||
* similar Disclaimer requirement for further binary redistribution.
|
|
||||||
*
|
|
||||||
* NO WARRANTY
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
|
|
||||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
* THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
|
|
||||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
|
||||||
__FBSDID("$FreeBSD$");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* AHB bus front-end for the Atheros Wireless LAN controller driver.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "opt_ath.h"
|
|
||||||
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/systm.h>
|
|
||||||
#include <sys/malloc.h>
|
|
||||||
#include <sys/module.h>
|
|
||||||
#include <sys/kernel.h>
|
|
||||||
#include <sys/lock.h>
|
|
||||||
#include <sys/mutex.h>
|
|
||||||
#include <sys/errno.h>
|
|
||||||
|
|
||||||
#include <machine/bus.h>
|
|
||||||
#include <machine/resource.h>
|
|
||||||
#include <sys/bus.h>
|
|
||||||
#include <sys/rman.h>
|
|
||||||
|
|
||||||
#include <sys/socket.h>
|
|
||||||
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_media.h>
|
|
||||||
#include <net/if_arp.h>
|
|
||||||
#include <net/ethernet.h>
|
|
||||||
|
|
||||||
#include <net80211/ieee80211_var.h>
|
|
||||||
|
|
||||||
#include <dev/ath/if_athvar.h>
|
|
||||||
|
|
||||||
#include <mips/atheros/ar71xxreg.h>
|
|
||||||
#include <mips/atheros/ar91xxreg.h>
|
|
||||||
#include <mips/atheros/ar71xx_cpudef.h>
|
|
||||||
|
|
||||||
/* For EEPROM firmware */
|
|
||||||
#ifdef ATH_EEPROM_FIRMWARE
|
|
||||||
#include <sys/linker.h>
|
|
||||||
#include <sys/firmware.h>
|
|
||||||
#endif /* ATH_EEPROM_FIRMWARE */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* bus glue.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* number of 16 bit words */
|
|
||||||
#define ATH_EEPROM_DATA_SIZE 2048
|
|
||||||
|
|
||||||
struct ath_ahb_softc {
|
|
||||||
struct ath_softc sc_sc;
|
|
||||||
struct resource *sc_sr; /* memory resource */
|
|
||||||
struct resource *sc_irq; /* irq resource */
|
|
||||||
void *sc_ih; /* interrupt handler */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define VENDOR_ATHEROS 0x168c
|
|
||||||
#define AR9130_DEVID 0x000b
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_probe(device_t dev)
|
|
||||||
{
|
|
||||||
int vendor_id, device_id;
|
|
||||||
const char* devname;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if a device/vendor ID is provided in hints.
|
|
||||||
*/
|
|
||||||
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
|
|
||||||
"vendor_id", &vendor_id) != 0) {
|
|
||||||
vendor_id = VENDOR_ATHEROS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
|
|
||||||
"device_id", &device_id) != 0) {
|
|
||||||
device_id = AR9130_DEVID;
|
|
||||||
}
|
|
||||||
|
|
||||||
device_printf(dev, "Vendor=0x%04x, Device=0x%04x\n",
|
|
||||||
vendor_id & 0xffff,
|
|
||||||
device_id & 0xffff);
|
|
||||||
|
|
||||||
/* Attempt to probe */
|
|
||||||
devname = ath_hal_probe(vendor_id, device_id);
|
|
||||||
|
|
||||||
if (devname != NULL) {
|
|
||||||
device_set_desc(dev, devname);
|
|
||||||
return BUS_PROBE_DEFAULT;
|
|
||||||
}
|
|
||||||
return ENXIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ath_ahb_intr(void *arg)
|
|
||||||
{
|
|
||||||
/* XXX TODO: check if its ours! */
|
|
||||||
ar71xx_device_flush_ddr(AR71XX_CPU_DDR_FLUSH_WMAC);
|
|
||||||
ath_intr(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_attach(device_t dev)
|
|
||||||
{
|
|
||||||
struct ath_ahb_softc *psc = device_get_softc(dev);
|
|
||||||
struct ath_softc *sc = &psc->sc_sc;
|
|
||||||
int error = ENXIO;
|
|
||||||
int rid;
|
|
||||||
int device_id, vendor_id;
|
|
||||||
#ifdef ATH_EEPROM_FIRMWARE
|
|
||||||
const struct firmware *fw = NULL;
|
|
||||||
const char *buf;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sc->sc_dev = dev;
|
|
||||||
|
|
||||||
rid = 0;
|
|
||||||
psc->sc_sr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
|
|
||||||
if (psc->sc_sr == NULL) {
|
|
||||||
device_printf(dev, "cannot map register space\n");
|
|
||||||
goto bad;
|
|
||||||
}
|
|
||||||
|
|
||||||
sc->sc_st = (HAL_BUS_TAG) rman_get_bustag(psc->sc_sr);
|
|
||||||
sc->sc_sh = (HAL_BUS_HANDLE) rman_get_bushandle(psc->sc_sr);
|
|
||||||
/*
|
|
||||||
* Mark device invalid so any interrupts (shared or otherwise)
|
|
||||||
* that arrive before the HAL is setup are discarded.
|
|
||||||
*/
|
|
||||||
sc->sc_invalid = 1;
|
|
||||||
|
|
||||||
#ifdef ATH_EEPROM_FIRMWARE
|
|
||||||
/*
|
|
||||||
* If there's an EEPROM firmware image, load that in.
|
|
||||||
*/
|
|
||||||
if (resource_string_value(device_get_name(dev), device_get_unit(dev),
|
|
||||||
"eeprom_firmware", &buf) == 0) {
|
|
||||||
device_printf(dev, "%s: looking up firmware @ '%s'\n",
|
|
||||||
__func__, buf);
|
|
||||||
|
|
||||||
fw = firmware_get(buf);
|
|
||||||
if (fw == NULL) {
|
|
||||||
device_printf(dev, "%s: couldn't find firmware\n",
|
|
||||||
__func__);
|
|
||||||
goto bad1;
|
|
||||||
}
|
|
||||||
|
|
||||||
device_printf(dev, "%s: EEPROM firmware @ %p\n",
|
|
||||||
__func__, fw->data);
|
|
||||||
sc->sc_eepromdata =
|
|
||||||
malloc(fw->datasize, M_TEMP, M_WAITOK | M_ZERO);
|
|
||||||
if (! sc->sc_eepromdata) {
|
|
||||||
device_printf(dev, "%s: can't malloc eepromdata\n",
|
|
||||||
__func__);
|
|
||||||
goto bad1;
|
|
||||||
}
|
|
||||||
memcpy(sc->sc_eepromdata, fw->data, fw->datasize);
|
|
||||||
firmware_put(fw, 0);
|
|
||||||
}
|
|
||||||
#endif /* ATH_EEPROM_FIRMWARE */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Arrange interrupt line.
|
|
||||||
*/
|
|
||||||
rid = 0;
|
|
||||||
psc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE|RF_ACTIVE);
|
|
||||||
if (psc->sc_irq == NULL) {
|
|
||||||
device_printf(dev, "could not map interrupt\n");
|
|
||||||
goto bad1;
|
|
||||||
}
|
|
||||||
if (bus_setup_intr(dev, psc->sc_irq,
|
|
||||||
INTR_TYPE_NET | INTR_MPSAFE,
|
|
||||||
NULL, ath_ahb_intr, sc, &psc->sc_ih)) {
|
|
||||||
device_printf(dev, "could not establish interrupt\n");
|
|
||||||
goto bad2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup DMA descriptor area.
|
|
||||||
*/
|
|
||||||
if (bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
|
|
||||||
1, 0, /* alignment, bounds */
|
|
||||||
BUS_SPACE_MAXADDR_32BIT, /* lowaddr */
|
|
||||||
BUS_SPACE_MAXADDR, /* highaddr */
|
|
||||||
NULL, NULL, /* filter, filterarg */
|
|
||||||
0x3ffff, /* maxsize XXX */
|
|
||||||
ATH_MAX_SCATTER, /* nsegments */
|
|
||||||
0x3ffff, /* maxsegsize XXX */
|
|
||||||
BUS_DMA_ALLOCNOW, /* flags */
|
|
||||||
NULL, /* lockfunc */
|
|
||||||
NULL, /* lockarg */
|
|
||||||
&sc->sc_dmat)) {
|
|
||||||
device_printf(dev, "cannot allocate DMA tag\n");
|
|
||||||
goto bad3;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if a device/vendor ID is provided in hints.
|
|
||||||
*/
|
|
||||||
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
|
|
||||||
"vendor_id", &vendor_id) != 0) {
|
|
||||||
vendor_id = VENDOR_ATHEROS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
|
|
||||||
"device_id", &device_id) != 0) {
|
|
||||||
device_id = AR9130_DEVID;
|
|
||||||
}
|
|
||||||
|
|
||||||
ATH_LOCK_INIT(sc);
|
|
||||||
ATH_PCU_LOCK_INIT(sc);
|
|
||||||
ATH_RX_LOCK_INIT(sc);
|
|
||||||
ATH_TX_LOCK_INIT(sc);
|
|
||||||
ATH_TXSTATUS_LOCK_INIT(sc);
|
|
||||||
|
|
||||||
error = ath_attach(device_id, sc);
|
|
||||||
if (error == 0) /* success */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ATH_TXSTATUS_LOCK_DESTROY(sc);
|
|
||||||
ATH_RX_LOCK_DESTROY(sc);
|
|
||||||
ATH_TX_LOCK_DESTROY(sc);
|
|
||||||
ATH_PCU_LOCK_DESTROY(sc);
|
|
||||||
ATH_LOCK_DESTROY(sc);
|
|
||||||
bus_dma_tag_destroy(sc->sc_dmat);
|
|
||||||
bad3:
|
|
||||||
bus_teardown_intr(dev, psc->sc_irq, psc->sc_ih);
|
|
||||||
bad2:
|
|
||||||
bus_release_resource(dev, SYS_RES_IRQ, 0, psc->sc_irq);
|
|
||||||
bad1:
|
|
||||||
bus_release_resource(dev, SYS_RES_MEMORY, 0, psc->sc_sr);
|
|
||||||
bad:
|
|
||||||
/* XXX?! */
|
|
||||||
if (sc->sc_eepromdata)
|
|
||||||
free(sc->sc_eepromdata, M_TEMP);
|
|
||||||
return (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_detach(device_t dev)
|
|
||||||
{
|
|
||||||
struct ath_ahb_softc *psc = device_get_softc(dev);
|
|
||||||
struct ath_softc *sc = &psc->sc_sc;
|
|
||||||
|
|
||||||
/* check if device was removed */
|
|
||||||
sc->sc_invalid = !bus_child_present(dev);
|
|
||||||
|
|
||||||
ath_detach(sc);
|
|
||||||
|
|
||||||
bus_generic_detach(dev);
|
|
||||||
bus_teardown_intr(dev, psc->sc_irq, psc->sc_ih);
|
|
||||||
bus_release_resource(dev, SYS_RES_IRQ, 0, psc->sc_irq);
|
|
||||||
|
|
||||||
bus_dma_tag_destroy(sc->sc_dmat);
|
|
||||||
bus_release_resource(dev, SYS_RES_MEMORY, 0, psc->sc_sr);
|
|
||||||
/* XXX?! */
|
|
||||||
if (sc->sc_eepromdata)
|
|
||||||
free(sc->sc_eepromdata, M_TEMP);
|
|
||||||
|
|
||||||
ATH_TXSTATUS_LOCK_DESTROY(sc);
|
|
||||||
ATH_RX_LOCK_DESTROY(sc);
|
|
||||||
ATH_TX_LOCK_DESTROY(sc);
|
|
||||||
ATH_PCU_LOCK_DESTROY(sc);
|
|
||||||
ATH_LOCK_DESTROY(sc);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_shutdown(device_t dev)
|
|
||||||
{
|
|
||||||
struct ath_ahb_softc *psc = device_get_softc(dev);
|
|
||||||
|
|
||||||
ath_shutdown(&psc->sc_sc);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_suspend(device_t dev)
|
|
||||||
{
|
|
||||||
struct ath_ahb_softc *psc = device_get_softc(dev);
|
|
||||||
|
|
||||||
ath_suspend(&psc->sc_sc);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ath_ahb_resume(device_t dev)
|
|
||||||
{
|
|
||||||
struct ath_ahb_softc *psc = device_get_softc(dev);
|
|
||||||
|
|
||||||
ath_resume(&psc->sc_sc);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static device_method_t ath_ahb_methods[] = {
|
|
||||||
/* Device interface */
|
|
||||||
DEVMETHOD(device_probe, ath_ahb_probe),
|
|
||||||
DEVMETHOD(device_attach, ath_ahb_attach),
|
|
||||||
DEVMETHOD(device_detach, ath_ahb_detach),
|
|
||||||
DEVMETHOD(device_shutdown, ath_ahb_shutdown),
|
|
||||||
DEVMETHOD(device_suspend, ath_ahb_suspend),
|
|
||||||
DEVMETHOD(device_resume, ath_ahb_resume),
|
|
||||||
{ 0,0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static driver_t ath_ahb_driver = {
|
|
||||||
"ath",
|
|
||||||
ath_ahb_methods,
|
|
||||||
sizeof (struct ath_ahb_softc)
|
|
||||||
};
|
|
||||||
|
|
||||||
DRIVER_MODULE(if_ath_ahb, nexus, ath_ahb_driver, 0, 0);
|
|
||||||
DRIVER_MODULE(if_ath_ahb, apb, ath_ahb_driver, 0, 0);
|
|
||||||
MODULE_VERSION(if_ath_ahb, 1);
|
|
||||||
MODULE_DEPEND(if_ath_ahb, wlan, 1, 1, 1); /* 802.11 media layer */
|
|
||||||
MODULE_DEPEND(if_ath_ahb, ath_main, 1, 1, 1); /* if_ath driver */
|
|
||||||
MODULE_DEPEND(if_ath_ahb, ath_hal, 1, 1, 1); /* ath HAL */
|
|
||||||
@@ -259,9 +259,8 @@ device wlan_wep # 802.11 WEP support
|
|||||||
device wlan_ccmp # 802.11 CCMP support
|
device wlan_ccmp # 802.11 CCMP support
|
||||||
device wlan_tkip # 802.11 TKIP support
|
device wlan_tkip # 802.11 TKIP support
|
||||||
device wlan_amrr # AMRR transmit rate control algorithm
|
device wlan_amrr # AMRR transmit rate control algorithm
|
||||||
device ath # Atheros NICs
|
device ath # Atheros CardBus/PCI NICs
|
||||||
device ath_pci # Atheros pci/cardbus glue
|
device ath_hal # Atheros CardBus/PCI chip support
|
||||||
device ath_hal # pci/cardbus chip support
|
|
||||||
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
||||||
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
||||||
device ath_rate_sample # SampleRate tx rate control for ath
|
device ath_rate_sample # SampleRate tx rate control for ath
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ SUBDIR= \
|
|||||||
ath_hal_ar9300 \
|
ath_hal_ar9300 \
|
||||||
ath_main \
|
ath_main \
|
||||||
ath_rate \
|
ath_rate \
|
||||||
ath_pci \
|
|
||||||
${_autofs} \
|
${_autofs} \
|
||||||
axgbe \
|
axgbe \
|
||||||
backlight \
|
backlight \
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011 Adrian Chadd, Xenion Pty Ltd
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer,
|
|
||||||
# without modification.
|
|
||||||
# 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
||||||
# similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
|
|
||||||
# redistribution must be conditioned upon including a substantially
|
|
||||||
# similar Disclaimer requirement for further binary redistribution.
|
|
||||||
#
|
|
||||||
# NO WARRANTY
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
|
|
||||||
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
|
|
||||||
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
# THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
#
|
|
||||||
# $FreeBSD$
|
|
||||||
#
|
|
||||||
|
|
||||||
.PATH: ${SRCTOP}/sys/dev/ath
|
|
||||||
.PATH: ${SRCTOP}/sys/dev/ath/ath_hal
|
|
||||||
|
|
||||||
KMOD= if_ath_ahb
|
|
||||||
SRCS= if_ath_ahb.c
|
|
||||||
SRCS+= device_if.h bus_if.h opt_wlan.h opt_ath.h opt_ah.h
|
|
||||||
|
|
||||||
CFLAGS+= -I. -I${SRCTOP}/sys/dev/ath -I${SRCTOP}/sys/dev/ath/ath_hal
|
|
||||||
|
|
||||||
.include <bsd.kmod.mk>
|
|
||||||
|
|
||||||
CWARNFLAGS+= ${NO_WUNUSED_BUT_SET_VARIABLE}
|
|
||||||
@@ -39,6 +39,7 @@ SRCS= if_ath.c if_ath_alq.c if_ath_debug.c if_ath_keycache.c if_ath_sysctl.c
|
|||||||
SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c if_ath_rx.c if_ath_tdma.c
|
SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c if_ath_rx.c if_ath_tdma.c
|
||||||
SRCS+= if_ath_beacon.c if_ath_rx_edma.c if_ath_tx_edma.c if_ath_spectral.c
|
SRCS+= if_ath_beacon.c if_ath_rx_edma.c if_ath_tx_edma.c if_ath_spectral.c
|
||||||
SRCS+= if_ath_btcoex.c if_ath_btcoex_mci.c if_ath_lna_div.c if_ath_ioctl.c if_ath_descdma.c
|
SRCS+= if_ath_btcoex.c if_ath_btcoex_mci.c if_ath_lna_div.c if_ath_ioctl.c if_ath_descdma.c
|
||||||
|
SRCS+= if_ath_pci.c
|
||||||
|
|
||||||
SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
|
SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
|
||||||
|
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2011 Adrian Chadd, Xenion Pty Ltd
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer,
|
|
||||||
# without modification.
|
|
||||||
# 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
|
||||||
# similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
|
|
||||||
# redistribution must be conditioned upon including a substantially
|
|
||||||
# similar Disclaimer requirement for further binary redistribution.
|
|
||||||
#
|
|
||||||
# NO WARRANTY
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
|
|
||||||
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
# THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
|
|
||||||
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
|
||||||
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
# THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
#
|
|
||||||
# $FreeBSD$
|
|
||||||
#
|
|
||||||
|
|
||||||
.PATH: ${SRCTOP}/sys/dev/ath
|
|
||||||
.PATH: ${SRCTOP}/sys/dev/ath/ath_hal
|
|
||||||
|
|
||||||
KMOD= if_ath_pci
|
|
||||||
SRCS= if_ath_pci.c
|
|
||||||
SRCS+= device_if.h bus_if.h pci_if.h opt_wlan.h opt_ath.h opt_ah.h
|
|
||||||
|
|
||||||
CFLAGS+= -I. -I${SRCTOP}/sys/dev/ath -I${SRCTOP}/sys/dev/ath/ath_hal
|
|
||||||
|
|
||||||
.include <bsd.kmod.mk>
|
|
||||||
|
|
||||||
CWARNFLAGS+= ${NO_WUNUSED_BUT_SET_VARIABLE}
|
|
||||||
@@ -241,9 +241,8 @@ device wlan_wep # 802.11 WEP support
|
|||||||
device wlan_ccmp # 802.11 CCMP support
|
device wlan_ccmp # 802.11 CCMP support
|
||||||
device wlan_tkip # 802.11 TKIP support
|
device wlan_tkip # 802.11 TKIP support
|
||||||
device wlan_amrr # AMRR transmit rate control algorithm
|
device wlan_amrr # AMRR transmit rate control algorithm
|
||||||
device ath # Atheros NICs
|
device ath # Atheros CardBus/PCI NICs
|
||||||
device ath_pci # Atheros pci/cardbus glue
|
device ath_hal # Atheros CardBus/PCI chip support
|
||||||
device ath_hal # pci/cardbus chip support
|
|
||||||
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
||||||
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
||||||
device ath_rate_sample # SampleRate tx rate control for ath
|
device ath_rate_sample # SampleRate tx rate control for ath
|
||||||
|
|||||||
@@ -237,9 +237,8 @@ device wlan_wep # 802.11 WEP support
|
|||||||
device wlan_ccmp # 802.11 CCMP support
|
device wlan_ccmp # 802.11 CCMP support
|
||||||
device wlan_tkip # 802.11 TKIP support
|
device wlan_tkip # 802.11 TKIP support
|
||||||
device wlan_amrr # AMRR transmit rate control algorithm
|
device wlan_amrr # AMRR transmit rate control algorithm
|
||||||
device ath # Atheros NICs
|
device ath # Atheros CardBus/PCI NICs
|
||||||
device ath_pci # Atheros pci/cardbus glue
|
device ath_hal # Atheros CardBus/PCI chip support
|
||||||
device ath_hal # pci/cardbus chip support
|
|
||||||
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation
|
||||||
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later
|
||||||
device ath_rate_sample # SampleRate tx rate control for ath
|
device ath_rate_sample # SampleRate tx rate control for ath
|
||||||
|
|||||||
Reference in New Issue
Block a user