|
|
1.1 ! root 1: /****************************************************************************** ! 2: * Copyright (c) 2004, 2008 IBM Corporation ! 3: * All rights reserved. ! 4: * This program and the accompanying materials ! 5: * are made available under the terms of the BSD License ! 6: * which accompanies this distribution, and is available at ! 7: * http://www.opensource.org/licenses/bsd-license.php ! 8: * ! 9: * Contributors: ! 10: * IBM Corporation - initial implementation ! 11: *****************************************************************************/ ! 12: ! 13: #include "netdriver_int.h" ! 14: #include "types.h" ! 15: ! 16: // compiler switches ! 17: ! 18: // Debug switches ! 19: //#define BCM_DEBUG // main debug switch, w/o it the other ones don't work ! 20: //#define BCM_SHOW_RCV ! 21: //#define BCM_SHOW_RCV_DATA ! 22: //#define BCM_SHOW_XMIT ! 23: //#define BCM_SHOW_XMIT_DATA ! 24: //#define BCM_SHOW_XMIT_STATS ! 25: //#define BCM_SHOW_IDX ! 26: //#define BCM_SHOW_STATS ! 27: //#define BCM_SHOW_ASF_REGS ! 28: ! 29: // Switch to enable SW AUTO-NEG ! 30: // don't try, it's still incomplete ! 31: //#define BCM_SW_AUTONEG ! 32: ! 33: /* ! 34: * used register offsets ! 35: */ ! 36: // PCI command register ! 37: #define PCI_COM_R ( (u16_t) 0x0004 ) ! 38: // PCI Cache Line Size register ! 39: #define PCI_CACHELS_R ( (u16_t) 0x000c ) ! 40: // PCI bar1 register ! 41: #define PCI_BAR1_R ( (u16_t) 0x0010 ) ! 42: // PCI bar2 register ! 43: #define PCI_BAR2_R ( (u16_t) 0x0014 ) ! 44: // PCI bar1 register ! 45: #define PCI_SUBID_R ( (u16_t) 0x002e ) ! 46: // PCI-X Comand register ! 47: #define PCI_X_COM_R ( (u16_t) 0x0042 ) ! 48: // Message Data Register ! 49: #define MSG_DATA_R ( (u16_t) 0x0064 ) ! 50: // PCI misc host contrl register ! 51: #define PCI_MISC_HCTRL_R ( (u16_t) 0x0068 ) ! 52: // DMA Read/Write Control register ! 53: #define DMA_RW_CTRL_R ( (u16_t) 0x006c ) ! 54: // PCI State register ! 55: #define PCI_STATE_R ( (u16_t) 0x0070 ) ! 56: // PCI_Clock Control register ! 57: #define PCI_CLK_CTRL_R ( (u16_t) 0x0074 ) ! 58: // Register Base Address Register ! 59: #define REG_BASE_ADDR_REG ( (u16_t) 0x0078 ) ! 60: // Memory Window Base Address Register ! 61: #define MEM_BASE_ADDR_REG ( (u16_t) 0x007c ) ! 62: // Register Data Register ! 63: #define REG_DATA_REG ( (u16_t) 0x0080 ) ! 64: // Memory Window Data Register ! 65: #define MEM_DATA_REG ( (u16_t) 0x0084 ) ! 66: // MAC Function register ! 67: #define MAC_FUNC_R ( (u16_t) 0x00b8 ) ! 68: // Interrupt Mailbox 0 register ! 69: #define INT_MBX0_R ( (u16_t) 0x0204 ) ! 70: // Ethernet MAC Mode register ! 71: #define ETH_MAC_MODE_R ( (u16_t) 0x0400 ) ! 72: // Ethernet MAC Addresses registers ! 73: #define MAC_ADDR_OFFS_HI( idx ) ( (u16_t) ( (idx*2 + 0)*sizeof( u32_t ) + 0x0410 ) ) ! 74: #define MAC_ADDR_OFFS_LO( idx ) ( (u16_t) ( (idx*2 + 1)*sizeof( u32_t ) + 0x0410 ) ) ! 75: // Ethernet MAC Status register ! 76: #define ETH_MAC_STAT_R ( (u16_t) 0x0404 ) ! 77: // Ethernet MAC Event Enable register ! 78: #define ETH_MAC_EVT_EN_R ( (u16_t) 0x0408 ) ! 79: // Ethernet Transmit Random Backoff register ! 80: #define ETH_TX_RND_BO_R ( (u16_t) 0x0438 ) ! 81: // Receive MTU Size register ! 82: #define RX_MTU_SIZE_R ( (u16_t) 0x043c ) ! 83: // Transmit 1000BASE-X Auto Negotiation register ! 84: #define TX_1000BX_AUTONEG_R ( (u16_t) 0x0444 ) ! 85: // Receive 1000BASE-X Auto Negotiation register ! 86: #define RX_1000BX_AUTONEG_R ( (u16_t) 0x0448 ) ! 87: // MI Communication register ! 88: #define MI_COM_R ( (u16_t) 0x044c ) ! 89: // MI Status Register ! 90: #define MI_STATUS_R ( (u16_t) 0x0450 ) ! 91: // MI Mode register ! 92: #define MI_MODE_R ( (u16_t) 0x0454 ) ! 93: // Transmit MAC Mode register ! 94: #define TX_MAC_MODE_R ( (u16_t) 0x045c ) ! 95: // Transmit MAC Length register ! 96: #define TX_MAC_LEN_R ( (u16_t) 0x0464 ) ! 97: // Receive MAC Mode register ! 98: #define RX_MAC_MODE_R ( (u16_t) 0x0468 ) ! 99: // MAC Hash 0 register* VPD Config: ! 100: #define MAC_HASH0_R ( (u16_t) 0x0470 ) ! 101: // MAC Hash 1 register ! 102: #define MAC_HASH1_R ( (u16_t) 0x0474 ) ! 103: // MAC Hash 2 register ! 104: #define MAC_HASH2_R ( (u16_t) 0x0478 ) ! 105: // MAC Hash 3 register ! 106: #define MAC_HASH3_R ( (u16_t) 0x047c ) ! 107: // Receive Rules Control register ! 108: #define RX_RULE_CTRL_R( idx ) ( (u16_t) ( idx*8 + 0x0480 ) ) ! 109: // Receive Rules Value register ! 110: #define RX_RULE_VAL_R( idx ) ( (u16_t) ( idx*8 + 0x0484 ) ) ! 111: // Receive Rules Configuration register ! 112: #define RX_RULE_CFG_R ( (u16_t) 0x0500 ) ! 113: // Low Watermark Max Receive Frames register ! 114: #define LOW_WMARK_MAX_RXFRAM_R ( (u16_t) 0x0504 ) ! 115: // SerDes Control Register ! 116: #define SERDES_CTRL_R ( (u16_t) 0x0590 ) ! 117: // Hardware Auto Negotiation Control Register ! 118: #define HW_AUTONEG_CTRL_R ( (u16_t) 0x05B0 ) ! 119: // Hardware Auto Negotiation Status Register ! 120: #define HW_AUTONEG_STAT_R ( (u16_t) 0x05B4 ) ! 121: // Send Data Initiator Mode register ! 122: #define TX_DAT_INIT_MODE_R ( (u16_t) 0x0c00 ) ! 123: // Send Data Completion Mode register ! 124: #define TX_DAT_COMPL_MODE_R ( (u16_t) 0x1000 ) ! 125: // Send BD Ring Selector Mode register ! 126: #define TX_BD_RING_SEL_MODE_R ( (u16_t) 0x1400 ) ! 127: // Send BD Initiator Mode register ! 128: #define TX_BD_INIT_MODE_R ( (u16_t) 0x1800 ) ! 129: // Send BD Completion Mode register ! 130: #define TX_BD_COMPL_MODE_R ( (u16_t) 0x1c00 ) ! 131: // Receive List Placement Mode register ! 132: #define RX_LST_PLACE_MODE_R ( (u16_t) 0x2000 ) ! 133: // Receive List Placement Configuration register ! 134: #define RX_LST_PLACE_CFG_R ( (u16_t) 0x2010 ) ! 135: // Receive List Placement Statistics Enable Mask register ! 136: #define RX_LST_PLACE_STAT_EN_R ( (u16_t) 0x2018 ) ! 137: // Receive Data & Receive BD Initiator Mode register ! 138: #define RX_DAT_BD_INIT_MODE_R ( (u16_t) 0x2400 ) ! 139: // Receive Data Completion Mode register ! 140: #define RX_DAT_COMPL_MODE_R ( (u16_t) 0x2800 ) ! 141: // Receive BD Initiator Mode register ! 142: #define RX_BD_INIT_MODE_R ( (u16_t) 0x2c00 ) ! 143: // Standard Receive Producer Ring Replenish Threshhold register ! 144: #define STD_RXPR_REP_THR_R ( (u16_t) 0x2c18 ) ! 145: // Receive BD Completion Mode register ! 146: #define RX_BD_COMPL_MODE_R ( (u16_t) 0x3000 ) ! 147: // Receive List Selector Mode register ! 148: #define RX_LST_SEL_MODE_R ( (u16_t) 0x3400 ) ! 149: // MBUF Cluster Free Mode register ! 150: #define MBUF_CLSTR_FREE_MODE_R ( (u16_t) 0x3800 ) ! 151: // Host Coalescing Mode register ! 152: #define HOST_COAL_MODE_R ( (u16_t) 0x3c00 ) ! 153: // Receive Coalescing Ticks register ! 154: #define RX_COAL_TICKS_R ( (u16_t) 0x3c08 ) ! 155: // Send Coalescing Ticks register ! 156: #define TX_COAL_TICKS_R ( (u16_t) 0x3c0c ) ! 157: // Receive Max Coalesced BD Count register ! 158: #define RX_COAL_MAX_BD_R ( (u16_t) 0x3c10 ) ! 159: // Send Max Coalesced BD Count register ! 160: #define TX_COAL_MAX_BD_R ( (u16_t) 0x3c14 ) ! 161: // Receive Coalescing Ticks During Int register ! 162: #define RX_COAL_TICKS_INT_R ( (u16_t) 0x3c18 ) ! 163: // Send Coalescing Ticks During Int register ! 164: #define TX_COAL_TICKS_INT_R ( (u16_t) 0x3c1c ) ! 165: // Receive Max Coalesced BD Count During Int register ! 166: #define RX_COAL_MAX_BD_INT_R ( (u16_t) 0x3c18 ) ! 167: // Send Max Coalesced BD Count During Int register ! 168: #define TX_COAL_MAX_BD_INT_R ( (u16_t) 0x3c1c ) ! 169: // Statistics Ticks Counter register ! 170: #define STAT_TICK_CNT_R ( (u16_t) 0x3c28 ) ! 171: // Status Block Host Address Low register ! 172: #define STB_HOST_ADDR_HI_R ( (u16_t) 0x3c38 ) ! 173: // Status Block Host Address High register ! 174: #define STB_HOST_ADDR_LO_R ( (u16_t) 0x3c3c ) ! 175: // Statistsics Base Adress register ! 176: #define STAT_NIC_ADDR_R ( (u16_t) 0x3c40 ) ! 177: // Status Block Base Address register ! 178: #define STB_NIC_ADDR_R ( (u16_t) 0x3c44 ) ! 179: // Memory Arbiter Mode register ! 180: #define MEMARB_MODE_R ( (u16_t) 0x4000 ) ! 181: // Buffer Manager Mode register ! 182: #define BUF_MAN_MODE_R ( (u16_t) 0x4400 ) ! 183: // MBuf Pool Address register ! 184: #define MBUF_POOL_ADDR_R ( (u16_t) 0x4408 ) ! 185: // MBuf Pool Length register ! 186: #define MBUF_POOL_LEN_R ( (u16_t) 0x440c ) ! 187: // Read DMA Mbuf Low Watermark register ! 188: #define DMA_RMBUF_LOW_WMARK_R ( (u16_t) 0x4410 ) ! 189: // MAC Rx Mbuf Low Watermark register ! 190: #define MAC_RXMBUF_LOW_WMARK_R ( (u16_t) 0x4414 ) ! 191: // Mbuf High Watermark register ! 192: #define MBUF_HIGH_WMARK_R ( (u16_t) 0x4418 ) ! 193: // DMA Descriptor Pool Address register ! 194: #define DMA_DESC_POOL_ADDR_R ( (u16_t) 0x442c ) ! 195: // DMA Descriptor Pool Length register ! 196: #define DMA_DESC_POOL_LEN_R ( (u16_t) 0x4430 ) ! 197: // DMA Descriptor Low Watermark register ! 198: #define DMA_DESC_LOW_WM_R ( (u16_t) 0x4434 ) ! 199: // DMA Descriptor HIGH Watermark register ! 200: #define DMA_DESC_HIGH_WM_R ( (u16_t) 0x4438 ) ! 201: // Read DMA Mode register ! 202: #define RD_DMA_MODE_R ( (u16_t) 0x4800 ) ! 203: // Write DMA Mode register ! 204: #define WR_DMA_MODE_R ( (u16_t) 0x4c00 ) ! 205: // FTQ Reset register ! 206: #define FTQ_RES_R ( (u16_t) 0x5c00 ) ! 207: // MSI Mode register ! 208: #define MSI_MODE_R ( (u16_t) 0x6000 ) ! 209: // DMA completion Mode register ! 210: #define DMA_COMPL_MODE_R ( (u16_t) 0x6400 ) ! 211: // Mode Control register ! 212: #define MODE_CTRL_R ( (u16_t) 0x6800 ) ! 213: // Misc Configuration register ! 214: #define MISC_CFG_R ( (u16_t) 0x6804 ) ! 215: // Misc Local Control register ! 216: #define MISC_LOCAL_CTRL_R ( (u16_t) 0x6808 ) ! 217: // RX-Risc Mode Register ! 218: #define RX_CPU_MODE_R ( (u16_t) 0x5000 ) ! 219: // RX-Risc State Register ! 220: #define RX_CPU_STATE_R ( (u16_t) 0x5004 ) ! 221: // RX-Risc Program Counter ! 222: #define RX_CPU_PC_R ( (u16_t) 0x501c ) ! 223: // RX-Risc Event Register ! 224: #define RX_CPU_EVENT_R ( (u16_t) 0x6810 ) ! 225: // MDI Control register ! 226: #define MDI_CTRL_R ( (u16_t) 0x6844 ) ! 227: // WOL Mode register ! 228: #define WOL_MODE_R ( (u16_t) 0x6880 ) ! 229: // WOL Config register ! 230: #define WOL_CFG_R ( (u16_t) 0x6884 ) ! 231: // WOL Status register ! 232: #define WOL_STATUS_R ( (u16_t) 0x6888 ) ! 233: ! 234: // ASF Control register ! 235: #define ASF_CTRL_R ( (u16_t) 0x6c00 ) ! 236: // ASF Watchdog Timer register ! 237: #define ASF_WATCHDOG_TIMER_R ( (u16_t) 0x6c0c ) ! 238: // ASF Heartbeat Timer register ! 239: #define ASF_HEARTBEAT_TIMER_R ( (u16_t) 0x6c10 ) ! 240: // Poll ASF Timer register ! 241: #define ASF_POLL_TIMER_R ( (u16_t) 0x6c14 ) ! 242: // Poll Legacy Timer register ! 243: #define POLL_LEGACY_TIMER_R ( (u16_t) 0x6c18 ) ! 244: // Retransmission Timer register ! 245: #define RETRANSMISSION_TIMER_R ( (u16_t) 0x6c1c ) ! 246: // Time Stamp Counter register ! 247: #define TIME_STAMP_COUNTER_R ( (u16_t) 0x6c20 ) ! 248: ! 249: // NVM Command register ! 250: #define NVM_COM_R ( (u16_t) 0x7000 ) ! 251: // NVM Write register ! 252: #define NVM_WRITE_R ( (u16_t) 0x7008 ) ! 253: // NVM Address register ! 254: #define NVM_ADDR_R ( (u16_t) 0x700c ) ! 255: // NVM Read registertg3_phy_copper_begin ! 256: #define NVM_READ_R ( (u16_t) 0x7010 ) ! 257: // NVM Access register ! 258: #define NVM_ACC_R ( (u16_t) 0x7024 ) ! 259: // NVM Config 1 register ! 260: #define NVM_CFG1_R ( (u16_t) 0x7014 ) ! 261: // Software arbitration register ! 262: #define SW_ARB_R ( (u16_t) 0x7020 ) ! 263: ! 264: /* ! 265: * useful def's ! 266: */ ! 267: #define rd08(a) (u08_t) snk_kernel_interface->io_read((void*)(a),1) ! 268: #define rd16(a) (u16_t) snk_kernel_interface->io_read((void*)(a),2) ! 269: #define rd32(a) (u32_t) snk_kernel_interface->io_read((void*)(a),4) ! 270: #define wr08(a,v) snk_kernel_interface->io_write((void*)(a),(u32_t)(v),1) ! 271: #define wr16(a,v) snk_kernel_interface->io_write((void*)(a),(u32_t)(v),2) ! 272: #define wr32(a,v) snk_kernel_interface->io_write((void*)(a),(u32_t)(v),4) ! 273: #define printk snk_kernel_interface->print ! 274: #define us_delay snk_kernel_interface->us_delay ! 275: #define ms_delay snk_kernel_interface->ms_delay ! 276: ! 277: #define BIT08( bit ) ( (u08_t) 0x1 << (bit) ) ! 278: #define BIT16( bit ) ( (u16_t) 0x1 << (bit) ) ! 279: #define BIT32( bit ) ( (u32_t) 0x1 << (bit) ) ! 280: ! 281: /* ! 282: * type definition ! 283: */ ! 284: ! 285: extern snk_kernel_t *snk_kernel_interface; ! 286: ! 287: ! 288: /* ! 289: * inline functions ! 290: */ ! 291: // memory barrier function implementation ! 292: static inline void ! 293: mb() ! 294: { ! 295: asm volatile( "sync;" ); ! 296: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.