diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | 29 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.h | 3 |
4 files changed, 19 insertions, 16 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c index 8ba0dd54e37d..502659afe1fb 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | |||
@@ -75,48 +75,49 @@ static struct iwl_wimax_coex_event_entry cu_priorities[COEX_NUM_OF_EVENTS] = { | |||
75 | /* | 75 | /* |
76 | * ucode | 76 | * ucode |
77 | */ | 77 | */ |
78 | static int iwlagn_load_section(struct iwl_priv *priv, const char *name, | 78 | static int iwlagn_load_section(struct iwl_trans *trans, const char *name, |
79 | struct fw_desc *image, u32 dst_addr) | 79 | struct fw_desc *image, u32 dst_addr) |
80 | { | 80 | { |
81 | struct iwl_bus *bus = bus(trans); | ||
81 | dma_addr_t phy_addr = image->p_addr; | 82 | dma_addr_t phy_addr = image->p_addr; |
82 | u32 byte_cnt = image->len; | 83 | u32 byte_cnt = image->len; |
83 | int ret; | 84 | int ret; |
84 | 85 | ||
85 | priv->ucode_write_complete = 0; | 86 | trans->ucode_write_complete = 0; |
86 | 87 | ||
87 | iwl_write_direct32(bus(priv), | 88 | iwl_write_direct32(bus, |
88 | FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL), | 89 | FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL), |
89 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE); | 90 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE); |
90 | 91 | ||
91 | iwl_write_direct32(bus(priv), | 92 | iwl_write_direct32(bus, |
92 | FH_SRVC_CHNL_SRAM_ADDR_REG(FH_SRVC_CHNL), dst_addr); | 93 | FH_SRVC_CHNL_SRAM_ADDR_REG(FH_SRVC_CHNL), dst_addr); |
93 | 94 | ||
94 | iwl_write_direct32(bus(priv), | 95 | iwl_write_direct32(bus, |
95 | FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL), | 96 | FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL), |
96 | phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); | 97 | phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); |
97 | 98 | ||
98 | iwl_write_direct32(bus(priv), | 99 | iwl_write_direct32(bus, |
99 | FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL), | 100 | FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL), |
100 | (iwl_get_dma_hi_addr(phy_addr) | 101 | (iwl_get_dma_hi_addr(phy_addr) |
101 | << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt); | 102 | << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt); |
102 | 103 | ||
103 | iwl_write_direct32(bus(priv), | 104 | iwl_write_direct32(bus, |
104 | FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL), | 105 | FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL), |
105 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM | | 106 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM | |
106 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX | | 107 | 1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX | |
107 | FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID); | 108 | FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID); |
108 | 109 | ||
109 | iwl_write_direct32(bus(priv), | 110 | iwl_write_direct32(bus, |
110 | FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL), | 111 | FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL), |
111 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE | | 112 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE | |
112 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE | | 113 | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE | |
113 | FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD); | 114 | FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD); |
114 | 115 | ||
115 | IWL_DEBUG_FW(priv, "%s uCode section being loaded...\n", name); | 116 | IWL_DEBUG_FW(bus, "%s uCode section being loaded...\n", name); |
116 | ret = wait_event_timeout(priv->shrd->wait_command_queue, | 117 | ret = wait_event_timeout(trans->shrd->wait_command_queue, |
117 | priv->ucode_write_complete, 5 * HZ); | 118 | trans->ucode_write_complete, 5 * HZ); |
118 | if (!ret) { | 119 | if (!ret) { |
119 | IWL_ERR(priv, "Could not load the %s uCode section\n", | 120 | IWL_ERR(trans, "Could not load the %s uCode section\n", |
120 | name); | 121 | name); |
121 | return -ETIMEDOUT; | 122 | return -ETIMEDOUT; |
122 | } | 123 | } |
@@ -129,12 +130,12 @@ static int iwlagn_load_given_ucode(struct iwl_priv *priv, | |||
129 | { | 130 | { |
130 | int ret = 0; | 131 | int ret = 0; |
131 | 132 | ||
132 | ret = iwlagn_load_section(priv, "INST", &image->code, | 133 | ret = iwlagn_load_section(trans(priv), "INST", &image->code, |
133 | IWLAGN_RTC_INST_LOWER_BOUND); | 134 | IWLAGN_RTC_INST_LOWER_BOUND); |
134 | if (ret) | 135 | if (ret) |
135 | return ret; | 136 | return ret; |
136 | 137 | ||
137 | return iwlagn_load_section(priv, "DATA", &image->data, | 138 | return iwlagn_load_section(trans(priv), "DATA", &image->data, |
138 | IWLAGN_RTC_DATA_LOWER_BOUND); | 139 | IWLAGN_RTC_DATA_LOWER_BOUND); |
139 | } | 140 | } |
140 | 141 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index ef8620b10bbc..4279e01acc49 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -920,7 +920,6 @@ struct iwl_priv { | |||
920 | struct fw_img ucode_wowlan; | 920 | struct fw_img ucode_wowlan; |
921 | 921 | ||
922 | enum iwlagn_ucode_type ucode_type; | 922 | enum iwlagn_ucode_type ucode_type; |
923 | u8 ucode_write_complete; /* the image write is complete */ | ||
924 | char firmware_name[25]; | 923 | char firmware_name[25]; |
925 | 924 | ||
926 | struct iwl_rxon_context contexts[NUM_IWL_RXON_CTX]; | 925 | struct iwl_rxon_context contexts[NUM_IWL_RXON_CTX]; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c index 374c68cc1d70..ee126f844a5c 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c | |||
@@ -1108,7 +1108,7 @@ void iwl_irq_tasklet(struct iwl_trans *trans) | |||
1108 | isr_stats->tx++; | 1108 | isr_stats->tx++; |
1109 | handled |= CSR_INT_BIT_FH_TX; | 1109 | handled |= CSR_INT_BIT_FH_TX; |
1110 | /* Wake up uCode load routine, now that load is complete */ | 1110 | /* Wake up uCode load routine, now that load is complete */ |
1111 | priv(trans)->ucode_write_complete = 1; | 1111 | trans->ucode_write_complete = 1; |
1112 | wake_up(&trans->shrd->wait_command_queue); | 1112 | wake_up(&trans->shrd->wait_command_queue); |
1113 | } | 1113 | } |
1114 | 1114 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h index c5923125c3f9..34b817f48a27 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/iwlwifi/iwl-trans.h | |||
@@ -212,12 +212,15 @@ struct iwl_trans_ops { | |||
212 | * @ops - pointer to iwl_trans_ops | 212 | * @ops - pointer to iwl_trans_ops |
213 | * @shrd - pointer to iwl_shared which holds shared data from the upper layer | 213 | * @shrd - pointer to iwl_shared which holds shared data from the upper layer |
214 | * @hcmd_lock: protects HCMD | 214 | * @hcmd_lock: protects HCMD |
215 | * @ucode_write_complete: indicates that the ucode has been copied. | ||
215 | */ | 216 | */ |
216 | struct iwl_trans { | 217 | struct iwl_trans { |
217 | const struct iwl_trans_ops *ops; | 218 | const struct iwl_trans_ops *ops; |
218 | struct iwl_shared *shrd; | 219 | struct iwl_shared *shrd; |
219 | spinlock_t hcmd_lock; | 220 | spinlock_t hcmd_lock; |
220 | 221 | ||
222 | u8 ucode_write_complete; /* the image write is complete */ | ||
223 | |||
221 | /* pointer to trans specific struct */ | 224 | /* pointer to trans specific struct */ |
222 | /*Ensure that this pointer will always be aligned to sizeof pointer */ | 225 | /*Ensure that this pointer will always be aligned to sizeof pointer */ |
223 | char trans_specific[0] __attribute__((__aligned__(sizeof(void *)))); | 226 | char trans_specific[0] __attribute__((__aligned__(sizeof(void *)))); |