BAL and Maple Release 2.2
Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bcm68620_release/release/host_driver/common_gpon/Makefile b/bcm68620_release/release/host_driver/common_gpon/Makefile
new file mode 100644
index 0000000..9a4e5a0
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/Makefile
@@ -0,0 +1,11 @@
+# GPON General
+
+MOD_NAME = common_gpon
+MOD_TYPE = lib
+MOD_DEPS = model cli
+
+EXTRA_CFLAGS += -I$(TOP_DIR)/common/model/maple \
+-I$(TOP_DIR)/common/transport/driver/maple/pcie_sw_queue \
+-I$(TOP_DIR)/common/drivers/maple/pcie
+
+srcs = bcm_common_gpon.c
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c
new file mode 100644
index 0000000..94e3a1b
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.c
@@ -0,0 +1,262 @@
+/*
+<: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}
+};
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h
new file mode 100644
index 0000000..464d661
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon.h
@@ -0,0 +1,144 @@
+/*
+<: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
+
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h
new file mode 100644
index 0000000..60308e4
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_constants.h
@@ -0,0 +1,138 @@
+/*
+<: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_CONSTANTS_H_
+#define _BCM_COMMON_GPON_CONSTANTS_H_
+
+#include "bcmolt_model_data.h"
+
+/* maximum number of PONs for any supported PON mode */
+#define MAX_NUM_OF_PONS 16
+
+/** Generic "PON mode" used to simplify logic when specific "system mode" is too complex. */
+typedef enum
+{
+ BCMOLT_PON_MODE_GPON,
+ BCMOLT_PON_MODE_XGPON,
+ BCMOLT_PON_MODE_XGS,
+ BCMOLT_PON_MODE_NGPON2,
+} bcmolt_pon_mode;
+
+/** Object type used by the API layer for provisioning each PON mode. */
+typedef enum
+{
+ BCMOLT_PON_API_TYPE_GPON,
+ BCMOLT_PON_API_TYPE_XGPON,
+} bcmolt_pon_api_type;
+
+typedef enum
+{
+ BCMOLT_PON_US_RATE_1G,
+ BCMOLT_PON_US_RATE_2P5G,
+ BCMOLT_PON_US_RATE_10G,
+} bcmolt_pon_us_rate;
+
+/* Number of PON NIs per PON mode */
+#define GPON_MAX_NUM_OF_PONS 16
+#define XGPON_MAX_NUM_OF_PONS 8
+#define XGPON_HALF_CHIP_MAX_NUM_OF_PONS 4
+#define XGS_2X_NUM_OF_PONS 2
+#define NGPON2_2X_NUM_OF_PONS 2
+#define NGPON2_8X_NUM_OF_PONS 8
+
+/* ONU's per PON */
+#define GPON_NUM_OF_ONUS 128
+#define XGPON_NUM_OF_ONUS 256
+#define XGPON_MAX_NUM_OF_ONUS 510
+
+/* Alloc ID's per PON */
+#define GPON_NUM_OF_DYNAMIC_ALLOC_INDICES 640
+#define GPON_NUM_OF_ALLOC_IDS 1024
+#define XGPON_NUM_OF_DYNAMIC_ALLOC_INDICES 1280
+#define XGPON_NUM_OF_ALLOC_IDS 2048
+
+/* Alloc ID's per ONU */
+#define GPON_NUM_OF_ALLOC_IDS_PER_ONU 32
+#define XGPON_NUM_OF_ALLOC_IDS_PER_ONU 32
+#define NUM_OF_ALLOC_IDS_PER_ONU (MAX(GPON_NUM_OF_ALLOC_IDS_PER_ONU, XGPON_NUM_OF_ALLOC_IDS_PER_ONU))
+
+#define GPON_ONU_ID_BROADCAST ((bcmolt_pon_onu_id)0xFF)
+#define XGPON_ONU_ID_BROADCAST ((bcmolt_pon_onu_id)0x3FF)
+#define GPON_ONU_ID_UNASSIGNED GPON_ONU_ID_BROADCAST
+#define XGPON_ONU_ID_UNASSIGNED XGPON_ONU_ID_BROADCAST
+#define XGPON_DUMMY_ONU_ID ((bcmolt_pon_onu_id)511)
+
+#define GPON_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0xFE)
+#define XGPON_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FF) /* Used for 2.5G upstream in XGPON/XGS/NGPON2 */
+#define TEN_GIG_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FE) /* Used for 10G upstream in XGS/NGPON2 */
+#define TEN_OR_2P5_GIG_ALLOC_ID_BROADCAST ((bcmolt_pon_alloc_id)0x3FD) /* Used for either 2.5G/10G upstream in XGS/NGPON2 */
+#define GPON_ALLOC_ID_UNASSIGNED ((bcmolt_pon_alloc_id)0xFF)
+#define XGPON_ALLOC_ID_UNASSIGNED ((bcmolt_pon_alloc_id)512) /* In XGPON we have up to 512 ONU's, and alloc ID is unused for sure. */
+#define XGPON_DUMMY_ALLOC_ID ((bcmolt_pon_alloc_id)511)
+
+/* GEM PORT ID's per PON */
+#define GPON_NUM_OF_GEM_PORT_IDS_PER_PON 4096
+#define XGPON_NUM_OF_GEM_PORT_IDS_PER_PON 8192
+/* GEM PORT ID's per ONU */
+#define MAX_NUM_OF_GEM_PORT_IDS_PER_ONU 256
+
+/* OMCI/CPU packets */
+#define OMCI_CRC_LEN 4
+
+/* Packet sizes - all values in bytes resolution */
+#define OMCI_MIN_PKT_SIZE_WITH_CRC 14
+#define OMCI_MIN_PKT_SIZE_WO_CRC 10
+#define OMCI_MAX_PKT_SIZE_WITH_CRC 1980
+#define OMCI_MAX_PKT_SIZE_WO_CRC 1976
+#define OMCI_BASELINE_PKT_SIZE_WO_CRC 44
+#define OMCI_EXTENDED_PKT_SIZE_WO_CRC OMCI_MAX_PKT_SIZE_WO_CRC
+#define CPU_MIN_PKT_SIZE_WITH_CRC 64
+#define CPU_MIN_PKT_SIZE_WO_CRC 60
+#define CPU_MAX_PKT_SIZE_WITH_CRC 2048
+#define CPU_MAX_PKT_SIZE_WO_CRC 2044
+
+#endif
+
diff --git a/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h
new file mode 100644
index 0000000..6dac5c5
--- /dev/null
+++ b/bcm68620_release/release/host_driver/common_gpon/bcm_common_gpon_fast.h
@@ -0,0 +1,129 @@
+/*
+<: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_FAST_H_
+#define _BCM_COMMON_GPON_FAST_H_
+
+#ifndef SIMULATION_BUILD
+#include <bcmtr_pcie_sw_queue.h>
+#endif
+
+#define BCM_COMMON_GPON_FAST_API_LIST_SIZE 1280
+#define BCM_COMMON_GPON_FAST_API_ACCESS_LIST_SIZE 2048
+#define URGENT_CHANNEL BCMTR_SWQ_FIRST_URGENT_CHANNEL
+
+typedef enum
+{
+ BCM_COMMON_FAST_MSG_TYPE_GET_ALLOC_STATS,
+ BCM_COMMON_FAST_MSG_TYPE_SET_ALLOCS,
+ BCM_COMMON_FAST_MSG_TYPE_SET_BW_ALLOCS
+} bcm_common_fast_msg_type;
+
+typedef struct __PACKED_ATTR_START__
+{
+ uint16_t alloc_id;
+ uint32_t allocated;
+ uint32_t used;
+ uint32_t status_report;
+} __PACKED_ATTR_END__ bcm_common_fast_get_alloc_stats;
+
+typedef struct __PACKED_ATTR_START__
+{
+ uint8_t pon_ni;
+ uint32_t cycle_num;
+ uint32_t available_bw;
+ uint32_t num_of_allocs;
+} __PACKED_ATTR_END__ bcm_common_fast_get_stats_ind_hdr;
+
+typedef struct __PACKED_ATTR_START__
+{
+ bcm_common_fast_get_stats_ind_hdr hdr;
+ bcm_common_fast_get_alloc_stats alloc_stats_list[BCM_COMMON_GPON_FAST_API_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_get_stats_ind;
+
+typedef struct __PACKED_ATTR_START__
+{
+ uint16_t alloc_id;
+ uint32_t allocation_blocks;
+ /* uint8_t access_num; - Will be added in the 2nd phase */
+} __PACKED_ATTR_END__ bcm_common_fast_set_alloc;
+
+typedef struct __PACKED_ATTR_START__
+{
+ uint32_t cycle_num;
+ uint32_t num_of_allocs;
+} __PACKED_ATTR_END__ bcm_common_fast_msg_hdr;
+
+typedef struct __PACKED_ATTR_START__
+{
+ bcm_common_fast_msg_hdr hdr;
+ bcm_common_fast_set_alloc set_alloc_list[BCM_COMMON_GPON_FAST_API_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_set_allocs_msg;
+
+typedef struct __PACKED_ATTR_START__
+{
+ uint16_t alloc_id;
+ uint16_t allocation_size;
+ uint16_t start_time;
+ uint8_t burst_profile;
+ struct __PACKED_ATTR_START__
+ {
+ bcmos_bool ploam_flag :1;
+ bcmos_bool dbru_flag :1;
+ bcmos_bool end_of_frame :1;
+ bcmos_bool end_of_map :1;
+ bcmos_bool fwi :1;
+ uint8_t :3;
+ } __PACKED_ATTR_END__ alloc_flags;
+} __PACKED_ATTR_END__ bcm_common_fast_set_access;
+
+typedef struct __PACKED_ATTR_START__
+{
+ bcm_common_fast_msg_hdr hdr;
+ bcm_common_fast_set_access set_access_list[BCM_COMMON_GPON_FAST_API_ACCESS_LIST_SIZE];
+} __PACKED_ATTR_END__ bcm_common_fast_set_accesses_msg;
+
+#endif