#ifndef _X86_VIA_PADLOCK_H_
#define _X86_VIA_PADLOCK_H_
#if defined(_KERNEL)
#include <sys/rndsource.h>
#include <sys/callout.h>
#include <crypto/aes/aes.h>
#define C3_CRYPT_CWLO_ROUND_M 0x0000000f
#define C3_CRYPT_CWLO_ALG_M 0x00000070
#define C3_CRYPT_CWLO_ALG_AES 0x00000000
#define C3_CRYPT_CWLO_KEYGEN_M 0x00000080
#define C3_CRYPT_CWLO_KEYGEN_HW 0x00000000
#define C3_CRYPT_CWLO_KEYGEN_SW 0x00000080
#define C3_CRYPT_CWLO_NORMAL 0x00000000
#define C3_CRYPT_CWLO_INTERMEDIATE 0x00000100
#define C3_CRYPT_CWLO_ENCRYPT 0x00000000
#define C3_CRYPT_CWLO_DECRYPT 0x00000200
#define C3_CRYPT_CWLO_KEY128 0x0000000a
#define C3_CRYPT_CWLO_KEY192 0x0000040c
#define C3_CRYPT_CWLO_KEY256 0x0000080e
struct via_padlock_session {
uint32_t ses_ekey[4*(AES_256_NROUNDS + 1)];
uint32_t ses_dkey[4*(AES_256_NROUNDS + 1)];
uint32_t ses_cw0;
struct swcr_data *swd;
int ses_klen;
int ses_used;
};
struct via_padlock_softc {
device_t sc_dev;
uint32_t op_cw[4];
uint8_t op_iv[16];
void *op_buf;
int32_t sc_cid;
bool sc_cid_attached;
int sc_nsessions;
struct via_padlock_session *sc_sessions;
};
#define VIAC3_SESSION(sid) ((sid) & 0x0fffffff)
#define VIAC3_SID(crd,ses) (((crd) << 28) | ((ses) & 0x0fffffff))
#endif
#if defined(_KERNEL) || defined(_KMEMUSER)
struct cpu_info;
struct via_padlock {
struct cpu_info *vp_ci;
int vp_freq;
};
#endif
#endif