[haiku-commits] haiku: hrev56202 - in src/add-ons/kernel/drivers/network/wlan: iaxwifi200/dev/pci idualwifi7260/dev/pci

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 20 Jun 2022 21:17:49 +0000 (UTC)

hrev56202 adds 3 changesets to branch 'master'
old head: 891bd14810c4ba41b1f3d68cfaf076d1e23b710a
new head: b3dab377a93967715de129705da699dd54bd1ae7
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=b3dab377a939+%5E891bd14810c4

----------------------------------------------------------------------------

22bdb7ba70eb: iaxwifi200: Add missing if_free_inplace on deinit.
  
  It may make sense to place this later so that we don't need to add
  another goto label, but that can be experimented with later.

561bb7bac523: idualwifi7260 & iaxwifi200: Do not return but go to the 
appropriate fail.
  
  This way, we will actually tear down what state got initialized.

b3dab377a939: idualwifi7260 & iaxwifi200: Enable PCI busmastering.
  
  The FreeBSD KPIs that we emulate expect this to be done manually,
  so we have to do it before we begin doing PCI access.
  
  Fixes firmware load failures and device initialization problems
  since the introduction of the OpenBSD driver replacing the FreeBSD one.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

2 files changed, 15 insertions(+), 9 deletions(-)
.../network/wlan/iaxwifi200/dev/pci/if_iwx.c     | 21 ++++++++++++--------
.../network/wlan/idualwifi7260/dev/pci/if_iwm.c  |  3 ++-

############################################################################

Commit:      22bdb7ba70eb9623f028f813abb968b6975b5d8f
URL:         https://git.haiku-os.org/haiku/commit/?id=22bdb7ba70eb
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jun 20 21:14:53 2022 UTC

iaxwifi200: Add missing if_free_inplace on deinit.

It may make sense to place this later so that we don't need to add
another goto label, but that can be experimented with later.

----------------------------------------------------------------------------

diff --git 
a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c 
b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
index fa000b358b..b8b2d337b7 100644
--- a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
+++ b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
@@ -10664,7 +10664,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
        if (err == 0) {
                printf("%s: PCIe capability structure not found!\n",
                    DEVNAME(sc));
-               return -1;
+               goto fail;
        }
 
        /*
@@ -10679,7 +10679,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
            &sc->sc_st, &sc->sc_sh, NULL, &sc->sc_sz, 0);
        if (err) {
                printf("%s: can't map mem space\n", DEVNAME(sc));
-               return -1;
+               goto fail;
        }
 
        if (pci_intr_map_msix(pa, 0, &ih) == 0) {
@@ -10691,7 +10691,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
                {
 #endif
                        printf("%s: can't map interrupt\n", DEVNAME(sc));
-                       return -1;
+                       goto fail;
                }
                /* Hardware bug workaround. */
                reg = pci_conf_read(sc->sc_pct, sc->sc_pcitag,
@@ -10716,7 +10716,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
                if (intrstr != NULL)
                        printf(" at %s", intrstr);
                printf("\n");
-               return -1;
+               goto fail;
        }
        printf(", %s\n", intrstr);
 
@@ -10757,7 +10757,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
                /* These devices should be QuZ only. */
                if (sc->sc_hw_rev != IWX_CSR_HW_REV_TYPE_QUZ) {
                        printf("%s: unsupported AX201 adapter\n", DEVNAME(sc));
-                       return -1;
+                       goto fail;
                }
                sc->sc_fwname = IWX_QUZ_A_HR_B_FW;
                sc->sc_device_family = IWX_DEVICE_FAMILY_22000;
@@ -10835,7 +10835,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
                break;
        default:
                printf("%s: unknown adapter type\n", DEVNAME(sc));
-               return -1;
+               goto fail;
        }
 #ifdef __FreeBSD_version
 #undef PCI_PRODUCT
@@ -10871,7 +10871,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
        if (err) {
                printf("%s: could not allocate memory for loading firmware\n",
                    DEVNAME(sc));
-               return -1;
+               goto fail;
        }
 
        if (sc->sc_device_family >= IWX_DEVICE_FAMILY_AX210) {
@@ -11049,6 +11049,10 @@ fail4: while (--txq_i >= 0)
 fail1: iwx_dma_contig_free(&sc->ctxt_info_dma);
        iwx_dma_contig_free(&sc->prph_scratch_dma);
        iwx_dma_contig_free(&sc->prph_info_dma);
+#ifdef __HAIKU__
+fail:
+       if_free_inplace(ifp);
+#endif
        return -1;
 }
 

############################################################################

Commit:      561bb7bac5231a2da48d42a07736e2e7250a6de0
URL:         https://git.haiku-os.org/haiku/commit/?id=561bb7bac523
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jun 20 21:15:45 2022 UTC

idualwifi7260 & iaxwifi200: Do not return but go to the appropriate fail.

This way, we will actually tear down what state got initialized.

----------------------------------------------------------------------------

diff --git 
a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c 
b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
index b8b2d337b7..4f93451fe3 100644
--- a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
+++ b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
@@ -11029,7 +11029,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
 
 #ifdef __HAIKU__
        if (iwx_preinit(sc) != 0)
-               return -1;
+               goto fail4;
 #else
        /*
         * We cannot read the MAC address without loading the
diff --git 
a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c 
b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
index c921580f1c..64a3769aac 100644
--- a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
+++ b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
@@ -12125,7 +12125,7 @@ iwm_attach(struct device *parent, struct device *self, 
void *aux)
        ic->ic_ampdu_tx_stop = iwm_ampdu_tx_stop;
 #ifdef __HAIKU__
        if (iwm_preinit(sc) != 0)
-               return -1;
+               goto fail4;
 #else
        /*
         * We cannot read the MAC address without loading the

############################################################################

Revision:    hrev56202
Commit:      b3dab377a93967715de129705da699dd54bd1ae7
URL:         https://git.haiku-os.org/haiku/commit/?id=b3dab377a939
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Mon Jun 20 21:17:20 2022 UTC

idualwifi7260 & iaxwifi200: Enable PCI busmastering.

The FreeBSD KPIs that we emulate expect this to be done manually,
so we have to do it before we begin doing PCI access.

Fixes firmware load failures and device initialization problems
since the introduction of the OpenBSD driver replacing the FreeBSD one.

----------------------------------------------------------------------------

diff --git 
a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c 
b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
index 4f93451fe3..1649a0857e 100644
--- a/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
+++ b/src/add-ons/kernel/drivers/network/wlan/iaxwifi200/dev/pci/if_iwx.c
@@ -10648,6 +10648,7 @@ iwx_attach(struct device *parent, struct device *self, 
void *aux)
                BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
                BUS_SPACE_MAXSIZE_32BIT, BUS_SPACE_UNRESTRICTED, 
BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL,
                &sc->sc_dmat);
+       pci_enable_busmaster(sc->sc_dev);
 
        if_alloc_inplace(ifp, IFT_ETHER);
 #else
diff --git 
a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c 
b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
index 64a3769aac..3be034e659 100644
--- a/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
+++ b/src/add-ons/kernel/drivers/network/wlan/idualwifi7260/dev/pci/if_iwm.c
@@ -11743,6 +11743,7 @@ iwm_attach(struct device *parent, struct device *self, 
void *aux)
                BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
                BUS_SPACE_MAXSIZE_32BIT, BUS_SPACE_UNRESTRICTED, 
BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL,
                &sc->sc_dmat);
+       pci_enable_busmaster(sc->sc_dev);
 
        if_alloc_inplace(ifp, IFT_ETHER);
 #else


Other related posts:

  • » [haiku-commits] haiku: hrev56202 - in src/add-ons/kernel/drivers/network/wlan: iaxwifi200/dev/pci idualwifi7260/dev/pci - waddlesplash