LCOV - code coverage report
Current view: top level - drivers/common/dpaax/caamflib - rta.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 8 0.0 %
Date: 2025-02-01 18:54:23 Functions: 0 1 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 4 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
       2                 :            :  *
       3                 :            :  * Copyright 2008-2016 Freescale Semiconductor Inc.
       4                 :            :  * Copyright 2016,2021 NXP
       5                 :            :  *
       6                 :            :  */
       7                 :            : 
       8                 :            : #ifndef __RTA_RTA_H__
       9                 :            : #define __RTA_RTA_H__
      10                 :            : 
      11                 :            : #include "rta/sec_run_time_asm.h"
      12                 :            : #include "rta/fifo_load_store_cmd.h"
      13                 :            : #include "rta/header_cmd.h"
      14                 :            : #include "rta/jump_cmd.h"
      15                 :            : #include "rta/key_cmd.h"
      16                 :            : #include "rta/load_cmd.h"
      17                 :            : #include "rta/math_cmd.h"
      18                 :            : #include "rta/move_cmd.h"
      19                 :            : #include "rta/nfifo_cmd.h"
      20                 :            : #include "rta/operation_cmd.h"
      21                 :            : #include "rta/protocol_cmd.h"
      22                 :            : #include "rta/seq_in_out_ptr_cmd.h"
      23                 :            : #include "rta/signature_cmd.h"
      24                 :            : #include "rta/store_cmd.h"
      25                 :            : 
      26                 :            : /**
      27                 :            :  * DOC: About
      28                 :            :  *
      29                 :            :  * RTA (Runtime Assembler) Library is an easy and flexible runtime method for
      30                 :            :  * writing SEC descriptors. It implements a thin abstraction layer above
      31                 :            :  * SEC commands set; the resulting code is compact and similar to a
      32                 :            :  * descriptor sequence.
      33                 :            :  *
      34                 :            :  * RTA library improves comprehension of the SEC code, adds flexibility for
      35                 :            :  * writing complex descriptors and keeps the code lightweight. Should be used
      36                 :            :  * by whom needs to encode descriptors at runtime, with comprehensible flow
      37                 :            :  * control in descriptor.
      38                 :            :  */
      39                 :            : 
      40                 :            : /**
      41                 :            :  * DOC: Usage
      42                 :            :  *
      43                 :            :  * RTA is used in kernel space by the SEC / CAAM (Cryptographic Acceleration and
      44                 :            :  * Assurance Module) kernel module (drivers/crypto/caam) and SEC / CAAM QI
      45                 :            :  * kernel module (Freescale QorIQ SDK).
      46                 :            :  *
      47                 :            :  * RTA is used in user space by USDPAA - User Space DataPath Acceleration
      48                 :            :  * Architecture (Freescale QorIQ SDK).
      49                 :            :  */
      50                 :            : 
      51                 :            : /**
      52                 :            :  * DOC: Descriptor Buffer Management Routines
      53                 :            :  *
      54                 :            :  * Contains details of RTA descriptor buffer management and SEC Era
      55                 :            :  * management routines.
      56                 :            :  */
      57                 :            : 
      58                 :            : /**
      59                 :            :  * PROGRAM_CNTXT_INIT - must be called before any descriptor run-time assembly
      60                 :            :  *                      call type field carry info i.e. whether descriptor is
      61                 :            :  *                      shared or job descriptor.
      62                 :            :  * @program: pointer to struct program
      63                 :            :  * @buffer: input buffer where the descriptor will be placed (uint32_t *)
      64                 :            :  * @offset: offset in input buffer from where the data will be written
      65                 :            :  *          (unsigned int)
      66                 :            :  */
      67                 :            : #define PROGRAM_CNTXT_INIT(program, buffer, offset) \
      68                 :            :         rta_program_cntxt_init(program, buffer, offset)
      69                 :            : 
      70                 :            : /**
      71                 :            :  * PROGRAM_FINALIZE - must be called to mark completion of RTA call.
      72                 :            :  * @program: pointer to struct program
      73                 :            :  *
      74                 :            :  * Return: total size of the descriptor in words or negative number on error.
      75                 :            :  */
      76                 :            : #define PROGRAM_FINALIZE(program) rta_program_finalize(program)
      77                 :            : 
      78                 :            : /**
      79                 :            :  * PROGRAM_SET_36BIT_ADDR - must be called to set pointer size to 36 bits
      80                 :            :  * @program: pointer to struct program
      81                 :            :  *
      82                 :            :  * Return: current size of the descriptor in words (unsigned int).
      83                 :            :  */
      84                 :            : #define PROGRAM_SET_36BIT_ADDR(program) rta_program_set_36bit_addr(program)
      85                 :            : 
      86                 :            : /**
      87                 :            :  * PROGRAM_SET_BSWAP - must be called to enable byte swapping
      88                 :            :  * @program: pointer to struct program
      89                 :            :  *
      90                 :            :  * Byte swapping on a 4-byte boundary will be performed at the end - when
      91                 :            :  * calling PROGRAM_FINALIZE().
      92                 :            :  *
      93                 :            :  * Return: current size of the descriptor in words (unsigned int).
      94                 :            :  */
      95                 :            : #define PROGRAM_SET_BSWAP(program) rta_program_set_bswap(program)
      96                 :            : 
      97                 :            : /**
      98                 :            :  * WORD - must be called to insert in descriptor buffer a 32bit value
      99                 :            :  * @program: pointer to struct program
     100                 :            :  * @val: input value to be written in descriptor buffer (uint32_t)
     101                 :            :  *
     102                 :            :  * Return: the descriptor buffer offset where this command is inserted
     103                 :            :  * (unsigned int).
     104                 :            :  */
     105                 :            : #define WORD(program, val) rta_word(program, val)
     106                 :            : 
     107                 :            : /**
     108                 :            :  * DWORD - must be called to insert in descriptor buffer a 64bit value
     109                 :            :  * @program: pointer to struct program
     110                 :            :  * @val: input value to be written in descriptor buffer (uint64_t)
     111                 :            :  *
     112                 :            :  * Return: the descriptor buffer offset where this command is inserted
     113                 :            :  * (unsigned int).
     114                 :            :  */
     115                 :            : #define DWORD(program, val) rta_dword(program, val)
     116                 :            : 
     117                 :            : /**
     118                 :            :  * COPY_DATA - must be called to insert in descriptor buffer data larger than
     119                 :            :  *             64bits.
     120                 :            :  * @program: pointer to struct program
     121                 :            :  * @data: input data to be written in descriptor buffer (uint8_t *)
     122                 :            :  * @len: length of input data (unsigned int)
     123                 :            :  *
     124                 :            :  * Return: the descriptor buffer offset where this command is inserted
     125                 :            :  * (unsigned int).
     126                 :            :  */
     127                 :            : #define COPY_DATA(program, data, len) rta_copy_data(program, (data), (len))
     128                 :            : 
     129                 :            : /**
     130                 :            :  * DESC_LEN -  determines job / shared descriptor buffer length (in words)
     131                 :            :  * @buffer: descriptor buffer (uint32_t *)
     132                 :            :  *
     133                 :            :  * Return: descriptor buffer length in words (unsigned int).
     134                 :            :  */
     135                 :            : #define DESC_LEN(buffer) rta_desc_len(buffer)
     136                 :            : 
     137                 :            : /**
     138                 :            :  * DESC_BYTES - determines job / shared descriptor buffer length (in bytes)
     139                 :            :  * @buffer: descriptor buffer (uint32_t *)
     140                 :            :  *
     141                 :            :  * Return: descriptor buffer length in bytes (unsigned int).
     142                 :            :  */
     143                 :            : #define DESC_BYTES(buffer) rta_desc_bytes(buffer)
     144                 :            : 
     145                 :            : /*
     146                 :            :  * SEC HW block revision.
     147                 :            :  *
     148                 :            :  * This *must not be confused with SEC version*:
     149                 :            :  * - SEC HW block revision format is "v"
     150                 :            :  * - SEC revision format is "x.y"
     151                 :            :  */
     152                 :            : extern enum rta_sec_era rta_sec_era;
     153                 :            : 
     154                 :            : /**
     155                 :            :  * rta_set_sec_era - Set SEC Era HW block revision for which the RTA library
     156                 :            :  *                   will generate the descriptors.
     157                 :            :  * @era: SEC Era (enum rta_sec_era)
     158                 :            :  *
     159                 :            :  * Return: 0 if the ERA was set successfully, -1 otherwise (int)
     160                 :            :  *
     161                 :            :  * Warning 1: Must be called *only once*, *before* using any other RTA API
     162                 :            :  * routine.
     163                 :            :  *
     164                 :            :  * Warning 2: *Not thread safe*.
     165                 :            :  */
     166                 :            : static inline int
     167                 :          0 : rta_set_sec_era(enum rta_sec_era era)
     168                 :            : {
     169         [ #  # ]:          0 :         if (era > MAX_SEC_ERA) {
     170                 :          0 :                 rta_sec_era = DEFAULT_SEC_ERA;
     171                 :          0 :                 pr_err("Unsupported SEC ERA. Defaulting to ERA %d\n",
     172                 :            :                        DEFAULT_SEC_ERA + 1);
     173                 :          0 :                 return -1;
     174                 :            :         }
     175                 :            : 
     176                 :          0 :         rta_sec_era = era;
     177                 :          0 :         return 0;
     178                 :            : }
     179                 :            : 
     180                 :            : /**
     181                 :            :  * rta_get_sec_era - Get SEC Era HW block revision for which the RTA library
     182                 :            :  *                   will generate the descriptors.
     183                 :            :  *
     184                 :            :  * Return: SEC Era (unsigned int).
     185                 :            :  */
     186                 :            : static inline unsigned int
     187                 :            : rta_get_sec_era(void)
     188                 :            : {
     189         [ #  # ]:          0 :         return rta_sec_era;
     190                 :            : }
     191                 :            : 
     192                 :            : /**
     193                 :            :  * DOC: SEC Commands Routines
     194                 :            :  *
     195                 :            :  * Contains details of RTA wrapper routines over SEC engine commands.
     196                 :            :  */
     197                 :            : 
     198                 :            : /**
     199                 :            :  * SHR_HDR - Configures Shared Descriptor HEADER command
     200                 :            :  * @program: pointer to struct program
     201                 :            :  * @share: descriptor share state (enum rta_share_type)
     202                 :            :  * @start_idx: index in descriptor buffer where the execution of the shared
     203                 :            :  *             descriptor should start (@c unsigned int).
     204                 :            :  * @flags: operational flags: RIF, DNR, CIF, SC, PD
     205                 :            :  *
     206                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     207                 :            :  *         On error, a negative error code; first error program counter will
     208                 :            :  *         point to offset in descriptor buffer where the instruction should
     209                 :            :  *         have been written.
     210                 :            :  */
     211                 :            : #define SHR_HDR(program, share, start_idx, flags) \
     212                 :            :         rta_shr_header(program, share, start_idx, flags)
     213                 :            : 
     214                 :            : /**
     215                 :            :  * JOB_HDR - Configures JOB Descriptor HEADER command
     216                 :            :  * @program: pointer to struct program
     217                 :            :  * @share: descriptor share state (enum rta_share_type)
     218                 :            :  * @start_idx: index in descriptor buffer where the execution of the job
     219                 :            :  *            descriptor should start (unsigned int). In case SHR bit is present
     220                 :            :  *            in flags, this will be the shared descriptor length.
     221                 :            :  * @share_desc: pointer to shared descriptor, in case SHR bit is set (uint64_t)
     222                 :            :  * @flags: operational flags: RSMS, DNR, TD, MTD, REO, SHR
     223                 :            :  *
     224                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     225                 :            :  *         On error, a negative error code; first error program counter will
     226                 :            :  *         point to offset in descriptor buffer where the instruction should
     227                 :            :  *         have been written.
     228                 :            :  */
     229                 :            : #define JOB_HDR(program, share, start_idx, share_desc, flags) \
     230                 :            :         rta_job_header(program, share, start_idx, share_desc, flags, 0)
     231                 :            : 
     232                 :            : /**
     233                 :            :  * JOB_HDR_EXT - Configures JOB Descriptor HEADER command
     234                 :            :  * @program: pointer to struct program
     235                 :            :  * @share: descriptor share state (enum rta_share_type)
     236                 :            :  * @start_idx: index in descriptor buffer where the execution of the job
     237                 :            :  *            descriptor should start (unsigned int). In case SHR bit is present
     238                 :            :  *            in flags, this will be the shared descriptor length.
     239                 :            :  * @share_desc: pointer to shared descriptor, in case SHR bit is set (uint64_t)
     240                 :            :  * @flags: operational flags: RSMS, DNR, TD, MTD, REO, SHR
     241                 :            :  * @ext_flags: extended header flags: DSV (DECO Select Valid), DECO Id (limited
     242                 :            :  *             by DSEL_MASK).
     243                 :            :  *
     244                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     245                 :            :  *         On error, a negative error code; first error program counter will
     246                 :            :  *         point to offset in descriptor buffer where the instruction should
     247                 :            :  *         have been written.
     248                 :            :  */
     249                 :            : #define JOB_HDR_EXT(program, share, start_idx, share_desc, flags, ext_flags) \
     250                 :            :         rta_job_header(program, share, start_idx, share_desc, flags | EXT, \
     251                 :            :                        ext_flags)
     252                 :            : 
     253                 :            : /**
     254                 :            :  * MOVE - Configures MOVE and MOVE_LEN commands
     255                 :            :  * @program: pointer to struct program
     256                 :            :  * @src: internal source of data that will be moved: CONTEXT1, CONTEXT2, OFIFO,
     257                 :            :  *       DESCBUF, MATH0-MATH3, IFIFOABD, IFIFOAB1, IFIFOAB2, AB1, AB2, ABD.
     258                 :            :  * @src_offset: offset in source data (uint16_t)
     259                 :            :  * @dst: internal destination of data that will be moved: CONTEXT1, CONTEXT2,
     260                 :            :  *       OFIFO, DESCBUF, MATH0-MATH3, IFIFOAB1, IFIFOAB2, IFIFO, PKA, KEY1,
     261                 :            :  *       KEY2, ALTSOURCE.
     262                 :            :  * @dst_offset: offset in destination data (uint16_t)
     263                 :            :  * @length: size of data to be moved: for MOVE must be specified as immediate
     264                 :            :  *          value and IMMED flag must be set; for MOVE_LEN must be specified
     265                 :            :  *          using MATH0-MATH3.
     266                 :            :  * @opt: operational flags: WAITCOMP, FLUSH1, FLUSH2, LAST1, LAST2, SIZE_WORD,
     267                 :            :  *       SIZE_BYTE, SIZE_DWORD, IMMED (not valid for MOVE_LEN).
     268                 :            :  *
     269                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     270                 :            :  *         On error, a negative error code; first error program counter will
     271                 :            :  *         point to offset in descriptor buffer where the instruction should
     272                 :            :  *         have been written.
     273                 :            :  */
     274                 :            : #define MOVE(program, src, src_offset, dst, dst_offset, length, opt) \
     275                 :            :         rta_move(program, __MOVE, src, src_offset, dst, dst_offset, length, opt)
     276                 :            : 
     277                 :            : /**
     278                 :            :  * MOVEB - Configures MOVEB command
     279                 :            :  * @program: pointer to struct program
     280                 :            :  * @src: internal source of data that will be moved: CONTEXT1, CONTEXT2, OFIFO,
     281                 :            :  *       DESCBUF, MATH0-MATH3, IFIFOABD, IFIFOAB1, IFIFOAB2, AB1, AB2, ABD.
     282                 :            :  * @src_offset: offset in source data (uint16_t)
     283                 :            :  * @dst: internal destination of data that will be moved: CONTEXT1, CONTEXT2,
     284                 :            :  *       OFIFO, DESCBUF, MATH0-MATH3, IFIFOAB1, IFIFOAB2, IFIFO, PKA, KEY1,
     285                 :            :  *       KEY2, ALTSOURCE.
     286                 :            :  * @dst_offset: offset in destination data (uint16_t)
     287                 :            :  * @length: size of data to be moved: for MOVE must be specified as immediate
     288                 :            :  *          value and IMMED flag must be set; for MOVE_LEN must be specified
     289                 :            :  *          using MATH0-MATH3.
     290                 :            :  * @opt: operational flags: WAITCOMP, FLUSH1, FLUSH2, LAST1, LAST2, SIZE_WORD,
     291                 :            :  *       SIZE_BYTE, SIZE_DWORD, IMMED (not valid for MOVE_LEN).
     292                 :            :  *
     293                 :            :  * Identical with MOVE command if byte swapping not enabled; else - when src/dst
     294                 :            :  * is descriptor buffer or MATH registers, data type is byte array when MOVE
     295                 :            :  * data type is 4-byte array and vice versa.
     296                 :            :  *
     297                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     298                 :            :  *         On error, a negative error code; first error program counter will
     299                 :            :  *         point to offset in descriptor buffer where the instruction should
     300                 :            :  *         have been written.
     301                 :            :  */
     302                 :            : #define MOVEB(program, src, src_offset, dst, dst_offset, length, opt) \
     303                 :            :         rta_move(program, __MOVEB, src, src_offset, dst, dst_offset, length, \
     304                 :            :                  opt)
     305                 :            : 
     306                 :            : /**
     307                 :            :  * MOVEDW - Configures MOVEDW command
     308                 :            :  * @program: pointer to struct program
     309                 :            :  * @src: internal source of data that will be moved: CONTEXT1, CONTEXT2, OFIFO,
     310                 :            :  *       DESCBUF, MATH0-MATH3, IFIFOABD, IFIFOAB1, IFIFOAB2, AB1, AB2, ABD.
     311                 :            :  * @src_offset: offset in source data (uint16_t)
     312                 :            :  * @dst: internal destination of data that will be moved: CONTEXT1, CONTEXT2,
     313                 :            :  *       OFIFO, DESCBUF, MATH0-MATH3, IFIFOAB1, IFIFOAB2, IFIFO, PKA, KEY1,
     314                 :            :  *       KEY2, ALTSOURCE.
     315                 :            :  * @dst_offset: offset in destination data (uint16_t)
     316                 :            :  * @length: size of data to be moved: for MOVE must be specified as immediate
     317                 :            :  *          value and IMMED flag must be set; for MOVE_LEN must be specified
     318                 :            :  *          using MATH0-MATH3.
     319                 :            :  * @opt: operational flags: WAITCOMP, FLUSH1, FLUSH2, LAST1, LAST2, SIZE_WORD,
     320                 :            :  *       SIZE_BYTE, SIZE_DWORD, IMMED (not valid for MOVE_LEN).
     321                 :            :  *
     322                 :            :  * Identical with MOVE command, with the following differences: data type is
     323                 :            :  * 8-byte array; word swapping is performed when SEC is programmed in little
     324                 :            :  * endian mode.
     325                 :            :  *
     326                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     327                 :            :  *         On error, a negative error code; first error program counter will
     328                 :            :  *         point to offset in descriptor buffer where the instruction should
     329                 :            :  *         have been written.
     330                 :            :  */
     331                 :            : #define MOVEDW(program, src, src_offset, dst, dst_offset, length, opt) \
     332                 :            :         rta_move(program, __MOVEDW, src, src_offset, dst, dst_offset, length, \
     333                 :            :                  opt)
     334                 :            : 
     335                 :            : /**
     336                 :            :  * FIFOLOAD - Configures FIFOLOAD command to load message data, PKHA data, IV,
     337                 :            :  *            ICV, AAD and bit length message data into Input Data FIFO.
     338                 :            :  * @program: pointer to struct program
     339                 :            :  * @data: input data type to store: PKHA registers, IFIFO, MSG1, MSG2,
     340                 :            :  *        MSGOUTSNOOP, MSGINSNOOP, IV1, IV2, AAD1, ICV1, ICV2, BIT_DATA, SKIP.
     341                 :            :  * @src: pointer or actual data in case of immediate load; IMMED, COPY and DCOPY
     342                 :            :  *       flags indicate action taken (inline imm data, inline ptr, inline from
     343                 :            :  *       ptr).
     344                 :            :  * @length: number of bytes to load (uint32_t)
     345                 :            :  * @flags: operational flags: SGF, IMMED, EXT, CLASS1, CLASS2, BOTH, FLUSH1,
     346                 :            :  *         LAST1, LAST2, COPY, DCOPY.
     347                 :            :  *
     348                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     349                 :            :  *         On error, a negative error code; first error program counter will
     350                 :            :  *         point to offset in descriptor buffer where the instruction should
     351                 :            :  *         have been written.
     352                 :            :  */
     353                 :            : #define FIFOLOAD(program, data, src, length, flags) \
     354                 :            :         rta_fifo_load(program, data, src, length, flags)
     355                 :            : 
     356                 :            : /**
     357                 :            :  * SEQFIFOLOAD - Configures SEQ FIFOLOAD command to load message data, PKHA
     358                 :            :  *               data, IV, ICV, AAD and bit length message data into Input Data
     359                 :            :  *               FIFO.
     360                 :            :  * @program: pointer to struct program
     361                 :            :  * @data: input data type to store: PKHA registers, IFIFO, MSG1, MSG2,
     362                 :            :  *        MSGOUTSNOOP, MSGINSNOOP, IV1, IV2, AAD1, ICV1, ICV2, BIT_DATA, SKIP.
     363                 :            :  * @length: number of bytes to load; can be set to 0 for SEQ command w/ VLF set
     364                 :            :  *          (uint32_t).
     365                 :            :  * @flags: operational flags: VLF, CLASS1, CLASS2, BOTH, FLUSH1, LAST1, LAST2,
     366                 :            :  *         AIDF.
     367                 :            :  *
     368                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     369                 :            :  *         On error, a negative error code; first error program counter will
     370                 :            :  *         point to offset in descriptor buffer where the instruction should
     371                 :            :  *         have been written.
     372                 :            :  */
     373                 :            : #define SEQFIFOLOAD(program, data, length, flags) \
     374                 :            :         rta_fifo_load(program, data, NONE, length, flags|SEQ)
     375                 :            : 
     376                 :            : /**
     377                 :            :  * FIFOSTORE - Configures FIFOSTORE command, to move data from Output Data FIFO
     378                 :            :  *             to external memory via DMA.
     379                 :            :  * @program: pointer to struct program
     380                 :            :  * @data: output data type to store: PKHA registers, IFIFO, OFIFO, RNG,
     381                 :            :  *        RNGOFIFO, AFHA_SBOX, MDHA_SPLIT_KEY, MSG, KEY1, KEY2, SKIP.
     382                 :            :  * @encrypt_flags: store data encryption mode: EKT, TK
     383                 :            :  * @dst: pointer to store location (uint64_t)
     384                 :            :  * @length: number of bytes to load (uint32_t)
     385                 :            :  * @flags: operational flags: SGF, CONT, EXT, CLASS1, CLASS2, BOTH
     386                 :            :  *
     387                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     388                 :            :  *         On error, a negative error code; first error program counter will
     389                 :            :  *         point to offset in descriptor buffer where the instruction should
     390                 :            :  *         have been written.
     391                 :            :  */
     392                 :            : #define FIFOSTORE(program, data, encrypt_flags, dst, length, flags) \
     393                 :            :         rta_fifo_store(program, data, encrypt_flags, dst, length, flags)
     394                 :            : 
     395                 :            : /**
     396                 :            :  * SEQFIFOSTORE - Configures SEQ FIFOSTORE command, to move data from Output
     397                 :            :  *                Data FIFO to external memory via DMA.
     398                 :            :  * @program: pointer to struct program
     399                 :            :  * @data: output data type to store: PKHA registers, IFIFO, OFIFO, RNG,
     400                 :            :  *        RNGOFIFO, AFHA_SBOX, MDHA_SPLIT_KEY, MSG, KEY1, KEY2, METADATA, SKIP.
     401                 :            :  * @encrypt_flags: store data encryption mode: EKT, TK
     402                 :            :  * @length: number of bytes to load; can be set to 0 for SEQ command w/ VLF set
     403                 :            :  *          (uint32_t).
     404                 :            :  * @flags: operational flags: VLF, CONT, EXT, CLASS1, CLASS2, BOTH
     405                 :            :  *
     406                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     407                 :            :  *         On error, a negative error code; first error program counter will
     408                 :            :  *         point to offset in descriptor buffer where the instruction should
     409                 :            :  *         have been written.
     410                 :            :  */
     411                 :            : #define SEQFIFOSTORE(program, data, encrypt_flags, length, flags) \
     412                 :            :         rta_fifo_store(program, data, encrypt_flags, 0, length, flags|SEQ)
     413                 :            : 
     414                 :            : /**
     415                 :            :  * KEY - Configures KEY and SEQ KEY commands
     416                 :            :  * @program: pointer to struct program
     417                 :            :  * @key_dst: key store location: KEY1, KEY2, PKE, AFHA_SBOX, MDHA_SPLIT_KEY
     418                 :            :  * @encrypt_flags: key encryption mode: ENC, EKT, TK, NWB, PTS
     419                 :            :  * @src: pointer or actual data in case of immediate load (uint64_t); IMMED,
     420                 :            :  *       COPY and DCOPY flags indicate action taken (inline imm data,
     421                 :            :  *       inline ptr, inline from ptr).
     422                 :            :  * @length: number of bytes to load; can be set to 0 for SEQ command w/ VLF set
     423                 :            :  *          (uint32_t).
     424                 :            :  * @flags: operational flags: for KEY: SGF, IMMED, COPY, DCOPY; for SEQKEY: SEQ,
     425                 :            :  *         VLF, AIDF.
     426                 :            :  *
     427                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     428                 :            :  *         On error, a negative error code; first error program counter will
     429                 :            :  *         point to offset in descriptor buffer where the instruction should
     430                 :            :  *         have been written.
     431                 :            :  */
     432                 :            : #define KEY(program, key_dst, encrypt_flags, src, length, flags) \
     433                 :            :         rta_key(program, key_dst, encrypt_flags, src, length, flags)
     434                 :            : 
     435                 :            : /**
     436                 :            :  * SEQINPTR - Configures SEQ IN PTR command
     437                 :            :  * @program: pointer to struct program
     438                 :            :  * @src: starting address for Input Sequence (uint64_t)
     439                 :            :  * @length: number of bytes in (or to be added to) Input Sequence (uint32_t)
     440                 :            :  * @flags: operational flags: RBS, INL, SGF, PRE, EXT, RTO, RJD, SOP (when PRE,
     441                 :            :  *         RTO or SOP are set, @src parameter must be 0).
     442                 :            :  *
     443                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     444                 :            :  *         On error, a negative error code; first error program counter will
     445                 :            :  *         point to offset in descriptor buffer where the instruction should
     446                 :            :  *         have been written.
     447                 :            :  */
     448                 :            : #define SEQINPTR(program, src, length, flags) \
     449                 :            :         rta_seq_in_ptr(program, src, length, flags)
     450                 :            : 
     451                 :            : /**
     452                 :            :  * SEQOUTPTR - Configures SEQ OUT PTR command
     453                 :            :  * @program: pointer to struct program
     454                 :            :  * @dst: starting address for Output Sequence (uint64_t)
     455                 :            :  * @length: number of bytes in (or to be added to) Output Sequence (uint32_t)
     456                 :            :  * @flags: operational flags: SGF, PRE, EXT, RTO, RST, EWS (when PRE or RTO are
     457                 :            :  *         set, @dst parameter must be 0).
     458                 :            :  *
     459                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     460                 :            :  *         On error, a negative error code; first error program counter will
     461                 :            :  *         point to offset in descriptor buffer where the instruction should
     462                 :            :  *         have been written.
     463                 :            :  */
     464                 :            : #define SEQOUTPTR(program, dst, length, flags) \
     465                 :            :         rta_seq_out_ptr(program, dst, length, flags)
     466                 :            : 
     467                 :            : /**
     468                 :            :  * ALG_OPERATION - Configures ALGORITHM OPERATION command
     469                 :            :  * @program: pointer to struct program
     470                 :            :  * @cipher_alg: algorithm to be used
     471                 :            :  * @aai: Additional Algorithm Information; contains mode information that is
     472                 :            :  *       associated with the algorithm (check desc.h for specific values).
     473                 :            :  * @algo_state: algorithm state; defines the state of the algorithm that is
     474                 :            :  *              being executed (check desc.h file for specific values).
     475                 :            :  * @icv_check: ICV checking; selects whether the algorithm should check
     476                 :            :  *             calculated ICV with known ICV: ICV_CHECK_ENABLE,
     477                 :            :  *             ICV_CHECK_DISABLE.
     478                 :            :  * @enc: selects between encryption and decryption: DIR_ENC, DIR_DEC
     479                 :            :  *
     480                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     481                 :            :  *         On error, a negative error code; first error program counter will
     482                 :            :  *         point to offset in descriptor buffer where the instruction should
     483                 :            :  *         have been written.
     484                 :            :  */
     485                 :            : #define ALG_OPERATION(program, cipher_alg, aai, algo_state, icv_check, enc) \
     486                 :            :         rta_operation(program, cipher_alg, aai, algo_state, icv_check, enc)
     487                 :            : 
     488                 :            : #define ALG_OPERATION_NP(program, cipher_alg, aai, algo_state, icv_check, enc) \
     489                 :            :         rta_operation2(program, cipher_alg, aai, algo_state, icv_check, enc)
     490                 :            : 
     491                 :            : /**
     492                 :            :  * PROTOCOL - Configures PROTOCOL OPERATION command
     493                 :            :  * @program: pointer to struct program
     494                 :            :  * @optype: operation type: OP_TYPE_UNI_PROTOCOL / OP_TYPE_DECAP_PROTOCOL /
     495                 :            :  *          OP_TYPE_ENCAP_PROTOCOL.
     496                 :            :  * @protid: protocol identifier value (check desc.h file for specific values)
     497                 :            :  * @protoinfo: protocol dependent value (check desc.h file for specific values)
     498                 :            :  *
     499                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     500                 :            :  *         On error, a negative error code; first error program counter will
     501                 :            :  *         point to offset in descriptor buffer where the instruction should
     502                 :            :  *         have been written.
     503                 :            :  */
     504                 :            : #define PROTOCOL(program, optype, protid, protoinfo) \
     505                 :            :         rta_proto_operation(program, optype, protid, protoinfo)
     506                 :            : 
     507                 :            : /**
     508                 :            :  * DKP_PROTOCOL - Configures DKP (Derived Key Protocol) PROTOCOL command
     509                 :            :  * @program: pointer to struct program
     510                 :            :  * @protid: protocol identifier value - one of the following:
     511                 :            :  *          OP_PCLID_DKP_{MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512}
     512                 :            :  * @key_src: How the initial ("negotiated") key is provided to the DKP protocol.
     513                 :            :  *           Valid values - one of OP_PCL_DKP_SRC_{IMM, SEQ, PTR, SGF}. Not all
     514                 :            :  *           (key_src,key_dst) combinations are allowed.
     515                 :            :  * @key_dst: How the derived ("split") key is returned by the DKP protocol.
     516                 :            :  *           Valid values - one of OP_PCL_DKP_DST_{IMM, SEQ, PTR, SGF}. Not all
     517                 :            :  *           (key_src,key_dst) combinations are allowed.
     518                 :            :  * @keylen: length of the initial key, in bytes (uint16_t)
     519                 :            :  * @key: address where algorithm key resides; virtual address if key_type is
     520                 :            :  *       RTA_DATA_IMM, physical (bus) address if key_type is RTA_DATA_PTR or
     521                 :            :  *       RTA_DATA_IMM_DMA.
     522                 :            :  * @key_type: enum rta_data_type
     523                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     524                 :            :  *         On error, a negative error code; first error program counter will
     525                 :            :  *         point to offset in descriptor buffer where the instruction should
     526                 :            :  *         have been written.
     527                 :            :  */
     528                 :            : #define DKP_PROTOCOL(program, protid, key_src, key_dst, keylen, key, key_type) \
     529                 :            :         rta_dkp_proto(program, protid, key_src, key_dst, keylen, key, key_type)
     530                 :            : 
     531                 :            : /**
     532                 :            :  * PKHA_OPERATION - Configures PKHA OPERATION command
     533                 :            :  * @program: pointer to struct program
     534                 :            :  * @op_pkha: PKHA operation; indicates the modular arithmetic function to
     535                 :            :  *           execute (check desc.h file for specific values).
     536                 :            :  *
     537                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     538                 :            :  *         On error, a negative error code; first error program counter will
     539                 :            :  *         point to offset in descriptor buffer where the instruction should
     540                 :            :  *         have been written.
     541                 :            :  */
     542                 :            : #define PKHA_OPERATION(program, op_pkha)   rta_pkha_operation(program, op_pkha)
     543                 :            : 
     544                 :            : /**
     545                 :            :  * JUMP - Configures JUMP command
     546                 :            :  * @program: pointer to struct program
     547                 :            :  * @addr: local offset for local jumps or address pointer for non-local jumps;
     548                 :            :  *        IMM or PTR macros must be used to indicate type.
     549                 :            :  * @jump_type: type of action taken by jump (enum rta_jump_type)
     550                 :            :  * @test_type: defines how jump conditions are evaluated (enum rta_jump_cond)
     551                 :            :  * @cond: jump conditions: operational flags - DONE1, DONE2, BOTH; various
     552                 :            :  *        sharing and wait conditions (JSL = 1) - NIFP, NIP, NOP, NCP, CALM,
     553                 :            :  *        SELF, SHARED, JQP; Math and PKHA status conditions (JSL = 0) - Z, N,
     554                 :            :  *        NV, C, PK0, PK1, PKP.
     555                 :            :  *
     556                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     557                 :            :  *         On error, a negative error code; first error program counter will
     558                 :            :  *         point to offset in descriptor buffer where the instruction should
     559                 :            :  *         have been written.
     560                 :            :  */
     561                 :            : #define JUMP(program, addr, jump_type, test_type, cond) \
     562                 :            :         rta_jump(program, addr, jump_type, test_type, cond, NONE)
     563                 :            : 
     564                 :            : /**
     565                 :            :  * JUMP_INC - Configures JUMP_INC command
     566                 :            :  * @program: pointer to struct program
     567                 :            :  * @addr: local offset; IMM or PTR macros must be used to indicate type
     568                 :            :  * @test_type: defines how jump conditions are evaluated (enum rta_jump_cond)
     569                 :            :  * @cond: jump conditions: Math status conditions (JSL = 0): Z, N, NV, C
     570                 :            :  * @src_dst: register to increment / decrement: MATH0-MATH3, DPOVRD, SEQINSZ,
     571                 :            :  *           SEQOUTSZ, VSEQINSZ, VSEQOUTSZ.
     572                 :            :  *
     573                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     574                 :            :  *         On error, a negative error code; first error program counter will
     575                 :            :  *         point to offset in descriptor buffer where the instruction should
     576                 :            :  *         have been written.
     577                 :            :  */
     578                 :            : #define JUMP_INC(program, addr, test_type, cond, src_dst) \
     579                 :            :         rta_jump(program, addr, LOCAL_JUMP_INC, test_type, cond, src_dst)
     580                 :            : 
     581                 :            : /**
     582                 :            :  * JUMP_DEC - Configures JUMP_DEC command
     583                 :            :  * @program: pointer to struct program
     584                 :            :  * @addr: local offset; IMM or PTR macros must be used to indicate type
     585                 :            :  * @test_type: defines how jump conditions are evaluated (enum rta_jump_cond)
     586                 :            :  * @cond: jump conditions: Math status conditions (JSL = 0): Z, N, NV, C
     587                 :            :  * @src_dst: register to increment / decrement: MATH0-MATH3, DPOVRD, SEQINSZ,
     588                 :            :  *           SEQOUTSZ, VSEQINSZ, VSEQOUTSZ.
     589                 :            :  *
     590                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     591                 :            :  *         On error, a negative error code; first error program counter will
     592                 :            :  *         point to offset in descriptor buffer where the instruction should
     593                 :            :  *         have been written.
     594                 :            :  */
     595                 :            : #define JUMP_DEC(program, addr, test_type, cond, src_dst) \
     596                 :            :         rta_jump(program, addr, LOCAL_JUMP_DEC, test_type, cond, src_dst)
     597                 :            : 
     598                 :            : /**
     599                 :            :  * LOAD - Configures LOAD command to load data registers from descriptor or from
     600                 :            :  *        a memory location.
     601                 :            :  * @program: pointer to struct program
     602                 :            :  * @addr: immediate value or pointer to the data to be loaded; IMMED, COPY and
     603                 :            :  *        DCOPY flags indicate action taken (inline imm data, inline ptr, inline
     604                 :            :  *        from ptr).
     605                 :            :  * @dst: destination register (uint64_t)
     606                 :            :  * @offset: start point to write data in destination register (uint32_t)
     607                 :            :  * @length: number of bytes to load (uint32_t)
     608                 :            :  * @flags: operational flags: VLF, IMMED, COPY, DCOPY
     609                 :            :  *
     610                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     611                 :            :  *         On error, a negative error code; first error program counter will
     612                 :            :  *         point to offset in descriptor buffer where the instruction should
     613                 :            :  *         have been written.
     614                 :            :  */
     615                 :            : #define LOAD(program, addr, dst, offset, length, flags) \
     616                 :            :         rta_load(program, addr, dst, offset, length, flags)
     617                 :            : 
     618                 :            : /**
     619                 :            :  * SEQLOAD - Configures SEQ LOAD command to load data registers from descriptor
     620                 :            :  *           or from a memory location.
     621                 :            :  * @program: pointer to struct program
     622                 :            :  * @dst: destination register (uint64_t)
     623                 :            :  * @offset: start point to write data in destination register (uint32_t)
     624                 :            :  * @length: number of bytes to load (uint32_t)
     625                 :            :  * @flags: operational flags: SGF
     626                 :            :  *
     627                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     628                 :            :  *         On error, a negative error code; first error program counter will
     629                 :            :  *         point to offset in descriptor buffer where the instruction should
     630                 :            :  *         have been written.
     631                 :            :  */
     632                 :            : #define SEQLOAD(program, dst, offset, length, flags) \
     633                 :            :         rta_load(program, NONE, dst, offset, length, flags|SEQ)
     634                 :            : 
     635                 :            : /**
     636                 :            :  * STORE - Configures STORE command to read data from registers and write them
     637                 :            :  *         to a memory location.
     638                 :            :  * @program: pointer to struct program
     639                 :            :  * @src: immediate value or source register for data to be stored: KEY1SZ,
     640                 :            :  *       KEY2SZ, DJQDA, MODE1, MODE2, DJQCTRL, DATA1SZ, DATA2SZ, DSTAT, ICV1SZ,
     641                 :            :  *       ICV2SZ, DPID, CCTRL, ICTRL, CLRW, CSTAT, MATH0-MATH3, PKHA registers,
     642                 :            :  *       CONTEXT1, CONTEXT2, DESCBUF, JOBDESCBUF, SHAREDESCBUF. In case of
     643                 :            :  *       immediate value, IMMED, COPY and DCOPY flags indicate action taken
     644                 :            :  *       (inline imm data, inline ptr, inline from ptr).
     645                 :            :  * @offset: start point for reading from source register (uint16_t)
     646                 :            :  * @dst: pointer to store location (uint64_t)
     647                 :            :  * @length: number of bytes to store (uint32_t)
     648                 :            :  * @flags: operational flags: VLF, IMMED, COPY, DCOPY
     649                 :            :  *
     650                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     651                 :            :  *         On error, a negative error code; first error program counter will
     652                 :            :  *         point to offset in descriptor buffer where the instruction should
     653                 :            :  *         have been written.
     654                 :            :  */
     655                 :            : #define STORE(program, src, offset, dst, length, flags) \
     656                 :            :         rta_store(program, src, offset, dst, length, flags)
     657                 :            : 
     658                 :            : /**
     659                 :            :  * SEQSTORE - Configures SEQ STORE command to read data from registers and write
     660                 :            :  *            them to a memory location.
     661                 :            :  * @program: pointer to struct program
     662                 :            :  * @src: immediate value or source register for data to be stored: KEY1SZ,
     663                 :            :  *       KEY2SZ, DJQDA, MODE1, MODE2, DJQCTRL, DATA1SZ, DATA2SZ, DSTAT, ICV1SZ,
     664                 :            :  *       ICV2SZ, DPID, CCTRL, ICTRL, CLRW, CSTAT, MATH0-MATH3, PKHA registers,
     665                 :            :  *       CONTEXT1, CONTEXT2, DESCBUF, JOBDESCBUF, SHAREDESCBUF. In case of
     666                 :            :  *       immediate value, IMMED, COPY and DCOPY flags indicate action taken
     667                 :            :  *       (inline imm data, inline ptr, inline from ptr).
     668                 :            :  * @offset: start point for reading from source register (uint16_t)
     669                 :            :  * @length: number of bytes to store (uint32_t)
     670                 :            :  * @flags: operational flags: SGF, IMMED, COPY, DCOPY
     671                 :            :  *
     672                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     673                 :            :  *         On error, a negative error code; first error program counter will
     674                 :            :  *         point to offset in descriptor buffer where the instruction should
     675                 :            :  *         have been written.
     676                 :            :  */
     677                 :            : #define SEQSTORE(program, src, offset, length, flags) \
     678                 :            :         rta_store(program, src, offset, NONE, length, flags|SEQ)
     679                 :            : 
     680                 :            : /**
     681                 :            :  * MATHB - Configures MATHB command to perform binary operations
     682                 :            :  * @program: pointer to struct program
     683                 :            :  * @operand1: first operand: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ, VSEQINSZ,
     684                 :            :  *            VSEQOUTSZ, ZERO, ONE, NONE, Immediate value. IMMED must be used to
     685                 :            :  *            indicate immediate value.
     686                 :            :  * @operator: function to be performed: ADD, ADDC, SUB, SUBB, OR, AND, XOR,
     687                 :            :  *            LSHIFT, RSHIFT, SHLD.
     688                 :            :  * @operand2: second operand: MATH0-MATH3, DPOVRD, VSEQINSZ, VSEQOUTSZ, ABD,
     689                 :            :  *            OFIFO, JOBSRC, ZERO, ONE, Immediate value. IMMED2 must be used to
     690                 :            :  *            indicate immediate value.
     691                 :            :  * @result: destination for the result: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ,
     692                 :            :  *          NONE, VSEQINSZ, VSEQOUTSZ.
     693                 :            :  * @length: length in bytes of the operation and the immediate value, if there
     694                 :            :  *          is one (int).
     695                 :            :  * @opt: operational flags: IFB, NFU, STL, SWP, IMMED, IMMED2
     696                 :            :  *
     697                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     698                 :            :  *         On error, a negative error code; first error program counter will
     699                 :            :  *         point to offset in descriptor buffer where the instruction should
     700                 :            :  *         have been written.
     701                 :            :  */
     702                 :            : #define MATHB(program, operand1, operator, operand2, result, length, opt) \
     703                 :            :         rta_math(program, operand1, MATH_FUN_##operator, operand2, result, \
     704                 :            :                  length, opt)
     705                 :            : 
     706                 :            : /**
     707                 :            :  * MATHI - Configures MATHI command to perform binary operations
     708                 :            :  * @program: pointer to struct program
     709                 :            :  * @operand: if !SSEL: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ, VSEQINSZ,
     710                 :            :  *           VSEQOUTSZ, ZERO, ONE.
     711                 :            :  *           if SSEL: MATH0-MATH3, DPOVRD, VSEQINSZ, VSEQOUTSZ, ABD, OFIFO,
     712                 :            :  *           JOBSRC, ZERO, ONE.
     713                 :            :  * @operator: function to be performed: ADD, ADDC, SUB, SUBB, OR, AND, XOR,
     714                 :            :  *            LSHIFT, RSHIFT, FBYT (for !SSEL only).
     715                 :            :  * @imm: Immediate value (uint8_t). IMMED must be used to indicate immediate
     716                 :            :  *       value.
     717                 :            :  * @result: destination for the result: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ,
     718                 :            :  *          NONE, VSEQINSZ, VSEQOUTSZ.
     719                 :            :  * @length: length in bytes of the operation and the immediate value, if there
     720                 :            :  *          is one (int). @imm is left-extended with zeros if needed.
     721                 :            :  * @opt: operational flags: NFU, SSEL, SWP, IMMED
     722                 :            :  *
     723                 :            :  * If !SSEL, @operand <@operator> @imm -> @result
     724                 :            :  * If SSEL, @imm <@operator> @operand -> @result
     725                 :            :  *
     726                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     727                 :            :  *         On error, a negative error code; first error program counter will
     728                 :            :  *         point to offset in descriptor buffer where the instruction should
     729                 :            :  *         have been written.
     730                 :            :  */
     731                 :            : #define MATHI(program, operand, operator, imm, result, length, opt) \
     732                 :            :         rta_mathi(program, operand, MATH_FUN_##operator, imm, result, length, \
     733                 :            :                   opt)
     734                 :            : 
     735                 :            : /**
     736                 :            :  * MATHU - Configures MATHU command to perform unary operations
     737                 :            :  * @program: pointer to struct program
     738                 :            :  * @operand1: operand: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ, VSEQINSZ,
     739                 :            :  *            VSEQOUTSZ, ZERO, ONE, NONE, Immediate value. IMMED must be used to
     740                 :            :  *            indicate immediate value.
     741                 :            :  * @operator: function to be performed: ZBYT, BSWAP
     742                 :            :  * @result: destination for the result: MATH0-MATH3, DPOVRD, SEQINSZ, SEQOUTSZ,
     743                 :            :  *          NONE, VSEQINSZ, VSEQOUTSZ.
     744                 :            :  * @length: length in bytes of the operation and the immediate value, if there
     745                 :            :  *          is one (int).
     746                 :            :  * @opt: operational flags: NFU, STL, SWP, IMMED
     747                 :            :  *
     748                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     749                 :            :  *         On error, a negative error code; first error program counter will
     750                 :            :  *         point to offset in descriptor buffer where the instruction should
     751                 :            :  *         have been written.
     752                 :            :  */
     753                 :            : #define MATHU(program, operand1, operator, result, length, opt) \
     754                 :            :         rta_math(program, operand1, MATH_FUN_##operator, NONE, result, length, \
     755                 :            :                  opt)
     756                 :            : 
     757                 :            : /**
     758                 :            :  * SIGNATURE - Configures SIGNATURE command
     759                 :            :  * @program: pointer to struct program
     760                 :            :  * @sign_type: signature type: SIGN_TYPE_FINAL, SIGN_TYPE_FINAL_RESTORE,
     761                 :            :  *             SIGN_TYPE_FINAL_NONZERO, SIGN_TYPE_IMM_2, SIGN_TYPE_IMM_3,
     762                 :            :  *             SIGN_TYPE_IMM_4.
     763                 :            :  *
     764                 :            :  * After SIGNATURE command, DWORD or WORD must be used to insert signature in
     765                 :            :  * descriptor buffer.
     766                 :            :  *
     767                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     768                 :            :  *         On error, a negative error code; first error program counter will
     769                 :            :  *         point to offset in descriptor buffer where the instruction should
     770                 :            :  *         have been written.
     771                 :            :  */
     772                 :            : #define SIGNATURE(program, sign_type)   rta_signature(program, sign_type)
     773                 :            : 
     774                 :            : /**
     775                 :            :  * NFIFOADD - Configures NFIFO command, a shortcut of RTA Load command to write
     776                 :            :  *            to iNfo FIFO.
     777                 :            :  * @program: pointer to struct program
     778                 :            :  * @src: source for the input data in Alignment Block:IFIFO, OFIFO, PAD,
     779                 :            :  *       MSGOUTSNOOP, ALTSOURCE, OFIFO_SYNC, MSGOUTSNOOP_ALT.
     780                 :            :  * @data: type of data that is going through the Input Data FIFO: MSG, MSG1,
     781                 :            :  *        MSG2, IV1, IV2, ICV1, ICV2, SAD1, AAD1, AAD2, AFHA_SBOX, SKIP,
     782                 :            :  *        PKHA registers, AB1, AB2, ABD.
     783                 :            :  * @length: length of the data copied in FIFO registers (uint32_t)
     784                 :            :  * @flags: select options between:
     785                 :            :  *         -operational flags: LAST1, LAST2, FLUSH1, FLUSH2, OC, BP
     786                 :            :  *         -when PAD is selected as source: BM, PR, PS
     787                 :            :  *         -padding type: <em>PAD_ZERO, PAD_NONZERO, PAD_INCREMENT, PAD_RANDOM,
     788                 :            :  *          PAD_ZERO_N1, PAD_NONZERO_0, PAD_N1, PAD_NONZERO_N
     789                 :            :  *
     790                 :            :  * Return: On success, descriptor buffer offset where this command is inserted.
     791                 :            :  *         On error, a negative error code; first error program counter will
     792                 :            :  *         point to offset in descriptor buffer where the instruction should
     793                 :            :  *         have been written.
     794                 :            :  */
     795                 :            : #define NFIFOADD(program, src, data, length, flags) \
     796                 :            :         rta_nfifo_load(program, src, data, length, flags)
     797                 :            : 
     798                 :            : /**
     799                 :            :  * DOC: Self Referential Code Management Routines
     800                 :            :  *
     801                 :            :  * Contains details of RTA self referential code routines.
     802                 :            :  */
     803                 :            : 
     804                 :            : /**
     805                 :            :  * REFERENCE - initialize a variable used for storing an index inside a
     806                 :            :  *             descriptor buffer.
     807                 :            :  * @ref: reference to a descriptor buffer's index where an update is required
     808                 :            :  *       with a value that will be known latter in the program flow.
     809                 :            :  */
     810                 :            : #define REFERENCE(ref)    int ref = -1
     811                 :            : 
     812                 :            : /**
     813                 :            :  * LABEL - initialize a variable used for storing an index inside a descriptor
     814                 :            :  *         buffer.
     815                 :            :  * @label: label stores the value with what should be updated the REFERENCE line
     816                 :            :  *         in the descriptor buffer.
     817                 :            :  */
     818                 :            : #define LABEL(label)      unsigned int label = 0
     819                 :            : 
     820                 :            : /**
     821                 :            :  * SET_LABEL - set a LABEL value
     822                 :            :  * @program: pointer to struct program
     823                 :            :  * @label: value that will be inserted in a line previously written in the
     824                 :            :  *         descriptor buffer.
     825                 :            :  */
     826                 :            : #define SET_LABEL(program, label)  (label = rta_set_label(program))
     827                 :            : 
     828                 :            : /**
     829                 :            :  * PATCH_JUMP - Auxiliary command to resolve self referential code
     830                 :            :  * @program: buffer to be updated (struct program *)
     831                 :            :  * @line: position in descriptor buffer where the update will be done; this
     832                 :            :  *        value is previously retained in program flow using a reference near
     833                 :            :  *        the sequence to be modified.
     834                 :            :  * @new_ref: updated value that will be inserted in descriptor buffer at the
     835                 :            :  *          specified line; this value is previously obtained using SET_LABEL
     836                 :            :  *          macro near the line that will be used as reference (unsigned int).
     837                 :            :  *          For JUMP command, the value represents the offset field (in words).
     838                 :            :  *
     839                 :            :  * Return: 0 in case of success, a negative error code if it fails
     840                 :            :  */
     841                 :            : #define PATCH_JUMP(program, line, new_ref) rta_patch_jmp(program, line, new_ref)
     842                 :            : 
     843                 :            : /**
     844                 :            :  * PATCH_MOVE - Auxiliary command to resolve self referential code
     845                 :            :  * @program: buffer to be updated (struct program *)
     846                 :            :  * @line: position in descriptor buffer where the update will be done; this
     847                 :            :  *        value is previously retained in program flow using a reference near
     848                 :            :  *        the sequence to be modified.
     849                 :            :  * @new_ref: updated value that will be inserted in descriptor buffer at the
     850                 :            :  *          specified line; this value is previously obtained using SET_LABEL
     851                 :            :  *          macro near the line that will be used as reference (unsigned int).
     852                 :            :  *          For MOVE command, the value represents the offset field (in words).
     853                 :            :  *
     854                 :            :  * Return: 0 in case of success, a negative error code if it fails
     855                 :            :  */
     856                 :            : #define PATCH_MOVE(program, line, new_ref) \
     857                 :            :         rta_patch_move(program, line, new_ref)
     858                 :            : 
     859                 :            : /**
     860                 :            :  * PATCH_LOAD - Auxiliary command to resolve self referential code
     861                 :            :  * @program: buffer to be updated (struct program *)
     862                 :            :  * @line: position in descriptor buffer where the update will be done; this
     863                 :            :  *        value is previously retained in program flow using a reference near
     864                 :            :  *        the sequence to be modified.
     865                 :            :  * @new_ref: updated value that will be inserted in descriptor buffer at the
     866                 :            :  *          specified line; this value is previously obtained using SET_LABEL
     867                 :            :  *          macro near the line that will be used as reference (unsigned int).
     868                 :            :  *          For LOAD command, the value represents the offset field (in words).
     869                 :            :  *
     870                 :            :  * Return: 0 in case of success, a negative error code if it fails
     871                 :            :  */
     872                 :            : #define PATCH_LOAD(program, line, new_ref) \
     873                 :            :         rta_patch_load(program, line, new_ref)
     874                 :            : 
     875                 :            : /**
     876                 :            :  * PATCH_STORE - Auxiliary command to resolve self referential code
     877                 :            :  * @program: buffer to be updated (struct program *)
     878                 :            :  * @line: position in descriptor buffer where the update will be done; this
     879                 :            :  *        value is previously retained in program flow using a reference near
     880                 :            :  *        the sequence to be modified.
     881                 :            :  * @new_ref: updated value that will be inserted in descriptor buffer at the
     882                 :            :  *          specified line; this value is previously obtained using SET_LABEL
     883                 :            :  *          macro near the line that will be used as reference (unsigned int).
     884                 :            :  *          For STORE command, the value represents the offset field (in words).
     885                 :            :  *
     886                 :            :  * Return: 0 in case of success, a negative error code if it fails
     887                 :            :  */
     888                 :            : #define PATCH_STORE(program, line, new_ref) \
     889                 :            :         rta_patch_store(program, line, new_ref)
     890                 :            : 
     891                 :            : /**
     892                 :            :  * PATCH_HDR - Auxiliary command to resolve self referential code
     893                 :            :  * @program: buffer to be updated (struct program *)
     894                 :            :  * @line: position in descriptor buffer where the update will be done; this
     895                 :            :  *        value is previously retained in program flow using a reference near
     896                 :            :  *        the sequence to be modified.
     897                 :            :  * @new_ref: updated value that will be inserted in descriptor buffer at the
     898                 :            :  *          specified line; this value is previously obtained using SET_LABEL
     899                 :            :  *          macro near the line that will be used as reference (unsigned int).
     900                 :            :  *          For HEADER command, the value represents the start index field.
     901                 :            :  *
     902                 :            :  * Return: 0 in case of success, a negative error code if it fails
     903                 :            :  */
     904                 :            : #define PATCH_HDR(program, line, new_ref) \
     905                 :            :         rta_patch_header(program, line, new_ref)
     906                 :            : 
     907                 :            : /**
     908                 :            :  * PATCH_RAW - Auxiliary command to resolve self referential code
     909                 :            :  * @program: buffer to be updated (struct program *)
     910                 :            :  * @line: position in descriptor buffer where the update will be done; this
     911                 :            :  *        value is previously retained in program flow using a reference near
     912                 :            :  *        the sequence to be modified.
     913                 :            :  * @mask: mask to be used for applying the new value (unsigned int). The mask
     914                 :            :  *        selects which bits from the provided @new_val are taken into
     915                 :            :  *        consideration when overwriting the existing value.
     916                 :            :  * @new_val: updated value that will be masked using the provided mask value
     917                 :            :  *           and inserted in descriptor buffer at the specified line.
     918                 :            :  *
     919                 :            :  * Return: 0 in case of success, a negative error code if it fails
     920                 :            :  */
     921                 :            : #define PATCH_RAW(program, line, mask, new_val) \
     922                 :            :         rta_patch_raw(program, line, mask, new_val)
     923                 :            : 
     924                 :            : #endif /* __RTA_RTA_H__ */

Generated by: LCOV version 1.14