xref: /freebsd/sys/contrib/ncsw/inc/Peripherals/fm_macsec_ext.h (revision af23369a6deaaeb612ab266eb88b8bb8d560c322)
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_ext.h
35 
36  @Description   FM MACSEC ...
37 *//***************************************************************************/
38 #ifndef __FM_MACSEC_EXT_H
39 #define __FM_MACSEC_EXT_H
40 
41 #include "std_ext.h"
42 
43 
44 /**************************************************************************//**
45  @Group         FM_grp Frame Manager API
46 
47  @Description   FM API functions, definitions and enums
48 
49  @{
50 *//***************************************************************************/
51 
52 /**************************************************************************//**
53  @Group         FM_MACSEC_grp FM MACSEC
54 
55  @Description   FM MACSEC API functions, definitions and enums
56 
57  @{
58 *//***************************************************************************/
59 
60 /**************************************************************************//**
61  @Description   MACSEC Exceptions
62 *//***************************************************************************/
63 typedef enum e_FmMacsecExceptions {
64     e_FM_MACSEC_EX_SINGLE_BIT_ECC,          /**< Single bit ECC error */
65     e_FM_MACSEC_EX_MULTI_BIT_ECC            /**< Multi bit ECC error */
66 } e_FmMacsecExceptions;
67 
68 
69 /**************************************************************************//**
70  @Group         FM_MACSEC_init_grp FM-MACSEC Initialization Unit
71 
72  @Description   FM MACSEC Initialization Unit
73 
74  @{
75 *//***************************************************************************/
76 
77 /**************************************************************************//**
78  @Function      t_FmMacsecExceptionsCallback
79 
80  @Description   Exceptions user callback routine, will be called upon an
81                 exception passing the exception identification.
82 
83  @Param[in]     h_App       A handle to an application layer object; This handle
84                             will be passed by the driver upon calling this callback.
85  @Param[in]     exception   The exception.
86 *//***************************************************************************/
87 typedef void (t_FmMacsecExceptionsCallback) ( t_Handle                  h_App,
88                                               e_FmMacsecExceptions      exception);
89 
90 
91 /**************************************************************************//**
92  @Description   FM MACSEC config input
93 *//***************************************************************************/
94 typedef struct t_FmMacsecParams {
95     t_Handle                                h_Fm;               /**< A handle to the FM object related to */
96     bool                                    guestMode;          /**< Partition-id */
97     union {
98         struct {
99             uint8_t                         fmMacId;            /**< FM MAC id */
100         } guestParams;
101 
102         struct {
103             uintptr_t                       baseAddr;           /**< Base of memory mapped FM MACSEC registers */
104             t_Handle                        h_FmMac;            /**< A handle to the FM MAC object  related to */
105             t_FmMacsecExceptionsCallback    *f_Exception;       /**< Exception Callback Routine         */
106             t_Handle                        h_App;              /**< A handle to an application layer object; This handle will
107                                                                      be passed by the driver upon calling the above callbacks */
108         } nonGuestParams;
109     };
110 } t_FmMacsecParams;
111 
112 /**************************************************************************//**
113  @Function      FM_MACSEC_Config
114 
115  @Description   Creates descriptor for the FM MACSEC module;
116 
117                 The routine returns a handle (descriptor) to the FM MACSEC object;
118                 This descriptor must be passed as first parameter to all other
119                 FM MACSEC function calls;
120 
121                 No actual initialization or configuration of FM MACSEC hardware is
122                 done by this routine.
123 
124  @Param[in]     p_FmMacsecParam     Pointer to data structure of parameters.
125 
126  @Retval        Handle to FM MACSEC object, or NULL for Failure.
127 *//***************************************************************************/
128 t_Handle FM_MACSEC_Config(t_FmMacsecParams *p_FmMacsecParam);
129 
130 /**************************************************************************//**
131  @Function      FM_MACSEC_Init
132 
133  @Description   Initializes the FM MACSEC module.
134 
135  @Param[in]     h_FmMacsec      FM MACSEC module descriptor.
136 
137  @Return        E_OK on success; Error code otherwise.
138 *//***************************************************************************/
139 t_Error FM_MACSEC_Init(t_Handle h_FmMacsec);
140 
141 /**************************************************************************//**
142  @Function      FM_MACSEC_Free
143 
144  @Description   Frees all resources that were assigned to FM MACSEC module;
145 
146                 Calling this routine invalidates the descriptor.
147 
148  @Param[in]     h_FmMacsec      FM MACSEC module descriptor.
149 
150  @Return        E_OK on success; Error code otherwise.
151 *//***************************************************************************/
152 t_Error FM_MACSEC_Free(t_Handle h_FmMacsec);
153 
154 
155 /**************************************************************************//**
156  @Group         FM_MACSEC_advanced_init_grp    FM-MACSEC Advanced Configuration Unit
157 
158  @Description   Configuration functions used to change default values.
159 
160  @{
161 *//***************************************************************************/
162 
163 /**************************************************************************//**
164  @Description   enum for unknown sci frame treatment
165 *//***************************************************************************/
166 typedef enum e_FmMacsecUnknownSciFrameTreatment {
167     e_FM_MACSEC_UNKNOWN_SCI_FRAME_TREATMENT_DISCARD_BOTH = 0,                                               /**< Controlled port - Strict mode */
168     e_FM_MACSEC_UNKNOWN_SCI_FRAME_TREATMENT_DISCARD_UNCONTROLLED_DELIVER_OR_DISCARD_CONTROLLED,             /**< If C bit clear deliver on controlled port, else discard
169                                                                                                                  Controlled port - Check or Disable mode */
170     e_FM_MACSEC_UNKNOWN_SCI_FRAME_TREATMENT_DELIVER_UNCONTROLLED_DISCARD_CONTROLLED,                        /**< Controlled port - Strict mode */
171     e_FM_MACSEC_UNKNOWN_SCI_FRAME_TREATMENT_DELIVER_OR_DISCARD_UNCONTROLLED_DELIVER_OR_DISCARD_CONTROLLED   /**< If C bit set deliver on uncontrolled port and discard on controlled port,
172                                                                                                                  else discard on uncontrolled port and deliver on controlled port
173                                                                                                                  Controlled port - Check or Disable mode */
174 } e_FmMacsecUnknownSciFrameTreatment;
175 
176 /**************************************************************************//**
177  @Description   enum for untag frame treatment
178 *//***************************************************************************/
179 typedef enum e_FmMacsecUntagFrameTreatment {
180     e_FM_MACSEC_UNTAG_FRAME_TREATMENT_DELIVER_UNCONTROLLED_DISCARD_CONTROLLED = 0,                    /**< Controlled port - Strict mode */
181     e_FM_MACSEC_UNTAG_FRAME_TREATMENT_DISCARD_BOTH,                                                   /**< Controlled port - Strict mode */
182     e_FM_MACSEC_UNTAG_FRAME_TREATMENT_DISCARD_UNCONTROLLED_DELIVER_CONTROLLED_UNMODIFIED              /**< Controlled port - Strict mode */
183 } e_FmMacsecUntagFrameTreatment;
184 
185 /**************************************************************************//**
186  @Function      FM_MACSEC_ConfigUnknownSciFrameTreatment
187 
188  @Description   Change the treatment for received frames with unknown sci from its default
189                 configuration [DEFAULT_unknownSciFrameTreatment].
190 
191  @Param[in]     h_FmMacsec      FM MACSEC module descriptor.
192  @Param[in]     treatMode       The selected mode.
193 
194  @Return        E_OK on success; Error code otherwise.
195 
196  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
197 *//***************************************************************************/
198 t_Error FM_MACSEC_ConfigUnknownSciFrameTreatment(t_Handle h_FmMacsec, e_FmMacsecUnknownSciFrameTreatment treatMode);
199 
200 /**************************************************************************//**
201  @Function      FM_MACSEC_ConfigInvalidTagsFrameTreatment
202 
203  @Description   Change the treatment for received frames with invalid tags or
204                 a zero value PN or an invalid ICV from its default configuration
205                 [DEFAULT_invalidTagsFrameTreatment].
206 
207  @Param[in]     h_FmMacsec              FM MACSEC module descriptor.
208  @Param[in]     deliverUncontrolled     If True deliver on the uncontrolled port, else discard;
209                                         In both cases discard on the controlled port;
210                                         this provide Strict, Check or Disable mode.
211 
212  @Return        E_OK on success; Error code otherwise.
213 
214  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
215 *//***************************************************************************/
216 t_Error FM_MACSEC_ConfigInvalidTagsFrameTreatment(t_Handle h_FmMacsec, bool deliverUncontrolled);
217 
218 /**************************************************************************//**
219  @Function      FM_MACSEC_ConfigEncryptWithNoChangedTextFrameTreatment
220 
221  @Description   Change the treatment for received frames with the Encryption bit
222                 set and the Changed Text bit clear from its default configuration
223                 [DEFAULT_encryptWithNoChangedTextFrameTreatment].
224 
225  @Param[in]     h_FmMacsec              FM MACSEC module descriptor.
226  @Param[in]     discardUncontrolled     If True discard on the uncontrolled port, else deliver;
227                                         In both cases discard on the controlled port;
228                                         this provide Strict, Check or Disable mode.
229 
230  @Return        E_OK on success; Error code otherwise.
231 
232  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
233 *//***************************************************************************/
234 t_Error FM_MACSEC_ConfigEncryptWithNoChangedTextFrameTreatment(t_Handle h_FmMacsec, bool discardUncontrolled);
235 
236 /**************************************************************************//**
237  @Function      FM_MACSEC_ConfigChangedTextWithNoEncryptFrameTreatment
238 
239  @Description   Change the treatment for received frames with the Encryption bit
240                 clear and the Changed Text bit set from its default configuration
241                 [DEFAULT_changedTextWithNoEncryptFrameTreatment].
242 
243  @Param[in]     h_FmMacsec              FM MACSEC module descriptor.
244  @Param[in]     deliverUncontrolled     If True deliver on the uncontrolled port, else discard;
245                                         In both cases discard on the controlled port;
246                                         this provide Strict, Check or Disable mode.
247 
248  @Return        E_OK on success; Error code otherwise.
249 
250  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
251 *//***************************************************************************/
252 t_Error FM_MACSEC_ConfigChangedTextWithNoEncryptFrameTreatment(t_Handle h_FmMacsec, bool deliverUncontrolled);
253 
254 /**************************************************************************//**
255  @Function      FM_MACSEC_ConfigUntagFrameTreatment
256 
257  @Description   Change the treatment for received frames without the MAC security tag (SecTAG)
258                 from its default configuration [DEFAULT_untagFrameTreatment].
259 
260  @Param[in]     h_FmMacsec     FM MACSEC module descriptor.
261  @Param[in]     treatMode      The selected mode.
262 
263  @Return        E_OK on success; Error code otherwise.
264 
265  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
266 *//***************************************************************************/
267 t_Error FM_MACSEC_ConfigUntagFrameTreatment(t_Handle h_FmMacsec, e_FmMacsecUntagFrameTreatment treatMode);
268 
269 /**************************************************************************//**
270  @Function      FM_MACSEC_ConfigOnlyScbIsSetFrameTreatment
271 
272  @Description   Change the treatment for received frames with only SCB bit set
273                 from its default configuration [DEFAULT_onlyScbIsSetFrameTreatment].
274 
275  @Param[in]     h_FmMacsec              FM MACSEC module descriptor.
276  @Param[in]     deliverUncontrolled     If True deliver on the uncontrolled port, else discard;
277                                         In both cases discard on the controlled port;
278                                         this provide Strict, Check or Disable mode.
279 
280  @Return        E_OK on success; Error code otherwise.
281 
282  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
283 *//***************************************************************************/
284 t_Error FM_MACSEC_ConfigOnlyScbIsSetFrameTreatment(t_Handle h_FmMacsec, bool deliverUncontrolled);
285 
286 /**************************************************************************//**
287  @Function      FM_MACSEC_ConfigPnExhaustionThreshold
288 
289  @Description   It's provide the ability to configure a PN exhaustion threshold;
290                 When the NextPn crosses this value an interrupt event
291                 is asserted to warn that the active SA should re-key.
292 
293  @Param[in]     h_FmMacsec     FM MACSEC module descriptor.
294  @Param[in]     pnExhThr       If the threshold is reached, an interrupt event
295                                is asserted to re-key.
296 
297  @Return        E_OK on success; Error code otherwise.
298 
299  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
300 *//***************************************************************************/
301 t_Error FM_MACSEC_ConfigPnExhaustionThreshold(t_Handle h_FmMacsec, uint32_t pnExhThr);
302 
303 /**************************************************************************//**
304  @Function      FM_MACSEC_ConfigKeysUnreadable
305 
306  @Description   Turn on privacy mode; All the keys and their hash values can't be read any more;
307                 Can not be cleared unless hard reset.
308 
309  @Param[in]     h_FmMacsec         FM MACSEC module descriptor.
310 
311  @Return        E_OK on success; Error code otherwise.
312 
313  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
314 *//***************************************************************************/
315 t_Error FM_MACSEC_ConfigKeysUnreadable(t_Handle h_FmMacsec);
316 
317 /**************************************************************************//**
318  @Function      FM_MACSEC_ConfigSectagWithoutSCI
319 
320  @Description   Promise that all generated Sectag will be without SCI included.
321 
322  @Param[in]     h_FmMacsec         FM MACSEC module descriptor.
323 
324  @Return        E_OK on success; Error code otherwise.
325 
326  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
327 *//***************************************************************************/
328 t_Error FM_MACSEC_ConfigSectagWithoutSCI(t_Handle h_FmMacsec);
329 
330 /**************************************************************************//**
331  @Function      FM_MACSEC_ConfigException
332 
333  @Description   Calling this routine changes the internal driver data base
334                 from its default selection of exceptions enablement;
335                 By default all exceptions are enabled.
336 
337  @Param[in]     h_FmMacsec      FM MACSEC module descriptor.
338  @Param[in]     exception       The exception to be selected.
339  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
340 
341  @Return        E_OK on success; Error code otherwise.
342 
343  @Cautions      Allowed only following FM_MACSEC_Config() and before FM_MACSEC_Init().
344 *//***************************************************************************/
345 t_Error FM_MACSEC_ConfigException(t_Handle h_FmMacsec, e_FmMacsecExceptions exception, bool enable);
346 
347 /** @} */ /* end of FM_MACSEC_advanced_init_grp group */
348 /** @} */ /* end of FM_MACSEC_init_grp group */
349 
350 
351 /**************************************************************************//**
352  @Group         FM_MACSEC_runtime_control_grp FM-MACSEC Runtime Control Data Unit
353 
354  @Description   FM MACSEC runtime control data unit API functions, definitions and enums.
355 
356  @{
357 *//***************************************************************************/
358 
359 /**************************************************************************//**
360  @Function      FM_MACSEC_GetRevision
361 
362  @Description   Return MACSEC HW chip revision
363 
364  @Param[in]     h_FmMacsec         FM MACSEC module descriptor.
365  @Param[out]    p_MacsecRevision   MACSEC revision as defined by the chip.
366 
367  @Return        E_OK on success; Error code otherwise.
368 
369  @Cautions      Allowed only after FM_MACSEC_Init().
370 *//***************************************************************************/
371 t_Error FM_MACSEC_GetRevision(t_Handle h_FmMacsec, uint32_t *p_MacsecRevision);
372 
373 /**************************************************************************//**
374  @Function      FM_MACSEC_Enable
375 
376  @Description   This routine should be called after MACSEC is initialized for enabling all
377                 MACSEC engines according to their existing configuration.
378 
379  @Param[in]     h_FmMacsec         FM MACSEC module descriptor.
380 
381  @Return        E_OK on success; Error code otherwise.
382 
383  @Cautions      Allowed only following FM_MACSEC_Init() and when MACSEC is disabled.
384 *//***************************************************************************/
385 t_Error FM_MACSEC_Enable(t_Handle h_FmMacsec);
386 
387 /**************************************************************************//**
388  @Function      FM_MACSEC_Disable
389 
390  @Description   This routine may be called when MACSEC is enabled in order to
391                 disable all MACSEC engines; The MACSEC is working in bypass mode.
392 
393  @Param[in]     h_FmMacsec         FM MACSEC module descriptor.
394 
395  @Return        E_OK on success; Error code otherwise.
396 
397  @Cautions      Allowed only following FM_MACSEC_Init() and when MACSEC is enabled.
398 *//***************************************************************************/
399 t_Error FM_MACSEC_Disable(t_Handle h_FmMacsec);
400 
401 /**************************************************************************//**
402  @Function      FM_MACSEC_SetException
403 
404  @Description   Calling this routine enables/disables the specified exception.
405 
406  @Param[in]     h_FmMacsec      FM MACSEC module descriptor.
407  @Param[in]     exception       The exception to be selected.
408  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
409 
410  @Return        E_OK on success; Error code otherwise.
411 
412  @Cautions      Allowed only following FM_MACSEC_Init().
413 *//***************************************************************************/
414 t_Error FM_MACSEC_SetException(t_Handle h_FmMacsec, e_FmMacsecExceptions exception, bool enable);
415 
416 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
417 /**************************************************************************//**
418  @Function      FM_MACSEC_DumpRegs
419 
420  @Description   Dump internal registers.
421 
422  @Param[in]     h_FmMacsec  - FM MACSEC module descriptor.
423 
424  @Return        E_OK on success; Error code otherwise.
425 
426  @Cautions      Allowed only after FM_MACSEC_Init().
427 *//***************************************************************************/
428 t_Error FM_MACSEC_DumpRegs(t_Handle h_FmMacsec);
429 #endif /* (defined(DEBUG_ERRORS) && ... */
430 
431 #ifdef VERIFICATION_SUPPORT
432 /********************* VERIFICATION ONLY ********************************/
433 /**************************************************************************//**
434  @Function      FM_MACSEC_BackdoorSet
435 
436  @Description   Set register of the MACSEC memory map
437 
438  @Param[in]     h_FmMacsec          FM MACSEC module descriptor.
439  @Param[out]    offset              Register offset.
440  @Param[out]    value               Value to write.
441 
442 
443  @Return        None
444 
445  @Cautions      Allowed only following FM_MACSEC_Init().
446 *//***************************************************************************/
447 t_Error FM_MACSEC_BackdoorSet(t_Handle h_FmMacsec, uint32_t offset, uint32_t value);
448 
449 /**************************************************************************//**
450  @Function      FM_MACSEC_BackdoorGet
451 
452  @Description   Read from register of the MACSEC memory map.
453 
454  @Param[in]     h_FmMacsec          FM MACSEC module descriptor.
455  @Param[out]    offset              Register offset.
456 
457  @Return        Value read
458 
459  @Cautions      Allowed only following FM_MACSEC_Init().
460 *//***************************************************************************/
461 uint32_t FM_MACSEC_BackdoorGet(t_Handle h_FmMacsec, uint32_t offset);
462 #endif /* VERIFICATION_SUPPORT */
463 
464 /** @} */ /* end of FM_MACSEC_runtime_control_grp group */
465 
466 
467 /**************************************************************************//**
468  @Group         FM_MACSEC_SECY_grp FM-MACSEC SecY
469 
470  @Description   FM-MACSEC SecY API functions, definitions and enums
471 
472  @{
473 *//***************************************************************************/
474 
475 typedef uint8_t     macsecSAKey_t[32];
476 typedef uint64_t    macsecSCI_t;
477 typedef uint8_t     macsecAN_t;
478 
479 /**************************************************************************//**
480 @Description   MACSEC SECY Cipher Suite
481 *//***************************************************************************/
482 typedef enum e_FmMacsecSecYCipherSuite {
483     e_FM_MACSEC_SECY_GCM_AES_128 = 0,       /**< GCM-AES-128 */
484 #if (DPAA_VERSION >= 11)
485     e_FM_MACSEC_SECY_GCM_AES_256            /**< GCM-AES-256 */
486 #endif /* (DPAA_VERSION >= 11) */
487 } e_FmMacsecSecYCipherSuite;
488 
489 /**************************************************************************//**
490  @Description   MACSEC SECY Exceptions
491 *//***************************************************************************/
492 typedef enum e_FmMacsecSecYExceptions {
493     e_FM_MACSEC_SECY_EX_FRAME_DISCARDED     /**< Frame  Discarded */
494 } e_FmMacsecSecYExceptions;
495 
496 /**************************************************************************//**
497  @Description   MACSEC SECY Events
498 *//***************************************************************************/
499 typedef enum e_FmMacsecSecYEvents {
500     e_FM_MACSEC_SECY_EV_NEXT_PN             /**< Next Packet Number exhaustion threshold reached */
501 } e_FmMacsecSecYEvents;
502 
503 /**************************************************************************//**
504  @Collection   MACSEC SECY Frame Discarded Descriptor error
505 *//***************************************************************************/
506 typedef uint8_t    macsecTxScFrameDiscardedErrSelect_t; /**< typedef for defining Frame Discarded Descriptor errors */
507 
508 #define FM_MACSEC_SECY_TX_SC_FRM_DISCAR_ERR_NEXT_PN_ZERO              0x8000  /**< NextPn == 0 */
509 #define FM_MACSEC_SECY_TX_SC_FRM_DISCAR_ERR_SC_DISBALE                0x4000  /**< SC is disable */
510 /* @} */
511 
512 /**************************************************************************//**
513  @Function      t_FmMacsecSecYExceptionsCallback
514 
515  @Description   Exceptions user callback routine, will be called upon an
516                 exception passing the exception identification.
517 
518  @Param[in]     h_App       A handle to an application layer object; This handle
519                             will be passed by the driver upon calling this callback.
520  @Param[in]     exception   The exception.
521 *//***************************************************************************/
522 typedef void (t_FmMacsecSecYExceptionsCallback) ( t_Handle                  h_App,
523                                                   e_FmMacsecSecYExceptions  exception);
524 
525 /**************************************************************************//**
526  @Function      t_FmMacsecSecYEventsCallback
527 
528  @Description   Events user callback routine, will be called upon an
529                 event passing the event identification.
530 
531  @Param[in]     h_App       A handle to an application layer object; This handle
532                             will be passed by the driver upon calling this callback.
533  @Param[in]     event       The event.
534 *//***************************************************************************/
535 typedef void (t_FmMacsecSecYEventsCallback) ( t_Handle                  h_App,
536                                               e_FmMacsecSecYEvents      event);
537 
538 /**************************************************************************//**
539  @Description   RFC2863 MIB
540 *//***************************************************************************/
541 typedef struct t_MIBStatistics {
542     uint64_t  ifInOctets;              /**< Total number of byte received */
543     uint64_t  ifInPkts;                /**< Total number of packets received */
544     uint64_t  ifInMcastPkts;           /**< Total number of multicast frame received */
545     uint64_t  ifInBcastPkts;           /**< Total number of broadcast frame received */
546     uint64_t  ifInDiscards;            /**< Frames received, but discarded due to problems within the MAC RX :
547                                                - InPktsNoTag,
548                                                - InPktsLate,
549                                                - InPktsOverrun */
550     uint64_t  ifInErrors;              /**< Number of frames received with error:
551                                                - InPktsBadTag,
552                                                - InPktsNoSCI,
553                                                - InPktsNotUsingSA
554                                                - InPktsNotValid */
555     uint64_t  ifOutOctets;             /**< Total number of byte sent */
556     uint64_t  ifOutPkts;               /**< Total number of packets sent */
557     uint64_t  ifOutMcastPkts;          /**< Total number of multicast frame sent */
558     uint64_t  ifOutBcastPkts;          /**< Total number of multicast frame sent */
559     uint64_t  ifOutDiscards;           /**< Frames received, but discarded due to problems within the MAC TX N/A! */
560     uint64_t  ifOutErrors;             /**< Number of frames transmitted with error:
561                                                - FIFO Overflow Error
562                                                - FIFO Underflow Error
563                                                - Other */
564 } t_MIBStatistics;
565 
566 /**************************************************************************//**
567  @Description   MACSEC SecY Rx SA Statistics
568 *//***************************************************************************/
569 typedef struct t_FmMacsecSecYRxSaStatistics {
570     uint32_t            inPktsOK;               /**< The number of frames with resolved SCI, have passed all
571                                                      frame validation frame validation with the validateFrame not set to disable */
572     uint32_t            inPktsInvalid;          /**< The number of frames with resolved SCI, that have failed frame
573                                                      validation with the validateFrame set to check */
574     uint32_t            inPktsNotValid;         /**< The number of frames with resolved SCI, discarded on the controlled port,
575                                                      that have failed frame validation with the validateFrame set to strict or the c bit is set */
576     uint32_t            inPktsNotUsingSA;       /**< The number of frames received with resolved SCI and discarded on disabled or
577                                                      not provisioned SA with validateFrame in the strict mode or the C bit is set */
578     uint32_t            inPktsUnusedSA;         /**< The number of frames received with resolved SCI on disabled or not provisioned SA
579                                                      with validateFrame not in the strict mode and the C bit is cleared */
580 } t_FmMacsecSecYRxSaStatistics;
581 
582 /**************************************************************************//**
583  @Description   MACSEC SecY Tx SA Statistics
584 *//***************************************************************************/
585 typedef struct t_FmMacsecSecYTxSaStatistics {
586     uint64_t            outPktsProtected;       /**< The number of frames, that the user of the controlled port requested to
587                                                      be transmitted, which were integrity protected */
588     uint64_t            outPktsEncrypted;       /**< The number of frames, that the user of the controlled port requested to
589                                                      be transmitted, which were confidentiality protected */
590 } t_FmMacsecSecYTxSaStatistics;
591 
592 /**************************************************************************//**
593  @Description   MACSEC SecY Rx SC Statistics
594 *//***************************************************************************/
595 typedef struct t_FmMacsecSecYRxScStatistics {
596     uint64_t            inPktsUnchecked;        /**< The number of frames with resolved SCI, delivered to the user of a controlled port,
597                                                      that are not validated with the validateFrame set to disable */
598     uint64_t            inPktsDelayed;          /**< The number of frames with resolved SCI, delivered to the user of a controlled port,
599                                                      that have their PN smaller than the lowest_PN with the validateFrame set to
600                                                      disable or replayProtect disabled */
601     uint64_t            inPktsLate;             /**< The number of frames with resolved SCI, discarded on the controlled port,
602                                                      that have their PN smaller than the lowest_PN with the validateFrame set to
603                                                      Check or Strict and replayProtect enabled */
604     uint64_t            inPktsOK;               /**< The number of frames with resolved SCI, have passed all
605                                                      frame validation frame validation with the validateFrame not set to disable */
606     uint64_t            inPktsInvalid;          /**< The number of frames with resolved SCI, that have failed frame
607                                                      validation with the validateFrame set to check */
608     uint64_t            inPktsNotValid;         /**< The number of frames with resolved SCI, discarded on the controlled port,
609                                                      that have failed frame validation with the validateFrame set to strict or the c bit is set */
610     uint64_t            inPktsNotUsingSA;       /**< The number of frames received with resolved SCI and discarded on disabled or
611                                                      not provisioned SA with validateFrame in the strict mode or the C bit is set */
612     uint64_t            inPktsUnusedSA;         /**< The number of frames received with resolved SCI on disabled or not provisioned SA
613                                                      with validateFrame not in the strict mode and the C bit is cleared */
614 } t_FmMacsecSecYRxScStatistics;
615 
616 /**************************************************************************//**
617  @Description   MACSEC SecY Tx SC Statistics
618 *//***************************************************************************/
619 typedef struct t_FmMacsecSecYTxScStatistics {
620     uint64_t            outPktsProtected;       /**< The number of frames, that the user of the controlled port requested to
621                                                      be transmitted, which were integrity protected */
622     uint64_t            outPktsEncrypted;       /**< The number of frames, that the user of the controlled port requested to
623                                                      be transmitted, which were confidentiality protected */
624 } t_FmMacsecSecYTxScStatistics;
625 
626 /**************************************************************************//**
627  @Description   MACSEC SecY Statistics
628 *//***************************************************************************/
629 typedef struct t_FmMacsecSecYStatistics {
630     t_MIBStatistics     mibCtrlStatistics;      /**< Controlled port MIB statistics */
631     t_MIBStatistics     mibNonCtrlStatistics;   /**< Uncontrolled port MIB statistics */
632 /* Frame verification statistics */
633     uint64_t            inPktsUntagged;         /**< The number of received packets without the MAC security tag
634                                                      (SecTAG) with validateFrames which is not in the strict mode */
635     uint64_t            inPktsNoTag;            /**< The number of received packets discarded without the
636                                                      MAC security tag (SecTAG) with validateFrames which is in the strict mode */
637     uint64_t            inPktsBadTag;           /**< The number of received packets discarded with an invalid
638                                                      SecTAG or a zero value PN or an invalid ICV */
639     uint64_t            inPktsUnknownSCI;       /**< The number of received packets with unknown SCI with the
640                                                      condition : validateFrames is not in the strict mode and the
641                                                      C bit in the SecTAG is not set */
642     uint64_t            inPktsNoSCI;            /**< The number of received packets discarded with unknown SCI
643                                                      information with the condition : validateFrames is in the strict mode
644                                                      or the C bit in the SecTAG is set */
645     uint64_t            inPktsOverrun;          /**< The number of packets discarded because the number of
646                                                      received packets exceeded the cryptographic performance capabilities */
647 /* Frame validation statistics */
648     uint64_t            inOctetsValidated;      /**< The number of octets of plaintext recovered from received frames with
649                                                      resolved SCI that were integrity protected but not encrypted */
650     uint64_t            inOctetsDecrypted;      /**< The number of octets of plaintext recovered from received frames with
651                                                      resolved SCI that were integrity protected and encrypted */
652 /* Frame generation statistics */
653     uint64_t            outPktsUntagged;        /**< The number of frames, that the user of the controlled port requested to
654                                                      be transmitted, with protectFrame false */
655     uint64_t            outPktsTooLong;         /**< The number of frames, that the user of the controlled port requested to
656                                                      be transmitted, discarded due to length being larger than Maximum Frame Length (MACSEC_MFL) */
657 /* Frame protection statistics */
658     uint64_t            outOctetsProtected;     /**< The number of octets of User Data in transmitted frames that were
659                                                      integrity protected but not encrypted */
660     uint64_t            outOctetsEncrypted;     /**< The number of octets of User Data in transmitted frames that were
661                                                      both integrity protected and encrypted */
662 } t_FmMacsecSecYStatistics;
663 
664 
665 /**************************************************************************//**
666  @Description   MACSEC SecY SC Params
667 *//***************************************************************************/
668 typedef struct t_FmMacsecSecYSCParams {
669     macsecSCI_t                 sci;            /**< The secure channel identification of the SC */
670     e_FmMacsecSecYCipherSuite   cipherSuite;    /**< Cipher suite to be used for the SC */
671 } t_FmMacsecSecYSCParams;
672 
673 /**************************************************************************//**
674  @Group         FM_MACSEC_SECY_init_grp FM-MACSEC SecY Initialization Unit
675 
676  @Description   FM-MACSEC SecY Initialization Unit
677 
678  @{
679 *//***************************************************************************/
680 
681 /**************************************************************************//**
682  @Description   enum for validate frames
683 *//***************************************************************************/
684 typedef enum e_FmMacsecValidFrameBehavior {
685     e_FM_MACSEC_VALID_FRAME_BEHAVIOR_DISABLE = 0,   /**< disable the validation function */
686     e_FM_MACSEC_VALID_FRAME_BEHAVIOR_CHECK,         /**< enable the validation function but only for checking
687                                                          without filtering out invalid frames */
688     e_FM_MACSEC_VALID_FRAME_BEHAVIOR_STRICT         /**< enable the validation function and also strictly filter
689                                                          out those invalid frames */
690 } e_FmMacsecValidFrameBehavior;
691 
692 /**************************************************************************//**
693  @Description   enum for sci insertion
694 *//***************************************************************************/
695 typedef enum e_FmMacsecSciInsertionMode {
696     e_FM_MACSEC_SCI_INSERTION_MODE_EXPLICIT_SECTAG = 0, /**< explicit sci in the sectag */
697     e_FM_MACSEC_SCI_INSERTION_MODE_EXPLICIT_MAC_SA,     /**< mac sa is overwritten with the sci*/
698     e_FM_MACSEC_SCI_INSERTION_MODE_IMPLICT_PTP          /**< implicit point-to-point sci (pre-shared) */
699 } e_FmMacsecSciInsertionMode;
700 
701 /**************************************************************************//**
702  @Description   FM MACSEC SecY config input
703 *//***************************************************************************/
704 typedef struct t_FmMacsecSecYParams {
705     t_Handle                                    h_FmMacsec;             /**< A handle to the FM MACSEC object */
706     t_FmMacsecSecYSCParams                      txScParams;             /**< Tx SC Params */
707     uint32_t                                    numReceiveChannels;     /**< Number of receive channels dedicated to this SecY */
708     t_FmMacsecSecYExceptionsCallback            *f_Exception;           /**< Callback routine to be called by the driver upon SecY exception */
709     t_FmMacsecSecYEventsCallback                *f_Event;               /**< Callback routine to be called by the driver upon SecY event */
710     t_Handle                                    h_App;                  /**< A handle to an application layer object; This handle will
711                                                                              be passed by the driver upon calling the above callbacks */
712 } t_FmMacsecSecYParams;
713 
714 /**************************************************************************//**
715  @Function      FM_MACSEC_SECY_Config
716 
717  @Description   Creates descriptor for the FM MACSEC SECY module;
718 
719                 The routine returns a handle (descriptor) to the FM MACSEC SECY object;
720                 This descriptor must be passed as first parameter to all other
721                 FM MACSEC SECY function calls;
722                 No actual initialization or configuration of FM MACSEC SecY hardware is
723                 done by this routine.
724 
725  @Param[in]     p_FmMacsecSecYParam     Pointer to data structure of parameters.
726 
727  @Return        Handle to FM MACSEC SECY object, or NULL for Failure.
728 *//***************************************************************************/
729 t_Handle FM_MACSEC_SECY_Config(t_FmMacsecSecYParams *p_FmMacsecSecYParam);
730 
731 /**************************************************************************//**
732  @Function      FM_MACSEC_SECY_Init
733 
734  @Description   Initializes the FM MACSEC SECY module.
735 
736  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
737 
738  @Return        E_OK on success; Error code otherwise.
739 *//***************************************************************************/
740 t_Error FM_MACSEC_SECY_Init(t_Handle h_FmMacsecSecY);
741 
742 /**************************************************************************//**
743  @Function      FM_MACSEC_SECY_Free
744 
745  @Description   Frees all resources that were assigned to FM MACSEC SECY module.
746 
747                 Calling this routine invalidates the descriptor.
748 
749  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
750 
751  @Return        E_OK on success; Error code otherwise.
752 *//***************************************************************************/
753 t_Error FM_MACSEC_SECY_Free(t_Handle h_FmMacsecSecY);
754 
755 /**************************************************************************//**
756  @Group         FM_MACSEC_SECY_advanced_init_grp  FM-MACSEC SecY Advanced Configuration Unit
757 
758  @Description   Configuration functions used to change default values.
759 
760  @{
761 *//***************************************************************************/
762 
763 /**************************************************************************//**
764  @Function      FM_MACSEC_SECY_ConfigSciInsertionMode
765 
766  @Description   Calling this routine changes the SCI-insertion-mode in the
767                 internal driver data base from its default configuration
768                 [DEFAULT_sciInsertionMode]
769 
770  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
771  @Param[in]     sciInsertionMode    Sci insertion mode
772 
773  @Return        E_OK on success; Error code otherwise.
774 
775  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
776 
777 *//***************************************************************************/
778 t_Error FM_MACSEC_SECY_ConfigSciInsertionMode(t_Handle h_FmMacsecSecY, e_FmMacsecSciInsertionMode sciInsertionMode);
779 
780 /**************************************************************************//**
781  @Function      FM_MACSEC_SECY_ConfigProtectFrames
782 
783  @Description   Calling this routine changes the protect-frame mode in the
784                 internal driver data base from its default configuration
785                 [DEFAULT_protectFrames]
786 
787  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
788  @Param[in]     protectFrames       If FALSE, frames are transmitted without modification
789 
790  @Return        E_OK on success; Error code otherwise.
791 
792  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
793 
794 *//***************************************************************************/
795 t_Error FM_MACSEC_SECY_ConfigProtectFrames(t_Handle h_FmMacsecSecY, bool protectFrames);
796 
797 /**************************************************************************//**
798  @Function      FM_MACSEC_SECY_ConfigReplayWindow
799 
800  @Description   Calling this routine changes the replay-window settings in the
801                 internal driver data base from its default configuration
802                 [DEFAULT_replayEnable], [DEFAULT_replayWindow]
803 
804  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
805  @Param[in]     replayProtect;      Replay protection function mode
806  @Param[in]     replayWindow;       The size of the replay window
807 
808  @Return        E_OK on success; Error code otherwise.
809 
810  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
811 
812 *//***************************************************************************/
813 t_Error FM_MACSEC_SECY_ConfigReplayWindow(t_Handle h_FmMacsecSecY, bool replayProtect, uint32_t replayWindow);
814 
815 /**************************************************************************//**
816  @Function      FM_MACSEC_SECY_ConfigValidationMode
817 
818  @Description   Calling this routine changes the frame-validation-behavior mode
819                 in the internal driver data base from its default configuration
820                 [DEFAULT_validateFrames]
821 
822  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
823  @Param[in]     validateFrames      Validation function mode
824 
825  @Return        E_OK on success; Error code otherwise.
826 
827  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
828 
829 *//***************************************************************************/
830 t_Error FM_MACSEC_SECY_ConfigValidationMode(t_Handle h_FmMacsecSecY, e_FmMacsecValidFrameBehavior validateFrames);
831 
832 /**************************************************************************//**
833  @Function      FM_MACSEC_SECY_ConfigConfidentiality
834 
835  @Description   Calling this routine changes the confidentiality settings in the
836                 internal driver data base from its default configuration
837                 [DEFAULT_confidentialityEnable], [DEFAULT_confidentialityOffset]
838 
839  @Param[in]     h_FmMacsecSecY          FM MACSEC SECY module descriptor.
840  @Param[in]     confidentialityEnable   TRUE  - confidentiality protection and integrity protection
841                                         FALSE - no confidentiality protection, only integrity protection
842  @Param[in]     confidentialityOffset   The number of initial octets of each MSDU without confidentiality protection
843                                         common values are 0, 30, and 50
844 
845  @Return        E_OK on success; Error code otherwise.
846 
847  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
848 
849 *//***************************************************************************/
850 t_Error FM_MACSEC_SECY_ConfigConfidentiality(t_Handle h_FmMacsecSecY, bool confidentialityEnable, uint16_t confidentialityOffset);
851 
852 /**************************************************************************//**
853  @Function      FM_MACSEC_SECY_ConfigPointToPoint
854 
855  @Description   configure this SecY to work in point-to-point mode, means that
856                 it will have only one rx sc;
857 
858  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
859 
860  @Return        E_OK on success; Error code otherwise.
861 
862  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init();
863                 Can be called only once in a system; only the first secY that will call this
864                 routine will be able to operate in Point-To-Point mode.
865 *//***************************************************************************/
866 t_Error FM_MACSEC_SECY_ConfigPointToPoint(t_Handle h_FmMacsecSecY);
867 
868 /**************************************************************************//**
869  @Function      FM_MACSEC_SECY_ConfigException
870 
871  @Description   Calling this routine changes the internal driver data base
872                 from its default selection of exceptions enablement;
873                 By default all exceptions are enabled.
874 
875  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
876  @Param[in]     exception       The exception to be selected.
877  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
878 
879  @Return        E_OK on success; Error code otherwise.
880 
881  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init().
882 *//***************************************************************************/
883 t_Error FM_MACSEC_SECY_ConfigException(t_Handle h_FmMacsecSecY, e_FmMacsecSecYExceptions exception, bool enable);
884 
885 /**************************************************************************//**
886  @Function      FM_MACSEC_SECY_ConfigEvent
887 
888  @Description   Calling this routine changes the internal driver data base
889                 from its default selection of events enablement;
890                 By default all events are enabled.
891 
892  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
893  @Param[in]     event           The event to be selected.
894  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
895 
896  @Return        E_OK on success; Error code otherwise.
897 
898  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init().
899 *//***************************************************************************/
900 t_Error FM_MACSEC_SECY_ConfigEvent(t_Handle h_FmMacsecSecY, e_FmMacsecSecYEvents event, bool enable);
901 
902 /** @} */ /* end of FM_MACSEC_SECY_advanced_init_grp group */
903 /** @} */ /* end of FM_MACSEC_SECY_init_grp group */
904 
905 
906 /**************************************************************************//**
907  @Group         FM_MACSEC_SECY_runtime_control_grp FM-MACSEC SecY Runtime Control Unit
908 
909  @Description   FM MACSEC SECY Runtime control unit API functions, definitions and enums.
910 
911  @{
912 *//***************************************************************************/
913 
914 /**************************************************************************//**
915  @Function      FM_MACSEC_SECY_CreateRxSc
916 
917  @Description   Create a receive secure channel.
918 
919  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
920  @Param[in]     scParams            secure channel params.
921 
922  @Return        E_OK on success; Error code otherwise.
923 
924  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
925 *//***************************************************************************/
926 t_Handle FM_MACSEC_SECY_CreateRxSc(t_Handle h_FmMacsecSecY, t_FmMacsecSecYSCParams *p_ScParams);
927 
928 /**************************************************************************//**
929  @Function      FM_MACSEC_SECY_DeleteRxSc
930 
931  @Description   Deleting an initialized secure channel.
932 
933  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
934  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
935 
936  @Return        E_OK on success; Error code otherwise.
937 
938  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSc().
939 *//***************************************************************************/
940 t_Error FM_MACSEC_SECY_DeleteRxSc(t_Handle h_FmMacsecSecY, t_Handle h_Sc);
941 
942 /**************************************************************************//**
943  @Function      FM_MACSEC_SECY_CreateRxSa
944 
945  @Description   Create a receive secure association for the secure channel;
946                 the SA cannot be used to receive frames until FM_MACSEC_SECY_RxSaEnableReceive is called.
947 
948  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
949  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
950  @Param[in]     an                  association number represent the SA.
951  @Param[in]     lowestPn            the lowest acceptable PN value for a received frame.
952  @Param[in]     key                 the desired key for this SA.
953 
954  @Return        E_OK on success; Error code otherwise.
955 
956  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSc().
957 *//***************************************************************************/
958 t_Error FM_MACSEC_SECY_CreateRxSa(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t lowestPn, macsecSAKey_t key);
959 
960 /**************************************************************************//**
961  @Function      FM_MACSEC_SECY_DeleteRxSa
962 
963  @Description   Deleting an initialized secure association.
964 
965  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
966  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
967  @Param[in]     an                  association number represent the SA.
968 
969  @Return        E_OK on success; Error code otherwise.
970 
971  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
972 *//***************************************************************************/
973 t_Error FM_MACSEC_SECY_DeleteRxSa(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an);
974 
975 /**************************************************************************//**
976  @Function      FM_MACSEC_SECY_RxSaEnableReceive
977 
978  @Description   Enabling the SA to receive frames.
979 
980  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
981  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
982  @Param[in]     an                  association number represent the SA.
983 
984  @Return        E_OK on success; Error code otherwise.
985 
986  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSa().
987 *//***************************************************************************/
988 t_Error FM_MACSEC_SECY_RxSaEnableReceive(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an);
989 
990 /**************************************************************************//**
991  @Function      FM_MACSEC_SECY_RxSaDisableReceive
992 
993  @Description   Disabling the SA from receive frames.
994 
995  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
996  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
997  @Param[in]     an                  association number represent the SA.
998 
999  @Return        E_OK on success; Error code otherwise.
1000 
1001  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSa().
1002 *//***************************************************************************/
1003 t_Error FM_MACSEC_SECY_RxSaDisableReceive(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an);
1004 
1005 /**************************************************************************//**
1006  @Function      FM_MACSEC_SECY_RxSaUpdateNextPn
1007 
1008  @Description   Update the next packet number expected on RX;
1009                 The value of nextPN shall be set to the greater of its existing value and the
1010                 supplied of updtNextPN (802.1AE-2006 10.7.15).
1011 
1012  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1013  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
1014  @Param[in]     an                  association number represent the SA.
1015  @Param[in]     updtNextPN          the next PN value for a received frame.
1016 
1017  @Return        E_OK on success; Error code otherwise.
1018 
1019  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSa().
1020 *//***************************************************************************/
1021 t_Error FM_MACSEC_SECY_RxSaUpdateNextPn(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t updtNextPN);
1022 
1023 /**************************************************************************//**
1024  @Function      FM_MACSEC_SECY_RxSaUpdateLowestPn
1025 
1026  @Description   Update the lowest packet number expected on RX;
1027                 The value of lowestPN shall be set to the greater of its existing value and the
1028                 supplied of updtLowestPN (802.1AE-2006 10.7.15).
1029 
1030  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1031  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
1032  @Param[in]     an                  association number represent the SA.
1033  @Param[in]     updtLowestPN        the lowest PN acceptable value for a received frame.
1034 
1035  @Return        E_OK on success; Error code otherwise.
1036 
1037  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSa().
1038 *//***************************************************************************/
1039 t_Error FM_MACSEC_SECY_RxSaUpdateLowestPn(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, uint32_t updtLowestPN);
1040 
1041 /**************************************************************************//**
1042  @Function      FM_MACSEC_SECY_RxSaModifyKey
1043 
1044  @Description   Modify the current key of the SA with a new one.
1045 
1046  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1047  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
1048  @Param[in]     an                  association number represent the SA.
1049  @Param[in]     key                 new key to replace the current key.
1050 
1051  @Return        E_OK on success; Error code otherwise.
1052 
1053  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSa().
1054 *//***************************************************************************/
1055 t_Error FM_MACSEC_SECY_RxSaModifyKey(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, macsecSAKey_t key);
1056 
1057 /**************************************************************************//**
1058  @Function      FM_MACSEC_SECY_CreateTxSa
1059 
1060  @Description   Create a transmit secure association for the secure channel;
1061                 the SA cannot be used to transmit frames until FM_MACSEC_SECY_TxSaSetActivate is called;
1062                 Only one SA can be active at a time.
1063 
1064  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1065  @Param[in]     an                  association number represent the SA.
1066  @Param[in]     key                 the desired key for this SA.
1067 
1068  @Return        E_OK on success; Error code otherwise.
1069 
1070  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1071 *//***************************************************************************/
1072 t_Error FM_MACSEC_SECY_CreateTxSa(t_Handle h_FmMacsecSecY, macsecAN_t an, macsecSAKey_t key);
1073 
1074 /**************************************************************************//**
1075  @Function      FM_MACSEC_SECY_DeleteTxSa
1076 
1077  @Description   Deleting an initialized secure association.
1078 
1079  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1080  @Param[in]     an                  association number represent the SA.
1081 
1082  @Return        E_OK on success; Error code otherwise.
1083 
1084  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1085 *//***************************************************************************/
1086 t_Error FM_MACSEC_SECY_DeleteTxSa(t_Handle h_FmMacsecSecY, macsecAN_t an);
1087 
1088 /**************************************************************************//**
1089  @Function      FM_MACSEC_SECY_TxSaModifyKey
1090 
1091  @Description   Modify the key of the inactive SA with a new one.
1092 
1093  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1094  @Param[in]     nextActiveAn        association number represent the next SA to be activated.
1095  @Param[in]     key                 new key to replace the current key.
1096 
1097  @Return        E_OK on success; Error code otherwise.
1098 
1099  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1100 *//***************************************************************************/
1101 t_Error FM_MACSEC_SECY_TxSaModifyKey(t_Handle h_FmMacsecSecY, macsecAN_t nextActiveAn, macsecSAKey_t key);
1102 
1103 /**************************************************************************//**
1104  @Function      FM_MACSEC_SECY_TxSaSetActive
1105 
1106  @Description   Set this SA to the active SA to be used on TX for SC;
1107                 only one SA can be active at a time.
1108 
1109  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1110  @Param[in]     an                  association number represent the SA.
1111 
1112  @Return        E_OK on success; Error code otherwise.
1113 
1114  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1115 *//***************************************************************************/
1116 t_Error FM_MACSEC_SECY_TxSaSetActive(t_Handle h_FmMacsecSecY, macsecAN_t an);
1117 
1118 /**************************************************************************//**
1119  @Function      FM_MACSEC_SECY_TxSaGetActive
1120 
1121  @Description   Get the active SA that being used for TX.
1122 
1123  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1124  @Param[out]    p_An                the active an.
1125 
1126  @Return        E_OK on success; Error code otherwise.
1127 
1128  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1129 *//***************************************************************************/
1130 t_Error FM_MACSEC_SECY_TxSaGetActive(t_Handle h_FmMacsecSecY, macsecAN_t *p_An);
1131 
1132 /**************************************************************************//**
1133  @Function      FM_MACSEC_SECY_GetStatistics
1134 
1135  @Description   get all statistics counters.
1136 
1137  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1138  @Param[in]     p_Statistics        Structure with statistics.
1139 
1140  @Return        E_OK on success; Error code otherwise.
1141 
1142  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1143 *//***************************************************************************/
1144 t_Error FM_MACSEC_SECY_GetStatistics(t_Handle h_FmMacsecSecY, t_FmMacsecSecYStatistics *p_Statistics);
1145 
1146 /**************************************************************************//**
1147  @Function      FM_MACSEC_SECY_RxScGetStatistics
1148 
1149  @Description   get all statistics counters.
1150 
1151  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1152  @Param[in]     h_Sc                Rx Sc handle.
1153  @Param[in]     p_Statistics        Structure with statistics.
1154 
1155  @Return        E_OK on success; Error code otherwise.
1156 
1157  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1158 *//***************************************************************************/
1159 t_Error FM_MACSEC_SECY_RxScGetStatistics(t_Handle h_FmMacsecSecY, t_Handle h_Sc, t_FmMacsecSecYRxScStatistics *p_Statistics);
1160 
1161 /**************************************************************************//**
1162  @Function      FM_MACSEC_SECY_RxSaGetStatistics
1163 
1164  @Description   get all statistics counters
1165 
1166  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1167  @Param[in]     h_Sc                Rx Sc handle.
1168  @Param[in]     an                  association number represent the SA.
1169  @Param[in]     p_Statistics        Structure with statistics.
1170 
1171  @Return        E_OK on success; Error code otherwise.
1172 
1173  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1174 *//***************************************************************************/
1175 t_Error FM_MACSEC_SECY_RxSaGetStatistics(t_Handle h_FmMacsecSecY, t_Handle h_Sc, macsecAN_t an, t_FmMacsecSecYRxSaStatistics *p_Statistics);
1176 
1177 /**************************************************************************//**
1178  @Function      FM_MACSEC_SECY_TxScGetStatistics
1179 
1180  @Description   get all statistics counters.
1181 
1182  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1183  @Param[in]     p_Statistics        Structure with statistics.
1184 
1185  @Return        E_OK on success; Error code otherwise.
1186 
1187  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1188 *//***************************************************************************/
1189 t_Error FM_MACSEC_SECY_TxScGetStatistics(t_Handle h_FmMacsecSecY, t_FmMacsecSecYTxScStatistics *p_Statistics);
1190 
1191 /**************************************************************************//**
1192  @Function      FM_MACSEC_SECY_TxSaGetStatistics
1193 
1194  @Description   get all statistics counters.
1195 
1196  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1197  @Param[in]     an                  association number represent the SA.
1198  @Param[in]     p_Statistics        Structure with statistics.
1199 
1200  @Return        E_OK on success; Error code otherwise.
1201 
1202  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1203 *//***************************************************************************/
1204 t_Error FM_MACSEC_SECY_TxSaGetStatistics(t_Handle h_FmMacsecSecY, macsecAN_t an, t_FmMacsecSecYTxSaStatistics *p_Statistics);
1205 
1206 /**************************************************************************//**
1207  @Function      FM_MACSEC_SECY_SetException
1208 
1209  @Description   Calling this routine enables/disables the specified exception.
1210 
1211  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
1212  @Param[in]     exception       The exception to be selected.
1213  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
1214 
1215  @Return        E_OK on success; Error code otherwise.
1216 
1217  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1218 *//***************************************************************************/
1219 t_Error FM_MACSEC_SECY_SetException(t_Handle h_FmMacsecSecY, e_FmMacsecExceptions exception, bool enable);
1220 
1221 /**************************************************************************//**
1222  @Function      FM_MACSEC_SECY_SetEvent
1223 
1224  @Description   Calling this routine enables/disables the specified event.
1225 
1226  @Param[in]     h_FmMacsecSecY  FM MACSEC SECY module descriptor.
1227  @Param[in]     event           The event to be selected.
1228  @Param[in]     enable          TRUE to enable interrupt, FALSE to mask it.
1229 
1230  @Return        E_OK on success; Error code otherwise.
1231 
1232  @Cautions      Allowed only following FM_MACSEC_SECY_Config() and before FM_MACSEC_SECY_Init().
1233 *//***************************************************************************/
1234 t_Error FM_MACSEC_SECY_SetEvent(t_Handle h_FmMacsecSecY, e_FmMacsecSecYEvents event, bool enable);
1235 
1236 /**************************************************************************//**
1237  @Function      FM_MACSEC_SECY_GetRxScPhysId
1238 
1239  @Description   return the physical id of the Secure Channel.
1240 
1241  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1242  @Param[in]     h_Sc                SC handle as returned by FM_MACSEC_SECY_CreateRxSc.
1243  @Param[out]    p_ScPhysId          the SC physical id.
1244 
1245  @Return        E_OK on success; Error code otherwise.
1246 
1247  @Cautions      Allowed only following FM_MACSEC_SECY_CreateRxSc().
1248 *//***************************************************************************/
1249 t_Error FM_MACSEC_SECY_GetRxScPhysId(t_Handle h_FmMacsecSecY, t_Handle h_Sc, uint32_t *p_ScPhysId);
1250 
1251 /**************************************************************************//**
1252  @Function      FM_MACSEC_SECY_GetTxScPhysId
1253 
1254  @Description   return the physical id of the Secure Channel.
1255 
1256  @Param[in]     h_FmMacsecSecY      FM MACSEC SECY module descriptor.
1257  @Param[out]    p_ScPhysId          the SC physical id.
1258 
1259  @Return        E_OK on success; Error code otherwise.
1260 
1261  @Cautions      Allowed only following FM_MACSEC_SECY_Init().
1262 *//***************************************************************************/
1263 t_Error FM_MACSEC_SECY_GetTxScPhysId(t_Handle h_FmMacsecSecY, uint32_t *p_ScPhysId);
1264 
1265 /** @} */ /* end of FM_MACSEC_SECY_runtime_control_grp group */
1266 /** @} */ /* end of FM_MACSEC_SECY_grp group */
1267 /** @} */ /* end of FM_MACSEC_grp group */
1268 /** @} */ /* end of FM_grp group */
1269 
1270 
1271 #endif /* __FM_MACSEC_EXT_H */
1272