📄 ixnpedlimagemgr.c
字号:
* * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */IX_STATUSixNpeDlImageMgrLatestImageExtract (IxNpeDlImageId *imageId){ UINT32 imageCount = 0; UINT32 rawImageId; IxNpeDlImageId formattedImageId; IX_STATUS status = IX_FAIL; IxNpeDlImageMgrImageLibraryHeader *header; IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT, "Entering ixNpeDlImageMgrLatestImageExtract\n"); header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary; if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary)) { /* for each image entry in the image library header ... */ while (header->entry[imageCount].eohMarker != IX_NPEDL_IMAGEMGR_END_OF_HEADER) { rawImageId = header->entry[imageCount].image.id; ixNpeDlImageMgrImageIdFormat (rawImageId, &formattedImageId); /* * if a match for the npe Id and functionality Id of the imageId is * found in the image library header... */ if(ixNpeDlImageMgrNpeFunctionIdCompare(imageId, &formattedImageId)) { if(imageId->major <= formattedImageId.major) { if(imageId->minor < formattedImageId.minor) { imageId->minor = formattedImageId.minor; } imageId->major = formattedImageId.major; } status = IX_SUCCESS; } imageCount++; } if (status != IX_SUCCESS) { IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrLatestImageExtract: " "imageId not found in image library header\n"); ixNpeDlImageMgrStats.imageIdNotFound++; } } else { IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrLatestImageGet: " "invalid signature in image library\n"); } IX_NPEDL_TRACE1 (IX_NPEDL_FN_ENTRY_EXIT, "Exiting ixNpeDlImageMgrLatestImageGet: status = %d\n", status); return status;}/* * Function definition: ixNpeDlImageMgrSignatureCheck * * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */PRIVATE BOOLixNpeDlImageMgrSignatureCheck (UINT32 *microCodeImageLibrary){ IxNpeDlImageMgrImageLibraryHeader *header = (IxNpeDlImageMgrImageLibraryHeader *) microCodeImageLibrary; BOOL result = TRUE; if (header->signature != IX_NPEDL_IMAGEMGR_SIGNATURE) { result = FALSE; ixNpeDlImageMgrStats.invalidSignature++; } return result;}/* * Function definition: ixNpeDlImageMgrImageIdFormat * * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */PRIVATE voidixNpeDlImageMgrImageIdFormat ( UINT32 rawImageId, IxNpeDlImageId *imageId){ imageId->npeId = (rawImageId >> IX_NPEDL_IMAGEID_NPEID_OFFSET) & IX_NPEDL_NPEIMAGE_FIELD_MASK; imageId->functionalityId = (rawImageId >> IX_NPEDL_IMAGEID_FUNCTIONID_OFFSET) & IX_NPEDL_NPEIMAGE_FIELD_MASK; imageId->major = (rawImageId >> IX_NPEDL_IMAGEID_MAJOR_OFFSET) & IX_NPEDL_NPEIMAGE_FIELD_MASK; imageId->minor = (rawImageId >> IX_NPEDL_IMAGEID_MINOR_OFFSET) & IX_NPEDL_NPEIMAGE_FIELD_MASK;}/* * Function definition: ixNpeDlImageMgrImageIdCompare * * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */PRIVATE BOOLixNpeDlImageMgrImageIdCompare ( IxNpeDlImageId *imageIdA, IxNpeDlImageId *imageIdB){ if ((imageIdA->npeId == imageIdB->npeId) && (imageIdA->functionalityId == imageIdB->functionalityId) && (imageIdA->major == imageIdB->major) && (imageIdA->minor == imageIdB->minor)) { return TRUE; } else { return FALSE; }}/* * Function definition: ixNpeDlImageMgrNpeFunctionIdCompare * * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */PRIVATE BOOLixNpeDlImageMgrNpeFunctionIdCompare ( IxNpeDlImageId *imageIdA, IxNpeDlImageId *imageIdB){ if ((imageIdA->npeId == imageIdB->npeId) && (imageIdA->functionalityId == imageIdB->functionalityId)) { return TRUE; } else { return FALSE; }}/* * Function definition: ixNpeDlImageMgrStatsShow */voidixNpeDlImageMgrStatsShow (void){ ixOsalLog (IX_OSAL_LOG_LVL_USER, IX_OSAL_LOG_DEV_STDOUT, "\nixNpeDlImageMgrStatsShow:\n" "\tInvalid Image Signatures: %u\n" "\tImage Id List capacity too small: %u\n" "\tImage Id not found: %u\n\n", ixNpeDlImageMgrStats.invalidSignature, ixNpeDlImageMgrStats.imageIdListOverflow, ixNpeDlImageMgrStats.imageIdNotFound, 0,0,0);}/* * Function definition: ixNpeDlImageMgrStatsReset */voidixNpeDlImageMgrStatsReset (void){ ixNpeDlImageMgrStats.invalidSignature = 0; ixNpeDlImageMgrStats.imageIdListOverflow = 0; ixNpeDlImageMgrStats.imageIdNotFound = 0;}/* * Function definition: ixNpeDlImageMgrImageFind_legacy * * FOR BACKWARD-COMPATIBILITY WITH OLD NPE IMAGE LIBRARY FORMAT * AND/OR LEGACY API FUNCTIONS. TO BE DEPRECATED IN A FUTURE RELEASE */PRIVATE IX_STATUSixNpeDlImageMgrImageFind_legacy ( UINT32 *imageLibrary, UINT32 imageId, UINT32 **imagePtr, UINT32 *imageSize){ UINT32 imageOffset; /* used to index image entries in image library header */ UINT32 imageCount = 0; IX_STATUS status = IX_FAIL; IxNpeDlImageMgrImageLibraryHeader *header; BOOL imageFound = FALSE; IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT, "Entering ixNpeDlImageMgrImageFind\n"); /* If user didn't specify a library to use, use the default * one from IxNpeMicrocode.h */ if (imageLibrary == NULL) { imageLibrary = IxNpeMicroCodeImageLibrary; } if (ixNpeDlImageMgrSignatureCheck (imageLibrary)) { header = (IxNpeDlImageMgrImageLibraryHeader *) imageLibrary; /* for each image entry in the image library header ... */ while ((header->entry[imageCount].eohMarker != IX_NPEDL_IMAGEMGR_END_OF_HEADER) && !(imageFound)) { /* if a match for imageId is found in the image library header... */ if (imageId == header->entry[imageCount].image.id) { /* * get pointer to the image in the image library using offset from * 1st word in image library */ imageOffset = header->entry[imageCount].image.offset; *imagePtr = &imageLibrary[imageOffset]; /* get the image size */ *imageSize = header->entry[imageCount].image.size; status = IX_SUCCESS; imageFound = TRUE; } imageCount++; } if (status != IX_SUCCESS) { IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrImageFind: " "imageId not found in image library header\n"); ixNpeDlImageMgrStats.imageIdNotFound++; } } else { IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrImageFind: " "invalid signature in image library\n"); } IX_NPEDL_TRACE1 (IX_NPEDL_FN_ENTRY_EXIT, "Exiting ixNpeDlImageMgrImageFind: status = %d\n", status); return status;}/* * Function definition: ixNpeDlImageMgrImageFind */IX_STATUSixNpeDlImageMgrImageFind ( UINT32 *imageLibrary, UINT32 imageId, UINT32 **imagePtr, UINT32 *imageSize){ IxNpeDlImageMgrImageHeader *image; UINT32 offset = 0; /* If user didn't specify a library to use, use the default * one from IxNpeMicrocode.h */ if (imageLibrary == NULL) {#ifdef IX_NPEDL_READ_MICROCODE_FROM_FILE if (ixNpeMicrocode_binaryArray == NULL) { printk (KERN_ERR "ixp400.o: ERROR, no Microcode found in memory\n"); return IX_FAIL; } else { imageLibrary = ixNpeMicrocode_binaryArray; }#else imageLibrary = IxNpeMicroCodeImageLibrary;#endif /* IX_NPEDL_READ_MICROCODE_FROM_FILE */ } /* For backward's compatibility with previous image format */ if (ixNpeDlImageMgrSignatureCheck(imageLibrary)) { return ixNpeDlImageMgrImageFind_legacy(imageLibrary, imageId, imagePtr, imageSize); } while (*(imageLibrary+offset) == NPE_IMAGE_MARKER) { image = (IxNpeDlImageMgrImageHeader *)(imageLibrary+offset); offset += sizeof(IxNpeDlImageMgrImageHeader)/sizeof(UINT32); if (image->id == imageId) { *imagePtr = imageLibrary + offset; *imageSize = image->size; return IX_SUCCESS; } /* 2 consecutive NPE_IMAGE_MARKER's indicates end of library */ else if (image->id == NPE_IMAGE_MARKER) { IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrImageFind: " "imageId not found in image library header\n"); ixNpeDlImageMgrStats.imageIdNotFound++; /* reached end of library, image not found */ return IX_FAIL; } offset += image->size; } /* If we get here, our image library may be corrupted */ IX_NPEDL_ERROR_REPORT ("ixNpeDlImageMgrImageFind: " "image library format may be invalid or corrupted\n"); return IX_FAIL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -