1 /*
2  * Copyright (c) 2016, Intel Corporation
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  *  * Redistributions of source code must retain the above copyright notice,
8  *    this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *  * Neither the name of Intel Corporation nor the names of its contributors
13  *    may be used to endorse or promote products derived from this software
14  *    without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /**
30  * \file
31  * \brief SOM runtime: data structures.
32  *
33  * Data structures used for SOM operations.
34  */
35 
36 #ifndef SOM_OPERATION_H
37 #define SOM_OPERATION_H
38 
39 #include "ue2common.h"
40 
41 #define SOM_EXTERNAL_CALLBACK_REL                     1
42 #define SOM_INTERNAL_LOC_SET                          2
43 #define SOM_INTERNAL_LOC_SET_IF_UNSET                 3
44 #define SOM_INTERNAL_LOC_SET_IF_WRITABLE              4
45 #define SOM_INTERNAL_LOC_SET_REV_NFA                  5
46 #define SOM_INTERNAL_LOC_SET_REV_NFA_IF_UNSET         6
47 #define SOM_INTERNAL_LOC_SET_REV_NFA_IF_WRITABLE      7
48 #define SOM_INTERNAL_LOC_COPY                         8
49 #define SOM_INTERNAL_LOC_COPY_IF_WRITABLE             9
50 #define SOM_INTERNAL_LOC_MAKE_WRITABLE               10
51 #define SOM_EXTERNAL_CALLBACK_STORED                 11
52 #define SOM_EXTERNAL_CALLBACK_ABS                    12
53 #define SOM_EXTERNAL_CALLBACK_REV_NFA                13
54 #define SOM_INTERNAL_LOC_SET_FROM                    14
55 #define SOM_INTERNAL_LOC_SET_FROM_IF_WRITABLE        15
56 
57 struct som_operation {
58     /** \brief Report type, from the definitions above. */
59     u8 type;
60 
61     /* \brief SOM loc to modify. */
62     u32 onmatch;
63 
64     union {
65         /** \brief SOM distance value, use varies according to type.
66          *
67          *  - for SOM_EXTERNAL_CALLBACK_REL, from-offset is this many bytes
68          *    before the to-offset.
69          *  - for SOM_EXTERNAL_CALLBACK_ABS, set from-offset to this value.
70          *  - for SOM_INTERNAL_LOC_COPY*, som location read_from.
71          */
72         u64a somDistance;
73 
74         /** \brief Index of the reverse nfa.
75          *
76          * Used by SOM_EXTERNAL_CALLBACK_REV_NFA and
77          * SOM_INTERNAL_LOC_SET_REV_NFA*.
78          */
79         u64a revNfaIndex;
80     } aux;
81 };
82 
83 #endif // SOM_OPERATION_H
84 
85