Source to iokit/Drivers/network/drvPPCUniN/UniNEnetRegisters.h


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * The contents of this file constitute Original Code as defined in and
 * are subject to the Apple Public Source License Version 1.1 (the
 * "License").  You may not use this file except in compliance with the
 * License.  Please obtain a copy of the License at
 * http://www.apple.com/publicsource and read it before using this file.
 * 
 * This Original Code and all software distributed under the License are
 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */
/*
 * Copyright (c) 1998-1999 Apple Computer
 *
 * Interface definition for the Sun GEM (UniN) Ethernet controller.
 *
 *
 */

/*
 *      Miscellaneous defines...
 */
#define CACHE_LINE_SIZE         32                                              /* Bytes */

#define RX_RING_LENGTH          128                                             /* Packet descriptors */

#define TX_RING_LENGTH          128                                             /* Packet descriptors */
#define TX_MAX_MBUFS            (TX_RING_LENGTH / 2)

#define NETWORK_BUFSIZE         (((ETHERMAXPACKET + ETHERCRC) + 7) & ~7)

#define TRANSMIT_QUEUE_SIZE     256

#define WATCHDOG_TIMER_MS       300
#define TX_KDB_TIMEOUT          1000

#define PCI_PERIOD_33MHz        30
#define PCI_PERIOD_66MHz        15
#define RX_INT_LATENCY_uS       250             

/*
 *      Register lengths 
 */
#define kGEMLength_1                            0x00010000
#define kGEMLength_2                            0x00020000
#define kGEMLength_4                            0x00040000


/*
 *      Receive/Transmit descriptor
 *
 */
typedef struct _GEMRxDescriptor
{
    u_int16_t           tcpPseudoChecksum;
    u_int16_t           frameDataSize;
    u_int32_t           flags;
    u_int32_t           bufferAddrLo;
    u_int32_t           bufferAddrHi;
} GEMRxDescriptor;

/*
 *    Note: Own is in the high bit of frameDataSize field
 */
#define kGEMRxDescFrameSize_Mask                0x7FFF
#define kGEMRxDescFrameSize_Own                 0x8000

/*
 * Rx flags field
 */
#define kGEMRxDescFlags_HashValueBit            0x00001000
#define kGEMRxDescFlags_HashValueMask           0x0FFFF000
#define kGEMRxDescFlags_HashPass                0x10000000
#define kGEMRxDescFlags_AlternateAddr           0x20000000
#define kGEMRxDescFlags_BadCRC                  0x40000000


typedef struct _GEMTxDescriptor
{
    u_int32_t           flags0;
    u_int32_t           flags1;
    u_int32_t           bufferAddrLo;
    u_int32_t           bufferAddrHi;
} GEMTxDescriptor;

/*
 * 
 */
#define kGEMTxDescFlags0_BufferSizeMask         0x00007FFF
#define kGEMTxDescFlags0_BufferSizeBit          0x00000001
#define kGEMTxDescFlags0_ChecksumStartMask      0x00FF8000
#define kGEMTxDescFlags0_ChecksumStartBit       0x00008000
#define kGEMTxDescFlags0_ChecksumStuffMask      0x1F000000
#define kGEMTxDescFlags0_ChecksupStuffBit       0x01000000
#define kGEMTxDescFlags0_ChecksumEnable         0x20000000
#define kGEMTxDescFlags0_EndOfFrame             0x40000000
#define kGEMTxDescFlags0_StartOfFrame           0x80000000

#define kGEMTxDescFlags1_Int                    0x00000001
#define kGEMTxDescFlags1_NoCRC                  0x00000002

/*
 *      Global Resources
 */
#define kGEMSEBState                            (0x0000 | kGEMLength_1)
#define kGEMSEBState_ArbStateMask               0x03
#define kGEMSEBState_RxWon                      0x04


#define kGEMConfig                              (0x0004 | kGEMLength_2)
#define kGEMConfig_InfiniteBurst                0x0001
#define kGEMConfig_TxDMALimitMask               0x003E
#define kGEMConfig_TxDMALimitBit                0x0002
#define kGEMConfig_RxDMALimitMask               0x07C0
#define kGEMConfig_RxDMALimitBit                0x0040

#define kGEMBurstSize                           (CACHE_LINE_SIZE / 8)           

#define kGEMInterruptStatus                     (0x000C | kGEMLength_4)
#define kGEMInterruptStatus_TxInt               0x00000001
#define kGEMInterruptStatus_TxAll               0x00000002
#define kGEMInterruptStatus_TxDone              0x00000004
#define kGEMInterruptStatus_RxDone              0x00000010
#define kGEMInterruptStatus_RxEmpty             0x00000020
#define kGEMInterruptStatus_RxTagError          0x00000040
#define kGEMInterruptStatus_PCSInt              0x00002000
#define kGEMInterruptStatus_TxMacInt            0x00004000
#define kGEMInterruptStatus_RxMacInt            0x00008000
#define kGEMInterruptStatus_MacControlInt       0x00010000
#define kGEMInterruptStatus_MIFInt              0x00020000
#define kGEMInterruptStatus_PCIErrorInt         0x00040000
#define kGEMInterruptStatus_Mask                0x0007FFFF

#define kGEMInterruptMask                       (0x0010 | kGEMLength_4)
#define kGEMInterruptMask_TxInt                 0x00000001
#define kGEMInterruptMask_TxAll                 0x00000002
#define kGEMInterruptMask_TxDone                0x00000004
#define kGEMInterruptMask_RxDone                0x00000010
#define kGEMInterruptMask_RxEmpty               0x00000020
#define kGEMInterruptMask_RxTagError            0x00000040
#define kGEMInterruptMask_PCSInt                0x00002000
#define kGEMInterruptMask_TxMacInt              0x00004000
#define kGEMInterruptMask_RxMacInt              0x00008000
#define kGEMInterruptMask_MacControlInt         0x00010000
#define kGEMInterruptMask_MIFInt                0x00020000
#define kGEMInterruptMask_PCIErrorInt           0x00040000

#define kGEMInterruptAck                        (0x0014 | kGEMLength_4)
#define kGEMInterruptAck_TxInt                  0x00000001
#define kGEMInterruptAck_TxAll                  0x00000002
#define kGEMInterruptAck_TxDone                 0x00000004
#define kGEMInterruptAck_RxDone                 0x00000010
#define kGEMInterruptAck_RxEmpty                0x00000020
#define kGEMInterrupAck_RxTagError              0x00000040

#define kGEMInterruptAltStatus                  (0x001C | kGEMLength_4)
#define kGEMInterruptAltStatus_TxInt            0x00000001
#define kGEMInterruptAltStatus_TxAll            0x00000002
#define kGEMInterruptAltStatus_TxDone           0x00000004
#define kGEMInterruptAltStatus_RxDone           0x00000010
#define kGEMInterruptAltStatus_RxEmpty          0x00000020
#define kGEMInterruptAltStatus_RxTagError       0x00000040
#define kGEMInterruptAltStatus_PCSInt           0x00002000
#define kGEMInterruptAltStatus_TxMacInt         0x00004000
#define kGEMInterruptAltStatus_RxMacInt         0x00008000
#define kGEMInterruptAltStatus_MacControlInt    0x00010000
#define kGEMInterruptAltStatus_MIFInt           0x00020000
#define kGEMInterruptAltStatus_PCIErrorInt      0x00040000

#define kGEMPCIErrorStatus                      (0x1000 | kGEMLength_1)
#define kGEMPCIErrorStatus_BadAck64             0x01
#define kGEMPCIErrorStatus_TransactTimeout      0x02
#define kGEMPCIErrorStatus_Other                0x04            

#define kGEMPCIErrorMask                        (0x1004 | kGEMLength_1)
#define kGEMPCIErrorMask_BadAck64               0x01
#define kGEMPCIErrorMask_TransactTimeout        0x02
#define kGEMPCIErrorMask_Other                  0x04            

#define kGEMBIFConfig                           (0x1008 | kGEMLength_1)
#define kGEMBIFConfig_SlowClk                   0x01
#define kGEMBIFConfig_64BitDisable              0x04
#define kGEMBIFConfig_66Mhz                     0x08

#define kGEMBIFDiagnostic                       (0x100C | kGEMLength_4)
#define kGEMBIFDiagnostic_PCIBurstStateMask     0x007F0000
#define kGEMBIFDiagnostic_PCIBurstStateBit      0x00010000
#define kGEMBIFDiagnostic_BIFStateMachineMask   0xFF000000
#define kGEMBIFDiagnostic_BIFStateMachineBit    0x01000000

#define kGEMSoftwareReset                       (0x1010 | kGEMLength_1)
#define kGEMSoftwareReset_TxReset               0x01
#define kGEMSoftwareReset_RxReset               0x02
#define kGEMSoftwareReset_PhyReset              0x04

/*
 *      Transmit DMA Registers
 */
#define kGEMTxKick                              (0x2000 | kGEMLength_2)

#define kGEMTxConfig                            (0x2004 | kGEMLength_4)
#define kGEMTxConfig_TxDMAEnable                0x00000001
#define kGEMTxConfig_TxDescRingSizeMask         0x0000001E
#define kGEMTxConfig_TxDescRingSizeBit          0x00000002
#define kGEMTxConfig_TxRingSizeMin              32
#define kGEMTxConfig_TxFIFOPioSel               0x00000020
#define kGEMTxConfig_TxFIFOThresholdMask        0x000FFC00
#define kGEMTxConfig_TxFIFOThresholdBit         0x00000400
#define kGEMTxConfig_PacedMode                  0x00100000

#define kGEMTxConfig_TxFIFOThresholdDefault     0x7FF

#define kGEMTxDescBaseLo                        (0x2008 | kGEMLength_4)
#define kGEMTxDescBaseHi                        (0x200C | kGEMLength_4)

#define kGEMTxFIFOWritePtr                      (0x2014 | kGEMLength_2)
#define kGEMTxFIFOShadowWritePtr                (0x2018 | kGEMLength_2)

#define kGEMTxFIFOReadPtr                       (0x201C | kGEMLength_2)
#define kGEMTxFIFOShadowReadPtr                 (0x2020 | kGEMLength_2)

#define kGEMTxFIFOPktCounter                    (0x2024 | kGEMLength_2)

#define kGEMTxStateMachine                      (0x2028 | kGEMLength_4)
#define kGEMTxStateMachine_ChainStateMask       0x000003FF
#define kGEMTxStateMachine_ChainStateBit        0x00000001
#define kGEMTxStateMachine_ChecksumStateMask    0x00000C00
#define kGEMTxStateMachine_ChecksumStateBit     0x00000400
#define kGEMTxStateMachine_FIFOLoadStateMask    0x0001F000
#define kGEMTxStateMachine_FIFOLoadStateBit     0x00001000
#define kGEMTxStateMachine_FIFOUnloadStateMask  0x003C0000
#define kGEMTxStateMachine_FIFOUnloadStateBit   0x00040000

#define kGEMTxDataPtrLo                         (0x2030 | kGEMLength_4)
#define kGEMTxDataPtrHi                         (0x2034 | kGEMLength_4)

#define kGEMTxCompletion                        (0x2100 | kGEMLength_2)

#define kGEMTxFIFOAddr                          (0x2104 | kGEMLength_2)
#define kGEMTxFIFOTag                           (0x2108 | kGEMLength_1)
#define kGEMTxFIFODataLo                        (0x210C | kGEMLength_4)
#define kGEMTxFIFODataHiTag1                    (0x2110 | kGEMLength_4)
#define kGEMTxFIFODataHiTag0                    (0x2114 | kGEMLength_4)

#define kGEMTxFIFOSize                          (0x2118 | kGEMLength_2)
#define kGEMTxFIFOSize_Units                    64

/*
 *      Receive DMA Registers
 */
#define kGEMRxConfig                            (0x4000 | kGEMLength_4)
#define kGEMRxConfig_RxDMAEnable                0x00000001
#define kGEMRxConfig_RxDescRingSizeMask         0x0000001E              
#define kGEMRxConfig_RxDescRingSizeBit          0x00000002
#define kGEMRxConfig_RxRingSizeMin              32
#define kGEMRxConfig_BatchDisable               0x00000020
#define kGEMRxConfig_FirstByteOffsetMask        0x00001C00              
#define kGEMRxConfig_FirstByteOffsetBit         0x00000400
#define kGEMRxConfig_ChecksumStartOffsetMask    0x000FE000              
#define kGEMRxConfig_ChecksumStartOffsetBit     0x00002000
#define kGEMRxConfig_RxDMAThresholdMask         0x07000000
#define kGEMRxConfig_RxDMAThresholdBit          0x01000000
#define kGEMRxConfig_RxDMAThresholdMin          64

#define kGEMRxConfig_RxDMAThresholdDefault      1               /* (128)  Log2(RxDMAThresh) - 6 */

#define kGEMRxDescBaseLo                        (0x4004 | kGEMLength_4)
#define kGEMRxDescBaseHi                        (0x4008 | kGEMLength_4)

#define kGEMRxFIFOWritePtr                      (0x400C | kGEMLength_2)
#define kGEMRxFIFOShadowWritePtr                (0x4010 | kGEMLength_2)
#define kGEMRxFIFOReadPtr                       (0x4014 | kGEMLength_2)
#define kGEMRxFIFOPktCounter                    (0x4018 | kGEMLength_2)

#define kGEMRxStateMachine                      (0x401C | kGEMLength_4)
#define kGEMRxStateMachine_UnloadDataStateMask  0x0000000F
#define kGEMRxStateMachine_UnloadDataStateBit   0x00000001
#define kGEMRxStateMachine_UnloadDescStateMask  0x000000F0
#define kGEMRxStateMachine_UnloadDescStateBit   0x00000010
#define kGEMRxStateMachine_FlowControlStateMask 0x00000F00
#define kGEMRxStateMachine_FlowControlStateBit  0x00000100
#define kGEMRxStateMachine_PackStateMask        0x00003C00
#define kGEMRxStateMachine_PackStateBit         0x00000400
#define kGEMRxStateMachine_LoadStateMask        0x0003C000
#define kGEMRxStateMachine_LoadStateBit         0x00004000


#define kGEMRxPauseThresholds                   (0x4020 | kGEMLength_4)
#define kGEMRxPauseThresholds_OffMask           0x000001FF
#define kGEMRxPauseThresholds_OffBit            0x00000001
#define kGEMRxPauseThresholds_OnMask            0x001FF000
#define kGEMRxPauseThresholds_OnBit             0x00001000

#define kGEMRxPauseThresholds_Units             64

#define kGEMRxDataPtrLo                         (0x4024 | kGEMLength_4)
#define kGEMRxDataPtrHi                         (0x4028 | kGEMLength_4)

#define kGEMRxKick                              (0x4100 | kGEMLength_2)

#define kGEMRxCompletion                        (0x4104 | kGEMLength_2)

#define kGEMRxIntBlanking                       (0x4108 | kGEMLength_4)
#define kGEMRxIntBlanking_NumPktMask            0x000001FF
#define kGEMRxIntBlanking_NumPktBit             0x00000001
#define kGEMRxIntBlanking_TimeMask              0x000FF000
#define kGEMRxIntBlanking_TimeBit               0x00001000
#define kGEMRxIntBlanking_Units                 2048

#define kGEMRxFIFOAddr                          (0x410C | kGEMLength_2)
#define kGEMRxFIFOTag                           (0x4110 | kGEMLength_1)
#define kGEMRxDataLo                            (0x4114 | kGEMLength_4)
#define kGEMRxDataHiTag0                        (0x4118 | kGEMLength_4)
#define kGEMRxDataHiTag1                        (0x411C | kGEMLength_4)

#define kGEMRxFIFOSize                          (0x4120 | kGEMLength_2)
#define kGEMRxFIFOSize_Units                    64


/*
 *      MAC Registers
 */
#define kGEMMacTxResetCmd                       (0x6000 | kGEMLength_1)
#define kGEMMacTxResetCmd_Reset                 0x01

#define kGEMMacRxResetCmd                       (0x6004 | kGEMLength_1)
#define kGEMMacRxResetCmd_Reset                 0x01

#define kGEMMacSendPauseCmd                     (0x6008 | kGEMLength_4)
#define kGEMMacSendPauseCmd_TimeMask            0x0000FFFF
#define kGEMMacSendPauseCmd_Bit                 0x00000001
#define kGEMMacSendPauseCmd_SendPause           0x00010000
#define kGEMMacSendPauseCmd_Default             0x1BF0

#define kGEMMacTxStatus                         (0x6010 | kGEMLength_2)
#define kGEMMacTxStatus_FrameSent               0x0001
#define kGEMMacTxStatus_TxUnderrun              0x0002
#define kGEMMacTxStatus_MaxPktError             0x0004
#define kGEMMacTxStatus_NormalCollsnOverflow    0x0008
#define kGEMMacTxStatus_ExcessCollsnOverflow    0x0010
#define kGEMMacTxStatus_LateCollsnOverflow      0x0020
#define kGEMMacTxStatus_FirstCollsnOverflow     0x0040
#define kGEMMacTxStatus_DeferTimerOverflow      0x0080
#define kGEMMacTxStatus_PeakAttemptsOverflow    0x0100

#define kGEMMacRxStatus                         (0x6014 | kGEMLength_2)
#define kGEMMacRxStatus_FrameReceived           0x0001
#define kGEMMacRxStatus_RxFIFOOverflow          0x0002
#define kGEMMacRxStatus_FrameCounterOverflow    0x0004
#define kGEMMacRxStatus_AlignErrorOverflow      0x0008
#define kGEMMacRxStatus_CRCErrorOverflow        0x0010
#define kGEMMacRxStatus_LengthErrorOverflow     0x0020
#define kGEMMacRxStatus_CodeErrorOverflow       0x0040

#define kGEMMacControlStatus                    (0x6018 | kGEMLength_4)
#define kGEMMacControlStatus_PauseReceived      0x00000001
#define kGEMMacControlStatus_PauseState         0x00000002
#define kGEMMacControlStatus_NotPausedState     0x00000004
#define kGEMMacControlStatus_PauseTimeMask      0xFFFF0000
#define kGEMMacControlStatus_PauseTimeBit       0x00010000

#define kGEMMacTxMask                           (0x6020 | kGEMLength_2)
#define kGEMMacTxMask_FrameSent                 0x0001
#define kGEMMacTxMask_TxUnderrun                0x0002
#define kGEMMacTxMask_MaxPktError               0x0004
#define kGEMMacTxMask_NormalCollsnOverflow      0x0008
#define kGEMMacTxMask_ExcessCollsnOverflow      0x0010
#define kGEMMacTxMask_LateCollsnOverflow        0x0020
#define kGEMMacTxMask_FirstCollsnOverflow       0x0040
#define kGEMMacTxMask_DeferTimerOverflow        0x0080
#define kGEMMacTxMask_PeakAttemptsOverflow      0x0100

#define kGEMMacTxMaskDefault                    0xFFFF

#define kGEMMacRxMask                           (0x6024 | kGEMLength_2)
#define kGEMMacRxMask_FrameReceived             0x0001
#define kGEMMacRxMask_RxFIFOOverflow            0x0002
#define kGEMMacRxMask_FrameCounterOverflow      0x0004
#define kGEMMacRxMask_AlignErrorOverflow        0x0008
#define kGEMMacRxMask_CRCErrorOverflow          0x0010
#define kGEMMacRxMask_LengthErrorOverflow       0x0020
#define kGEMMacRxMask_CodeErrorOverflow         0x0040

#define kGEMMacRxMaskDefault                    0xFFFF

#define kGEMMacControlMask                      (0x6028 | kGEMLength_1)
#define kGEMMacControlMask_PauseReceived        0x01
#define kGEMMacControlMask_PauseState           0x02
#define kGEMMacControlMask_NotPausedState       0x04

#define kGEMMacControlMaskDefault               0xFF


#define kGEMMacTxMacConfig                      (0x6030 | kGEMLength_2)
#define kGEMMacTxMacConfig_TxMacEnable          0x0001
#define kGEMMacTxMacConfig_IgnoreCarrierSense   0x0002
#define kGEMMacTxMacConfig_IgnoreCollsn         0x0004
#define kGEMMacTxMacConfig_EnableIPG0           0x0008
#define kGEMMacTxMacConfig_NeverGiveUp          0x0010
#define kGEMMacTxMacConfig_NeverGiveUpNoLimit   0x0020
#define kGEMMacTxMacConfig_NoBackoff            0x0040
#define kGEMMacTxMacConfig_SlowDown             0x0080
#define kGEMMacTxMacConfig_NoFCS                0x0100
#define kGEMMacTxMacConfig_TxCarrierExt         0x0200


#define kGEMMacRxMacConfig                      (0x6034 | kGEMLength_2)
#define kGEMMacRxMacConfig_RxMacEnable          0x0001
#define kGEMMacRxMacConfig_StripPad             0x0002
#define kGEMMacRxMacConfig_StripFCS             0x0004
#define kGEMMacRxMacConfig_ReceiveAll           0x0008
#define kGEMMacRxMacConfig_ReceiveAllMulticast  0x0010
#define kGEMMacRxMacConfig_HashFilterEnable     0x0020
#define kGEMMacRxMacConfig_AddrFilterEnable     0x0040
#define kGEMMacRxMacConfig_PassErrorFrames      0x0080
#define kGEMMacRxMacConfig_RxCarrierExt         0x0100


#define kGEMMacControlConfig                    (0x6038 | kGEMLength_1)
#define kGEMMacControlConfig_SendPauseEnable    0x01
#define kGEMMacControlConfig_ReceivePauseEnable 0x02
#define kGEMMacControlConfig_PassControlFrames  0x04

#define kGEMMacXIFConfig                        (0x603C | kGEMLength_1)
#define kGEMMacXIFConfig_TxMIIOutputEnable      0x01
#define kGEMMacXIFConfig_MIIIntLoopback         0x02
#define kGEMMacXIFConfig_DisableEcho            0x04
#define kGEMMacXIFConfig_GMIIMode               0x08
#define kGEMMacXIFConfig_MIIBufferEnable        0x10
#define kGEMMacXIFConfig_LinkLed                0x20
#define kGEMMacXIFConfig_FullDuplexLed          0x40

#define kGEMMacInterPktGap0                     (0x6040 | kGEMLength_1)
#define kGEMMacInterPktGap0_Default             0x00

#define kGEMMacInterPktGap1                     (0x6044 | kGEMLength_1)
#define kGEMMacInterPktGap1_Default             0x08

#define kGEMMacInterPktGap2                     (0x6048 | kGEMLength_1)
#define kGEMMacInterPktGap2_Default             0x04

#define kGEMMacSlotTime                         (0x604C | kGEMLength_2)
#define kGEMMacSlotTime_Default                 0x0040

#define kGEMMacMinFrameSize                     (0x6050 | kGEMLength_2)
#define kGEMMacMinFrameSize_Default             0x0040

#define kGEMMacMaxFrameSize                     (0x6054 | kGEMLength_2)
#define kGEMMacMaxFrameSize_Default             0x05EE
#define kGEMMacMaxFrameSize_Aligned		((kGEMMacMaxFrameSize_Default + 7) & ~7)

#define kGEMMacPASize                           (0x6058 | kGEMLength_2)
#define kGEMMacPASize_Default                   0x07

#define kGEMMacJamSize                          (0x605C | kGEMLength_1)
#define kGEMMacJamSize_Default                  0x04

#define kGEMMacAttemptLimit                     (0x6060 | kGEMLength_1)
#define kGEMMacAttemptLimit_Default             0x10

#define kGEMMacTypeControl                      (0x6064 | kGEMLength_2)
#define kGEMMacTypeControl_Default              0x8808

#define kGEMMacAddr                             (0x6080 | kGEMLength_2)
#define kGEMMacAddr6_Default                    0x0001
#define kGEMMacAddr7_Default                    0xC200
#define kGEMMacAddr8_Default                    0x0180

#define kGEMMacAddrFilter                       (0x60A4 | kGEMLength_2)

#define kGEMMacAddrFilterMask1                  (0x60B0 | kGEMLength_1)

#define kGEMMacAddrFilterMask0                  (0x60B4 | kGEMLength_2)

#define kGEMMacHashTable                        (0x60C0 | kGEMLength_2)

#define kGEMMacCollisions                       (0x6100 | kGEMLength_2)
#define kGEMMacSingleCollision                  (0x6104 | kGEMLength_2)
#define kGEMMacExcessCollisions                 (0x6108 | kGEMLength_2)
#define kGEMMacLateCollisions                   (0x610C | kGEMLength_2)

#define kGEMMacDeferTimer                       (0x6110 | kGEMLength_2)

#define kGEMMacPeakAttempts                     (0x6114 | kGEMLength_2)

#define kGEMMacRxFrameCounter                   (0x6118 | kGEMLength_2)

#define kGEMMacRxLengthErrors                   (0x611C | kGEMLength_2)

#define kGEMMacRxAlignErrors                    (0x6120 | kGEMLength_2)

#define kGEMMacRxFCSErrors                      (0x6124 | kGEMLength_2)

#define kGEMMacRxCodeErrors                     (0x6128 | kGEMLength_2)

#define kGEMMacRandomSeed                       (0x6130 | kGEMLength_2)

#define kGEMMacStateMachine                     (0x6134 | kGEMLength_1)


/*
 *       MIF Registers
 */
#define kGEMMIFCLock                            (0x6200 | kGEMLength_1)
#define kGEMMIFClock_One                        0x01

#define kGEMMIFData                             (0x6204 | kGEMLength_1)
#define kGEMMIFData_One                         0x01

#define kGEMMIFOutputEnable                     (0x6208 | kGEMLength_1)
#define kGEMMIFOutputEnable_Enable              0x01

#define kGEMMIFFrame                            (0x620C | kGEMLength_4)
#define kGEMMIFFrame_StartFrameMask             0xC0000000
#define kGEMMIFFrame_StartFrameBit              0x40000000
#define kGEMMIFFrame_OpcodeMask                 0x30000000                      
#define kGEMMIFFrame_OpcodeBit                  0x10000000
#define kGEMMIFFrame_PhyAddrMask                0x0F800000                                      
#define kGEMMIFFrame_PhyAddrBit                 0x00800000
#define kGEMMIFFrame_RegAddrMask                0x007C0000
#define kGEMMIFFrame_RegAddrBit                 0x00040000
#define kGEMMIFFrame_TurnAroundMSB              0x00020000
#define kGEMMIFFrame_TurnAroundLSB              0x00010000
#define kGEMMIFFrame_DataMask                   0x0000FFFF
#define kGEMMIFFrame_DataBit                    0x00000001

#define kGEMMIFConfig                           (0x6210 | kGEMLength_2)
#define kGEMMIFConfig_PhySelect                 0x0001
#define kGEMMIFConfig_PollEnable                0x0002
#define kGEMMIFConfig_BitShiftMode              0x0004
#define kGEMMIFConfig_PollRegAddrMask           0x00F8          
#define kGEMMIFConfig_PollRegAddrBit            0x0008
#define kGEMMIFConfig_ReadMDI_0                 0x0100
#define kGEMMIFConfig_ReadMDI_1                 0x0200
#define kGEMMIFConfig_PollPhyAddrMask           0x7C00
#define kGEMMIFConfig_PollPhyAddrBit            0x0400

#define kGEMMIFMask                             (0x6214 | kGEMLength_2)

#define kGEMMIFStatus                           (0x6218 | kGEMLength_4)
#define kGEMMIFStatus_PollDataMask              0xFFFF0000 
#define kGEMMIFStatus_PollDataBit               0x00010000 
#define kGEMMIFStatus_PollStatusMask            0x0000FFFF 
#define kGEMMIFStatus_PollStatusBit             0x00000001 

#define kGEMMIFStateMachine                     (0x621C | kGEMLength_1)
#define kGEMMIFStateMachine_ControlStateMask    0x07
#define kGEMMIFStateMachine_ControlStateBit     0x01
#define kGEMMIFStateMachine_ExecuteStateMask    0x60
#define kGEMMIFStateMachine_ExecuteStateBit     0x20

/*
 *      PCS/Serdes
 */
#define kGEMPCSControl                          (0x9000 | kGEMLength_2)
#define kGEMPCSControl_1000Mbs                  0x0040  
#define kGEMPCSControl_CollsnTest               0x0080  
#define kGEMPCSControl_DuplexMode               0x0100  
#define kGEMPCSControl_RestartAutoNegot         0x0200          
#define kGEMPCSControl_Isolate                  0x0400  
#define kGEMPCSControl_PowerDown                0x0800  
#define kGEMPCSControl_EnableAutoNegot          0x1000  
#define kGEMPCSControl_100Mbs                   0x2000  
#define kGEMPCSControl_Reset                    0x8000  

#define kGEMPCSStatus                           (0x9004 | kGEMLength_2)
#define kGEMPCSStatus_ExtendedCap               0x0001
#define kGEMPCSStatus_JabberDetect              0x0002
#define kGEMPCSStatus_LinkStatusUp              0x0004
#define kGEMPCSStatus_AutoNegotCap              0x0008
#define kGEMPCSStatus_RemoteFault               0x0010
#define kGEMPCSStatus_AutoNegotComplete         0x0020
#define kGEMPCSStatus_ExtStatus                 0x0100

#define kGEMPCSAdvert                           (0x9008 | kGEMLength_2)
#define kGEMPCSAdvert_FullDuplexCap             0x0020 
#define kGEMPCSAdvert_HalfDuplexCap             0x0040 
#define kGEMPCSAdvert_SymPauseCap               0x0080 
#define kGEMPCSAdvert_AsymPauseCap              0x0100 
#define kGEMPCSAdvert_RemoteFaultMask           0x3000 
#define kGEMPCSAdvert_RemoteFaultBit            0x1000 
#define kGEMPCSAdvert_Ack                       0x4000 
#define kGEMPCSAdvert_NextPage                  0x8000 

#define kGEMPCSLPAbility                        (0x900C | kGEMLength_2)
#define kGEMPCSLPAbility_FullDuplexCap          0x0020 
#define kGEMPCSLPAbility_HalfDuplexCap          0x0040 
#define kGEMPCSLPAbility_SymPauseCap            0x0080 
#define kGEMPCSLPAbility_AsymPauseCap           0x0100 
#define kGEMPCSLPAbility_RemoteFaultMask        0x3000 
#define kGEMPCSLPAbility_RemoteFaultBit         0x1000 
#define kGEMPCSLPAbility_Ack                    0x4000 
#define kGEMPCSLPAbility_NextPage               0x8000 

#define kGEMPCSConfig                           (0x9010 | kGEMLength_1)
#define kGEMPCSConfig_Enable                    0x01
#define kGEMPCSConfig_SignalDetOverride         0x02
#define kGEMPCSConfig_SignalDetInvert           0x04
#define kGEMPCSConfig_JitterStudyMask           0x18
#define kGEMPCSConfig_JitterStudyBit            0x08

#define kGEMPCSStateMachine                     (0x9014 | kGEMLength_4)
#define kGEMPCSStateMachine_TxControlStateMask  0x0000000F
#define kGEMPCSStateMachine_TxControlStateBit   0x00000001
#define kGEMPCSStateMachine_RxControlStateMask  0x000000F0
#define kGEMPCSStateMachine_RxControlStateBit   0x00000010
#define kGEMPCSStateMachine_WordSyncStateMask   0x00000700
#define kGEMPCSStateMachine_WordSyncStateBit    0x00000100
#define kGEMPCSStateMachine_SeqDetectStateMask  0x00001800
#define kGEMPCSStateMachine_SeqDetectStateBit   0x00000800
#define kGEMPCSStateMachine_LinkConfigStateMask 0x0001E000
#define kGEMPCSStateMachine_LinkConfigStateBit  0x00002000
#define kGEMPCSStateMachine_LinkLostCCodes      0x10000000
#define kGEMPCSStateMachine_LinkLostSync        0x20000000
#define kGEMPCSStateMachine_LinkLostSignalDet   0x40000000

#define kGEMPCSInterruptStatus                  (0x9018 | kGEMLength_1)
#define kGEMPCSInterruptStatus_LinkStatusChg    0x04

#define kGEMPCSDatapathMode                     (0x9050 | kGEMLength_1)
#define kGEMPCSDatapathMode_XMode               0x01
#define kGEMPCSDatapathMode_ExtSERDESMode       0x02
#define kGEMPCSDatapathMode_GMIIMode            0x04
#define kGEMPCSDatapathMode_GMIIOutputEnable    0x08

#define kGEMPCSSerdesControl                    (0x9054 | kGEMLength_1)
#define kGEMPCSSerdesControl_DisableLoopback    0x01
#define kGEMPCSSerdesControl_EnableSyncDet      0x02
#define kGEMPCSSerdesControl_LockRefClk         0x04

#define kGEMPCSSerdesOutputSelect               (0x9058 | kGEMLength_1)
#define kGEMPCSSerdesOutputSelect_PROMAddrMask  0x03
#define kGEMPCSSerdesOutputSelect_PROMAddrBit   0x01

#define kGEMPCSSerdesState                      (0x905C | kGEMLength_1)
#define kGEMPCSSerdesState_StateMask            0x03