]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec.c
Update svn-1.9.7 to 1.10.0.
[FreeBSD/FreeBSD.git] / sys / contrib / ncsw / Peripherals / FM / MACSEC / fm_macsec.c
1 /*
2  * Copyright 2008-2015 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /******************************************************************************
33
34  @File          fm_macsec.c
35
36  @Description   FM MACSEC driver routines implementation.
37 *//***************************************************************************/
38
39 #include "std_ext.h"
40 #include "error_ext.h"
41 #include "xx_ext.h"
42 #include "string_ext.h"
43 #include "sprint_ext.h"
44 #include "debug_ext.h"
45
46 #include "fm_macsec.h"
47
48
49 /****************************************/
50 /*       API Init unit functions        */
51 /****************************************/
52 t_Handle FM_MACSEC_Config(t_FmMacsecParams *p_FmMacsecParam)
53 {
54     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver;
55
56     SANITY_CHECK_RETURN_VALUE(p_FmMacsecParam, E_INVALID_HANDLE, NULL);
57
58     if (p_FmMacsecParam->guestMode)
59         p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)FM_MACSEC_GUEST_Config(p_FmMacsecParam);
60     else
61         p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)FM_MACSEC_MASTER_Config(p_FmMacsecParam);
62
63     if (!p_FmMacsecControllerDriver)
64         return NULL;
65
66     return (t_Handle)p_FmMacsecControllerDriver;
67 }
68
69 t_Error FM_MACSEC_Init(t_Handle h_FmMacsec)
70 {
71     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
72
73     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
74
75     if (p_FmMacsecControllerDriver->f_FM_MACSEC_Init)
76         return p_FmMacsecControllerDriver->f_FM_MACSEC_Init(h_FmMacsec);
77
78     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
79 }
80
81 t_Error FM_MACSEC_Free(t_Handle h_FmMacsec)
82 {
83     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
84
85     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
86
87     if (p_FmMacsecControllerDriver->f_FM_MACSEC_Free)
88         return p_FmMacsecControllerDriver->f_FM_MACSEC_Free(h_FmMacsec);
89
90     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
91 }
92
93 t_Error FM_MACSEC_ConfigUnknownSciFrameTreatment(t_Handle h_FmMacsec, e_FmMacsecUnknownSciFrameTreatment treatMode)
94 {
95     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
96
97     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
98
99     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigUnknownSciFrameTreatment)
100         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigUnknownSciFrameTreatment(h_FmMacsec, treatMode);
101
102     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
103 }
104
105 t_Error FM_MACSEC_ConfigInvalidTagsFrameTreatment(t_Handle h_FmMacsec, bool deliverUncontrolled)
106 {
107     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
108
109     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
110
111     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigInvalidTagsFrameTreatment)
112         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigInvalidTagsFrameTreatment(h_FmMacsec, deliverUncontrolled);
113
114     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
115 }
116
117 t_Error FM_MACSEC_ConfigEncryptWithNoChangedTextFrameTreatment(t_Handle h_FmMacsec, bool discardUncontrolled)
118 {
119     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
120
121     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
122
123     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigEncryptWithNoChangedTextFrameTreatment)
124         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigEncryptWithNoChangedTextFrameTreatment(h_FmMacsec, discardUncontrolled);
125
126     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
127 }
128
129 t_Error FM_MACSEC_ConfigUntagFrameTreatment(t_Handle h_FmMacsec, e_FmMacsecUntagFrameTreatment treatMode)
130 {
131     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
132
133     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
134
135     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigUntagFrameTreatment)
136         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigUntagFrameTreatment(h_FmMacsec, treatMode);
137
138     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
139 }
140
141 t_Error FM_MACSEC_ConfigPnExhaustionThreshold(t_Handle h_FmMacsec, uint32_t pnExhThr)
142 {
143     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
144
145     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
146
147     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigPnExhaustionThreshold)
148         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigPnExhaustionThreshold(h_FmMacsec, pnExhThr);
149
150     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
151 }
152
153 t_Error FM_MACSEC_ConfigKeysUnreadable(t_Handle h_FmMacsec)
154 {
155     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
156
157     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
158
159     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigKeysUnreadable)
160         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigKeysUnreadable(h_FmMacsec);
161
162     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
163 }
164
165 t_Error FM_MACSEC_ConfigSectagWithoutSCI(t_Handle h_FmMacsec)
166 {
167     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
168
169     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
170
171     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigSectagWithoutSCI)
172         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigSectagWithoutSCI(h_FmMacsec);
173
174     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
175 }
176
177 t_Error FM_MACSEC_ConfigException(t_Handle h_FmMacsec, e_FmMacsecExceptions exception, bool enable)
178 {
179     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
180
181     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
182
183     if (p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigException)
184         return p_FmMacsecControllerDriver->f_FM_MACSEC_ConfigException(h_FmMacsec, exception, enable);
185
186     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
187 }
188
189 t_Error FM_MACSEC_GetRevision(t_Handle h_FmMacsec, uint32_t *p_MacsecRevision)
190 {
191     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
192
193     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
194
195     if (p_FmMacsecControllerDriver->f_FM_MACSEC_GetRevision)
196         return p_FmMacsecControllerDriver->f_FM_MACSEC_GetRevision(h_FmMacsec, p_MacsecRevision);
197
198     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
199 }
200
201
202 t_Error FM_MACSEC_Enable(t_Handle h_FmMacsec)
203 {
204     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
205
206     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
207
208     if (p_FmMacsecControllerDriver->f_FM_MACSEC_Enable)
209         return p_FmMacsecControllerDriver->f_FM_MACSEC_Enable(h_FmMacsec);
210
211     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
212 }
213
214 t_Error FM_MACSEC_Disable(t_Handle h_FmMacsec)
215 {
216     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
217
218     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
219
220     if (p_FmMacsecControllerDriver->f_FM_MACSEC_Disable)
221         return p_FmMacsecControllerDriver->f_FM_MACSEC_Disable(h_FmMacsec);
222
223     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
224 }
225
226 t_Error FM_MACSEC_SetException(t_Handle h_FmMacsec, e_FmMacsecExceptions exception, bool enable)
227 {
228     t_FmMacsecControllerDriver *p_FmMacsecControllerDriver = (t_FmMacsecControllerDriver *)h_FmMacsec;
229
230     SANITY_CHECK_RETURN_ERROR(p_FmMacsecControllerDriver, E_INVALID_HANDLE);
231
232     if (p_FmMacsecControllerDriver->f_FM_MACSEC_SetException)
233         return p_FmMacsecControllerDriver->f_FM_MACSEC_SetException(h_FmMacsec, exception, enable);
234
235     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
236 }
237