NOTICE OF RELOCATION
[keystone-rtos/pa-lld.git] / pasahost.h
1 #ifndef _PASAHOST_H
2 #define _PASAHOST_H
3 /**
4  *   @file  pasahost.h
5  *
6  *   @brief   
7  *      This file defines constants, data structures and macros used
8  *      among the PA LLD, SA LLD and the host.  
9  *
10  *  \par
11  *  NOTE:
12  *      (C) Copyright 2009-2013 Texas Instruments, Inc.
13  * 
14  *  Redistribution and use in source and binary forms, with or without 
15  *  modification, are permitted provided that the following conditions 
16  *  are met:
17  *
18  *    Redistributions of source code must retain the above copyright 
19  *    notice, this list of conditions and the following disclaimer.
20  *
21  *    Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the 
23  *    documentation and/or other materials provided with the   
24  *    distribution.
25  *
26  *    Neither the name of Texas Instruments Incorporated nor the names of
27  *    its contributors may be used to endorse or promote products derived
28  *    from this software without specific prior written permission.
29  *
30  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
31  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
32  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
34  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
35  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
36  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
39  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
40  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  *
42 */
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 /** @defgroup pasaho_if_module PA/SA/Host Interface
48  *  @{
49  */
50 /** @} */
52 /** @defgroup pasaho_if_macros PA/SA/Host Macros
53  *  @ingroup pasaho_if_module
54  */
56 /** @defgroup pasaho_if_structures PA/SA/Host Data Structures
57  *  @ingroup pasaho_if_module
58  */
60 /** @defgroup pasaho_if_constants PA/SA/Host Constants (enum's and define's)
61  *  @ingroup pasaho_if_module
62  */
65 /**
66  *  @defgroup pasahoCommands PA/SA/Host Commands
67  *  @ingroup pasaho_if_constants
68  *  @{
69  *
70  *  @name PA/SA/Host Commands
71  *
72  *  Define PASS Firmware Commands
73  *  These values are placed in the 3 msbits of the protocol specific information
74  */
75 /*@{*/
76 /**
77  *  @def  PASAHO_CONFIGURE
78  *        PA/SA Configuration command
79  */
81 #define PASAHO_CONFIGURE                        4
83 /* PA commands for receive packet PDSPs */
84 /**
85  *  @def  PASAHO_PARX_PARSECMD
86  *        Instruct PDSP to parse the receive packet
87  */
89 #define PASAHO_PARX_PARSECMD            0
91 /**
92  *  @def  PASAHO_PARX_MULTI_ROUTE
93  *        Instruct PDSP to perform multiple routing
94  */
96 #define PASAHO_PARX_MULTI_ROUTE         5
98 /* PA commands for modify packet PDSPs */
99 /**
100  *  @def  PASAHO_PAMOD_CMPT_CHKSUM
101  *        Instruct PDSP to compute checksum
102  */
104 #define PASAHO_PAMOD_CMPT_CHKSUM        0
106 /**
107  *  @def  PASAHO_PAMOD_CMPT_CRC
108  *        Instruct PDSP to compute CRC
109  */
111 #define PASAHO_PAMOD_CMPT_CRC           1
113 /**
114  *  @def  PASAHO_PAMOD_PATCH
115  *        Instruct PDSP to perform blind patch
116  */
118 #define PASAHO_PAMOD_PATCH                      2
120 /**
121  *  @def  PASAHO_PAMOD_NROUTE
122  *        Provide PDSP with the next routing information
123  */
125 #define PASAHO_PAMOD_NROUTE                     3
128 /**
129  *  @def  PASAHO_PAMOD_EF_OP
130  *        Instruct PDSP to perform egress flow operation
131  */
133 #define PASAHO_PAMOD_EF_OP              5
135 /**
136  *  @def  PASAHO_PAMOD_REPORT_TIMESTAMP
137  *        Instruct PDSP to report the system timestamp at the timestamp field of the packet descriptor 
138  *        when the tx packet is delivered out of the PASS 
139  */
141 #define PASAHO_PAMOD_REPORT_TIMESTAMP  6   
144 /**
145  *  @def  PASAHO_PAMOD_GROUP_7
146  *        Define this group command so that several command can share the same command code. They will be distinguished
147  *        by its unique 5-bit sub-command code as defined at
148  */
150 #define PASAHO_PAMOD_GROUP_7        7   
153 /**
154  *  @def  PASAHO_PAMOD_DUMMY
155  *        No action is required. It is for SA alignment only
156  */
158 #define PASAHO_PAMOD_DUMMY                      PASAHO_PAMOD_GROUP_7
160 /**
161  *  @def  PASAHO_PAMOD_IP_FRAGMENT
162  *        Instruct PDSP to perform IPv4 fragmentation. The transmit IP packets will be divided into smaller 
163  *        IP fragments with the updated IPv4 header and checksum based on the specified MTU size and forwarded 
164  *        to the destination specified by the next route command. It is up to the module user to format the
165  *        correct IPv4 header. The IP fragmentation command will be ignored if any error is detected.
166  */
167 #define PASAHO_PAMOD_IP_FRAGMENT    PASAHO_PAMOD_GROUP_7  
169 /**
170  *  @def  PASAHO_PAMOD_PATCH_MSG_LEN
171  *        Instruct PDSP to perform message length patching after IPv4 fragmentation operation. This command is
172  *        valid only if it is in conjunction with the PASAHO_PAMOD_IP_FRAGMENT command.
173  */
174 #define PASAHO_PAMOD_PATCH_MSG_LEN  PASAHO_PAMOD_GROUP_7  
176 /**
177  *  @def  PASAHO_PAMOD_EMAC_CRC_VERIFY
178  *        Instruct PDSP to perform Ethernet CRC verification for egress traffic. This command is provided as a workarond 
179  *        for the following GbE errata at some keystone devices. (Gen1 support only)
180  *
181  *        The GbE switch may drop packets in TX path when:
182  *        - full gigabit speeds are sustained and
183  *        - the packet size is not a 32 bit multiple (1499, 1498, 1497, 1495, etc.) and
184  *        - Ethernet CRC is included in the last 4 bytes of the packet sent to the switch
185  *
186  *  @note The Ethernet CRC Verify command can not be combined with any other tx commands, all other commands will be ignored
187  *        by PASS when this command is processed.
188  */
189  
190 #define PASAHO_PAMOD_EMAC_CRC_VERIFY  PASAHO_PAMOD_GROUP_7   
191   
192 /**
193  *  @def  PASAHO_PAMOD_PATCH_MSG_TIME
194  *        Instruct PDSP to perform message time insert for packets such as Ethernet OAM. (Gen2 support only)
195  */
196 #define PASAHO_PAMOD_PATCH_MSG_TIME  PASAHO_PAMOD_GROUP_7 
198 /**
199  *  @def  PASAHO_PAMOD_PATCH_MSG_COUNT
200  *        Instruct PDSP to perform message count insert for packets such as Ethernet OAM. 
201  */
202 #define PASAHO_PAMOD_PATCH_MSG_COUNT  PASAHO_PAMOD_GROUP_7 
204 /* SA commands */
205 /**
206  *  @def  PASAHO_SA_LONG_INFO
207  *        Provide SA with the packet parsing information in the long form
208  */
210 #define PASAHO_SA_LONG_INFO         0
212 /**
213  *  @def  PASAHO_SA_SHORT_INFO
214  *        Provide SA with the packet parsing information in the short form
215  */
217 #define PASAHO_SA_SHORT_INFO        1
220 /**
221  *  @def  PASAHO_SA_AIR_INFO
222  *        Provide SA with the packet parsing information for the air ciphering 
223  *        operation
224  */
226 #define PASAHO_SA_AIR_INFO          2
229 /*@}*/
230 /** @} */
232 /** @name PASAHO Common Macros
233  *  
234  */
235 /*@{*/
237 /**
238  *  @ingroup pasaho_if_macros
239  *  @brief  PASAHO_READ_BITFIELD is used to read the specific bit fields
240  *
241  *  @details  It is one of the main macros for accessing configuration bit fields
242  *            Input parameter a contains bit field
243  *            b is bit offset withing bit field
244  *            c is number of bits used by that parameter
245  */
247 #define PASAHO_READ_BITFIELD(a,b,c)    (((a)>>(b)) & ((1UL<<(c))-1))
249 /**
250  *  @ingroup ingroup pasaho_if_macros
251  *  @brief  PASAHO_SET_BITFIELD is used to set the specific bit fields
252  *
253  *  @details  It is one of the main macros for accessing configuration bit fields
254  *            Input parameter a contains bit field
255  *            b is bit offset withing bit field
256  *            c is number of bits used by that parameter
257  *            x is new value of parameter that is packed in this bit field
258  *
259  *  @note    It enforces strict setting to prevent overflow into other bits, would
260  *           cost program space for additional protection. 
261  */
263 #define PASAHO_SET_BITFIELD(a,x,b,c)   (a) &= ~(((1UL<<(c))-1)<<(b)), \
264                                        (a) |= (((x) & ((1UL<<(c))-1))<<(b))
266 /**
267  *  @ingroup ingroup pasaho_if_macros
268  *  @brief  PASAHO_SET_CMDID is used to set the command ID
269  */
270 #define PASAHO_SET_CMDID(x,v)  PASAHO_SET_BITFIELD((x)->word0, (v), 29,3)
272 /**
273  *  @ingroup ingroup pasaho_if_macros
274  *  @brief  PASAHO_PACFG_CMD is used to set the PA configuration command only
275  */
276 #define PASAHO_PACFG_CMD        (((uint32_t)PASAHO_CONFIGURE << 5) << 24)
278 /*@}*/ /* @name PASAHO Common Macros */
281 /**
282  *  @defgroup pasahoHeaderTypes PASS Header Types
283  *  @ingroup pasaho_if_constants
284  *  @{
285  *
286  *  @name PASS Header Types
287  *  Definition of protocol header types used at the PASS PDSP Firmwase. In the 
288  *  long info field these values specify what the next header type will be
289  *  at the next parse offset 
290  */ 
291 /*@{*/
293 typedef enum {
295   PASAHO_HDR_MAC        = 0,        /**< MAC */
296   PASAHO_HDR_VLAN,                  /**< VLAN */
297   PASAHO_HDR_MPLS,                  /**< MPLS */
298   PASAHO_HDR_IPv4,                  /**< IPv4 */
299   PASAHO_HDR_IPv6,                  /**< IPv6 */
300   PASAHO_HDR_IPv6_EXT_HOP,          /**< IPv6 hop by hop extenstion header */
301   PASAHO_HDR_IPv6_EXT_ROUTE,        /**< IPv6 routing extenstion header */
302   PASAHO_HDR_IPv6_EXT_FRAG,         /**< IPv6 fragmentation extention header */
303   PASAHO_HDR_IPv6_EXT_DEST,         /**< IPv6 destination options header */
304   PASAHO_HDR_GRE,                   /**< Generic Routing Encapsulation header */
305   PASAHO_HDR_ESP,                   /**< Encapsulating Security Payload header */
306   PASAHO_HDR_ESP_DECODED,           /**< Decoded Encapsulating Security Payload header */
307   PASAHO_HDR_AUTH,                  /**< Authentication header */
308   PASAHO_HDR_CUSTOM_C1,             /**< Custom classify 1 header */
309   PASAHO_HDR_PPPoE,                 /**< PPPoE Header */
310   PASAHO_HDR_SCTP,                  /**< SCTP Header */
311   PASAHO_HDR_UNKNOWN,               /**< Next header type is unknown */
312   PASAHO_HDR_UDP,                   /**< User Datagram Protocol header */
313   PASAHO_HDR_UDP_LITE,              /**< Lightweight User Datagram Protocol header */
314   PASAHO_HDR_TCP,                   /**< Transmission Control Protocol header */
315   PASAHO_HDR_GTPU,                  /**< GTPU header */
316   PASAHO_HDR_ESP_DECODED_C2,        /**< Decoded Encapsulating Security Payload header at Classifyer2 */
317   PASAHO_HDR_CUSTOM_C2              /**< Custom classify 2 header */
318  
319 } pasaho_HeaderType_e;
320 /*@}*/
321 /** @} */
323 /**
324  *  @defgroup pasahoSubCmdCode PASS Sub-Command Code
325  *  @ingroup pasaho_if_constants
326  *  @{
327  *
328  *  @name PASS Sub-Command Code
329  *  Definition of the 5-bit sub-command codes which is used to specify the group 7 commands. 
330  */ 
331 /*@{*/
333 typedef enum {
335   PASAHO_SUB_CMD_DUMMY           = 0,   /**< Dummy */
336   PASAHO_SUB_CMD_IP_FRAG         = 1,   /**< IPv4 fragmentation */
337   PASAHO_SUB_CMD_PATCH_MSG_LEN   = 2,   /**< Message length Patching */ 
338   PASAHO_SUB_CMD_INS_TIME        = 3,   /**< Ethernet EOAM insert time at specified offset  (Gen2 only) */
339   PASAHO_SUB_CMD_INS_COUNT       = 4,   /**< Ethernet EOAM insert count at specified offset (Gen2 only) */
340   PASAHO_SUB_CMD_EMAC_CRC_VERIFY = 3    /**< Ethernet CRC Verification (Gen1 only)*/ 
341 } pasaho_SubCmdCode_e;
342 /*@}*/
343 /** @} */
345 /**
346  *  @defgroup pasahoPktType PASS Packet Type
347  *  @ingroup pasaho_if_constants
348  *  @{
349  *
350  *  @name PASS Packet Type
351  *  Definition of the MAC or IP packet types. 
352  */ 
353 /*@{*/
355 typedef enum {
357   PASAHO_PKT_TYPE_UNICAST        = 0,   /**< Unicast MAC/IP  */
358   PASAHO_PKT_TYPE_BROADCAST,            /**< Broadcast MAC/IP */
359   PASAHO_PKT_TYPE_MULTICAST             /**< Multicast MAC/IP */ 
360 } pasaho_pktType_e;
361 /*@}*/
362 /** @} */
366 /**
367  *  @ingroup pasaho_if_structures
368  *  @brief  pasahoCmdInfo_t defines the general short command information
369  *
370  */
372 typedef struct pasahoCmdInfo_s {
373     uint32_t  word0;    /**< Control block word 0 */
374 } pasahoCmdInfo_t;
376 /**
377  *  @ingroup pasaho_if_structures
378  *  @brief  pasahoLongInfo_t defines the packet parsing information in the long format. 
379  *          The information is structured as an array of 32 bit values. These values
380  *          are broken down through macros. This allows the representation to be
381  *          endian independent to the hardware which operates only on 32 bit values.
382  *
383  *  @details  
384  */
386 typedef struct pasahoLongInfo_s  {
388   uint32_t   word0;  /**< Control block word 0 */
389   uint32_t   word1;  /**< Control block word 1 */
390   uint32_t   word2;  /**< Control block word 2 */
391   uint32_t   word3;  /**< Control block word 3 */
392   uint32_t   word4;  /**< Control block word 4 */
393   uint32_t   word5;  /**< Control block word 5 */
394   uint32_t   word6;  /**< Control block word 6 */
395   uint32_t   word7;  /**< Control block word 7 */
396   uint32_t   word8;  /**< Control block word 8 */
397   uint32_t   word9;  /**< Control block word 9 */
398   uint32_t   word10; /**< Control block word 10 (optional) */
399   uint32_t   word11; /**< Control block word 11 (optional) */
400   uint32_t   word12; /**< Control block word 12 (optional) */
401   uint32_t   word13; /**< Control block word 13 (optional) */  
402 } pasahoLongInfo_t;
404 /** 
405  *  @defgroup PASAHO_long_info_command_gen1_macros  PASAHO Long Info Command Macros For First Generation PASS
406  *  @ingroup pasaho_if_macros
407  *  @{
408  *  @name PASAHO Long Info Command Macros For First Generation PASS
409  *  Macros used by the PASAHO Long Info Command
410  */
411 /*@{*/
413 #define PASAHO_LINFO_READ_CMDID_GEN1(x)          PASAHO_READ_BITFIELD((x)->word0,29,3)    /**< Extract the command ID defined at @ref pasahoCommands (PASS Gen1)*/
414 #define PASAHO_LINFO_READ_RECLEN_GEN1(x)         PASAHO_READ_BITFIELD((x)->word0,24,5)    /**< Extract the block length (PASS Gen1)*/
415 #define PASAHO_LINFO_READ_START_OFFSET_GEN1(x)   PASAHO_READ_BITFIELD((x)->word0,0,16)    /**< Extract the next parse start offset (PASS Gen1)*/
417 #define PASAHO_LINFO_IS_MAC_BROADCAST_GEN1(x)    PASAHO_READ_BITFIELD((x)->word0,16,1)    /**< Indicate whether it is a broadcast MAC packet (PASS Gen1)*/
418 #define PASAHO_LINFO_IS_MAC_MULTICAST_GEN1(x)    PASAHO_READ_BITFIELD((x)->word0,17,1)    /**< Indicate whether it is a multicast MAC packet (PASS Gen1)*/
419 #define PASAHO_LINFO_READ_MAC_PKTTYPE_GEN1(x)    PASAHO_READ_BITFIELD((x)->word0,16,2)    /**< Extract the MAC packet type (PASS Gen1)*/
421 #define PASAHO_LINFO_IS_IP_BROADCAST_GEN1(x)     PASAHO_READ_BITFIELD((x)->word0,18,1)    /**< Indicate whether it is a broadcast IP packet (PASS Gen1)*/
422 #define PASAHO_LINFO_IS_IP_MULTICAST_GEN1(x)     PASAHO_READ_BITFIELD((x)->word0,19,1)    /**< Indicate whether it is a multicast IP packet (PASS Gen1)*/
423 #define PASAHO_LINFO_READ_IP_PKTTYPE_GEN1(x)     PASAHO_READ_BITFIELD((x)->word0,18,2)    /**< Extract the IP packet type (PASS Gen1)*/
425 #define PASAHO_LINFO_READ_END_OFFSET_GEN1(x)     PASAHO_READ_BITFIELD((x)->word1,16,16)   /**< Extract the end of packet parse offset (PASS Gen1)*/
426 #define PASAHO_LINFO_READ_EIDX_GEN1(x)           PASAHO_READ_BITFIELD((x)->word1,11,5)    /**< Extract the error index (PASS Gen1)*/
427 #define PASAHO_LINFO_READ_PMATCH_GEN1(x)         PASAHO_READ_BITFIELD((x)->word1,10,1)    /**< Extract the previous match flag (PASS Gen1)*/
428 #define PASAHO_LINFO_READ_L1_PDSP_ID_GEN1(x)     PASAHO_READ_BITFIELD((x)->word1,6,3)     /**< Extract the first parse module ID (PASS Gen1)*/
429 #define PASAHO_LINFO_READ_L1_IDX_GEN1(x)         PASAHO_READ_BITFIELD((x)->word1,0,6)     /**< Extract the first parse module match index (PASS Gen1)*/
431 #define PASAHO_LINFO_READ_L3_OFFSET_GEN1(x)      PASAHO_READ_BITFIELD((x)->word2,24,8)    /**< Extract the offset to the level 3 header (PASS Gen1)*/
432 #define PASAHO_LINFO_READ_L4_OFFSET_GEN1(x)      PASAHO_READ_BITFIELD((x)->word2,16,8)    /**< Extract the offset to the level 4 header (PASS Gen1)*/
433 #define PASAHO_LINFO_READ_L5_OFFSET_GEN1(x)      PASAHO_READ_BITFIELD((x)->word2,8,8)     /**< Extract the offset to the level 5 header (PASS Gen1)*/
434 #define PASAHO_LINFO_READ_ESP_AH_OFFSET_GEN1(x)  PASAHO_READ_BITFIELD((x)->word2,0,8)     /**< Extract the offset to the security header (PASS Gen1)*/
436 #define PASAHO_LINFO_READ_HDR_BITMASK_GEN1(x)    PASAHO_READ_BITFIELD((x)->word3,21,11)   /**< Extract the bitmask of parsed header types (PASS Gen1)*/
437 #define PASAHO_LINFO_READ_HDR_BITMASK2_GEN1(x)   PASAHO_READ_BITFIELD((x)->word3, 4,4)    /**< Extract the bitmask2 of parsed header types (PASS Gen1)*/
438 #define PASAHO_LINFO_READ_NXT_HDR_TYPE_GEN1(x)   PASAHO_READ_BITFIELD((x)->word3,16,5)    /**< Extract the next header to parse type (PASS Gen1)*/
439 #define PASAHO_LINFO_READ_VLAN_COUNT_GEN1(x)     PASAHO_READ_BITFIELD((x)->word3,14,2)    /**< Extract the number of VLAN tags found (PASS Gen1)*/
440 #define PASAHO_LINFO_READ_IP_COUNT_GEN1(x)       PASAHO_READ_BITFIELD((x)->word3,8,3)     /**< Extract the number of IP headers found (PASS Gen1)*/
441 #define PASAHO_LINFO_READ_GRE_COUNT_GEN1(x)      PASAHO_READ_BITFIELD((x)->word3,11,3)    /**< Extract the number of GRE headers found (PASS Gen1)*/
442 #define PASAHO_LINFO_READ_FLAG_FRAG_GEN1(x)      PASAHO_READ_BITFIELD((x)->word3,3,1)     /**< Extract the fragmentation found flag (PASS Gen1)*/
443 #define PASAHO_LINFO_READ_INPORT_GEN1(x)         PASAHO_READ_BITFIELD((x)->word3,0,3)     /**< Extract the (1-based) input EMAC port number  
444                                                                                                0: Indicates that the packet does not enter PASS 
445                                                                                                through CPSW (PASS Gen1)*/
446 #define PASAHO_LINFO_READ_INNER_IP_OFFSET_GEN1(x) PASAHO_READ_BITFIELD((x)->word4,16,8)   /**< Extract the offset to the most inner IP header (PASS Gen1)*/
447 #define PASAHO_LINFO_READ_TSTAMP_MSB_GEN1(x)     (x)->word6                               /**< Extract the most significant 32-bit of the 64-bit timestamp */
448 #define PASAHO_LINFO_READ_TSTAMP_MSB2_GEN1(x)    (x)->word8                               /**< Extract the most significant 32-bit of the 64-bit timestamp 
449                                                                                           where the paylaod data has been copied to word6/7 within  
450                                                                                           pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
452 /*@}*/ /* PASAHO_long_info_command_gen1_macros */
453 /** @}*/ /* @name PASAHO Long Info Command Macros For First Generation PASS */
455 /** 
456  *  @defgroup PASAHO_long_info_command_gen2_macros  PASAHO Long Info Command Macros For Second Generation PASS
457  *  @ingroup pasaho_if_macros
458  *  @{
459  *  @name PASAHO Long Info Command Macros For Second Generation PASS
460  *  Macros used by the PASAHO Long Info Command
461  */
462 /*@{*/
464 #define PASAHO_LINFO_READ_CMDID_GEN2(x)          PASAHO_READ_BITFIELD((x)->word0,29,3)    /**< Extract the command ID defined at @ref pasahoCommands (PASS Gen2)*/
465 #define PASAHO_LINFO_READ_RECLEN_GEN2(x)         PASAHO_READ_BITFIELD((x)->word0,24,5)    /**< Extract the block length (PASS Gen2)*/
466 #define PASAHO_LINFO_READ_START_OFFSET_GEN2(x)   PASAHO_READ_BITFIELD((x)->word0,0,8)     /**< Extract the next parse start offset (PASS Gen2)*/
468 #define PASAHO_LINFO_IS_MAC_BROADCAST_GEN2(x)    PASAHO_READ_BITFIELD((x)->word0,16,1)    /**< Indicate whether it is a broadcast MAC packet (PASS Gen2)*/
469 #define PASAHO_LINFO_IS_MAC_MULTICAST_GEN2(x)    PASAHO_READ_BITFIELD((x)->word0,17,1)    /**< Indicate whether it is a multicast MAC packet (PASS Gen2)*/
470 #define PASAHO_LINFO_READ_MAC_PKTTYPE_GEN2(x)    PASAHO_READ_BITFIELD((x)->word0,16,2)    /**< Extract the MAC packet type (PASS Gen2)*/
472 #define PASAHO_LINFO_IS_IP_BROADCAST_GEN2(x)     PASAHO_READ_BITFIELD((x)->word0,16,1)    /**< Indicate whether it is a broadcast IP packet (PASS Gen2)*/
473 #define PASAHO_LINFO_IS_IP_MULTICAST_GEN2(x)     PASAHO_READ_BITFIELD((x)->word0,17,1)    /**< Indicate whether it is a multicast IP packet (PASS Gen2)*/
474 #define PASAHO_LINFO_READ_IP_PKTTYPE_GEN2(x)     PASAHO_READ_BITFIELD((x)->word0,16,2)    /**< Extract the IP packet type (PASS Gen2)*/
476 #define PASAHO_LINFO_READ_PMATCH_GEN2(x)         PASAHO_READ_BITFIELD((x)->word0,23,1)    /**< Extract the previous match flag (PASS Gen2)*/
477 #define PASAHO_LINFO_READ_FLAG_FRAG_GEN2(x)      PASAHO_READ_BITFIELD((x)->word0,19,1)    /**< Extract the fragmentation found flag (PASS Gen2)*/
479 #define PASAHO_LINFO_READ_END_OFFSET_GEN2(x)     PASAHO_READ_BITFIELD((x)->word1,16,16)   /**< Extract the end of packet parse offset (PASS Gen2)*/
480 #define PASAHO_LINFO_READ_EIDX_GEN2(x)           PASAHO_READ_BITFIELD((x)->word1,10,6)    /**< Extract the exception index (PASS Gen2)*/
481 #define PASAHO_LINFO_READ_NXT_HDR_TYPE_GEN2(x)   PASAHO_READ_BITFIELD((x)->word1,0,6)     /**< Extract the next header to parse type (PASS Gen2)*/
482 #define PASAHO_LINFO_READ_INPORT_GEN2(x)         PASAHO_READ_BITFIELD((x)->word1,6,4)     /**< Extract the (1-based) input EMAC port number  
483                                                                                                through CPSW (PASS Gen2)*/
485 #define PASAHO_LINFO_READ_L3_OFFSET_GEN2(x)      PASAHO_READ_BITFIELD((x)->word2,24,8)    /**< Extract the offset to the level 3 header (PASS Gen2)*/
486 #define PASAHO_LINFO_READ_L4_OFFSET_GEN2(x)      PASAHO_READ_BITFIELD((x)->word2,16,8)    /**< Extract the offset to the level 4 header (PASS Gen2)*/
487 #define PASAHO_LINFO_READ_L5_OFFSET_GEN2(x)      PASAHO_READ_BITFIELD((x)->word2,8,8)     /**< Extract the offset to the level 5 header (PASS Gen2)*/
488 #define PASAHO_LINFO_READ_ESP_AH_OFFSET_GEN2(x)  PASAHO_READ_BITFIELD((x)->word2,0,8)     /**< Extract the offset to the security header (PASS Gen2)*/
490 #define PASAHO_LINFO_READ_L1_PDSP_ID_GEN2(x)     PASAHO_READ_BITFIELD((x)->word3,26,6)    /**< Extract the first parse module ID (PASS Gen2)*/
491 #define PASAHO_LINFO_READ_L1_IDX_GEN2(x)         PASAHO_READ_BITFIELD((x)->word3,16,10)   /**< Extract the first parse module match index (PASS Gen2)*/
492 #define PASAHO_LINFO_READ_HDR_BITMASK_GEN2(x)    PASAHO_READ_BITFIELD((x)->word3,0,16)    /**< Extract the bitmask of parsed header types (PASS Gen2)*/
493 #define PASAHO_LINFO_READ_HDR_BITMASK2_GEN2(x)   0                                        /**< Extract the bitmask2 of parsed header types (PASS Gen2)*/
494 #define PASAHO_LINFO_READ_VLAN_COUNT_GEN2(x)     PASAHO_READ_BITFIELD((x)->word4,6,2)     /**< Extract the number of VLAN tags found (PASS Gen2)*/
495 #define PASAHO_LINFO_READ_IP_COUNT_GEN2(x)       PASAHO_READ_BITFIELD((x)->word4,0,3)     /**< Extract the number of IP headers found (PASS Gen2)*/
496 #define PASAHO_LINFO_READ_GRE_COUNT_GEN2(x)      PASAHO_READ_BITFIELD((x)->word4,3,3)     /**< Extract the number of GRE headers found (PASS Gen2)*/
498 #define PASAHO_LINFO_READ_INNER_IP_OFFSET_GEN2(x) PASAHO_READ_BITFIELD((x)->word5,24,8)   /**< Extract the offset to the inner IP header (PASS Gen2)*/
499 #define PASAHO_LINFO_READ_TSTAMP_MSB_GEN2(x)     (x)->word6                               /**< Extract the most significant 32-bit of the 64-bit timestamp */
500 #define PASAHO_LINFO_READ_TSTAMP_MSB2_GEN2(x)    (x)->word8                               /**< Extract the most significant 32-bit of the 64-bit timestamp 
501                                                                                           where the paylaod data has been copied to word6/7 within  
502                                                                                           pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
503 #define PASAHO_LINFO_READ_PATSTAMP_LSW_GEN2(x)   (x)->word9                               /**< Extract the most significant 32-bit of the 64-bit PA timestamp */
504 #define PASAHO_LINFO_READ_PATSTAMP_MSW_GEN2(x)   (x)->word8                               /**< Extract the least significant 32-bit of the 64-bit PA timestamp */
506 #define PASAHO_LINFO_READ_PATSTAMP_LSW2_GEN2(x)  (x)->word11                              /**< Extract the most significant 32-bit of the 64-bit PA timestamp
507                                                                                           where the paylaod data has been copied to word6/7 within
508                                                                                           pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
509 #define PASAHO_LINFO_READ_PATSTAMP_MSW2_GEN2(x)  (x)->word10                              /**< Extract the most significant 32-bit of the 64-bit PA timestamp
510                                                                                           where the paylaod data has been copied to word6/7 within
511                                                                                           pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
513 #define PASAHO_LINFO_READ_EOAM_TF_MATCH_CNT_GEN2(x)   (x)->word5                               /**< Extract the Ethernet OAM target flow match count, valid during 
514                                                                                                EOAM mode on LMM/LMR control packts only (PASS Gen2)*/
515 #define PASAHO_LINFO_READ_EOAM_PKT_MEG_LEVEL_GEN2(x)  PASAHO_READ_BITFIELD((x)->word2,24,8)    /**< Extract the MEG Level during a valid EOAM packet measurement, valid during 
516                                                                                                EOAM mode only (PASS Gen2)*/  
517 #define PASAHO_LINFO_READ_EOAM_PKT_OPCODE_GEN2(x)     PASAHO_READ_BITFIELD((x)->word2,16,8)    /**< Extract the MEG Level during a valid EOAM packet measurement, valid during 
518                                                                                                  EOAM mode only (PASS Gen2)*/                                                                                               
519                                                                                                
521 /*@}*/ /* PASAHO_long_info_command_gen2 macros */
522 /** @}*/ /* @name PASAHO Long Info Command Macros For Second Generation PASS */
524 /** 
525  *  @defgroup PASAHO_long_info_command_macros  PASAHO Long Info Command Macros
526  *  @ingroup pasaho_if_macros
527  *  @{
528  *  @name PASAHO Long Info Command Macros
529  *  Macros used by the PASAHO Long Info Command
530  */
531 /*@{*/
533 #ifdef NSS_GEN2
534 #define PASAHO_LINFO_READ_CMDID(x)          PASAHO_LINFO_READ_CMDID_GEN2(x)           /**< Extract the command ID defined at @ref pasahoCommands */
535 #define PASAHO_LINFO_READ_RECLEN(x)         PASAHO_LINFO_READ_RECLEN_GEN2(x)          /**< Extract the block length */
536 #define PASAHO_LINFO_READ_START_OFFSET(x)   PASAHO_LINFO_READ_START_OFFSET_GEN2(x)    /**< Extract the next parse start offset */
538 #define PASAHO_LINFO_IS_MAC_BROADCAST(x)    PASAHO_LINFO_IS_MAC_BROADCAST_GEN2(x)     /**< Indicate whether it is a broadcast MAC packet */
539 #define PASAHO_LINFO_IS_MAC_MULTICAST(x)    PASAHO_LINFO_IS_MAC_MULTICAST_GEN2(x)     /**< Indicate whether it is a multicast MAC packet */
540 #define PASAHO_LINFO_READ_MAC_PKTTYPE(x)    PASAHO_LINFO_READ_MAC_PKTTYPE_GEN2(x)     /**< Extract the MAC packet type */
542 #define PASAHO_LINFO_IS_IP_BROADCAST(x)     PASAHO_LINFO_IS_IP_BROADCAST_GEN2(x)      /**< Indicate whether it is a broadcast IP packet */
543 #define PASAHO_LINFO_IS_IP_MULTICAST(x)     PASAHO_LINFO_IS_IP_MULTICAST_GEN2(x)      /**< Indicate whether it is a multicast IP packet */
544 #define PASAHO_LINFO_READ_IP_PKTTYPE(x)     PASAHO_LINFO_READ_IP_PKTTYPE_GEN2(x)      /**< Extract the IP packet type */
546 #define PASAHO_LINFO_READ_PMATCH(x)         PASAHO_LINFO_READ_PMATCH_GEN2(x)          /**< Extract the previous match flag */
547 #define PASAHO_LINFO_READ_FLAG_FRAG(x)      PASAHO_LINFO_READ_FLAG_FRAG_GEN2(x)       /**< Extract the fragmentation found flag */
549 #define PASAHO_LINFO_READ_END_OFFSET(x)     PASAHO_LINFO_READ_END_OFFSET_GEN2(x)      /**< Extract the end of packet parse offset */
550 #define PASAHO_LINFO_READ_EIDX(x)           PASAHO_LINFO_READ_EIDX_GEN2(x)            /**< Extract the exception index */
551 #define PASAHO_LINFO_READ_NXT_HDR_TYPE(x)   PASAHO_LINFO_READ_NXT_HDR_TYPE_GEN2(x)    /**< Extract the next header to parse type */
552 #define PASAHO_LINFO_READ_INPORT(x)         PASAHO_LINFO_READ_INPORT_GEN2(x)          /**< Extract the (1-based) input EMAC port number  
553                                                                                            through CPSW */
555 #define PASAHO_LINFO_READ_L3_OFFSET(x)      PASAHO_LINFO_READ_L3_OFFSET_GEN2(x)       /**< Extract the offset to the level 3 header */
556 #define PASAHO_LINFO_READ_L4_OFFSET(x)      PASAHO_LINFO_READ_L4_OFFSET_GEN2(x)       /**< Extract the offset to the level 4 header */
557 #define PASAHO_LINFO_READ_L5_OFFSET(x)      PASAHO_LINFO_READ_L5_OFFSET_GEN2(x)       /**< Extract the offset to the level 5 header */
558 #define PASAHO_LINFO_READ_ESP_AH_OFFSET(x)  PASAHO_LINFO_READ_ESP_AH_OFFSET_GEN2(x)   /**< Extract the offset to the security header */
560 #define PASAHO_LINFO_READ_L1_PDSP_ID(x)     PASAHO_LINFO_READ_L1_PDSP_ID_GEN2(x)      /**< Extract the first parse module ID */
561 #define PASAHO_LINFO_READ_L1_IDX(x)         PASAHO_LINFO_READ_L1_IDX_GEN2(x)          /**< Extract the first parse module match index */
562 #define PASAHO_LINFO_READ_HDR_BITMASK(x)    PASAHO_LINFO_READ_HDR_BITMASK_GEN2(x)     /**< Extract the bitmask of parsed header types */
563 #define PASAHO_LINFO_READ_HDR_BITMASK2(x)   PASAHO_LINFO_READ_HDR_BITMASK2_GEN2(x)    /**< Extract the bitmask2 of parsed header types */
564 #define PASAHO_LINFO_READ_VLAN_COUNT(x)     PASAHO_LINFO_READ_VLAN_COUNT_GEN2(x)      /**< Extract the number of VLAN tags found */
565 #define PASAHO_LINFO_READ_IP_COUNT(x)       PASAHO_LINFO_READ_IP_COUNT_GEN2(x)        /**< Extract the number of IP headers found */
566 #define PASAHO_LINFO_READ_GRE_COUNT(x)      PASAHO_LINFO_READ_GRE_COUNT_GEN2(x)       /**< Extract the number of GRE headers found */
568 #define PASAHO_LINFO_READ_INNER_IP_OFFSET(x)PASAHO_LINFO_READ_INNER_IP_OFFSET_GEN2(x) /**< Extract the offset to the inner IP header */
569 #define PASAHO_LINFO_READ_TSTAMP_MSB(x)     PASAHO_LINFO_READ_TSTAMP_MSB_GEN2(x)      /**< Extract the most significant 32-bit of the 64-bit timestamp */
570 #define PASAHO_LINFO_READ_TSTAMP_MSB2(x)    PASAHO_LINFO_READ_TSTAMP_MSB2_GEN2(x)     /**< Extract the most significant 32-bit of the 64-bit timestamp 
571                                                                                            where the paylaod data has been copied to word6/7 within  
572                                                                                            pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
573 #define PASAHO_LINFO_READ_EOAM_TF_MATCH_CNT(x)  PASAHO_LINFO_READ_EOAM_TF_MATCH_CNT_GEN2(x) /**< Extract the EOAM target flow match count for LMM/LMR packets */
574 #define PASAHO_LINFO_READ_EOAM_PKT_MEG_LEVEL(x) PASAHO_LINFO_READ_EOAM_PKT_MEG_LEVEL_GEN2(x) /**< Extract the EOAM MEG level for that packet */
575 #define PASAHO_LINFO_READ_EOAM_PKT_OPCODE(x) PASAHO_LINFO_READ_EOAM_PKT_OPCODE_GEN2(x) /**< Extract the EOAM Opcode for that packet */
577 #else
578 #define PASAHO_LINFO_READ_CMDID(x)          PASAHO_LINFO_READ_CMDID_GEN1(x)           /**< Extract the command ID defined at @ref pasahoCommands */
579 #define PASAHO_LINFO_READ_RECLEN(x)         PASAHO_LINFO_READ_RECLEN_GEN1(x)          /**< Extract the block length */
580 #define PASAHO_LINFO_READ_START_OFFSET(x)   PASAHO_LINFO_READ_START_OFFSET_GEN1(x)    /**< Extract the next parse start offset */
582 #define PASAHO_LINFO_IS_MAC_BROADCAST(x)    PASAHO_LINFO_IS_MAC_BROADCAST_GEN1(x)     /**< Indicate whether it is a broadcast MAC packet */
583 #define PASAHO_LINFO_IS_MAC_MULTICAST(x)    PASAHO_LINFO_IS_MAC_MULTICAST_GEN1(x)     /**< Indicate whether it is a multicast MAC packet */
584 #define PASAHO_LINFO_READ_MAC_PKTTYPE(x)    PASAHO_LINFO_READ_MAC_PKTTYPE_GEN1(x)     /**< Extract the MAC packet type */
586 #define PASAHO_LINFO_IS_IP_BROADCAST(x)     PASAHO_LINFO_IS_IP_BROADCAST_GEN1(x)      /**< Indicate whether it is a broadcast IP packet */
587 #define PASAHO_LINFO_IS_IP_MULTICAST(x)     PASAHO_LINFO_IS_IP_MULTICAST_GEN1(x)      /**< Indicate whether it is a multicast IP packet */
588 #define PASAHO_LINFO_READ_IP_PKTTYPE(x)     PASAHO_LINFO_READ_IP_PKTTYPE_GEN1(x)      /**< Extract the IP packet type */
590 #define PASAHO_LINFO_READ_END_OFFSET(x)     PASAHO_LINFO_READ_END_OFFSET_GEN1(x)      /**< Extract the end of packet parse offset */
591 #define PASAHO_LINFO_READ_EIDX(x)           PASAHO_LINFO_READ_EIDX_GEN1(x)            /**< Extract the error index */
592 #define PASAHO_LINFO_READ_PMATCH(x)         PASAHO_LINFO_READ_PMATCH_GEN1(x)          /**< Extract the previous match flag */
593 #define PASAHO_LINFO_READ_L1_PDSP_ID(x)     PASAHO_LINFO_READ_L1_PDSP_ID_GEN1(x)      /**< Extract the first parse module ID */
594 #define PASAHO_LINFO_READ_L1_IDX(x)         PASAHO_LINFO_READ_L1_IDX_GEN1(x)          /**< Extract the first parse module match index */
596 #define PASAHO_LINFO_READ_L3_OFFSET(x)      PASAHO_LINFO_READ_L3_OFFSET_GEN1(x)       /**< Extract the offset to the level 3 header */
597 #define PASAHO_LINFO_READ_L4_OFFSET(x)      PASAHO_LINFO_READ_L4_OFFSET_GEN1(x)       /**< Extract the offset to the level 4 header */
598 #define PASAHO_LINFO_READ_L5_OFFSET(x)      PASAHO_LINFO_READ_L5_OFFSET_GEN1(x)       /**< Extract the offset to the level 5 header */
599 #define PASAHO_LINFO_READ_ESP_AH_OFFSET(x)  PASAHO_LINFO_READ_ESP_AH_OFFSET_GEN1(x)   /**< Extract the offset to the security header */
601 #define PASAHO_LINFO_READ_HDR_BITMASK(x)    PASAHO_LINFO_READ_HDR_BITMASK_GEN1(x)     /**< Extract the bitmask of parsed header types */
602 #define PASAHO_LINFO_READ_HDR_BITMASK2(x)   PASAHO_LINFO_READ_HDR_BITMASK2_GEN1(x)    /**< Extract the bitmask2 of parsed header types */
603 #define PASAHO_LINFO_READ_NXT_HDR_TYPE(x)   PASAHO_LINFO_READ_NXT_HDR_TYPE_GEN1(x)    /**< Extract the next header to parse type */
604 #define PASAHO_LINFO_READ_VLAN_COUNT(x)     PASAHO_LINFO_READ_VLAN_COUNT_GEN1(x)      /**< Extract the number of VLAN tags found */
605 #define PASAHO_LINFO_READ_IP_COUNT(x)       PASAHO_LINFO_READ_IP_COUNT_GEN1(x)        /**< Extract the number of IP headers found */
606 #define PASAHO_LINFO_READ_GRE_COUNT(x)      PASAHO_LINFO_READ_GRE_COUNT_GEN1(x)       /**< Extract the number of GRE headers found */
607 #define PASAHO_LINFO_READ_FLAG_FRAG(x)      PASAHO_LINFO_READ_FLAG_FRAG_GEN1(x)       /**< Extract the fragmentation found flag */
608 #define PASAHO_LINFO_READ_INPORT(x)         PASAHO_LINFO_READ_INPORT_GEN1(x)          /**< Extract the (1-based) input EMAC port number  
609                                                                                            0: Indicates that the packet does not enter PASS 
610                                                                                            through CPSW */
611 #define PASAHO_LINFO_READ_INNER_IP_OFFSET(x)PASAHO_LINFO_READ_INNER_IP_OFFSET_GEN1(x) /**< Extract the offset to the inner IP header */
612 #define PASAHO_LINFO_READ_TSTAMP_MSB(x)     PASAHO_LINFO_READ_TSTAMP_MSB_GEN1(x)      /**< Extract the most significant 32-bit of the 64-bit timestamp */
613 #define PASAHO_LINFO_READ_TSTAMP_MSB2(x)    PASAHO_LINFO_READ_TSTAMP_MSB2_GEN1(x)     /**< Extract the most significant 32-bit of the 64-bit timestamp 
614                                                                                            where the paylaod data has been copied to word6/7 within  
615                                                                                            pasahoLongInfo_t by using PASS command pa_CMD_COPY_DATA_TO_PSINFO */
616 #endif
618 /* Extract Protocol Information */
620 /*@}*/ /* PASAHO_long_info_command_macros */
621 /** @}*/ /* @name PASAHO Long Info Command Macros */
623 /**
624  *  @defgroup PASAHO_long_info_proto_ind_gen1_macros  PASAHO Long Info Protocol Indication Macros For First Generation PASS
625  *  @ingroup pasaho_if_macros
626  *  @{
627  *  @name PASAHO Long Info Protocol Indication Macros For First Generation PASS
628  */
629 #define PASAHO_LINFO_IS_MAC_GEN1(x)              PASAHO_READ_BITFIELD((x)->word3,21,1)    /**< Indicate whether it is a MAC packet (Pass Gen1)*/
630 #define PASAHO_LINFO_IS_802_3_GEN1(x)            PASAHO_READ_BITFIELD((x)->word3,7,1)     /**< Indicate whether it is a 802.3 packet (Pass Gen1)*/
631 #define PASAHO_LINFO_IS_WITH_VLAN_GEN1(x)        PASAHO_LINFO_READ_VLAN_COUNT(x)          /**< Indicate whether it is a MAC packet with VLAN (Pass Gen1)*/
632 #define PASAHO_LINFO_IS_WITH_MPLS_GEN1(x)        PASAHO_READ_BITFIELD((x)->word3,23,1)    /**< Indicate whether it is a MAC packet with MPLS (Pass Gen1)*/
633 #define PASAHO_LINFO_IS_PPPoE_GEN1(x)            PASAHO_READ_BITFIELD((x)->word3,6,1)     /**< Indicate whether it is a PPPoE packet (Pass Gen1)*/
634 #define PASAHO_LINFO_IS_IP_GEN1(x)               PASAHO_LINFO_READ_IP_COUNT(x)            /**< Indicate whether it is an IP packet (Pass Gen1)*/
635 #define PASAHO_LINFO_IS_IPSEC_ESP_GEN1(x)        PASAHO_READ_BITFIELD((x)->word3,25,1)    /**< Indicate whether it is an IPSEC ESP packet (Pass Gen1)*/
636 #define PASAHO_LINFO_IS_IPSEC_AH_GEN1(x)         PASAHO_READ_BITFIELD((x)->word3,26,1)    /**< Indicate whether it is an IPSEC AH packet (Pass Gen1)*/
637 #define PASAHO_LINFO_IS_UDP_GEN1(x)              PASAHO_READ_BITFIELD((x)->word3,27,1)    /**< Indicate whether it is an UDP packet (Pass Gen1)*/
638 #define PASAHO_LINFO_IS_UDP_LITE_GEN1(x)         PASAHO_READ_BITFIELD((x)->word3,28,1)    /**< Indicate whether it is an UDP Lite packet (Pass Gen1)*/
639 #define PASAHO_LINFO_IS_TCP_GEN1(x)              PASAHO_READ_BITFIELD((x)->word3,29,1)    /**< Indicate whether it is a TCP packet (Pass Gen1)*/
640 #define PASAHO_LINFO_IS_GRE_GEN1(x)              PASAHO_LINFO_READ_GRE_COUNT(x)           /**< Indicate whether it is a GRE packet (Pass Gen1)*/
641 #define PASAHO_LINFO_IS_GTPU_GEN1(x)             PASAHO_READ_BITFIELD((x)->word3,30,1)    /**< Indicate whether it is a GTPU packet (Pass Gen1)*/
642 #define PASAHO_LINFO_IS_CUSTOM_GEN1(x)           PASAHO_READ_BITFIELD((x)->word3,31,1)    /**< Indicate whether it is a Custom packet (Pass Gen1)*/
643 #define PASAHO_LINFO_IS_SCTP_GEN1(x)             PASAHO_READ_BITFIELD((x)->word3,4,1)     /**< Indicate whether it is a SCTP packet (Pass Gen1)*/
644 #define PASAHO_LINFO_IS_IPSEC_NAT_T_GEN1(x)      PASAHO_READ_BITFIELD((x)->word3,5,1)     /**< Indicate whether it is an IPSEC NAT-T packet (Pass Gen1)*/
646 /*@}*/ /* PASAHO_long_info_proto_ind_gen1_macross */
647 /** @}*/ /* @name PASAHO Long Info Protocol Indication Macross For First Generation PASS */
649 /**
650  *  @defgroup PASAHO_long_info_proto_ind_gen2_macros  PASAHO Long Info Protocol Indication Macros For Second Generation PASS
651  *  @ingroup pasaho_if_macros
652  *  @{
653  *  @name PASAHO Long Info Protocol Indication Macros For Second Generation PASS
654  */
655 #define PASAHO_LINFO_IS_MAC_GEN2(x)              PASAHO_READ_BITFIELD((x)->word3,0,1)     /**< Indicate whether it is a MAC packet (Pass Gen2)*/
656 #define PASAHO_LINFO_IS_WITH_VLAN_GEN2(x)        PASAHO_LINFO_READ_VLAN_COUNT(x)          /**< Indicate whether it is a MAC packet with VLAN (Pass Gen2)*/
657 #define PASAHO_LINFO_IS_WITH_MPLS_GEN2(x)        PASAHO_READ_BITFIELD((x)->word3,2,1)     /**< Indicate whether it is a MAC packet with MPLS (Pass Gen2)*/
658 #define PASAHO_LINFO_IS_802_3_GEN2(x)            PASAHO_READ_BITFIELD((x)->word3,3,1)     /**< Indicate whether it is a 802.3 packet (Pass Gen2)*/
659 #define PASAHO_LINFO_IS_PPPoE_GEN2(x)            PASAHO_READ_BITFIELD((x)->word3,4,1)     /**< Indicate whether it is a PPPoE packet (Pass Gen2)*/
660 #define PASAHO_LINFO_IS_IP_GEN2(x)               PASAHO_LINFO_READ_IP_COUNT(x)            /**< Indicate whether it is an IP packet (Pass Gen2)*/
661 #define PASAHO_LINFO_IS_IPv4_GEN2(x)             PASAHO_READ_BITFIELD((x)->word3,5,1)     /**< Indicate whether it is an IPv4 packet (Pass Gen2)*/
662 #define PASAHO_LINFO_IS_IPv6_GEN2(x)             PASAHO_READ_BITFIELD((x)->word3,6,1)     /**< Indicate whether it is an IPv4 packet (Pass Gen2)*/
663 #define PASAHO_LINFO_IS_IP_OPTIONS_GEN2(x)       PASAHO_READ_BITFIELD((x)->word3,7,1)     /**< Indicate whether there are IPV4 options or IPv6 extention headers (Pass Gen2)*/
664 #define PASAHO_LINFO_IS_IPSEC_ESP_GEN2(x)        PASAHO_READ_BITFIELD((x)->word3,8,1)     /**< Indicate whether it is an IPSEC ESP packet (Pass Gen2)*/
665 #define PASAHO_LINFO_IS_IPSEC_AH_GEN2(x)         PASAHO_READ_BITFIELD((x)->word3,9,1)     /**< Indicate whether it is an IPSEC AH packet (Pass Gen2)*/
666 #define PASAHO_LINFO_IS_SCTP_GEN2(x)             PASAHO_READ_BITFIELD((x)->word3,10,1)    /**< Indicate whether it is a SCTP packet (Pass Gen2)*/
667 #define PASAHO_LINFO_IS_UDP_GEN2(x)              PASAHO_READ_BITFIELD((x)->word3,11,1)    /**< Indicate whether it is an UDP packet (Pass Gen2)*/
668 #define PASAHO_LINFO_IS_UDP_LITE_GEN2(x)         PASAHO_READ_BITFIELD((x)->word3,11,1)    /**< Indicate whether it is an UDP Lite packet (Pass Gen2)*/
669 #define PASAHO_LINFO_IS_TCP_GEN2(x)              PASAHO_READ_BITFIELD((x)->word3,12,1)    /**< Indicate whether it is a TCP packet (Pass Gen2)*/
670 #define PASAHO_LINFO_IS_GRE_GEN2(x)              PASAHO_LINFO_READ_GRE_COUNT(x)           /**< Indicate whether it is a GRE packet (Pass Gen2)*/
671 #define PASAHO_LINFO_IS_GTPU_GEN2(x)             PASAHO_READ_BITFIELD((x)->word3,13,1)    /**< Indicate whether it is a GTPU packet (Pass Gen2)*/
672 #define PASAHO_LINFO_IS_CUSTOM_GEN2(x)           PASAHO_READ_BITFIELD((x)->word3,14,1)    /**< Indicate whether it is a Custom packet (Pass Gen2)*/
673 #define PASAHO_LINFO_IS_IPSEC_NAT_T_GEN2(x)      PASAHO_READ_BITFIELD((x)->word3,15,1)    /**< Indicate whether it is an IPSEC NAT-T packet (Pass Gen2)*/
675 /*@}*/ /* PASAHO_long_info_proto_ind_macross */
676 /** @}*/ /* @name PASAHO Long Info Protocol Indication Macross For Second Generation PASS */
678 /**
679  *  @defgroup PASAHO_long_info_proto_ind_macros  PASAHO Long Info Protocol Indication Macros
680  *  @ingroup pasaho_if_macros
681  *  @{
682  *  @name PASAHO Long Info Protocol Indication Macros
683  */
684 #ifdef NSS_GEN2
685 #define PASAHO_LINFO_IS_MAC(x)          PASAHO_LINFO_IS_MAC_GEN2(x)             /**< Indicate whether it is a MAC packet */
686 #define PASAHO_LINFO_IS_WITH_VLAN(x)    PASAHO_LINFO_IS_WITH_VLAN_GEN2(x)       /**< Indicate whether it is a MAC packet with VLAN */
687 #define PASAHO_LINFO_IS_WITH_MPLS(x)    PASAHO_LINFO_IS_WITH_MPLS_GEN2(x)       /**< Indicate whether it is a MAC packet with MPLS */
688 #define PASAHO_LINFO_IS_802_3(x)        PASAHO_LINFO_IS_802_3_GEN2(x)           /**< Indicate whether it is a 802.3 packet */
689 #define PASAHO_LINFO_IS_PPPoE(x)        PASAHO_LINFO_IS_PPPoE_GEN2(x)           /**< Indicate whether it is a PPPoE packet */
690 #define PASAHO_LINFO_IS_IP(x)           PASAHO_LINFO_IS_IP_GEN2(x)              /**< Indicate whether it is an IP packet */
691 #define PASAHO_LINFO_IS_IPv4(x)         PASAHO_LINFO_IS_IPv4_GEN2(x)            /**< Indicate whether it is an IPv4 packet */
692 #define PASAHO_LINFO_IS_IPv6(x)         PASAHO_LINFO_IS_IPv6_GEN2(x)            /**< Indicate whether it is an IPv4 packet */
693 #define PASAHO_LINFO_IS_IP_OPTIONS(x)   PASAHO_LINFO_IS_IP_OPTIONS_GEN2(x)      /**< Indicate whether there are IPV4 options or IPv6 extention headers */
694 #define PASAHO_LINFO_IS_IPSEC_ESP(x)    PASAHO_LINFO_IS_IPSEC_ESP_GEN2(x)       /**< Indicate whether it is an IPSEC ESP packet */
695 #define PASAHO_LINFO_IS_IPSEC_AH(x)     PASAHO_LINFO_IS_IPSEC_AH_GEN2(x)        /**< Indicate whether it is an IPSEC AH packet */
696 #define PASAHO_LINFO_IS_SCTP(x)         PASAHO_LINFO_IS_SCTP_GEN2(x)            /**< Indicate whether it is a SCTP packet */
697 #define PASAHO_LINFO_IS_UDP(x)          PASAHO_LINFO_IS_UDP_GEN2(x)             /**< Indicate whether it is an UDP packet */
698 #define PASAHO_LINFO_IS_UDP_LITE(x)     PASAHO_LINFO_IS_UDP_LITE_GEN2(x)        /**< Indicate whether it is an UDP Lite packet */
699 #define PASAHO_LINFO_IS_TCP(x)          PASAHO_LINFO_IS_TCP_GEN2(x)             /**< Indicate whether it is a TCP packet */
700 #define PASAHO_LINFO_IS_GRE(x)          PASAHO_LINFO_IS_GRE_GEN2(x)             /**< Indicate whether it is a GRE packet */
701 #define PASAHO_LINFO_IS_GTPU(x)         PASAHO_LINFO_IS_GTPU_GEN2(x)            /**< Indicate whether it is a GTPU packet */
702 #define PASAHO_LINFO_IS_CUSTOM(x)       PASAHO_LINFO_IS_CUSTOM_GEN2(x)          /**< Indicate whether it is a Custom packet */
703 #define PASAHO_LINFO_IS_IPSEC_NAT_T(x)  PASAHO_LINFO_IS_IPSEC_NAT_T_GEN2(x)     /**< Indicate whether it is an IPSEC NAT-T packet */
704 #else
705 #define PASAHO_LINFO_IS_MAC(x)          PASAHO_LINFO_IS_MAC_GEN1(x)             /**< Indicate whether it is a MAC packet */
706 #define PASAHO_LINFO_IS_802_3(x)        PASAHO_LINFO_IS_802_3_GEN1(x)           /**< Indicate whether it is a 802.3 packet */
707 #define PASAHO_LINFO_IS_WITH_VLAN(x)    PASAHO_LINFO_IS_WITH_VLAN_GEN1(x)       /**< Indicate whether it is a MAC packet with VLAN */
708 #define PASAHO_LINFO_IS_WITH_MPLS(x)    PASAHO_LINFO_IS_WITH_MPLS_GEN1(x)       /**< Indicate whether it is a MAC packet with MPLS */
709 #define PASAHO_LINFO_IS_PPPoE(x)        PASAHO_LINFO_IS_PPPoE_GEN1(x)           /**< Indicate whether it is a PPPoE packet */
710 #define PASAHO_LINFO_IS_IP(x)           PASAHO_LINFO_IS_IP_GEN1(x)              /**< Indicate whether it is an IP packet */
711 #define PASAHO_LINFO_IS_IPSEC_ESP(x)    PASAHO_LINFO_IS_IPSEC_ESP_GEN1(x)       /**< Indicate whether it is an IPSEC ESP packet */
712 #define PASAHO_LINFO_IS_IPSEC_AH(x)     PASAHO_LINFO_IS_IPSEC_AH_GEN1(x)        /**< Indicate whether it is an IPSEC AH packet */
713 #define PASAHO_LINFO_IS_UDP(x)          PASAHO_LINFO_IS_UDP_GEN1(x)             /**< Indicate whether it is an UDP packet */
714 #define PASAHO_LINFO_IS_UDP_LITE(x)     PASAHO_LINFO_IS_UDP_LITE_GEN1(x)        /**< Indicate whether it is an UDP Lite packet */
715 #define PASAHO_LINFO_IS_TCP(x)          PASAHO_LINFO_IS_TCP_GEN1(x)             /**< Indicate whether it is a TCP packet */
716 #define PASAHO_LINFO_IS_GRE(x)          PASAHO_LINFO_IS_GRE_GEN1(x)             /**< Indicate whether it is a GRE packet */
717 #define PASAHO_LINFO_IS_GTPU(x)         PASAHO_LINFO_IS_GTPU_GEN1(x)            /**< Indicate whether it is a GTPU packet */
718 #define PASAHO_LINFO_IS_CUSTOM(x)       PASAHO_LINFO_IS_CUSTOM_GEN1(x)          /**< Indicate whether it is a Custom packet */
719 #define PASAHO_LINFO_IS_SCTP(x)         PASAHO_LINFO_IS_SCTP_GEN1(x)            /**< Indicate whether it is a SCTP packet */
720 #define PASAHO_LINFO_IS_IPSEC_NAT_T(x)  PASAHO_LINFO_IS_IPSEC_NAT_T_GEN1(x)     /**< Indicate whether it is an IPSEC NAT-T packet */
721 #endif
723 /*@}*/ /* PASAHO_long_info_proto_ind_macross */
724 /** @}*/ /* @name PASAHO Long Info Protocol Indication Macross */
726 /**
727  *  @defgroup PASAHO_long_info_ipReassm_gen1_macros  PASAHO Long Info IP Reassembly Macros For First Generation PASS
728  *  @ingroup pasaho_if_macros
729  *  @{
730  *  @name PASAHO Long Info IpReassm Macros For First Generation PASS
731  *  Macros used by the PASAHO PASS-assisted IP Reassembly Operation
732  *
733  */
734 #define PASAHO_LINFO_READ_TFINDEX_GEN1(x)        PASAHO_READ_BITFIELD((x)->word4,24,8)     /**< Extract the IP Reassembly Traffic Flow Index (PASS Gen1)*/
735 #define PASAHO_LINFO_READ_FRANCNT_GEN1(x)        PASAHO_READ_BITFIELD((x)->word4,16,8)     /**< Extract the IP Reassembly Fragment count (PASS Gen1)*/
737 #define PASAHO_LINFO_SET_TFINDEX_GEN1(x, v)      PASAHO_SET_BITFIELD((x)->word4,(v),24,8)  /**< Set the IP Reassembly Traffic Flow Index (PASS Gen1)*/
738 #define PASAHO_LINFO_SET_FRANCNT_GEN1(x, v)      PASAHO_SET_BITFIELD((x)->word4,(v),16,8)  /**< Set the IP Reassembly Fragment count (PASS Gen1)*/
740 #define PASAHO_LINFO_IS_IPSEC_GEN1(x)            PASAHO_READ_BITFIELD((x)->word3,25,2)     /**< Indicate whether it is an IPSEC packet (PASS Gen1)*/
741 #define PASAHO_LINFO_CLR_IPSEC_GEN1(x)           PASAHO_SET_BITFIELD((x)->word3,0,25,2)    /**< Clear IPSEC indication bits (PASS Gen1)*/
742 #define PASAHO_LINFO_CLR_IPSEC_ESP_GEN1(x)       PASAHO_SET_BITFIELD((x)->word3,0,26,1)    /**< Clear IPSEC ESP indication bit (PASS Gen1)*/
743 #define PASAHO_LINFO_CLR_IPSEC_AH_GEN1(x)        PASAHO_SET_BITFIELD((x)->word3,0,25,1)    /**< Claer IPSEC AH indication bit (PASS Gen1)*/
744 #define PASAHO_LINFO_CLR_FLAG_FRAG_GEN1(x)       PASAHO_SET_BITFIELD((x)->word3,0,3,1)     /**< Clear the fragmentation found flag (PASS Gen1)*/
747 #define PASAHO_LINFO_SET_START_OFFSET_GEN1(x, v) PASAHO_SET_BITFIELD((x)->word0,(v),0,16)  /**< Update the next parse start offset (PASS Gen1)*/
748 #define PASAHO_LINFO_SET_END_OFFSET_GEN1(x, v)   PASAHO_SET_BITFIELD((x)->word1,(v),16,16) /**< Update the end of packet parse offset (PASS Gen1)*/
750 #define PASAHO_LINFO_SET_NULL_PKT_IND_GEN1(x, v) PASAHO_SET_BITFIELD((x)->word0,(v),21,1)  /**< Set the null packet flag which indicates that the packet should be dropped. 
751                                                                                            This flag should be set for the null packet to be delivered to PASS when
752                                                                                            the reassembly timeout occurs    (PASS Gen1)*/
754 /*@}*/ /* PASAHO_long_info_ipReassm_gen1_macros */
755 /** @}*/ /* @name PASAHO Long Info IpReassm Macros For First Generation PASS */
757 /**
758  *  @defgroup PASAHO_long_info_ipReassm_gen2_macros  PASAHO Long Info IP Reassembly Macros For Second Generation PASS
759  *  @ingroup pasaho_if_macros
760  *  @{
761  *  @name PASAHO Long Info IpReassm Macros
762  *  Macros used by the PASAHO PASS-assisted IP Reassembly Operation For Second Generation PASS
763  *
764  */
765 #define PASAHO_LINFO_READ_TFINDEX_GEN2(x)        PASAHO_READ_BITFIELD((x)->word5,24,8)     /**< Extract the IP Reassembly Traffic Flow Index (Pass Gen2)*/
766 #define PASAHO_LINFO_READ_FRANCNT_GEN2(x)        PASAHO_READ_BITFIELD((x)->word5,16,8)     /**< Extract the IP Reassembly Fragment count (Pass Gen2)*/
768 #define PASAHO_LINFO_SET_TFINDEX_GEN2(x, v)      PASAHO_SET_BITFIELD((x)->word5,(v),24,8)  /**< Set the IP Reassembly Traffic Flow Index (Pass Gen2)*/
769 #define PASAHO_LINFO_SET_FRANCNT_GEN2(x, v)      PASAHO_SET_BITFIELD((x)->word5,(v),16,8)  /**< Set the IP Reassembly Fragment count (Pass Gen2)*/
771 #define PASAHO_LINFO_IS_IPSEC_GEN2(x)            PASAHO_READ_BITFIELD((x)->word3,8,2)      /**< Indicate whether it is an IPSEC packet (Pass Gen2)*/
772 #define PASAHO_LINFO_CLR_IPSEC_GEN2(x)           PASAHO_SET_BITFIELD((x)->word3,0,8,2)     /**< Clear IPSEC indication bits (Pass Gen2)*/
773 #define PASAHO_LINFO_CLR_IPSEC_ESP_GEN2(x)       PASAHO_SET_BITFIELD((x)->word3,0,8,1)     /**< Clear IPSEC ESP indication bit (Pass Gen2)*/
774 #define PASAHO_LINFO_CLR_IPSEC_AH_GEN2(x)        PASAHO_SET_BITFIELD((x)->word3,0,9,1)     /**< Claer IPSEC AH indication bit (Pass Gen2)*/
775 #define PASAHO_LINFO_CLR_FLAG_FRAG_GEN2(x)       PASAHO_SET_BITFIELD((x)->word1,0,19,1)    /**< Clear the fragmentation found flag (Pass Gen2)*/
778 #define PASAHO_LINFO_SET_START_OFFSET_GEN2(x, v) PASAHO_SET_BITFIELD((x)->word0,(v),0,8)   /**< Update the next parse start offset (Pass Gen2)*/
779 #define PASAHO_LINFO_SET_END_OFFSET_GEN2(x, v)   PASAHO_SET_BITFIELD((x)->word1,(v),16,16) /**< Update the end of packet parse offset (Pass Gen2)*/
780 #define PASAHO_LINFO_SET_NXT_HDR_TYPE_GEN2(x, v) PASAHO_SET_BITFIELD((x)->word1,(v),0,6)   /**< Update the next header to parse type (Pass Gen2)*/
782 #define PASAHO_LINFO_SET_NULL_PKT_IND_GEN2(x, v) PASAHO_SET_BITFIELD((x)->word0,(v),13,1)  /**< Set the null packet flag which indicates that the packet should be dropped. 
783                                                                                                 This flag should be set for the null packet to be delivered to PASS when
784                                                                                                 the reassembly timeout occurs    (Pass Gen2)*/
785 /*@}*/ /* PASAHO_long_info_ipReassm_gen2_macros */
786 /** @}*/ /* @name PASAHO Long Info IpReassm Macros For Second Generation PASS */
788 /**
789  *  @defgroup PASAHO_long_info_ipReassm_macros  PASAHO Long Info IP Reassembly Macros
790  *  @ingroup pasaho_if_macros
791  *  @{
792  *  @name PASAHO Long Info IpReassm Macros
793  *  Macros used by the PASAHO PASS-assisted IP Reassembly Operation
794  *
795  */
796 #ifdef NSS_GEN2 
797 #define PASAHO_LINFO_READ_TFINDEX(x)        PASAHO_LINFO_READ_TFINDEX_GEN2(x)         /**< Extract the IP Reassembly Traffic Flow Index */
798 #define PASAHO_LINFO_READ_FRANCNT(x)        PASAHO_LINFO_READ_FRANCNT_GEN2(x)         /**< Extract the IP Reassembly Fragment count */
800 #define PASAHO_LINFO_SET_TFINDEX(x, v)      PASAHO_LINFO_SET_TFINDEX_GEN2(x, v)       /**< Set the IP Reassembly Traffic Flow Index */
801 #define PASAHO_LINFO_SET_FRANCNT(x, v)      PASAHO_LINFO_SET_FRANCNT_GEN2(x, v)       /**< Set the IP Reassembly Fragment count */
803 #define PASAHO_LINFO_IS_IPSEC(x)            PASAHO_LINFO_IS_IPSEC_GEN2(x)             /**< Indicate whether it is an IPSEC packet */
804 #define PASAHO_LINFO_CLR_IPSEC(x)           PASAHO_LINFO_CLR_IPSEC_GEN2(x)            /**< Clear IPSEC indication bits */
805 #define PASAHO_LINFO_CLR_IPSEC_ESP(x)       PASAHO_LINFO_CLR_IPSEC_ESP_GEN2(x)        /**< Clear IPSEC ESP indication bit */
806 #define PASAHO_LINFO_CLR_IPSEC_AH(x)        PASAHO_LINFO_CLR_IPSEC_AH_GEN2(x)         /**< Claer IPSEC AH indication bit */
807 #define PASAHO_LINFO_CLR_FLAG_FRAG(x)       PASAHO_LINFO_CLR_FLAG_FRAG_GEN2(x)        /**< Clear the fragmentation found flag */
810 #define PASAHO_LINFO_SET_START_OFFSET(x, v) PASAHO_LINFO_SET_START_OFFSET_GEN2(x, v)  /**< Update the next parse start offset */
811 #define PASAHO_LINFO_SET_END_OFFSET(x, v)   PASAHO_LINFO_SET_END_OFFSET_GEN2(x, v)    /**< Update the end of packet parse offset */
812 #define PASAHO_LINFO_SET_NXT_HDR_TYPE(x, v) PASAHO_LINFO_SET_NXT_HDR_TYPE_GEN2(x, v)  /**< Update the next header to parse type */
814 #define PASAHO_LINFO_SET_NULL_PKT_IND(x, v) PASAHO_LINFO_SET_NULL_PKT_IND_GEN2(x, v)  /**< Set the null packet flag which indicates that the packet should be dropped. 
815                                                                                            This flag should be set for the null packet to be delivered to PASS when
816                                                                                            the reassembly timeout occurs    */
817 #else
818 #define PASAHO_LINFO_READ_TFINDEX(x)        PASAHO_LINFO_READ_TFINDEX_GEN1(x)         /**< Extract the IP Reassembly Traffic Flow Index */
819 #define PASAHO_LINFO_READ_FRANCNT(x)        PASAHO_LINFO_READ_FRANCNT_GEN1(x)         /**< Extract the IP Reassembly Fragment count */
821 #define PASAHO_LINFO_SET_TFINDEX(x, v)      PASAHO_LINFO_SET_TFINDEX_GEN1(x, v)       /**< Set the IP Reassembly Traffic Flow Index */
822 #define PASAHO_LINFO_SET_FRANCNT(x, v)      PASAHO_LINFO_SET_FRANCNT_GEN1(x, v)       /**< Set the IP Reassembly Fragment count */
824 #define PASAHO_LINFO_IS_IPSEC(x)            PASAHO_LINFO_IS_IPSEC_GEN1(x)             /**< Indicate whether it is an IPSEC packet */
825 #define PASAHO_LINFO_CLR_IPSEC(x)           PASAHO_LINFO_CLR_IPSEC_GEN1(x)            /**< Clear IPSEC indication bits */
826 #define PASAHO_LINFO_CLR_IPSEC_ESP(x)       PASAHO_LINFO_CLR_IPSEC_ESP_GEN1(x)        /**< Clear IPSEC ESP indication bit */
827 #define PASAHO_LINFO_CLR_IPSEC_AH(x)        PASAHO_LINFO_CLR_IPSEC_AH_GEN1(x)         /**< Claer IPSEC AH indication bit */
828 #define PASAHO_LINFO_CLR_FLAG_FRAG(x)       PASAHO_LINFO_CLR_FLAG_FRAG_GEN1(x)        /**< Clear the fragmentation found flag */
831 #define PASAHO_LINFO_SET_START_OFFSET(x, v) PASAHO_LINFO_SET_START_OFFSET_GEN1(x, v)  /**< Update the next parse start offset */
832 #define PASAHO_LINFO_SET_END_OFFSET(x, v)   PASAHO_LINFO_SET_END_OFFSET_GEN1(x, v)    /**< Update the end of packet parse offset */
834 #define PASAHO_LINFO_SET_NULL_PKT_IND(x, v) PASAHO_LINFO_SET_NULL_PKT_IND_GEN1(x, v)  /**< Set the null packet flag which indicates that the packet should be dropped. 
835                                                                                            This flag should be set for the null packet to be delivered to PASS when
836                                                                                            the reassembly timeout occurs    */
838 #endif                                                                                           
839 /*@}*/ /* PASAHO_long_info_ipReassm_macros */
840 /** @}*/ /* @name PASAHO Long Info IpReassm Macros */
842 /**
843  *  @def  PA_INV_TF_INDEX
844  *        PASS-asssited IP reassembly traffic flow index to indicate that no traffic flow is available 
845  */
846 #define PA_INV_TF_INDEX     0xFF    
848 /**
849  *  @ingroup pasaho_if_structures
850  *  @brief  pasahoShortInfo_t defines the packet parsing information in the short format
851  *
852  *  @details pasahoShortInfo_t defines the packet parsing information in terms of
853  *           payload offset and payload length as described below
854  *           SRTP:      offset to the RTP header; RTP payload length including ICV
855  *           IPSEC AH:  offset to the Outer IP; IP payload length
856  *           IPSEC ESP: offset to the ESP header; ESP papload length including ICV
857  */
859 typedef struct pasahoShortInfo_s {
860     uint32_t  word0;   /**< Control block word 0 */
861     uint32_t  word1;   /**< Optional supplement data (It may be padding for alignment only) */
862 } pasahoShortInfo_t;
864 /** 
865  *  @defgroup PASAHO_short_info_command_macros  PASAHO Short Info Command Macros
866  *  @ingroup pasaho_if_macros
867  *  @{
868  *  @name PASAHO Short Info Command Macros
869  *  Macros used by the PASAHO Short Info Command
870  *  
871  */
872 /*@{*/
873 #define PASAHO_SINFO_READ_CMDID(x)          PASAHO_READ_BITFIELD((x)->word0,29,3)                           /**< Extract the command ID defined at @ref pasahoCommands */
874 #define PASAHO_SINFO_RESD_PAYLOAD_OFFSET(x) PASAHO_READ_BITFIELD((x)->word0,16,8)                           /**< Extract the offset to the packet payload */
875 #define PASAHO_SINFO_READ_PAYLOAD_LENGTH(x) PASAHO_READ_BITFIELD((x)->word0,0,16)                           /**< Extract the byte length of the payload */
877 #define PASAHO_SINFO_SET_PAYLOAD_OFFSET(x, v)  PASAHO_SET_BITFIELD((x)->word0, (v), 16, 8)                  /**< Set the offset to the payload */
878 #define PASAHO_SINFO_SET_PAYLOAD_LENGTH(x, v)  PASAHO_SET_BITFIELD((x)->word0, (v), 0,  16)                 /**< Set the payload length */
879 #define PASAHO_SINFO_FORMAT_CMD(offset, len)   (((offset) << 16) | (len) | (PASAHO_SA_SHORT_INFO << 29))    /**< Format the entire short info command */
881 /*@}*/ /* PASAHO_short_info_command_macros */
882 /** @}*/ /* @name PASAHO Short Info Command Macros */
884 /* Header bitmask bits */
885 /**
886  *  @defgroup pasahoHeaderBitmapGen1  PA/SA/HO Header Bitmap Bit Definitions For First Generation PASS
887  *  @ingroup pasaho_if_constants
888  *  @{
889  *
890  *  @name PA/SA/HO Header Bitmap Bit Definitions For First Generation PASS
891  *  Bitmap definition of the protocol header bitmask at the long info of First Generation PASS. 
892  */ 
893 /*@{*/
894 #define PASAHO_HDR_BITMASK_MAC_GEN1     (1 << 0)     /**< MAC present (PASS Gen1)*/
895 #define PASAHO_HDR_BITMASK_VLAN_GEN1    (1 << 1)     /**< VLAN present (PASS Gen1)*/
896 #define PASAHO_HDR_BITMASK_MPLS_GEN1    (1 << 2)     /**< MPLS present (PASS Gen1)*/
897 #define PASAHO_HDR_BITMASK_IP_GEN1      (1 << 3)     /**< IP present (PASS Gen1)*/
898 #define PASAHO_HDR_BITMASK_ESP_GEN1     (1 << 4)     /**< IPSEC/ESP present (PASS Gen1)*/
899 #define PASAHO_HDR_BITMASK_AH_GEN1      (1 << 5)     /**< IPSEC/AH present (PASS Gen1)*/
900 #define PASAHO_HDR_BITMASK_UDP_GEN1     (1 << 6)     /**< UDP present (PASS Gen1)*/
901 #define PASAHO_HDR_BITMASK_UDPLITE_GEN1 (1 << 7)     /**< UDPLITE present (PASS Gen1)*/
902 #define PASAHO_HDR_BITMASK_TCP_GEN1     (1 << 8)     /**< TCP present (PASS Gen1)*/
903 #define PASAHO_HDR_BITMASK_GTPU_GEN1    (1 << 9)     /**< GTPU present (PASS Gen1)*/
904 #define PASAHO_HDR_BITMASK_CUSTOM_GEN1  (1 << 10)    /**< Custom header present (PASS Gen1)*/
906 #define PASAHO_HDR_BITMASK2_SCTP_GEN1          (1 << 0)     /**< SCTP present (PASS Gen1)*/
907 #define PASAHO_HDR_BITMASK2_IPSEC_NAT_T_GEN1   (1 << 1)     /**< IPSEC NAT-T present (PASS Gen1)*/
908 #define PASAHO_HDR_BITMASK2_PPPoE_GEN1         (1 << 2)     /**< PPPoE present (PASS Gen1)*/
909 #define PASAHO_HDR_BITMASK2_802_3_GEN1         (1 << 3)     /**< 802.3 present (PASS Gen1)*/
911 /*@}*/
912 /** @} */
914 /* Header bitmask bits */
915 /**
916  *  @defgroup pasahoHeaderBitmapGen2  PA/SA/HO Header Bitmap Bit Definitions For Second Generation PASS
917  *  @ingroup pasaho_if_constants
918  *  @{
919  *
920  *  @name PA/SA/HO Header Bitmap Bit Definitions For Second Generation PASS
921  *  Bitmap definition of the protocol header bitmask at the long info  For Second Generation PASS. 
922  */ 
923 /*@{*/
924 #define PASAHO_HDR_BITMASK_MAC_GEN2     (1 << 0)     /**< MAC present (PASS Gen2)*/
925 #define PASAHO_HDR_BITMASK_VLAN_GEN2    (1 << 1)     /**< VLAN present (PASS Gen2)*/
926 #define PASAHO_HDR_BITMASK_MPLS_GEN2    (1 << 2)     /**< MPLS present (PASS Gen2)*/
927 #define PASAHO_HDR_BITMASK_802_3_GEN2   (1 << 3)     /**< 802.3 present (PASS Gen2)*/
928 #define PASAHO_HDR_BITMASK_PPPoE_GEN2   (1 << 4)     /**< PPPoE present (PASS Gen2)*/
929 #define PASAHO_HDR_BITMASK_IPv4_GEN2    (1 << 5)     /**< IPv4 present (PASS Gen2)*/
930 #define PASAHO_HDR_BITMASK_IPv6_GEN2    (1 << 6)     /**< IPv6 present (PASS Gen2)*/
931 #define PASAHO_HDR_BITMASK_IP_OPTS_GEN2 (1 << 7)     /**< IPv4 options or IPv6 extension headers present (PASS Gen2)*/
932 #define PASAHO_HDR_BITMASK_ESP_GEN2     (1 << 8)     /**< IPSEC/ESP present (PASS Gen2)*/
933 #define PASAHO_HDR_BITMASK_AH_GEN2      (1 << 9)     /**< IPSEC/AH present (PASS Gen2)*/
934 #define PASAHO_HDR_BITMASK_SCTP_GEN2    (1 << 10)    /**< SCTP present (PASS Gen2)*/
935 #define PASAHO_HDR_BITMASK_UDP_GEN2     (1 << 11)    /**< UDP present (PASS Gen2)*/
936 #define PASAHO_HDR_BITMASK_UDPLITE_GEN2 (1 << 11)    /**< UDPLITE present (PASS Gen2)*/
937 #define PASAHO_HDR_BITMASK_TCP_GEN2     (1 << 12)    /**< TCP present (PASS Gen2)*/
938 #define PASAHO_HDR_BITMASK_GTPU_GEN2    (1 << 13)     /**< GTPU present (PASS Gen2)*/
939 #define PASAHO_HDR_BITMASK_CUSTOM_GEN2  (1 << 14)    /**< Custom header present (PASS Gen2)*/
940 #define PASAHO_HDR_BITMASK_IPSEC_NAT_T_GEN2   (1 << 15)     /**< IPSEC NAT-T present (PASS Gen2)*/
942 /*@}*/
943 /** @} */
945 /* Header bitmask bits */
946 /**
947  *  @defgroup pasahoHeaderBitmap  PA/SA/HO Header Bitmap Bit Definitions
948  *  @ingroup pasaho_if_constants
949  *  @{
950  *
951  *  @name PA/SA/HO Header Bitmap Bit Definitions
952  *  Bitmap definition of the protocol header bitmask at the long info. 
953  */ 
954 /*@{*/
955 #ifdef NSS_GEN2
956 #define PASAHO_HDR_BITMASK_MAC         PASAHO_HDR_BITMASK_MAC_GEN2          /**< MAC present */
957 #define PASAHO_HDR_BITMASK_VLAN        PASAHO_HDR_BITMASK_VLAN_GEN2         /**< VLAN present */
958 #define PASAHO_HDR_BITMASK_MPLS        PASAHO_HDR_BITMASK_MPLS_GEN2         /**< MPLS present */
959 #define PASAHO_HDR_BITMASK_802_3       PASAHO_HDR_BITMASK_802_3_GEN2        /**< 802.3 present */
960 #define PASAHO_HDR_BITMASK_PPPoE       PASAHO_HDR_BITMASK_PPPoE_GEN2        /**< PPPoE present */
961 #define PASAHO_HDR_BITMASK_IPv4        PASAHO_HDR_BITMASK_IPv4_GEN2         /**< IPv4 present */
962 #define PASAHO_HDR_BITMASK_IPv6        PASAHO_HDR_BITMASK_IPv6_GEN2         /**< IPv6 present */
963 #define PASAHO_HDR_BITMASK_IP_OPTS     PASAHO_HDR_BITMASK_IP_OPTS_GEN2      /**< IPv4 options or IPv6 extension headers present */
964 #define PASAHO_HDR_BITMASK_ESP         PASAHO_HDR_BITMASK_ESP_GEN2          /**< IPSEC/ESP present */
965 #define PASAHO_HDR_BITMASK_AH          PASAHO_HDR_BITMASK_AH_GEN2           /**< IPSEC/AH present */
966 #define PASAHO_HDR_BITMASK_SCTP        PASAHO_HDR_BITMASK_SCTP_GEN2         /**< SCTP present */
967 #define PASAHO_HDR_BITMASK_UDP         PASAHO_HDR_BITMASK_UDP_GEN2          /**< UDP present */
968 #define PASAHO_HDR_BITMASK_UDPLITE     PASAHO_HDR_BITMASK_UDPLITE_GEN2      /**< UDPLITE present */
969 #define PASAHO_HDR_BITMASK_TCP         PASAHO_HDR_BITMASK_TCP_GEN2          /**< TCP present */
970 #define PASAHO_HDR_BITMASK_GTPU        PASAHO_HDR_BITMASK_GTPU_GEN2         /**< GTPU present */
971 #define PASAHO_HDR_BITMASK_CUSTOM      PASAHO_HDR_BITMASK_CUSTOM_GEN2       /**< Custom header present */
972 #define PASAHO_HDR_BITMASK_IPSEC_NAT_T PASAHO_HDR_BITMASK_IPSEC_NAT_T_GEN2  /**< IPSEC NAT-T present */
973 #else
974 #define PASAHO_HDR_BITMASK_MAC         PASAHO_HDR_BITMASK_MAC_GEN1          /**< MAC present */
975 #define PASAHO_HDR_BITMASK_VLAN        PASAHO_HDR_BITMASK_VLAN_GEN1         /**< VLAN present */
976 #define PASAHO_HDR_BITMASK_MPLS        PASAHO_HDR_BITMASK_MPLS_GEN1         /**< MPLS present */
977 #define PASAHO_HDR_BITMASK_IP          PASAHO_HDR_BITMASK_IP_GEN1           /**< IP present */
978 #define PASAHO_HDR_BITMASK_ESP         PASAHO_HDR_BITMASK_ESP_GEN1          /**< IPSEC/ESP present */
979 #define PASAHO_HDR_BITMASK_AH          PASAHO_HDR_BITMASK_AH_GEN1           /**< IPSEC/AH present */
980 #define PASAHO_HDR_BITMASK_UDP         PASAHO_HDR_BITMASK_UDP_GEN1          /**< UDP present */
981 #define PASAHO_HDR_BITMASK_UDPLITE     PASAHO_HDR_BITMASK_UDPLITE_GEN1      /**< UDPLITE present */
982 #define PASAHO_HDR_BITMASK_TCP         PASAHO_HDR_BITMASK_TCP_GEN1          /**< TCP present */
983 #define PASAHO_HDR_BITMASK_GTPU        PASAHO_HDR_BITMASK_GTPU_GEN1         /**< GTPU present */
984 #define PASAHO_HDR_BITMASK_CUSTOM      PASAHO_HDR_BITMASK_CUSTOM_GEN1       /**< Custom header present */
986 #define PASAHO_HDR_BITMASK2_SCTP        PASAHO_HDR_BITMASK2_SCTP_GEN1       /**< SCTP present */
987 #define PASAHO_HDR_BITMASK2_IPSEC_NAT_T PASAHO_HDR_BITMASK2_IPSEC_NAT_T_GEN1/**< IPSEC NAT-T present */
988 #define PASAHO_HDR_BITMASK2_PPPoE       PASAHO_HDR_BITMASK2_PPPoE_GEN1      /**< PPPoE present */
989 #define PASAHO_HDR_BITMASK2_802_3       PASAHO_HDR_BITMASK2_802_3_GEN1      /**< 802.3 present */
990 #endif
992 /*@}*/
993 /** @} */
998 /* Next Route command */
999 /**
1000  *  @defgroup pasahoNrDestGen1  PA/SA/HO Destination Types at NextRoute Command of First Generation PASS
1001  *  @ingroup pasaho_if_constants
1002  *  @{
1003  *
1004  *  @name PA/SA/HO Destination Types at NextRoute Command of First Generation PASS
1005  *  Bitmap definition of the destination type at the nextRoute command of First Generation PASS. 
1006  */ 
1007 /*@{*/
1008 #define PASAHO_NR_DEST_PKTDMA_GEN1      6            /**< NextRoute Destination: PKTDMA (PASS Gen1)*/
1009 #define PASAHO_NR_DEST_ETH_GEN1         7            /**< NextRoute Destination: Ethernet Port (PASS Gen1)*/
1010 #define PASAHO_NR_DEST_SRIO_GEN1        0            /**< NextRoute Destination: SRIO (PASS Gen1)*/
1012 /*@}*/
1013 /** @} */
1015 /**
1016  *  @defgroup pasahoNrDestGen2  PA/SA/HO Destination Types at NextRoute Command of Second Generation PASS
1017  *  @ingroup pasaho_if_constants
1018  *  @{
1019  *
1020  *  @name PA/SA/HO Destination Types at NextRoute Command of Second Generation PASS
1021  *  Bitmap definition of the destination type at the nextRoute command of Second Generation PASS. 
1022  */ 
1023 /*@{*/
1024 #define PASAHO_NR_DEST_PKTDMA_GEN2      0            /**< NextRoute Destination: PKTDMA (PASS Gen2)*/
1025 #define PASAHO_NR_DEST_ETH_GEN2         2            /**< NextRoute Destination: Ethernet Port (PASS Gen2)*/
1026 #define PASAHO_NR_DEST_SRIO_GEN2        7            /**< NextRoute Destination: SRIO (PASS Gen2)*/
1028 /*@}*/
1029 /** @} */
1031 /**
1032  *  @defgroup pasahoNrDest  PA/SA/HO Destination Types at NextRoute Command
1033  *  @ingroup pasaho_if_constants
1034  *  @{
1035  *
1036  *  @name PA/SA/HO Destination Types at NextRoute Command
1037  *  Bitmap definition of the destination type at the nextRoute command
1038  */ 
1039 #ifdef NSS_GEN2
1040 #define PASAHO_NR_DEST_PKTDMA      PASAHO_NR_DEST_PKTDMA_GEN2   /**< NextRoute Destination: PKTDMA */
1041 #define PASAHO_NR_DEST_ETH         PASAHO_NR_DEST_ETH_GEN2      /**< NextRoute Destination: Ethernet Port */
1042 #define PASAHO_NR_DEST_SRIO        PASAHO_NR_DEST_SRIO_GEN2     /**< NextRoute Destination: SRIO */
1043 #else
1044 #define PASAHO_NR_DEST_PKTDMA      PASAHO_NR_DEST_PKTDMA_GEN1   /**< NextRoute Destination: PKTDMA */
1045 #define PASAHO_NR_DEST_ETH         PASAHO_NR_DEST_ETH_GEN1      /**< NextRoute Destination: Ethernet Port */
1046 #define PASAHO_NR_DEST_SRIO        PASAHO_NR_DEST_SRIO_GEN1     /**< NextRoute Destination: SRIO */
1047 #endif
1049 /*@}*/
1050 /** @} */
1052 /**
1053  *  @ingroup pasaho_if_structures
1054  *  @brief  pasahoNextRoute_t defines the next route command. The command structure is defined as 32 bit
1055  *          values to work with the hardware regardless of the device endianness.
1056  *
1057  *  @details 
1058  */
1060 typedef struct pasahoNextRoute_s  {
1061     uint32_t  word0;          /**< Contains the next route command information. @ref PASAHO_next_route_command_macros */
1062     uint32_t  swInfo0;        /**< Information placed into returned descriptor. Used if next destination is the host */
1063     uint32_t  swInfo1;        /**< Information placed into returned descriptor. Used if next destination is the host */
1064     uint32_t  word1;          /**< Contains the optional information such as pktType for SRIO. @ref PASAHO_next_route_command_macros */
1065 } pasahoNextRoute_t;
1067 /** 
1068  *  @defgroup PASAHO_next_route_command_macros  PASAHO Next Route Command Macros
1069  *  @ingroup pasaho_if_macros
1070  *  @{
1071  *  @name PASAHO Next Route Command Macros
1072  *  Macros used by the PASAHO Next Route Command
1073  *  
1074  */
1075 /*@{*/
1077 #define PASAHO_SET_N(x,v)       PASAHO_SET_BITFIELD((x)->word0, (v), 28, 1)    /**< Sets the N bit which indicates the next command should be executed prior to the route command */
1078 #define PASAHO_SET_E(x,v)       PASAHO_SET_BITFIELD((x)->word0, (v), 27, 1)    /**< Sets the E bit which indicates the extened parameters (packet type and/or control flags) are present for SRIO */
1079 #define PASAHO_SET_DEST(x,v)    PASAHO_SET_BITFIELD((x)->word0, (v), 24, 3)    /**< Sets the destination of the route defined at @ref pktDest */
1080 #define PASAHO_SET_FLOW(x,v)    PASAHO_SET_BITFIELD((x)->word0, (v), 16, 8)    /**< Specifies the flow to use for packets sent to the host */
1081 #define PASAHO_SET_QUEUE(x,v)   PASAHO_SET_BITFIELD((x)->word0, (v), 0,  16)   /**< Specifies the queue to use for packets send to the host */
1082 #define PASAHO_SET_PKTTYPE(x,v) PASAHO_SET_BITFIELD((x)->word1, (v), 24, 8)    /**< Specifies the packet type to use for packets send to the SRIO */
1083 #define PASAHO_SET_TX_PADDING(x,v) PASAHO_SET_BITFIELD((x)->word1, (v), 0, 1)  /**< Sets the tx padding bit which indicates PASS should check padding condition and provide L2 zero padding if required */
1084 #define PASAHO_SET_TX_STATS(x,v) PASAHO_SET_BITFIELD((x)->word1, (v), 1, 1)    /**< Sets the tx stats bit which indicates PASS should increment the user statistics chain pointed by the user statistics index */
1085 #define PASAHO_SET_RPT_TX_TIMESTAMP(x,v) PASAHO_SET_BITFIELD((x)->word1, (v), 2, 1)  /**< Sets the report tx timestamp bit which indicates swInfo0 is required to configure CPTS Tx timestamp report */
1086 #define PASAHO_SET_USR_STATS_INDEX(x,v) PASAHO_SET_BITFIELD((x)->word1, (v), 8, 16) /**< Specifies index of the first user-defined statistics to be updated */
1088 /*@}*/ /* PASAHO_next_route_command_macros */
1089 /** @}*/ /* @name PASAHO Next Route Command Macros */
1092 /* Compute checksum command */
1093 /**
1094  *  @ingroup pasaho_if_structures
1095  *  @brief  pasahoComChkCrc_t defines the checksum and CRC generation command. The command structure is defined as
1096  *          32 bit values to wrok with the hardware regardless of the device endianness.
1097  *
1098  *  @details 
1099  */
1101 typedef struct pasahoComChkCrc_s  {
1102     uint32_t  word0;        /**<  @ref PASAHO_chksum_command_macros */
1103     uint32_t  word1;        /**<  @ref PASAHO_chksum_command_macros */
1104     uint32_t  word2;        /**<  @ref PASAHO_chksum_command_macros */
1106 } pasahoComChkCrc_t;
1108 /** 
1109  *  @defgroup PASAHO_chksum_command_macros  PASAHO Checksum/CRC Command Macros
1110  *  @ingroup pasaho_if_macros
1111  *  @{
1112  *  @name PASAHO Checksum/CRC Command Macros
1113  *  Macros used by the ASAHO Checksum/CRC Command 
1114  */
1115 /*@{*/
1117 #define PASAHO_CHKCRC_SET_NEG0(x,v)        PASAHO_SET_BITFIELD((x)->word0, (v), 23, 1)           /**< Sets the negative 0 flag - if set a checksum computed as 0 will be sent as 0xffff */
1118 #define PASAHO_CHKCRC_SET_CTRL(x,v)        PASAHO_SET_BITFIELD((x)->word0, (v), 16, 4)           /**< Sets the optional flags of the CRC/Checksum command */
1119 #define PASAHO_CHKCRC_SET_CRCSIZE(x,v)     PASAHO_SET_BITFIELD((x)->word0, (v), 8,  8)           /**< Sets the size of the crc in bytes (PASS Gen2 only) */
1120 #define PASAHO_CHKCRC_SET_START(x,v)       PASAHO_SET_BITFIELD((x)->word0, (v), 0,  8)           /**< Sets the start offset of the checksum/crc */
1121 #define PASAHO_CHKCRC_SET_LEN(x,v)         PASAHO_SET_BITFIELD((x)->word1, (v), 16, 16)          /**< Sets the length of the checksum/crc */
1122 #define PASAHO_CHKCRC_SET_RESULT_OFF(x,v)  PASAHO_SET_BITFIELD((x)->word1, (v), 0,  16)          /**< Sets the offset to where to paste the checksum/crc into the packet */
1123 #define PASAHO_CHKCRC_SET_INITVAL(x,v)     PASAHO_SET_BITFIELD((x)->word2, (v), 16, 16)          /**< Sets the initial value of the 16-bit checksum */
1124 #define PASAHO_CHKCRC_SET_INITVAL32(x,v)   (x)->word2 = (v)                                      /**< Sets the initial value of the 32-bit crc (PASS Gen2 only)*/
1126 /*@}*/ /* @name PASAHO Checksum/CRC Command Macros */
1127 /** @}*/ /* PASAHO_chksum_command_macros */
1130 /* Blind patch command */
1131 /**
1132  *  @ingroup pasaho_if_structures
1133  *  @brief  pasahoComBlindPatch_t defines the blind patch command. The command structure is defined as
1134  *          32 bit values to work with the hardware regardless of the device endianness.
1135  *
1136  *  @details 
1137  */
1139 #define PASAHO_BPATCH_MAX_PATCH_WORDS   4
1140 typedef struct pasahoComBlindPatch_s  {
1141     uint32_t   word0;                                   /**<  @ref PASAHO_blind_patch_command_macros */
1142     uint32_t   patch[PASAHO_BPATCH_MAX_PATCH_WORDS];    /**<  @ref PASAHO_blind_patch_command_macros */
1143     
1144 } pasahoComBlindPatch_t;
1146 /** 
1147  *  @defgroup PASAHO_blind_patch_command_macros  PASAHO Blind Patch Command Macros
1148  *  @ingroup pasaho_if_macros
1149  *  @{
1150  *  @name PASAHO Blind Patch Command Macros
1151  *  Macros used by the PASAHO Blind Patch Command
1152  */
1154 #define PASAHO_BPATCH_SET_PATCH_NBYTES(x,v)    \
1155                           PASAHO_SET_BITFIELD((x)->word0, v, 24,  5)
1156 /**< Sets the number of bytes to patch */
1157                           
1158 #define PASAHO_BPATCH_SET_PATCH_CMDSIZE(x,v)   \
1159                           PASAHO_SET_BITFIELD((x)->word0, v, 20, 4)
1160 /**< Sets the size of the command in 32 bit word units */
1161                           
1162 #define PASAHO_BPATCH_SET_OVERWRITE(x,v)       \
1163                           PASAHO_SET_BITFIELD((x)->word0, v, 19, 1)
1164 /**< Sets the overwrite flag. If set the patch will overwrite existing packet data, 
1165      otherwise data may be inserted */  
1166      
1167 #define PASAHO_BPATCH_SET_DELETE(x,v)         \
1168                           PASAHO_SET_BITFIELD((x)->word0, v, 18, 1)
1169 /**< Sets the delete flag. If set, no data will be inserted */                          
1170                              
1171                           
1172 #define PASAHO_BPATCH_SET_OFFSET(x,v)         \
1173                           PASAHO_SET_BITFIELD((x)->word0, v, 0,  16)
1174 /**< Sets the offset to the start of the patch */                          
1175                           
1176 #define PASAHO_BPATCH_SET_PATCH_BYTE(x, byteNum, byte)  \
1177                                 PASAHO_SET_BITFIELD((x)->patch[(byteNum) >> 2], byte, ((3 - (byteNum & 0x3)) << 3), 8)
1178 /**< Sets the data to patch */                                                   
1179                                 
1180 /*@}*/ /* @name PASAHO Blind Patch Command Macros */
1181 /** @}*/ /* PASAHO_blind_patch_command_macros */        
1183 /* Report Timestamp command */
1184 /**
1185  *  @ingroup pasaho_if_structures
1186  *  @brief  pasahoReportTimestamp_t defines the report timestamp command. The command structure is defined as 32 bit
1187  *          values to work with the hardware regardless of the device endianness.
1188  *
1189  *  @details 
1190  */
1192 typedef struct pasahoReportTimestamp_s  {
1193     uint32_t  word0;          /**< Contains the report timestamp command information. @ref PASAHO_report_timestamp_command_macros */
1194     uint32_t  swInfo0;        /**< Information placed into returned descriptor of the reporting packet.  */
1195 } pasahoReportTimestamp_t;
1197 /** 
1198  *  @defgroup PASAHO_report_timestamp_command_macros PASAHO Report Timestamp Command Macros
1199  *  @ingroup pasaho_if_macros
1200  *  @{
1201  *  @name PASAHO Report Timestamp Command Macros
1202  *  Macros used by the PASAHO Report Timestamp Command
1203  *  
1204  */
1205 /*@{*/
1206 #define PASAHO_SET_REPORT_FLOW(x,v)    PASAHO_SET_BITFIELD((x)->word0, (v), 16, 8)    /**< Specifies the flow to use for report packets sent to the host */
1207 #define PASAHO_SET_REPORT_QUEUE(x,v)   PASAHO_SET_BITFIELD((x)->word0, (v), 0,  16)   /**< Specifies the queue to use for report packets send to the host */
1209 /*@}*/ /* @name PASAHO Report Timestamp Command Macros */
1210 /** @}*/ /* PASAHO_report_timestamp_command_macros */        
1212 /* IP Fragmentation command */
1213 /**
1214  *  @ingroup pasaho_if_structures
1215  *  @brief  pasahoIpFrag_t defines the IP Fragmentation command. The command structure is defined as 32 bit
1216  *          values to work with the hardware regardless of the device endianness.
1217  *
1218  *  @details 
1219  */
1221 typedef struct pasahoIpFrag_s  {
1222     uint32_t  word0;          /**< Contains the ip fragmentation command information. @ref PASAHO_ip_frag_command_macros */
1223 } pasahoIpFrag_t;
1225 /** 
1226  *  @defgroup PASAHO_ip_frag_command_macros  PASAHO IP Fragmentation Command Macros
1227  *  @ingroup pasaho_if_macros
1228  *  @{
1229  *  @name PASAHO IP Fragmentation Command Macros
1230  *  Macros used by the PASAHO IP Fragmentation Command
1231  *  
1232  */
1233 /*@{*/
1235 #define PASAHO_SET_SUB_CODE_IP_FRAG(x) PASAHO_SET_BITFIELD((x)->word0, PASAHO_SUB_CMD_IP_FRAG, 24, 5)    /**< Set sub-command code to indicate IP Fragmentation command */
1236 #define PASAHO_SET_SUB_CODE(x,v)  PASAHO_SET_BITFIELD((x)->word0, (v), 24, 5)  /**< Specifies the sub-command code */
1237 #define PASAHO_SET_IP_OFFSET(x,v) PASAHO_SET_BITFIELD((x)->word0, (v), 16, 8)  /**< Specifies the offset to the IP header to be fragmented */
1238 #define PASAHO_SET_MTU_SIZE(x,v)  PASAHO_SET_BITFIELD((x)->word0, (v), 0,  16) /**< Specifies the MTU size */
1240 /*@}*/ /* @name PASAHO IP Fragmentation Command Macros */
1241 /** @}*/ /* PASAHO_ip_frag_command_macros */
1244 /* Patch Message Length command */
1245 /**
1246  *  @ingroup pasaho_if_structures
1247  *  @brief  pasahoPatchMsgLen_t defines the message length patching command. The command structure is defined as 32 bit
1248  *          values to work with the hardware regardless of the device endianness.
1249  *
1250  *  @details 
1251  */
1253 typedef struct pasahoPatchMsgLen_s  {
1254     uint32_t  word0;          /**< Contains the message length patching command information. @ref PASAHO_patch_msg_len_command_macros */
1255 } pasahoPatchMsgLen_t;
1257 /** 
1258  *  @defgroup PASAHO_patch_msg_len_command_macros  PASAHO Message Length Patching Command Macros
1259  *  @ingroup pasaho_if_macros
1260  *  @{
1261  *  @name PASAHO Message Length Patching Command Macros
1262  *  Macros used by the PASAHO Message Length Patching Command
1263  *  
1264  */
1265 /*@{*/
1267 #define PASAHO_SET_SUB_CODE_PATCH_MSG_LEN(x) PASAHO_SET_BITFIELD((x)->word0, PASAHO_SUB_CMD_PATCH_MSG_LEN, 24, 5)    /**< Set sub-command code to indicate Message Length Patching command */
1268 #define PASAHO_SET_MSGLEN_OFFSET(x,v) PASAHO_SET_BITFIELD((x)->word0, (v), 16, 8)  /**< Specifies the offset to the message length field to be patched */
1269 #define PASAHO_SET_MSGLEN_SIZE(x,v) PASAHO_SET_BITFIELD((x)->word0, (v), 15,  1)   /**< Specifies the size of the length field (0: 16-bit; 1: 32-bit) */
1270 #define PASAHO_SET_MSGLEN(x,v)  PASAHO_SET_BITFIELD((x)->word0, (v), 0,  15)       /**< Specifies the message length excluding the IP header and payload length */
1272 /*@}*/ /* @name PASAHO Message Length Patching Command Macros */
1273 /** @}*/ /* PASAHO_patch_msg_len_command_macros */
1275 /* Compute checksum command */
1276 /**
1277  *  @ingroup pasaho_if_structures
1278  *  @brief  pasahoEfOp_t defines the egress flow operation command which is used to instruct PASS to 
1279  *          perform optional flow cache lookup and egress packet modification according to the associated
1280  *          egress flow records. The command structure is defined as 32 bit values to wrok with the hardware 
1281  *          regardless of the device endianness.
1282  *
1283  *  @details 
1284  */
1286 typedef struct pasahoEfOp_s  {
1287     uint32_t  word0;        /**<  @ref PASAHO_ef_op_command_macros */
1288     uint32_t  word1;        /**<  @ref PASAHO_ef_op_command_macros */
1289     uint32_t  word2;        /**<  @ref PASAHO_ef_op_command_macros */
1290     uint32_t  word3;        /**<  @ref PASAHO_ef_op_command_macros */
1291     uint32_t  word4;        /**<  @ref PASAHO_ef_op_command_macros */
1292     uint32_t  word5;        /**<  @ref PASAHO_ef_op_command_macros */
1294 } pasahoComEfOp_t;
1296 /**
1297  *  @defgroup pasahoEfOpCtrlBitmap  PA/SA/HO Egress Flow Opertaion Control Bitmap Bit Definitions
1298  *  @ingroup pasaho_if_constants
1299  *  @{
1300  *
1301  *  @name PA/SA/HO Egress Flow Opertaion Control Bitmap Bit Definitions
1302  *  Bitmap definition of the control bitmap at the Egress Flow operation info. 
1303  */ 
1304 /*@{*/
1306 #define PASAHO_HDR_EF_OP_CTRL_FC           (1 << 15)    /**< Enable Flow Cache lookup */
1307 #define PASAHO_HDR_EF_OP_CTRL_LVL4_REC     (1 << 7)     /**< Level 4 record prespent */
1308 #define PASAHO_HDR_EF_OP_CTRL_LVL3_REC     (1 << 6)     /**< Level 3 record prespent */
1309 #define PASAHO_HDR_EF_OP_CTRL_LVL2_REC     (1 << 5)     /**< Level 2 record prespent */
1310 #define PASAHO_HDR_EF_OP_CTRL_LVL1_REC     (1 << 4)     /**< Level 1 record prespent */
1312 /*@}*/
1313 /** @} */
1316 /** 
1317  *  @defgroup PASAHO_ef_op_command_macros  PASAHO Egress Flow Operation Command Macros
1318  *  @ingroup pasaho_if_macros
1319  *  @{
1320  *  @name PASAHO Egress Flow Operation Command Macros
1321  *  Macros used by the PASAHO Egress Flow Operation Command 
1322  */
1323 /*@{*/
1324 #define PASAHO_EF_OP_SET_CTRL(x,v)          PASAHO_SET_BITFIELD((x)->word0,(v), 8, 16)           /**< Sets the control flags of the Flow Cache operation command */
1325 #define PASAHO_EF_OP_SET_CTRL_FC(x,v)       PASAHO_SET_BITFIELD((x)->word0,(v), 23, 1)           /**< Enable/Disable Flow Cache lookup */
1326 #define PASAHO_EF_OP_SET_CTRL_LVL4(x,v)     PASAHO_SET_BITFIELD((x)->word0,(v), 15, 1)           /**< Enable/Disable Level 4 Egress Flow record */
1327 #define PASAHO_EF_OP_SET_CTRL_LVL3(x,v)     PASAHO_SET_BITFIELD((x)->word0,(v), 14, 1)           /**< Enable/Disable Level 3 Egress Flow record */
1328 #define PASAHO_EF_OP_SET_CTRL_LVL2(x,v)     PASAHO_SET_BITFIELD((x)->word0,(v), 13, 1)           /**< Enable/Disable Level 2 Egress Flow record */
1329 #define PASAHO_EF_OP_SET_CTRL_LVL1(x,v)     PASAHO_SET_BITFIELD((x)->word0,(v), 12, 1)           /**< Enable/Disable Level 1 Egress Flow record */
1331 #define PASAHO_EF_OP_SET_L2_OFFSET(x, v)    PASAHO_SET_BITFIELD((x)->word1,(v),8,8)              /**< Set the l2 offset */
1332 #define PASAHO_EF_OP_SET_L3_OFFSET2(x, v)   PASAHO_SET_BITFIELD((x)->word1,(v),0,8)              /**< Set the l3 offset for inner or fisrt IP */
1333 #define PASAHO_EF_OP_SET_L3_OFFSET(x, v)    PASAHO_SET_BITFIELD((x)->word2,(v),24,8)             /**< Set the l3 offset for outer or fisrt IP */
1334 #define PASAHO_EF_OP_SET_IPSEC_OFFSET(x, v) PASAHO_SET_BITFIELD((x)->word2,(v),0, 8)             /**< Set the IPSEC offset if the IPSEC header exists in the packet */
1335 #define PASAHO_EF_OP_SET_END_OFFSET(x, v)   PASAHO_SET_BITFIELD((x)->word1,(v),16,16)            /**< Set the end offset as end of L4 (UDP/UDPLite/TCP) payload */
1337 #define PASAHO_EF_OP_SET_LVL1_REC(x, v)     PASAHO_SET_BITFIELD((x)->word3,(v),24, 8)            /**< Set the index of Egress Flow level 1 record */
1338 #define PASAHO_EF_OP_SET_LVL2_REC(x, v)     PASAHO_SET_BITFIELD((x)->word3,(v),16, 8)            /**< Set the index of Egress Flow level 2 record */
1339 #define PASAHO_EF_OP_SET_LVL3_REC(x, v)     PASAHO_SET_BITFIELD((x)->word3,(v), 8, 8)            /**< Set the index of Egress Flow level 3 record */
1340 #define PASAHO_EF_OP_SET_LVL4_REC(x, v)     PASAHO_SET_BITFIELD((x)->word3,(v), 0, 8)            /**< Set the index of Egress Flow level 4 record */
1342 /*@}*/
1343 /** @} */
1346 /* EMAC CRC Verify command */
1347 /**
1348  *  @ingroup pasaho_if_structures
1349  *  @brief  pasahoEmacCrcVerify_t defines the Ethernet CRC Verify command. The command structure is defined as 32 bit
1350  *          values to work with the hardware regardless of the device endianness.
1351  *
1352  *  @details 
1353  */
1355 typedef struct pasahoEmacCrcVerify_s  {
1356     uint32_t  word0;          /**< Contains the Ethernet CRC Verify command information. @ref PASAHO_emac_crc_verify_command_macros */
1357 } pasahoEmacCrcVerify_t;
1359 /** 
1360  *  @defgroup PASAHO_emac_crc_verify_command_macros  PASAHO EMAC CRC Verify Command Macros
1361  *  @ingroup pasaho_if_macros
1362  *  @{
1363  *  @name PASAHO EMAC CRC Verify Command Macros
1364  *  Macros used by the PASAHO EMAC CRC Verify Command
1365  *  
1366  */
1367 /*@{*/
1369 #define PASAHO_SET_SUB_CODE_EMAC_CRC_VERIFY(x) PASAHO_SET_BITFIELD((x)->word0, PASAHO_SUB_CMD_EMAC_CRC_VERIFY, 24, 5)    /**< Set sub-command code to indicate EMAC CRC Verify command */
1370 #define PASAHO_SET_EMACPORT(x,v) PASAHO_SET_BITFIELD((x)->word0, (v), 20, 4)    /**< Specifies the one-based destination EMAC port number 
1371                                                                                      where 0 indicates standard ethernet switch forwarding */
1373 /*@}*/ /* @name PASAHO EMAC CRC Verify Command Macros */
1374 /** @}*/ /* PASAHO_emac_crc_verify_command_macros */
1376 /* Insert Message time command */
1377 /**
1378  *  @ingroup pasaho_if_structures
1379  *  @brief  pasahoInsMsgTime_t defines the message time insert command. The command structure is defined as 32 bit
1380  *          values to work with the hardware regardless of the device endianness.
1381  *
1382  *  @details 
1383  */
1385 typedef struct pasahoInsMsgTime_s  {
1386     uint32_t  word0;          /**< Contains the message time patching command information. @ref PASAHO_insert_msg_time_command_macros */
1387 } pasahoInsMsgTime_t;
1389 /** 
1390  *  @defgroup PASAHO_insert_msg_time_command_macros  PASAHO Message Time Insert Command Macros
1391  *  @ingroup pasaho_if_macros
1392  *  @{
1393  *  @name PASAHO Message Time Insert Command Macros
1394  *  Macros used by the PASAHO Message Time Insert Command
1395  *  
1396  */
1397 /*@{*/
1399 #define PASAHO_SET_SUB_CODE_INS_MSG_TIME(x) PASAHO_SET_BITFIELD((x)->word0, PASAHO_SUB_CMD_INS_TIME, 24, 5)    /**< Set sub-command code to indicate Message Time Insert command */
1400 #define PASAHO_SET_INS_OFFSET_MSG_TIME(x,offset)   PASAHO_SET_BITFIELD((x)->word0, offset, 0, 16)             /**< Set the offset from start of packet to insert the 8 byte time */
1402 /*@}*/ /* @name PASAHO Message Time Insert Command Macros */
1403 /** @}*/ /* PASAHO_insert_msg_time_command_macros */
1405 /* Insert Message Count command */
1406 /**
1407  *  @ingroup pasaho_if_structures
1408  *  @brief  pasahoInsMsgCount_t defines the message count insert command. The command structure is defined as 32 bit
1409  *          values to work with the hardware regardless of the device endianness.
1410  *
1411  *  @details 
1412  */
1414 typedef struct pasahoInsMsgCount_s  {
1415     uint32_t  word0;          /**< Contains the message count patching command information. @ref PASAHO_insert_msg_count_command_macros */
1416     uint32_t  word1;          /**< Contains the message count patching command information. @ref PASAHO_insert_msg_count_command_macros */
1417 } pasahoInsMsgCount_t;
1419 /** 
1420  *  @defgroup PASAHO_insert_msg_count_command_macros  PASAHO Message Count Insert Command Macros
1421  *  @ingroup pasaho_if_macros
1422  *  @{
1423  *  @name PASAHO Message Count Insert Command Macros
1424  *  Macros used by the PASAHO Message Count Insert Command
1425  *  
1426  */
1427 /*@{*/
1429 #define PASAHO_SET_SUB_CODE_INS_MSG_COUNT(x)        PASAHO_SET_BITFIELD((x)->word0, PASAHO_SUB_CMD_INS_COUNT, 24, 5)    /**< Set sub-command code to indicate Message Count Insert command */
1430 #define PASAHO_SET_INS_OFFSET_MSG_COUNT(x,offset)   PASAHO_SET_BITFIELD((x)->word0, offset, 0, 16)                      /**< Set the offset from start of packet to insert the 4 byte count */
1431 #define PASAHO_SET_COUNTER_INDEX_FOR_MSG_COUNT(x,offset)   PASAHO_SET_BITFIELD((x)->word1, offset, 16, 16)              /**< Set the counter index to read from, to insert the 4 byte count */
1433 /*@}*/ /* @name PASAHO Message Count Insert Command Macros */
1434 /** @}*/ /* PASAHO_insert_msg_count_command_macros */
1437 #ifdef __cplusplus
1439 #endif
1441 #endif  /* _PASAHO_H */