Commit 6516174d authored by Don Fry's avatar Don Fry Committed by Wey-Yi Guy
Browse files

iwlwifi: Move ucode pointers to iwl_fw



The ucode image is a ucode related thing not a transport one.  Move them.

Signed-off-by: default avatarDon Fry <donald.h.fry@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent 96502ceb
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@
#include "iwl-core.h"
#include "iwl-io.h"
#include "iwl-agn.h"
#include "iwl-wifi.h"

/* create and remove of files */
#define DEBUGFS_ADD_FILE(name, parent, mode) do {			\
@@ -234,12 +235,12 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file,

	/* default is to dump the entire data segment */
	if (!priv->dbgfs_sram_offset && !priv->dbgfs_sram_len) {
		struct iwl_trans *trans = trans(priv);
		struct iwl_nic *nic = nic(priv);
		priv->dbgfs_sram_offset = 0x800000;
		if (trans->shrd->ucode_type == IWL_UCODE_INIT)
			priv->dbgfs_sram_len = trans->ucode_init.data.len;
		if (nic->shrd->ucode_type == IWL_UCODE_INIT)
			priv->dbgfs_sram_len = nic->fw.ucode_init.data.len;
		else
			priv->dbgfs_sram_len = trans->ucode_rt.data.len;
			priv->dbgfs_sram_len = nic->fw.ucode_rt.data.len;
	}
	len = priv->dbgfs_sram_len;

@@ -342,7 +343,7 @@ static ssize_t iwl_dbgfs_wowlan_sram_read(struct file *file,

	return simple_read_from_buffer(user_buf, count, ppos,
				       priv->wowlan_sram,
				       trans(priv)->ucode_wowlan.data.len);
				       nic(priv)->fw.ucode_wowlan.data.len);
}
static ssize_t iwl_dbgfs_stations_read(struct file *file, char __user *user_buf,
					size_t count, loff_t *ppos)
+4 −4
Original line number Diff line number Diff line
@@ -195,7 +195,7 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
			    WIPHY_FLAG_DISABLE_BEACON_HINTS |
			    WIPHY_FLAG_IBSS_RSN;

	if (trans(priv)->ucode_wowlan.code.len &&
	if (nic(priv)->fw.ucode_wowlan.code.len &&
	    device_can_wakeup(trans(priv)->dev)) {
		hw->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
					  WIPHY_WOWLAN_DISCONNECT |
@@ -453,17 +453,17 @@ static int iwlagn_mac_resume(struct ieee80211_hw *hw)

#ifdef CONFIG_IWLWIFI_DEBUGFS
		if (ret == 0) {
			struct iwl_trans *trans = trans(priv);
			struct iwl_nic *nic = nic(priv);
			if (!priv->wowlan_sram)
				priv->wowlan_sram =
					kzalloc(trans->ucode_wowlan.data.len,
					kzalloc(nic->fw.ucode_wowlan.data.len,
						GFP_KERNEL);

			if (priv->wowlan_sram)
				_iwl_read_targ_mem_words(
					trans(priv), 0x800000,
					priv->wowlan_sram,
					trans->ucode_wowlan.data.len / 4);
					nic->fw.ucode_wowlan.data.len / 4);
		}
#endif
	}
+6 −6
Original line number Diff line number Diff line
@@ -591,16 +591,16 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb)
		}
		switch (priv->shrd->ucode_type) {
		case IWL_UCODE_REGULAR:
			inst_size = trans(priv)->ucode_rt.code.len;
			data_size = trans(priv)->ucode_rt.data.len;
			inst_size = nic(priv)->fw.ucode_rt.code.len;
			data_size = nic(priv)->fw.ucode_rt.data.len;
			break;
		case IWL_UCODE_INIT:
			inst_size = trans(priv)->ucode_init.code.len;
			data_size = trans(priv)->ucode_init.data.len;
			inst_size = nic(priv)->fw.ucode_init.code.len;
			data_size = nic(priv)->fw.ucode_init.data.len;
			break;
		case IWL_UCODE_WOWLAN:
			inst_size = trans(priv)->ucode_wowlan.code.len;
			data_size = trans(priv)->ucode_wowlan.data.len;
			inst_size = nic(priv)->fw.ucode_wowlan.code.len;
			data_size = nic(priv)->fw.ucode_wowlan.data.len;
			break;
		case IWL_UCODE_NONE:
			IWL_ERR(priv, "No uCode has not been loaded\n");
+1 −15
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@

#include "iwl-shared.h"
#include "iwl-commands.h"
#include "iwl-ucode.h"

 /*This file includes the declaration that are exported from the transport
 * layer */
@@ -131,18 +132,6 @@ struct iwl_host_cmd {
	u8 id;
};

/* one for each uCode image (inst/data, boot/init/runtime) */
struct fw_desc {
	dma_addr_t p_addr;	/* hardware address */
	void *v_addr;		/* software address */
	u32 len;		/* size in bytes */
};

struct fw_img {
	struct fw_desc code;	/* firmware code image */
	struct fw_desc data;	/* firmware data image */
};

/**
 * struct iwl_trans_ops - transport specific operations
 * @start_hw: starts the HW- from that point on, the HW can send interrupts
@@ -258,9 +247,6 @@ struct iwl_trans {
	char hw_id_str[52];

	u8 ucode_write_complete;	/* the image write is complete */
	struct fw_img ucode_rt;
	struct fw_img ucode_init;
	struct fw_img ucode_wowlan;

	/* eeprom related variables */
	int    nvm_device_type;
+17 −16
Original line number Diff line number Diff line
@@ -99,9 +99,10 @@ static void iwl_free_fw_img(struct iwl_trans *trans, struct fw_img *img)

void iwl_dealloc_ucode(struct iwl_trans *trans)
{
	iwl_free_fw_img(trans, &trans->ucode_rt);
	iwl_free_fw_img(trans, &trans->ucode_init);
	iwl_free_fw_img(trans, &trans->ucode_wowlan);
	struct iwl_nic *nic = nic(trans);
	iwl_free_fw_img(trans, &nic->fw.ucode_rt);
	iwl_free_fw_img(trans, &nic->fw.ucode_init);
	iwl_free_fw_img(trans, &nic->fw.ucode_wowlan);
}

static int iwl_alloc_fw_desc(struct iwl_trans *trans, struct fw_desc *desc,
@@ -122,16 +123,16 @@ static int iwl_alloc_fw_desc(struct iwl_trans *trans, struct fw_desc *desc,
	return 0;
}

static inline struct fw_img *iwl_get_ucode_image(struct iwl_trans *trans,
static inline struct fw_img *iwl_get_ucode_image(struct iwl_nic *nic,
					enum iwl_ucode_type ucode_type)
{
	switch (ucode_type) {
	case IWL_UCODE_INIT:
		return &trans->ucode_init;
		return &nic->fw.ucode_init;
	case IWL_UCODE_WOWLAN:
		return &trans->ucode_wowlan;
		return &nic->fw.ucode_wowlan;
	case IWL_UCODE_REGULAR:
		return &trans->ucode_rt;
		return &nic->fw.ucode_rt;
	case IWL_UCODE_NONE:
		break;
	}
@@ -456,7 +457,7 @@ static void iwl_print_mismatch_inst(struct iwl_trans *trans,
static int iwl_verify_ucode(struct iwl_trans *trans,
			    enum iwl_ucode_type ucode_type)
{
	struct fw_img *img = iwl_get_ucode_image(trans, ucode_type);
	struct fw_img *img = iwl_get_ucode_image(nic(trans), ucode_type);

	if (!img) {
		IWL_ERR(trans, "Invalid ucode requested (%d)\n", ucode_type);
@@ -583,7 +584,7 @@ int iwl_load_ucode_wait_alive(struct iwl_trans *trans,

	old_type = trans->shrd->ucode_type;
	trans->shrd->ucode_type = ucode_type;
	fw = iwl_get_ucode_image(trans, ucode_type);
	fw = iwl_get_ucode_image(nic(trans), ucode_type);

	if (!fw)
		return -EINVAL;
@@ -647,7 +648,7 @@ int iwl_run_init_ucode(struct iwl_trans *trans)
	lockdep_assert_held(&trans->shrd->mutex);

	/* No init ucode required? Curious, but maybe ok */
	if (!trans->ucode_init.code.len)
	if (!nic(trans)->fw.ucode_init.code.len)
		return 0;

	if (trans->shrd->ucode_type != IWL_UCODE_NONE)
@@ -1163,21 +1164,21 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
	/* Runtime instructions and 2 copies of data:
	 * 1) unmodified from disk
	 * 2) backup cache for save/restore during power-downs */
	if (iwl_alloc_fw_desc(trans(priv), &trans(priv)->ucode_rt.code,
	if (iwl_alloc_fw_desc(trans(priv), &nic(priv)->fw.ucode_rt.code,
			      pieces.inst, pieces.inst_size))
		goto err_pci_alloc;
	if (iwl_alloc_fw_desc(trans(priv), &trans(priv)->ucode_rt.data,
	if (iwl_alloc_fw_desc(trans(priv), &nic(priv)->fw.ucode_rt.data,
			      pieces.data, pieces.data_size))
		goto err_pci_alloc;

	/* Initialization instructions and data */
	if (pieces.init_size && pieces.init_data_size) {
		if (iwl_alloc_fw_desc(trans(priv),
				      &trans(priv)->ucode_init.code,
				      &nic(priv)->fw.ucode_init.code,
				      pieces.init, pieces.init_size))
			goto err_pci_alloc;
		if (iwl_alloc_fw_desc(trans(priv),
				      &trans(priv)->ucode_init.data,
				      &nic(priv)->fw.ucode_init.data,
				      pieces.init_data, pieces.init_data_size))
			goto err_pci_alloc;
	}
@@ -1185,12 +1186,12 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
	/* WoWLAN instructions and data */
	if (pieces.wowlan_inst_size && pieces.wowlan_data_size) {
		if (iwl_alloc_fw_desc(trans(priv),
				      &trans(priv)->ucode_wowlan.code,
				      &nic(priv)->fw.ucode_wowlan.code,
				      pieces.wowlan_inst,
				      pieces.wowlan_inst_size))
			goto err_pci_alloc;
		if (iwl_alloc_fw_desc(trans(priv),
				      &trans(priv)->ucode_wowlan.data,
				      &nic(priv)->fw.ucode_wowlan.data,
				      pieces.wowlan_data,
				      pieces.wowlan_data_size))
			goto err_pci_alloc;
Loading