| /******************************************************************************* |
| * 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]); |
| } |
| } |