blob: 94e3a1b94941cceb2cc71beac7ad5eea966649e1 [file] [log] [blame]
Shad Ansari2f7f9be2017-06-07 13:34:53 -07001/*
2<:copyright-BRCM:2014:proprietary:standard
3
4 Copyright (c) 2014 Broadcom Corporation
5 All Rights Reserved
6
7This program is the proprietary software of Broadcom Corporation and/or its
8licensors, and may only be used, duplicated, modified or distributed pursuant
9to the terms and conditions of a separate, written license agreement executed
10between you and Broadcom (an "Authorized License"). Except as set forth in
11an Authorized License, Broadcom grants no license (express or implied), right
12to use, or waiver of any kind with respect to the Software, and Broadcom
13expressly reserves all rights in and to the Software and all intellectual
14property rights therein. IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
15NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
16BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.
17
18Except as expressly set forth in the Authorized License,
19
201. This program, including its structure, sequence and organization,
21 constitutes the valuable trade secrets of Broadcom, and you shall use
22 all reasonable efforts to protect the confidentiality thereof, and to
23 use this information only in connection with your use of Broadcom
24 integrated circuit products.
25
262. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
27 AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
28 WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
29 RESPECT TO THE SOFTWARE. BROADCOM SPECIFICALLY DISCLAIMS ANY AND
30 ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
31 FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
32 COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
33 TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
34 PERFORMANCE OF THE SOFTWARE.
35
363. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
37 ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
38 INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
39 WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
40 IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
41 OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
42 SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
43 SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
44 LIMITED REMEDY.
45:>
46*/
47#include "bcm_common_gpon.h"
48
49static pon_mode_db db_gpon =
50{
51 .pon_mode = BCMOLT_PON_MODE_GPON,
52 .api_type = BCMOLT_PON_API_TYPE_GPON,
53 .num_of_onus = GPON_NUM_OF_ONUS,
54 .num_of_alloc_ids = GPON_NUM_OF_ALLOC_IDS,
55 .num_of_dynamic_alloc_indices = GPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
56 .num_of_gem_ports = GPON_NUM_OF_GEM_PORT_IDS_PER_PON,
57 .num_of_alloc_ids_per_onu = GPON_NUM_OF_ALLOC_IDS_PER_ONU,
58 .onu_id_broadcast = GPON_ONU_ID_BROADCAST,
59 .onu_id_unassigned = GPON_ONU_ID_UNASSIGNED,
60 .alloc_id_broadcast = GPON_ALLOC_ID_BROADCAST,
61 .alloc_id_invalid = BCMOLT_GPON_ALLOC_ID_INVALID,
62 .alloc_id_unassigned = GPON_ALLOC_ID_UNASSIGNED,
63 .us_rate = BCMOLT_PON_US_RATE_1G,
64};
65
66static pon_mode_db db_xgpon =
67{
68 .pon_mode = BCMOLT_PON_MODE_XGPON,
69 .api_type = BCMOLT_PON_API_TYPE_XGPON,
70 .num_of_onus = XGPON_NUM_OF_ONUS,
71 .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
72 .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
73 .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
74 .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
75 .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
76 .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
77 .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST,
78 .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
79 .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
80 .us_rate = BCMOLT_PON_US_RATE_2P5G,
81};
82
83static pon_mode_db db_xgs =
84{
85 .pon_mode = BCMOLT_PON_MODE_XGS,
86 .api_type = BCMOLT_PON_API_TYPE_XGPON,
87 .num_of_onus = XGPON_NUM_OF_ONUS,
88 .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
89 .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
90 .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
91 .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
92 .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
93 .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
94 .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST,
95 .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
96 .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
97 .us_rate = BCMOLT_PON_US_RATE_10G,
98};
99
100static pon_mode_db db_ngpon2 =
101{
102 .pon_mode = BCMOLT_PON_MODE_NGPON2,
103 .api_type = BCMOLT_PON_API_TYPE_XGPON,
104 .num_of_onus = XGPON_NUM_OF_ONUS,
105 .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
106 .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
107 .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
108 .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
109 .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
110 .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
111 .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST,
112 .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
113 .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
114 .us_rate = BCMOLT_PON_US_RATE_10G,
115};
116
117static pon_mode_db db_ngpon2_2_5_g =
118{
119 .pon_mode = BCMOLT_PON_MODE_NGPON2,
120 .api_type = BCMOLT_PON_API_TYPE_XGPON,
121 .num_of_onus = XGPON_NUM_OF_ONUS,
122 .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS,
123 .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES,
124 .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON,
125 .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU,
126 .onu_id_broadcast = XGPON_ONU_ID_BROADCAST,
127 .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED,
128 .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST,
129 .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID,
130 .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED,
131 .us_rate = BCMOLT_PON_US_RATE_2P5G,
132};
133
134static sys_mode_db db_sys = {};
135sys_mode_db *smdbg = &db_sys;
136
137void bcm_common_gpon_init(bcmolt_system_mode system_mode)
138{
139 uint8_t i;
140 bcmolt_xgpon_num_of_onus xgpon_num_of_onus;
141 /* need to check for XGPON XGS NGPON2 modes, the supported number of onus */
142 bcmolt_xgpon_num_of_onus_get(0, &xgpon_num_of_onus);
143
144 switch (system_mode)
145 {
146 case BCMOLT_SYSTEM_MODE_GPON__16_X:
147 smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS;
148 for (i=0; i<smdbg->num_of_pons; i++)
149 {
150 smdbg->pons[i] = db_gpon;
151 }
152 break;
153 case BCMOLT_SYSTEM_MODE_GPON__8_X:
154 smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 2;
155 for (i=0; i<smdbg->num_of_pons; i++)
156 {
157 smdbg->pons[i] = db_gpon;
158 }
159 break;
160 case BCMOLT_SYSTEM_MODE_GPON__4_X:
161 smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 4;
162 for (i=0; i<smdbg->num_of_pons; i++)
163 {
164 smdbg->pons[i] = db_gpon;
165 }
166 break;
167 case BCMOLT_SYSTEM_MODE_XGPON_1__8_X:
168 smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS;
169 for (i=0; i<smdbg->num_of_pons; i++)
170 {
171 smdbg->pons[i] = db_xgpon;
172 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
173 {
174 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
175 }
176 }
177 break;
178 case BCMOLT_SYSTEM_MODE_XGPON_1__4_X:
179 smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS / 2;
180 for (i=0; i<smdbg->num_of_pons; i++)
181 {
182 smdbg->pons[i] = db_xgpon;
183 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
184 {
185 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
186 }
187 }
188 break;
189 case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE:
190 smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS;
191 /* Initialize first half chip as XGPON */
192 for (i=0; i<XGPON_MAX_NUM_OF_PONS; i++)
193 {
194 smdbg->pons[i] = db_xgpon;
195 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
196 {
197 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
198 }
199 }
200 /* Initialize second half chip as GPON */
201 for (; i<smdbg->num_of_pons; i++)
202 {
203 smdbg->pons[i] = db_gpon;
204 }
205 break;
206 case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G:
207 smdbg->num_of_pons = XGS_2X_NUM_OF_PONS;
208 for (i=0; i<smdbg->num_of_pons; i++)
209 {
210 smdbg->pons[i] = db_xgs;
211 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
212 {
213 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
214 }
215 }
216 break;
217 case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G:
218 smdbg->num_of_pons = NGPON2_2X_NUM_OF_PONS;
219 for (i=0; i<smdbg->num_of_pons; i++)
220 {
221 smdbg->pons[i] = db_ngpon2;
222 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
223 {
224 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
225 }
226 }
227 break;
228 case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G:
229 smdbg->num_of_pons = NGPON2_8X_NUM_OF_PONS;
230 for (i=0; i<smdbg->num_of_pons; i++)
231 {
232 smdbg->pons[i] = db_ngpon2_2_5_g;
233 if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS)
234 {
235 smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS;
236 }
237 }
238 break;
239 default:
240 smdbg->num_of_pons = 0;
241 break;
242 }
243
244}
245
246bcmolt_system_mode bcm_common_gpon_get_system_mode(void)
247{
248 bcmolt_system_mode system_mode;
249
250 /* ToDo: XXX: it requires work. JIRA SWMAPLE-3724 */
251 bcmolt_system_mode_get(0, &system_mode);
252 return system_mode;
253}
254
255bcmolt_pon_mode2str_t bcmolt_pon_mode2str[] =
256{
257 {BCMOLT_PON_MODE_GPON, "gpon"},
258 {BCMOLT_PON_MODE_XGPON, "xgpon"},
259 {BCMOLT_PON_MODE_XGS, "xgs"},
260 {BCMOLT_PON_MODE_NGPON2, "ngpon2"},
261 {-1}
262};