8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / pkcs11 / libpkcs11 / common / pkcs11Slot.h
blob87fb9aac75a7a30392c5ea08daca449c9b1a1944
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _PKCS11_SLOT_H
28 #define _PKCS11_SLOT_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
36 #include "pkcs11Session.h"
38 #define MECHLIST_SIZE 32
41 * Used to pass arguments to child threads for C_WaitForSlotEvent.
43 typedef struct wfse_args {
45 CK_FLAGS flags;
46 CK_VOID_PTR pReserved;
47 CK_SLOT_ID slotid;
49 } wfse_args_t;
51 typedef struct pkcs11_slot {
53 CK_SLOT_ID sl_id; /* real slotID from provider */
54 struct pkcs11_session *sl_sess_list; /* all open sessions */
55 pthread_mutex_t sl_mutex; /* protects: sl_sess_list, */
56 /* sl_tid, sl_wfse_state, */
57 /* and sl_wfse_args */
58 CK_FUNCTION_LIST_PTR sl_func_list; /* function entry points */
59 boolean_t sl_enabledpol; /* TRUE if policy for enabled */
60 CK_MECHANISM_TYPE_PTR sl_pol_mechs; /* policy restricted */
61 uint_t sl_pol_count; /* policy restricted */
62 boolean_t sl_norandom; /* TRUE if random is disabled */
63 void *sl_dldesc; /* from dlopen */
64 uint_t sl_prov_id; /* set by order read in */
65 uchar_t sl_wfse_state; /* Used by C_WaitForSlotEvent */
66 boolean_t sl_no_wfse; /* WaitForSlotEvent not impl */
67 pthread_t sl_tid; /* Used to track child thread */
68 wfse_args_t *sl_wfse_args; /* Used for WaitForSlotEvent */
70 } pkcs11_slot_t;
73 * State definitions used for C_WaitForSlotEvent, stored in sl_wfse_state
74 * for each slot. These states are mutually exclusive, ie only one should
75 * be set at a time.
77 #define WFSE_CLEAR 0x0
78 #define WFSE_EVENT 0x1
79 #define WFSE_ACTIVE 0x2
82 * Dynamically allocated array of slots, indexed by the slotID assigned
83 * by the framework. st_first will be initialized to 1. Only if there
84 * is more than one other slot present, triggering the existence of the
85 * metaslot, with st_first be set to 0. st_last will be set to the
86 * last slotID assigned, also used for looping through the slottable.
88 typedef struct pkcs11_slottable {
90 pkcs11_slot_t **st_slots;
91 pthread_mutex_t st_mutex; /* Protects all data in the slottable */
92 /* except for st_start_cond. */
93 CK_SLOT_ID st_first; /* First used slot ID, used for loops */
94 CK_SLOT_ID st_last; /* Last slot ID allocated */
95 ulong_t st_cur_size; /* current memory allocated */
96 pthread_cond_t st_wait_cond; /* Used for C_WaitForSlotEvent */
97 CK_SLOT_ID st_event_slot; /* Slot with event */
98 boolean_t st_wfse_active; /* A thread is actively running WFSE */
99 boolean_t st_blocking; /* Blocking for C_WaitForSlotEvent */
100 boolean_t st_list_signaled; /* Listener has been signaled */
101 uint_t st_thr_count; /* Used for C_WaitForSlotEvent */
102 pthread_t st_tid;
103 pthread_mutex_t st_start_mutex; /* wait for listener to start */
104 pthread_cond_t st_start_cond; /* signal when listener has started */
106 } pkcs11_slottable_t;
110 * This macro is used to quickly derefence from a framework slot ID,
111 * provided by an application, to the function pointers for the correct
112 * underlying provider.
114 #define FUNCLIST(slotID) (slottable->st_slots[(slotID)]->sl_func_list)
117 * This macro is used to quickly get the slot ID associated with this
118 * slot ID, that is used by the underlying provider.
120 #define TRUEID(slotID) (slottable->st_slots[(slotID)]->sl_id)
123 extern pkcs11_slottable_t *slottable;
125 extern CK_RV pkcs11_slottable_initialize();
126 extern CK_RV pkcs11_slottable_increase(ulong_t increase);
127 extern CK_RV pkcs11_slot_allocate(CK_SLOT_ID *slot);
128 extern CK_RV pkcs11_slottable_delete();
129 extern CK_RV pkcs11_is_valid_slot(CK_SLOT_ID slot_id);
130 extern CK_RV pkcs11_validate_and_convert_slotid(CK_SLOT_ID slot_id,
131 CK_SLOT_ID *real_slot_id);
133 #ifdef __cplusplus
135 #endif
137 #endif /* _PKCS11_SLOT_H */