2006-10-04 12:48:57 +04:00
/* Copyright (C) 2003-2006, Advanced Micro Devices, Inc.
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*/
# ifndef _GEODE_AES_H_
# define _GEODE_AES_H_
2007-10-21 12:21:25 +04:00
/* driver logic flags */
2006-10-04 12:48:57 +04:00
# define AES_MODE_ECB 0
# define AES_MODE_CBC 1
# define AES_DIR_DECRYPT 0
# define AES_DIR_ENCRYPT 1
2007-05-24 15:23:24 +04:00
# define AES_FLAGS_HIDDENKEY (1 << 0)
2006-10-04 12:48:57 +04:00
2007-10-21 12:21:25 +04:00
/* Register definitions */
# define AES_CTRLA_REG 0x0000
# define AES_CTRL_START 0x01
# define AES_CTRL_DECRYPT 0x00
# define AES_CTRL_ENCRYPT 0x02
# define AES_CTRL_WRKEY 0x04
# define AES_CTRL_DCA 0x08
# define AES_CTRL_SCA 0x10
# define AES_CTRL_CBC 0x20
# define AES_INTR_REG 0x0008
# define AES_INTRA_PENDING (1 << 16)
# define AES_INTRB_PENDING (1 << 17)
# define AES_INTR_PENDING (AES_INTRA_PENDING | AES_INTRB_PENDING)
# define AES_INTR_MASK 0x07
# define AES_SOURCEA_REG 0x0010
# define AES_DSTA_REG 0x0014
# define AES_LENA_REG 0x0018
# define AES_WRITEKEY0_REG 0x0030
# define AES_WRITEIV0_REG 0x0040
/* A very large counter that is used to gracefully bail out of an
* operation in case of trouble
*/
# define AES_OP_TIMEOUT 0x50000
2006-10-04 12:48:57 +04:00
struct geode_aes_op {
void * src ;
void * dst ;
u32 mode ;
u32 dir ;
u32 flags ;
int len ;
2014-05-14 13:36:40 +04:00
u8 key [ AES_KEYSIZE_128 ] ;
2007-11-30 08:36:57 +03:00
u8 * iv ;
2007-11-10 14:29:33 +03:00
union {
struct crypto_blkcipher * blk ;
struct crypto_cipher * cip ;
} fallback ;
u32 keylen ;
2006-10-04 12:48:57 +04:00
} ;
# endif