blob: 94e3a1b94941cceb2cc71beac7ad5eea966649e1 [file] [log] [blame]
/*
<: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}
};