/*
 * Copyright 2010 Trident Microsystems (Far East) Ltd. All rights reserved.
 * All prior copyright rights in this work and the accompanying software
 * products transferred to Trident Microsystems (Far East) Ltd. by written
 * agreement.
 */
/*****************************************************************************/
/* Copyright (c) 2010 NXP B.V.  All rights are reserved.                     */
/*                                                                           */
/* Redistribution and use in source and binary forms, with or without        */
/* modification, are permitted provided that the following conditions        */
/* are met:                                                                  */
/*                                                                           */
/* Redistributions of source code must retain the above copyright            */
/* notice, this list of conditions and the following disclaimer.             */
/*                                                                           */
/* Redistributions in binary form must reproduce the above copyright         */
/* notice, this list of conditions and the following disclaimer in the       */
/* documentation and/or other materials provided with the distribution.      */
/*                                                                           */
/* Neither the name of NXP nor the names of its                              */
/* contributors may be used to endorse or promote products derived from      */
/* this software without specific prior written permission.                  */
/*                                                                           */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     */
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     */
/* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE         */
/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH          */
/* DAMAGE.                                                                   */
/*                                                                           */
/*****************************************************************************/
/**
    @file   phStbKBufMgr_Int.h
    @brief  Kernel Buffer Manager component

    Common internal header file used by the whole Buffer Manager component.

    Set your editor for 4 space indentation.
*//*

Rev Date        Author      Comments
--------------------------------------------------------------------------------
  1 20061129    burningh    Original
  2 20061129    burningh    Completing implementation
  3 20061205    steel       add static allocation for hw buffers
3.1.1 20070608  iwillis     Added alignment and frameStoreWidth frameStoreStride
                            members.
  4 20071008    batelaan    Portability enhancements
  5 20071011    batelaan    Remove non-static feature.
  6 20080815    myers       Add frameStoreStrideAvs
  8 20090120    batelaan    Update file copyright/license text
  9 20090402    batelaan    Add phStbKBufMgr_PrintSummaryTo
--------------------------------------------------------------------------------
    For consistency and standardisation retain the Section Separators.
*/

#ifndef PHSTBKBUFMGR_INT_H
#define PHSTBKBUFMGR_INT_H

/**************************************************************
* INCLUDE FILES                                               *
***************************************************************/

#include "tmNxTypes.h"
#include "tmNxCompId.h"
#include "phStbKBufMgr.h"
#include "prjconfig.h"

/**************************************************************
* EXPORTED MACROS                                             *
***************************************************************/

/**************************************************************
* EXPORTED TYPEDEFS                                           *
***************************************************************/

/** Run-time definition of a block for a buffer type. */
typedef struct phStbKBufMgr_RtBlock {
    uint32_t addr;
    bool inUse;
} phStbKBufMgr_RtBlock_t;

/** Run-time definition of a buffer type. */
typedef struct phStbKBufMgr_RtBufferData {
    const uint32_t numberRequired;
    const uint32_t size;
    const uint32_t alignment;
    phStbKBufMgr_RtBlock_t * const blocks;
    const char * const name;
} phStbKBufMgr_RtBufferData_t;

/**************************************************************
* EXPORTED DATA                                               *
***************************************************************/

extern phStbKBufMgr_RtBufferData_t gphStbKBufMgr_RtBuffers[phStbKBufMgr_Buffer_Number];

/**************************************************************
* EXPORTED FUNCTION PROTOTYPES                                *
***************************************************************/

/** Initialise the Kernel Buffer Manager component.
 * Intended to be called from the OS specific driver code, with appropriate options. */
tmErrorCode_t phStbKBufMgr_Init(void);

/** Initialise the Kernel Buffer Manager kernel interface.
 * Intended to be called from the OS specific driver code.
 * Note that this may not be needed / appropriate for all OSs. */
tmErrorCode_t phStbKBufMgr_KI_Init(void);

/* Print a summary table of buffers into buf.
   @param buf @b OUT Area to print information into.
   @param size @b IN Size of buf.
   @return Number of bytes written into buf.
  */
size_t phStbKBufMgr_PrintSummaryTo(char *buf, size_t size);

#endif /* Do not add any thing below this line */

