1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* Copyright(c) 2007-2022 Intel Corporation */ 3 /* $FreeBSD$ */ 4 5 /** 6 *************************************************************************** 7 * @file lac_sym_partial.c common partial packet functions 8 * 9 * @ingroup LacSym 10 * 11 ***************************************************************************/ 12 13 /* 14 ******************************************************************************* 15 * Include public/global header files 16 ******************************************************************************* 17 */ 18 #include "cpa.h" 19 20 #include "icp_accel_devices.h" 21 #include "icp_adf_debug.h" 22 23 #include "lac_log.h" 24 #include "lac_sym.h" 25 #include "cpa_cy_sym.h" 26 #include "lac_common.h" 27 28 #include "lac_sym_partial.h" 29 30 CpaStatus 31 LacSym_PartialPacketStateCheck(CpaCySymPacketType packetType, 32 CpaCySymPacketType partialState) 33 { 34 CpaStatus status = CPA_STATUS_SUCCESS; 35 36 /* ASSUMPTION - partial requests on a given session must be issued 37 * sequentially to guarantee ordering 38 * (i.e. issuing partials on concurrent threads for a particular session 39 * just wouldn't work) 40 */ 41 42 /* state is no partial - only a partial is allowed */ 43 if (((CPA_CY_SYM_PACKET_TYPE_FULL == partialState) && 44 (CPA_CY_SYM_PACKET_TYPE_PARTIAL == packetType)) || 45 46 /* state is partial - only a partial or final partial is allowed */ 47 ((CPA_CY_SYM_PACKET_TYPE_PARTIAL == partialState) && 48 ((CPA_CY_SYM_PACKET_TYPE_PARTIAL == packetType) || 49 (CPA_CY_SYM_PACKET_TYPE_LAST_PARTIAL == packetType)))) { 50 status = CPA_STATUS_SUCCESS; 51 } else /* invalid sequence */ 52 { 53 LAC_INVALID_PARAM_LOG("invalid partial packet sequence"); 54 status = CPA_STATUS_INVALID_PARAM; 55 } 56 57 return status; 58 } 59 60 void 61 LacSym_PartialPacketStateUpdate(CpaCySymPacketType packetType, 62 CpaCySymPacketType *pPartialState) 63 { 64 /* if previous packet was either a full or ended a partial stream, 65 * update 66 * state to partial to indicate a new partial stream was created */ 67 if (CPA_CY_SYM_PACKET_TYPE_FULL == *pPartialState) { 68 *pPartialState = CPA_CY_SYM_PACKET_TYPE_PARTIAL; 69 } else { 70 /* if packet type is final - reset the partial state */ 71 if (CPA_CY_SYM_PACKET_TYPE_LAST_PARTIAL == packetType) { 72 *pPartialState = CPA_CY_SYM_PACKET_TYPE_FULL; 73 } 74 } 75 } 76