19,504
社区成员
发帖
与我相关
我的任务
分享
static int sbi_download_wlan_fw_image(const u8 *firmware, int firmwarelen)
{
int ret,j, index = 0;
u16 dlimage[1024];
u16 len;
u32 cnt=0;
DWORD dwTick1,dwTick2;
int tmp=0;
/* Wait initially for the first non-zero value */
do
{
//NKDbgPrintfW(TEXT ("spi_ReadRegister(SCRATCH_1_REG, &len);\n"));
tmp++;
NdisStallExecution(10); // stall for 10 us
spi_ReadRegister(SCRATCH_1_REG, &len);
// NKDbgPrintfW(TEXT ("SCRATCH_1_REG)len = %x\n"),len);
} while(!len);
dwTick1 = GetTickCount();
// NKDbgPrintfW(TEXT ("(dwTick1 = %x\n",dwT));
for(;;) {
///memset(dlimage, 0, SPI_FW_DOWNLOAD_PKTCNT);
memset(dlimage, 0, sizeof(dlimage));
if(!wait_for_hostintstatus()) {
NKDbgPrintfW(TEXT ("Firmware download died ......\n"));
return -1;
}
spi_ReadRegister(SCRATCH_1_REG, &len);
ShortDelays(100);
// NKDbgPrintfW(TEXT ("len = %d\n"),len);
cnt += len;
if(!len) {
NKDbgPrintfW(TEXT ("\nFirmware download complete \n"));
break;
}
if(len & 1) {
//NKDbgPrintfW(TEXT ("CRC Error\n"));
len &= ~1;
} else {
////NKDbgPrintfW(TEXT ("."));
}
for(j=0;j<(len/2);++j) {
dlimage[j] = firmware[index++];
dlimage[j] |= (firmware[index++] << 8);
}
// NKDbgPrintfW(TEXT ("before download, Tick: %d\n"), GetTickCount());
//gspi_write_data_direct(dlimage, CMD_RDWRPORT_REG, len);
gspi_write_data_direct(dlimage, CMD_RDWRPORT_REG, len);
//NKDbgPrintfW(TEXT ("After download, Tick: %d\r\n"), GetTickCount());
ShortDelays(100);
spi_WriteRegister(HOST_INT_STATUS_REG, 0x0000);
ShortDelays(100);
spi_WriteRegister(CARD_INT_CAUSE_REG, CIC_CmdDnLdOvr);
ShortDelays(100);
}
NKDbgPrintfW(TEXT ("Firmware Image of Size %d bytes downloaded, cnt %d\n"), firmwarelen, cnt);
dwTick2 = GetTickCount();
// NKDbgPrintfW(TEXT ("Downloading performance : Tick1 =%d,Tick2=%d,Diff=%d,Total = %d bits/sec\r\n"), dwTick1,dwTick2,dwTick2-dwTick1,(firmwarelen*1000*8)/(dwTick2-dwTick1));
// NKDbgPrintfW(TEXT("Firmware Image of Size %d bytes downloaded, cnt %d\r\n!!"),firmwarelen,cnt);
ret = 0;
return ret;
}