1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 /**
5 *****************************************************************************
6 * @file lac_common.h Common macros
7 *
8 * @defgroup Lac Look Aside Crypto LLD Doc
9 *
10 *****************************************************************************/
11
12 /**
13 *****************************************************************************
14 * @defgroup LacCommon LAC Common
15 * Common code for Lac which includes init/shutdown, memory, logging and
16 * hooks.
17 *
18 * @ingroup Lac
19 *
20 *****************************************************************************/
21
22 /***************************************************************************/
23
24 #ifndef LAC_COMMON_H
25 #define LAC_COMMON_H
26
27 /*
28 ******************************************************************************
29 * Include public/global header files
30 ******************************************************************************
31 */
32
33 #include "cpa.h"
34 #include "qat_utils.h"
35 #include "cpa_cy_common.h"
36 #include "icp_adf_init.h"
37
38 #define LAC_ARCH_UINT uintptr_t
39 #define LAC_ARCH_INT intptr_t
40
41 /*
42 *****************************************************************************
43 * Max range values for some primitive param checking
44 *****************************************************************************
45 */
46
47 /**< Maximum number of instances */
48 #define SAL_MAX_NUM_INSTANCES_PER_DEV 512
49
50 #define SAL_DEFAULT_RING_SIZE 256
51 /**< Default ring size */
52
53 #define SAL_64_CONCURR_REQUESTS 64
54 #define SAL_128_CONCURR_REQUESTS 128
55 #define SAL_256_CONCURR_REQUESTS 256
56 #define SAL_512_CONCURR_REQUESTS 512
57 #define SAL_1024_CONCURR_REQUESTS 1024
58 #define SAL_2048_CONCURR_REQUESTS 2048
59 #define SAL_4096_CONCURR_REQUESTS 4096
60 #define SAL_MAX_CONCURR_REQUESTS 65536
61 /**< Valid options for the num of concurrent requests per ring pair read
62 from the config file. These values are used to size the rings */
63
64 #define SAL_BATCH_SUBMIT_FREE_SPACE 2
65 /**< For data plane batch submissions ADF leaves 2 spaces free on the ring */
66
67 /*
68 ******************************************************************************
69 * Some common settings for QA API queries
70 ******************************************************************************
71 */
72
73 #define SAL_INFO2_VENDOR_NAME "Intel(R)"
74 /**< @ingroup LacCommon
75 * Name of vendor of this driver */
76 #define SAL_INFO2_PART_NAME "%s with Intel(R) QuickAssist Technology"
77 /**< @ingroup LacCommon
78 */
79
80 /*
81 ********************************************************************************
82 * User process name defines and functions
83 ********************************************************************************
84 */
85
86 #define LAC_USER_PROCESS_NAME_MAX_LEN 32
87 /**< @ingroup LacCommon
88 * Max length of user process name */
89
90 #define LAC_KERNEL_PROCESS_NAME "KERNEL_QAT"
91 /**< @ingroup LacCommon
92 * Default name for kernel process */
93
94 /*
95 ********************************************************************************
96 * response mode indicator from Config file
97 ********************************************************************************
98 */
99
100 #define SAL_RESP_POLL_CFG_FILE 1
101 #define SAL_RESP_EPOLL_CFG_FILE 2
102
103 /*
104 * @ingroup LacCommon
105 * @description
106 * This function sets the process name
107 *
108 * @context
109 * This functions is called from module_init or from user space process
110 * initialization function
111 *
112 * @assumptions
113 * None
114 * @sideEffects
115 * None
116 * @reentrant
117 * No
118 * @threadSafe
119 * No
120 *
121 * param[in] processName Process name to be set
122 */
123 CpaStatus icpSetProcessName(const char *processName);
124
125 /*
126 * @ingroup LacCommon
127 * @description
128 * This function gets the process name
129 *
130 * @context
131 * This functions is called from LAC context
132 *
133 * @assumptions
134 * None
135 * @sideEffects
136 * None
137 * @reentrant
138 * Yes
139 * @threadSafe
140 * Yes
141 *
142 */
143 char *icpGetProcessName(void);
144
145 /* Sections of the config file */
146 #define LAC_CFG_SECTION_GENERAL "GENERAL"
147 #define LAC_CFG_SECTION_INTERNAL "INTERNAL"
148
149 /*
150 ********************************************************************************
151 * Debug Macros and settings
152 ********************************************************************************
153 */
154
155 #define SEPARATOR "+--------------------------------------------------+\n"
156 /**< @ingroup LacCommon
157 * separator used for printing stats to standard output*/
158
159 #define BORDER "|"
160 /**< @ingroup LacCommon
161 * separator used for printing stats to standard output*/
162
163 /**
164 *****************************************************************************
165 * @ingroup LacCommon
166 * Component state
167 *
168 * @description
169 * This enum is used to indicate the state that the component is in. Its
170 * purpose is to prevent components from being initialised or shutdown
171 * incorrectly.
172 *
173 *****************************************************************************/
174 typedef enum {
175 LAC_COMP_SHUT_DOWN = 0,
176 /**< Component in the Shut Down state */
177 LAC_COMP_SHUTTING_DOWN,
178 /**< Component in the Process of Shutting down */
179 LAC_COMP_INITIALISING,
180 /**< Component in the Process of being initialised */
181 LAC_COMP_INITIALISED,
182 /**< Component in the initialised state */
183 } lac_comp_state_t;
184
185 /**
186 *******************************************************************************
187 * @ingroup LacCommon
188 * This macro checks if a parameter is NULL
189 *
190 * @param[in] param Parameter
191 *
192 * @return CPA_STATUS_INVALID_PARAM Parameter is NULL
193 * @return void Parameter is not NULL
194 ******************************************************************************/
195 #define LAC_CHECK_NULL_PARAM(param) \
196 do { \
197 if (NULL == (param)) { \
198 return CPA_STATUS_INVALID_PARAM; \
199 } \
200 } while (0)
201
202 /**
203 *******************************************************************************
204 * @ingroup LacCommon
205 * This macro checks if a parameter is within a specified range
206 *
207 * @param[in] param Parameter
208 * @param[in] min Parameter must be greater than OR equal to
209 *min
210 * @param[in] max Parameter must be less than max
211 *
212 * @return CPA_STATUS_INVALID_PARAM Parameter is outside range
213 * @return void Parameter is within range
214 ******************************************************************************/
215 #define LAC_CHECK_PARAM_RANGE(param, min, max) \
216 do { \
217 if (((param) < (min)) || ((param) >= (max))) { \
218 return CPA_STATUS_INVALID_PARAM; \
219 } \
220 } while (0)
221
222 /**
223 *******************************************************************************
224 * @ingroup LacCommon
225 * This checks if a param is 8 byte aligned.
226 *
227 ******************************************************************************/
228 #define LAC_CHECK_8_BYTE_ALIGNMENT(param) \
229 do { \
230 if ((Cpa64U)param % 8 != 0) { \
231 return CPA_STATUS_INVALID_PARAM; \
232 } \
233 } while (0)
234
235 /**
236 *******************************************************************************
237 * @ingroup LacCommon
238 * This checks if a param is 64 byte aligned.
239 *
240 ******************************************************************************/
241 #define LAC_CHECK_64_BYTE_ALIGNMENT(param) \
242 do { \
243 if ((LAC_ARCH_UINT)param % 64 != 0) { \
244 return CPA_STATUS_INVALID_PARAM; \
245 } \
246 } while (0)
247
248 /**
249 *******************************************************************************
250 * @ingroup LacCommon
251 * This macro returns the size of the buffer list structure given the
252 * number of elements in the buffer list - note: only the sizeof the
253 * buffer list structure is returned.
254 *
255 * @param[in] numBuffers The number of flatbuffers in a buffer list
256 *
257 * @return size of the buffer list structure
258 ******************************************************************************/
259 #define LAC_BUFFER_LIST_SIZE_GET(numBuffers) \
260 (sizeof(CpaBufferList) + (numBuffers * sizeof(CpaFlatBuffer)))
261
262 /**
263 *******************************************************************************
264 * @ingroup LacCommon
265 * This macro checks that a flatbuffer is valid i.e. that it is not
266 * null and the data it points to is not null
267 *
268 * @param[in] pFlatBuffer Pointer to flatbuffer
269 *
270 * @return CPA_STATUS_INVALID_PARAM Invalid flatbuffer pointer
271 * @return void flatbuffer is ok
272 ******************************************************************************/
273 #define LAC_CHECK_FLAT_BUFFER(pFlatBuffer) \
274 do { \
275 LAC_CHECK_NULL_PARAM((pFlatBuffer)); \
276 LAC_CHECK_NULL_PARAM((pFlatBuffer)->pData); \
277 } while (0)
278
279 /**
280 *******************************************************************************
281 * @ingroup LacCommon
282 * This macro verifies that the status is ok i.e. equal to CPA_STATUS_SUCCESS
283 *
284 * @param[in] status status we are checking
285 *
286 * @return void status is ok (CPA_STATUS_SUCCESS)
287 * @return status The value in the status parameter is an error one
288 *
289 ******************************************************************************/
290 #define LAC_CHECK_STATUS(status) \
291 do { \
292 if (CPA_STATUS_SUCCESS != (status)) { \
293 return status; \
294 } \
295 } while (0)
296
297 /**
298 *******************************************************************************
299 * @ingroup LacCommon
300 * This macro verifies that the Instance Handle is valid.
301 *
302 * @param[in] instanceHandle Instance Handle
303 *
304 * @return CPA_STATUS_INVALID_PARAM Parameter is NULL
305 * @return void Parameter is not NULL
306 *
307 ******************************************************************************/
308 #define LAC_CHECK_INSTANCE_HANDLE(instanceHandle) \
309 do { \
310 if (NULL == (instanceHandle)) { \
311 return CPA_STATUS_INVALID_PARAM; \
312 } \
313 } while (0)
314
315 /**
316 *******************************************************************************
317 * @ingroup LacCommon
318 * This macro copies a string from one location to another
319 *
320 * @param[out] pDestinationBuffer Pointer to destination buffer
321 * @param[in] pSource Pointer to source buffer
322 *
323 ******************************************************************************/
324 #define LAC_COPY_STRING(pDestinationBuffer, pSource) \
325 do { \
326 memcpy(pDestinationBuffer, pSource, (sizeof(pSource) - 1)); \
327 pDestinationBuffer[(sizeof(pSource) - 1)] = '\0'; \
328 } while (0)
329
330 /**
331 *******************************************************************************
332 * @ingroup LacCommon
333 * This macro fills a memory zone with ZEROES
334 *
335 * @param[in] pBuffer Pointer to buffer
336 * @param[in] count Buffer length
337 *
338 * @return void
339 *
340 ******************************************************************************/
341 #define LAC_OS_BZERO(pBuffer, count) memset(pBuffer, 0, count);
342
343 /**
344 *******************************************************************************
345 * @ingroup LacCommon
346 * This macro calculates the position of the given member in a struct
347 * Only for use on a struct where all members are of equal size to map
348 * the struct member position to an array index
349 *
350 * @param[in] structType the struct
351 * @param[in] member the member of the given struct
352 *
353 ******************************************************************************/
354 #define LAC_IDX_OF(structType, member) \
355 (offsetof(structType, member) / sizeof(((structType *)0)->member))
356
357 /*
358 ********************************************************************************
359 * Alignment, Bid define and Bit Operation Macros
360 ********************************************************************************
361 */
362
363 #define LAC_BIT31_SET 0x80000000 /**< bit 31 == 1 */
364 #define LAC_BIT7_SET 0x80 /**< bit 7 == 1 */
365 #define LAC_BIT6_SET 0x40 /**< bit 6 == 1 */
366 #define LAC_BIT5_SET 0x20 /**< bit 5 == 1 */
367 #define LAC_BIT4_SET 0x10 /**< bit 4 == 1 */
368 #define LAC_BIT3_SET 0x08 /**< bit 3 == 1 */
369 #define LAC_BIT2_SET 0x04 /**< bit 2 == 1 */
370 #define LAC_BIT1_SET 0x02 /**< bit 1 == 1 */
371 #define LAC_BIT0_SET 0x01 /**< bit 0 == 1 */
372
373 #define LAC_NUM_BITS_IN_BYTE (8)
374 /**< @ingroup LacCommon
375 * Number of bits in a byte */
376
377 #define LAC_LONG_WORD_IN_BYTES (4)
378 /**< @ingroup LacCommon
379 * Number of bytes in an IA word */
380
381 #define LAC_QUAD_WORD_IN_BYTES (8)
382 /**< @ingroup LacCommon
383 * Number of bytes in a QUAD word */
384
385 #define LAC_QAT_MAX_MSG_SZ_LW (32)
386 /**< @ingroup LacCommon
387 * Maximum size in Long Words for a QAT message */
388
389 /**
390 *****************************************************************************
391 * @ingroup LacCommon
392 * Alignment shift requirements of a buffer.
393 *
394 * @description
395 * This enum is used to indicate the alignment shift of a buffer.
396 * All alignments are to power of 2
397 *
398 *****************************************************************************/
399 typedef enum lac_aligment_shift_s {
400 LAC_NO_ALIGNMENT_SHIFT = 0,
401 /**< No alignment shift (to a power of 2)*/
402 LAC_8BYTE_ALIGNMENT_SHIFT = 3,
403 /**< 8 byte alignment shift (to a power of 2)*/
404 LAC_16BYTE_ALIGNMENT_SHIFT = 4,
405 /**< 16 byte alignment shift (to a power of 2)*/
406 LAC_64BYTE_ALIGNMENT_SHIFT = 6,
407 /**< 64 byte alignment shift (to a power of 2)*/
408 LAC_4KBYTE_ALIGNMENT_SHIFT = 12,
409 /**< 4k byte alignment shift (to a power of 2)*/
410 } lac_aligment_shift_t;
411
412 /**
413 *****************************************************************************
414 * @ingroup LacCommon
415 * Alignment of a buffer.
416 *
417 * @description
418 * This enum is used to indicate the alignment requirements of a buffer.
419 *
420 *****************************************************************************/
421 typedef enum lac_aligment_s {
422 LAC_NO_ALIGNMENT = 0,
423 /**< No alignment */
424 LAC_1BYTE_ALIGNMENT = 1,
425 /**< 1 byte alignment */
426 LAC_8BYTE_ALIGNMENT = 8,
427 /**< 8 byte alignment*/
428 LAC_64BYTE_ALIGNMENT = 64,
429 /**< 64 byte alignment*/
430 LAC_4KBYTE_ALIGNMENT = 4096,
431 /**< 4k byte alignment */
432 } lac_aligment_t;
433
434 /**
435 *****************************************************************************
436 * @ingroup LacCommon
437 * Size of a buffer.
438 *
439 * @description
440 * This enum is used to indicate the required size.
441 * The buffer must be a multiple of the required size.
442 *
443 *****************************************************************************/
444 typedef enum lac_expected_size_s {
445 LAC_NO_LENGTH_REQUIREMENTS = 0,
446 /**< No requirement for size */
447 LAC_4KBYTE_MULTIPLE_REQUIRED = 4096,
448 /**< 4k multiple requirement for size */
449 } lac_expected_size_t;
450
451 #define LAC_OPTIMAL_ALIGNMENT_SHIFT LAC_64BYTE_ALIGNMENT_SHIFT
452 /**< @ingroup LacCommon
453 * optimal alignment to a power of 2 */
454
455 #define LAC_SHIFT_8 (1 << LAC_8BYTE_ALIGNMENT_SHIFT)
456 /**< shift by 8 bits */
457 #define LAC_SHIFT_24 \
458 ((1 << LAC_8BYTE_ALIGNMENT_SHIFT) + (1 << LAC_16BYTE_ALIGNMENT_SHIFT))
459 /**< shift by 24 bits */
460
461 #define LAC_MAX_16_BIT_VALUE ((1 << 16) - 1)
462 /**< @ingroup LacCommon
463 * maximum value a 16 bit type can hold */
464
465 /**
466 *******************************************************************************
467 * @ingroup LacCommon
468 * This macro can be used to avoid an unused variable warning from the
469 * compiler
470 *
471 * @param[in] variable unused variable
472 *
473 ******************************************************************************/
474 #define LAC_UNUSED_VARIABLE(x) (void)(x)
475
476 /**
477 *******************************************************************************
478 * @ingroup LacCommon
479 * This macro checks if an address is aligned to the specified power of 2
480 * Returns 0 if alignment is ok, or non-zero otherwise
481 *
482 * @param[in] address the address we are checking
483 *
484 * @param[in] alignment the byte alignment to check (specified as power of 2)
485 *
486 ******************************************************************************/
487 #define LAC_ADDRESS_ALIGNED(address, alignment) \
488 (!((LAC_ARCH_UINT)(address) & ((1 << (alignment)) - 1)))
489
490 /**
491 *******************************************************************************
492 * @ingroup LacCommon
493 * This macro rounds up a number to a be a multiple of the alignment when
494 * the alignment is a power of 2.
495 *
496 * @param[in] num Number
497 * @param[in] align Alignment (must be a power of 2)
498 *
499 ******************************************************************************/
500 #define LAC_ALIGN_POW2_ROUNDUP(num, align) (((num) + (align)-1) & ~((align)-1))
501
502 /**
503 *******************************************************************************
504 * @ingroup LacCommon
505 * This macro generates a bit mask to select a particular bit
506 *
507 * @param[in] bitPos Bit position to select
508 *
509 ******************************************************************************/
510 #define LAC_BIT(bitPos) (0x1 << (bitPos))
511
512 /**
513 *******************************************************************************
514 * @ingroup LacCommon
515 * This macro converts a size in bits to the equivalent size in bytes,
516 * using a bit shift to divide by 8
517 *
518 * @param[in] x size in bits
519 *
520 ******************************************************************************/
521 #define LAC_BITS_TO_BYTES(x) ((x) >> 3)
522
523 /**
524 *******************************************************************************
525 * @ingroup LacCommon
526 * This macro converts a size in bytes to the equivalent size in bits,
527 * using a bit shift to multiply by 8
528 *
529 * @param[in] x size in bytes
530 *
531 ******************************************************************************/
532 #define LAC_BYTES_TO_BITS(x) ((x) << 3)
533
534 /**
535 *******************************************************************************
536 * @ingroup LacCommon
537 * This macro converts a size in bytes to the equivalent size in longwords,
538 * using a bit shift to divide by 4
539 *
540 * @param[in] x size in bytes
541 *
542 ******************************************************************************/
543 #define LAC_BYTES_TO_LONGWORDS(x) ((x) >> 2)
544
545 /**
546 *******************************************************************************
547 * @ingroup LacCommon
548 * This macro converts a size in longwords to the equivalent size in bytes,
549 * using a bit shift to multiply by 4
550 *
551 * @param[in] x size in long words
552 *
553 ******************************************************************************/
554 #define LAC_LONGWORDS_TO_BYTES(x) ((x) << 2)
555
556 /**
557 *******************************************************************************
558 * @ingroup LacCommon
559 * This macro converts a size in bytes to the equivalent size in quadwords,
560 * using a bit shift to divide by 8
561 *
562 * @param[in] x size in bytes
563 *
564 ******************************************************************************/
565 #define LAC_BYTES_TO_QUADWORDS(x) (((x) >> 3) + (((x) % 8) ? 1 : 0))
566
567 /**
568 *******************************************************************************
569 * @ingroup LacCommon
570 * This macro converts a size in quadwords to the equivalent size in bytes,
571 * using a bit shift to multiply by 8
572 *
573 * @param[in] x size in quad words
574 *
575 ******************************************************************************/
576 #define LAC_QUADWORDS_TO_BYTES(x) ((x) << 3)
577
578
579 /******************************************************************************/
580
581 /*
582 *******************************************************************************
583 * Mutex Macros
584 *******************************************************************************
585 */
586
587 /**
588 *******************************************************************************
589 * @ingroup LacCommon
590 * This macro tries to acquire a mutex and returns the status
591 *
592 * @param[in] pLock Pointer to Lock
593 * @param[in] timeout Timeout
594 *
595 * @retval CPA_STATUS_SUCCESS Function executed successfully.
596 * @retval CPA_STATUS_RESOURCE Error with Mutex
597 ******************************************************************************/
598 #define LAC_LOCK_MUTEX(pLock, timeout) \
599 ((CPA_STATUS_SUCCESS != qatUtilsMutexLock((pLock), (timeout))) ? \
600 CPA_STATUS_RESOURCE : \
601 CPA_STATUS_SUCCESS)
602
603 /**
604 *******************************************************************************
605 * @ingroup LacCommon
606 * This macro unlocks a mutex and returns the status
607 *
608 * @param[in] pLock Pointer to Lock
609 *
610 * @retval CPA_STATUS_SUCCESS Function executed successfully.
611 * @retval CPA_STATUS_RESOURCE Error with Mutex
612 ******************************************************************************/
613 #define LAC_UNLOCK_MUTEX(pLock) \
614 ((CPA_STATUS_SUCCESS != qatUtilsMutexUnlock((pLock))) ? \
615 CPA_STATUS_RESOURCE : \
616 CPA_STATUS_SUCCESS)
617
618 /**
619 *******************************************************************************
620 * @ingroup LacCommon
621 * This macro initialises a mutex and returns the status
622 *
623 * @param[in] pLock Pointer to Lock
624 *
625 * @retval CPA_STATUS_SUCCESS Function executed successfully.
626 * @retval CPA_STATUS_RESOURCE Error with Mutex
627 ******************************************************************************/
628 #define LAC_INIT_MUTEX(pLock) \
629 ((CPA_STATUS_SUCCESS != qatUtilsMutexInit((pLock))) ? \
630 CPA_STATUS_RESOURCE : \
631 CPA_STATUS_SUCCESS)
632
633 /**
634 *******************************************************************************
635 * @ingroup LacCommon
636 * This macro destroys a mutex and returns the status
637 *
638 * @param[in] pLock Pointer to Lock
639 *
640 * @retval CPA_STATUS_SUCCESS Function executed successfully.
641 * @retval CPA_STATUS_RESOURCE Error with Mutex
642 ******************************************************************************/
643 #define LAC_DESTROY_MUTEX(pLock) \
644 ((CPA_STATUS_SUCCESS != qatUtilsMutexDestroy((pLock))) ? \
645 CPA_STATUS_RESOURCE : \
646 CPA_STATUS_SUCCESS)
647
648 /**
649 *******************************************************************************
650 * @ingroup LacCommon
651 * This macro calls a trylock on a mutex
652 *
653 * @param[in] pLock Pointer to Lock
654 *
655 * @retval CPA_STATUS_SUCCESS Function executed successfully.
656 * @retval CPA_STATUS_RESOURCE Error with Mutex
657 ******************************************************************************/
658 #define LAC_TRYLOCK_MUTEX(pLock) \
659 ((CPA_STATUS_SUCCESS != \
660 qatUtilsMutexTryLock((pLock), QAT_UTILS_WAIT_NONE)) ? \
661 CPA_STATUS_RESOURCE : \
662 CPA_STATUS_SUCCESS)
663
664 /*
665 *******************************************************************************
666 * Semaphore Macros
667 *******************************************************************************
668 */
669
670 /**
671 *******************************************************************************
672 * @ingroup LacCommon
673 * This macro waits on a semaphore and returns the status
674 *
675 * @param[in] sid The semaphore
676 * @param[in] timeout Timeout
677 *
678 * @retval CPA_STATUS_SUCCESS Function executed successfully.
679 * @retval CPA_STATUS_RESOURCE Error with semaphore
680 ******************************************************************************/
681 #define LAC_WAIT_SEMAPHORE(sid, timeout) \
682 ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreWait(&sid, (timeout))) ? \
683 CPA_STATUS_RESOURCE : \
684 CPA_STATUS_SUCCESS)
685
686 /**
687 *******************************************************************************
688 * @ingroup LacCommon
689 * This macro checks a semaphore and returns the status
690 *
691 * @param[in] sid The semaphore
692 *
693 * @retval CPA_STATUS_SUCCESS Function executed successfully.
694 * @retval CPA_STATUS_RESOURCE Error with semaphore
695 ******************************************************************************/
696 #define LAC_CHECK_SEMAPHORE(sid) \
697 ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreTryWait(&sid)) ? \
698 CPA_STATUS_RETRY : \
699 CPA_STATUS_SUCCESS)
700
701 /**
702 *******************************************************************************
703 * @ingroup LacCommon
704 * This macro post a semaphore and returns the status
705 *
706 * @param[in] sid The semaphore
707 *
708 * @retval CPA_STATUS_SUCCESS Function executed successfully.
709 * @retval CPA_STATUS_RESOURCE Error with semaphore
710 ******************************************************************************/
711 #define LAC_POST_SEMAPHORE(sid) \
712 ((CPA_STATUS_SUCCESS != qatUtilsSemaphorePost(&sid)) ? \
713 CPA_STATUS_RESOURCE : \
714 CPA_STATUS_SUCCESS)
715 /**
716 *******************************************************************************
717 * @ingroup LacCommon
718 * This macro initialises a semaphore and returns the status
719 *
720 * @param[in] sid The semaphore
721 * @param[in] semValue Initial semaphore value
722 *
723 * @retval CPA_STATUS_SUCCESS Function executed successfully.
724 * @retval CPA_STATUS_RESOURCE Error with semaphore
725 ******************************************************************************/
726 #define LAC_INIT_SEMAPHORE(sid, semValue) \
727 ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreInit(&sid, semValue)) ? \
728 CPA_STATUS_RESOURCE : \
729 CPA_STATUS_SUCCESS)
730
731 /**
732 *******************************************************************************
733 * @ingroup LacCommon
734 * This macro destroys a semaphore and returns the status
735 *
736 * @param[in] sid The semaphore
737 *
738 * @retval CPA_STATUS_SUCCESS Function executed successfully.
739 * @retval CPA_STATUS_RESOURCE Error with semaphore
740 ******************************************************************************/
741 #define LAC_DESTROY_SEMAPHORE(sid) \
742 ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreDestroy(&sid)) ? \
743 CPA_STATUS_RESOURCE : \
744 CPA_STATUS_SUCCESS)
745
746 /*
747 *******************************************************************************
748 * Spinlock Macros
749 *******************************************************************************
750 */
751 typedef struct mtx *lac_lock_t;
752 #define LAC_SPINLOCK_INIT(lock) \
753 ((CPA_STATUS_SUCCESS != qatUtilsLockInit(lock)) ? \
754 CPA_STATUS_RESOURCE : \
755 CPA_STATUS_SUCCESS)
756 #define LAC_SPINLOCK(lock) \
757 ({ \
758 (void)qatUtilsLock(lock); \
759 })
760 #define LAC_SPINUNLOCK(lock) \
761 ({ \
762 (void)qatUtilsUnlock(lock); \
763 })
764 #define LAC_SPINLOCK_DESTROY(lock) \
765 ({ \
766 (void)qatUtilsLockDestroy(lock); \
767 })
768
769 #define LAC_CONST_PTR_CAST(castee) ((void *)(LAC_ARCH_UINT)(castee))
770 #define LAC_CONST_VOLATILE_PTR_CAST(castee) ((void *)(LAC_ARCH_UINT)(castee))
771
772 /* Type of ring */
773 #define SAL_RING_TYPE_NONE 0
774 #define SAL_RING_TYPE_A_SYM_HI 1
775 #define SAL_RING_TYPE_A_SYM_LO 2
776 #define SAL_RING_TYPE_A_ASYM 3
777 #define SAL_RING_TYPE_B_SYM_HI 4
778 #define SAL_RING_TYPE_B_SYM_LO 5
779 #define SAL_RING_TYPE_B_ASYM 6
780 #define SAL_RING_TYPE_DC 7
781 #define SAL_RING_TYPE_ADMIN 8
782 #define SAL_RING_TYPE_TRNG 9
783
784 /* Maps Ring Service to generic service type */
785 static inline icp_adf_ringInfoService_t
786 lac_getRingType(int type)
787 {
788 switch (type) {
789 case SAL_RING_TYPE_NONE:
790 return ICP_ADF_RING_SERVICE_0;
791 case SAL_RING_TYPE_A_SYM_HI:
792 return ICP_ADF_RING_SERVICE_1;
793 case SAL_RING_TYPE_A_SYM_LO:
794 return ICP_ADF_RING_SERVICE_2;
795 case SAL_RING_TYPE_A_ASYM:
796 return ICP_ADF_RING_SERVICE_3;
797 case SAL_RING_TYPE_B_SYM_HI:
798 return ICP_ADF_RING_SERVICE_4;
799 case SAL_RING_TYPE_B_SYM_LO:
800 return ICP_ADF_RING_SERVICE_5;
801 case SAL_RING_TYPE_B_ASYM:
802 return ICP_ADF_RING_SERVICE_6;
803 case SAL_RING_TYPE_DC:
804 return ICP_ADF_RING_SERVICE_7;
805 case SAL_RING_TYPE_ADMIN:
806 return ICP_ADF_RING_SERVICE_8;
807 case SAL_RING_TYPE_TRNG:
808 return ICP_ADF_RING_SERVICE_9;
809 default:
810 return ICP_ADF_RING_SERVICE_0;
811 }
812 return ICP_ADF_RING_SERVICE_0;
813 }
814
815 /* Maps generic service type to Ring Service type */
816 static inline int
817 lac_getServiceType(icp_adf_ringInfoService_t type)
818 {
819 switch (type) {
820 case ICP_ADF_RING_SERVICE_0:
821 return SAL_RING_TYPE_NONE;
822 case ICP_ADF_RING_SERVICE_1:
823 return SAL_RING_TYPE_A_SYM_HI;
824 case ICP_ADF_RING_SERVICE_2:
825 return SAL_RING_TYPE_A_SYM_LO;
826 case ICP_ADF_RING_SERVICE_3:
827 return SAL_RING_TYPE_A_ASYM;
828 case ICP_ADF_RING_SERVICE_4:
829 return SAL_RING_TYPE_B_SYM_HI;
830 case ICP_ADF_RING_SERVICE_5:
831 return SAL_RING_TYPE_B_SYM_LO;
832 case ICP_ADF_RING_SERVICE_6:
833 return SAL_RING_TYPE_B_ASYM;
834 case ICP_ADF_RING_SERVICE_7:
835 return SAL_RING_TYPE_DC;
836 case ICP_ADF_RING_SERVICE_8:
837 return SAL_RING_TYPE_ADMIN;
838 default:
839 return SAL_RING_TYPE_NONE;
840 }
841 return SAL_RING_TYPE_NONE;
842 }
843
844 #endif /* LAC_COMMON_H */
Cache object: 5a088b861e3a4bd91800ef27fee17ea2
|