rtwn_usb(4): do not try to modify global static structure.
Use a local copy for modifications instead. Tested with RTL8821AU (AP) + RTL8188EU (STA). Reported by: hselasky
This commit is contained in:
parent
5b51fcfc7a
commit
5c06728ccb
@ -58,7 +58,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <dev/rtwn/rtl8192c/usb/r92cu_reg.h>
|
||||
|
||||
|
||||
static struct usb_config rtwn_config[RTWN_N_TRANSFER] = {
|
||||
static const struct usb_config rtwn_config_common[RTWN_N_TRANSFER] = {
|
||||
[RTWN_BULK_RX] = {
|
||||
.type = UE_BULK,
|
||||
.endpoint = UE_ADDR_ANY,
|
||||
@ -161,6 +161,7 @@ rtwn_usb_setup_queues(struct rtwn_usb_softc *uc)
|
||||
int
|
||||
rtwn_usb_setup_endpoints(struct rtwn_usb_softc *uc)
|
||||
{
|
||||
struct usb_config *rtwn_config;
|
||||
struct rtwn_softc *sc = &uc->uc_sc;
|
||||
const uint8_t iface_index = RTWN_IFACE_INDEX;
|
||||
struct usb_endpoint *ep, *ep_end;
|
||||
@ -197,6 +198,9 @@ rtwn_usb_setup_endpoints(struct rtwn_usb_softc *uc)
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
rtwn_config = malloc(sizeof(rtwn_config_common), M_TEMP, M_WAITOK);
|
||||
memcpy(rtwn_config, rtwn_config_common, sizeof(rtwn_config_common));
|
||||
|
||||
/* NB: keep in sync with rtwn_dma_init(). */
|
||||
rtwn_config[RTWN_BULK_TX_VO].endpoint = addr[0];
|
||||
switch (uc->ntx) {
|
||||
@ -224,6 +228,8 @@ rtwn_usb_setup_endpoints(struct rtwn_usb_softc *uc)
|
||||
rtwn_config[RTWN_BULK_RX].bufsize = sc->rx_dma_size + 1024;
|
||||
error = usbd_transfer_setup(uc->uc_udev, &iface_index,
|
||||
uc->uc_xfer, rtwn_config, RTWN_N_TRANSFER, uc, &sc->sc_mtx);
|
||||
free(rtwn_config, M_TEMP);
|
||||
|
||||
if (error) {
|
||||
device_printf(sc->sc_dev, "could not allocate USB transfers, "
|
||||
"err=%s\n", usbd_errstr(error));
|
||||
|
Loading…
x
Reference in New Issue
Block a user