Author: avos
Date: Mon Jan  4 21:03:01 2016
New Revision: 293177
URL: https://svnweb.freebsd.org/changeset/base/293177

Log:
  iwm: store pointer for 'struct firmware' instead of
  'size_t' and 'void *' pair.
  
  Approved by:  adrian (mentor)
  Obtained from:        DragonFlyBSD
  Differential Revision:        https://reviews.freebsd.org/D4765

Modified:
  head/sys/dev/iwm/if_iwm.c
  head/sys/dev/iwm/if_iwmvar.h

Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c   Mon Jan  4 20:34:40 2016        (r293176)
+++ head/sys/dev/iwm/if_iwm.c   Mon Jan  4 21:03:01 2016        (r293177)
@@ -423,9 +423,8 @@ iwm_set_default_calib(struct iwm_softc *
 static void
 iwm_fw_info_free(struct iwm_fw_info *fw)
 {
-       firmware_put(fw->fw_rawdata, FIRMWARE_UNLOAD);
-       fw->fw_rawdata = NULL;
-       fw->fw_rawsize = 0;
+       firmware_put(fw->fw_fp, FIRMWARE_UNLOAD);
+       fw->fw_fp = NULL;
        /* don't touch fw->fw_status */
        memset(fw->fw_sects, 0, sizeof(fw->fw_sects));
 }
@@ -450,32 +449,30 @@ iwm_read_firmware(struct iwm_softc *sc, 
                msleep(&sc->sc_fw, &sc->sc_mtx, 0, "iwmfwp", 0);
        fw->fw_status = IWM_FW_STATUS_INPROGRESS;
 
-       if (fw->fw_rawdata != NULL)
+       if (fw->fw_fp != NULL)
                iwm_fw_info_free(fw);
 
        /*
         * Load firmware into driver memory.
-        * fw_rawdata and fw_rawsize will be set.
+        * fw_fp will be set.
         */
        IWM_UNLOCK(sc);
        fwp = firmware_get(sc->sc_fwname);
+       IWM_LOCK(sc);
        if (fwp == NULL) {
                device_printf(sc->sc_dev,
                    "could not read firmware %s (error %d)\n",
                    sc->sc_fwname, error);
-               IWM_LOCK(sc);
                goto out;
        }
-       IWM_LOCK(sc);
-       fw->fw_rawdata = fwp->data;
-       fw->fw_rawsize = fwp->datasize;
+       fw->fw_fp = fwp;
 
        /*
         * Parse firmware contents
         */
 
-       uhdr = (const void *)fw->fw_rawdata;
-       if (*(const uint32_t *)fw->fw_rawdata != 0
+       uhdr = (const void *)fw->fw_fp->data;
+       if (*(const uint32_t *)fw->fw_fp->data != 0
            || le32toh(uhdr->magic) != IWM_TLV_UCODE_MAGIC) {
                device_printf(sc->sc_dev, "invalid firmware %s\n",
                    sc->sc_fwname);
@@ -485,7 +482,7 @@ iwm_read_firmware(struct iwm_softc *sc, 
 
        sc->sc_fwver = le32toh(uhdr->ver);
        data = uhdr->data;
-       len = fw->fw_rawsize - sizeof(*uhdr);
+       len = fw->fw_fp->datasize - sizeof(*uhdr);
 
        while (len >= sizeof(tlv)) {
                size_t tlv_len;
@@ -684,7 +681,7 @@ iwm_read_firmware(struct iwm_softc *sc, 
  out:
        if (error) {
                fw->fw_status = IWM_FW_STATUS_NONE;
-               if (fw->fw_rawdata != NULL)
+               if (fw->fw_fp != NULL)
                        iwm_fw_info_free(fw);
        } else
                fw->fw_status = IWM_FW_STATUS_DONE;
@@ -4957,7 +4954,7 @@ iwm_detach_local(struct iwm_softc *sc, i
                iwm_free_tx_ring(sc, &sc->txq[i]);
 
        /* Free firmware */
-       if (fw->fw_rawdata != NULL)
+       if (fw->fw_fp != NULL)
                iwm_fw_info_free(fw);
 
        /* free scheduler */

Modified: head/sys/dev/iwm/if_iwmvar.h
==============================================================================
--- head/sys/dev/iwm/if_iwmvar.h        Mon Jan  4 20:34:40 2016        
(r293176)
+++ head/sys/dev/iwm/if_iwmvar.h        Mon Jan  4 21:03:01 2016        
(r293177)
@@ -159,8 +159,7 @@ enum iwm_ucode_type {
 };
 
 struct iwm_fw_info {
-       const void *fw_rawdata;
-       size_t fw_rawsize;
+       const struct firmware *fw_fp;
        int fw_status;
 
        struct iwm_fw_sects {
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to