static sw_error_t _horus_port_cdt(a_uint32_t dev_id, fal_port_t port_id, a_uint32_t mdi_pair, fal_cable_status_t *cable_status, a_uint32_t *cable_len) { sw_error_t rv; a_uint32_t phy_id = 0; hsl_phy_ops_t *phy_drv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } SW_RTN_ON_NULL (phy_drv = hsl_phy_api_ops_get (dev_id)); if (NULL == phy_drv->phy_cdt) return SW_NOT_SUPPORTED; rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = phy_drv->phy_cdt(dev_id, phy_id, mdi_pair, cable_status, cable_len); return rv; }
static sw_error_t _athena_port_speed_get(a_uint32_t dev_id, fal_port_t port_id, fal_port_speed_t * pspeed) { sw_error_t rv; a_uint32_t phy_id; hsl_phy_ops_t *phy_drv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } SW_RTN_ON_NULL (phy_drv = hsl_phy_api_ops_get (dev_id)); if (NULL == phy_drv->phy_speed_get) return SW_NOT_SUPPORTED; rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = phy_drv->phy_speed_get(dev_id, phy_id, pspeed); return rv; }
static sw_error_t _horus_port_autoneg_adv_get(a_uint32_t dev_id, fal_port_t port_id, a_uint32_t * autoadv) { sw_error_t rv; a_uint32_t phy_id; hsl_phy_ops_t *phy_drv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } SW_RTN_ON_NULL (phy_drv = hsl_phy_api_ops_get (dev_id)); if (NULL == phy_drv->phy_autoneg_adv_get) return SW_NOT_SUPPORTED; rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); *autoadv = 0; rv = phy_drv->phy_autoneg_adv_get(dev_id, phy_id, autoadv); SW_RTN_ON_ERROR(rv); return SW_OK; }
static sw_error_t _horus_port_hibernate_get(a_uint32_t dev_id, fal_port_t port_id, a_bool_t *enable) { sw_error_t rv; a_uint32_t phy_id = 0; hsl_phy_ops_t *phy_drv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } SW_RTN_ON_NULL (phy_drv = hsl_phy_api_ops_get (dev_id)); if (NULL == phy_drv->phy_hibernation_get) return SW_NOT_SUPPORTED; rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = phy_drv->phy_hibernation_get(dev_id, phy_id, enable); return rv; }
static sw_error_t _horus_port_speed_set(a_uint32_t dev_id, fal_port_t port_id, fal_port_speed_t speed) { sw_error_t rv; a_uint32_t phy_id = 0; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); if (FAL_SPEED_100 < speed) { return SW_BAD_PARAM; } rv = f2_phy_set_speed(dev_id, phy_id, speed); return rv; }
static sw_error_t _athena_port_duplex_set(a_uint32_t dev_id, fal_port_t port_id, fal_port_duplex_t duplex) { sw_error_t rv; a_uint32_t phy_id = 0; a_uint32_t reg_save = 0; a_uint32_t reg_val = 0; hsl_phy_ops_t *phy_drv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } SW_RTN_ON_NULL (phy_drv = hsl_phy_api_ops_get (dev_id)); if (NULL == phy_drv->phy_duplex_set) return SW_NOT_SUPPORTED; if (FAL_DUPLEX_BUTT <= duplex) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); //save reg value HSL_REG_ENTRY_GET(rv, dev_id, PORT_STATUS, port_id, (a_uint8_t *) (®_val), sizeof (a_uint32_t)); reg_save = reg_val; SW_SET_REG_BY_FIELD(PORT_STATUS, LINK_EN, 0, reg_val); SW_SET_REG_BY_FIELD(PORT_STATUS, RXMAC_EN, 0, reg_val); SW_SET_REG_BY_FIELD(PORT_STATUS, TXMAC_EN, 0, reg_val); //set mac be config by sw and turn off RX TX MAC_EN HSL_REG_ENTRY_SET(rv, dev_id, PORT_STATUS, port_id, (a_uint8_t *) (®_val), sizeof (a_uint32_t)); rv = phy_drv->phy_duplex_set(dev_id, phy_id, duplex); //retore reg value HSL_REG_ENTRY_SET(rv, dev_id, PORT_STATUS, port_id, (a_uint8_t *) (®_save), sizeof (a_uint32_t)); return rv; }
static sw_error_t _athena_port_autoneg_restart(a_uint32_t dev_id, fal_port_t port_id) { sw_error_t rv; a_uint32_t phy_id; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = f2_phy_restart_autoneg(dev_id, phy_id); return rv; }
static sw_error_t _athena_port_hibernate_get(a_uint32_t dev_id, fal_port_t port_id, a_bool_t *enable) { sw_error_t rv; a_uint32_t phy_id = 0; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = f2_phy_get_hibernate(dev_id, phy_id, enable); return rv; }
static sw_error_t _horus_port_duplex_get(a_uint32_t dev_id, fal_port_t port_id, fal_port_duplex_t * pduplex) { sw_error_t rv; a_uint32_t phy_id; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = f2_phy_get_duplex(dev_id, phy_id, pduplex); return rv; }
static sw_error_t _horus_port_cdt(a_uint32_t dev_id, fal_port_t port_id, a_uint32_t mdi_pair, fal_cable_status_t *cable_status, a_uint32_t *cable_len) { sw_error_t rv; a_uint32_t phy_id = 0; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = f2_phy_cdt(dev_id, phy_id, mdi_pair, cable_status, cable_len); return rv; }
static sw_error_t _horus_port_autoneg_status_get(a_uint32_t dev_id, fal_port_t port_id, a_bool_t * status) { a_uint32_t phy_id; sw_error_t rv; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); *status = f2_phy_autoneg_status(dev_id, phy_id); return SW_OK; }
static sw_error_t _horus_port_autoneg_adv_set(a_uint32_t dev_id, fal_port_t port_id, a_uint32_t autoadv) { sw_error_t rv; a_uint32_t phy_id; HSL_DEV_ID_CHECK(dev_id); if (A_TRUE != hsl_port_prop_check(dev_id, port_id, HSL_PP_PHY)) { return SW_BAD_PARAM; } rv = hsl_port_prop_get_phyid(dev_id, port_id, &phy_id); SW_RTN_ON_ERROR(rv); rv = f2_phy_set_autoneg_adv(dev_id, phy_id, autoadv); SW_RTN_ON_ERROR(rv); return SW_OK; }