misc: Removed warnings from MAX1749 driver
[linux-2.6.git] / drivers / misc / tegra-cryptodev.h
1 /*
2  * Copyright (c) 2010, NVIDIA Corporation.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  */
18
19 #ifndef __TEGRA_CRYPTODEV_H
20 #define __TEGRA_CRYPTODEV_H
21
22 #include <crypto/aes.h>
23
24 #include <asm-generic/ioctl.h>
25
26 /* ioctl arg = 1 if you want to use ssk. arg = 0 to use normal key */
27 #define TEGRA_CRYPTO_IOCTL_NEED_SSK     _IOWR(0x98, 100, int)
28 #define TEGRA_CRYPTO_IOCTL_PROCESS_REQ  _IOWR(0x98, 101, int*)
29 #define TEGRA_CRYPTO_IOCTL_SET_SEED     _IOWR(0x98, 102, int*)
30 #define TEGRA_CRYPTO_IOCTL_GET_RANDOM   _IOWR(0x98, 103, int*)
31 #define TEGRA_CRYPTO_IOCTL_GET_SHA      _IOWR(0x98, 104, int*)
32 #define TEGRA_CRYPTO_IOCTL_RSA_REQ      _IOWR(0x98, 105, int*)
33
34 #define TEGRA_CRYPTO_MAX_KEY_SIZE       AES_MAX_KEY_SIZE
35 #define RSA_KEY_SIZE            512
36 #define TEGRA_CRYPTO_IV_SIZE    AES_BLOCK_SIZE
37 #define DEFAULT_RNG_BLK_SZ      16
38
39 /* the seed consists of 16 bytes of key + 16 bytes of init vector */
40 #define TEGRA_CRYPTO_RNG_SEED_SIZE      AES_KEYSIZE_128 + DEFAULT_RNG_BLK_SZ
41 #define TEGRA_CRYPTO_RNG_SIZE   SZ_16
42
43 /* encrypt/decrypt operations */
44 #define TEGRA_CRYPTO_ECB        BIT(0)
45 #define TEGRA_CRYPTO_CBC        BIT(1)
46 #define TEGRA_CRYPTO_OFB        BIT(2)
47 #define TEGRA_CRYPTO_CTR        BIT(3)
48 #define TEGRA_CRYPTO_CMAC       BIT(4)
49 #define TEGRA_CRYPTO_RNG        BIT(5)
50
51 /* a pointer to this struct needs to be passed to:
52  * TEGRA_CRYPTO_IOCTL_PROCESS_REQ
53  */
54 struct tegra_crypt_req {
55         int op; /* e.g. TEGRA_CRYPTO_ECB */
56         bool encrypt;
57         char key[TEGRA_CRYPTO_MAX_KEY_SIZE];
58         int keylen;
59         char iv[TEGRA_CRYPTO_IV_SIZE];
60         int ivlen;
61         u8 *plaintext;
62         int plaintext_sz;
63         u8 *result;
64 };
65
66 /* pointer to this struct should be passed to:
67  * TEGRA_CRYPTO_IOCTL_SET_SEED
68  * TEGRA_CRYPTO_IOCTL_GET_RANDOM
69  */
70 struct tegra_rng_req {
71         u8 seed[TEGRA_CRYPTO_RNG_SEED_SIZE];
72         u8 *rdata; /* random generated data */
73         int nbytes; /* random data length */
74         int type;
75 };
76
77 struct tegra_rsa_req {
78         char *key;
79         int keylen;
80         char *algo;
81         char *message;
82         int msg_len;
83         int modlen;
84         int pub_explen;
85         int prv_explen;
86         char *result;
87 };
88
89 struct tegra_sha_req {
90         char key[TEGRA_CRYPTO_MAX_KEY_SIZE];
91         int keylen;
92         unsigned char *algo;
93         unsigned char *plaintext;
94         int plaintext_sz;
95         unsigned char *result;
96 };
97
98 #endif