VOID EnterSDCardFilename(OAL_BLMENU_ITEM *pMenu) { UNREFERENCED_PARAMETER(pMenu); OALLog(L"\r\n Type new filename (8.3 format) :"); OALBLMenuReadLine(g_bootCfg.filename, dimof(g_bootCfg.filename)); }
VOID OALBLMenuSetDeviceId(OAL_BLMENU_ITEM * pMenu) { WCHAR deviceId[OAL_KITL_ID_SIZE]; LPSTR pDeviceId = pMenu->pParam1; UINT i; memset(deviceId, 0, sizeof(deviceId)); OALLog(L" Enter Device Id (* = auto, actual '%S'): ", DeviceId(pDeviceId)); // Read input line if (OALBLMenuReadLine(deviceId, dimof(deviceId)) == 0) goto cleanUp; // Convert unicode to one-byte character string if (deviceId[0] == L'*' && deviceId[1] == L'\0') { memset(pDeviceId, 0, OAL_KITL_ID_SIZE); } else { for (i = 0; i < OAL_KITL_ID_SIZE; i++) { pDeviceId[i] = (UCHAR)deviceId[i]; } } OALLog(L" Device Id set to '%S'\r\n", DeviceId(pDeviceId)); cleanUp: ; }
VOID SetDeviceID( OAL_BLMENU_ITEM *pMenu ) { WCHAR szInputLine[16]; UNREFERENCED_PARAMETER(pMenu); OALLog( L" Current Device ID: %d\r\n", g_bootCfg.deviceID ); OALLog(L"\r\n New Device ID: "); if (OALBLMenuReadLine(szInputLine, dimof(szInputLine)) == 0) { goto cleanUp; } // Get device ID g_bootCfg.deviceID = OALStringToUINT32(szInputLine); cleanUp: return; }
VOID ChangeBootTo(OAL_BLMENU_ITEM *pMenu) { WCHAR buf[MAX_PATH]; OALLog(L"Enter new boot timeout (Seconds): "); if(OALBLMenuReadLine(buf, dimof(buf))){ g_bootCfg.boot_to = decStrToVal(buf); } }
VOID SetBadBlock(OAL_BLMENU_ITEM *pMenu) { HANDLE hFMD = NULL; PCI_REG_INFO regInfo; FlashInfo flashInfo; BLOCK_ID blockId; WCHAR szInputLine[16]; UNREFERENCED_PARAMETER(pMenu); // Open FMD regInfo.MemBase.Reg[0] = g_ulFlashBase; hFMD = FMD_Init(NULL, ®Info, NULL); if (hFMD == NULL) { OALLog(L" Oops, can't open FMD driver\r\n"); goto cleanUp; } if (!FMD_GetInfo(&flashInfo)) { OALLog(L" Oops, can't get flash geometry info\r\n"); goto cleanUp; } OALLog(L"\r\n Block Number: "); if (OALBLMenuReadLine(szInputLine, dimof(szInputLine)) == 0) { goto cleanUp; } // Get sector number blockId = OALStringToUINT32(szInputLine); // Check sector number if (blockId >= flashInfo.dwNumBlocks) { OALLog(L" Oops, too big block number\r\n"); goto cleanUp; } FMD_SetBlockStatus(blockId, BLOCK_STATUS_BAD); OALLog(L"\r\n Done\r\n"); cleanUp: if (hFMD != NULL) { FMD_Deinit(hFMD); } return; }
VOID SelectBootDevice(OAL_BLMENU_ITEM *pMenu){ int i; WCHAR buf[MAX_PATH]; OALBLMenuSelectDevice(pMenu); if(g_bootCfg.bootDevLoc.LogicalLoc == SD_BASE){ // let user select image name OALLog(L"Enter image name(actual '%S'): ", g_bootCfg.binName); if(OALBLMenuReadLine(buf, dimof(buf))){ for(i = 0; buf[i] != 0; ++i){ g_bootCfg.binName[i] = (CHAR)buf[i]; } } } }
VOID OALBLMenuSetMacAddress(OAL_BLMENU_ITEM *pMenu) { LPCWSTR title = pMenu->pParam1; UINT16 *pMac = pMenu->pParam2; UINT16 mac[3]; WCHAR buffer[18]; // First check input parameters if (title == NULL || pMac == NULL) { OALMSG(OAL_ERROR, ( L"ERROR: OALBLMenuSetMacAddress: Invalid parameter\r\n" )); goto cleanUp; } // Get actual setting mac[0] = pMac[0]; mac[1] = pMac[1]; mac[2] = pMac[2]; // Print prompt OALLog( L" Enter %s MAC address (actual %s): ", title, OALKitlMACtoString(mac) ); // Read input line if (OALBLMenuReadLine(buffer, dimof(buffer)) == 0) goto cleanUp; // Convert string to MAC address if (!OALKitlStringToMAC(buffer, mac)) { OALLog(L" '%s' isn't valid MAC address\r\n", buffer); goto cleanUp; } // Print final MAC address OALLog(L" %s MAC address set to %s\r\n", title, OALKitlMACtoString(mac)); // Save new setting pMac[0] = mac[0]; pMac[1] = mac[1]; pMac[2] = mac[2]; cleanUp:; }
VOID OALBLMenuSetIpMask(OAL_BLMENU_ITEM *pMenu) { LPCWSTR title = pMenu->pParam1; UINT32 *pIp = pMenu->pParam2; UINT32 ip; WCHAR buffer[16]; // First check input parameters if (title == NULL || pIp == NULL) { OALMSG(OAL_ERROR, ( L"ERROR: OALBLMenuSetIpMask: Invalid parameters\r\n" )); goto cleanUp; } // Get actual value ip = *pIp; // Print prompt OALLog(L" Enter %s IP mask (actual %s): ", title, OALKitlIPtoString(ip)); // Read input line if (OALBLMenuReadLine(buffer, dimof(buffer)) == 0) goto cleanUp; // Convert string to MAC address ip = OALKitlStringToIP(buffer); if (ip == 0) { OALLog(L" '%s' isn't valid IP mask\r\n", buffer); goto cleanUp; } // Print final IP mask OALLog(L" %s IP mask set to %s\r\n", title, OALKitlIPtoString(ip)); // Save new setting *pIp = ip; cleanUp:; }
VOID DumpFlash(OAL_BLMENU_ITEM *pMenu) { HANDLE hFMD = NULL; PCI_REG_INFO regInfo; FlashInfo flashInfo; SectorInfo sectorInfo; SECTOR_ADDR sector; WCHAR szInputLine[16]; UINT8 buffer[2048], pOob[64]; UINT32 i, j; UNREFERENCED_PARAMETER(pMenu); // Open FMD regInfo.MemBase.Reg[0] = g_ulFlashBase; hFMD = FMD_Init(NULL, ®Info, NULL); if (hFMD == NULL) { OALLog(L" Oops, can't open FMD driver\r\n"); goto cleanUp; } if (!FMD_GetInfo(&flashInfo)) { OALLog(L" Oops, can't get flash geometry info\r\n"); goto cleanUp; } if (flashInfo.wDataBytesPerSector > sizeof(buffer)) { OALLog(L" Oops, sector size larger than my buffer\r\n"); goto cleanUp; } for(;;) { OALLog(L"\r\n Sector Number: "); if (OALBLMenuReadLine(szInputLine, dimof(szInputLine)) == 0) { break; } // Get sector number sector = OALStringToUINT32(szInputLine); // Check sector number if (sector > flashInfo.dwNumBlocks * flashInfo.wSectorsPerBlock) { OALLog(L" Oops, too big sector number\r\n"); continue; } if (!FMD_ReadSector(sector, buffer, §orInfo, 1)) { OALLog(L" Oops, sector read failed\r\n"); continue; } OALLog( L"\r\nSector %d (sector %d in block %d)\r\n", sector, sector%flashInfo.wSectorsPerBlock, sector/flashInfo.wSectorsPerBlock ); OALLog( L"Reserved1: %08x OEMReserved: %02x Bad: %02x Reserved2: %04x\r\n", sectorInfo.dwReserved1, sectorInfo.bOEMReserved, sectorInfo.bBadBlock, sectorInfo.wReserved2 ); for (i = 0; i < flashInfo.wDataBytesPerSector; i += 16) { OALLog(L"%04x ", i); for (j = i; j < i + 16 && j < flashInfo.wDataBytesPerSector; j++) { OALLog(L" %02x", buffer[j]); } OALLog(L" "); for (j = i; j < i + 16 && j < flashInfo.wDataBytesPerSector; j++) { if (buffer[j] >= ' ' && buffer[j] < 127) { OALLog(L"%c", buffer[j]); } else { OALLog(L"."); } } OALLog(L"\r\n"); } //dump OOB data if (!FMD_ReadSectorOOB(sector, pOob)) { OALLog(L" Oops, sector read failed\r\n"); continue; } for (i = 0; i < 64; i += 16) { OALLog(L"%04x ", i); for (j = i; j < i + 16 && j < 64; j++) { OALLog(L" %02x", pOob[j]); } OALLog(L"\r\n"); } } cleanUp: if (hFMD != NULL) { FMD_Deinit(hFMD); } return; }
VOID ReserveBlock(OAL_BLMENU_ITEM *pMenu) { WCHAR key; HANDLE hFMD = NULL; PCI_REG_INFO regInfo; FlashInfo flashInfo; BLOCK_ID firstblock, lastblock=0; WCHAR szInputLine[16]; UINT32 status; UNREFERENCED_PARAMETER(pMenu); OALLog(L"\r\n First Block Number: "); if (OALBLMenuReadLine(szInputLine, dimof(szInputLine)) == 0) { goto cleanUp; } // Get block number firstblock = OALStringToUINT32(szInputLine); OALLog(L"\r\n Last Block Number: "); if (OALBLMenuReadLine(szInputLine, dimof(szInputLine)) != 0) { // Get block number lastblock = OALStringToUINT32(szInputLine); } if (lastblock < firstblock) { lastblock=firstblock; } // Open FMD regInfo.MemBase.Reg[0] = g_ulFlashBase; hFMD = FMD_Init(NULL, ®Info, NULL); if (hFMD == NULL) { OALLog(L" Oops, can't open FMD driver\r\n"); goto cleanUp; } if (!FMD_GetInfo(&flashInfo)) { OALLog(L" Oops, can't get flash geometry info\r\n"); goto cleanUp; } if (lastblock >= flashInfo.dwNumBlocks) { OALLog(L" Oops, too big block number\r\n"); goto cleanUp; } OALLog(L" Do you want mark as reserved block %d-%d [-/y]? ", firstblock, lastblock); // Get key key = OALBLMenuReadKey(TRUE); OALLog(L"%c\r\n", key); // Depending on result if (key != L'y' && key != L'Y') { goto cleanUp; } while (firstblock<=lastblock) { // If block is bad, we have to offset it status = FMD_GetBlockStatus(firstblock); // Skip bad blocks if ((status & BLOCK_STATUS_BAD) != 0) { OALLog(L" Skip bad block %d\r\n", firstblock); // NOTE - this will cause a smaller number of blocks to actually be reserved... firstblock++; continue; } // Skip already reserved blocks if ((status & BLOCK_STATUS_RESERVED) != 0) { OALLog(L" Skip reserved block %d\r\n", firstblock); firstblock++; continue; } // Mark block as read-only & reserved if (!FMD_SetBlockStatus(firstblock, BLOCK_STATUS_READONLY|BLOCK_STATUS_RESERVED)) { OALLog(L" Oops, can't mark block %d - as reserved\r\n", firstblock); } firstblock++; OALLog(L"."); } OALLog(L" Done\r\n"); cleanUp: if (hFMD != NULL) FMD_Deinit(hFMD); return; }