[BACK]Return to if_stgereg.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/if_stgereg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_stgereg.h,v 1.8 2006/07/12 19:02:25 brad Exp $     */
                      2: /*     $NetBSD: if_stgereg.h,v 1.3 2003/02/10 21:10:07 christos Exp $  */
                      3:
                      4: /*-
                      5:  * Copyright (c) 2001 The NetBSD Foundation, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * This code is derived from software contributed to The NetBSD Foundation
                      9:  * by Jason R. Thorpe.
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer.
                     16:  * 2. Redistributions in binary form must reproduce the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer in the
                     18:  *    documentation and/or other materials provided with the distribution.
                     19:  * 3. All advertising materials mentioning features or use of this software
                     20:  *    must display the following acknowledgement:
                     21:  *     This product includes software developed by the NetBSD
                     22:  *     Foundation, Inc. and its contributors.
                     23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     24:  *    contributors may be used to endorse or promote products derived
                     25:  *    from this software without specific prior written permission.
                     26:  *
                     27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     37:  * POSSIBILITY OF SUCH DAMAGE.
                     38:  */
                     39:
                     40: #ifndef _DEV_PCI_IF_STGEREG_H_
                     41: #define        _DEV_PCI_IF_STGEREG_H_
                     42:
                     43: /*
                     44:  * Register description for the Sundance Tech. TC9021 10/100/1000
                     45:  * Ethernet controller.
                     46:  *
                     47:  * Note that while DMA addresses are all in 64-bit fields, only
                     48:  * the lower 40 bits of a DMA address are valid.
                     49:  */
                     50:
                     51: /*
                     52:  * Register access macros
                     53:  */
                     54: #define CSR_WRITE_4(_sc, reg, val)     \
                     55:        bus_space_write_4((_sc)->sc_st, (_sc)->sc_sh, (reg), (val))
                     56: #define CSR_WRITE_2(_sc, reg, val)     \
                     57:        bus_space_write_2((_sc)->sc_st, (_sc)->sc_sh, (reg), (val))
                     58: #define CSR_WRITE_1(_sc, reg, val)     \
                     59:        bus_space_write_1((_sc)->sc_st, (_sc)->sc_sh, (reg), (val))
                     60:
                     61: #define CSR_READ_4(_sc, reg)           \
                     62:        bus_space_read_4((_sc)->sc_st, (_sc)->sc_sh, (reg))
                     63: #define CSR_READ_2(_sc, reg)           \
                     64:        bus_space_read_2((_sc)->sc_st, (_sc)->sc_sh, (reg))
                     65: #define CSR_READ_1(_sc, reg)           \
                     66:        bus_space_read_1((_sc)->sc_st, (_sc)->sc_sh, (reg))
                     67:
                     68: /*
                     69:  * TC9021 buffer fragment descriptor.
                     70:  */
                     71: struct stge_frag {
                     72:        uint64_t        frag_word0;     /* address, length */
                     73: } __packed;
                     74:
                     75: #define        FRAG_ADDR(x)    (((uint64_t)(x)) << 0)
                     76: #define        FRAG_ADDR_MASK  FRAG_ADDR(0xfffffffffULL)
                     77: #define        FRAG_LEN(x)     (((uint64_t)(x)) << 48)
                     78: #define        FRAG_LEN_MASK   FRAG_LEN(0xffffULL)
                     79:
                     80: /*
                     81:  * TC9021 Transmit Frame Descriptor.  Note the number of fragments
                     82:  * here is arbitrary, but we can't have any more than 15.
                     83:  */
                     84: #define        STGE_NTXFRAGS   12
                     85: struct stge_tfd {
                     86:        uint64_t        tfd_next;       /* next TFD in list */
                     87:        uint64_t        tfd_control;    /* control bits */
                     88:                                        /* the buffer fragments */
                     89:        struct stge_frag tfd_frags[STGE_NTXFRAGS];
                     90: } __packed;
                     91:
                     92: #define        TFD_FrameId(x)          ((x) << 0)
                     93: #define        TFD_FrameId_MAX         0xffff
                     94: #define        TFD_WordAlign(x)        ((x) << 16)
                     95: #define        TFD_WordAlign_dword     0               /* align to dword in TxFIFO */
                     96: #define        TFD_WordAlign_word      2               /* align to word in TxFIFO */
                     97: #define        TFD_WordAlign_disable   1               /* disable alignment */
                     98: #define        TFD_TCPChecksumEnable   (1ULL << 18)
                     99: #define        TFD_UDPChecksumEnable   (1ULL << 19)
                    100: #define        TFD_IPChecksumEnable    (1ULL << 20)
                    101: #define        TFD_FcsAppendDisable    (1ULL << 21)
                    102: #define        TFD_TxIndicate          (1ULL << 22)
                    103: #define        TFD_TxDMAIndicate       (1ULL << 23)
                    104: #define        TFD_FragCount(x)        ((x) << 24)
                    105: #define        TFD_VLANTagInsert       (1ULL << 28)
                    106: #define        TFD_TFDDone             (1ULL << 31)
                    107: #define        TFD_VID(x)              (((uint64_t)(x)) << 32)
                    108: #define        TFD_CFI                 (1ULL << 44)
                    109: #define        TFD_UserPriority(x)     (((uint64_t)(x)) << 45)
                    110:
                    111: /*
                    112:  * TC9021 Receive Frame Descriptor.  Each RFD has a single fragment
                    113:  * in it, and the chip tells us the beginning and end of the frame.
                    114:  */
                    115: struct stge_rfd {
                    116:        uint64_t        rfd_next;       /* next RFD in list */
                    117:        uint64_t        rfd_status;     /* status bits */
                    118:        struct stge_frag rfd_frag;      /* the buffer */
                    119: } __packed;
                    120:
                    121: #define        RFD_RxDMAFrameLen(x)    ((x) & 0xffff)
                    122: #define        RFD_RxFIFOOverrun       (1ULL << 16)
                    123: #define        RFD_RxRuntFrame         (1ULL << 17)
                    124: #define        RFD_RxAlignmentError    (1ULL << 18)
                    125: #define        RFD_RxFCSError          (1ULL << 19)
                    126: #define        RFD_RxOversizedFrame    (1ULL << 20)
                    127: #define        RFD_RxLengthError       (1ULL << 21)
                    128: #define        RFD_VLANDetected        (1ULL << 22)
                    129: #define        RFD_TCPDetected         (1ULL << 23)
                    130: #define        RFD_TCPError            (1ULL << 24)
                    131: #define        RFD_UDPDetected         (1ULL << 25)
                    132: #define        RFD_UDPError            (1ULL << 26)
                    133: #define        RFD_IPDetected          (1ULL << 27)
                    134: #define        RFD_IPError             (1ULL << 28)
                    135: #define        RFD_FrameStart          (1ULL << 29)
                    136: #define        RFD_FrameEnd            (1ULL << 30)
                    137: #define        RFD_RFDDone             (1ULL << 31)
                    138: #define        RFD_TCI(x)              ((((uint64_t)(x)) >> 32) & 0xffff)
                    139:
                    140: /*
                    141:  * PCI configuration registers used by the TC9021.
                    142:  */
                    143:
                    144: #define        STGE_PCI_IOBA           (PCI_MAPREG_START + 0x00)
                    145: #define        STGE_PCI_MMBA           (PCI_MAPREG_START + 0x04)
                    146:
                    147: /*
                    148:  * EEPROM offsets.
                    149:  */
                    150: #define        STGE_EEPROM_ConfigParam         0x00
                    151: #define        STGE_EEPROM_AsicCtrl            0x01
                    152: #define        STGE_EEPROM_SubSystemVendorId   0x02
                    153: #define        STGE_EEPROM_SubSystemId         0x03
                    154: #define        STGE_EEPROM_StationAddress0     0x10
                    155: #define        STGE_EEPROM_StationAddress1     0x11
                    156: #define        STGE_EEPROM_StationAddress2     0x12
                    157:
                    158: /*
                    159:  * The TC9021 register space.
                    160:  */
                    161:
                    162: #define        STGE_DMACtrl                    0x00
                    163: #define        DMAC_RxDMAComplete              (1U << 3)
                    164: #define        DMAC_RxDMAPollNow               (1U << 4)
                    165: #define        DMAC_TxDMAComplete              (1U << 11)
                    166: #define        DMAC_TxDMAPollNow               (1U << 12)
                    167: #define        DMAC_TxDMAInProg                (1U << 15)
                    168: #define        DMAC_RxEarlyDisable             (1U << 16)
                    169: #define        DMAC_MWIDisable                 (1U << 18)
                    170: #define        DMAC_TxWiteBackDisable          (1U << 19)
                    171: #define        DMAC_TxBurstLimit(x)            ((x) << 20)
                    172: #define        DMAC_TargetAbort                (1U << 30)
                    173: #define        DMAC_MasterAbort                (1U << 31)
                    174:
                    175: #define        STGE_RxDMAStatus                0x08
                    176:
                    177: #define        STGE_TFDListPtrLo               0x10
                    178:
                    179: #define        STGE_TFDListPtrHi               0x14
                    180:
                    181: #define        STGE_TxDMABurstThresh           0x18    /* 8-bit */
                    182:
                    183: #define        STGE_TxDMAUrgentThresh          0x19    /* 8-bit */
                    184:
                    185: #define        STGE_TxDMAPollPeriod            0x1a    /* 8-bit */
                    186:
                    187: #define        STGE_RFDListPtrLo               0x1c
                    188:
                    189: #define        STGE_RFDListPtrHi               0x20
                    190:
                    191: #define        STGE_RxDMABurstThresh           0x24    /* 8-bit */
                    192:
                    193: #define        STGE_RxDMAUrgentThresh          0x25    /* 8-bit */
                    194:
                    195: #define        STGE_RxDMAPollPeriod            0x26    /* 8-bit */
                    196:
                    197: #define        STGE_RxDMAIntCtrl               0x28
                    198: #define        RDIC_RxFrameCount(x)            ((x) & 0xff)
                    199: #define        RDIC_PriorityThresh(x)          ((x) << 10)
                    200: #define        RDIC_RxDMAWaitTime(x)           ((x) << 16)
                    201:
                    202: #define        STGE_DebugCtrl                  0x2c    /* 16-bit */
                    203: #define        DC_GPIO0Ctrl                    (1U << 0)
                    204: #define        DC_GPIO1Ctrl                    (1U << 1)
                    205: #define        DC_GPIO0                        (1U << 2)
                    206: #define        DC_GPIO1                        (1U << 3)
                    207:
                    208: #define        STGE_AsicCtrl                   0x30
                    209: #define        AC_ExpRomDisable                (1U << 0)
                    210: #define        AC_ExpRomSize                   (1U << 1)
                    211: #define        AC_PhySpeed10                   (1U << 4)
                    212: #define        AC_PhySpeed100                  (1U << 5)
                    213: #define        AC_PhySpeed1000                 (1U << 6)
                    214: #define        AC_PhyMedia                     (1U << 7)
                    215: #define        AC_ForcedConfig(x)              ((x) << 8)
                    216: #define        AC_ForcedConfig_MASK            AC_ForcedConfig(7)
                    217: #define        AC_D3ResetDisable               (1U << 11)
                    218: #define        AC_SpeedupMode                  (1U << 13)
                    219: #define        AC_LEDMode                      (1U << 14)
                    220: #define        AC_RstOutPolarity               (1U << 15)
                    221: #define        AC_GlobalReset                  (1U << 16)
                    222: #define        AC_RxReset                      (1U << 17)
                    223: #define        AC_TxReset                      (1U << 18)
                    224: #define        AC_DMA                          (1U << 19)
                    225: #define        AC_FIFO                         (1U << 20)
                    226: #define        AC_Network                      (1U << 21)
                    227: #define        AC_Host                         (1U << 22)
                    228: #define        AC_AutoInit                     (1U << 23)
                    229: #define        AC_RstOut                       (1U << 24)
                    230: #define        AC_InterruptRequest             (1U << 25)
                    231: #define        AC_ResetBusy                    (1U << 26)
                    232:
                    233: #define        STGE_FIFOCtrl                   0x38    /* 16-bit */
                    234: #define        FC_RAMTestMode                  (1U << 0)
                    235: #define        FC_Transmitting                 (1U << 14)
                    236: #define        FC_Receiving                    (1U << 15)
                    237:
                    238: #define        STGE_RxEarlyThresh              0x3a    /* 16-bit */
                    239:
                    240: #define        STGE_FlowOffThresh              0x3c    /* 16-bit */
                    241:
                    242: #define        STGE_FlowOnTresh                0x3e    /* 16-bit */
                    243:
                    244: #define        STGE_TxStartThresh              0x44    /* 16-bit */
                    245:
                    246: #define        STGE_EepromData                 0x48    /* 16-bit */
                    247:
                    248: #define        STGE_EepromCtrl                 0x4a    /* 16-bit */
                    249: #define        EC_EepromAddress(x)             ((x) & 0xff)
                    250: #define        EC_EepromOpcode(x)              ((x) << 8)
                    251: #define        EC_OP_WE                        0
                    252: #define        EC_OP_WR                        1
                    253: #define        EC_OP_RR                        2
                    254: #define        EC_OP_ER                        3
                    255: #define        EC_EepromBusy                   (1U << 15)
                    256:
                    257: #define        STGE_ExpRomAddr                 0x4c
                    258:
                    259: #define        STGE_ExpRomData                 0x50    /* 8-bit */
                    260:
                    261: #define        STGE_WakeEvent                  0x51    /* 8-bit */
                    262:
                    263: #define        STGE_Countdown                  0x54
                    264: #define        CD_Count(x)                     ((x) & 0xffff)
                    265: #define        CD_CountdownSpeed               (1U << 24)
                    266: #define        CD_CountdownMode                (1U << 25)
                    267: #define        CD_CountdownIntEnabled          (1U << 26)
                    268:
                    269: #define        STGE_IntStatusAck               0x5a    /* 16-bit */
                    270:
                    271: #define        STGE_IntStatus                  0x5e    /* 16-bit */
                    272:
                    273: #define        STGE_IntEnable                  0x5c    /* 16-bit */
                    274:
                    275: #define        IS_InterruptStatus              (1U << 0)
                    276: #define        IS_HostError                    (1U << 1)
                    277: #define        IS_TxComplete                   (1U << 2)
                    278: #define        IS_MACControlFrame              (1U << 3)
                    279: #define        IS_RxComplete                   (1U << 4)
                    280: #define        IS_RxEarly                      (1U << 5)
                    281: #define        IS_InRequested                  (1U << 6)
                    282: #define        IS_UpdateStats                  (1U << 7)
                    283: #define        IS_LinkEvent                    (1U << 8)
                    284: #define        IS_TxDMAComplete                (1U << 9)
                    285: #define        IS_RxDMAComplete                (1U << 10)
                    286: #define        IS_RFDListEnd                   (1U << 11)
                    287: #define        IS_RxDMAPriority                (1U << 12)
                    288:
                    289: #define        STGE_TxStatus                   0x60
                    290: #define        TS_TxError                      (1U << 0)
                    291: #define        TS_LateCollision                (1U << 2)
                    292: #define        TS_MaxCollisions                (1U << 3)
                    293: #define        TS_TxUnderrun                   (1U << 4)
                    294: #define        TS_TxIndicateReqd               (1U << 6)
                    295: #define        TS_TxComplete                   (1U << 7)
                    296: #define        TS_TxFrameId_get(x)             ((x) >> 16)
                    297:
                    298: #define        STGE_MACCtrl                    0x6c
                    299: #define        MC_IFSSelect(x)                 ((x) & 3)
                    300: #define        MC_DuplexSelect                 (1U << 5)
                    301: #define        MC_RcvLargeFrames               (1U << 6)
                    302: #define        MC_TxFlowControlEnable          (1U << 7)
                    303: #define        MC_RxFlowControlEnable          (1U << 8)
                    304: #define        MC_RcvFCS                       (1U << 9)
                    305: #define        MC_FIFOLoopback                 (1U << 10)
                    306: #define        MC_MACLoopback                  (1U << 11)
                    307: #define        MC_AutoVLANtagging              (1U << 12)
                    308: #define        MC_AutoVLANuntagging            (1U << 13)
                    309: #define        MC_CollisionDetect              (1U << 16)
                    310: #define        MC_CarrierSense                 (1U << 17)
                    311: #define        MC_StatisticsEnable             (1U << 21)
                    312: #define        MC_StatisticsDisable            (1U << 22)
                    313: #define        MC_StatisticsEnabled            (1U << 23)
                    314: #define        MC_TxEnable                     (1U << 24)
                    315: #define        MC_TxDisable                    (1U << 25)
                    316: #define        MC_TxEnabled                    (1U << 26)
                    317: #define        MC_RxEnable                     (1U << 27)
                    318: #define        MC_RxDisable                    (1U << 28)
                    319: #define        MC_RxEnabled                    (1U << 29)
                    320: #define        MC_Paused                       (1U << 30)
                    321:
                    322: #define        STGE_VLANTag                    0x70
                    323:
                    324: #define        STGE_PhyCtrl                    0x76    /* 8-bit */
                    325: #define        PC_MgmtClk                      (1U << 0)
                    326: #define        PC_MgmtData                     (1U << 1)
                    327: #define        PC_MgmtDir                      (1U << 2)       /* MAC->PHY */
                    328: #define        PC_PhyDuplexPolarity            (1U << 3)
                    329: #define        PC_PhyDuplexStatus              (1U << 4)
                    330: #define        PC_PhyLnkPolarity               (1U << 5)
                    331: #define        PC_LinkSpeed(x)                 (((x) >> 6) & 3)
                    332: #define        PC_LinkSpeed_Down               0
                    333: #define        PC_LinkSpeed_10                 1
                    334: #define        PC_LinkSpeed_100                2
                    335: #define        PC_LinkSpeed_1000               3
                    336:
                    337: #define        STGE_StationAddress0            0x78    /* 16-bit */
                    338:
                    339: #define        STGE_StationAddress1            0x7a    /* 16-bit */
                    340:
                    341: #define        STGE_StationAddress2            0x7c    /* 16-bit */
                    342:
                    343: #define        STGE_VLANHashTable              0x7e    /* 16-bit */
                    344:
                    345: #define        STGE_VLANId                     0x80
                    346:
                    347: #define        STGE_MaxFrameSize               0x86
                    348:
                    349: #define        STGE_ReceiveMode                0x88    /* 16-bit */
                    350: #define        RM_ReceiveUnicast               (1U << 0)
                    351: #define        RM_ReceiveMulticast             (1U << 1)
                    352: #define        RM_ReceiveBroadcast             (1U << 2)
                    353: #define        RM_ReceiveAllFrames             (1U << 3)
                    354: #define        RM_ReceiveMulticastHash         (1U << 4)
                    355: #define        RM_ReceiveIPMulticast           (1U << 5)
                    356: #define        RM_ReceiveVLANMatch             (1U << 8)
                    357: #define        RM_ReceiveVLANHash              (1U << 9)
                    358:
                    359: #define        STGE_HashTable0                 0x8c
                    360:
                    361: #define        STGE_HashTable1                 0x90
                    362:
                    363: #define        STGE_RMONStatisticsMask         0x98    /* set to disable */
                    364:
                    365: #define        STGE_StatisticsMask             0x9c    /* set to disable */
                    366:
                    367: #define        STGE_RxJumboFrames              0xbc    /* 16-bit */
                    368:
                    369: #define        STGE_TCPCheckSumErrors          0xc0    /* 16-bit */
                    370:
                    371: #define        STGE_IPCheckSumErrors           0xc2    /* 16-bit */
                    372:
                    373: #define        STGE_UDPCheckSumErrors          0xc4    /* 16-bit */
                    374:
                    375: #define        STGE_TxJumboFrames              0xf4    /* 16-bit */
                    376:
                    377: /*
                    378:  * TC9021 statistics.  Available memory and I/O mapped.
                    379:  */
                    380:
                    381: #define        STGE_OctetRcvOk                 0xa8
                    382:
                    383: #define        STGE_McstOctetRcvdOk            0xac
                    384:
                    385: #define        STGE_BcstOctetRcvdOk            0xb0
                    386:
                    387: #define        STGE_FramesRcvdOk               0xb4
                    388:
                    389: #define        STGE_McstFramesRcvdOk           0xb8
                    390:
                    391: #define        STGE_BcstFramesRcvdOk           0xbe    /* 16-bit */
                    392:
                    393: #define        STGE_MacControlFramesRcvd       0xc6    /* 16-bit */
                    394:
                    395: #define        STGE_FrameTooLongErrors         0xc8    /* 16-bit */
                    396:
                    397: #define        STGE_InRangeLengthErrors        0xca    /* 16-bit */
                    398:
                    399: #define        STGE_FramesCheckSeqErrors       0xcc    /* 16-bit */
                    400:
                    401: #define        STGE_FramesLostRxErrors         0xce    /* 16-bit */
                    402:
                    403: #define        STGE_OctetXmtdOk                0xd0
                    404:
                    405: #define        STGE_McstOctetXmtdOk            0xd4
                    406:
                    407: #define        STGE_BcstOctetXmtdOk            0xd8
                    408:
                    409: #define        STGE_FramesXmtdOk               0xdc
                    410:
                    411: #define        STGE_McstFramesXmtdOk           0xe0
                    412:
                    413: #define        STGE_FramesWDeferredXmt         0xe4
                    414:
                    415: #define        STGE_LateCollisions             0xe8
                    416:
                    417: #define        STGE_MultiColFrames             0xec
                    418:
                    419: #define        STGE_SingleColFrames            0xf0
                    420:
                    421: #define        STGE_BcstFramesXmtdOk           0xf6    /* 16-bit */
                    422:
                    423: #define        STGE_CarrierSenseErrors         0xf8    /* 16-bit */
                    424:
                    425: #define        STGE_MacControlFramesXmtd       0xfa    /* 16-bit */
                    426:
                    427: #define        STGE_FramesAbortXSColls         0xfc    /* 16-bit */
                    428:
                    429: #define        STGE_FramesWEXDeferal           0xfe    /* 16-bit */
                    430:
                    431: /*
                    432:  * RMON-compatible statistics.  Only accessible if memory-mapped.
                    433:  */
                    434:
                    435: #define        STGE_EtherStatsCollisions                       0x100
                    436:
                    437: #define        STGE_EtherStatsOctetsTransmit                   0x104
                    438:
                    439: #define        STGE_EtherStatsPktsTransmit                     0x108
                    440:
                    441: #define        STGE_EtherStatsPkts64OctetsTransmit             0x10c
                    442:
                    443: #define        STGE_EtherStatsPkts64to127OctetsTransmit        0x110
                    444:
                    445: #define        STGE_EtherStatsPkts128to255OctetsTransmit       0x114
                    446:
                    447: #define        STGE_EtherStatsPkts256to511OctetsTransmit       0x118
                    448:
                    449: #define        STGE_EtherStatsPkts512to1023OctetsTransmit      0x11c
                    450:
                    451: #define        STGE_EtherStatsPkts1024to1518OctetsTransmit     0x120
                    452:
                    453: #define        STGE_EtherStatsCRCAlignErrors                   0x124
                    454:
                    455: #define        STGE_EtherStatsUndersizePkts                    0x128
                    456:
                    457: #define        STGE_EtherStatsFragments                        0x12c
                    458:
                    459: #define        STGE_EtherStatsJabbers                          0x130
                    460:
                    461: #define        STGE_EtherStatsOctets                           0x134
                    462:
                    463: #define        STGE_EtherStatsPkts                             0x138
                    464:
                    465: #define        STGE_EtherStatsPkts64Octets                     0x13c
                    466:
                    467: #define        STGE_EtherStatsPkts65to127Octets                0x140
                    468:
                    469: #define        STGE_EtherStatsPkts128to255Octets               0x144
                    470:
                    471: #define        STGE_EtherStatsPkts256to511Octets               0x148
                    472:
                    473: #define        STGE_EtherStatsPkts512to1023Octets              0x14c
                    474:
                    475: #define        STGE_EtherStatsPkts1024to1518Octets             0x150
                    476:
                    477: /*
                    478:  * Transmit descriptor list size.
                    479:  */
                    480: #define STGE_NTXDESC           256
                    481: #define STGE_NTXDESC_MASK      (STGE_NTXDESC - 1)
                    482: #define STGE_NEXTTX(x)         (((x) + 1) & STGE_NTXDESC_MASK)
                    483:
                    484: /*
                    485:  * Receive descriptor list size.
                    486:  */
                    487: #define STGE_NRXDESC           256
                    488: #define STGE_NRXDESC_MASK      (STGE_NRXDESC - 1)
                    489: #define STGE_NEXTRX(x)         (((x) + 1) & STGE_NRXDESC_MASK)
                    490:
                    491: /*
                    492:  * Only interrupt every N frames.  Must be a power-of-two.
                    493:  */
                    494: #define STGE_TXINTR_SPACING    16
                    495: #define STGE_TXINTR_SPACING_MASK (STGE_TXINTR_SPACING - 1)
                    496:
                    497: #define STGE_JUMBO_FRAMELEN    9022
                    498: #define STGE_JUMBO_MTU \
                    499:        (STGE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
                    500:
                    501: /*
                    502:  * Control structures are DMA'd to the TC9021 chip.  We allocate them in
                    503:  * a single clump that maps to a single DMA segment to make several things
                    504:  * easier.
                    505:  */
                    506: struct stge_control_data {
                    507:        /*
                    508:         * The transmit descriptors.
                    509:         */
                    510:        struct stge_tfd scd_txdescs[STGE_NTXDESC];
                    511:
                    512:        /*
                    513:         * The receive descriptors.
                    514:         */
                    515:        struct stge_rfd scd_rxdescs[STGE_NRXDESC];
                    516: };
                    517:
                    518: #define STGE_CDOFF(x)  offsetof(struct stge_control_data, x)
                    519: #define STGE_CDTXOFF(x)        STGE_CDOFF(scd_txdescs[(x)])
                    520: #define STGE_CDRXOFF(x)        STGE_CDOFF(scd_rxdescs[(x)])
                    521:
                    522: /*
                    523:  * Software state for transmit and receive jobs.
                    524:  */
                    525: struct stge_descsoft {
                    526:        struct mbuf *ds_mbuf;           /* head of our mbuf chain */
                    527:        bus_dmamap_t ds_dmamap;         /* our DMA map */
                    528: };
                    529:
                    530: /*
                    531:  * Software state per device.
                    532:  */
                    533: struct stge_softc {
                    534:        struct device sc_dev;           /* generic device information */
                    535:        bus_space_tag_t sc_st;          /* bus space tag */
                    536:        bus_space_handle_t sc_sh;       /* bus space handle */
                    537:        bus_dma_tag_t sc_dmat;          /* bus DMA tag */
                    538:        struct arpcom sc_arpcom;        /* ethernet common data */
                    539:        void *sc_sdhook;                /* shutdown hook */
                    540:        int sc_rev;                     /* silicon revision */
                    541:        int stge_if_flags;
                    542:        void *sc_ih;                    /* interrupt cookie */
                    543:
                    544:        struct mii_data sc_mii;         /* MII/media information */
                    545:
                    546:        struct timeout sc_timeout;      /* tick timeout */
                    547:
                    548:        bus_dmamap_t sc_cddmamap;       /* control data DMA map */
                    549: #define sc_cddma       sc_cddmamap->dm_segs[0].ds_addr
                    550:
                    551:        /*
                    552:         * Software state for transmit and receive descriptors.
                    553:        */
                    554:        struct stge_descsoft sc_txsoft[STGE_NTXDESC];
                    555:        struct stge_descsoft sc_rxsoft[STGE_NRXDESC];
                    556:
                    557:        /*
                    558:         * Control data structures.
                    559:        */
                    560:        struct stge_control_data *sc_control_data;
                    561: #define sc_txdescs     sc_control_data->scd_txdescs
                    562: #define sc_rxdescs     sc_control_data->scd_rxdescs
                    563:
                    564:        int     sc_txpending;           /* number of Tx requests pending */
                    565:        int     sc_txdirty;             /* first dirty Tx descriptor */
                    566:        int     sc_txlast;              /* last used Tx descriptor */
                    567:
                    568:        int     sc_rxptr;               /* next ready Rx descriptor/descsoft */
                    569:        int     sc_rxdiscard;
                    570:        int     sc_rxlen;
                    571:        struct mbuf *sc_rxhead;
                    572:        struct mbuf *sc_rxtail;
                    573:        struct mbuf **sc_rxtailp;
                    574:
                    575:        int     sc_txthresh;            /* Tx threshold */
                    576:        uint32_t sc_usefiber:1;         /* if we're fiber */
                    577:        uint32_t sc_stge1023:1;         /* are we a 1023 */
                    578:        uint32_t sc_DMACtrl;            /* prototype DMACtrl register */
                    579:        uint32_t sc_MACCtrl;            /* prototype MacCtrl register */
                    580:        uint16_t sc_IntEnable;          /* prototype IntEnable register */
                    581:        uint16_t sc_ReceiveMode;        /* prototype ReceiveMode register */
                    582:        uint8_t sc_PhyCtrl;             /* prototype PhyCtrl register */
                    583: };
                    584:
                    585: #define STGE_RXCHAIN_RESET(sc)                                         \
                    586: do {                                                                   \
                    587:        (sc)->sc_rxtailp = &(sc)->sc_rxhead;                            \
                    588:        *(sc)->sc_rxtailp = NULL;                                       \
                    589:        (sc)->sc_rxlen = 0;                                             \
                    590: } while (/*CONSTCOND*/0)
                    591:
                    592: #define STGE_RXCHAIN_LINK(sc, m)                                       \
                    593: do {                                                                   \
                    594:        *(sc)->sc_rxtailp = (sc)->sc_rxtail = (m);                      \
                    595:        (sc)->sc_rxtailp = &(m)->m_next;                                \
                    596: } while (/*CONSTCOND*/0)
                    597:
                    598: #define STGE_CDTXADDR(sc, x)   ((sc)->sc_cddma + STGE_CDTXOFF((x)))
                    599: #define STGE_CDRXADDR(sc, x)   ((sc)->sc_cddma + STGE_CDRXOFF((x)))
                    600:
                    601: #define STGE_CDTXSYNC(sc, x, ops)                                      \
                    602:        bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap,               \
                    603:            STGE_CDTXOFF((x)), sizeof(struct stge_tfd), (ops))
                    604:
                    605: #define STGE_CDRXSYNC(sc, x, ops)                                      \
                    606:        bus_dmamap_sync((sc)->sc_dmat, (sc)->sc_cddmamap,               \
                    607:            STGE_CDRXOFF((x)), sizeof(struct stge_rfd), (ops))
                    608:
                    609: #define STGE_INIT_RXDESC(sc, x)                                                \
                    610: do {                                                                   \
                    611:        struct stge_descsoft *__ds = &(sc)->sc_rxsoft[(x)];             \
                    612:        struct stge_rfd *__rfd = &(sc)->sc_rxdescs[(x)];                \
                    613:                                                                        \
                    614:        /*                                                              \
                    615:         * Note: We scoot the packet forward 2 bytes in the buffer      \
                    616:         * so that the payload after the Ethernet header is aligned     \
                    617:         * to a 4-byte boundary.                                        \
                    618:         */                                                             \
                    619:        __rfd->rfd_frag.frag_word0 =                                    \
                    620:            htole64(FRAG_ADDR(__ds->ds_dmamap->dm_segs[0].ds_addr + 2) |\
                    621:            FRAG_LEN(MCLBYTES - 2));                                    \
                    622:        __rfd->rfd_next =                                               \
                    623:            htole64((uint64_t)STGE_CDRXADDR((sc), STGE_NEXTRX((x))));   \
                    624:        __rfd->rfd_status = 0;                                          \
                    625:        STGE_CDRXSYNC((sc), (x), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); \
                    626: } while (/*CONSTCOND*/0)
                    627:
                    628: #define STGE_TIMEOUT   1000
                    629:
                    630: #endif /* _DEV_PCI_IF_STGEREG_H_ */

CVSweb