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