diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/ndis/dc21x4/mii.h | 453 |
1 files changed, 453 insertions, 0 deletions
diff --git a/private/ntos/ndis/dc21x4/mii.h b/private/ntos/ndis/dc21x4/mii.h new file mode 100644 index 000000000..aae0f7b9f --- /dev/null +++ b/private/ntos/ndis/dc21x4/mii.h @@ -0,0 +1,453 @@ +/*+ + * file: mii.h + * + * Copyright (C) 1992-1995 by + * Digital Equipment Corporation, Maynard, Massachusetts. + * All rights reserved. + * + * This software is furnished under a license and may be used and copied + * only in accordance of the terms of such license and with the + * inclusion of the above copyright notice. This software or any other + * copies thereof may not be provided or otherwise made available to any + * other person. No title to and ownership of the software is hereby + * transferred. + * + * The information in this software is subject to change without notice + * and should not be construed as a commitment by digital equipment + * corporation. + * + * Digital assumes no responsibility for the use or reliability of its + * software on equipment which is not supplied by digital. + * + * + * Abstract: This file contains the definition of the MII protocol + * This file is part of the DEC's DC21X4 Ethernet Controller + * driver + * + * Author: Claudio Hazan + * + * Revision History: + * + * 20-Nov-95 ch Initial version + * 20-Dec-95 phk Modified + * +-*/ + + +#define PHY_ADDR_ALIGN 23 // shift +#define REG_ADDR_ALIGN 18 // shift + +#define MII_MDO_BIT_POSITION 17 +#define MII_MDI_BIT_POSITION 19 +#define MII_DELAY 1 // uS + + +#define MII_WRITE ((ULONG) (0x00002000)) +#define MII_CLK ((ULONG) (0x00010000)) +#define MII_MDO_MASK ((ULONG) (0x00020000)) +#define MII_MDI_MASK ((ULONG) (0x00080000)) + +#define PRE ((ULONG) (0xFFFFFFFF)) +#define MII_READ_FRAME ((ULONG) (0x60000000)) +#define MII_WRITE_FRAME ((ULONG) (0x50020000)) + +#define TEST_PATTERN 0xAA5500FF + +#define CSR_READ 0x4000 +#define SEL_SROM 0x0800 + +#define RESET_DELAY 10000 + +// MII related bits in CSR9 + +#define MII_READ ((ULONG) 0x00044000) +#define MII_WRITE_TS ((ULONG) 0x00042000) +#define MII_DATA_1 ((ULONG) 0x00020000) // MDO = 1 +#define MII_DATA_0 ((ULONG) 0x00000000) // MDO = 0 + +#define MII_10BITS_TO_MDO_SHIFT 5 // number of left shifts needed to + // put MSB of MII_PhyAddr packed + // with MII_RegNumber in the MDO + // bit position at CSR9 +#define MII_16BITS_TO_MDO_SHIFT 2 // number of left shifts needed to + // put MSB of MII write data in + // the MDO bit position at CSR9 + +#define MII_READ_DATA_MASK MII_MDI_MASK // MDI bit mask + +#define MAX_PHYADD 32 + +//PHY Types + +#define PHY_NUMBER 0 // No Multiple PHYs support yet +#define MAX_PHY_TABLE (PHY_NUMBER+1) +#define MAX_GPR_SEQUENCE 5 +#define MAX_RESET_SEQUENCE 5 + +#define NO_SELECTED_PHY 0x00FF + + +#define MiiPhyCtrlReset ((USHORT) 0x8000) +#define MiiPhyCtrlLoopBack ((USHORT) 0x4000) +#define MiiPhyCtrlSpeed100 ((USHORT) 0x2000) +#define MiiPhyCtrlEnableNway ((USHORT) 0x1000) +#define MiiPhyCtrlPowerDown ((USHORT) 0x0800) +#define MiiPhyCtrlIsolate ((USHORT) 0x0400) +#define MiiPhyCtrlRestartNway ((USHORT) 0x0200) +#define MiiPhyCtrlDuplexMode ((USHORT) 0x0100) +#define MiiPhyCtrlCollisionTest ((USHORT) 0x0080) +#define MiiPhyCtrlReservedBitsMask ((USHORT) 0x007F) +#define MiiPhyCtrlForce10 ((USHORT) 0xCEFF) + + +#define MiiPhy100BaseT4 ((USHORT) 0x8000) +#define MiiPhy100BaseTxFD ((USHORT) 0x4000) +#define MiiPhy100BaseTx ((USHORT) 0x2000) +#define MiiPhy10BaseTFD ((USHORT) 0x1000) +#define MiiPhy10BaseT ((USHORT) 0x0800) +#define MiiPhyStatReservedBitsMask ((USHORT) 0x07C0) +#define MiiPhyNwayComplete ((USHORT) 0x0020) +#define MiiPhyRemoteFault ((USHORT) 0x0010) +#define MiiPhyNwayCapable ((USHORT) 0x0008) +#define MiiPhyLinkStatus ((USHORT) 0x0004) +#define MiiPhyJabberDetect ((USHORT) 0x0002) +#define MiiPhyExtendedCapabilities ((USHORT) 0x0001) + +#define MiiPhyMediaCapabilitiesMask (MiiPhy100BaseT4 | \ + MiiPhy100BaseTxFD | \ + MiiPhy100BaseTx | \ + MiiPhy10BaseTFD | \ + MiiPhy10BaseT) + +#define MiiPhyCapabilitiesMask (MiiPhyMediaCapabilitiesMask | \ + MiiPhyNwayCapable) + +// Vendors' PHY IDs + +//National + +#define DP83840_0 ((ULONG) 0x20005C00) + +//Broadcom + +#define BCM5000_0 ((ULONG) 0x03E00000) +#define MII_BROADCOM_EXTENDED_REG_ADDRESS 16 + +#define BROADCOM_EXT_REG_FORCE_FAIL_EN_MASK 0x100 +#define BROADCOM_EXT_REG_SPEED_MASK 0x2 + +//Generic + +#define GENERIC_PHY ((ULONG) 0xFFFFFFFF) + +// Useful masks + +#define VENDOR_ID_MASK ((ULONG) 0xFFFFFC00) +#define VENDOR_ID_RIGHT_JUSTIFY 10 + +#define VENDOR_MODEL_MASK ((USHORT) 0x03F0) +#define VENDOR_MODEL_RIGHT_JUSTIFY 4 + +#define VENDOR_Rev_MASK ((USHORT) 0x000F) + +#define MiiPhyNwayNextPageAble ((USHORT) 0x8000) +#define MiiPhyNwayACK ((USHORT) 0x4000) +#define MiiPhyNwayRemoteFault ((USHORT) 0x2000) +#define MiiPhyNwayReservedBitsMask ((USHORT) 0x1C00) +#define MiiPhyNway100BaseT4 ((USHORT) 0x0200) +#define MiiPhyNway100BaseTxFD ((USHORT) 0x0100) +#define MiiPhyNway100BaseTx ((USHORT) 0x0080) +#define MiiPhyNway10BaseTFD ((USHORT) 0x0040) +#define MiiPhyNway10BaseT ((USHORT) 0x0020) +#define MiiPhyNwaySelectorMask ((USHORT) 0x001F) + +// MiiPhyNwayCapabilitiesMask - 0x03E0 + +#define MiiPhyNwayCapabilitiesMask (MiiPhyNway100BaseT4 | \ + MiiPhyNway100BaseTxFD | \ + MiiPhyNway100BaseTx | \ + MiiPhyNway10BaseTFD | \ + MiiPhyNway10BaseT) + +#define NWAY_802_3_Selector 1 + +#define MiiPhyNwayExpReservedBitsMask ((USHORT) 0xFFE0) +#define MiiPhyNwayExpMultipleLinkFault ((USHORT) 0x0010) +#define MiiPhyNwayExpLinkPartnerNextPageAble ((USHORT) 0x0008) +#define MiiPhyNwayExpNextPageAble ((USHORT) 0x0004) +#define MiiPhyNwayExpReceivedLinkCodePage ((USHORT) 0x0002) +#define MiiPhyNwayExpLinkPartnerNwayAble ((USHORT) 0x0001) + + +// MII PHY Register's + +#define PhyControlReg 0 +#define PhyStatusReg 1 +#define PhyId_1 2 +#define PhyId_2 3 +#define PhyNwayAdvertisement 4 +#define PhyNwayLinkPartnerAbility 5 +#define PhyNwayExpansion 6 +#define PhyNwayNextPageTransmit 7 +#define PhyReserved 8 // 8-15 are PHY's reserved +#define PhyVendorSpecific 16 // 16-31 are Vendor's Specific +#define NatPhyParRegister 25 +#define MAX_PHY_REGS 32 + +#define DELAY(_time) NdisStallExecution(_time) + +//National Phy PAR Register +#define PAR_SPEED_10 ((USHORT)0x0040) + + +// MAC connection capabilities + +#define MAC_CONN_UNKNOWN ((USHORT) 0xFFFF) + + +//PHY Type Values + +#define PHY_TYPE_UNKNOWN ((UCHAR) 0xFF) // Initializing, true state or type not known +#define PHY_TYPE_SIA 0 // 10MB/s Manchester +#define PHY_TYPE_MII 1 // MII PHY + +//PHY Operation Modes + +#define PHY_OM_UNKNOWN ((UCHAR) 0xFF) + +//PHY_OM_AUTOSENSE + +#define PHY_OM_NWAY MiiPhyNwayCapable +#define PHY_NO_SPECIAL_OM 0 + +//Media Attachment Interface Status + +#define MAI_UNKNOWN ((UCHAR) 0xFF) +#define MAI_Absent 0 +#define MAI_Present 1 +#define MAI_PresentConnected 3 + +// MAU list + +#define MAU_UNKNOWN 0 +#define MAU_10BaseT MiiPhy10BaseT +#define MAU_10BaseTFD MiiPhy10BaseTFD +//MAU_BNC +//MAU_AUI +#define MAU_100BaseT4 MiiPhy100BaseT4 +#define MAU_100BaseTX MiiPhy100BaseTx +#define MAU_100BaseFX MiiPhy100BaseTx +#define MAU_100BaseTXFD MiiPhy100BaseTxFD +#define MAU_100BaseFXFD MiiPhy100BaseTxFD +//MAU_10BaseFX + +#define NWAY_10BaseT MiiPhyNway10BaseT +#define NWAY_100BaseT4 MiiPhyNway100BaseT4 +#define NWAY_100BaseTX MiiPhyNway100BaseTx +#define NWAY_10BaseTFD MiiPhyNway10BaseTFD +#define NWAY_100BaseTXFD MiiPhyNway100BaseTxFD + +// define Media status + +#define MEDIA_STATE_UNKNOWN 0x00FF +#define MEDIA_STATE_UNDEFINED 0x00FE +#define MEDIA_READ_REGISTER_FAILED 0x00FD +#define MEDIA_LINK_FAIL 0x0000 +#define MEDIA_LINK_PASS 0x0001 +#define MEDIA_LINK_PASS_WITH_PF 0x0002 + +#define MEDIA_STATUS_MASK 0x00FF + +// define NWAY Availability & status + +#define NWAY_UNKNOWN 0xFF00 //PHY is still initializing +#define NWAY_NOT_SUPPORTED 0x0000 //No NWAY in this Phy +#define NWAY_SUPPORTED 0x0100 //NWAY supported +#define NWAY_DISABLED 0x0200 //NWAY present but disabled +#define NWAY_CONFIGURING 0x0300 //NWAY still configuring +#define NWAY_COMPLETE 0x0400 //NWAY negotiation is done + +#define NWAY_STATUS_MASK 0xFF00 + +typedef enum _MII_STATUS { + MiiGenAdminReset, + MiiGenAdminOperational, + MiiGenAdminStandBy, + MiiGenAdminPowerDown, + MiiGenAdminForce10, + MiiGenAdminForce10Fd, + MiiGenAdminRelease10 +} MII_STATUS, *PMII_STATUS; + +typedef USHORT CAPABILITY, *PCAPABILITY; + +typedef struct _PHY_EXT_ROUTINES_ENTRIES { + + BOOLEAN (*PhyInit)(PDC21X4_ADAPTER,PMII_PHY_INFO); + void (*PhyGetCapabilities)(PMII_PHY_INFO,PCAPABILITY); + BOOLEAN (*PhySetConnectionType)(PDC21X4_ADAPTER,PMII_PHY_INFO,USHORT,USHORT); + BOOLEAN (*PhyGetConnectionType)(PDC21X4_ADAPTER,PMII_PHY_INFO,PUSHORT); + BOOLEAN (*PhyGetConnectionStatus)(PDC21X4_ADAPTER,PMII_PHY_INFO,PUSHORT); + void (*PhyAdminStatus)(PDC21X4_ADAPTER,PMII_PHY_INFO,PMII_STATUS); + void (*PhyAdminControl)(PDC21X4_ADAPTER,PMII_PHY_INFO,PMII_STATUS); + +}PHY_EXT_ROUTINES_ENTRIES; + +typedef struct _PHY_INT_ROUTINES_ENTRIES { + + BOOLEAN (*PhyReadRegister)(PDC21X4_ADAPTER,PMII_PHY_INFO,USHORT,PUSHORT); + BOOLEAN (*PhyWriteRegister)(PDC21X4_ADAPTER,PMII_PHY_INFO,USHORT,PUSHORT); + void (*PhyNwayGetLocalAbility)(PDC21X4_ADAPTER,PMII_PHY_INFO,PCAPABILITY); + void (*PhyNwaySetLocalAbility)(PDC21X4_ADAPTER,PMII_PHY_INFO,USHORT); + void (*PhyNwayGetPartnerAbility)(PDC21X4_ADAPTER,PMII_PHY_INFO,PCAPABILITY); + +}PHY_INT_ROUTINES_ENTRIES; + + +typedef struct _MII_PHY_INFO { + + BOOLEAN StructValid; + USHORT PhyAddress; + ULONG PhyId; + USHORT PhyCapabilities; + USHORT PhyMediaAdvertisement; + USHORT PhyRegs[MAX_PHY_REGS]; + USHORT PreviousControl; + PHY_EXT_ROUTINES_ENTRIES PhyExtRoutines; + PHY_INT_ROUTINES_ENTRIES PhyIntRoutines; + +} MII_PHY_INFO, *PMII_PHY_INFO; + + +typedef struct _MII_GEN_INFO { + + USHORT NumOfPhys; + USHORT PhysCapabilities; + USHORT SelectedPhy; // 0 means that all phys are isolated + PMII_PHY_INFO Phys[MAX_PHY_TABLE]; + +} MII_GEN_INFO, *PMII_GEN_INFO; + + +//Data Structure holding PHY's registers mask + +static const USHORT PhyRegsReservedBitsMasks[] = { + + MiiPhyCtrlReservedBitsMask, // Control reg reserved bits mask + MiiPhyStatReservedBitsMask, // Status reg reserved bits PhyID reserved bits mask + 0, // PhyID reserved bits mask + 0, // PhyID reserved bits mask + MiiPhyNwayReservedBitsMask, // Nway Local ability reserved bits mask + MiiPhyNwayReservedBitsMask, // Nway Partner ability reserved bits mask + MiiPhyNwayExpReservedBitsMask, // Nway Expansion + 0,0,0,0,0,0,0,0,0,0,0,0,0, // Other regs + 0,0,0,0,0,0,0,0,0,0,0,0 // Other regs + }; + +static const UINT AdminControlConversionTable[] = { + MiiPhyCtrlReset, // Reset + 0x0, // Operational + MiiPhyCtrlIsolate, // StandBy / Isolate + MiiPhyCtrlPowerDown, // Powerdown + 0x0, // Force10 + MiiPhyCtrlDuplexMode, // Force10Fd + 0x0 // Release10 + }; + + +static const USHORT MediaBitTable[] = { + 0x0000, // TP + 0x0000, // BNC + 0x0000, // AUI + 0x0000, // 100BaseTx/SymScr + 0x0000, // TP-FD + 0x0000, // 100BaseTx-FD/SymScr-FD + 0x0000, // 100BaseT4 + 0x0000, // 100BaseFx + 0x0000, // 100BaseFx-FD + 0x0800, // MediaMiiTP + 0x1000, // MediaMiiTpFD + 0x0000, // MediaMiiBNC + 0x0000, // MediaMiiAUI + 0x2000, // MediaMii100BaseTX + 0x4000, // MediaMii100BaseTxFD + 0x8000, // MediaMii100BaseT4 + 0x0000, // MediaMii100BaseFX + 0x0000 // MediaMii100BaseFxFD +}; + +static const USHORT ConvertMediaTypeToMiiType[] = { + 0x0009, // TP -> MII TP + 0x000B, // BNC -> MII BNC + 0x000C, // AUI -> MII AUI + 0x000D, // 100BaseTx -> MII 100BaseTx + 0x020A, // TP-FD -> MII TP-FD + 0x020E, // 100BaseTx-FD -> MII 100BaseTxFD + 0x000F, // 100BaseT4 -> MII 100BaseT4 + 0x0010, // 100BaseFx -> MII 100BaseFx + 0x0211 // 100BaseFx-FD -> MII 100BaseFxFD +}; + +static const USHORT MediaToCommandConversionTable[] = { + 0x0000, // TP + 0x0000, // BNC + 0x0000, // AUI + 0x2000, // 100BaseTx/SymScr + 0x0100, // TP-FD + 0x2100, // 100BaseTx-FD/SymScr-FD + 0x2000, // 100BaseT4 + 0x2000, // 100BaseFx + 0x2100, // 100BaseFx-FD + 0x0000, // MediaMiiTP + 0x0100, // MediaMiiTpFD + 0x0000, // MediaMiiBNC + 0x0000, // MediaMiiAUI + 0x2000, // MediaMii100BaseTX + 0x2100, // MediaMii100BaseTxFD + 0x2000, // MediaMii100BaseT4 + 0x2000, // MediaMii100BaseFX + 0x2100 // MediaMii100BaseFxFD +}; + +static const USHORT MediaToNwayConversionTable[] = { + 0x0020, // TP + 0x0000, // BNC + 0x0000, // AUI + 0x0080, // 100BaseTx/SymScr + 0x0040, // TP-FD + 0x0100, // 100BaseTx-FD/SymScr-FD + 0x0200, // 100BaseT4 + 0x0080, // 100BaseFx + 0x0100, // 100BaseFx-FD + 0x0020, // MediaMiiTP + 0x0040, // MediaMiiTpFD + 0x0000, // MediaMiiBNC + 0x0000, // MediaMiiAUI + 0x0080, // MediaMii100BaseTX + 0x0100, // MediaMii100BaseTxFD + 0x0200, // MediaMii100BaseT4 + 0x0080, // MediaMii100BaseFX + 0x0100 // MediaMii100BaseFxFD +}; + +static const USHORT MediaToStatusConversionTable[] = { + 0x0800, // TP + 0x0000, // BNC + 0x0000, // AUI + 0x2000, // 100BaseTx/SymScr + 0x1000, // TP-FD + 0x4000, // 100BaseTx-FD/SymScr-FD + 0x8000, // 100BaseT4 + 0x2000, // 100BaseFx + 0x4000, // 100BaseFx-FD + 0x0800, // MediaMiiTP + 0x1000, // MediaMiiTpFD + 0x0000, // MediaMiiBNC + 0x0000, // MediaMiiAUI + 0x2000, // MediaMii100BaseTX + 0x4000, // MediaMii100BaseTxFD + 0x8000, // MediaMii100BaseT4 + 0x2000, // MediaMii100BaseFX + 0x4000 // MediaMii100BaseFxFD + }; + |