Annotation of kernel/bsd/dev/ppc/drvDECchip21040/DECchip2104xRegisters.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /*
                     26:  * Copyright (c) 1995-1996 NeXT Software, Inc.
                     27:  *
                     28:  * Hardware definitions and data structures for the DECchip 2104x
                     29:  *
                     30:  * HISTORY
                     31:  *
                     32:  * 26-Apr-95   Rakesh Dubey (rdubey) at NeXT 
                     33:  *     Created.
                     34:  * 07-Feb-96   Dieter Siegmund (dieter) at NeXT
                     35:  *     Crank down the size of netbufs we allocate to eliminate
                     36:  *     confusion.
                     37:  */
                     38: 
                     39: #define DEC_21X40_ALIGNMENT            4
                     40: #define DEC_21X40_DESCRIPTOR_ALIGNMENT 16      /* only long-word is needed */
                     41: 
                     42: #define TRANSMIT_QUEUE_SIZE            64
                     43: 
                     44:                                        // 1514 + 4 + 2(align to multiple of 4)
                     45: #define NETWORK_BUFSIZE                        (ETHERMAXPACKET + ETHERCRC + 2)
                     46: #define NETWORK_BUFALIGNMENT           32
                     47: 
                     48: #define DEC_21X40_RX_RING_LENGTH       32
                     49: #define DEC_21X40_TX_RING_LENGTH       16
                     50: 
                     51: #define DEC_21X40_DESC_OWNED_BY_HOST   0
                     52: #define DEC_21X40_DESC_OWNED_BY_CTRL   1
                     53: 
                     54: #define DEC_21X40_REGISTER_SPACE       128
                     55: 
                     56: #define PCI_CBIO_OFFSET                        0x10
                     57: #define PCI_CFCS_OFFSET                        0x04
                     58: 
                     59: /*
                     60:  * Command and Status Register Offsets. 
                     61:  */
                     62: #define DEC_21X40_CSR0                 0x00
                     63: #define DEC_21X40_CSR1                 0x08
                     64: #define DEC_21X40_CSR2                 0x10
                     65: #define DEC_21X40_CSR3                 0x18
                     66: #define DEC_21X40_CSR4                 0x20
                     67: #define DEC_21X40_CSR5                 0x28
                     68: #define DEC_21X40_CSR6                 0x30
                     69: #define DEC_21X40_CSR7                 0x38
                     70: #define DEC_21X40_CSR8                 0x40
                     71: #define DEC_21X40_CSR9                 0x48
                     72: #define DEC_21X40_CSR10                        0x50
                     73: #define DEC_21X40_CSR11                        0x58
                     74: #define DEC_21X40_CSR12                        0x60
                     75: #define DEC_21X40_CSR13                        0x68
                     76: #define DEC_21X40_CSR14                        0x70
                     77: #define DEC_21X40_CSR15                        0x78
                     78: 
                     79: /*
                     80:  * Command and Status Register Definitions. 
                     81:  */
                     82: typedef struct csr0Struct {
                     83:     unsigned int
                     84:            rsvd        :11,
                     85:             dbo         :1,             /* descriptor byte ordering */
                     86:            tap         :3,             /* transmit auto polling */
                     87:            das         :1,             /* diagnostic address space */
                     88:            cal         :2,             /* cache alignment */
                     89:            pbl         :6,             /* programmable burst length */
                     90:            ble         :1,             /* big/little endian */
                     91:            dsl         :5,             /* descriptor skip length */
                     92:            bar         :1,             /* bus arbitration */
                     93:            swr         :1;             /* software reset */
                     94: } busModeRegister_t;
                     95: 
                     96: typedef struct csr1Struct {
                     97:     unsigned int
                     98:            rsvd        :31,
                     99:            tpd         :1;             /* transmit poll demand */
                    100: } transmitPollDemand_t;
                    101: 
                    102: typedef struct csr2Struct{
                    103:     unsigned int
                    104:            rsvd        :31,
                    105:            rpd         :1;             /* receive poll demand */
                    106: } receivePollDemand_t;
                    107: 
                    108: typedef struct csr3Struct {
                    109:     unsigned int
                    110:            rdlba       :32;            /* receive desc. list base address */
                    111: } receiveListBaseAddress_t;
                    112: 
                    113: typedef struct csr4Struct {
                    114:     unsigned int
                    115:            tdlba       :32;            /* transmit desc. list base address */
                    116: } transmitListBaseAddress_t;
                    117: 
                    118: typedef struct csr5Struct {
                    119:     unsigned int
                    120:            rsvd3       :6,
                    121:            eb          :3,             /* error bits */
                    122:            ts          :3,             /* transmission process state */
                    123:            rs          :3,             /* receive process state */
                    124:            nis         :1,             /* normal interrupt summary */
                    125:            ais         :1,             /* abnormal interrupt summary */
                    126:            rsvd2       :1,
                    127:            se          :1,             /* system error */
                    128:            lnf         :1,             /* link fail */
                    129:            fd          :1,             /* full-duplex short frame received */
                    130:            at          :1,             /* AUI/TP pin */
                    131:            rwt         :1,             /* receive watchdog timeout */
                    132:            rps         :1,             /* receive process stopped */
                    133:            ru          :1,             /* receive buffer unavailable */
                    134:            ri          :1,             /* receive interrupt */
                    135:            unf         :1,             /* transmit underflow */
                    136:            rsvd        :1,
                    137:            tjt         :1,             /* transmit jabber time-out */
                    138:            tu          :1,             /* transmit buffer unavailable */
                    139:            tps         :1,             /* transmit process stopped */
                    140:            ti          :1;             /* transmit interrupt */
                    141: } statusRegister_t;
                    142: 
                    143: typedef struct csr5Struct_41 {
                    144:     unsigned int
                    145:            rsvd3       :6,
                    146:            eb          :3,             /* error bits */
                    147:            ts          :3,             /* transmission process state */
                    148:            rs          :3,             /* receive process state */
                    149:            nis         :1,             /* normal interrupt summary */
                    150:            ais         :1,             /* abnormal interrupt summary */
                    151:             er         :1,             /* early receive */
                    152:            se          :1,             /* system error */
                    153:            lnf         :1,             /* link fail */
                    154:            tm          :1,             /* full-duplex short frame received */
                    155:            rsvd1       :1,             /* AUI/TP pin */
                    156:            rwt         :1,             /* receive watchdog timeout */
                    157:            rps         :1,             /* receive process stopped */
                    158:            ru          :1,             /* receive buffer unavailable */
                    159:            ri          :1,             /* receive interrupt */
                    160:            unf         :1,             /* transmit underflow */
                    161:            lnp         :1,             /* link pass */
                    162:            tjt         :1,             /* transmit jabber time-out */
                    163:            tu          :1,             /* transmit buffer unavailable */
                    164:            tps         :1,             /* transmit process stopped */
                    165:            ti          :1;             /* transmit interrupt */
                    166: } statusRegister_41_t;
                    167: 
                    168: typedef struct csr6Struct {
                    169:     unsigned int
                    170:             sc          :1,
                    171:            rsvd        :13,
                    172:            ca          :1,             /* capture effect enable */
                    173:            rsvd2       :1,
                    174:            tr          :2,             /* threshold control bits */
                    175:            st          :1,             /* start/stop transmission command */
                    176:            fc          :1,             /* force collision mode */
                    177:            om          :2,             /* operating mode */
                    178:            fd          :1,             /* full-duplex mode */
                    179:            fkd         :1,             /* flakey oscillator disable */
                    180:            pm          :1,             /* pass all multicast */
                    181:            pr          :1,             /* promiscuous mode */
                    182:            sb          :1,             /* start/stop backoff counter */
                    183:            inf         :1,             /* inverse filtering */
                    184:            pb          :1,             /* pass bad frames */
                    185:            ho          :1,             /* hash-only filtering mode */
                    186:            sr          :1,             /* start/stop receive */
                    187:            hp          :1;             /* hash/perfect receive filt. mode */
                    188: } operationModeRegister_t;
                    189: 
                    190: typedef struct csr7Struct {
                    191:     unsigned int
                    192:            rsvd3       :15,
                    193:            nim         :1,             /* normal interrupt summary mask */
                    194:            aim         :1,             /* abnormal interrupt summary mask */
                    195:            rsvd2       :1,
                    196:            sem         :1,             /* system error mask */
                    197:            lfm         :1,             /* link fail mask */
                    198:            fdm         :1,             /* full-duplex mask  */
                    199:            atm         :1,             /* AUI/TP switch mask */
                    200:            rwm         :1,             /* receive watchdog timeout mask */
                    201:            rsm         :1,             /* receive stopped mask */
                    202:            rum         :1,             /* receive buffer unavail. mask */
                    203:            rim         :1,             /* receive interrupt mask */
                    204:            unm         :1,             /* underflow interrupt mask */
                    205:            rsvd1       :1,
                    206:            tjm         :1,             /* transmit jabber time-out mask */
                    207:            tum         :1,             /* transmit buffer unavail. mask */
                    208:            tsm         :1,             /* transmit stopped mask */
                    209:            tim         :1;             /* transmit interrupt mask */
                    210: } interruptMaskRegister_t;
                    211: 
                    212: typedef struct csr8Struct {
                    213:     unsigned int
                    214:            rsvd        :15,
                    215:            mfo         :1,             /* missed frame overflow */
                    216:            mfc         :16;            /* missed frame counter */
                    217: } missedFrameCounter_t;
                    218: 
                    219: 
                    220: /*
                    221:  * This is CSR9 for DECchip21040. 
                    222:  */
                    223: 
                    224: typedef struct csr90Struct {
                    225:     unsigned int
                    226:            dtnv        :1,             /* data not valid */
                    227:            rsvd        :23,
                    228:            dt          :8;             /* data */
                    229: } ethernetROMRegister_t;
                    230: 
                    231: /*
                    232:  * This is CSR9 for DECchip21041. 
                    233:  */
                    234: typedef struct csr91Struct {
                    235:     unsigned int
                    236:             rsvd        :16,
                    237:            mod         :1,             /* mode select */
                    238:            sro         :1,             /* read operation */
                    239:            swo         :1,             /* write opration */
                    240:            sbr         :1,
                    241:            ssr         :1,             /* select serial ROM */
                    242:            sreg        :1,             /* select external register */
                    243:            rsvd1       :6,
                    244:            sdo         :1,             /* data out */
                    245:            sdi         :1,             /* data in */
                    246:            sclk        :1,             /* serial clock */
                    247:            scs         :1;             /* chip select */
                    248: //         mdo         :1,             /* MII management data out */
                    249: //         mmd         :2,             /* MII management mode */
                    250: //         mdi         :1,             /* MII management data in */
                    251: //         rsvd4       :12;
                    252: } serialROMRegister_t;
                    253: 
                    254: /*
                    255:  * CSR 10 is reserved so we omit it. 
                    256:  */
                    257: struct csr10Struct {
                    258:     unsigned int
                    259:            rsvd        :32;
                    260: };
                    261: 
                    262: typedef struct csr11Struct {
                    263:     unsigned int
                    264:            rsvd        :15,
                    265:            CON         :1,
                    266:            fdacv       :16;            /* full-duplex auto-conf value */
                    267: } fullDuplexRegister_t;
                    268: 
                    269: /*
                    270:  * Serial Interface Attachment CSRs. 
                    271:  */ 
                    272: 
                    273: typedef struct csr12Struct {
                    274:     unsigned int
                    275:            rsvd        :24,
                    276:            dao         :1,             /* PLL all one */
                    277:            daz         :1,             /* PLL all zero */
                    278:            dsp         :1,             /* PLL self-test pass */
                    279:            dsd         :1,             /* PLL self-test done */
                    280:            aps         :1,             /* auto polarity state */
                    281:            lkf         :1,             /* link fail status */
                    282:            ncr         :1,             /* network connection error */
                    283:            paui        :1;             /* pin AUI_TP detection */
                    284: } siaStatusRegister_t;
                    285: 
                    286: typedef struct csr12Struct_41 {
                    287:     unsigned int
                    288:            lpc         :16,            /* link-partner's link code word */
                    289:            lpn         :1,             /* link-partner negotiable */
                    290:            ans         :3,             /* auto-negotiate arbitratione state */
                    291:            anr_fds     :1,             /* auto-negotiation restart/ */
                    292:                                        /* full-duplex selected */
                    293:            nsn         :1,             /* non-stable NLPs detected */
                    294:            nra         :1,             /* non-selected port activity */
                    295:            sra         :1,             /* selected port activity */
                    296:            dao         :1,             /* PLL all one */
                    297:            daz         :1,             /* PLL all zero */
                    298:            dsp         :1,             /* PLL self-test pass */
                    299:            dsd         :1,             /* PLL self-test done */
                    300:            aps         :1,             /* auto polarity state */
                    301:            lkf         :1,             /* link fail status */
                    302:            ncr         :1,             /* network connection error */
                    303:            rsvd        :1;
                    304: } siaStatusRegister_41_t;
                    305: 
                    306: typedef struct csr13Struct {
                    307:     unsigned int
                    308:            rsvd        :16,
                    309:            oe57        :1,             /* output enable 5 6 7 */
                    310:            oe24        :1,             /* output enable 2 4 */
                    311:            oe13        :1,             /* outut enable 1 3 */
                    312:            ie          :1,             /* input enable */
                    313:            sel         :4,             /* ext. port output multiplx. select */
                    314:            ase         :1,             /* APLL start enable */
                    315:            sim         :1,             /* serial interface input multiplx. */
                    316:            eni         :1,             /* encoder input multiplexer */
                    317:            edp         :1,             /* SIA PLL external input enable */
                    318:            aui         :1,             /* 10Base-T or AUI */
                    319:            cac         :1,             /* CSR auto configuration */
                    320:            ps          :1,             /* pin AUI/TP selection */
                    321:            srl         :1;             /* SIA reset */
                    322: } siaConnectivityRegister_t;
                    323: 
                    324: typedef struct csr14Struct {
                    325:     unsigned int
                    326:            rsvd2       :17,
                    327:            spp         :1,             /* set polarity plus */
                    328:            ape         :1,             /* auto polarity enable */
                    329:            lte         :1,             /* link test enable */
                    330:            sqe         :1,             /* signal quality gen. en. */
                    331:            cld         :1,             /* collision detect enable */
                    332:            csq         :1,             /* collision squelch enable */
                    333:            rsq         :1,             /* receive squelch enable */
                    334:            rsvd1       :2,
                    335:            cpen        :2,             /* compensation enable */
                    336:            lse         :1,             /* link pulse send enable */
                    337:            dren        :1,             /* driver enable */
                    338:            lbk         :1,             /* loopback enable */
                    339:            ecen        :1;             /* encoder enable */
                    340: } siaTransmitReceiveRegister_t;
                    341: 
                    342: typedef struct csr14Struct_41 {
                    343:     unsigned int
                    344:            rsvd        :16,
                    345:            tas         :1,             /* 10BASE-T/AUI autosensing enable */
                    346:            spp         :1,             /* set polarity plus */
                    347:            ape         :1,             /* auto polarity enable */
                    348:            lte         :1,             /* link test enable */
                    349:            sqe         :1,             /* signal quality gen. en. */
                    350:            cld         :1,             /* collision detect enable */
                    351:            csq         :1,             /* collision squelch enable */
                    352:            rsq         :1,             /* receive squelch enable */
                    353:            ane         :1,             /* auto-negotiation enable */
                    354:            hde         :1,             /* half-duplex enable */
                    355:            cpen        :2,             /* compensation enable */
                    356:            lse         :1,             /* link pulse send enable */
                    357:            dren        :1,             /* driver enable */
                    358:            lbk         :1,             /* loopback enable */
                    359:            ecen        :1;             /* encoder enable */
                    360: } siaTransmitReceiveRegister_41_t;
                    361: 
                    362: typedef struct csr15Struct {
                    363:     unsigned int
                    364:            rsvd4       :18,
                    365:            frl         :1,             /* force receive low */
                    366:            dpst        :1,             /* PLL self-test start */
                    367:            rsvd3       :1,
                    368:            flf         :1,             /* force link fail */
                    369:            fusq        :1,             /* force unsquelch */
                    370:            tsck        :1,             /* test clock */
                    371:            rsvd2       :2,
                    372:            rwr         :1,             /* receive watchdog release */
                    373:            rwd         :1,             /* receive watchdog disable */
                    374:            rsvd1       :1,
                    375:            jck         :1,             /* jabber clock */
                    376:            huj         :1,             /* host unjab */
                    377:            jbd         :1;             /* jabber disable */
                    378: } siaGeneralRegister_t;
                    379: 
                    380: /*
                    381:  * This is done for convenience in accessing registers. 
                    382:  */
                    383: typedef union {
                    384:     struct csr0Struct  csr0;
                    385:     struct csr1Struct  csr1;
                    386:     struct csr2Struct  csr2;
                    387:     struct csr3Struct  csr3;
                    388:     struct csr4Struct  csr4;
                    389:     struct csr5Struct  csr5;
                    390:     struct csr5Struct_41       csr5_41;
                    391:     struct csr6Struct  csr6;
                    392:     struct csr7Struct  csr7;
                    393:     struct csr8Struct  csr8;
                    394:     struct csr90Struct csr90;
                    395:     struct csr91Struct csr91;
                    396:     struct csr10Struct csr10;
                    397:     struct csr11Struct csr11;
                    398:     struct csr12Struct csr12;
                    399:     struct csr12Struct_41      csr12_41;
                    400:     struct csr13Struct csr13;
                    401:     struct csr14Struct csr14;
                    402:     struct csr15Struct csr15;
                    403:     unsigned int       data;
                    404: } csrRegUnion;
                    405: 
                    406: /*  
                    407:  * Descriptor structures
                    408:  */
                    409: 
                    410: typedef union  {
                    411:     struct _tdes0      {
                    412:        unsigned int    
                    413:            own         :1,             /* ownership (1 == 21X40) */
                    414:            rsvd2       :15,
                    415:            es          :1,             /* error summary */
                    416:            to          :1,             /* transmit jabber timeout */
                    417:            rsvd1       :2,
                    418:            lo          :1,             /* loss of carrier */
                    419:            nc          :1,             /* no carrier */
                    420:            lc          :1,             /* late collision */
                    421:            ec          :1,             /* excessive collisions */
                    422:            hf          :1,             /* heartbeat fail */
                    423:            cc          :4,             /* collision count */
                    424:            lf          :1,             /* link fail */
                    425:            uf          :1,             /* underflow error */
                    426:            de          :1;             /* deferred */
                    427:     } reg;
                    428:     unsigned int data;
                    429: } tdes0;
                    430: 
                    431: typedef union  {
                    432:     struct     {
                    433:        unsigned int    
                    434:            ic          :1,                     /* interrupt on completion */
                    435:            ls          :1,                     /* last segment */
                    436:            fs          :1,                     /* first segment */
                    437:            ft1         :1,                     /* filtering type */
                    438:            set         :1,                     /* setup packet */
                    439:            ac          :1,                     /* add CRC disable */
                    440:            ter         :1,                     /* transmit end of ring */
                    441:            tch         :1,                     /* second address chained */
                    442:            dpd         :1,                     /* disabled padding */
                    443:            fto         :1,                     /* filtering type */
                    444:            byteCountBuffer2    :11,            /* buffer 2 size */
                    445:            byteCountBuffer1    :11;            /* buffer 1 size */
                    446:     } reg;
                    447:     unsigned int data;
                    448: } tdes1;
                    449: 
                    450: typedef struct _txDescriptorStruct     {
                    451:        tdes0 status;
                    452:        tdes1 control;
                    453:        unsigned int bufferAddress1;
                    454:        unsigned int bufferAddress2;
                    455: } txDescriptorStruct;
                    456: 
                    457: typedef union  {
                    458:     struct     {
                    459:        unsigned int    
                    460:            own         :1,             /* ownership (1 == 21X40) */
                    461:            fl          :15,            /* frame length */
                    462:            es          :1,             /* error summary */
                    463:            le          :1,             /* length error */
                    464:            dt          :2,             /* data type */
                    465:            rf          :1,             /* runt frame */
                    466:            mf          :1,             /* multicast frame */
                    467:            fs          :1,             /* first descriptor */
                    468:            ls          :1,             /* last descriptor */
                    469:            tl          :1,             /* frame too long */
                    470:            cs          :1,             /* collision seen */
                    471:            ft          :1,             /* frame type */
                    472:            rj          :1,             /* receive watchdog */
                    473:            rsvd        :1,
                    474:            db          :1,             /* dribbling bit */
                    475:            ce          :1,             /* CRC error */
                    476:            of          :1;             /* overflow */
                    477:     } reg;
                    478:     unsigned int data;
                    479: } rdes0;
                    480: 
                    481: typedef union  {
                    482:     struct     {
                    483:        unsigned int    
                    484:            rsvd2       :6,
                    485:            rer         :1,                     /* receive end of ring */
                    486:            rch         :1,                     /* second address chained */
                    487:            rsvd1       :2,
                    488:            byteCountBuffer2    :11,            /* buffer 2 size */
                    489:            byteCountBuffer1    :11;            /* buffer 1 size */
                    490:     } reg;
                    491:     unsigned int data;
                    492: } rdes1;
                    493: 
                    494: typedef struct _rxDescriptorStruct     {
                    495:        rdes0 status;
                    496:        rdes1 control;
                    497:        unsigned int bufferAddress1;
                    498:        unsigned int bufferAddress2;
                    499: } rxDescriptorStruct;
                    500: 
                    501: #define DEC21040_VENDOR_DEVICE_ID              0x00021011
                    502: #define DEC21041_VENDOR_DEVICE_ID              0x00141011
                    503: 
                    504: #define DEC_21X40_SETUP_PERFECT_ENTRIES                16
                    505: #define DEC_21X40_SETUP_PERFECT_MCAST_ENTRIES  14
                    506: 
                    507: typedef struct {
                    508:        unsigned long physicalAddress[DEC_21X40_SETUP_PERFECT_ENTRIES][3];
                    509: } setupBuffer_t;
                    510: 
                    511: #ifdef undef
                    512: void *
                    513: IOMallocPage(int page_size, void * * actual_ptr,
                    514:                                 int * actual_size)
                    515: {
                    516:     void * mem_ptr;
                    517:     
                    518:     if (page_size != PAGE_SIZE)
                    519:        return (NULL);
                    520:     
                    521:     *actual_size = PAGE_SIZE * 2;
                    522:     mem_ptr = IOMalloc(PAGE_SIZE * 2);
                    523:     if (mem_ptr == NULL)
                    524:        return (NULL);
                    525:     *actual_ptr = mem_ptr;
                    526:     return ((void *)round_page(mem_ptr));
                    527: }
                    528: #endif undef
                    529: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.