1852ba100SJustin Hibbits /*
2852ba100SJustin Hibbits  * Copyright 2008-2015 Freescale Semiconductor Inc.
3852ba100SJustin Hibbits  *
4852ba100SJustin Hibbits  * Redistribution and use in source and binary forms, with or without
5852ba100SJustin Hibbits  * modification, are permitted provided that the following conditions are met:
6852ba100SJustin Hibbits  *     * Redistributions of source code must retain the above copyright
7852ba100SJustin Hibbits  *       notice, this list of conditions and the following disclaimer.
8852ba100SJustin Hibbits  *     * Redistributions in binary form must reproduce the above copyright
9852ba100SJustin Hibbits  *       notice, this list of conditions and the following disclaimer in the
10852ba100SJustin Hibbits  *       documentation and/or other materials provided with the distribution.
11852ba100SJustin Hibbits  *     * Neither the name of Freescale Semiconductor nor the
12852ba100SJustin Hibbits  *       names of its contributors may be used to endorse or promote products
13852ba100SJustin Hibbits  *       derived from this software without specific prior written permission.
14852ba100SJustin Hibbits  *
15852ba100SJustin Hibbits  *
16852ba100SJustin Hibbits  * ALTERNATIVELY, this software may be distributed under the terms of the
17852ba100SJustin Hibbits  * GNU General Public License ("GPL") as published by the Free Software
18852ba100SJustin Hibbits  * Foundation, either version 2 of that License or (at your option) any
19852ba100SJustin Hibbits  * later version.
20852ba100SJustin Hibbits  *
21852ba100SJustin Hibbits  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22852ba100SJustin Hibbits  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23852ba100SJustin Hibbits  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24852ba100SJustin Hibbits  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25852ba100SJustin Hibbits  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26852ba100SJustin Hibbits  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27852ba100SJustin Hibbits  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28852ba100SJustin Hibbits  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29852ba100SJustin Hibbits  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30852ba100SJustin Hibbits  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31852ba100SJustin Hibbits  */
32852ba100SJustin Hibbits 
33852ba100SJustin Hibbits /******************************************************************************
34852ba100SJustin Hibbits  @File          fm_macsec_master.h
35852ba100SJustin Hibbits 
36852ba100SJustin Hibbits  @Description   FM MACSEC internal structures and definitions.
37852ba100SJustin Hibbits *//***************************************************************************/
38852ba100SJustin Hibbits #ifndef __FM_MACSEC_MASTER_H
39852ba100SJustin Hibbits #define __FM_MACSEC_MASTER_H
40852ba100SJustin Hibbits 
41852ba100SJustin Hibbits #include "error_ext.h"
42852ba100SJustin Hibbits #include "std_ext.h"
43852ba100SJustin Hibbits 
44852ba100SJustin Hibbits #include "fm_macsec.h"
45852ba100SJustin Hibbits 
46852ba100SJustin Hibbits 
47852ba100SJustin Hibbits #define MACSEC_ICV_SIZE             16
48852ba100SJustin Hibbits #define MACSEC_SECTAG_SIZE          16
49852ba100SJustin Hibbits #define MACSEC_SCI_SIZE             8
50852ba100SJustin Hibbits #define MACSEC_FCS_SIZE             4
51852ba100SJustin Hibbits 
52852ba100SJustin Hibbits /**************************************************************************//**
53852ba100SJustin Hibbits  @Description       Exceptions
54852ba100SJustin Hibbits *//***************************************************************************/
55852ba100SJustin Hibbits 
56852ba100SJustin Hibbits #define FM_MACSEC_EX_TX_SC_0       0x80000000
57852ba100SJustin Hibbits #define FM_MACSEC_EX_TX_SC(sc)     (FM_MACSEC_EX_TX_SC_0 >> (sc))
58852ba100SJustin Hibbits #define FM_MACSEC_EX_ECC           0x00000001
59852ba100SJustin Hibbits 
60852ba100SJustin Hibbits #define GET_EXCEPTION_FLAG(bitMask, exception, id)  switch (exception){     \
61852ba100SJustin Hibbits     case e_FM_MACSEC_EX_TX_SC:                                              \
62852ba100SJustin Hibbits         bitMask = FM_MACSEC_EX_TX_SC(id); break;                            \
63852ba100SJustin Hibbits     case e_FM_MACSEC_EX_ECC:                                                \
64852ba100SJustin Hibbits         bitMask = FM_MACSEC_EX_ECC; break;                                  \
65852ba100SJustin Hibbits     default: bitMask = 0;break;}
66852ba100SJustin Hibbits 
67852ba100SJustin Hibbits #define FM_MACSEC_USER_EX_SINGLE_BIT_ECC            0x80000000
68852ba100SJustin Hibbits #define FM_MACSEC_USER_EX_MULTI_BIT_ECC             0x40000000
69852ba100SJustin Hibbits 
70852ba100SJustin Hibbits #define GET_USER_EXCEPTION_FLAG(bitMask, exception)     switch (exception){ \
71852ba100SJustin Hibbits     case e_FM_MACSEC_EX_SINGLE_BIT_ECC:                                     \
72852ba100SJustin Hibbits         bitMask = FM_MACSEC_USER_EX_SINGLE_BIT_ECC; break;                  \
73852ba100SJustin Hibbits     case e_FM_MACSEC_EX_MULTI_BIT_ECC:                                      \
74852ba100SJustin Hibbits         bitMask = FM_MACSEC_USER_EX_MULTI_BIT_ECC; break;                   \
75852ba100SJustin Hibbits     default: bitMask = 0;break;}
76852ba100SJustin Hibbits 
77852ba100SJustin Hibbits /**************************************************************************//**
78852ba100SJustin Hibbits  @Description       Events
79852ba100SJustin Hibbits *//***************************************************************************/
80852ba100SJustin Hibbits 
81852ba100SJustin Hibbits #define FM_MACSEC_EV_TX_SC_0_NEXT_PN                  0x80000000
82852ba100SJustin Hibbits #define FM_MACSEC_EV_TX_SC_NEXT_PN(sc)                (FM_MACSEC_EV_TX_SC_0_NEXT_PN >> (sc))
83852ba100SJustin Hibbits 
84852ba100SJustin Hibbits #define GET_EVENT_FLAG(bitMask, event, id)      switch (event){     \
85852ba100SJustin Hibbits     case e_FM_MACSEC_EV_TX_SC_NEXT_PN:                              \
86852ba100SJustin Hibbits         bitMask = FM_MACSEC_EV_TX_SC_NEXT_PN(id); break;            \
87852ba100SJustin Hibbits     default: bitMask = 0;break;}
88852ba100SJustin Hibbits 
89852ba100SJustin Hibbits /**************************************************************************//**
90852ba100SJustin Hibbits  @Description       Defaults
91852ba100SJustin Hibbits *//***************************************************************************/
92852ba100SJustin Hibbits #define DEFAULT_userExceptions              (FM_MACSEC_USER_EX_SINGLE_BIT_ECC     |\
93852ba100SJustin Hibbits                                             FM_MACSEC_USER_EX_MULTI_BIT_ECC)
94852ba100SJustin Hibbits 
95852ba100SJustin Hibbits #define DEFAULT_exceptions                  (FM_MACSEC_EX_TX_SC(0)     |\
96852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(1)      |\
97852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(2)      |\
98852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(3)      |\
99852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(4)      |\
100852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(5)      |\
101852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(6)      |\
102852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(7)      |\
103852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(8)      |\
104852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(9)      |\
105852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(10)     |\
106852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(11)     |\
107852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(12)     |\
108852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(13)     |\
109852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(14)     |\
110852ba100SJustin Hibbits                                             FM_MACSEC_EX_TX_SC(15)     |\
111852ba100SJustin Hibbits                                             FM_MACSEC_EX_ECC          )
112852ba100SJustin Hibbits 
113852ba100SJustin Hibbits #define DEFAULT_events                      (FM_MACSEC_EV_TX_SC_NEXT_PN(0)   |\
114852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(1)    |\
115852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(2)    |\
116852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(3)    |\
117852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(4)    |\
118852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(5)    |\
119852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(6)    |\
120852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(7)    |\
121852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(8)    |\
122852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(9)    |\
123852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(10)   |\
124852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(11)   |\
125852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(12)   |\
126852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(13)   |\
127852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(14)   |\
128852ba100SJustin Hibbits                                             FM_MACSEC_EV_TX_SC_NEXT_PN(15)   )
129852ba100SJustin Hibbits 
130852ba100SJustin Hibbits #define DEFAULT_unknownSciFrameTreatment                e_FM_MACSEC_UNKNOWN_SCI_FRAME_TREATMENT_DISCARD_BOTH
131852ba100SJustin Hibbits #define DEFAULT_invalidTagsFrameTreatment               FALSE
132852ba100SJustin Hibbits #define DEFAULT_encryptWithNoChangedTextFrameTreatment  FALSE
133852ba100SJustin Hibbits #define DEFAULT_untagFrameTreatment                     e_FM_MACSEC_UNTAG_FRAME_TREATMENT_DELIVER_UNCONTROLLED_DISCARD_CONTROLLED
134852ba100SJustin Hibbits #define DEFAULT_changedTextWithNoEncryptFrameTreatment  FALSE
135852ba100SJustin Hibbits #define DEFAULT_onlyScbIsSetFrameTreatment              FALSE
136852ba100SJustin Hibbits #define DEFAULT_keysUnreadable                          FALSE
137852ba100SJustin Hibbits #define DEFAULT_normalMode                              TRUE
138852ba100SJustin Hibbits #define DEFAULT_sc0ReservedForPTP                       FALSE
139852ba100SJustin Hibbits #define DEFAULT_initNextPn                              1
140852ba100SJustin Hibbits #define DEFAULT_pnExhThr                                0xffffffff
141852ba100SJustin Hibbits #define DEFAULT_sectagOverhead                          (MACSEC_ICV_SIZE + MACSEC_SECTAG_SIZE)
142852ba100SJustin Hibbits #define DEFAULT_mflSubtract                             MACSEC_FCS_SIZE
143852ba100SJustin Hibbits 
144852ba100SJustin Hibbits 
145852ba100SJustin Hibbits /**************************************************************************//**
146852ba100SJustin Hibbits  @Description       Memory Mapped Registers
147852ba100SJustin Hibbits *//***************************************************************************/
148852ba100SJustin Hibbits 
149852ba100SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
150852ba100SJustin Hibbits #pragma pack(push,1)
151852ba100SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
152852ba100SJustin Hibbits 
153852ba100SJustin Hibbits typedef _Packed struct
154852ba100SJustin Hibbits {
155852ba100SJustin Hibbits     /* MACsec configuration */
156852ba100SJustin Hibbits     volatile uint32_t   cfg;            /**< MACsec configuration */
157852ba100SJustin Hibbits     volatile uint32_t   et;             /**< MACsec EtherType */
158852ba100SJustin Hibbits     volatile uint8_t    res1[56];       /**< reserved */
159852ba100SJustin Hibbits     volatile uint32_t   mfl;            /**< Maximum Frame Length */
160852ba100SJustin Hibbits     volatile uint32_t   tpnet;          /**< TX Packet Number exhaustion threshold */
161852ba100SJustin Hibbits     volatile uint8_t    res2[56];       /**< reserved */
162852ba100SJustin Hibbits     volatile uint32_t   rxsca;          /**< RX SC access select */
163852ba100SJustin Hibbits     volatile uint8_t    res3[60];       /**< reserved */
164852ba100SJustin Hibbits     volatile uint32_t   txsca;          /**< TX SC access select */
165852ba100SJustin Hibbits     volatile uint8_t    res4[60];       /**< reserved */
166852ba100SJustin Hibbits 
167852ba100SJustin Hibbits     /* RX configuration, status and statistic */
168852ba100SJustin Hibbits     volatile uint32_t   rxsci1h;        /**< RX Secure Channel Identifier first half */
169852ba100SJustin Hibbits     volatile uint32_t   rxsci2h;        /**< RX Secure Channel Identifier second half */
170852ba100SJustin Hibbits     volatile uint8_t    res5[8];        /**< reserved */
171852ba100SJustin Hibbits     volatile uint32_t   ifio1hs;        /**< ifInOctets first half Statistic */
172852ba100SJustin Hibbits     volatile uint32_t   ifio2hs;        /**< ifInOctets second half Statistic */
173852ba100SJustin Hibbits     volatile uint32_t   ifiups;         /**< ifInUcastPkts Statistic */
174852ba100SJustin Hibbits     volatile uint8_t    res6[4];        /**< reserved */
175852ba100SJustin Hibbits     volatile uint32_t   ifimps;         /**< ifInMulticastPkts Statistic */
176852ba100SJustin Hibbits     volatile uint32_t   ifibps;         /**< ifInBroadcastPkts Statistic */
177852ba100SJustin Hibbits     volatile uint32_t   rxsccfg;        /**< RX Secure Channel configuration */
178852ba100SJustin Hibbits     volatile uint32_t   rpw;            /**< replayWindow */
179852ba100SJustin Hibbits     volatile uint8_t    res7[16];       /**< reserved */
180852ba100SJustin Hibbits     volatile uint32_t   inov1hs;        /**< InOctetsValidated first half Statistic */
181852ba100SJustin Hibbits     volatile uint32_t   inov2hs;        /**< InOctetsValidated second half Statistic */
182852ba100SJustin Hibbits     volatile uint32_t   inod1hs;        /**< InOctetsDecrypted first half Statistic */
183852ba100SJustin Hibbits     volatile uint32_t   inod2hs;        /**< InOctetsDecrypted second half Statistic */
184852ba100SJustin Hibbits     volatile uint32_t   rxscipus;       /**< RX Secure Channel InPktsUnchecked Statistic */
185852ba100SJustin Hibbits     volatile uint32_t   rxscipds;       /**< RX Secure Channel InPktsDelayed Statistic */
186852ba100SJustin Hibbits     volatile uint32_t   rxscipls;       /**< RX Secure Channel InPktsLate Statistic */
187852ba100SJustin Hibbits     volatile uint8_t    res8[4];        /**< reserved */
188852ba100SJustin Hibbits     volatile uint32_t   rxaninuss[MAX_NUM_OF_SA_PER_SC];   /**< RX AN 0-3 InNotUsingSA Statistic */
189852ba100SJustin Hibbits     volatile uint32_t   rxanipuss[MAX_NUM_OF_SA_PER_SC];   /**< RX AN 0-3 InPktsUnusedSA Statistic */
190852ba100SJustin Hibbits     _Packed struct
191852ba100SJustin Hibbits     {
192852ba100SJustin Hibbits         volatile uint32_t   rxsacs;     /**< RX Security Association configuration and status */
193852ba100SJustin Hibbits         volatile uint32_t   rxsanpn;    /**< RX Security Association nextPN */
194852ba100SJustin Hibbits         volatile uint32_t   rxsalpn;    /**< RX Security Association lowestPN */
195852ba100SJustin Hibbits         volatile uint32_t   rxsaipos;   /**< RX Security Association InPktsOK Statistic */
196852ba100SJustin Hibbits         volatile uint32_t   rxsak[4];   /**< RX Security Association key (128 bit) */
197852ba100SJustin Hibbits         volatile uint32_t   rxsah[4];   /**< RX Security Association hash (128 bit) */
198852ba100SJustin Hibbits         volatile uint32_t   rxsaipis;   /**< RX Security Association InPktsInvalid Statistic */
199852ba100SJustin Hibbits         volatile uint32_t   rxsaipnvs;  /**< RX Security Association InPktsNotValid Statistic */
200852ba100SJustin Hibbits         volatile uint8_t    res9[8];    /**< reserved */
201852ba100SJustin Hibbits     } _PackedType fmMacsecRxScSa[NUM_OF_SA_PER_RX_SC];
202852ba100SJustin Hibbits 
203852ba100SJustin Hibbits     /* TX configuration, status and statistic */
204852ba100SJustin Hibbits     volatile uint32_t   txsci1h;        /**< TX Secure Channel Identifier first half */
205852ba100SJustin Hibbits     volatile uint32_t   txsci2h;        /**< TX Secure Channel Identifier second half */
206852ba100SJustin Hibbits     volatile uint8_t    res10[8];        /**< reserved */
207852ba100SJustin Hibbits     volatile uint32_t   ifoo1hs;        /**< ifOutOctets first half Statistic */
208852ba100SJustin Hibbits     volatile uint32_t   ifoo2hs;        /**< ifOutOctets second half Statistic */
209852ba100SJustin Hibbits     volatile uint32_t   ifoups;         /**< ifOutUcastPkts Statistic */
210852ba100SJustin Hibbits     volatile uint32_t   opus;           /**< OutPktsUntagged Statistic */
211852ba100SJustin Hibbits     volatile uint32_t   ifomps;         /**< ifOutMulticastPkts Statistic */
212852ba100SJustin Hibbits     volatile uint32_t   ifobps;         /**< ifOutBroadcastPkts Statistic */
213852ba100SJustin Hibbits     volatile uint32_t   txsccfg;        /**< TX Secure Channel configuration */
214852ba100SJustin Hibbits     volatile uint32_t   optls;          /**< OutPktsTooLong Statistic */
215852ba100SJustin Hibbits     volatile uint8_t    res11[16];      /**< reserved */
216852ba100SJustin Hibbits     volatile uint32_t   oop1hs;         /**< OutOctetsProtected first half Statistic */
217852ba100SJustin Hibbits     volatile uint32_t   oop2hs;         /**< OutOctetsProtected second half Statistic */
218852ba100SJustin Hibbits     volatile uint32_t   ooe1hs;         /**< OutOctetsEncrypted first half Statistic */
219852ba100SJustin Hibbits     volatile uint32_t   ooe2hs;         /**< OutOctetsEncrypted second half Statistic */
220852ba100SJustin Hibbits     volatile uint8_t    res12[48];      /**< reserved */
221852ba100SJustin Hibbits     _Packed struct
222852ba100SJustin Hibbits     {
223852ba100SJustin Hibbits         volatile uint32_t   txsacs;     /**< TX Security Association configuration and status */
224852ba100SJustin Hibbits         volatile uint32_t   txsanpn;    /**< TX Security Association nextPN */
225852ba100SJustin Hibbits         volatile uint32_t   txsaopps;   /**< TX Security Association OutPktsProtected Statistic */
226852ba100SJustin Hibbits         volatile uint32_t   txsaopes;   /**< TX Security Association OutPktsEncrypted Statistic */
227852ba100SJustin Hibbits         volatile uint32_t   txsak[4];   /**< TX Security Association key (128 bit) */
228852ba100SJustin Hibbits         volatile uint32_t   txsah[4];   /**< TX Security Association hash (128 bit) */
229852ba100SJustin Hibbits         volatile uint8_t    res13[16];  /**< reserved */
230852ba100SJustin Hibbits     } _PackedType fmMacsecTxScSa[NUM_OF_SA_PER_TX_SC];
231852ba100SJustin Hibbits     volatile uint8_t    res14[248];     /**< reserved */
232852ba100SJustin Hibbits 
233852ba100SJustin Hibbits     /* Global configuration and status */
234852ba100SJustin Hibbits     volatile uint32_t   ip_rev1;        /**< MACsec IP Block Revision 1 register */
235852ba100SJustin Hibbits     volatile uint32_t   ip_rev2;        /**< MACsec IP Block Revision 2 register */
236852ba100SJustin Hibbits     volatile uint32_t   evr;            /**< MACsec Event Register */
237852ba100SJustin Hibbits     volatile uint32_t   ever;           /**< MACsec Event Enable Register */
238852ba100SJustin Hibbits     volatile uint32_t   evfr;           /**< MACsec Event Force Register */
239852ba100SJustin Hibbits     volatile uint32_t   err;            /**< MACsec Error Register */
240852ba100SJustin Hibbits     volatile uint32_t   erer;           /**< MACsec Error Enable Register */
241852ba100SJustin Hibbits     volatile uint32_t   erfr;           /**< MACsec Error Force Register */
242852ba100SJustin Hibbits     volatile uint8_t    res15[40];      /**< reserved */
243852ba100SJustin Hibbits     volatile uint32_t   meec;           /**< MACsec Memory ECC Error Capture Register */
244852ba100SJustin Hibbits     volatile uint32_t   idle;           /**< MACsec Idle status Register */
245852ba100SJustin Hibbits     volatile uint8_t    res16[184];     /**< reserved */
246852ba100SJustin Hibbits     /* DEBUG */
247852ba100SJustin Hibbits     volatile uint32_t   rxec;           /**< MACsec RX error capture Register */
248852ba100SJustin Hibbits     volatile uint8_t    res17[28];      /**< reserved */
249852ba100SJustin Hibbits     volatile uint32_t   txec;           /**< MACsec TX error capture Register */
250852ba100SJustin Hibbits     volatile uint8_t    res18[220];     /**< reserved */
251852ba100SJustin Hibbits 
252852ba100SJustin Hibbits     /* Macsec Rx global statistic */
253852ba100SJustin Hibbits     volatile uint32_t   ifiocp1hs;      /**< ifInOctetsCp first half Statistic */
254852ba100SJustin Hibbits     volatile uint32_t   ifiocp2hs;      /**< ifInOctetsCp second half Statistic */
255852ba100SJustin Hibbits     volatile uint32_t   ifiupcps;       /**< ifInUcastPktsCp Statistic */
256852ba100SJustin Hibbits     volatile uint8_t    res19[4];       /**< reserved */
257852ba100SJustin Hibbits     volatile uint32_t   ifioup1hs;      /**< ifInOctetsUp first half Statistic */
258852ba100SJustin Hibbits     volatile uint32_t   ifioup2hs;      /**< ifInOctetsUp second half Statistic */
259852ba100SJustin Hibbits     volatile uint32_t   ifiupups;       /**< ifInUcastPktsUp Statistic */
260852ba100SJustin Hibbits     volatile uint8_t    res20[4];       /**< reserved */
261852ba100SJustin Hibbits     volatile uint32_t   ifimpcps;       /**< ifInMulticastPktsCp Statistic */
262852ba100SJustin Hibbits     volatile uint32_t   ifibpcps;       /**< ifInBroadcastPktsCp Statistic */
263852ba100SJustin Hibbits     volatile uint32_t   ifimpups;       /**< ifInMulticastPktsUp Statistic */
264852ba100SJustin Hibbits     volatile uint32_t   ifibpups;       /**< ifInBroadcastPktsUp Statistic */
265852ba100SJustin Hibbits     volatile uint32_t   ipwts;          /**< InPktsWithoutTag Statistic */
266852ba100SJustin Hibbits     volatile uint32_t   ipkays;         /**< InPktsKaY Statistic */
267852ba100SJustin Hibbits     volatile uint32_t   ipbts;          /**< InPktsBadTag Statistic */
268852ba100SJustin Hibbits     volatile uint32_t   ipsnfs;         /**< InPktsSCINotFound Statistic */
269852ba100SJustin Hibbits     volatile uint32_t   ipuecs;         /**< InPktsUnsupportedEC Statistic */
270852ba100SJustin Hibbits     volatile uint32_t   ipescbs;        /**< InPktsEponSingleCopyBroadcast Statistic */
271852ba100SJustin Hibbits     volatile uint32_t   iptls;          /**< InPktsTooLong Statistic */
272852ba100SJustin Hibbits     volatile uint8_t    res21[52];      /**< reserved */
273852ba100SJustin Hibbits 
274852ba100SJustin Hibbits     /* Macsec Tx global statistic */
275852ba100SJustin Hibbits     volatile uint32_t   opds;           /**< OutPktsDiscarded Statistic */
276852ba100SJustin Hibbits #if (DPAA_VERSION >= 11)
277852ba100SJustin Hibbits     volatile uint8_t    res22[124];     /**< reserved */
278852ba100SJustin Hibbits     _Packed struct
279852ba100SJustin Hibbits     {
280852ba100SJustin Hibbits         volatile uint32_t   rxsak[8];   /**< RX Security Association key (128/256 bit) */
281852ba100SJustin Hibbits         volatile uint8_t    res23[32];  /**< reserved */
282852ba100SJustin Hibbits     } _PackedType rxScSaKey[NUM_OF_SA_PER_RX_SC];
283852ba100SJustin Hibbits     _Packed struct
284852ba100SJustin Hibbits     {
285852ba100SJustin Hibbits         volatile uint32_t   txsak[8];   /**< TX Security Association key (128/256 bit) */
286852ba100SJustin Hibbits         volatile uint8_t    res24[32];  /**< reserved */
287852ba100SJustin Hibbits     } _PackedType txScSaKey[NUM_OF_SA_PER_TX_SC];
288852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */
289852ba100SJustin Hibbits } _PackedType t_FmMacsecRegs;
290852ba100SJustin Hibbits 
291852ba100SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__)
292852ba100SJustin Hibbits #pragma pack(pop)
293852ba100SJustin Hibbits #endif /* defined(__MWERKS__) && ... */
294852ba100SJustin Hibbits 
295852ba100SJustin Hibbits 
296852ba100SJustin Hibbits /**************************************************************************//**
297852ba100SJustin Hibbits  @Description       General defines
298852ba100SJustin Hibbits *//***************************************************************************/
299852ba100SJustin Hibbits 
300852ba100SJustin Hibbits #define SCI_HIGH_MASK   0xffffffff00000000LL
301852ba100SJustin Hibbits #define SCI_LOW_MASK    0x00000000ffffffffLL
302852ba100SJustin Hibbits 
303852ba100SJustin Hibbits #define LONG_SHIFT      32
304852ba100SJustin Hibbits 
305852ba100SJustin Hibbits #define GET_SCI_FIRST_HALF(sci)     (uint32_t)((macsecSCI_t)((macsecSCI_t)(sci) & SCI_HIGH_MASK) >> LONG_SHIFT)
306852ba100SJustin Hibbits #define GET_SCI_SECOND_HALF(sci)    (uint32_t)((macsecSCI_t)(sci) & SCI_LOW_MASK)
307852ba100SJustin Hibbits 
308852ba100SJustin Hibbits /**************************************************************************//**
309852ba100SJustin Hibbits  @Description       Configuration defines
310852ba100SJustin Hibbits *//***************************************************************************/
311852ba100SJustin Hibbits 
312852ba100SJustin Hibbits /* masks */
313852ba100SJustin Hibbits #define CFG_UECT                        0x00000800
314852ba100SJustin Hibbits #define CFG_ESCBT                       0x00000400
315852ba100SJustin Hibbits #define CFG_USFT                        0x00000300
316852ba100SJustin Hibbits #define CFG_ITT                         0x00000080
317852ba100SJustin Hibbits #define CFG_KFT                         0x00000040
318852ba100SJustin Hibbits #define CFG_UFT                         0x00000030
319852ba100SJustin Hibbits #define CFG_KSS                         0x00000004
320852ba100SJustin Hibbits #define CFG_BYPN                        0x00000002
321852ba100SJustin Hibbits #define CFG_S0I                         0x00000001
322852ba100SJustin Hibbits 
323852ba100SJustin Hibbits #define ET_TYPE                         0x0000ffff
324852ba100SJustin Hibbits 
325852ba100SJustin Hibbits #define MFL_MAX_LEN                     0x0000ffff
326852ba100SJustin Hibbits 
327852ba100SJustin Hibbits #define RXSCA_SC_SEL                    0x0000000f
328852ba100SJustin Hibbits 
329852ba100SJustin Hibbits #define TXSCA_SC_SEL                    0x0000000f
330852ba100SJustin Hibbits 
331852ba100SJustin Hibbits #define IP_REV_1_IP_ID                  0xffff0000
332852ba100SJustin Hibbits #define IP_REV_1_IP_MJ                  0x0000ff00
333852ba100SJustin Hibbits #define IP_REV_1_IP_MM                  0x000000ff
334852ba100SJustin Hibbits 
335852ba100SJustin Hibbits #define IP_REV_2_IP_INT                 0x00ff0000
336852ba100SJustin Hibbits #define IP_REV_2_IP_ERR                 0x0000ff00
337852ba100SJustin Hibbits #define IP_REV_2_IP_CFG                 0x000000ff
338852ba100SJustin Hibbits 
339852ba100SJustin Hibbits #define MECC_CAP                        0x80000000
340852ba100SJustin Hibbits #define MECC_CET                        0x40000000
341852ba100SJustin Hibbits #define MECC_SERCNT                     0x00ff0000
342852ba100SJustin Hibbits #define MECC_MEMADDR                    0x000001ff
343852ba100SJustin Hibbits 
344852ba100SJustin Hibbits /* shifts */
345852ba100SJustin Hibbits #define CFG_UECT_SHIFT                  (31-20)
346852ba100SJustin Hibbits #define CFG_ESCBT_SHIFT                 (31-21)
347852ba100SJustin Hibbits #define CFG_USFT_SHIFT                  (31-23)
348852ba100SJustin Hibbits #define CFG_ITT_SHIFT                   (31-24)
349852ba100SJustin Hibbits #define CFG_KFT_SHIFT                   (31-25)
350852ba100SJustin Hibbits #define CFG_UFT_SHIFT                   (31-27)
351852ba100SJustin Hibbits #define CFG_KSS_SHIFT                   (31-29)
352852ba100SJustin Hibbits #define CFG_BYPN_SHIFT                  (31-30)
353852ba100SJustin Hibbits #define CFG_S0I_SHIFT                   (31-31)
354852ba100SJustin Hibbits 
355852ba100SJustin Hibbits #define IP_REV_1_IP_ID_SHIFT            (31-15)
356852ba100SJustin Hibbits #define IP_REV_1_IP_MJ_SHIFT            (31-23)
357852ba100SJustin Hibbits #define IP_REV_1_IP_MM_SHIFT            (31-31)
358852ba100SJustin Hibbits 
359852ba100SJustin Hibbits #define IP_REV_2_IP_INT_SHIFT           (31-15)
360852ba100SJustin Hibbits #define IP_REV_2_IP_ERR_SHIFT           (31-23)
361852ba100SJustin Hibbits #define IP_REV_2_IP_CFG_SHIFT           (31-31)
362852ba100SJustin Hibbits 
363852ba100SJustin Hibbits #define MECC_CAP_SHIFT                  (31-0)
364852ba100SJustin Hibbits #define MECC_CET_SHIFT                  (31-1)
365852ba100SJustin Hibbits #define MECC_SERCNT_SHIFT               (31-15)
366852ba100SJustin Hibbits #define MECC_MEMADDR_SHIFT              (31-31)
367852ba100SJustin Hibbits 
368852ba100SJustin Hibbits /**************************************************************************//**
369852ba100SJustin Hibbits  @Description       RX SC defines
370852ba100SJustin Hibbits *//***************************************************************************/
371852ba100SJustin Hibbits 
372852ba100SJustin Hibbits /* masks */
373852ba100SJustin Hibbits #define RX_SCCFG_SCI_EN_MASK            0x00000800
374852ba100SJustin Hibbits #define RX_SCCFG_RP_MASK                0x00000400
375852ba100SJustin Hibbits #define RX_SCCFG_VF_MASK                0x00000300
376852ba100SJustin Hibbits #define RX_SCCFG_CO_MASK                0x0000003f
377852ba100SJustin Hibbits 
378852ba100SJustin Hibbits /* shifts */
379852ba100SJustin Hibbits #define RX_SCCFG_SCI_EN_SHIFT           (31-20)
380852ba100SJustin Hibbits #define RX_SCCFG_RP_SHIFT               (31-21)
381852ba100SJustin Hibbits #define RX_SCCFG_VF_SHIFT               (31-23)
382852ba100SJustin Hibbits #define RX_SCCFG_CO_SHIFT               (31-31)
383852ba100SJustin Hibbits #define RX_SCCFG_CS_SHIFT               (31-7)
384852ba100SJustin Hibbits 
385852ba100SJustin Hibbits /**************************************************************************//**
386852ba100SJustin Hibbits  @Description       RX SA defines
387852ba100SJustin Hibbits *//***************************************************************************/
388852ba100SJustin Hibbits 
389852ba100SJustin Hibbits /* masks */
390852ba100SJustin Hibbits #define RX_SACFG_ACTIVE                 0x80000000
391852ba100SJustin Hibbits #define RX_SACFG_AN_MASK                0x00000006
392852ba100SJustin Hibbits #define RX_SACFG_EN_MASK                0x00000001
393852ba100SJustin Hibbits 
394852ba100SJustin Hibbits /* shifts */
395852ba100SJustin Hibbits #define RX_SACFG_AN_SHIFT               (31-30)
396852ba100SJustin Hibbits #define RX_SACFG_EN_SHIFT               (31-31)
397852ba100SJustin Hibbits 
398852ba100SJustin Hibbits /**************************************************************************//**
399852ba100SJustin Hibbits  @Description       TX SC defines
400852ba100SJustin Hibbits *//***************************************************************************/
401852ba100SJustin Hibbits 
402852ba100SJustin Hibbits /* masks */
403852ba100SJustin Hibbits #define TX_SCCFG_AN_MASK                0x000c0000
404852ba100SJustin Hibbits #define TX_SCCFG_ASA_MASK               0x00020000
405852ba100SJustin Hibbits #define TX_SCCFG_SCE_MASK               0x00010000
406852ba100SJustin Hibbits #define TX_SCCFG_CO_MASK                0x00003f00
407852ba100SJustin Hibbits #define TX_SCCFG_CE_MASK                0x00000010
408852ba100SJustin Hibbits #define TX_SCCFG_PF_MASK                0x00000008
409852ba100SJustin Hibbits #define TX_SCCFG_AIS_MASK               0x00000004
410852ba100SJustin Hibbits #define TX_SCCFG_UES_MASK               0x00000002
411852ba100SJustin Hibbits #define TX_SCCFG_USCB_MASK              0x00000001
412852ba100SJustin Hibbits 
413852ba100SJustin Hibbits /* shifts */
414852ba100SJustin Hibbits #define TX_SCCFG_AN_SHIFT               (31-13)
415852ba100SJustin Hibbits #define TX_SCCFG_ASA_SHIFT              (31-14)
416852ba100SJustin Hibbits #define TX_SCCFG_SCE_SHIFT              (31-15)
417852ba100SJustin Hibbits #define TX_SCCFG_CO_SHIFT               (31-23)
418852ba100SJustin Hibbits #define TX_SCCFG_CE_SHIFT               (31-27)
419852ba100SJustin Hibbits #define TX_SCCFG_PF_SHIFT               (31-28)
420852ba100SJustin Hibbits #define TX_SCCFG_AIS_SHIFT              (31-29)
421852ba100SJustin Hibbits #define TX_SCCFG_UES_SHIFT              (31-30)
422852ba100SJustin Hibbits #define TX_SCCFG_USCB_SHIFT             (31-31)
423852ba100SJustin Hibbits #define TX_SCCFG_CS_SHIFT               (31-7)
424852ba100SJustin Hibbits 
425852ba100SJustin Hibbits /**************************************************************************//**
426852ba100SJustin Hibbits  @Description       TX SA defines
427852ba100SJustin Hibbits *//***************************************************************************/
428852ba100SJustin Hibbits 
429852ba100SJustin Hibbits /* masks */
430852ba100SJustin Hibbits #define TX_SACFG_ACTIVE                 0x80000000
431852ba100SJustin Hibbits 
432852ba100SJustin Hibbits 
433852ba100SJustin Hibbits typedef struct
434852ba100SJustin Hibbits {
435852ba100SJustin Hibbits     void        (*f_Isr) (t_Handle h_Arg, uint32_t id);
436852ba100SJustin Hibbits     t_Handle    h_SrcHandle;
437852ba100SJustin Hibbits } t_FmMacsecIntrSrc;
438852ba100SJustin Hibbits 
439852ba100SJustin Hibbits typedef struct
440852ba100SJustin Hibbits {
441852ba100SJustin Hibbits     e_FmMacsecUnknownSciFrameTreatment  unknownSciTreatMode;
442852ba100SJustin Hibbits     bool                                invalidTagsDeliverUncontrolled;
443852ba100SJustin Hibbits     bool                                changedTextWithNoEncryptDeliverUncontrolled;
444852ba100SJustin Hibbits     bool                                onlyScbIsSetDeliverUncontrolled;
445852ba100SJustin Hibbits     bool                                encryptWithNoChangedTextDiscardUncontrolled;
446852ba100SJustin Hibbits     e_FmMacsecUntagFrameTreatment       untagTreatMode;
447852ba100SJustin Hibbits     uint32_t                            pnExhThr;
448852ba100SJustin Hibbits     bool                                keysUnreadable;
449852ba100SJustin Hibbits     bool                                byPassMode;
450852ba100SJustin Hibbits     bool                                reservedSc0;
451852ba100SJustin Hibbits     uint32_t                            sectagOverhead;
452852ba100SJustin Hibbits     uint32_t                            mflSubtract;
453852ba100SJustin Hibbits } t_FmMacsecDriverParam;
454852ba100SJustin Hibbits 
455852ba100SJustin Hibbits typedef struct
456852ba100SJustin Hibbits {
457852ba100SJustin Hibbits     t_FmMacsecControllerDriver      fmMacsecControllerDriver;
458852ba100SJustin Hibbits     t_Handle                        h_Fm;
459852ba100SJustin Hibbits     t_FmMacsecRegs                  *p_FmMacsecRegs;
460852ba100SJustin Hibbits     t_Handle                        h_FmMac;            /**< A handle to the FM MAC object  related to */
461852ba100SJustin Hibbits     char                            fmMacsecModuleName[MODULE_NAME_SIZE];
462852ba100SJustin Hibbits     t_FmMacsecIntrSrc               intrMng[NUM_OF_INTER_MODULE_EVENTS];
463852ba100SJustin Hibbits     uint32_t                        events;
464852ba100SJustin Hibbits     uint32_t                        exceptions;
465852ba100SJustin Hibbits     uint32_t                        userExceptions;
466852ba100SJustin Hibbits     t_FmMacsecExceptionsCallback    *f_Exception;       /**< Exception Callback Routine         */
467852ba100SJustin Hibbits     t_Handle                        h_App;              /**< A handle to an application layer object; This handle will
468852ba100SJustin Hibbits                                                              be passed by the driver upon calling the above callbacks */
469852ba100SJustin Hibbits     bool                            rxScTable[NUM_OF_RX_SC];
470852ba100SJustin Hibbits     uint32_t                        numRxScAvailable;
471852ba100SJustin Hibbits     bool                            txScTable[NUM_OF_TX_SC];
472852ba100SJustin Hibbits     uint32_t                        numTxScAvailable;
473852ba100SJustin Hibbits     t_Handle                        rxScSpinLock;
474852ba100SJustin Hibbits     t_Handle                        txScSpinLock;
475852ba100SJustin Hibbits     t_FmMacsecDriverParam           *p_FmMacsecDriverParam;
476852ba100SJustin Hibbits } t_FmMacsec;
477852ba100SJustin Hibbits 
478852ba100SJustin Hibbits 
479852ba100SJustin Hibbits #endif /* __FM_MACSEC_MASTER_H */
480