diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-08-12 19:39:54 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-15 15:02:32 -0400 |
commit | 96ed5846c4eeb29934b789e6d83e35a8d498778f (patch) | |
tree | fda494eb167af8202ace0874e3993751f3cd08ee | |
parent | 5bf30d96884818df79a08df8811e3eaa2f5a0818 (diff) |
Staging: rtl8192e: coding style cleanups on r819xE_firmware.c
This cleans up everything but a few 80 column issues in the
r819xE_firmware.c file.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/rtl8192e/r819xE_firmware.c | 329 |
1 files changed, 160 insertions, 169 deletions
diff --git a/drivers/staging/rtl8192e/r819xE_firmware.c b/drivers/staging/rtl8192e/r819xE_firmware.c index dd5cece34dae..72f679274bc4 100644 --- a/drivers/staging/rtl8192e/r819xE_firmware.c +++ b/drivers/staging/rtl8192e/r819xE_firmware.c | |||
@@ -1,54 +1,56 @@ | |||
1 | /************************************************************************************************** | 1 | /* |
2 | * Procedure: Init boot code/firmware code/data session | 2 | * Procedure: Init boot code/firmware code/data session |
3 | * | 3 | * |
4 | * Description: This routine will intialize firmware. If any error occurs during the initialization | 4 | * Description: This routine will intialize firmware. If any error occurs |
5 | * process, the routine shall terminate immediately and return fail. | 5 | * during the initialization process, the routine shall terminate |
6 | * NIC driver should call NdisOpenFile only from MiniportInitialize. | 6 | * immediately and return fail. NIC driver should call |
7 | * NdisOpenFile only from MiniportInitialize. | ||
7 | * | 8 | * |
8 | * Arguments: The pointer of the adapter | 9 | * Arguments: The pointer of the adapter |
9 | 10 | ||
10 | * Returns: | 11 | * Returns: |
11 | * NDIS_STATUS_FAILURE - the following initialization process should be terminated | 12 | * NDIS_STATUS_FAILURE - the following initialization process |
12 | * NDIS_STATUS_SUCCESS - if firmware initialization process success | 13 | * should be terminated |
13 | **************************************************************************************************/ | 14 | * NDIS_STATUS_SUCCESS - if firmware initialization process |
14 | //#include "ieee80211.h" | 15 | * success |
16 | */ | ||
15 | #include "r8192E.h" | 17 | #include "r8192E.h" |
16 | #include "r8192E_hw.h" | 18 | #include "r8192E_hw.h" |
17 | #include <linux/firmware.h> | 19 | #include <linux/firmware.h> |
18 | 20 | ||
19 | /* It should be double word alignment */ | 21 | /* It should be double word alignment */ |
20 | #define GET_COMMAND_PACKET_FRAG_THRESHOLD(v) (4*(v/4) - 8 ) | 22 | #define GET_COMMAND_PACKET_FRAG_THRESHOLD(v) (4 * (v / 4) - 8) |
21 | 23 | ||
22 | typedef enum _firmware_init_step{ | 24 | enum firmware_init_step { |
23 | FW_INIT_STEP0_BOOT = 0, | 25 | FW_INIT_STEP0_BOOT = 0, |
24 | FW_INIT_STEP1_MAIN = 1, | 26 | FW_INIT_STEP1_MAIN = 1, |
25 | FW_INIT_STEP2_DATA = 2, | 27 | FW_INIT_STEP2_DATA = 2, |
26 | }firmware_init_step_e; | 28 | }; |
27 | 29 | ||
28 | typedef enum _opt_rst_type{ | 30 | enum opt_rst_type { |
29 | OPT_SYSTEM_RESET = 0, | 31 | OPT_SYSTEM_RESET = 0, |
30 | OPT_FIRMWARE_RESET = 1, | 32 | OPT_FIRMWARE_RESET = 1, |
31 | }opt_rst_type_e; | 33 | }; |
32 | 34 | ||
33 | void firmware_init_param(struct net_device *dev) | 35 | void firmware_init_param(struct net_device *dev) |
34 | { | 36 | { |
35 | struct r8192_priv *priv = ieee80211_priv(dev); | 37 | struct r8192_priv *priv = ieee80211_priv(dev); |
36 | rt_firmware *pfirmware = priv->pFirmware; | 38 | rt_firmware *pfirmware = priv->pFirmware; |
37 | 39 | ||
38 | pfirmware->cmdpacket_frag_thresold = GET_COMMAND_PACKET_FRAG_THRESHOLD(MAX_TRANSMIT_BUFFER_SIZE); | 40 | pfirmware->cmdpacket_frag_thresold = |
41 | GET_COMMAND_PACKET_FRAG_THRESHOLD(MAX_TRANSMIT_BUFFER_SIZE); | ||
39 | } | 42 | } |
40 | 43 | ||
41 | /* | 44 | /* |
42 | * segment the img and use the ptr and length to remember info on each segment | 45 | * segment the img and use the ptr and length to remember info on each segment |
43 | * | ||
44 | */ | 46 | */ |
45 | static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address, u32 buffer_len) | 47 | static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address, |
48 | u32 buffer_len) | ||
46 | { | 49 | { |
47 | struct r8192_priv *priv = ieee80211_priv(dev); | 50 | struct r8192_priv *priv = ieee80211_priv(dev); |
48 | bool rt_status = true; | 51 | bool rt_status = true; |
49 | u16 frag_threshold; | 52 | u16 frag_threshold; |
50 | u16 frag_length, frag_offset = 0; | 53 | u16 frag_length, frag_offset = 0; |
51 | //u16 total_size; | ||
52 | int i; | 54 | int i; |
53 | 55 | ||
54 | rt_firmware *pfirmware = priv->pFirmware; | 56 | rt_firmware *pfirmware = priv->pFirmware; |
@@ -58,83 +60,83 @@ static bool fw_download_code(struct net_device *dev, u8 *code_virtual_address, u | |||
58 | u8 bLastIniPkt; | 60 | u8 bLastIniPkt; |
59 | 61 | ||
60 | firmware_init_param(dev); | 62 | firmware_init_param(dev); |
61 | //Fragmentation might be required | 63 | |
64 | /* Fragmentation might be required */ | ||
62 | frag_threshold = pfirmware->cmdpacket_frag_thresold; | 65 | frag_threshold = pfirmware->cmdpacket_frag_thresold; |
63 | do { | 66 | do { |
64 | if((buffer_len - frag_offset) > frag_threshold) { | 67 | if ((buffer_len - frag_offset) > frag_threshold) { |
65 | frag_length = frag_threshold ; | 68 | frag_length = frag_threshold ; |
66 | bLastIniPkt = 0; | 69 | bLastIniPkt = 0; |
67 | |||
68 | } else { | 70 | } else { |
69 | frag_length = buffer_len - frag_offset; | 71 | frag_length = buffer_len - frag_offset; |
70 | bLastIniPkt = 1; | 72 | bLastIniPkt = 1; |
71 | |||
72 | } | 73 | } |
73 | 74 | ||
74 | /* Allocate skb buffer to contain firmware info and tx descriptor info | 75 | /* |
75 | * add 4 to avoid packet appending overflow. | 76 | * Allocate skb buffer to contain firmware info and tx |
76 | * */ | 77 | * descriptor info add 4 to avoid packet appending overflow. |
77 | //skb = dev_alloc_skb(USB_HWDESC_HEADER_LEN + frag_length + 4); | 78 | */ |
78 | skb = dev_alloc_skb(frag_length + 4); | 79 | skb = dev_alloc_skb(frag_length + 4); |
79 | memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); | 80 | memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev)); |
80 | tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE); | 81 | tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); |
81 | tcb_desc->queue_index = TXCMD_QUEUE; | 82 | tcb_desc->queue_index = TXCMD_QUEUE; |
82 | tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_INIT; | 83 | tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_INIT; |
83 | tcb_desc->bLastIniPkt = bLastIniPkt; | 84 | tcb_desc->bLastIniPkt = bLastIniPkt; |
84 | 85 | ||
85 | //skb_reserve(skb, USB_HWDESC_HEADER_LEN); | ||
86 | seg_ptr = skb->data; | 86 | seg_ptr = skb->data; |
87 | |||
87 | /* | 88 | /* |
88 | * Transform from little endian to big endian | 89 | * Transform from little endian to big endian and pending zero |
89 | * and pending zero | ||
90 | */ | 90 | */ |
91 | for(i=0 ; i < frag_length; i+=4) { | 91 | for (i = 0; i < frag_length; i += 4) { |
92 | *seg_ptr++ = ((i+0)<frag_length)?code_virtual_address[i+3]:0; | 92 | *seg_ptr++ = ((i+0) < frag_length) ? code_virtual_address[i+3] : 0; |
93 | *seg_ptr++ = ((i+1)<frag_length)?code_virtual_address[i+2]:0; | 93 | *seg_ptr++ = ((i+1) < frag_length) ? code_virtual_address[i+2] : 0; |
94 | *seg_ptr++ = ((i+2)<frag_length)?code_virtual_address[i+1]:0; | 94 | *seg_ptr++ = ((i+2) < frag_length) ? code_virtual_address[i+1] : 0; |
95 | *seg_ptr++ = ((i+3)<frag_length)?code_virtual_address[i+0]:0; | 95 | *seg_ptr++ = ((i+3) < frag_length) ? code_virtual_address[i+0] : 0; |
96 | } | 96 | } |
97 | tcb_desc->txbuf_size= (u16)i; | 97 | tcb_desc->txbuf_size = (u16)i; |
98 | skb_put(skb, i); | 98 | skb_put(skb, i); |
99 | priv->ieee80211->softmac_hard_start_xmit(skb,dev); | 99 | priv->ieee80211->softmac_hard_start_xmit(skb, dev); |
100 | 100 | ||
101 | code_virtual_address += frag_length; | 101 | code_virtual_address += frag_length; |
102 | frag_offset += frag_length; | 102 | frag_offset += frag_length; |
103 | 103 | ||
104 | }while(frag_offset < buffer_len); | 104 | } while (frag_offset < buffer_len); |
105 | 105 | ||
106 | return rt_status; | 106 | return rt_status; |
107 | } | 107 | } |
108 | 108 | ||
109 | //----------------------------------------------------------------------------- | 109 | /* |
110 | // Procedure: Check whether main code is download OK. If OK, turn on CPU | 110 | * Procedure: Check whether main code is download OK. If OK, turn on CPU |
111 | // | 111 | * |
112 | // Description: CPU register locates in different page against general register. | 112 | * Description: CPU register locates in different page against general |
113 | // Switch to CPU register in the begin and switch back before return | 113 | * register. Switch to CPU register in the begin and switch |
114 | // | 114 | * back before return |
115 | // | 115 | * |
116 | // Arguments: The pointer of the adapter | 116 | * Arguments: The pointer of the adapter |
117 | // | 117 | * |
118 | // Returns: | 118 | * Returns: |
119 | // NDIS_STATUS_FAILURE - the following initialization process should be terminated | 119 | * NDIS_STATUS_FAILURE - the following initialization process should be |
120 | // NDIS_STATUS_SUCCESS - if firmware initialization process success | 120 | * terminated |
121 | //----------------------------------------------------------------------------- | 121 | * NDIS_STATUS_SUCCESS - if firmware initialization process success |
122 | */ | ||
122 | static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev) | 123 | static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev) |
123 | { | 124 | { |
124 | bool rt_status = true; | 125 | bool rt_status = true; |
125 | int check_putcodeOK_time = 200000, check_bootOk_time = 200000; | 126 | int check_putcodeOK_time = 200000; |
126 | u32 CPU_status = 0; | 127 | int check_bootOk_time = 200000; |
128 | u32 CPU_status = 0; | ||
127 | 129 | ||
128 | /* Check whether put code OK */ | 130 | /* Check whether put code OK */ |
129 | do { | 131 | do { |
130 | CPU_status = read_nic_dword(dev, CPU_GEN); | 132 | CPU_status = read_nic_dword(dev, CPU_GEN); |
131 | 133 | ||
132 | if(CPU_status&CPU_GEN_PUT_CODE_OK) | 134 | if (CPU_status & CPU_GEN_PUT_CODE_OK) |
133 | break; | 135 | break; |
134 | 136 | ||
135 | }while(check_putcodeOK_time--); | 137 | } while (check_putcodeOK_time--); |
136 | 138 | ||
137 | if(!(CPU_status&CPU_GEN_PUT_CODE_OK)) { | 139 | if (!(CPU_status & CPU_GEN_PUT_CODE_OK)) { |
138 | RT_TRACE(COMP_ERR, "Download Firmware: Put code fail!\n"); | 140 | RT_TRACE(COMP_ERR, "Download Firmware: Put code fail!\n"); |
139 | goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; | 141 | goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; |
140 | } else { | 142 | } else { |
@@ -143,27 +145,27 @@ static bool CPUcheck_maincodeok_turnonCPU(struct net_device *dev) | |||
143 | 145 | ||
144 | /* Turn On CPU */ | 146 | /* Turn On CPU */ |
145 | CPU_status = read_nic_dword(dev, CPU_GEN); | 147 | CPU_status = read_nic_dword(dev, CPU_GEN); |
146 | write_nic_byte(dev, CPU_GEN, (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff)); | 148 | write_nic_byte(dev, CPU_GEN, |
149 | (u8)((CPU_status | CPU_GEN_PWR_STB_CPU) & 0xff)); | ||
147 | mdelay(1); | 150 | mdelay(1); |
148 | 151 | ||
149 | /* Check whether CPU boot OK */ | 152 | /* Check whether CPU boot OK */ |
150 | do { | 153 | do { |
151 | CPU_status = read_nic_dword(dev, CPU_GEN); | 154 | CPU_status = read_nic_dword(dev, CPU_GEN); |
152 | 155 | ||
153 | if(CPU_status&CPU_GEN_BOOT_RDY) | 156 | if (CPU_status & CPU_GEN_BOOT_RDY) |
154 | break; | 157 | break; |
155 | }while(check_bootOk_time--); | 158 | } while (check_bootOk_time--); |
156 | 159 | ||
157 | if(!(CPU_status&CPU_GEN_BOOT_RDY)) { | 160 | if (!(CPU_status & CPU_GEN_BOOT_RDY)) |
158 | goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; | 161 | goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; |
159 | } else { | 162 | else |
160 | RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n"); | 163 | RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n"); |
161 | } | ||
162 | 164 | ||
163 | return rt_status; | 165 | return rt_status; |
164 | 166 | ||
165 | CPUCheckMainCodeOKAndTurnOnCPU_Fail: | 167 | CPUCheckMainCodeOKAndTurnOnCPU_Fail: |
166 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __FUNCTION__); | 168 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __func__); |
167 | rt_status = FALSE; | 169 | rt_status = FALSE; |
168 | return rt_status; | 170 | return rt_status; |
169 | } | 171 | } |
@@ -179,12 +181,12 @@ static bool CPUcheck_firmware_ready(struct net_device *dev) | |||
179 | do { | 181 | do { |
180 | CPU_status = read_nic_dword(dev, CPU_GEN); | 182 | CPU_status = read_nic_dword(dev, CPU_GEN); |
181 | 183 | ||
182 | if(CPU_status&CPU_GEN_FIRM_RDY) | 184 | if (CPU_status & CPU_GEN_FIRM_RDY) |
183 | break; | 185 | break; |
184 | 186 | ||
185 | }while(check_time--); | 187 | } while (check_time--); |
186 | 188 | ||
187 | if(!(CPU_status&CPU_GEN_FIRM_RDY)) | 189 | if (!(CPU_status & CPU_GEN_FIRM_RDY)) |
188 | goto CPUCheckFirmwareReady_Fail; | 190 | goto CPUCheckFirmwareReady_Fail; |
189 | else | 191 | else |
190 | RT_TRACE(COMP_FIRMWARE, "Download Firmware: Firmware ready!\n"); | 192 | RT_TRACE(COMP_FIRMWARE, "Download Firmware: Firmware ready!\n"); |
@@ -192,7 +194,7 @@ static bool CPUcheck_firmware_ready(struct net_device *dev) | |||
192 | return rt_status; | 194 | return rt_status; |
193 | 195 | ||
194 | CPUCheckFirmwareReady_Fail: | 196 | CPUCheckFirmwareReady_Fail: |
195 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __FUNCTION__); | 197 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __func__); |
196 | rt_status = false; | 198 | rt_status = false; |
197 | return rt_status; | 199 | return rt_status; |
198 | 200 | ||
@@ -205,85 +207,71 @@ bool init_firmware(struct net_device *dev) | |||
205 | u32 file_length = 0; | 207 | u32 file_length = 0; |
206 | u8 *mapped_file = NULL; | 208 | u8 *mapped_file = NULL; |
207 | u32 init_step = 0; | 209 | u32 init_step = 0; |
208 | opt_rst_type_e rst_opt = OPT_SYSTEM_RESET; | 210 | enum opt_rst_type rst_opt = OPT_SYSTEM_RESET; |
209 | firmware_init_step_e starting_state = FW_INIT_STEP0_BOOT; | 211 | enum firmware_init_step starting_state = FW_INIT_STEP0_BOOT; |
210 | 212 | ||
211 | rt_firmware *pfirmware = priv->pFirmware; | 213 | rt_firmware *pfirmware = priv->pFirmware; |
212 | const struct firmware *fw_entry; | 214 | const struct firmware *fw_entry; |
213 | const char *fw_name[3] = { "RTL8192E/boot.img", | 215 | const char *fw_name[3] = { "RTL8192E/boot.img", |
214 | "RTL8192E/main.img", | 216 | "RTL8192E/main.img", |
215 | "RTL8192E/data.img"}; | 217 | "RTL8192E/data.img"}; |
216 | int rc; | 218 | int rc; |
217 | 219 | ||
218 | RT_TRACE(COMP_FIRMWARE, " PlatformInitFirmware()==>\n"); | 220 | RT_TRACE(COMP_FIRMWARE, " PlatformInitFirmware()==>\n"); |
219 | 221 | ||
220 | if (pfirmware->firmware_status == FW_STATUS_0_INIT ) { | 222 | if (pfirmware->firmware_status == FW_STATUS_0_INIT) { |
221 | /* it is called by reset */ | 223 | /* it is called by reset */ |
222 | rst_opt = OPT_SYSTEM_RESET; | 224 | rst_opt = OPT_SYSTEM_RESET; |
223 | starting_state = FW_INIT_STEP0_BOOT; | 225 | starting_state = FW_INIT_STEP0_BOOT; |
224 | // TODO: system reset | 226 | /* TODO: system reset */ |
225 | 227 | ||
226 | }else if(pfirmware->firmware_status == FW_STATUS_5_READY) { | 228 | } else if (pfirmware->firmware_status == FW_STATUS_5_READY) { |
227 | /* it is called by Initialize */ | 229 | /* it is called by Initialize */ |
228 | rst_opt = OPT_FIRMWARE_RESET; | 230 | rst_opt = OPT_FIRMWARE_RESET; |
229 | starting_state = FW_INIT_STEP2_DATA; | 231 | starting_state = FW_INIT_STEP2_DATA; |
230 | }else { | 232 | } else { |
231 | RT_TRACE(COMP_FIRMWARE, "PlatformInitFirmware: undefined firmware state\n"); | 233 | RT_TRACE(COMP_FIRMWARE, |
234 | "PlatformInitFirmware: undefined firmware state\n"); | ||
232 | } | 235 | } |
233 | 236 | ||
234 | /* | 237 | /* |
235 | * Download boot, main, and data image for System reset. | 238 | * Download boot, main, and data image for System reset. |
236 | * Download data image for firmware reseta | 239 | * Download data image for firmware reseta |
237 | */ | 240 | */ |
238 | priv->firmware_source = FW_SOURCE_IMG_FILE; | 241 | for (init_step = starting_state; init_step <= FW_INIT_STEP2_DATA; init_step++) { |
239 | for(init_step = starting_state; init_step <= FW_INIT_STEP2_DATA; init_step++) { | ||
240 | /* | 242 | /* |
241 | * Open Image file, and map file to contineous memory if open file success. | 243 | * Open Image file, and map file to contineous memory if open file success. |
242 | * or read image file from array. Default load from IMG file | 244 | * or read image file from array. Default load from IMG file |
243 | */ | 245 | */ |
244 | if(rst_opt == OPT_SYSTEM_RESET) { | 246 | if (rst_opt == OPT_SYSTEM_RESET) { |
245 | switch(priv->firmware_source) { | 247 | if (pfirmware->firmware_buf_size[init_step] == 0) { |
246 | case FW_SOURCE_IMG_FILE: | 248 | rc = request_firmware(&fw_entry, fw_name[init_step], &priv->pdev->dev); |
247 | { | 249 | if (rc < 0) { |
248 | if(pfirmware->firmware_buf_size[init_step] == 0) { | 250 | RT_TRACE(COMP_FIRMWARE, "request firmware fail!\n"); |
249 | rc = request_firmware(&fw_entry, fw_name[init_step],&priv->pdev->dev); | 251 | goto download_firmware_fail; |
250 | if(rc < 0 ) { | 252 | } |
251 | RT_TRACE(COMP_FIRMWARE, "request firmware fail!\n"); | 253 | |
252 | goto download_firmware_fail; | 254 | if (fw_entry->size > sizeof(pfirmware->firmware_buf[init_step])) { |
253 | } | 255 | RT_TRACE(COMP_FIRMWARE, "img file size exceed the container buffer fail!\n"); |
254 | 256 | goto download_firmware_fail; | |
255 | if(fw_entry->size > sizeof(pfirmware->firmware_buf[init_step])) { | ||
256 | RT_TRACE(COMP_FIRMWARE, "img file size exceed the container buffer fail!\n"); | ||
257 | goto download_firmware_fail; | ||
258 | } | ||
259 | |||
260 | if(init_step != FW_INIT_STEP1_MAIN) { | ||
261 | memcpy(pfirmware->firmware_buf[init_step],fw_entry->data,fw_entry->size); | ||
262 | pfirmware->firmware_buf_size[init_step] = fw_entry->size; | ||
263 | |||
264 | } else { | ||
265 | memset(pfirmware->firmware_buf[init_step],0,128); | ||
266 | memcpy(&pfirmware->firmware_buf[init_step][128],fw_entry->data,fw_entry->size); | ||
267 | //mapped_file = pfirmware->firmware_buf[init_step]; | ||
268 | pfirmware->firmware_buf_size[init_step] = fw_entry->size+128; | ||
269 | //file_length = fw_entry->size + 128; | ||
270 | } | ||
271 | //pfirmware->firmware_buf_size = file_length; | ||
272 | |||
273 | if(rst_opt == OPT_SYSTEM_RESET) { | ||
274 | release_firmware(fw_entry); | ||
275 | } | ||
276 | } | ||
277 | mapped_file = pfirmware->firmware_buf[init_step]; | ||
278 | file_length = pfirmware->firmware_buf_size[init_step]; | ||
279 | break; | ||
280 | } | 257 | } |
281 | default: | ||
282 | break; | ||
283 | } | ||
284 | 258 | ||
259 | if (init_step != FW_INIT_STEP1_MAIN) { | ||
260 | memcpy(pfirmware->firmware_buf[init_step], fw_entry->data, fw_entry->size); | ||
261 | pfirmware->firmware_buf_size[init_step] = fw_entry->size; | ||
285 | 262 | ||
286 | }else if(rst_opt == OPT_FIRMWARE_RESET ) { | 263 | } else { |
264 | memset(pfirmware->firmware_buf[init_step], 0, 128); | ||
265 | memcpy(&pfirmware->firmware_buf[init_step][128], fw_entry->data, fw_entry->size); | ||
266 | pfirmware->firmware_buf_size[init_step] = fw_entry->size+128; | ||
267 | } | ||
268 | |||
269 | if (rst_opt == OPT_SYSTEM_RESET) | ||
270 | release_firmware(fw_entry); | ||
271 | } | ||
272 | mapped_file = pfirmware->firmware_buf[init_step]; | ||
273 | file_length = pfirmware->firmware_buf_size[init_step]; | ||
274 | } else if (rst_opt == OPT_FIRMWARE_RESET) { | ||
287 | /* we only need to download data.img here */ | 275 | /* we only need to download data.img here */ |
288 | mapped_file = pfirmware->firmware_buf[init_step]; | 276 | mapped_file = pfirmware->firmware_buf[init_step]; |
289 | file_length = pfirmware->firmware_buf_size[init_step]; | 277 | file_length = pfirmware->firmware_buf_size[init_step]; |
@@ -291,68 +279,71 @@ bool init_firmware(struct net_device *dev) | |||
291 | 279 | ||
292 | /* Download image file */ | 280 | /* Download image file */ |
293 | /* The firmware download process is just as following, | 281 | /* The firmware download process is just as following, |
294 | * 1. that is each packet will be segmented and inserted to the wait queue. | 282 | * 1. that is each packet will be segmented and inserted to the |
283 | * wait queue. | ||
295 | * 2. each packet segment will be put in the skb_buff packet. | 284 | * 2. each packet segment will be put in the skb_buff packet. |
296 | * 3. each skb_buff packet data content will already include the firmware info | 285 | * 3. each skb_buff packet data content will already include |
297 | * and Tx descriptor info | 286 | * the firmware info and Tx descriptor info |
298 | * */ | 287 | */ |
299 | rt_status = fw_download_code(dev,mapped_file,file_length); | 288 | rt_status = fw_download_code(dev, mapped_file, file_length); |
300 | if(rt_status != TRUE) { | 289 | if (rt_status != TRUE) |
301 | goto download_firmware_fail; | 290 | goto download_firmware_fail; |
302 | } | ||
303 | 291 | ||
304 | switch(init_step) { | 292 | switch (init_step) { |
305 | case FW_INIT_STEP0_BOOT: | 293 | case FW_INIT_STEP0_BOOT: |
306 | /* Download boot | 294 | /* Download boot |
307 | * initialize command descriptor. | 295 | * initialize command descriptor. |
308 | * will set polling bit when firmware code is also configured | 296 | * will set polling bit when firmware code is also |
309 | */ | 297 | * configured |
310 | pfirmware->firmware_status = FW_STATUS_1_MOVE_BOOT_CODE; | 298 | */ |
311 | //mdelay(1000); | 299 | pfirmware->firmware_status = FW_STATUS_1_MOVE_BOOT_CODE; |
312 | /* | 300 | /* mdelay(1000); */ |
313 | * To initialize IMEM, CPU move code from 0x80000080, | 301 | /* |
314 | * hence, we send 0x80 byte packet | 302 | * To initialize IMEM, CPU move code from 0x80000080, |
315 | */ | 303 | * hence, we send 0x80 byte packet |
316 | break; | 304 | */ |
317 | 305 | break; | |
318 | case FW_INIT_STEP1_MAIN: | ||
319 | /* Download firmware code. Wait until Boot Ready and Turn on CPU */ | ||
320 | pfirmware->firmware_status = FW_STATUS_2_MOVE_MAIN_CODE; | ||
321 | |||
322 | /* Check Put Code OK and Turn On CPU */ | ||
323 | rt_status = CPUcheck_maincodeok_turnonCPU(dev); | ||
324 | if(rt_status != TRUE) { | ||
325 | RT_TRACE(COMP_FIRMWARE, "CPUcheck_maincodeok_turnonCPU fail!\n"); | ||
326 | goto download_firmware_fail; | ||
327 | } | ||
328 | 306 | ||
329 | pfirmware->firmware_status = FW_STATUS_3_TURNON_CPU; | 307 | case FW_INIT_STEP1_MAIN: |
330 | break; | 308 | /* Download firmware code. |
309 | * Wait until Boot Ready and Turn on CPU */ | ||
310 | pfirmware->firmware_status = FW_STATUS_2_MOVE_MAIN_CODE; | ||
311 | |||
312 | /* Check Put Code OK and Turn On CPU */ | ||
313 | rt_status = CPUcheck_maincodeok_turnonCPU(dev); | ||
314 | if (rt_status != TRUE) { | ||
315 | RT_TRACE(COMP_FIRMWARE, | ||
316 | "CPUcheck_maincodeok_turnonCPU fail!\n"); | ||
317 | goto download_firmware_fail; | ||
318 | } | ||
331 | 319 | ||
332 | case FW_INIT_STEP2_DATA: | 320 | pfirmware->firmware_status = FW_STATUS_3_TURNON_CPU; |
333 | /* download initial data code */ | 321 | break; |
334 | pfirmware->firmware_status = FW_STATUS_4_MOVE_DATA_CODE; | ||
335 | mdelay(1); | ||
336 | 322 | ||
337 | rt_status = CPUcheck_firmware_ready(dev); | 323 | case FW_INIT_STEP2_DATA: |
338 | if(rt_status != TRUE) { | 324 | /* download initial data code */ |
339 | RT_TRACE(COMP_FIRMWARE, "CPUcheck_firmware_ready fail(%d)!\n",rt_status); | 325 | pfirmware->firmware_status = FW_STATUS_4_MOVE_DATA_CODE; |
340 | goto download_firmware_fail; | 326 | mdelay(1); |
341 | } | 327 | |
328 | rt_status = CPUcheck_firmware_ready(dev); | ||
329 | if (rt_status != TRUE) { | ||
330 | RT_TRACE(COMP_FIRMWARE, | ||
331 | "CPUcheck_firmware_ready fail(%d)!\n", | ||
332 | rt_status); | ||
333 | goto download_firmware_fail; | ||
334 | } | ||
342 | 335 | ||
343 | /* wait until data code is initialized ready.*/ | 336 | /* wait until data code is initialized ready.*/ |
344 | pfirmware->firmware_status = FW_STATUS_5_READY; | 337 | pfirmware->firmware_status = FW_STATUS_5_READY; |
345 | break; | 338 | break; |
346 | } | 339 | } |
347 | } | 340 | } |
348 | 341 | ||
349 | RT_TRACE(COMP_FIRMWARE, "Firmware Download Success\n"); | 342 | RT_TRACE(COMP_FIRMWARE, "Firmware Download Success\n"); |
350 | //assert(pfirmware->firmware_status == FW_STATUS_5_READY, ("Firmware Download Fail\n")); | ||
351 | |||
352 | return rt_status; | 343 | return rt_status; |
353 | 344 | ||
354 | download_firmware_fail: | 345 | download_firmware_fail: |
355 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __FUNCTION__); | 346 | RT_TRACE(COMP_ERR, "ERR in %s()\n", __func__); |
356 | rt_status = FALSE; | 347 | rt_status = FALSE; |
357 | return rt_status; | 348 | return rt_status; |
358 | 349 | ||