[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     ! 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