1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_SYS_CRYPTO_IOCTLADMIN_H
27#define	_SYS_CRYPTO_IOCTLADMIN_H
28
29#ifdef	__cplusplus
30extern "C" {
31#endif
32
33#include <sys/types.h>
34#include <sys/crypto/common.h>
35
36#define	ADMIN_IOCTL_DEVICE	"/dev/cryptoadm"
37
38#define	CRYPTOADMIN(x)		(('y' << 8) | (x))
39
40/*
41 * Administrative IOCTLs
42 */
43
44typedef struct crypto_get_dev_list {
45	uint_t			dl_return_value;
46	uint_t			dl_dev_count;
47	crypto_dev_list_entry_t	dl_devs[1];
48} crypto_get_dev_list_t;
49
50typedef struct crypto_get_soft_list {
51	uint_t			sl_return_value;
52	uint_t			sl_soft_count;
53	size_t			sl_soft_len;
54	caddr_t			sl_soft_names;
55} crypto_get_soft_list_t;
56
57typedef struct crypto_get_dev_info {
58	uint_t			di_return_value;
59	char			di_dev_name[MAXNAMELEN];
60	uint_t			di_dev_instance;
61	uint_t			di_count;
62	crypto_mech_name_t	di_list[1];
63} crypto_get_dev_info_t;
64
65typedef struct crypto_get_soft_info {
66	uint_t			si_return_value;
67	char			si_name[MAXNAMELEN];
68	uint_t			si_count;
69	crypto_mech_name_t	si_list[1];
70} crypto_get_soft_info_t;
71
72typedef struct crypto_load_dev_disabled {
73	uint_t			dd_return_value;
74	char			dd_dev_name[MAXNAMELEN];
75	uint_t			dd_dev_instance;
76	uint_t			dd_count;
77	crypto_mech_name_t	dd_list[1];
78} crypto_load_dev_disabled_t;
79
80typedef struct crypto_load_soft_disabled {
81	uint_t			sd_return_value;
82	char			sd_name[MAXNAMELEN];
83	uint_t			sd_count;
84	crypto_mech_name_t	sd_list[1];
85} crypto_load_soft_disabled_t;
86
87typedef struct crypto_unload_soft_module {
88	uint_t			sm_return_value;
89	char			sm_name[MAXNAMELEN];
90} crypto_unload_soft_module_t;
91
92typedef struct crypto_load_soft_config {
93	uint_t			sc_return_value;
94	char			sc_name[MAXNAMELEN];
95	uint_t			sc_count;
96	crypto_mech_name_t	sc_list[1];
97} crypto_load_soft_config_t;
98
99typedef struct crypto_load_door {
100	uint_t			ld_return_value;
101	uint_t			ld_did;
102} crypto_load_door_t;
103
104typedef struct crypto_fips140 {
105	uint_t			fips140_return_value;
106	uint_t			fips140_op;
107	uint_t			fips140_status;
108} crypto_fips140_t;
109
110#ifdef	_KERNEL
111#ifdef	_SYSCALL32
112
113typedef struct crypto_get_soft_list32 {
114	uint32_t		sl_return_value;
115	uint32_t		sl_soft_count;
116	size32_t		sl_soft_len;
117	caddr32_t		sl_soft_names;
118} crypto_get_soft_list32_t;
119
120#endif	/* _SYSCALL32 */
121#endif	/* _KERNEL */
122
123/*
124 * FIPS140 ioctl operations
125 */
126enum {
127	FIPS140_STATUS,		/* get current fips140 mode */
128	FIPS140_ENABLE,		/* enable fips140 mode */
129	FIPS140_DISABLE		/* disable fips140 mode */
130
131
132};
133
134/*
135 * FIPS140 Mode Status
136 */
137enum {
138	FIPS140_MODE_UNSET,	 /* userland has not told us the mode */
139	FIPS140_MODE_VALIDATING, /* In the process of validation to enable */
140	FIPS140_MODE_SHUTDOWN,	 /* Failure has occurred, shutdown framework */
141	FIPS140_MODE_ENABLED,	 /* Validation is complete and we are running */
142	FIPS140_MODE_DISABLED	 /* Not running in FIPS 140 mode */
143};
144
145#define	CRYPTO_GET_VERSION		CRYPTOADMIN(1)
146#define	CRYPTO_GET_DEV_LIST		CRYPTOADMIN(2)
147#define	CRYPTO_GET_SOFT_LIST		CRYPTOADMIN(3)
148#define	CRYPTO_GET_DEV_INFO		CRYPTOADMIN(4)
149#define	CRYPTO_GET_SOFT_INFO		CRYPTOADMIN(5)
150#define	CRYPTO_LOAD_DEV_DISABLED	CRYPTOADMIN(8)
151#define	CRYPTO_LOAD_SOFT_DISABLED	CRYPTOADMIN(9)
152#define	CRYPTO_UNLOAD_SOFT_MODULE	CRYPTOADMIN(10)
153#define	CRYPTO_LOAD_SOFT_CONFIG		CRYPTOADMIN(11)
154#define	CRYPTO_POOL_CREATE		CRYPTOADMIN(12)
155#define	CRYPTO_POOL_WAIT		CRYPTOADMIN(13)
156#define	CRYPTO_POOL_RUN			CRYPTOADMIN(14)
157#define	CRYPTO_LOAD_DOOR		CRYPTOADMIN(15)
158#define	CRYPTO_FIPS140_STATUS		CRYPTOADMIN(16)
159#define	CRYPTO_FIPS140_SET		CRYPTOADMIN(17)
160
161#ifdef	__cplusplus
162}
163#endif
164
165#endif	/* _SYS_CRYPTO_IOCTLADMIN_H */
166