svn commit: r293177 - head/sys/dev/iwm

Andriy Voskoboinyk avos at FreeBSD.org
Mon Jan 4 21:03:02 UTC 2016


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 {


More information about the svn-src-all mailing list