| /* |
| <:copyright-BRCM:2014:proprietary:standard |
| |
| Copyright (c) 2014 Broadcom Corporation |
| All Rights Reserved |
| |
| This program is the proprietary software of Broadcom Corporation and/or its |
| licensors, and may only be used, duplicated, modified or distributed pursuant |
| to the terms and conditions of a separate, written license agreement executed |
| between you and Broadcom (an "Authorized License"). Except as set forth in |
| an Authorized License, Broadcom grants no license (express or implied), right |
| to use, or waiver of any kind with respect to the Software, and Broadcom |
| expressly reserves all rights in and to the Software and all intellectual |
| property rights therein. IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE |
| NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY |
| BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE. |
| |
| Except as expressly set forth in the Authorized License, |
| |
| 1. This program, including its structure, sequence and organization, |
| constitutes the valuable trade secrets of Broadcom, and you shall use |
| all reasonable efforts to protect the confidentiality thereof, and to |
| use this information only in connection with your use of Broadcom |
| integrated circuit products. |
| |
| 2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" |
| AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR |
| WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH |
| RESPECT TO THE SOFTWARE. BROADCOM SPECIFICALLY DISCLAIMS ANY AND |
| ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, |
| FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR |
| COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE |
| TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR |
| PERFORMANCE OF THE SOFTWARE. |
| |
| 3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR |
| ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, |
| INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY |
| WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN |
| IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; |
| OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE |
| SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS |
| SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY |
| LIMITED REMEDY. |
| :> |
| */ |
| #include "bcm_common_gpon.h" |
| |
| static pon_mode_db db_gpon = |
| { |
| .pon_mode = BCMOLT_PON_MODE_GPON, |
| .api_type = BCMOLT_PON_API_TYPE_GPON, |
| .num_of_onus = GPON_NUM_OF_ONUS, |
| .num_of_alloc_ids = GPON_NUM_OF_ALLOC_IDS, |
| .num_of_dynamic_alloc_indices = GPON_NUM_OF_DYNAMIC_ALLOC_INDICES, |
| .num_of_gem_ports = GPON_NUM_OF_GEM_PORT_IDS_PER_PON, |
| .num_of_alloc_ids_per_onu = GPON_NUM_OF_ALLOC_IDS_PER_ONU, |
| .onu_id_broadcast = GPON_ONU_ID_BROADCAST, |
| .onu_id_unassigned = GPON_ONU_ID_UNASSIGNED, |
| .alloc_id_broadcast = GPON_ALLOC_ID_BROADCAST, |
| .alloc_id_invalid = BCMOLT_GPON_ALLOC_ID_INVALID, |
| .alloc_id_unassigned = GPON_ALLOC_ID_UNASSIGNED, |
| .us_rate = BCMOLT_PON_US_RATE_1G, |
| }; |
| |
| static pon_mode_db db_xgpon = |
| { |
| .pon_mode = BCMOLT_PON_MODE_XGPON, |
| .api_type = BCMOLT_PON_API_TYPE_XGPON, |
| .num_of_onus = XGPON_NUM_OF_ONUS, |
| .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS, |
| .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES, |
| .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON, |
| .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU, |
| .onu_id_broadcast = XGPON_ONU_ID_BROADCAST, |
| .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED, |
| .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST, |
| .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID, |
| .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED, |
| .us_rate = BCMOLT_PON_US_RATE_2P5G, |
| }; |
| |
| static pon_mode_db db_xgs = |
| { |
| .pon_mode = BCMOLT_PON_MODE_XGS, |
| .api_type = BCMOLT_PON_API_TYPE_XGPON, |
| .num_of_onus = XGPON_NUM_OF_ONUS, |
| .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS, |
| .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES, |
| .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON, |
| .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU, |
| .onu_id_broadcast = XGPON_ONU_ID_BROADCAST, |
| .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED, |
| .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST, |
| .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID, |
| .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED, |
| .us_rate = BCMOLT_PON_US_RATE_10G, |
| }; |
| |
| static pon_mode_db db_ngpon2 = |
| { |
| .pon_mode = BCMOLT_PON_MODE_NGPON2, |
| .api_type = BCMOLT_PON_API_TYPE_XGPON, |
| .num_of_onus = XGPON_NUM_OF_ONUS, |
| .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS, |
| .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES, |
| .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON, |
| .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU, |
| .onu_id_broadcast = XGPON_ONU_ID_BROADCAST, |
| .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED, |
| .alloc_id_broadcast = TEN_GIG_ALLOC_ID_BROADCAST, |
| .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID, |
| .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED, |
| .us_rate = BCMOLT_PON_US_RATE_10G, |
| }; |
| |
| static pon_mode_db db_ngpon2_2_5_g = |
| { |
| .pon_mode = BCMOLT_PON_MODE_NGPON2, |
| .api_type = BCMOLT_PON_API_TYPE_XGPON, |
| .num_of_onus = XGPON_NUM_OF_ONUS, |
| .num_of_alloc_ids = XGPON_NUM_OF_ALLOC_IDS, |
| .num_of_dynamic_alloc_indices = XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES, |
| .num_of_gem_ports = XGPON_NUM_OF_GEM_PORT_IDS_PER_PON, |
| .num_of_alloc_ids_per_onu = XGPON_NUM_OF_ALLOC_IDS_PER_ONU, |
| .onu_id_broadcast = XGPON_ONU_ID_BROADCAST, |
| .onu_id_unassigned = XGPON_ONU_ID_UNASSIGNED, |
| .alloc_id_broadcast = XGPON_ALLOC_ID_BROADCAST, |
| .alloc_id_invalid = BCMOLT_XGPON_ALLOC_ID_INVALID, |
| .alloc_id_unassigned = XGPON_ALLOC_ID_UNASSIGNED, |
| .us_rate = BCMOLT_PON_US_RATE_2P5G, |
| }; |
| |
| static sys_mode_db db_sys = {}; |
| sys_mode_db *smdbg = &db_sys; |
| |
| void bcm_common_gpon_init(bcmolt_system_mode system_mode) |
| { |
| uint8_t i; |
| bcmolt_xgpon_num_of_onus xgpon_num_of_onus; |
| /* need to check for XGPON XGS NGPON2 modes, the supported number of onus */ |
| bcmolt_xgpon_num_of_onus_get(0, &xgpon_num_of_onus); |
| |
| switch (system_mode) |
| { |
| case BCMOLT_SYSTEM_MODE_GPON__16_X: |
| smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_gpon; |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_GPON__8_X: |
| smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 2; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_gpon; |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_GPON__4_X: |
| smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS / 4; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_gpon; |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_XGPON_1__8_X: |
| smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_xgpon; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_XGPON_1__4_X: |
| smdbg->num_of_pons = XGPON_MAX_NUM_OF_PONS / 2; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_xgpon; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE: |
| smdbg->num_of_pons = GPON_MAX_NUM_OF_PONS; |
| /* Initialize first half chip as XGPON */ |
| for (i=0; i<XGPON_MAX_NUM_OF_PONS; i++) |
| { |
| smdbg->pons[i] = db_xgpon; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| /* Initialize second half chip as GPON */ |
| for (; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_gpon; |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_XGS__2_X_10_G: |
| smdbg->num_of_pons = XGS_2X_NUM_OF_PONS; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_xgs; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_NGPON2__2_X_10_G: |
| smdbg->num_of_pons = NGPON2_2X_NUM_OF_PONS; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_ngpon2; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| break; |
| case BCMOLT_SYSTEM_MODE_NGPON2__8_X_2_P_5_G: |
| smdbg->num_of_pons = NGPON2_8X_NUM_OF_PONS; |
| for (i=0; i<smdbg->num_of_pons; i++) |
| { |
| smdbg->pons[i] = db_ngpon2_2_5_g; |
| if (xgpon_num_of_onus == BCMOLT_XGPON_NUM_OF_ONUS_XGPON_SUPPORT_510_ONUS) |
| { |
| smdbg->pons[i].num_of_onus = XGPON_MAX_NUM_OF_ONUS; |
| } |
| } |
| break; |
| default: |
| smdbg->num_of_pons = 0; |
| break; |
| } |
| |
| } |
| |
| bcmolt_system_mode bcm_common_gpon_get_system_mode(void) |
| { |
| bcmolt_system_mode system_mode; |
| |
| /* ToDo: XXX: it requires work. JIRA SWMAPLE-3724 */ |
| bcmolt_system_mode_get(0, &system_mode); |
| return system_mode; |
| } |
| |
| bcmolt_pon_mode2str_t bcmolt_pon_mode2str[] = |
| { |
| {BCMOLT_PON_MODE_GPON, "gpon"}, |
| {BCMOLT_PON_MODE_XGPON, "xgpon"}, |
| {BCMOLT_PON_MODE_XGS, "xgs"}, |
| {BCMOLT_PON_MODE_NGPON2, "ngpon2"}, |
| {-1} |
| }; |