Path: blob/main/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_secy.c
48420 views
/*1* Copyright 2008-2015 Freescale Semiconductor Inc.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions are met:5* * Redistributions of source code must retain the above copyright6* notice, this list of conditions and the following disclaimer.7* * Redistributions in binary form must reproduce the above copyright8* notice, this list of conditions and the following disclaimer in the9* documentation and/or other materials provided with the distribution.10* * Neither the name of Freescale Semiconductor nor the11* names of its contributors may be used to endorse or promote products12* derived from this software without specific prior written permission.13*14*15* ALTERNATIVELY, this software may be distributed under the terms of the16* GNU General Public License ("GPL") as published by the Free Software17* Foundation, either version 2 of that License or (at your option) any18* later version.19*20* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY21* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED22* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE23* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY24* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES25* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;26* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND27* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT28* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/3132/******************************************************************************33@File fm_macsec_secy.c3435@Description FM MACSEC SECY driver routines implementation.36*//***************************************************************************/3738#include "std_ext.h"39#include "error_ext.h"40#include "xx_ext.h"41#include "string_ext.h"42#include "sprint_ext.h"4344#include "fm_macsec_secy.h"454647/****************************************/48/* static functions */49/****************************************/50static void FmMacsecSecYExceptionsIsr(t_Handle h_FmMacsecSecY, uint32_t id)51{52t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;5354UNUSED(id);55SANITY_CHECK_RETURN(p_FmMacsecSecY, E_INVALID_HANDLE);5657if (p_FmMacsecSecY->exceptions & FM_MACSEC_SECY_EX_FRAME_DISCARDED)58p_FmMacsecSecY->f_Exception(p_FmMacsecSecY->h_App, e_FM_MACSEC_SECY_EX_FRAME_DISCARDED);59}6061static void FmMacsecSecYEventsIsr(t_Handle h_FmMacsecSecY, uint32_t id)62{63t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;6465UNUSED(id);66SANITY_CHECK_RETURN(p_FmMacsecSecY, E_INVALID_HANDLE);6768if (p_FmMacsecSecY->events & FM_MACSEC_SECY_EV_NEXT_PN)69p_FmMacsecSecY->f_Event(p_FmMacsecSecY->h_App, e_FM_MACSEC_SECY_EV_NEXT_PN);70}7172static t_Error CheckFmMacsecSecYParameters(t_FmMacsecSecY *p_FmMacsecSecY)73{74if (!p_FmMacsecSecY->f_Exception)75RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Exceptions callback not provided"));7677if (!p_FmMacsecSecY->f_Event)78RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Events callback not provided"));7980if (!p_FmMacsecSecY->numOfRxSc)81RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Num of Rx Scs must be greater than '0'"));828384return E_OK;85}8687static t_Handle FmMacsecSecYCreateSc(t_FmMacsecSecY *p_FmMacsecSecY,88macsecSCI_t sci,89e_FmMacsecSecYCipherSuite cipherSuite,90e_ScType type)91{92t_SecYSc *p_ScTable;93void *p_Params;94uint32_t numOfSc,i;95t_Error err = E_OK;96t_RxScParams rxScParams;97t_TxScParams txScParams;9899ASSERT_COND(p_FmMacsecSecY);100ASSERT_COND(p_FmMacsecSecY->h_FmMacsec);101102if (type == e_SC_RX)103{104memset(&rxScParams, 0, sizeof(rxScParams));105i = (NUM_OF_RX_SC - 1);106p_ScTable = p_FmMacsecSecY->p_RxSc;107numOfSc = p_FmMacsecSecY->numOfRxSc;108rxScParams.confidentialityOffset = p_FmMacsecSecY->confidentialityOffset;109rxScParams.replayProtect = p_FmMacsecSecY->replayProtect;110rxScParams.replayWindow = p_FmMacsecSecY->replayWindow;111rxScParams.validateFrames = p_FmMacsecSecY->validateFrames;112rxScParams.cipherSuite = cipherSuite;113p_Params = &rxScParams;114}115else116{117memset(&txScParams, 0, sizeof(txScParams));118i = (NUM_OF_TX_SC - 1);119p_ScTable = p_FmMacsecSecY->p_TxSc;120numOfSc = p_FmMacsecSecY->numOfTxSc;121txScParams.sciInsertionMode = p_FmMacsecSecY->sciInsertionMode;122txScParams.protectFrames = p_FmMacsecSecY->protectFrames;123txScParams.confidentialityEnable = p_FmMacsecSecY->confidentialityEnable;124txScParams.confidentialityOffset = p_FmMacsecSecY->confidentialityOffset;125txScParams.cipherSuite = cipherSuite;126p_Params = &txScParams;127}128129for (i=0;i<numOfSc;i++)130if (!p_ScTable[i].inUse)131break;132if (i == numOfSc)133{134REPORT_ERROR(MAJOR, E_FULL, ("FM MACSEC SECY SC"));135return NULL;136}137138if (type == e_SC_RX)139{140((t_RxScParams *)p_Params)->scId = p_ScTable[i].scId;141((t_RxScParams *)p_Params)->sci = sci;142if ((err = FmMacsecCreateRxSc(p_FmMacsecSecY->h_FmMacsec, (t_RxScParams *)p_Params)) != E_OK)143{144REPORT_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY RX SC"));145return NULL;146}147}148else149{150((t_TxScParams *)p_Params)->scId = p_ScTable[i].scId;151((t_TxScParams *)p_Params)->sci = sci;152if ((err = FmMacsecCreateTxSc(p_FmMacsecSecY->h_FmMacsec, (t_TxScParams *)p_Params)) != E_OK)153{154REPORT_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY TX SC"));155return NULL;156}157}158159p_ScTable[i].inUse = TRUE;160return &p_ScTable[i];161}162163static t_Error FmMacsecSecYDeleteSc(t_FmMacsecSecY *p_FmMacsecSecY, t_SecYSc *p_FmSecYSc, e_ScType type)164{165t_Error err = E_OK;166167ASSERT_COND(p_FmMacsecSecY);168ASSERT_COND(p_FmMacsecSecY->h_FmMacsec);169ASSERT_COND(p_FmSecYSc);170171if (type == e_SC_RX)172{173if ((err = FmMacsecDeleteRxSc(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId)) != E_OK)174RETURN_ERROR(MINOR, err, NO_MSG);175}176else177if ((err = FmMacsecDeleteTxSc(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId)) != E_OK)178RETURN_ERROR(MINOR, err, NO_MSG);179180p_FmSecYSc->inUse = FALSE;181182return err;183}184185/****************************************/186/* API Init unit functions */187/****************************************/188t_Handle FM_MACSEC_SECY_Config(t_FmMacsecSecYParams *p_FmMacsecSecYParam)189{190t_FmMacsecSecY *p_FmMacsecSecY;191192/* Allocate FM MACSEC structure */193p_FmMacsecSecY = (t_FmMacsecSecY *) XX_Malloc(sizeof(t_FmMacsecSecY));194if (!p_FmMacsecSecY)195{196REPORT_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY driver structure"));197return NULL;198}199memset(p_FmMacsecSecY, 0, sizeof(t_FmMacsecSecY));200201/* Allocate the FM MACSEC driver's parameters structure */202p_FmMacsecSecY->p_FmMacsecSecYDriverParam = (t_FmMacsecSecYDriverParam *)XX_Malloc(sizeof(t_FmMacsecSecYDriverParam));203if (!p_FmMacsecSecY->p_FmMacsecSecYDriverParam)204{205XX_Free(p_FmMacsecSecY);206REPORT_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY driver parameters"));207return NULL;208}209memset(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, 0, sizeof(t_FmMacsecSecYDriverParam));210211/* Initialize FM MACSEC SECY parameters which will be kept by the driver */212p_FmMacsecSecY->h_FmMacsec = p_FmMacsecSecYParam->h_FmMacsec;213p_FmMacsecSecY->f_Event = p_FmMacsecSecYParam->f_Event;214p_FmMacsecSecY->f_Exception = p_FmMacsecSecYParam->f_Exception;215p_FmMacsecSecY->h_App = p_FmMacsecSecYParam->h_App;216p_FmMacsecSecY->confidentialityEnable = DEFAULT_confidentialityEnable;217p_FmMacsecSecY->confidentialityOffset = DEFAULT_confidentialityOffset;218p_FmMacsecSecY->validateFrames = DEFAULT_validateFrames;219p_FmMacsecSecY->replayProtect = DEFAULT_replayEnable;220p_FmMacsecSecY->replayWindow = DEFAULT_replayWindow;221p_FmMacsecSecY->protectFrames = DEFAULT_protectFrames;222p_FmMacsecSecY->sciInsertionMode = DEFAULT_sciInsertionMode;223p_FmMacsecSecY->isPointToPoint = DEFAULT_ptp;224p_FmMacsecSecY->numOfRxSc = p_FmMacsecSecYParam->numReceiveChannels;225p_FmMacsecSecY->numOfTxSc = DEFAULT_numOfTxSc;226p_FmMacsecSecY->exceptions = DEFAULT_exceptions;227p_FmMacsecSecY->events = DEFAULT_events;228229memcpy(&p_FmMacsecSecY->p_FmMacsecSecYDriverParam->txScParams,230&p_FmMacsecSecYParam->txScParams,231sizeof(t_FmMacsecSecYSCParams));232return p_FmMacsecSecY;233}234235t_Error FM_MACSEC_SECY_Init(t_Handle h_FmMacsecSecY)236{237t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;238t_FmMacsecSecYDriverParam *p_FmMacsecSecYDriverParam = NULL;239uint32_t rxScIds[NUM_OF_RX_SC], txScIds[NUM_OF_TX_SC], i, j;240t_Error err;241242SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);243SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_HANDLE);244245CHECK_INIT_PARAMETERS(p_FmMacsecSecY, CheckFmMacsecSecYParameters);246247p_FmMacsecSecYDriverParam = p_FmMacsecSecY->p_FmMacsecSecYDriverParam;248249if ((p_FmMacsecSecY->isPointToPoint) &&250((err = FmMacsecSetPTP(p_FmMacsecSecY->h_FmMacsec, TRUE)) != E_OK))251RETURN_ERROR(MAJOR, err, ("Can't set Poin-to-Point"));252253/* Rx Sc Allocation */254p_FmMacsecSecY->p_RxSc = (t_SecYSc *)XX_Malloc(sizeof(t_SecYSc) * p_FmMacsecSecY->numOfRxSc);255if (!p_FmMacsecSecY->p_RxSc)256RETURN_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY RX SC"));257memset(p_FmMacsecSecY->p_RxSc, 0, sizeof(t_SecYSc) * p_FmMacsecSecY->numOfRxSc);258if ((err = FmMacsecAllocScs(p_FmMacsecSecY->h_FmMacsec, e_SC_RX, p_FmMacsecSecY->isPointToPoint, p_FmMacsecSecY->numOfRxSc, rxScIds)) != E_OK)259{260if (p_FmMacsecSecY->p_TxSc)261XX_Free(p_FmMacsecSecY->p_TxSc);262if (p_FmMacsecSecY->p_RxSc)263XX_Free(p_FmMacsecSecY->p_RxSc);264return ERROR_CODE(err);265}266for (i=0; i<p_FmMacsecSecY->numOfRxSc; i++)267{268p_FmMacsecSecY->p_RxSc[i].scId = rxScIds[i];269p_FmMacsecSecY->p_RxSc[i].type = e_SC_RX;270for (j=0; j<MAX_NUM_OF_SA_PER_SC;j++)271p_FmMacsecSecY->p_RxSc[i].sa[j].saId = (e_ScSaId)SECY_AN_FREE_VALUE;272}273274/* Tx Sc Allocation */275p_FmMacsecSecY->p_TxSc = (t_SecYSc *)XX_Malloc(sizeof(t_SecYSc) * p_FmMacsecSecY->numOfTxSc);276if (!p_FmMacsecSecY->p_TxSc)277RETURN_ERROR(MAJOR, E_NO_MEMORY, ("FM MACSEC SECY TX SC"));278memset(p_FmMacsecSecY->p_TxSc, 0, sizeof(t_SecYSc) * p_FmMacsecSecY->numOfTxSc);279280if ((err = FmMacsecAllocScs(p_FmMacsecSecY->h_FmMacsec, e_SC_TX, p_FmMacsecSecY->isPointToPoint, p_FmMacsecSecY->numOfTxSc, txScIds)) != E_OK)281{282if (p_FmMacsecSecY->p_TxSc)283XX_Free(p_FmMacsecSecY->p_TxSc);284if (p_FmMacsecSecY->p_RxSc)285XX_Free(p_FmMacsecSecY->p_RxSc);286return ERROR_CODE(err);287}288for (i=0; i<p_FmMacsecSecY->numOfTxSc; i++)289{290p_FmMacsecSecY->p_TxSc[i].scId = txScIds[i];291p_FmMacsecSecY->p_TxSc[i].type = e_SC_TX;292for (j=0; j<MAX_NUM_OF_SA_PER_SC;j++)293p_FmMacsecSecY->p_TxSc[i].sa[j].saId = (e_ScSaId)SECY_AN_FREE_VALUE;294FmMacsecRegisterIntr(p_FmMacsecSecY->h_FmMacsec,295e_FM_MACSEC_MOD_SC_TX,296(uint8_t)txScIds[i],297e_FM_INTR_TYPE_ERR,298FmMacsecSecYExceptionsIsr,299p_FmMacsecSecY);300FmMacsecRegisterIntr(p_FmMacsecSecY->h_FmMacsec,301e_FM_MACSEC_MOD_SC_TX,302(uint8_t)txScIds[i],303e_FM_INTR_TYPE_NORMAL,304FmMacsecSecYEventsIsr,305p_FmMacsecSecY);306307if (p_FmMacsecSecY->exceptions & FM_MACSEC_SECY_EX_FRAME_DISCARDED)308FmMacsecSetException(p_FmMacsecSecY->h_FmMacsec, e_FM_MACSEC_EX_TX_SC, txScIds[i], TRUE);309if (p_FmMacsecSecY->events & FM_MACSEC_SECY_EV_NEXT_PN)310FmMacsecSetEvent(p_FmMacsecSecY->h_FmMacsec, e_FM_MACSEC_EV_TX_SC_NEXT_PN, txScIds[i], TRUE);311}312313FmMacsecSecYCreateSc(p_FmMacsecSecY,314p_FmMacsecSecYDriverParam->txScParams.sci,315p_FmMacsecSecYDriverParam->txScParams.cipherSuite,316e_SC_TX);317XX_Free(p_FmMacsecSecYDriverParam);318p_FmMacsecSecY->p_FmMacsecSecYDriverParam = NULL;319320return E_OK;321}322323t_Error FM_MACSEC_SECY_Free(t_Handle h_FmMacsecSecY)324{325t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;326t_Error err = E_OK;327uint32_t rxScIds[NUM_OF_RX_SC], txScIds[NUM_OF_TX_SC], i;328329SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);330SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);331332if (p_FmMacsecSecY->isPointToPoint)333FmMacsecSetPTP(p_FmMacsecSecY->h_FmMacsec, FALSE);334if (p_FmMacsecSecY->p_RxSc)335{336for (i=0; i<p_FmMacsecSecY->numOfRxSc; i++)337rxScIds[i] = p_FmMacsecSecY->p_RxSc[i].scId;338if ((err = FmMacsecFreeScs(p_FmMacsecSecY->h_FmMacsec, e_SC_RX, p_FmMacsecSecY->numOfRxSc, rxScIds)) != E_OK)339return ERROR_CODE(err);340XX_Free(p_FmMacsecSecY->p_RxSc);341}342if (p_FmMacsecSecY->p_TxSc)343{344FmMacsecSecYDeleteSc(p_FmMacsecSecY, &p_FmMacsecSecY->p_TxSc[0], e_SC_TX);345346for (i=0; i<p_FmMacsecSecY->numOfTxSc; i++) {347txScIds[i] = p_FmMacsecSecY->p_TxSc[i].scId;348FmMacsecUnregisterIntr(p_FmMacsecSecY->h_FmMacsec,349e_FM_MACSEC_MOD_SC_TX,350(uint8_t)txScIds[i],351e_FM_INTR_TYPE_ERR);352FmMacsecUnregisterIntr(p_FmMacsecSecY->h_FmMacsec,353e_FM_MACSEC_MOD_SC_TX,354(uint8_t)txScIds[i],355e_FM_INTR_TYPE_NORMAL);356357if (p_FmMacsecSecY->exceptions & FM_MACSEC_SECY_EX_FRAME_DISCARDED)358FmMacsecSetException(p_FmMacsecSecY->h_FmMacsec, e_FM_MACSEC_EX_TX_SC, txScIds[i], FALSE);359if (p_FmMacsecSecY->events & FM_MACSEC_SECY_EV_NEXT_PN)360FmMacsecSetEvent(p_FmMacsecSecY->h_FmMacsec, e_FM_MACSEC_EV_TX_SC_NEXT_PN, txScIds[i], FALSE);361}362363if ((err = FmMacsecFreeScs(p_FmMacsecSecY->h_FmMacsec, e_SC_TX, p_FmMacsecSecY->numOfTxSc, txScIds)) != E_OK)364return ERROR_CODE(err);365XX_Free(p_FmMacsecSecY->p_TxSc);366}367368XX_Free(p_FmMacsecSecY);369370return err;371}372373t_Error FM_MACSEC_SECY_ConfigSciInsertionMode(t_Handle h_FmMacsecSecY, e_FmMacsecSciInsertionMode sciInsertionMode)374{375t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;376377SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);378SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);379380p_FmMacsecSecY->sciInsertionMode = sciInsertionMode;381382return E_OK;383}384385t_Error FM_MACSEC_SECY_ConfigProtectFrames(t_Handle h_FmMacsecSecY, bool protectFrames)386{387t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;388389SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);390SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);391392p_FmMacsecSecY->protectFrames = protectFrames;393394return E_OK;395}396397t_Error FM_MACSEC_SECY_ConfigReplayWindow(t_Handle h_FmMacsecSecY, bool replayProtect, uint32_t replayWindow)398{399t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;400401SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);402SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);403404p_FmMacsecSecY->replayProtect = replayProtect;405p_FmMacsecSecY->replayWindow = replayWindow;406407return E_OK;408}409410t_Error FM_MACSEC_SECY_ConfigValidationMode(t_Handle h_FmMacsecSecY, e_FmMacsecValidFrameBehavior validateFrames)411{412t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;413414SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);415SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);416417p_FmMacsecSecY->validateFrames = validateFrames;418419return E_OK;420}421422t_Error FM_MACSEC_SECY_ConfigConfidentiality(t_Handle h_FmMacsecSecY, bool confidentialityEnable, uint16_t confidentialityOffset)423{424t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;425426SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);427SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);428429p_FmMacsecSecY->confidentialityEnable = confidentialityEnable;430p_FmMacsecSecY->confidentialityOffset = confidentialityOffset;431432return E_OK;433}434435t_Error FM_MACSEC_SECY_ConfigPointToPoint(t_Handle h_FmMacsecSecY)436{437t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;438439SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);440SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);441442p_FmMacsecSecY->numOfRxSc = 1;443p_FmMacsecSecY->isPointToPoint = TRUE;444p_FmMacsecSecY->sciInsertionMode = e_FM_MACSEC_SCI_INSERTION_MODE_IMPLICT_PTP;445446return E_OK;447}448449t_Error FM_MACSEC_SECY_ConfigException(t_Handle h_FmMacsecSecY, e_FmMacsecSecYExceptions exception, bool enable)450{451t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;452uint32_t bitMask = 0;453454SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);455SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);456457GET_EXCEPTION_FLAG(bitMask, exception);458if (bitMask)459{460if (enable)461p_FmMacsecSecY->exceptions |= bitMask;462else463p_FmMacsecSecY->exceptions &= ~bitMask;464}465else466RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Undefined exception"));467468return E_OK;469}470471t_Error FM_MACSEC_SECY_ConfigEvent(t_Handle h_FmMacsecSecY, e_FmMacsecSecYEvents event, bool enable)472{473t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;474uint32_t bitMask = 0;475476SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);477SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);478479GET_EVENT_FLAG(bitMask, event);480if (bitMask)481{482if (enable)483p_FmMacsecSecY->events |= bitMask;484else485p_FmMacsecSecY->events &= ~bitMask;486}487else488RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Undefined event"));489490return E_OK;491}492493t_Handle FM_MACSEC_SECY_CreateRxSc(t_Handle h_FmMacsecSecY, t_FmMacsecSecYSCParams *p_ScParams)494{495t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;496497SANITY_CHECK_RETURN_VALUE(p_FmMacsecSecY, E_INVALID_HANDLE, NULL);498SANITY_CHECK_RETURN_VALUE(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE, NULL);499SANITY_CHECK_RETURN_VALUE(p_ScParams, E_NULL_POINTER, NULL);500SANITY_CHECK_RETURN_VALUE(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE, NULL);501502return FmMacsecSecYCreateSc(p_FmMacsecSecY, p_ScParams->sci, p_ScParams->cipherSuite, e_SC_RX);503}504505t_Error FM_MACSEC_SECY_DeleteRxSc(t_Handle h_FmMacsecSecY, t_Handle h_Sc)506{507t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;508t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;509510SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);511SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);512SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);513SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);514515return FmMacsecSecYDeleteSc(p_FmMacsecSecY, p_FmSecYSc, e_SC_RX);516}517518t_Error FM_MACSEC_SECY_CreateRxSa(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t lowestPn, macsecSAKey_t key)519{520t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;521t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;522t_Error err = E_OK;523524SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);525SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);526SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);527SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);528SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);529530if (p_FmSecYSc->sa[an].saId != SECY_AN_FREE_VALUE)531RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is already assigned",an));532533if ((err = FmMacsecCreateRxSa(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, (e_ScSaId)p_FmSecYSc->numOfSa, an, lowestPn, key)) != E_OK)534RETURN_ERROR(MINOR, err, NO_MSG);535536p_FmSecYSc->sa[an].saId = (e_ScSaId)p_FmSecYSc->numOfSa++;537return err;538}539540t_Error FM_MACSEC_SECY_DeleteRxSa(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an)541{542t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;543t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;544t_Error err = E_OK;545546SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);547SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);548SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);549SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);550SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);551552if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)553RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is already deleted",an));554555if ((err = FmMacsecDeleteRxSa(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId)) != E_OK)556RETURN_ERROR(MINOR, err, NO_MSG);557558p_FmSecYSc->numOfSa--;559p_FmSecYSc->sa[an].saId = (e_ScSaId)SECY_AN_FREE_VALUE;560/* TODO - check if statistics need to be read*/561return err;562}563564t_Error FM_MACSEC_SECY_RxSaEnableReceive(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an)565{566t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;567t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;568t_Error err = E_OK;569570SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);571SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);572SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);573SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);574SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);575576if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)577RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));578579if ((err = FmMacsecRxSaSetReceive(p_FmMacsecSecY->h_FmMacsec,p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, TRUE)) != E_OK)580RETURN_ERROR(MINOR, err, NO_MSG);581582p_FmSecYSc->sa[an].active = TRUE;583return err;584}585586t_Error FM_MACSEC_SECY_RxSaDisableReceive(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an)587{588t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;589t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;590t_Error err = E_OK;591592SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);593SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);594SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);595SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);596SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);597598if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)599RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));600601if ((err = FmMacsecRxSaSetReceive(p_FmMacsecSecY->h_FmMacsec,p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, FALSE)) != E_OK)602RETURN_ERROR(MINOR, err, NO_MSG);603604p_FmSecYSc->sa[an].active = FALSE;605return err;606}607608t_Error FM_MACSEC_SECY_RxSaUpdateNextPn(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t updtNextPN)609{610t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;611t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;612t_Error err = E_OK;613614SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);615SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);616SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);617SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);618SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);619620if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)621RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));622623if ((err = FmMacsecRxSaUpdateNextPn(p_FmMacsecSecY->h_FmMacsec,p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, updtNextPN)) != E_OK)624RETURN_ERROR(MINOR, err, NO_MSG);625626return err;627}628629t_Error FM_MACSEC_SECY_RxSaUpdateLowestPn(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t updtLowestPN)630{631t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;632t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;633t_Error err = E_OK;634635SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);636SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);637SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);638SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);639SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);640641if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)642RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));643644if ((err = FmMacsecRxSaUpdateLowestPn(p_FmMacsecSecY->h_FmMacsec,p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, updtLowestPN)) != E_OK)645RETURN_ERROR(MINOR, err, NO_MSG);646647return err;648}649650t_Error FM_MACSEC_SECY_RxSaModifyKey(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, macsecSAKey_t key)651{652t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;653t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;654t_Error err = E_OK;655656SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);657SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);658SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);659SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);660SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);661662if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)663RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));664665if (p_FmSecYSc->sa[an].active)666if ((err = FmMacsecRxSaSetReceive(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, FALSE)) != E_OK)667RETURN_ERROR(MINOR, err, NO_MSG);668669/* TODO - statistics should be read */670671if ((err = FmMacsecCreateRxSa(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, an, 1, key)) != E_OK)672RETURN_ERROR(MINOR, err, NO_MSG);673674if (p_FmSecYSc->sa[an].active)675if ((err = FmMacsecRxSaSetReceive(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId, TRUE)) != E_OK)676RETURN_ERROR(MINOR, err, NO_MSG);677return err;678}679680681t_Error FM_MACSEC_SECY_CreateTxSa(t_Handle h_FmMacsecSecY, macsecAN_t an, macsecSAKey_t key)682{683t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;684t_SecYSc *p_FmSecYSc;685t_Error err = E_OK;686687SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);688SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);689SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);690p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];691SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);692SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);693694if (p_FmSecYSc->sa[an].saId != SECY_AN_FREE_VALUE)695RETURN_ERROR(MINOR, err, ("An %d is already assigned",an));696697if ((err = FmMacsecCreateTxSa(p_FmMacsecSecY->h_FmMacsec,p_FmSecYSc->scId, (e_ScSaId)p_FmSecYSc->numOfSa, key)) != E_OK)698RETURN_ERROR(MINOR, err, NO_MSG);699700p_FmSecYSc->sa[an].saId = (e_ScSaId)p_FmSecYSc->numOfSa++;701return err;702}703704t_Error FM_MACSEC_SECY_DeleteTxSa(t_Handle h_FmMacsecSecY, macsecAN_t an)705{706t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;707t_SecYSc *p_FmSecYSc;708t_Error err = E_OK;709710SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);711SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);712SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);713p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];714SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);715SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);716717if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)718RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is already deleted",an));719720if ((err = FmMacsecDeleteTxSa(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[an].saId)) != E_OK)721RETURN_ERROR(MINOR, err, NO_MSG);722723p_FmSecYSc->numOfSa--;724p_FmSecYSc->sa[an].saId = (e_ScSaId)SECY_AN_FREE_VALUE;725/* TODO - check if statistics need to be read*/726return err;727}728729t_Error FM_MACSEC_SECY_TxSaModifyKey(t_Handle h_FmMacsecSecY, macsecAN_t nextActiveAn, macsecSAKey_t key)730{731t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;732t_SecYSc *p_FmSecYSc;733macsecAN_t currentAn;734t_Error err = E_OK;735736SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);737SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);738SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);739p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];740SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);741SANITY_CHECK_RETURN_ERROR(nextActiveAn < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);742743if ((err = FmMacsecTxSaGetActive(p_FmMacsecSecY->h_FmMacsec,744p_FmSecYSc->scId,745¤tAn)) != E_OK)746RETURN_ERROR(MINOR, err, NO_MSG);747748if ((err = FmMacsecTxSaSetActive(p_FmMacsecSecY->h_FmMacsec,749p_FmSecYSc->scId,750p_FmSecYSc->sa[nextActiveAn].saId,751nextActiveAn)) != E_OK)752RETURN_ERROR(MINOR, err, NO_MSG);753754/* TODO - statistics should be read */755756if ((err = FmMacsecCreateTxSa(p_FmMacsecSecY->h_FmMacsec, p_FmSecYSc->scId, p_FmSecYSc->sa[currentAn].saId, key)) != E_OK)757RETURN_ERROR(MINOR, err, NO_MSG);758759return err;760}761762t_Error FM_MACSEC_SECY_TxSaSetActive(t_Handle h_FmMacsecSecY, macsecAN_t an)763{764t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;765t_SecYSc *p_FmSecYSc;766t_Error err = E_OK;767768SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);769SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);770SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);771p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];772SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);773SANITY_CHECK_RETURN_ERROR(an < MAX_NUM_OF_SA_PER_SC, E_INVALID_STATE);774775if (p_FmSecYSc->sa[an].saId == SECY_AN_FREE_VALUE)776RETURN_ERROR(MINOR, E_INVALID_STATE, ("An %d is not configured",an));777778if ((err = FmMacsecTxSaSetActive(p_FmMacsecSecY->h_FmMacsec,779p_FmSecYSc->scId,780p_FmSecYSc->sa[an].saId,781an)) != E_OK)782RETURN_ERROR(MINOR, err, NO_MSG);783784return err;785}786787t_Error FM_MACSEC_SECY_TxSaGetActive(t_Handle h_FmMacsecSecY, macsecAN_t *p_An)788{789t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;790t_SecYSc *p_FmSecYSc;791t_Error err = E_OK;792793SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);794SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);795SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);796p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];797SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);798SANITY_CHECK_RETURN_ERROR(p_An, E_INVALID_HANDLE);799800if ((err = FmMacsecTxSaGetActive(p_FmMacsecSecY->h_FmMacsec,801p_FmSecYSc->scId,802p_An)) != E_OK)803RETURN_ERROR(MINOR, err, NO_MSG);804805return err;806}807808t_Error FM_MACSEC_SECY_GetRxScPhysId(t_Handle h_FmMacsecSecY, t_Handle h_Sc, uint32_t *p_ScPhysId)809{810t_SecYSc *p_FmSecYSc = (t_SecYSc *)h_Sc;811t_Error err = E_OK;812813SANITY_CHECK_RETURN_ERROR(h_FmMacsecSecY, E_INVALID_HANDLE);814SANITY_CHECK_RETURN_ERROR(((t_FmMacsecSecY *)h_FmMacsecSecY)->h_FmMacsec, E_INVALID_HANDLE);815SANITY_CHECK_RETURN_ERROR(!((t_FmMacsecSecY *)h_FmMacsecSecY)->p_FmMacsecSecYDriverParam, E_INVALID_STATE);816SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);817#ifdef DISABLE_SANITY_CHECKS818UNUSED(h_FmMacsecSecY);819#endif /* DISABLE_SANITY_CHECKS */820821*p_ScPhysId = p_FmSecYSc->scId;822return err;823}824825t_Error FM_MACSEC_SECY_GetTxScPhysId(t_Handle h_FmMacsecSecY, uint32_t *p_ScPhysId)826{827t_FmMacsecSecY *p_FmMacsecSecY = (t_FmMacsecSecY *)h_FmMacsecSecY;828t_SecYSc *p_FmSecYSc;829t_Error err = E_OK;830831SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY, E_INVALID_HANDLE);832SANITY_CHECK_RETURN_ERROR(p_FmMacsecSecY->h_FmMacsec, E_INVALID_HANDLE);833SANITY_CHECK_RETURN_ERROR(!p_FmMacsecSecY->p_FmMacsecSecYDriverParam, E_INVALID_STATE);834p_FmSecYSc = &p_FmMacsecSecY->p_TxSc[0];835SANITY_CHECK_RETURN_ERROR(p_FmSecYSc, E_INVALID_HANDLE);836837*p_ScPhysId = p_FmSecYSc->scId;838return err;839}840841t_Error FM_MACSEC_SECY_SetException(t_Handle h_FmMacsecSecY, e_FmMacsecExceptions exception, bool enable)842{843UNUSED(h_FmMacsecSecY);UNUSED(exception);UNUSED(enable);844RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);845}846847t_Error FM_MACSEC_SECY_SetEvent(t_Handle h_FmMacsecSecY, e_FmMacsecSecYEvents event, bool enable)848{849UNUSED(h_FmMacsecSecY);UNUSED(event);UNUSED(enable);850RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);851}852853t_Error FM_MACSEC_SECY_GetStatistics(t_Handle h_FmMacsecSecY, t_FmMacsecSecYStatistics *p_Statistics)854{855UNUSED(h_FmMacsecSecY);UNUSED(p_Statistics);856RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);857}858859t_Error FM_MACSEC_SECY_RxScGetStatistics(t_Handle h_FmMacsecSecY, t_Handle h_Sc, t_FmMacsecSecYRxScStatistics *p_Statistics)860{861UNUSED(h_FmMacsecSecY);UNUSED(h_Sc);UNUSED(p_Statistics);862RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);863}864865t_Error FM_MACSEC_SECY_RxSaGetStatistics(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, t_FmMacsecSecYRxSaStatistics *p_Statistics)866{867UNUSED(h_FmMacsecSecY);UNUSED(h_Sc);UNUSED(an);UNUSED(p_Statistics);868RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);869}870871t_Error FM_MACSEC_SECY_TxScGetStatistics(t_Handle h_FmMacsecSecY, t_FmMacsecSecYTxScStatistics *p_Statistics)872{873UNUSED(h_FmMacsecSecY);UNUSED(p_Statistics);874RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);875}876877t_Error FM_MACSEC_SECY_TxSaGetStatistics(t_Handle h_FmMacsecSecY, macsecAN_t an, t_FmMacsecSecYTxSaStatistics *p_Statistics)878{879UNUSED(h_FmMacsecSecY);UNUSED(an);UNUSED(p_Statistics);880RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);881}882883884885