1 /*
2  * Copyright 2014-2017 Cavium, Inc.
3  * The contents of this file are subject to the terms of the Common Development
4  * and Distribution License, v.1,  (the "License").
5  *
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the License at available
9  * at http://opensource.org/licenses/CDDL-1.0
10  *
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14 
15 #ifndef _LICENSE_H
16 #define _LICENSE_H
17 
18 #include "bcmtype.h"
19 
20 #if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
21     #error "Missing either LITTLE_ENDIAN or BIG_ENDIAN definition."
22 #endif
23 
24 
25 #define HASH_VALUE_SIZE                          12
26 /*
27  * license_key_b definition
28  */
29 
30 typedef struct _license_key_b
31 {
32     u8_t digest[HASH_VALUE_SIZE];
33         /* KEY_VALID_PATTERN is used when no actual digest is needed */
34         #define KEY_VALID_PATTERN_BYTE           0x5a
35         #define KEY_VALID_PATTERN_DWORD          0x5a5a5a5a
36 
37     u8_t key_type;
38         #define KEY_TYPE_ENUM_BCM5706            0x0
39         #define KEY_TYPE_ENUM_BCM5710            0x2 /* Special modification for Everest */
40     u8_t version;
41         #define VERSION_CURRENT                  0x0
42     u8_t dword_length;                           /* Not including the digest */
43     u8_t oem_id;
44         #define OEM_ID_BRCM                      0
45         #define OEM_ID_HPQ                       0x3c
46 
47     u16_t capability;
48         #define CAP_RESERVED                     0x0001 /* Xinan/Teton Only */
49         #define CAP_USER_RDMA                    0x0002 /* Xinan/Teton Only */
50         #define CAP_TOE                          0x0004 /* Xinan/Teton Only */
51         #define CAP_ISCSI_INIT                   0x0008 /* Xinan/Teton Only */
52         #define CAP_ISCSI_TRGT                   0x0010 /* Xinan/Teton Only */
53         #define CAP_ISER_INIT                    0x0020 /* Xinan/Teton Only */
54         #define CAP_ISER_TRGT                    0x0040 /* Xinan/Teton Only */
55         #define CAP_ISCSI_BOOT                   0x0080 /* Xinan/Teton Only */
56         #define CAP_ISCSI_FULL_ACCL              0x0100 /* Xinan/Teton Only */
57         #define CAP_ISCSI_HDR_DGST               0x0200 /* Xinan/Teton Only */
58         #define CAP_ISCSI_BODY_DGST              0x0400 /* Xinan/Teton Only */
59         #define CAP_SERDES_2_5G                  0x0800 /* Xinan/Teton Only */
60         #define CAP_SPEED_12G                    0x0800 /* Everest Only */
61         #define CAP_SPEED_12_5G                  0x1000
62         #define CAP_SPEED_13G                    0x2000
63         #define CAP_SPEED_15G                    0x4000
64         #define CAP_SPEED_16G                    0x8000
65     u16_t max_toe_conn;
66         #define CONN_UNLIMITED                   0xffff
67 
68     u16_t reserved;
69     u16_t max_um_rdma_conn;
70 
71     u16_t max_iscsi_init_conn;
72     u16_t max_iscsi_trgt_conn;
73 
74     u16_t max_iser_init_conn;
75     u16_t max_iser_trgt_conn;
76 
77     u32_t reserved_a[3];
78 
79     u32_t sn;
80 
81     u16_t reserved_b;
82     u16_t expiration;
83         #define EXPIRATION_NEVER                 0xffff
84 
85 } license_key_b_t;
86 
87 /*
88  * license_key_l definition
89  */
90 
91 #define KEY_VALID_PATTERN_BYTE           0x5a
92 #define KEY_VALID_PATTERN_DWORD          0x5a5a5a5a
93 typedef struct _license_key_l
94 {
95     u8_t digest[HASH_VALUE_SIZE];
96         /* KEY_VALID_PATTERN is used when no actual digest is needed */
97 
98     u8_t oem_id;
99             #define OEM_ID_BRCM                      0
100             #define OEM_ID_HPQ                       0x3c
101     u8_t dword_length;                           /* Not including the digest */
102     u8_t version;
103             #define VERSION_CURRENT                  0x0
104     u8_t key_type;
105             #define KEY_TYPE_ENUM_BCM5706            0x0
106             #define KEY_TYPE_ENUM_BCM5710            0x2 /* Special modification for Everest */
107 
108     u16_t max_toe_conn;
109             #define CONN_UNLIMITED                   0xffff
110     u16_t capability;
111         #define CAP_RESERVED                     0x0001 /* Xinan/Teton Only */
112         #define CAP_USER_RDMA                    0x0002 /* Xinan/Teton Only */
113         #define CAP_TOE                          0x0004 /* Xinan/Teton Only */
114         #define CAP_ISCSI_INIT                   0x0008 /* Xinan/Teton Only */
115         #define CAP_ISCSI_TRGT                   0x0010 /* Xinan/Teton Only */
116         #define CAP_ISER_INIT                    0x0020 /* Xinan/Teton Only */
117         #define CAP_ISER_TRGT                    0x0040 /* Xinan/Teton Only */
118         #define CAP_ISCSI_BOOT                   0x0080 /* Xinan/Teton Only */
119         #define CAP_ISCSI_FULL_ACCL              0x0100 /* Xinan/Teton Only */
120         #define CAP_ISCSI_HDR_DGST               0x0200 /* Xinan/Teton Only */
121         #define CAP_ISCSI_BODY_DGST              0x0400 /* Xinan/Teton Only */
122         #define CAP_SERDES_2_5G                  0x0800 /* Xinan/Teton Only */
123         #define CAP_SPEED_12G                    0x0800 /* Everest Only */
124         #define CAP_SPEED_12_5G                  0x1000
125         #define CAP_SPEED_13G                    0x2000
126         #define CAP_SPEED_15G                    0x4000
127         #define CAP_SPEED_16G                    0x8000
128 
129     u16_t max_um_rdma_conn;
130     u16_t reserved;
131 
132     u16_t max_iscsi_trgt_conn;
133     u16_t max_iscsi_init_conn;
134 
135     u16_t max_iser_trgt_conn;
136     u16_t max_iser_init_conn;
137 
138     u32_t reserved_a[3];
139 
140     u32_t sn;
141 
142     u16_t expiration;
143             #define EXPIRATION_NEVER                 0xffff
144     u16_t reserved_b;
145 
146 } license_key_l_t;
147 
148 
149 #define FW_ENCODE_32BIT_PATTERN                  0x1e1e1e1e
150 #define FW_ENCODE_16BIT_PATTERN                  0x1e1e
151 #define FW_ENCODE_8BIT_PATTERN                   0x1e
152 
153 
154 #if defined(BIG_ENDIAN)
155     typedef license_key_b_t license_key_t;
156 #elif defined(LITTLE_ENDIAN)
157     typedef license_key_l_t license_key_t;
158 #endif
159 
160 #endif /* _LICENSE_H */
161