blob: 696cb0680fb069834bddfe7904c9020b41621db7 [file] [log] [blame]
/*******************************************************************************
* Copyright 2003, Marvell Semiconductor Israel LTD. *
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. *
* NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT *
* OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE *
* DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL. *
* THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESSED, *
* IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE. *
* *
* MARVELL COMPRISES MARVELL TECHNOLOGY GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, *
* MARVELL INTERNATIONAL LTD. (MIL), MARVELL TECHNOLOGY, INC. (MTI), MARVELL *
* SEMICONDUCTOR, INC. (MSI), MARVELL ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. *
* (MJKK), MARVELL SEMICONDUCTOR ISRAEL LTD (MSIL). *
********************************************************************************
* mvQueue.c
*
* FILENAME: $Workfile: mvStack.c $
* LAST UPDATE: $Modtime: $
*
* DESCRIPTION:
* This file implements simple Stack LIFO functionality.
*******************************************************************************/
/* includes */
#include "mvCommon.h"
#include "mvOs.h"
#include "mvTypes.h"
#include "mvDebug.h"
#include "mvStack.h"
/* defines */
/* Public functions */
/* Purpose: Create new stack
* Inputs:
* - MV_U32 noOfElements - maximum number of elements in the stack.
* Each element 4 bytes size
* Return: void* - pointer to created stack.
*/
void *mvStackCreate(int numOfElements)
{
MV_STACK *pStack;
MV_U32 *pStackElements;
pStack = (MV_STACK *)mvOsMalloc(sizeof(MV_STACK));
pStackElements = (MV_U32 *)mvOsMalloc(numOfElements * sizeof(MV_U32));
if ((pStack == NULL) || (pStackElements == NULL)) {
mvOsPrintf("mvStack: Can't create new stack\n");
if (pStack)
mvOsFree(pStack);
if (pStackElements)
mvOsFree(pStackElements);
return NULL;
}
memset(pStackElements, 0, numOfElements * sizeof(MV_U32));
pStack->numOfElements = numOfElements;
pStack->stackIdx = 0;
pStack->stackElements = pStackElements;
return pStack;
}
/* Purpose: Delete existing stack
* Inputs:
* - void* stackHndl - Stack handle as returned by "mvStackCreate()" function
*
* Return: MV_STATUS MV_NOT_FOUND - Failure. StackHandle is not valid.
* MV_OK - Success.
*/
MV_STATUS mvStackDelete(void *stackHndl)
{
MV_STACK *pStack = (MV_STACK *) stackHndl;
if ((pStack == NULL) || (pStack->stackElements == NULL))
return MV_NOT_FOUND;
mvOsFree(pStack->stackElements);
mvOsFree(pStack);
return MV_OK;
}
/* PrintOut status of the stack */
void mvStackStatus(void *stackHndl, MV_BOOL isPrintElements)
{
int i;
MV_STACK *pStack = (MV_STACK *) stackHndl;
mvOsPrintf("StackHandle=%p, pElements=%p, numElements=%d, stackIdx=%d\n",
stackHndl, pStack->stackElements, pStack->numOfElements, pStack->stackIdx);
if (isPrintElements == MV_TRUE) {
for (i = 0; i < pStack->stackIdx; i++)
mvOsPrintf("%3d. Value=0x%x\n", i, pStack->stackElements[i]);
}
}