1/*
2 * Copyright 2008-2012 Freescale Semiconductor Inc.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *     * Redistributions of source code must retain the above copyright
7 *       notice, this list of conditions and the following disclaimer.
8 *     * Redistributions in binary form must reproduce the above copyright
9 *       notice, this list of conditions and the following disclaimer in the
10 *       documentation and/or other materials provided with the distribution.
11 *     * Neither the name of Freescale Semiconductor nor the
12 *       names of its contributors may be used to endorse or promote products
13 *       derived from this software without specific prior written permission.
14 *
15 *
16 * ALTERNATIVELY, this software may be distributed under the terms of the
17 * GNU General Public License ("GPL") as published by the Free Software
18 * Foundation, either version 2 of that License or (at your option) any
19 * later version.
20 *
21 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33
34/******************************************************************************
35 @File          fm_sp_common.h
36
37 @Description   FM SP  ...
38*//***************************************************************************/
39#ifndef __FM_SP_COMMON_H
40#define __FM_SP_COMMON_H
41
42#include "std_ext.h"
43#include "error_ext.h"
44#include "list_ext.h"
45
46#include "fm_ext.h"
47#include "fm_pcd_ext.h"
48#include "fsl_fman.h"
49
50/**************************************************************************//**
51 @Description       defaults
52*//***************************************************************************/
53#define DEFAULT_FM_SP_bufferPrefixContent_privDataSize      0
54#define DEFAULT_FM_SP_bufferPrefixContent_passPrsResult     FALSE
55#define DEFAULT_FM_SP_bufferPrefixContent_passTimeStamp     FALSE
56#define DEFAULT_FM_SP_bufferPrefixContent_allOtherPCDInfo   FALSE
57#define DEFAULT_FM_SP_bufferPrefixContent_dataAlign         64
58
59/**************************************************************************//**
60 @Description   structure for defining internal context copying
61*//***************************************************************************/
62typedef struct
63{
64    uint16_t    extBufOffset;       /**< Offset in External buffer to which internal
65                                         context is copied to (Rx) or taken from (Tx, Op). */
66    uint8_t     intContextOffset;   /**< Offset within internal context to copy from
67                                         (Rx) or to copy to (Tx, Op). */
68    uint16_t    size;               /**< Internal offset size to be copied */
69} t_FmSpIntContextDataCopy;
70
71/**************************************************************************//**
72 @Description   struct for defining external buffer margins
73*//***************************************************************************/
74typedef struct {
75    uint16_t    startMargins;           /**< Number of bytes to be left at the beginning
76                                             of the external buffer (must be divisible by 16) */
77    uint16_t    endMargins;             /**< number of bytes to be left at the end
78                                             of the external buffer(must be divisible by 16) */
79} t_FmSpBufMargins;
80
81typedef struct {
82    uint32_t      dataOffset;
83    uint32_t      prsResultOffset;
84    uint32_t      timeStampOffset;
85    uint32_t      hashResultOffset;
86    uint32_t      pcdInfoOffset;
87    uint32_t      manipOffset;
88} t_FmSpBufferOffsets;
89
90
91t_Error        FmSpBuildBufferStructure(t_FmSpIntContextDataCopy      *p_FmPortIntContextDataCopy,
92                                        t_FmBufferPrefixContent       *p_BufferPrefixContent,
93                                        t_FmSpBufMargins              *p_FmPortBufMargins,
94                                        t_FmSpBufferOffsets           *p_FmPortBufferOffsets,
95                                        uint8_t                       *internalBufferOffset);
96
97t_Error     FmSpCheckIntContextParams(t_FmSpIntContextDataCopy *p_FmSpIntContextDataCopy);
98t_Error     FmSpCheckBufPoolsParams(t_FmExtPools *p_FmExtPools,
99                                    t_FmBackupBmPools *p_FmBackupBmPools,
100                                    t_FmBufPoolDepletion *p_FmBufPoolDepletion);
101t_Error     FmSpCheckBufMargins(t_FmSpBufMargins *p_FmSpBufMargins);
102void        FmSpSetBufPoolsInAscOrderOfBufSizes(t_FmExtPools *p_FmExtPools, uint8_t *orderedArray, uint16_t *sizesArray);
103
104t_Error     FmPcdSpAllocProfiles(t_Handle h_FmPcd,
105                                 uint8_t  hardwarePortId,
106                                 uint16_t numOfStorageProfiles,
107                                 uint16_t *base,
108                                 uint8_t  *log2Num);
109t_Error     FmPcdSpGetAbsoluteProfileId(t_Handle                        h_FmPcd,
110                                        t_Handle                        h_FmPort,
111                                        uint16_t                        relativeProfile,
112                                        uint16_t                        *p_AbsoluteId);
113void SpInvalidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
114void SpValidateProfileSw(t_Handle h_FmPcd, uint16_t absoluteProfileId);
115
116
117#endif /* __FM_SP_COMMON_H */
118