blob: 70626bcd46abb58a868a2ebc9efce6bc13baa26f [file] [log] [blame]
/*******************************************************************************
* Copyright 2002, GALILEO TECHNOLOGY, LTD.
*
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. NO RIGHTS ARE GRANTED
* HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT OF MARVELL OR ANY THIRD
* PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE DISCRETION TO REQUEST THAT THIS
* CODE BE IMMEDIATELY RETURNED TO MARVELL. THIS CODE IS PROVIDED "AS IS".
* MARVELL MAKES NO WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS
* ACCURACY, COMPLETENESS OR PERFORMANCE. MARVELL COMPRISES MARVELL TECHNOLOGY
* GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, MARVELL INTERNATIONAL LTD. (MIL),
* MARVELL TECHNOLOGY, INC. (MTI), MARVELL SEMICONDUCTOR, INC. (MSI), MARVELL
* ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. (MJKK), GALILEO TECHNOLOGY LTD. (GTL)
* AND GALILEO TECHNOLOGY, INC. (GTI).
********************************************************************************
* gtPhy.h
*
* DESCRIPTION:
* API definitions for Marvell Phy functionality.
*
* DEPENDENCIES:
* None.
*
* FILE REVISION NUMBER:
* $Revision: 1 $
*******************************************************************************/
#ifndef __gtPhyh
#define __gtPhyh
#include "msApi.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MARVELL_OUI_MSb 0x0141
#define MARVELL_OUI_LSb 0x0C00
#define OUI_LSb_MASK 0xFC00
#define PHY_MODEL_MASK 0x03F0
#define PHY_REV_MASK 0x000F
#define DEV_E3082 0x8 << 4
#define DEV_E104X 0x2 << 4
#define DEV_E1111 0xC << 4
#define DEV_E1112 0x9 << 4
#define DEV_E114X 0xD << 4
#define DEV_E1149 0xA << 4
#define DEV_E1181 0xE << 4
#define DEV_EC010 0x3 << 4
#define DEV_G15LV 0xB << 4 /* 88E6165 internal copper phy, 88E1240 */
#define DEV_S15LV 0x0 << 4 /* 88E6165 internal SERDES */
#define DEV_G65G 0x27 << 4 /* 88E6375 internal copper phy, 88E1340 */
#define DEV_G65FE 0x26 << 4 /* FE phy intergrated in 88E6500*/
#define DEV_G65GE 0x2B << 4 /* GE phy intergrated in 88E6500*/
#define DEV_QUAD3 0x1F << 4 /* YuvalC 1545 quad_phy - phy connected to amber_switch_3 */
typedef struct _GT_PHY_INFO
{
GT_U32 phyId; /* Marvell PHY ID (register 3) */
GT_U32 anyPage; /* each bit represents if the corresponding register is any page */
GT_U32 flag; /* see below for definition */
GT_U8 vctType; /* VCT Register Type */
GT_U8 exStatusType; /* EX Status Register Type */
GT_U8 dteType; /* DTE Register Type */
GT_U8 pktGenType; /* Pkt Generator Reg. Type */
GT_U8 macIfLoopType; /* MAC IF Loopback Reg. Type */
GT_U8 lineLoopType; /* Line Loopback Reg. Type */
GT_U8 exLoopType; /* External Loopback Reg. Type */
GT_U8 pageType; /* Page Restriction Type */
} GT_PHY_INFO;
/* GT_PHY_INFO flag definition */
#define GT_PHY_VCT_CAPABLE 0x0001
#define GT_PHY_DTE_CAPABLE 0x0002
#define GT_PHY_EX_CABLE_STATUS 0x0004
#define GT_PHY_ADV_VCT_CAPABLE 0x0008
#define GT_PHY_PKT_GENERATOR 0x0010
#define GT_PHY_MAC_IF_LOOP 0x0100
#define GT_PHY_LINE_LOOP 0x0200
#define GT_PHY_EXTERNAL_LOOP 0x0400
#define GT_PHY_RESTRICTED_PAGE 0x0800
#define GT_PHY_GIGABIT 0x8000
#define GT_PHY_COPPER 0x4000
#define GT_PHY_FIBER 0x2000
#define GT_PHY_SERDES_CORE 0x1000
/* VCT Register Type */
#define GT_PHY_VCT_TYPE1 1 /* 10/100 Fast Ethernet */
#define GT_PHY_VCT_TYPE2 2 /* 1000M without page support */
#define GT_PHY_VCT_TYPE3 3 /* 1000M without page but with work around */
#define GT_PHY_VCT_TYPE4 4 /* 1000M with page support */
/* ADV VCT Register Type */
#define GT_PHY_ADV_VCT_TYPE1 5 /* 88E1181 type device, not supported */
#define GT_PHY_ADV_VCT_TYPE2 6 /* 88E6165 family devies */
/* Extended Status Type */
#define GT_PHY_EX_STATUS_TYPE1 1 /* 88E1111, 88E1141, 88E1145 */
#define GT_PHY_EX_STATUS_TYPE2 2 /* 88E1112 */
#define GT_PHY_EX_STATUS_TYPE3 3 /* 88E1149 */
#define GT_PHY_EX_STATUS_TYPE4 4 /* 88E1181 */
#define GT_PHY_EX_STATUS_TYPE5 5 /* 88E1116 */
#define GT_PHY_EX_STATUS_TYPE6 6 /* 88E6165 family devices */
/* DTE Register Type */
#define GT_PHY_DTE_TYPE1 1 /* 10/100 Fast Ethernet with workaround */
#define GT_PHY_DTE_TYPE2 2 /* 1000M without page support */
#define GT_PHY_DTE_TYPE3 3 /* 1000M without page but with work around */
#define GT_PHY_DTE_TYPE4 4 /* 1000M with page support */
#define GT_PHY_DTE_TYPE5 5 /* 10/100 Fast Ethernet */
/* Pkt Generator Register Type */
#define GT_PHY_PKTGEN_TYPE1 1 /* Uses Register 30 */
#define GT_PHY_PKTGEN_TYPE2 2 /* Uses Register 16 */
#define GT_PHY_PKTGEN_TYPE3 3 /* Uses Register 25 */
/* MAC Interface Loopback Register Type */
#define GT_PHY_LOOPBACK_TYPE0 0 /* Don't do anything */
#define GT_PHY_LOOPBACK_TYPE1 1 /* 0.14 only */
#define GT_PHY_LOOPBACK_TYPE2 2 /* For DEV_G15LV like device */
#define GT_PHY_LOOPBACK_TYPE3 3 /* For DEV_S15LV like device */
#define GT_PHY_LOOPBACK_TYPE4 4 /* For DEV_E1111 like device */
/* Line Loopback Register Type */
#define GT_PHY_LINE_LB_TYPE1 1 /* 0_2.14 */
#define GT_PHY_LINE_LB_TYPE2 2 /* 21_2.14 */
#define GT_PHY_LINE_LB_TYPE3 3 /* 20.14 */
#define GT_PHY_LINE_LB_TYPE4 4 /* 16.12 */
/* External Loopback Register Type */
#define GT_PHY_EX_LB_TYPE0 0 /* Don't do anything */
#define GT_PHY_EX_LB_TYPE1 1 /* For DEV_E1111 like dev */
#define GT_PHY_EX_LB_TYPE2 2 /* For DEV_E1149 like dev */
/* Restricted Page Access Type */
#define GT_PHY_PAGE_WRITE_BACK 0 /* For every device */
#define GT_PHY_PAGE_DIS_AUTO1 1 /* For 88E1111 type */
#define GT_PHY_PAGE_DIS_AUTO2 2 /* For 88E1121 type */
#define GT_PHY_NO_PAGE 3 /* No Pages */
/* definition for formula to calculate actual distance */
#ifdef FP_SUPPORT
#define FORMULA_PHY100M(_data) ((_data)*0.7861 - 18.862)
#define FORMULA_PHY1000M(_data) ((_data)*0.8018 - 28.751)
#else
#define FORMULA_PHY100M(_data) (((long)(_data)*7861 - 188620)/10000 + (((((long)(_data)*7861 - 188620)%10000) >= 5000)?1:0))
#define FORMULA_PHY1000M(_data) (((long)(_data)*8018 - 287510)/10000 + (((((long)(_data)*8018 - 287510)%10000) >= 5000)?1:0))
#endif
#define GT_ADV_VCT_CALC(_data) \
(((long)(_data)*8333 - 191667)/10000 + (((((long)(_data)*8333 - 191667)%10000) >= 5000)?1:0))
#define GT_ADV_VCT_CALC_SHORT(_data) \
(((long)(_data)*7143 - 71429)/10000 + (((((long)(_data)*7143 - 71429)%10000) >= 5000)?1:0))
/* macro to check VCT Failure */
#define IS_VCT_FAILED(_reg) \
(((_reg) & 0xFF) == 0xFF)
/* macro to find out if Amplitude is zero */
#define IS_ZERO_AMPLITUDE(_reg) \
(((_reg) & 0x7F00) == 0)
/* macro to retrieve Amplitude */
#define GET_AMPLITUDE(_reg) \
(((_reg) & 0x7F00) >> 8)
/* macro to find out if Amplitude is positive */
#define IS_POSITIVE_AMPLITUDE(_reg) \
(((_reg) & 0x8000) == 0x8000)
typedef struct _VCT_REGISTER
{
GT_U8 page;
GT_U8 regOffset;
} VCT_REGISTER;
#ifdef __cplusplus
}
#endif
#endif /* __gtPhyh */