|
|
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) 1998-1999 by Apple Computer, Inc., All rights reserved. ! 27: * ! 28: * MII protocol and PHY register definitions. ! 29: * ! 30: * HISTORY ! 31: * ! 32: */ ! 33: ! 34: /* ! 35: * MII command frame (32-bits) as documented in IEEE 802.3u ! 36: */ ! 37: #ifdef ppc ! 38: #define _BIG_ENDIAN ! 39: #endif ! 40: ! 41: typedef union { ! 42: unsigned int data; ! 43: #ifdef _BIG_ENDIAN ! 44: struct { ! 45: unsigned int ! 46: st:2, // start of frame ! 47: #define MII_ST 0x01 ! 48: op:2, // operation code ! 49: #define MII_OP_READ 0x02 ! 50: #define MII_OP_WRITE 0x01 ! 51: phyad:5, // PHY address ! 52: regad:5, // register address ! 53: ta:2, // turnaround ! 54: data:16; // 16-bit data field ! 55: } bit; ! 56: #else _BIG_ENDIAN ! 57: struct { ! 58: unsigned int ! 59: data:16, // 16-bit data field ! 60: ta:2, // turnaround ! 61: regad:5, // register address ! 62: phyad:5, // PHY address ! 63: op:2, // operation code ! 64: st:2; // start of frame ! 65: } bit; ! 66: #endif _BIG_ENDIAN ! 67: } miiFrameUnion; ! 68: ! 69: #define MII_FRAME_PREAMBLE 0xFFFFFFFF ! 70: #define MII_FRAME_SIZE 32 ! 71: #define MII_FRAME_READ 0x60000000 ! 72: #define MII_FRAME_WRITE 0x50020000 ! 73: ! 74: #define MII_MAX_PHY 32 ! 75: ! 76: /* MII Registers */ ! 77: #define MII_CONTROL 0 ! 78: #define MII_STATUS 1 ! 79: #define MII_ID0 2 ! 80: #define MII_ID1 3 ! 81: #define MII_ADVERTISEMENT 4 ! 82: #define MII_LINKPARTNER 5 ! 83: #define MII_EXPANSION 6 ! 84: #define MII_NEXTPAGE 7 ! 85: ! 86: /* MII Control register bits */ ! 87: #define MII_CONTROL_RESET 0x8000 ! 88: #define MII_CONTROL_LOOPBACK 0x4000 ! 89: #define MII_CONTROL_SPEED_SELECTION 0x2000 ! 90: #define MII_CONTROL_AUTONEGOTIATION 0x1000 ! 91: #define MII_CONTROL_POWERDOWN 0x800 ! 92: #define MII_CONTROL_ISOLATE 0x400 ! 93: #define MII_CONTROL_RESTART_NEGOTIATION 0x200 ! 94: #define MII_CONTROL_FULLDUPLEX 0x100 ! 95: #define MII_CONTROL_COLLISION_TEST 0x80 ! 96: ! 97: /* MII Status register bits */ ! 98: #define MII_STATUS_100BASET4 0x8000 ! 99: #define MII_STATUS_100BASETX_FD 0x4000 ! 100: #define MII_STATUS_100BASETX 0x2000 ! 101: #define MII_STATUS_10BASET_FD 0x1000 ! 102: #define MII_STATUS_10BASET 0x800 ! 103: #define MII_STATUS_NEGOTIATION_COMPLETE 0x20 ! 104: #define MII_STATUS_REMOTE_FAULT 0x10 ! 105: #define MII_STATUS_NEGOTIATION_ABILITY 0x8 ! 106: #define MII_STATUS_LINK_STATUS 0x4 ! 107: #define MII_STATUS_JABBER_DETECT 0x2 ! 108: #define MII_STATUS_EXTENDED_CAPABILITY 0x1 ! 109: ! 110: /* MII ANAR register bits */ ! 111: #define MII_ANAR_100BASET4 0x200 ! 112: #define MII_ANAR_100BASETX_FD 0x100 ! 113: #define MII_ANAR_100BASETX 0x80 ! 114: #define MII_ANAR_10BASET_FD 0x40 ! 115: #define MII_ANAR_10BASET 0x20 ! 116: ! 117: /* MII ST10040 Specific */ ! 118: ! 119: /* MII ST10040 ID */ ! 120: #define MII_ST10040_OUI 0x1e0400 ! 121: #define MII_ST10040_MODEL 0x00 ! 122: #define MII_ST10040_REV 0x01 ! 123: #define MII_ST10040_ID ((MII_ST10040_OUI << 10) | (MII_ST10040_MODEL << 4)) ! 124: #define MII_ST10040_MASK 0xfffffff0 ! 125: ! 126: #define MII_ST10040_DELAY 1 ! 127: ! 128: /* MII ST10040 Regs */ ! 129: #define MII_ST10040_CHIPST 0x14 ! 130: ! 131: /* MII ST10040 CHIPST register bits */ ! 132: #define MII_ST10040_CHIPST_LINK 0x2000 ! 133: #define MII_ST10040_CHIPST_DUPLEX 0x1000 ! 134: #define MII_ST10040_CHIPST_SPEED 0x0800 ! 135: #define MII_ST10040_CHIPST_NEGOTIATION 0x0020 ! 136: ! 137: ! 138: /* MII DP83843 Specific */ ! 139: ! 140: /* MII DP83843 ID */ ! 141: #define MII_DP83843_OUI 0x080017 ! 142: #define MII_DP83843_MODEL 0x01 ! 143: #define MII_DP83843_REV 0x00 ! 144: #define MII_DP83843_ID ((MII_DP83843_OUI << 10) | (MII_DP83843_MODEL << 4)) ! 145: #define MII_DP83843_MASK 0xfffffff0 ! 146: ! 147: #define MII_DP83843_DELAY 20 ! 148: ! 149: /* MII DP83843 PHYSTS register bits */ ! 150: #define MII_DP83843_PHYSTS 0x10 ! 151: #define MII_DP83843_PHYSTS_LINK 0x0001 ! 152: #define MII_DP83843_PHYSTS_SPEED10 0x0002 ! 153: #define MII_DP83843_PHYSTS_DUPLEX 0x0004 ! 154: #define MII_DP83843_PHYSTS_NEGOTIATION 0x0020 ! 155: ! 156: ! 157: /* MII timeout */ ! 158: #define MII_DEFAULT_DELAY 20 ! 159: #define MII_RESET_TIMEOUT 100 ! 160: #define MII_RESET_DELAY 10 ! 161: ! 162: #define MII_LINK_TIMEOUT 5000 ! 163: #define MII_LINK_DELAY 20 ! 164: ! 165: @interface BMacEnet(MII) ! 166: ! 167: - (BOOL)miiReadWord:(unsigned short *)dataPtr reg:(unsigned short)reg ! 168: phy:(unsigned char)phy; ! 169: - (BOOL)miiWriteWord:(unsigned short)data reg:(unsigned short)reg ! 170: phy:(unsigned char)phy; ! 171: - (void)miiWrite:(unsigned int)miiData size:(unsigned int)dataSize; ! 172: - (int)miiReadBit; ! 173: - (BOOL)miiCheckZeroBit; ! 174: - (void)miiOutThreeState; ! 175: - (BOOL)miiResetPHY:(unsigned char)phy; ! 176: - (BOOL)miiWaitForLink:(unsigned char)phy; ! 177: - (BOOL)miiWaitForAutoNegotiation:(unsigned char)phy; ! 178: - (void)miiRestartAutoNegotiation:(unsigned char)phy; ! 179: - (BOOL)miiFindPHY:(unsigned char *)phy_num; ! 180: - (BOOL)miiInitializePHY:(unsigned char)phy; ! 181: ! 182: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.