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