[][openwrt][mt7988][crypto][EIP197 DDK Porting]

[Description]
Add eip197 DDK(Driver Development Kit) and firmware
to eip197 package(crypto-eip)

eip197 DDK v5.6.1
eip197b-iew firmware v3.5

[Release-log]
N/A

Change-Id: I662327ecfbdac69742bf0b50362d7c28fc06372b
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7895272
diff --git a/package-21.02/kernel/crypto-eip/src/ddk/kit/eip197/eip202_cdr_event.c b/package-21.02/kernel/crypto-eip/src/ddk/kit/eip197/eip202_cdr_event.c
new file mode 100644
index 0000000..07e8481
--- /dev/null
+++ b/package-21.02/kernel/crypto-eip/src/ddk/kit/eip197/eip202_cdr_event.c
@@ -0,0 +1,172 @@
+/* eip202_cdr_event.c
+ *
+ * EIP-202 Ring Control Driver Library
+ * CDR Event Management API implementation
+ */
+
+/* -------------------------------------------------------------------------- */
+/*                                                                            */
+/*   Module        : ddk197                                                   */
+/*   Version       : 5.6.1                                                    */
+/*   Configuration : DDK-197-GPL                                              */
+/*                                                                            */
+/*   Date          : 2022-Dec-16                                              */
+/*                                                                            */
+/* Copyright (c) 2008-2022 by Rambus, Inc. and/or its subsidiaries.           */
+/*                                                                            */
+/* This program is free software: you can redistribute it and/or modify       */
+/* it under the terms of the GNU General Public License as published by       */
+/* the Free Software Foundation, either version 2 of the License, or          */
+/* any later version.                                                         */
+/*                                                                            */
+/* This program is distributed in the hope that it will be useful,            */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of             */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               */
+/* GNU General Public License for more details.                               */
+/*                                                                            */
+/* You should have received a copy of the GNU General Public License          */
+/* along with this program. If not, see <http://www.gnu.org/licenses/>.       */
+/* -------------------------------------------------------------------------- */
+
+/*----------------------------------------------------------------------------
+ * This module implements (provides) the following interface(s):
+ */
+
+#include "eip202_cdr.h"
+
+
+/*----------------------------------------------------------------------------
+ * This module uses (requires) the following interface(s):
+ */
+
+// Default configuration
+#include "c_eip202_ring.h"
+
+// EIP-202 Ring Control Driver Library Internal interfaces
+#include "eip202_ring_internal.h"
+#include "eip202_cdr_level0.h"         // EIP-202 Level 0 macros
+#include "eip202_cdr_fsm.h"             // CDR State machine
+
+// Driver Framework Basic Definitions API
+#include "basic_defs.h"                // IDENTIFIER_NOT_USED, bool, uint32_t
+
+
+/*----------------------------------------------------------------------------
+ * Definitions and macros
+ */
+
+/*----------------------------------------------------------------------------
+ * Local variables
+ */
+
+
+/*----------------------------------------------------------------------------
+ * EIP202_CDR_Status_Get
+ */
+EIP202_Ring_Error_t
+EIP202_CDR_Status_Get(
+        EIP202_Ring_IOArea_t * const IOArea_p,
+        EIP202_CDR_Status_t * const Status_p)
+{
+    Device_Handle_t Device;
+    EIP202_Ring_Error_t rv;
+    volatile EIP202_CDR_True_IOArea_t * const TrueIOArea_p = CDRIOAREA(IOArea_p);
+
+    EIP202_RING_CHECK_POINTER(IOArea_p);
+    EIP202_RING_CHECK_POINTER(Status_p);
+
+    Device = TrueIOArea_p->Device;
+
+    EIP202_CDR_STAT_RD(Device,
+                       &Status_p->fDMAError,
+                       &Status_p->fTresholdInt,
+                       &Status_p->fError,
+                       &Status_p->fOUFlowError,
+                       &Status_p->fTimeoutInt,
+                       &Status_p->CDFIFOWordCount);
+
+    EIP202_CDR_COUNT_RD(Device, &Status_p->CDPrepWordCount);
+    EIP202_CDR_PROC_COUNT_RD(Device,
+                             &Status_p->CDProcWordCount,
+                             &Status_p->CDProcPktWordCount);
+
+    // Transit to a new state
+    if(Status_p->fDMAError)
+        rv = EIP202_CDR_State_Set((volatile EIP202_CDR_State_t*)&TrueIOArea_p->State,
+                                 EIP202_CDR_STATE_FATAL_ERROR);
+    else
+        // Remain in the current state
+        rv = EIP202_CDR_State_Set((volatile EIP202_CDR_State_t*)&TrueIOArea_p->State,
+                                 (EIP202_CDR_State_t)TrueIOArea_p->State);
+    if(rv != EIP202_RING_NO_ERROR)
+        return EIP202_RING_ILLEGAL_IN_STATE;
+
+    return EIP202_RING_NO_ERROR;
+}
+
+
+/*----------------------------------------------------------------------------
+ * EIP202_CDR_FillLevel_Low_INT_Enable
+ */
+EIP202_Ring_Error_t
+EIP202_CDR_FillLevel_Low_INT_Enable(
+        EIP202_Ring_IOArea_t * const IOArea_p,
+        const unsigned int ThresholdDscrCount,
+        const unsigned int Timeout)
+{
+    Device_Handle_t Device;
+    EIP202_Ring_Error_t rv;
+    volatile EIP202_CDR_True_IOArea_t * const TrueIOArea_p = CDRIOAREA(IOArea_p);
+
+    EIP202_RING_CHECK_POINTER(IOArea_p);
+
+    Device = TrueIOArea_p->Device;
+
+    EIP202_CDR_THRESH_WR(Device,
+                         (uint32_t)ThresholdDscrCount *
+                               TrueIOArea_p->DescOffsWordCount,
+                         (uint8_t)Timeout);
+
+    // Remain in the current state
+    rv = EIP202_CDR_State_Set((volatile EIP202_CDR_State_t*)&TrueIOArea_p->State,
+                             (EIP202_CDR_State_t)TrueIOArea_p->State);
+    if(rv != EIP202_RING_NO_ERROR)
+        return EIP202_RING_ILLEGAL_IN_STATE;
+
+    return EIP202_RING_NO_ERROR;
+}
+
+
+/*----------------------------------------------------------------------------
+ * EIP202_CDR_FillLevel_Low_INT_ClearAndDisable
+ */
+EIP202_Ring_Error_t
+EIP202_CDR_FillLevel_Low_INT_ClearAndDisable(
+        EIP202_Ring_IOArea_t * const IOArea_p)
+{
+    Device_Handle_t Device;
+    EIP202_Ring_Error_t rv;
+    volatile EIP202_CDR_True_IOArea_t * const TrueIOArea_p = CDRIOAREA(IOArea_p);
+
+    EIP202_RING_CHECK_POINTER(IOArea_p);
+
+    Device = TrueIOArea_p->Device;
+
+    // Disable timeout interrupt and stop timeout counter for
+    // reducing power consumption
+    EIP202_CDR_THRESH_DEFAULT_WR(Device);
+
+    // Clear all CDR interrupts
+    EIP202_CDR_STAT_CLEAR_ALL_IRQ_WR(Device);
+
+    // Remain in the current state
+    rv = EIP202_CDR_State_Set((volatile EIP202_CDR_State_t*)&TrueIOArea_p->State,
+                             (EIP202_CDR_State_t)TrueIOArea_p->State);
+    if(rv != EIP202_RING_NO_ERROR)
+        return EIP202_RING_ILLEGAL_IN_STATE;
+
+    return EIP202_RING_NO_ERROR;
+}
+
+
+/* end of file eip202_cdr_event.c */