Annotation of XNU/iokit/Drivers/network/drvIntel82557/i82557HW.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (c) 1996 NeXT Software, Inc.  All rights reserved. 
                     24:  *
                     25:  * i82557HW.h - Intel 82557/82558 chip-related definitions
                     26:  *
                     27:  * HISTORY
                     28:  * Jan 22, 1996        Dieter Siegmund at NeXT ([email protected])
                     29:  *      Created.
                     30:  */
                     31: 
                     32: #ifndef _I82557HW_H
                     33: #define _I82557HW_H
                     34: 
                     35: #include <net/etherdefs.h>
                     36: 
                     37: //-------------------------------------------------------------------------
                     38: // Misc definitions.
                     39: //-------------------------------------------------------------------------
                     40: 
                     41: #define DWORD_ALIGNMENT                                4
                     42: #define WORD_ALIGNMENT                         2
                     43: #define PARAGRAPH_ALIGNMENT                    16
                     44: #define CACHE_ALIGNMENT                                32
                     45: 
                     46: #define C_NULL                                         (~0)
                     47: 
                     48: #define PCI_CFID_OFFSET                                0x00
                     49: #define PCI_CFCS_OFFSET                                0x04
                     50: #define PCI_BAR0_OFFSET                                0x10
                     51: #define PCI_CFID_INTEL82557                    0x12298086
                     52: 
                     53: typedef enum {
                     54:        MEDIUM_TYPE_10_HD = 0,
                     55:        MEDIUM_TYPE_10_FD,
                     56:        MEDIUM_TYPE_TX_HD,
                     57:        MEDIUM_TYPE_TX_FD,
                     58:        MEDIUM_TYPE_T4,
                     59:        MEDIUM_TYPE_AUTO,
                     60:        MEDIUM_TYPE_INVALID,
                     61: } mediumType_t;
                     62: 
                     63: //-------------------------------------------------------------------------
                     64: // SCB status word.
                     65: // Offset 0, 16-bit, RW.
                     66: //-------------------------------------------------------------------------
                     67: typedef UInt16 scb_status_t;
                     68: #define SCB_STATUS_CX                          BIT(15) // command block with 'I' bit set.
                     69: #define SCB_STATUS_FR                          BIT(14) // RU finished receiving a frame.
                     70: #define SCB_STATUS_CNA                         BIT(13) // CU active to suspended/idle.
                     71: #define SCB_STATUS_RNR                         BIT(12) // RU no longer in ready state.
                     72: #define SCB_STATUS_MDI                         BIT(11) // MDI read/write cycle is done.
                     73: #define SCB_STATUS_SWI                         BIT(10) // software interrupt.
                     74: #define SCB_STATUS_ER                          BIT(9)  // early receive interrupt.
                     75: #define SCB_STATUS_FCP                         BIT(8)  // flow control pause interrupt.
                     76: #define SCB_STATUS_INT_MASK                    0xff00  // mask for all interrupt bits.
                     77: 
                     78: #define SCB_STATUS_CUS_SHIFT           6
                     79: #define SCB_STATUS_CUS_MASK                    CSR_MASK(SCB_STATUS_CUS, 0x3)
                     80: #define SCB_CUS_IDLE                           0
                     81: #define SCB_CUS_SUSPEND                                1
                     82: #define SCB_CUS_ACTIVE                         2
                     83: 
                     84: #define SCB_STATUS_RUS_SHIFT           2
                     85: #define SCB_STATUS_RUS_MASK                    CSR_MASK(SCB_STATUS_RUS, 0xf)
                     86: #define SCB_RUS_IDLE                           0
                     87: #define SCB_RUS_SUSPEND                                1
                     88: #define SCB_RUS_NO_RESOURCES           2
                     89: #define SCB_RUS_READY                          4
                     90: #define SCB_RUS_SUSPEND_NO_RBDS                9
                     91: #define SCB_RUS_NO_RBDS                                10
                     92: #define SCB_RUS_READY_NO_RBDS          12
                     93: 
                     94: //-------------------------------------------------------------------------
                     95: // SCB interrupt control byte.
                     96: // Offset 3, 8-bit, RW.
                     97: //-------------------------------------------------------------------------
                     98: typedef UInt8 scb_interrupt_t;
                     99: #define SCB_INTERRUPT_CX                       BIT(7)  // interrupt masks
                    100: #define SCB_INTERRUPT_FR                       BIT(6)
                    101: #define SCB_INTERRUPT_CNA                      BIT(5)
                    102: #define SCB_INTERRUPT_RNR                      BIT(4)
                    103: #define SCB_INTERRUPT_ER                       BIT(3)
                    104: #define SCB_INTERRUPT_FCP                      BIT(2)
                    105: #define SCB_INTERRUPT_SI                       BIT(1)
                    106: #define SCB_INTERRUPT_M                                BIT(0)
                    107: 
                    108: //-------------------------------------------------------------------------
                    109: // SCB command byte.
                    110: // Offset 2, 8-bit, RW.
                    111: //-------------------------------------------------------------------------
                    112: typedef UInt8 scb_command_t;
                    113: #define SCB_COMMAND_CUC_SHIFT          4
                    114: #define SCB_COMMAND_CUC_MASK           CSR_MASK(SCB_COMMAND_CUC, 0xf)
                    115: #define SCB_CUC_NOP                                    0
                    116: #define SCB_CUC_START                          1
                    117: #define SCB_CUC_RESUME                         2
                    118: #define SCB_CUC_LOAD_DUMP_ADDR         4
                    119: #define SCB_CUC_DUMP_STAT                      5
                    120: #define SCB_CUC_LOAD_BASE                      6
                    121: #define SCB_CUC_DUMP_RESET_STAT                7
                    122: #define SCB_CUC_STATIC_RESUME          10
                    123: 
                    124: #define SCB_COMMAND_RUC_SHIFT          0
                    125: #define SCB_COMMAND_RUC_MASK           CSR_MASK(SCB_COMMAND_RUC, 0x7)
                    126: #define SCB_RUC_NOP                                    0
                    127: #define SCB_RUC_START                          1
                    128: #define SCB_RUC_RESUME                         2
                    129: #define SCB_RUC_DMA_REDIRECT           3
                    130: #define SCB_RUC_ABORT                          4
                    131: #define SCB_RUC_LOAD_HDS                       5
                    132: #define SCB_RUC_LOAD_BASE                      6
                    133: #define SCB_RUC_RBD_RESUME                     7
                    134: 
                    135: //-------------------------------------------------------------------------
                    136: // MDI control register.
                    137: // Offset 0x10, 32-bit, RW.
                    138: //-------------------------------------------------------------------------
                    139: typedef UInt32 mdi_control_t;
                    140: #define MDI_CONTROL_INT_ENABLE         BIT(29) // interrupt enable.
                    141: #define MDI_CONTROL_READY                      BIT(28) // ready bit.
                    142: #define MDI_CONTROL_OPCODE_SHIFT       26
                    143: #define MDI_CONTROL_OPCODE_MASK                CSR_MASK(MDI_CONTROL_OPCODE, 0x3)
                    144: #define MDI_CONTROL_OP_WRITE           1
                    145: #define MDI_CONTROL_OP_READ                    2
                    146: #define MDI_CONTROL_PHYADDR_SHIFT      21
                    147: #define MDI_CONTROL_PHYADDR_MASK       CSR_MASK(MDI_CONTROL_PHYADDR, 0x1f)
                    148: #define MDI_CONTROL_REGADDR_SHIFT      16
                    149: #define MDI_CONTROL_REGADDR_MASK       CSR_MASK(MDI_CONTROL_REGADDR, 0x1f)
                    150: #define MDI_CONTROL_DATA_SHIFT         0
                    151: #define MDI_CONTROL_DATA_MASK          CSR_MASK(MDI_CONTROL_DATA, 0xffff)
                    152: 
                    153: //-------------------------------------------------------------------------
                    154: // EEPROM control register.
                    155: // Offset 0xE, 16-bit, RW.
                    156: //-------------------------------------------------------------------------
                    157: typedef UInt16 eeprom_control_t;
                    158: #define EEPROM_CONTROL_EEDO                    BIT(3)
                    159: #define EEPROM_CONTROL_EEDI                    BIT(2)
                    160: #define EEPROM_CONTROL_EECS                    BIT(1)
                    161: #define EEPROM_CONTROL_EESK                    BIT(0)
                    162: 
                    163: //-------------------------------------------------------------------------
                    164: // Flow control threshold register.
                    165: // Offset 0x19, 8-bit, RW.
                    166: //-------------------------------------------------------------------------
                    167: #define FC_THRESHOLD_SHIFT                     0
                    168: #define FC_THRESHOLD_MASK                      CSR_MASK(FC_THRESHOLD, 0x7)
                    169: #define FC_THRESHOLD_512                       0
                    170: #define FC_THRESHOLD_1024                      1
                    171: #define FC_THRESHOLD_1280                      2
                    172: #define FC_THRESHOLD_1536                      3
                    173: 
                    174: //-------------------------------------------------------------------------
                    175: // Flow control command register.
                    176: // Offset 0x20, 8-bit, RW.
                    177: //-------------------------------------------------------------------------
                    178: #define FC_XON                                         BIT(0)
                    179: #define FC_XOFF                                                BIT(1)
                    180: #define FC_FULL                                                BIT(2)
                    181: #define FC_PAUSED                                      BIT(3)
                    182: #define FC_PAUSED_LOW                          BIT(4)
                    183: 
                    184: //-------------------------------------------------------------------------
                    185: // Generic command block definition.
                    186: //-------------------------------------------------------------------------
                    187: #define CB_NOP                         0
                    188: #define CB_IA_ADDRESS                  1
                    189: #define CB_CONFIGURE                   2
                    190: #define CB_MULTICAST                   3
                    191: #define CB_TRANSMIT                    4
                    192: #define CB_LOAD_MICROCODE              5
                    193: #define CB_DUMP                        6
                    194: #define CB_DIAGNOSE                    7
                    195: 
                    196: typedef UInt16 cb_status_t;
                    197: #define CB_STATUS_C                                    BIT(15) // command complete.
                    198: #define CB_STATUS_OK                           BIT(13) // DMA OK.
                    199: 
                    200: typedef UInt16 cb_command_t;
                    201: #define CB_EL                                          BIT(15) // end of list.
                    202: #define CB_S                                           BIT(14) // suspend bit.
                    203: #define CB_I                                           BIT(13) // interrupt bit.
                    204: #define CB_CMD_SHIFT                           0
                    205: #define CB_CMD_MASK                                    CSR_MASK(CB_CMD, 0x7)
                    206: 
                    207: #define CB_CMD_NOP                                     0x0
                    208: #define CB_CMD_IASETUP                         0x1
                    209: #define CB_CMD_CONFIGURE                       0x2
                    210: #define CB_CMD_MCSETUP                         0x3
                    211: #define CB_CMD_TRANSMIT                                0x4
                    212: 
                    213: static __inline__ char *
                    214: CUCommandString(int cmd)
                    215: {
                    216:        char * s[] = {
                    217:                "nop",
                    218:                "iasetup",
                    219:                "configure",
                    220:                "mcsetup",
                    221:                "transmit"
                    222:     };
                    223:     return (s[cmd]);
                    224: }
                    225: 
                    226: typedef struct {
                    227:        volatile cb_status_t    status;
                    228:        volatile cb_command_t                   command;
                    229:        IOPhysicalAddress               link;
                    230: } cbHeader_t;
                    231: 
                    232: //-------------------------------------------------------------------------
                    233: // Configure command.
                    234: //-------------------------------------------------------------------------
                    235: #define CB_CONFIG_BYTE_COUNT           22
                    236: 
                    237: #define CB_CB0_BYTE_COUNT_SHIFT                0
                    238: #define CB_CB0_BYTE_COUNT_MASK         CSR_MASK(CB_CB0_BYTE_COUNT, 0x3f)
                    239: 
                    240: #define CB_CB1_TX_FIFO_LIMIT_SHIFT     4
                    241: #define CB_CB1_TX_FIFO_LIMIT_MASK      CSR_MASK(CB_CB1_TX_FIFO_LIMIT, 0xf)
                    242: #define CB_CB1_RX_FIFO_LIMIT_SHIFT     0
                    243: #define CB_CB1_RX_FIFO_LIMIT_MASK      CSR_MASK(CB_CB1_RX_FIFO_LIMIT, 0xf)
                    244: #define CB_CB1_TX_FIFO_0                       8       // 0  bytes
                    245: #define CB_CB1_RX_FIFO_64                      8       // 64 bytes
                    246: 
                    247: #define CB_CB2_ADAPTIVE_IFS_SHIFT      0
                    248: #define CB_CB2_ADAPTIVE_IFS_MASK       CSR_MASK(CB_CB2_ADAPTIVE_IFS, 0xff)
                    249: 
                    250: #define CB_CB3_TERM_ON_CL              BIT(3)
                    251: #define CB_CB3_READ_AL_ENABLE          BIT(2)
                    252: #define CB_CB3_TYPE_ENABLE             BIT(1)
                    253: #define CB_CB3_MWI_ENABLE              BIT(0)
                    254: 
                    255: #define CB_CB4_RX_MIN_SHIFT                    0
                    256: #define CB_CB4_RX_MIN_MASK                     CSR_MASK(CB_CB4_RX_MIN, 0x7f)
                    257: 
                    258: #define CB_CB5_DMBC_EN                         BIT(7)
                    259: #define CB_CB5_TX_MAX_SHIFT                    0
                    260: #define CB_CB5_TX_MAX_MASK                     CSR_MASK(CB_CB4_TX_MAX, 0x7f)
                    261: 
                    262: #define CB_CB6_SAVE_BF                         BIT(7)
                    263: #define CB_CB6_DISC_OVER                       BIT(6)
                    264: #define CB_CB6_STD_STATS                       BIT(5)
                    265: #define CB_CB6_STD_TCB                         BIT(4)
                    266: #define CB_CB6_CI_INT                          BIT(3)
                    267: #define CB_CB6_TNO_INT                         BIT(2)
                    268: #define CB_CB6_NON_DIRECT_DMA          BIT(1)
                    269: #define CB_CB6_LATE_SCB                                BIT(0)
                    270: 
                    271: #define CB_CB7_DYNAMIC_TBD                     BIT(7)
                    272: #define CB_CB7_UNDERRUN_RETRY_SHIFT    1
                    273: #define CB_CB7_UNDERRUN_RETRY_MASK     CSR_MASK(CB_CB7_UNDERRUN_RETRY, 0x3)
                    274: #define CB_CB7_UNDERRUN_RETRY_1                1
                    275: #define CB_CB7_UNDERRUN_RETRY_2                2
                    276: #define CB_CB7_UNDERRUN_RETRY_3                3
                    277: #define CB_CB7_DISC_SHORT_FRAMES       BIT(0)
                    278: 
                    279: #define CB_CB8_CSMA_EN                         BIT(0)
                    280: 
                    281: #define CB_CB10_LOOPBACK_SHIFT         6
                    282: #define CB_CB10_LOOPBACK_MASK          CSR_MASK(CB_CB10_LOOPBACK, 0x3)
                    283: #define CB_CB10_PREAMBLE_SHIFT         4
                    284: #define CB_CB10_PREAMBLE_MASK          CSR_MASK(CB_CB10_PREAMBLE, 0x3)
                    285: #define CB_CB10_PREAMBLE_1_BYTE                0
                    286: #define CB_CB10_PREAMBLE_3_BYTES       1
                    287: #define CB_CB10_PREAMBLE_7_BYTES       2
                    288: #define CB_CB10_PREAMBLE_15_BYTES      3
                    289: #define CB_CB10_NSAI                           BIT(3)
                    290: 
                    291: #define CB_CB11_LIN_PRIORITY_SHIFT     0
                    292: #define CB_CB11_LIN_PRIORITY_MASK      CSR_MASK(CB_CB11_PRIORITY, 0x7)
                    293: 
                    294: #define CB_CB12_IFS_SHIFT                      4
                    295: #define CB_CB12_IFS_MASK                       CSR_MASK(CB_CB12_IFS, 0xf)
                    296: #define CB_CB12_IFS_96_BIT_TIMES       0x6
                    297: #define CB_CB12_LIN_PRIORITY           BIT(0)
                    298: 
                    299: #define CB_CB13_FC_TYPE_LSB_SHIFT      0
                    300: #define CB_CB13_FC_TYPE_LSB_MASK       CSR_MASK(CB_CB13_FC_TYPE_LSB, 0xff)
                    301: #define CB_CB13_FC_TYPE_LSB_DEF                0               // 82558 compatible
                    302: 
                    303: #define CB_CB14_FC_TYPE_MSB_SHIFT      0
                    304: #define CB_CB14_FC_TYPE_MSB_MASK       CSR_MASK(CB_CB14_FC_TYPE_MSB, 0xff)
                    305: #define CB_CB14_FC_TYPE_MSB_DEF                0xf2    // 82558 compatible
                    306: 
                    307: #define CB_CB15_CRS_CDT                                BIT(7)
                    308: #define CB_CB15_BROADCAST_DISABLE      BIT(1)
                    309: #define CB_CB15_PROMISCUOUS                    BIT(0)
                    310: 
                    311: #define CB_CB16_FC_DELAY_LSB_SHIFT     0
                    312: #define CB_CB16_FC_DELAY_LSB_MASK      CSR_MASK(CB_CB16_FC_DELAY_LSB, 0xff)
                    313: #define CB_CB16_FC_DELAY_LSB_DEF       0
                    314: 
                    315: #define CB_CB17_FC_DELAY_MSB_SHIFT     0
                    316: #define CB_CB17_FC_DELAY_MSB_MASK      CSR_MASK(CB_CB17_FC_DELAY_MSB, 0xff)
                    317: #define CB_CB17_FC_DELAY_MSB_DEF       0x40
                    318: 
                    319: #define CB_CB18_LONG_RX_OK                     BIT(3)
                    320: #define CB_CB18_CRC_XFER                       BIT(2)
                    321: #define CB_CB18_PADDING                                BIT(1)
                    322: #define CB_CB18_STRIPPING                      BIT(0)
                    323: 
                    324: #define CB_CB19_AUTO_FDX                       BIT(7)
                    325: #define CB_CB19_FORCE_FDX                      BIT(6)
                    326: #define CB_CB19_REJECT_FC                      BIT(5)
                    327: #define CB_CB19_RX_FC_RESTART          BIT(4)
                    328: #define CB_CB19_RX_FC_RESTOP           BIT(3)
                    329: #define CB_CB19_TX_FC                          BIT(2)
                    330: #define CB_CB19_MAGIC_PKT_WAKEUP       BIT(1)
                    331: #define CB_CB19_ADDRESS_WAKEUP         BIT(0)
                    332: 
                    333: #define CB_CB20_MULTI_IA                       BIT(6)
                    334: #define CB_CB20_FC_ADDR_LSB_SHIFT      0
                    335: #define CB_CB20_FC_ADDR_LSB_MASK       CSR_MASK(CB_CB20_FC_ADDR_LSB, 0x1f)
                    336: #define CB_CB20_FC_ADDR_LSB_DEF                0x0f
                    337: 
                    338: #define CB_CB21_MULTICAST_ALL          BIT(3)
                    339: 
                    340: typedef struct cb_configure {
                    341:        cbHeader_t              header;
                    342:        UInt8                   byte[24];
                    343: } cb_configure_t;
                    344: 
                    345: //-------------------------------------------------------------------------
                    346: // MC-Setup command.
                    347: //-------------------------------------------------------------------------
                    348: typedef struct cb_mcsetup {
                    349:        cbHeader_t              header;
                    350:        UInt16                  count;
                    351:        enet_addr_t             addrs[0];
                    352: } cb_mcsetup_t;
                    353: 
                    354: //-------------------------------------------------------------------------
                    355: // IA-Setup command.
                    356: //-------------------------------------------------------------------------
                    357: typedef struct cb_iasetup {
                    358:        cbHeader_t              header;
                    359:     enet_addr_t                addr;
                    360: } cb_iasetup_t;
                    361: 
                    362: //-------------------------------------------------------------------------
                    363: // Port Commands.
                    364: // Enumerated port command values.
                    365: //-------------------------------------------------------------------------
                    366: typedef enum {
                    367:     portReset_e = 0,
                    368:     portSelfTest_e = 1,
                    369:     portSelectiveReset_e = 2,
                    370:     portDump_e = 3,
                    371: } port_command_t;
                    372: 
                    373: #define PORT_ADDRESS_SHIFT                     4
                    374: #define PORT_ADDRESS_MASK                      CSR_MASK(PORT_FUNCTION, 0xfffffff)
                    375: 
                    376: #define PORT_FUNCTION_SHIFT                    0
                    377: #define PORT_FUNCTION_MASK                     CSR_MASK(PORT_FUNCTION, 0xf)
                    378: 
                    379: //-------------------------------------------------------------------------
                    380: // Port Self-Test
                    381: // Definition for self test area.
                    382: //-------------------------------------------------------------------------
                    383: #define PORT_SELFTEST_GENERAL          BIT(12)
                    384: #define PORT_SELFTEST_DIAGNOSE         BIT(5)
                    385: #define PORT_SELFTEST_REGISTER         BIT(3)
                    386: #define PORT_SELFTEST_ROM                      BIT(2)
                    387: 
                    388: typedef struct port_selftest_t {
                    389:        UInt32                  signature;
                    390:        UInt32                  results;
                    391: } port_selftest_t;
                    392: 
                    393: /*
                    394:  * Typedef: CSR_t
                    395:  *
                    396:  * Purpose: Control Status Registers block
                    397:  *   Communication to the chip occurs via this set of
                    398:  *   memory-mapped (also io-mapped, which we don't use)
                    399:  *   registers.
                    400:  */
                    401: typedef struct csr {
                    402:     volatile scb_status_t                      status;
                    403:     volatile scb_command_t                     command;
                    404:        volatile scb_interrupt_t                interrupt;
                    405:        volatile IOPhysicalAddress              pointer;
                    406:        volatile UInt32                                 port;
                    407:        volatile UInt16                                 flashControl;
                    408:        volatile eeprom_control_t               eepromControl;
                    409:        volatile mdi_control_t                  mdiControl;
                    410:        volatile UInt32                                 rxDMAByteCount;
                    411:        volatile UInt8                                  earlyRxInterrupt;
                    412:        volatile UInt8                                  flowControlThreshold;
                    413:        volatile UInt8                                  flowControlCommand;
                    414:        volatile UInt8                                  powerManagement;
                    415: } CSR_t;
                    416: 
                    417: //-------------------------------------------------------------------------
                    418: // Structure containing error counters retrieved via:
                    419: //     Dump Statistics Counters command, or
                    420: //     Dump and Reset Statistics Counters command.
                    421: //
                    422: // NOTE: 82558 can return an extended set of statistics counters.
                    423: //-------------------------------------------------------------------------
                    424: typedef struct {
                    425:     UInt32             tx_good_frames;
                    426:     UInt32             tx_maxcol_errors;
                    427:     UInt32             tx_late_collision_errors;
                    428:     UInt32             tx_underrun_errors;
                    429:     UInt32             tx_lost_carrier_sense_errors;
                    430:     UInt32             tx_deferred;
                    431:     UInt32             tx_single_collisions;
                    432:     UInt32             tx_multiple_collisions;
                    433:     UInt32             tx_total_collisions;
                    434:     UInt32             rx_good_frames;
                    435:     UInt32             rx_crc_errors;
                    436:     UInt32             rx_alignment_errors;
                    437:     UInt32             rx_resource_errors;
                    438:     UInt32             rx_overrun_errors;
                    439:     UInt32             rx_collision_detect_errors;
                    440:     UInt32             rx_short_frame_errors;
                    441:     UInt32             _status;
                    442: #define DUMP_STATUS                                    0x0
                    443: #define DUMP_COMPLETE                          0xa005
                    444: #define DUMP_AND_RESET_COMPLETE                0xa007
                    445: } errorCounters_t;
                    446: 
                    447: //-------------------------------------------------------------------------
                    448: // RBD count dword.
                    449: // Offset 0, 32-bit, RW.
                    450: //-------------------------------------------------------------------------
                    451: typedef UInt32 rbd_count_t;
                    452: #define RBD_COUNT_EOF                          BIT(15) // end-of-frame bit.
                    453: #define RBD_COUNT_F                                    BIT(14) // buffer fetch bit.
                    454: #define RBD_COUNT_SHIFT                                0
                    455: #define RBD_COUNT_MASK                         CSR_MASK(RBD_COUNT, 0x3fff)
                    456: 
                    457: //-------------------------------------------------------------------------
                    458: // RBD size dword.
                    459: // Offset 0xC, 32-bit, RW.
                    460: //-------------------------------------------------------------------------
                    461: typedef UInt32 rbd_size_t;
                    462: #define RBD_SIZE_EL                                    BIT(15) // EL bit.
                    463: #define RBD_SIZE_SHIFT                         0
                    464: #define RBD_SIZE_MASK                          CSR_MASK(RBD_SIZE, 0x3fff)
                    465: 
                    466: //-------------------------------------------------------------------------
                    467: // RBD - receive buffer descriptor definition.
                    468: //-------------------------------------------------------------------------
                    469: typedef struct rbd {
                    470:        volatile rbd_count_t                    count;
                    471:        volatile IOPhysicalAddress              link;
                    472:        volatile IOPhysicalAddress              buffer;
                    473:        volatile rbd_size_t                             size;
                    474:        
                    475:        /* driver private */
                    476:        
                    477:        struct rbd *                                    _next;
                    478:        IOPhysicalAddress                               _paddr;
                    479:        struct mbuf *                                   _mbuf;
                    480:        UInt32                                                  _pad;
                    481: } rbd_t;
                    482: 
                    483: //-------------------------------------------------------------------------
                    484: // RFD status word.
                    485: // Offset 0, 16-bit, RW.
                    486: //-------------------------------------------------------------------------
                    487: typedef UInt16 rfd_status_t;
                    488: #define RFD_STATUS_C                           BIT(15) // complete bit.
                    489: #define RFD_STATUS_OK                          BIT(13) // OK bit.
                    490: #define RFD_STATUS_CRC_ERROR           BIT(11) // CRC error bit.
                    491: #define RFD_STATUS_ALIGNMENT_ERROR     BIT(10) // alignment error.
                    492: #define RFD_STATUS_NO_RESOURCES                BIT(9)  // no buffer space.
                    493: #define RFD_STATUS_DMA_OVERRUN         BIT(8)  // receive DMA overrun.
                    494: #define RFD_STATUS_FRAME_TOO_SHORT     BIT(7)  // frame too short.
                    495: #define RFD_STATUS_TYPE_FRAME          BIT(5)  // type/length bit.
                    496: #define RFD_STATUS_RX_ERROR                    BIT(4)  // RX_ERR pin on PHY was set.
                    497: #define RFD_STATUS_NO_ADDR_MATCH       BIT(2)  // no address match.
                    498: #define RFD_STATUS_IA_MATCH                    BIT(1)  // IA address match.
                    499: #define RFD_STATUS_COLLISION           BIT(0)  // receive collision.
                    500: 
                    501: //-------------------------------------------------------------------------
                    502: // RFD command word.
                    503: // Offset 2, 16-bit, RW.
                    504: //-------------------------------------------------------------------------
                    505: typedef UInt16 rfd_command_t;
                    506: #define RFD_COMMAND_EL                         BIT(15) // EL bit.
                    507: #define RFD_COMMAND_S                          BIT(14) // suspend bit.
                    508: #define RFD_COMMAND_H                          BIT(4)  // header RFD bit.
                    509: #define RFD_COMMAND_SF                         BIT(3)  // flexible mode bit.
                    510: 
                    511: //-------------------------------------------------------------------------
                    512: // RFD misc dword.
                    513: // Offset 0xC, 32-bit, RW.
                    514: //-------------------------------------------------------------------------
                    515: typedef UInt32 rfd_misc_t;
                    516: #define RFD_MISC_EOF                           BIT(15) // end-of-frame bit.
                    517: #define RFD_MISC_F                                     BIT(14) // buffer fetch bit.
                    518: #define RFD_MISC_ACT_COUNT_SHIFT       0
                    519: #define RFD_MISC_ACT_COUNT_MASK                CSR_MASK(RFD_MISC_ACT_COUNT,  0x3fff)
                    520: #define RFD_MISC_SIZE_SHIFT                    16
                    521: #define RFD_MISC_SIZE_MASK                     CSR_MASK(RFD_MISC_SIZE, 0x3fff)
                    522: 
                    523: //-------------------------------------------------------------------------
                    524: // RFD - receive frame descriptor definition.
                    525: //-------------------------------------------------------------------------
                    526: typedef struct rfd {
                    527:     volatile rfd_status_t                      status;
                    528:     volatile rfd_command_t                     command;
                    529:     volatile IOPhysicalAddress         link;
                    530:     volatile IOPhysicalAddress         rbdAddr;
                    531:        volatile rfd_misc_t                             misc;           // 16 bytes
                    532: 
                    533:        UInt32                                                  _pad[2];        // pad it to 64 bytes
                    534: 
                    535:        /* driver private */
                    536: 
                    537:        struct rfd *                                    _next;
                    538:        IOPhysicalAddress                               _paddr;
                    539:        rbd_t                                                   _rbd;           // 32 bytes
                    540: } rfd_t;
                    541: 
                    542: //-------------------------------------------------------------------------
                    543: // TBD - Transmit Buffer Descriptor.
                    544: //-------------------------------------------------------------------------
                    545: typedef UInt16 tbd_size_t;
                    546: #define TBD_SIZE_EL                                    BIT(15) // end of list
                    547: #define TBD_SIZE_SHIFT                         0
                    548: #define TBD_SIZE_MASK                          CSR_MASK(TBD_SIZE, 0x3fff)
                    549: 
                    550: typedef struct tbd {
                    551:        volatile IOPhysicalAddress              addr;
                    552:        volatile tbd_size_t                             size;
                    553: } tbd_t;
                    554: 
                    555: //-------------------------------------------------------------------------
                    556: // TxCB Status Word.
                    557: // Offset 0, 16-bit, RW.
                    558: //-------------------------------------------------------------------------
                    559: typedef UInt16 tcb_status_t;           
                    560: #define TCB_STATUS_C                           BIT(15) // complete bit
                    561: #define TCB_STATUS_OK                          BIT(13) // error free completion
                    562: #define TCB_STATUS_U                           BIT(12) // underrun bit
                    563: 
                    564: //-------------------------------------------------------------------------
                    565: // TxCB Command Word.
                    566: // Offset 2, 16-bit, RW.
                    567: //-------------------------------------------------------------------------
                    568: typedef UInt16 tcb_command_t;          
                    569: #define TCB_COMMAND_EL                         BIT(15) // end of list
                    570: #define TCB_COMMAND_S                          BIT(14) // suspend bit
                    571: #define TCB_COMMAND_I                          BIT(13) // interrupt bit
                    572: #define TCB_COMMAND_NC                         BIT(4)  // CRC/Source Address control
                    573: #define TCB_COMMAND_SF                         BIT(3)  // flexible mode bit
                    574: #define TCB_COMMAND_SHIFT                      0
                    575: #define TCB_COMMAND_MASK                       CSR_MASK(TCB_COMMAND, 0x7)
                    576: 
                    577: //-------------------------------------------------------------------------
                    578: // TxCB Count Word.
                    579: // Offset 0xC, 16-bit, RW.
                    580: //-------------------------------------------------------------------------
                    581: typedef UInt16 tcb_count_t;            
                    582: #define TCB_COUNT_EOF                          BIT(15) // whole frame in TCB
                    583: #define TCB_COUNT_SHIFT                                0
                    584: #define TCB_COUNT_MASK                         CSR_MASK(TCB_COUNT, 0x3fff)
                    585: 
                    586: //-------------------------------------------------------------------------
                    587: // TxCB - Transmit Command Block.
                    588: //-------------------------------------------------------------------------
                    589: #define TBDS_PER_TCB           12
                    590: #define TCB_TX_THRESHOLD       0xe0
                    591: 
                    592: typedef struct tcb {
                    593:        volatile tcb_status_t                   status;
                    594:        volatile tcb_command_t                  command;
                    595:     volatile IOPhysicalAddress         link;
                    596:     volatile IOPhysicalAddress         tbdAddr;
                    597:        volatile tcb_count_t                    count;
                    598:        volatile UInt8                                  threshold;
                    599:        volatile UInt8                                  number;
                    600:        
                    601:     /* driver private */
                    602: 
                    603:        tbd_t                           _tbds[TBDS_PER_TCB];
                    604:        struct tcb *            _next;
                    605:     IOPhysicalAddress  _paddr;
                    606:     struct mbuf *              _mbuf;
                    607:        unsigned                        _pad;
                    608: } tcb_t;
                    609: 
                    610: #endif /* !_I82557HW_H */
                    611: 

unix.superglobalmegacorp.com

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