app/testpmd: fix GTP PSC extension header length
[dpdk.git] / drivers / common / cnxk / roc_ae.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include "roc_api.h"
6
7 #define AE_EC_GRP_TBL_NAME "ae_ec_grp_tbl"
8
9 struct ae_ec_grp_tbl {
10         uint64_t refcount;
11         uint8_t ec_grp_tbl[];
12 };
13
14 const struct roc_ae_ec_group ae_ec_grp[ROC_AE_EC_ID_PMAX] = {
15         {
16                 .prime = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
17                                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
18                                    0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF,
19                                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
20                           .length = 24},
21                 .order = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
22                                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
23                                    0x99, 0xDE, 0xF8, 0x36, 0x14, 0x6B,
24                                    0xC9, 0xB1, 0xB4, 0xD2, 0x28, 0x31},
25                           .length = 24},
26                 .consta = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
27                                     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
28                                     0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF,
29                                     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC},
30                            .length = 24},
31                 .constb = {.data = {0x64, 0x21, 0x05, 0x19, 0xE5, 0x9C,
32                                     0x80, 0xE7, 0x0F, 0xA7, 0xE9, 0xAB,
33                                     0x72, 0x24, 0x30, 0x49, 0xFE, 0xB8,
34                                     0xDE, 0xEC, 0xC1, 0x46, 0xB9, 0xB1},
35                            .length = 24},
36         },
37         {
38                 .prime = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
39                                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
40                                    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
41                                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
42                           .length = 28},
43                 .order = {.data = {0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF,
44                                    0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF,
45                                    0X16, 0XA2, 0XE0, 0XB8, 0XF0, 0X3E, 0X13,
46                                    0XDD, 0X29, 0X45, 0X5C, 0X5C, 0X2A, 0X3D},
47                           .length = 28},
48                 .consta = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
49                                     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
50                                     0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
51                                     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE},
52                            .length = 28},
53                 .constb = {.data = {0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3,
54                                     0xAB, 0xF5, 0x41, 0x32, 0x56, 0x50, 0x44,
55                                     0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27,
56                                     0x0B, 0x39, 0x43, 0x23, 0x55, 0xFF, 0xB4},
57                            .length = 28},
58         },
59         {
60                 .prime = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
61                                    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62                                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
63                                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
64                                    0xFF, 0xFF, 0xFF, 0xFF},
65                           .length = 32},
66                 .order = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
67                                    0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
68                                    0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7,
69                                    0x17, 0x9E, 0x84, 0xF3, 0xB9, 0xCA, 0xC2,
70                                    0xFC, 0x63, 0x25, 0x51},
71                           .length = 32},
72                 .consta = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
73                                     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74                                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
75                                     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
76                                     0xFF, 0xFF, 0xFF, 0xFC},
77                            .length = 32},
78                 .constb = {.data = {0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93,
79                                     0xE7, 0xB3, 0xEB, 0xBD, 0x55, 0x76, 0x98,
80                                     0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC,
81                                     0x53, 0xB0, 0xF6, 0x3B, 0xCE, 0x3C, 0x3E,
82                                     0x27, 0xD2, 0x60, 0x4B},
83                            .length = 32},
84         },
85         {.prime = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
86                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
87                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
88                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
89                             0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
90                             0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF},
91                    .length = 48},
92          .order = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
93                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
94                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
95                             0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF,
96                             0x58, 0x1A, 0x0D, 0xB2, 0x48, 0xB0, 0xA7, 0x7A,
97                             0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73},
98                    .length = 48},
99          .consta = {.data = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
100                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
101                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
102                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
103                              0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
104                              0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC},
105                     .length = 48},
106          .constb = {.data = {0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4,
107                              0x98, 0x8E, 0x05, 0x6B, 0xE3, 0xF8, 0x2D, 0x19,
108                              0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12,
109                              0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A,
110                              0xC6, 0x56, 0x39, 0x8D, 0x8A, 0x2E, 0xD1, 0x9D,
111                              0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF},
112                     .length = 48}},
113         {.prime = {.data = {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
114                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
115                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
116                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
117                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
118                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
119                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
120                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
121                             0xFF, 0xFF},
122                    .length = 66},
123          .order = {.data = {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
124                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
125                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
126                             0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
127                             0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F,
128                             0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
129                             0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C,
130                             0x47, 0xAE, 0xBB, 0x6F, 0xB7, 0x1E, 0x91, 0x38,
131                             0x64, 0x09},
132                    .length = 66},
133          .consta = {.data = {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
134                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
135                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
136                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
137                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
138                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
139                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
140                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
141                              0xFF, 0xFC},
142                     .length = 66},
143          .constb = {.data = {0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C,
144                              0x9A, 0x1F, 0x92, 0x9A, 0x21, 0xA0, 0xB6, 0x85,
145                              0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
146                              0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1,
147                              0x09, 0xE1, 0x56, 0x19, 0x39, 0x51, 0xEC, 0x7E,
148                              0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
149                              0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C,
150                              0x34, 0xF1, 0xEF, 0x45, 0x1F, 0xD4, 0x6B, 0x50,
151                              0x3F, 0x00},
152                     .length = 66}}};
153
154 int
155 roc_ae_ec_grp_get(struct roc_ae_ec_group **tbl)
156 {
157         const char name[] = AE_EC_GRP_TBL_NAME;
158         struct ae_ec_grp_tbl *ec_grp;
159         const struct plt_memzone *mz;
160         int i, len = 0;
161         uint8_t *data;
162
163         if (tbl == NULL)
164                 return -EINVAL;
165
166         len = sizeof(ae_ec_grp);
167
168         mz = plt_memzone_lookup(name);
169         if (mz == NULL) {
170                 /* Create memzone first time */
171                 mz = plt_memzone_reserve_cache_align(
172                         name, len + sizeof(struct ae_ec_grp_tbl));
173                 if (mz == NULL)
174                         return -ENOMEM;
175         }
176
177         ec_grp = mz->addr;
178
179         if (__atomic_fetch_add(&ec_grp->refcount, 1, __ATOMIC_SEQ_CST) != 0)
180                 return 0;
181
182         data = PLT_PTR_ADD(mz->addr, sizeof(uint64_t));
183
184         for (i = 0; i < ROC_AE_EC_ID_PMAX; i++) {
185                 memcpy(data, &ae_ec_grp[i], sizeof(struct roc_ae_ec_group));
186                 tbl[i] = (struct roc_ae_ec_group *)data;
187                 data += sizeof(struct roc_ae_ec_group);
188         }
189
190         return 0;
191 }
192
193 void
194 roc_ae_ec_grp_put(void)
195 {
196         const char name[] = AE_EC_GRP_TBL_NAME;
197         const struct plt_memzone *mz;
198         struct ae_ec_grp_tbl *ec_grp;
199
200         mz = plt_memzone_lookup(name);
201         if (mz == NULL)
202                 return;
203
204         ec_grp = mz->addr;
205         /* Decrement number of devices using EC grp table */
206         if (__atomic_sub_fetch(&ec_grp->refcount, 1, __ATOMIC_SEQ_CST) == 0)
207                 plt_memzone_free(mz);
208 }