5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 2007 - 2008 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; version 2 of the License.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
20 #include "silccrypto.h"
23 /************************** Types and definitions ***************************/
25 /* Static list of accelerators */
26 const SilcAcceleratorStruct *silc_default_accs[] =
29 /* Software accelerator */
31 #endif /* SILC_SYMBIAN */
35 /*************************** SILC Accelerator API ***************************/
37 /* Register accelerator */
39 SilcBool silc_acc_register(const SilcAccelerator acc)
41 SilcDList silc_acc_list;
46 silc_acc_list = silc_global_get_var("silc_acc_list", FALSE);
48 silc_acc_list = silc_global_set_var("silc_acc_list",
49 sizeof(*silc_acc_list), NULL, FALSE);
52 silc_dlist_init_static(silc_acc_list);
55 SILC_LOG_DEBUG(("Register accelerator %p, name %s", acc, acc->name));
56 silc_dlist_add(silc_acc_list, acc);
61 /* Unregister accelerator */
63 void silc_acc_unregister(SilcAccelerator acc)
65 SilcDList silc_acc_list;
70 silc_acc_list = silc_global_get_var("silc_acc_list", FALSE);
74 SILC_LOG_DEBUG(("Unregister accelerator %p, name %s", acc, acc->name));
75 silc_dlist_del(silc_acc_list, acc);
77 if (!silc_dlist_count(silc_acc_list))
78 silc_global_del_var("silc_acc_list", FALSE);
81 /* Initialize accelerator */
83 SilcBool silc_acc_init(SilcAccelerator acc, SilcSchedule schedule, ...)
88 if (!acc || !schedule)
91 SILC_LOG_DEBUG(("Initialize accelerator %p, name %s", acc, acc->name));
93 va_start(va, schedule);
94 ret = acc->init(schedule, va);
100 /* Uninitialize accelerator */
102 SilcBool silc_acc_uninit(SilcAccelerator acc)
107 SILC_LOG_DEBUG(("Uninitialize accelerator %p, name %s", acc, acc->name));
108 return acc->uninit();
111 /* Get list of registered accelerator */
113 SilcDList silc_acc_get_supported(void)
115 SilcDList silc_acc_list;
120 list = silc_dlist_init();
124 silc_acc_list = silc_global_get_var("silc_acc_list", FALSE);
126 silc_dlist_start(silc_acc_list);
127 while ((acc = silc_dlist_get(silc_acc_list)))
128 silc_dlist_add(list, acc);
131 for (i = 0; silc_default_accs[i]->name; i++)
132 silc_dlist_add(list, (void *)silc_default_accs[i]);
137 /* Get accelerator */
139 SilcAccelerator silc_acc_find(const char *name)
141 SilcDList silc_acc_list;
148 SILC_LOG_DEBUG(("Find accelerator %s", name));
150 silc_acc_list = silc_global_get_var("silc_acc_list", FALSE);
152 silc_dlist_start(silc_acc_list);
153 while ((acc = silc_dlist_get(silc_acc_list))) {
154 if (!strcmp(acc->name, name)) {
155 SILC_LOG_DEBUG(("Found accelerator %p", acc));
161 for (i = 0; silc_default_accs[i]->name; i++) {
162 if (!strcmp(silc_default_accs[i]->name, name)) {
163 SILC_LOG_DEBUG(("Found accelerator %p", silc_default_accs[i]));
164 return (SilcAccelerator)silc_default_accs[i];
168 SILC_LOG_DEBUG(("Accelerator %s does not exist", name));
172 /* Get accelerator name */
174 const char *silc_acc_get_name(SilcAccelerator acc)