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
29CpaStatus
30LacSym_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
59void
60LacSym_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