| /* |
| <:copyright-BRCM:2016:proprietary:standard |
| |
| Broadcom Proprietary and Confidential.(c) 2016 Broadcom |
| 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. |
| :> |
| */ |
| #ifndef _BCM_COMMON_GPON_H_ |
| #define _BCM_COMMON_GPON_H_ |
| |
| #include "bcm_dev_log.h" |
| #include "bcmcli.h" |
| #include "bcmolt_model_types.h" |
| #include "bcmolt_math.h" |
| #include "bcmolt_conv.h" |
| #include "bcm_common_gpon_constants.h" |
| |
| typedef struct |
| { |
| bcmolt_pon_mode pon_mode; |
| bcmolt_pon_api_type api_type; |
| uint16_t num_of_onus; |
| uint16_t num_of_alloc_ids; |
| uint16_t num_of_dynamic_alloc_indices; |
| uint16_t num_of_gem_ports; |
| uint16_t num_of_alloc_ids_per_onu; |
| bcmolt_pon_onu_id onu_id_broadcast; |
| bcmolt_pon_onu_id onu_id_unassigned; |
| bcmolt_pon_alloc_id alloc_id_broadcast; |
| bcmolt_pon_alloc_id alloc_id_invalid; |
| bcmolt_pon_alloc_id alloc_id_unassigned; |
| bcmolt_pon_us_rate us_rate; |
| } pon_mode_db; |
| |
| typedef struct |
| { |
| uint8_t num_of_pons; |
| pon_mode_db pons[MAX_NUM_OF_PONS]; |
| } sys_mode_db; |
| |
| /* System mode database, initialized at system start. |
| * Used for constants that change based on PON mode, chip type, etc. */ |
| extern sys_mode_db *smdbg; |
| |
| /* Get the PON mode database handle for a given PON index (shortcut for smdbg->pons[pon_id]). */ |
| #define PMDB(pon_id) ((const pon_mode_db *)&smdbg->pons[pon_id]) |
| |
| /* Get the PON mode for a given PON index (shortcut for PMDB(pon_id)->pon_mode). */ |
| #define PON_MODE(pon_id) (PMDB(pon_id)->pon_mode) |
| BCMOLT_TYPE2STR(bcmolt_pon_mode, extern) |
| |
| /* Generic function that can be used to raise a software error for unsupported PON modes. */ |
| static inline bcmos_errno error_pon_mode_not_supported(bcmolt_pon_ni pon_ni) |
| { |
| bcmolt_pon_mode mode = PON_MODE(pon_ni); |
| BCMOS_TRACE_ERR("PON mode not supported for PON NI-%d: %s (%u)\n", pon_ni, bcmolt_pon_mode2str_conv(mode), mode); |
| return BCM_ERR_INTERNAL; |
| } |
| |
| /* Get a module ID with a base module + instance (PON, cluster, etc.) offset in a type-safe way */ |
| #define MODULE_INSTANCE(base_module_id, instance) (bcmos_module_id)((uint32_t)(base_module_id) + (uint32_t)(instance)) |
| |
| /* Same as MODULE_INSTANCE, but for events. */ |
| #define EVENT_INSTANCE(base_event_id, instance) (bcmos_event_id)((uint32_t)(base_event_id) + (uint32_t)(instance)) |
| |
| #define FOR_EACH_ONU(pon_id, onu_id) \ |
| for (onu_id = (bcmolt_pon_onu_id)0; onu_id < (bcmolt_pon_onu_id)PMDB(pon_id)->num_of_onus; onu_id++) |
| |
| #define FOR_EACH_ALLOC_INDEX(pon_id, alloc_index) \ |
| for (alloc_index = (bcmolt_pon_alloc_index)0; alloc_index < (bcmolt_pon_alloc_index)PMDB(pon_id)->num_of_alloc_ids; alloc_index++) |
| |
| #define FOR_EACH_GEM_INDEX(pon_id, gem_port_index) \ |
| for (gem_port_index = 0; (bcmolt_pon_gem_port_index)gem_port_index < (bcmolt_pon_gem_port_index)PMDB(pon_id)->num_of_gem_ports; gem_port_index++) |
| |
| #define ALLOC_INDEX_IS_VALID(pon_id, alloc_index) ((alloc_index) < (bcmolt_pon_alloc_index)PMDB(pon_id)->num_of_alloc_ids) |
| #define GEM_PORT_INDEX_IS_VALID(pon_id, gem_port_index) \ |
| ((gem_port_index) < (bcmolt_pon_gem_port_index)PMDB(pon_id)->num_of_gem_ports) |
| |
| #define ALLOC_ID_LAST_DEFAULT(pon_id) ((bcmolt_pon_alloc_id)(PMDB(pon_id)->num_of_onus - 1)) |
| #define ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id) \ |
| ((first_data_alloc_id) + (bcmolt_pon_alloc_id)(PMDB(pon_id)->num_of_alloc_ids - PMDB(pon_id)->num_of_onus - 1)) |
| #define ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id) ( \ |
| ((alloc_id) >= (first_data_alloc_id) && (alloc_id) <= ALLOC_ID_LAST_DATA(pon_id, first_data_alloc_id))) |
| #define ALLOC_ID_IS_VALID(pon_id, alloc_id, first_data_alloc_id) ( \ |
| ((alloc_id) <= ALLOC_ID_LAST_DEFAULT(pon_id)) || \ |
| ALLOC_ID_IS_VALID_DATA(pon_id, alloc_id, first_data_alloc_id)) |
| |
| #define GEM_PORT_ID_LAST_DEFAULT(pon_id) ((bcmolt_pon_gem_port_id)(PMDB(pon_id)->num_of_onus - 1)) |
| #define GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id) \ |
| ((first_data_port_id) + (bcmolt_pon_gem_port_id)(PMDB(pon_id)->num_of_gem_ports - PMDB(pon_id)->num_of_onus - 1)) |
| #define GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id) ( \ |
| ((gem_port_id) >= (first_data_port_id) && (gem_port_id) <= GEM_PORT_ID_LAST_DATA(pon_id, first_data_port_id))) |
| #define GEM_PORT_ID_IS_VALID(pon_id, gem_port_id, first_data_port_id) ( \ |
| ((gem_port_id) <= GEM_PORT_ID_LAST_DEFAULT(pon_id)) || \ |
| GEM_PORT_ID_IS_VALID_DATA(pon_id, gem_port_id, first_data_port_id)) |
| |
| #define PON_ID_IS_VALID(system_mode, pon_id) ( \ |
| ((uint8_t)pon_id < smdbg->num_of_pons) && \ |
| (system_mode != BCMOLT_SYSTEM_MODE_GPON_8_XGPON_4_X_COEXISTENCE || pon_id < XGPON_HALF_CHIP_MAX_NUM_OF_PONS || pon_id >= XGPON_MAX_NUM_OF_PONS)) |
| |
| void bcm_common_gpon_init(bcmolt_system_mode system_mode); |
| bcmolt_system_mode bcm_common_gpon_get_system_mode(void); |
| |
| #endif |
| |