| /******************************************************************************* |
| * 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 */ |
| |
| 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 */ |