linux/arch/x86/crypto/sha-mb/sha1_mb_mgr_datastruct.S
<<
>>
Prefs
   1/*
   2 * Header file for multi buffer SHA1 algorithm data structure
   3 *
   4 * This file is provided under a dual BSD/GPLv2 license.  When using or
   5 * redistributing this file, you may do so under either license.
   6 *
   7 * GPL LICENSE SUMMARY
   8 *
   9 *  Copyright(c) 2014 Intel Corporation.
  10 *
  11 *  This program is free software; you can redistribute it and/or modify
  12 *  it under the terms of version 2 of the GNU General Public License as
  13 *  published by the Free Software Foundation.
  14 *
  15 *  This program is distributed in the hope that it will be useful, but
  16 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18 *  General Public License for more details.
  19 *
  20 *  Contact Information:
  21 *      James Guilford <james.guilford@intel.com>
  22 *      Tim Chen <tim.c.chen@linux.intel.com>
  23 *
  24 *  BSD LICENSE
  25 *
  26 *  Copyright(c) 2014 Intel Corporation.
  27 *
  28 *  Redistribution and use in source and binary forms, with or without
  29 *  modification, are permitted provided that the following conditions
  30 *  are met:
  31 *
  32 *    * Redistributions of source code must retain the above copyright
  33 *      notice, this list of conditions and the following disclaimer.
  34 *    * Redistributions in binary form must reproduce the above copyright
  35 *      notice, this list of conditions and the following disclaimer in
  36 *      the documentation and/or other materials provided with the
  37 *      distribution.
  38 *    * Neither the name of Intel Corporation nor the names of its
  39 *      contributors may be used to endorse or promote products derived
  40 *      from this software without specific prior written permission.
  41 *
  42 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  43 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  44 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  45 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  46 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  47 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  48 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  49 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  50 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  51 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  53 */
  54
  55# Macros for defining data structures
  56
  57# Usage example
  58
  59#START_FIELDS   # JOB_AES
  60###     name            size    align
  61#FIELD  _plaintext,     8,      8       # pointer to plaintext
  62#FIELD  _ciphertext,    8,      8       # pointer to ciphertext
  63#FIELD  _IV,            16,     8       # IV
  64#FIELD  _keys,          8,      8       # pointer to keys
  65#FIELD  _len,           4,      4       # length in bytes
  66#FIELD  _status,        4,      4       # status enumeration
  67#FIELD  _user_data,     8,      8       # pointer to user data
  68#UNION  _union,         size1,  align1, \
  69#                       size2,  align2, \
  70#                       size3,  align3, \
  71#                       ...
  72#END_FIELDS
  73#%assign _JOB_AES_size  _FIELD_OFFSET
  74#%assign _JOB_AES_align _STRUCT_ALIGN
  75
  76#########################################################################
  77
  78# Alternate "struc-like" syntax:
  79#       STRUCT job_aes2
  80#       RES_Q   .plaintext,     1
  81#       RES_Q   .ciphertext,    1
  82#       RES_DQ  .IV,            1
  83#       RES_B   .nested,        _JOB_AES_SIZE, _JOB_AES_ALIGN
  84#       RES_U   .union,         size1, align1, \
  85#                               size2, align2, \
  86#                               ...
  87#       ENDSTRUCT
  88#       # Following only needed if nesting
  89#       %assign job_aes2_size   _FIELD_OFFSET
  90#       %assign job_aes2_align  _STRUCT_ALIGN
  91#
  92# RES_* macros take a name, a count and an optional alignment.
  93# The count in in terms of the base size of the macro, and the
  94# default alignment is the base size.
  95# The macros are:
  96# Macro    Base size
  97# RES_B     1
  98# RES_W     2
  99# RES_D     4
 100# RES_Q     8
 101# RES_DQ   16
 102# RES_Y    32
 103# RES_Z    64
 104#
 105# RES_U defines a union. It's arguments are a name and two or more
 106# pairs of "size, alignment"
 107#
 108# The two assigns are only needed if this structure is being nested
 109# within another. Even if the assigns are not done, one can still use
 110# STRUCT_NAME_size as the size of the structure.
 111#
 112# Note that for nesting, you still need to assign to STRUCT_NAME_size.
 113#
 114# The differences between this and using "struc" directly are that each
 115# type is implicitly aligned to its natural length (although this can be
 116# over-ridden with an explicit third parameter), and that the structure
 117# is padded at the end to its overall alignment.
 118#
 119
 120#########################################################################
 121
 122#ifndef _SHA1_MB_MGR_DATASTRUCT_ASM_
 123#define _SHA1_MB_MGR_DATASTRUCT_ASM_
 124
 125## START_FIELDS
 126.macro START_FIELDS
 127 _FIELD_OFFSET = 0
 128 _STRUCT_ALIGN = 0
 129.endm
 130
 131## FIELD name size align
 132.macro FIELD name size align
 133 _FIELD_OFFSET = (_FIELD_OFFSET + (\align) - 1) & (~ ((\align)-1))
 134 \name  = _FIELD_OFFSET
 135 _FIELD_OFFSET = _FIELD_OFFSET + (\size)
 136.if (\align > _STRUCT_ALIGN)
 137 _STRUCT_ALIGN = \align
 138.endif
 139.endm
 140
 141## END_FIELDS
 142.macro END_FIELDS
 143 _FIELD_OFFSET = (_FIELD_OFFSET + _STRUCT_ALIGN-1) & (~ (_STRUCT_ALIGN-1))
 144.endm
 145
 146########################################################################
 147
 148.macro STRUCT p1
 149START_FIELDS
 150.struc \p1
 151.endm
 152
 153.macro ENDSTRUCT
 154 tmp = _FIELD_OFFSET
 155 END_FIELDS
 156 tmp = (_FIELD_OFFSET - %%tmp)
 157.if (tmp > 0)
 158        .lcomm  tmp
 159.endif
 160.endstruc
 161.endm
 162
 163## RES_int name size align
 164.macro RES_int p1 p2 p3
 165 name = \p1
 166 size = \p2
 167 align = .\p3
 168
 169 _FIELD_OFFSET = (_FIELD_OFFSET + (align) - 1) & (~ ((align)-1))
 170.align align
 171.lcomm name size
 172 _FIELD_OFFSET = _FIELD_OFFSET + (size)
 173.if (align > _STRUCT_ALIGN)
 174 _STRUCT_ALIGN = align
 175.endif
 176.endm
 177
 178
 179
 180# macro RES_B name, size [, align]
 181.macro RES_B _name, _size, _align=1
 182RES_int _name _size _align
 183.endm
 184
 185# macro RES_W name, size [, align]
 186.macro RES_W _name, _size, _align=2
 187RES_int _name 2*(_size) _align
 188.endm
 189
 190# macro RES_D name, size [, align]
 191.macro RES_D _name, _size, _align=4
 192RES_int _name 4*(_size) _align
 193.endm
 194
 195# macro RES_Q name, size [, align]
 196.macro RES_Q _name, _size, _align=8
 197RES_int _name 8*(_size) _align
 198.endm
 199
 200# macro RES_DQ name, size [, align]
 201.macro RES_DQ _name, _size, _align=16
 202RES_int _name 16*(_size) _align
 203.endm
 204
 205# macro RES_Y name, size [, align]
 206.macro RES_Y _name, _size, _align=32
 207RES_int _name 32*(_size) _align
 208.endm
 209
 210# macro RES_Z name, size [, align]
 211.macro RES_Z _name, _size, _align=64
 212RES_int _name 64*(_size) _align
 213.endm
 214
 215
 216#endif
 217
 218########################################################################
 219#### Define constants
 220########################################################################
 221
 222########################################################################
 223#### Define SHA1 Out Of Order Data Structures
 224########################################################################
 225
 226START_FIELDS    # LANE_DATA
 227###     name            size    align
 228FIELD   _job_in_lane,   8,      8       # pointer to job object
 229END_FIELDS
 230
 231_LANE_DATA_size = _FIELD_OFFSET
 232_LANE_DATA_align = _STRUCT_ALIGN
 233
 234########################################################################
 235
 236START_FIELDS    # SHA1_ARGS_X8
 237###     name            size    align
 238FIELD   _digest,        4*5*8,  16      # transposed digest
 239FIELD   _data_ptr,      8*8,    8       # array of pointers to data
 240END_FIELDS
 241
 242_SHA1_ARGS_X4_size =     _FIELD_OFFSET
 243_SHA1_ARGS_X4_align =    _STRUCT_ALIGN
 244_SHA1_ARGS_X8_size =     _FIELD_OFFSET
 245_SHA1_ARGS_X8_align =    _STRUCT_ALIGN
 246
 247########################################################################
 248
 249START_FIELDS    # MB_MGR
 250###     name            size    align
 251FIELD   _args,          _SHA1_ARGS_X4_size, _SHA1_ARGS_X4_align
 252FIELD   _lens,          4*8,    8
 253FIELD   _unused_lanes,  8,      8
 254FIELD   _ldata,         _LANE_DATA_size*8, _LANE_DATA_align
 255END_FIELDS
 256
 257_MB_MGR_size =   _FIELD_OFFSET
 258_MB_MGR_align =  _STRUCT_ALIGN
 259
 260_args_digest    =     _args + _digest
 261_args_data_ptr  =     _args + _data_ptr
 262
 263
 264########################################################################
 265#### Define constants
 266########################################################################
 267
 268#define STS_UNKNOWN             0
 269#define STS_BEING_PROCESSED     1
 270#define STS_COMPLETED           2
 271
 272########################################################################
 273#### Define JOB_SHA1 structure
 274########################################################################
 275
 276START_FIELDS    # JOB_SHA1
 277
 278###     name                            size    align
 279FIELD   _buffer,                        8,      8       # pointer to buffer
 280FIELD   _len,                           4,      4       # length in bytes
 281FIELD   _result_digest,                 5*4,    32      # Digest (output)
 282FIELD   _status,                        4,      4
 283FIELD   _user_data,                     8,      8
 284END_FIELDS
 285
 286_JOB_SHA1_size =  _FIELD_OFFSET
 287_JOB_SHA1_align = _STRUCT_ALIGN
 288