]> rtime.felk.cvut.cz Git - arc.git/blobdiff - memory/NvM/NvM.c
Added NvM_GetDataIndex
[arc.git] / memory / NvM / NvM.c
index 6b80efb33713d69f445aad3f8f509956bab15001..2799d4ac8d4bdff0911550e28c90aeeabfbfe17e 100644 (file)
@@ -1651,6 +1651,35 @@ Std_ReturnType NvM_SetDataIndex( NvM_BlockIdType blockId, uint8 dataIndex ) {
        admPtr->ErrorStatus = NVM_REQ_PENDING;\r
        return E_OK;\r
 }\r
+\r
+\r
+Std_ReturnType NvM_GetDataIndex( NvM_BlockIdType blockId, uint8 *dataIndexPtr ) {\r
+#if  ( NVM_DEV_ERROR_DETECT == STD_ON )\r
+       const NvM_BlockDescriptorType * bPtr = &NvM_Config.BlockDescriptor[blockId-1];\r
+       AdministrativeBlockType *               admPtr = &AdminBlock[blockId-1];\r
+#endif\r
+       Nvm_QueueType qEntry;\r
+       int rv;\r
+\r
+       NVM_ASSERT( blockId >= 2 );     /* No support for lower numbers, yet */\r
+\r
+       VALIDATE_RV(nvmState != NVM_UNINITIALIZED, NVM_GET_DATA_INDEX_ID, NVM_E_NOT_INITIALIZED, E_NOT_OK);\r
+       VALIDATE_RV(blockId < NVM_NUM_OF_NVRAM_BLOCKS+1, NVM_GET_DATA_INDEX_ID, NVM_E_PARAM_BLOCK_ID, E_NOT_OK);\r
+       VALIDATE_RV(bPtr->BlockManagementType != NVM_BLOCK_NATIVE ,  NVM_GET_DATA_INDEX_ID, NVM_E_PARAM_BLOCK_TYPE , E_NOT_OK);\r
+       VALIDATE_RV( (dataIndexPtr != NULL) , NVM_GET_DATA_INDEX_ID, NVM_E_PARAM_DATA  ,E_NOT_OK);\r
+       VALIDATE_RV( (admPtr->ErrorStatus != NVM_REQ_PENDING), NVM_GET_DATA_INDEX_ID, NVM_E_BLOCK_PENDING , E_NOT_OK);\r
+\r
+       qEntry.blockId = blockId;\r
+       qEntry.op = NVM_GETDATAINDEX;\r
+       qEntry.blockId = blockId;\r
+       qEntry.dataPtr = dataIndexPtr;\r
+       rv = CirqBuffPush(&nvmQueue,&qEntry);\r
+       NVM_ASSERT(rv == 0 );\r
+\r
+       /* req 3.1.5/NVM185 */\r
+       admPtr->ErrorStatus = NVM_REQ_PENDING;\r
+       return E_OK;\r
+}\r
 //#endif\r
 \r
 const NvM_BlockDescriptorType *        nvmBlock;\r
@@ -1754,7 +1783,7 @@ void NvM_MainFunction(void)
                admBlock->ErrorStatus = NVM_REQ_OK;\r
                break;\r
        case NVM_GETDATAINDEX:\r
-               NVM_ASSERT(0);\r
+               *qEntry.dataPtr = admBlock->DataIndex;\r
                nvmState = NVM_IDLE;\r
                nvmSubState = 0;\r
                admBlock->ErrorStatus = NVM_REQ_OK;\r