Annotation of XNU/iokit/Drivers/network/drvPPCUniN/UniNEnet.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) 1998-1999 Apple Software, Inc.
                     24:  *
                     25:  * Interface definition for the UniN Ethernet Controller 
                     26:  *
                     27:  * HISTORY
                     28:  *
                     29:  */
                     30: 
                     31: #include <IOKit/network/IOEthernetController.h>
                     32: #include <IOKit/network/IOEthernetInterface.h>
                     33: #include <IOKit/network/IOOQLockFIFOQueue.h>
                     34: #include <IOKit/IOInterruptEventSource.h>
                     35: #include <IOKit/IOTimerEventSource.h>
                     36: #include <IOKit/network/IOMBufMemoryCursor.h>
                     37: #include <IOKit/IODeviceMemory.h>
                     38: #include <IOKit/pci/IOPCIDevice.h>
                     39: #include <IOKit/IOLib.h>                       /* bcopy */
                     40: 
                     41: #include "../../platform/drvAppleCore99PE/Core99.h"
                     42: 
                     43: extern "C" 
                     44: {
                     45:     #include <sys/param.h>
                     46:     #include <sys/mbuf.h>
                     47: }
                     48: 
                     49: //#define IOLog kprintf
                     50: 
                     51: // No kernel tracing support at this time.
                     52: //
                     53: #define KERNEL_DEBUG(x,a,b,c,d,e)
                     54: 
                     55: #include "UniNEnetRegisters.h"
                     56: 
                     57: typedef void  *         IOPPCAddress;
                     58: 
                     59: #define NUM_RX_DESC     1
                     60: typedef struct enet_dma_cmd_t
                     61: {
                     62:     GEMRxDescriptor     desc_seg[NUM_RX_DESC];
                     63: } enet_dma_cmd_t;
                     64: 
                     65: #define NUM_TX_DESC     1
                     66: typedef struct enet_txdma_cmd_t
                     67: {
                     68:     GEMTxDescriptor     desc_seg[NUM_TX_DESC];
                     69: } enet_txdma_cmd_t;
                     70: 
                     71: 
                     72: typedef struct TxQueueElement
                     73: {
                     74:     queue_chain_t               next;
                     75:     queue_head_t                *list;
                     76:     
                     77:     struct mbuf                 *mbuf;
                     78:     UInt32                      slot;
                     79:     UInt32                      count;
                     80: } TxQueueElement;
                     81: 
                     82: 
                     83: class UniNEnet: public IOEthernetController
                     84: {
                     85:     OSDeclareDefaultStructors(UniNEnet)
                     86: 
                     87:     IOPCIDevice                        *nub;
                     88:     Core99PE                   *platformNub;
                     89: 
                     90:     IOMemoryMap                        *ioMapEnet;
                     91:     volatile IOPPCAddress       ioBaseEnet;
                     92: 
                     93:     IOEthernetInterface        *networkInterface;
                     94:     IOOQLockFIFOQueue          *transmitQueue;
                     95:     IOPacketQueue              *debugQueue;
                     96:     IOKernelDebugger           *debugger;
                     97: 
                     98:     IOInterruptEventSource     *interruptSource;
                     99:     IONetworkStats                     *netStats;
                    100:     IOTimerEventSource                 *timerSource;
                    101:     IOMBufBigMemoryCursor      *mbufCursor;
                    102: 
                    103:     bool                       ready;
                    104:     bool                       netifClient;
                    105:     bool                       debugClient;
                    106:     bool                       debugTxPoll;
                    107:         
                    108:     enet_addr_t                 myAddress;
                    109:     bool                        isPromiscuous;
                    110:     bool                        multicastEnabled;
                    111:     bool                        isFullDuplex;
                    112: 
                    113:     UInt32                     phyType;
                    114:     UInt8                      phyId;
                    115: 
                    116:     UInt16                     phyStatusPrev;
                    117:     bool                        linkStatusPrev;
                    118: 
                    119:     queue_head_t                txActiveQueue;
                    120:     queue_head_t                txFreeQueue;
                    121:     
                    122:     TxQueueElement              *txElementPtrs[TX_RING_LENGTH];
                    123:     struct mbuf                 *rxMbuf[RX_RING_LENGTH];
                    124:     struct mbuf                *txDebuggerPkt;
                    125: 
                    126:     void *                     debuggerPkt;
                    127:     u_int32_t                  debuggerPktSize;
                    128:     
                    129:     UInt32                      txCommandHead;          /* Transmit ring descriptor index */
                    130:     UInt32                      txCommandTail;
                    131:     UInt32                      txMaxCommand;           
                    132:     UInt32                      rxCommandHead;          /* Receive ring descriptor index */
                    133:     UInt32                      rxCommandTail;
                    134:     UInt32                      rxMaxCommand;           
                    135: 
                    136:     UInt32                     dmaCommandsSize;
                    137:     UInt8                      *dmaCommands;
                    138:     enet_txdma_cmd_t           *txDMACommands;          /* TX descriptor ring ptr */
                    139:     UInt32                      txDMACommandsPhys;
                    140:     UInt32                      txCommandsAvail;
                    141: 
                    142:     enet_dma_cmd_t             *rxDMACommands;          /* RX descriptor ring ptr */
                    143:     UInt32                      rxDMACommandsPhys;
                    144: 
                    145:     UInt32                     txRingIndexLast;
                    146:     UInt32                      txWDInterrupts;
                    147:     UInt32                      txWDCount;
                    148: 
                    149:     UInt16                     hashTableUseCount[256];
                    150:     UInt16                      hashTableMask[16];
                    151:  
                    152: 
                    153:     bool                       allocateMemory();
                    154:     bool                       initTxRing();
                    155:     bool                       initRxRing();
                    156:     bool                       initChip();
                    157:     bool                       resetChip();
                    158:     void                       disableAdapterInterrupts();
                    159:     void                       enableAdapterInterrupts();
                    160:     void                       setDuplexMode(bool duplexMode);
                    161:     void                       startChip();
                    162:     void                        stopChip();
                    163:     bool                       updateDescriptorFromMbuf(struct mbuf * m,  enet_dma_cmd_t *desc, bool isReceive);
                    164:     void                       monitorLinkStatus();
                    165:     void                       restartTransmitter();
                    166:     void                       stopTransmitDMA();
                    167:     bool                       transmitPacket(struct mbuf * packet);
                    168:     bool                       transmitInterruptOccurred();
                    169:     bool                       debugTransmitInterruptOccurred();
                    170:     void                       debugTransmitCleanup();
                    171:     bool                       receiveInterruptOccurred();
                    172:     bool                       receivePackets(bool fDebugger);
                    173:     void                       packetToDebugger(struct mbuf * packet, u_int size);
                    174:     void                       restartReceiver();
                    175:     void                       stopReceiveDMA();
                    176:     bool                       resetAndEnable(bool enable);
                    177:     void                       sendDummyPacket();
                    178:     void                       resetHashTableMask();
                    179:     void                       addToHashTableMask(u_int8_t *addr);
                    180:     void                       removeFromHashTableMask(u_int8_t *addr);
                    181:     void                       updateHashTableMask();
                    182: 
                    183: 
                    184:     TxQueueElement              *getTxElement();
                    185:     void                        releaseTxElement(TxQueueElement *txElement);
                    186:     
                    187: #ifdef DEBUG
                    188:     void                       dumpRegisters();
                    189: #endif DEBUG
                    190: 
                    191:     void                       sendPacket(void *pkt, unsigned int pkt_len);
                    192:     void                       receivePacket(void *pkt, unsigned int *pkt_len, unsigned int timeout);
                    193: 
                    194:     bool                       miiReadWord(unsigned short *dataPtr, unsigned short reg, UInt8 phy);
                    195:     bool                       miiWriteWord(unsigned short data, unsigned short reg, UInt8 phy);
                    196:     void                       miiWrite(UInt32 miiData, UInt32 dataSize);
                    197:     bool                       miiResetPHY(UInt8 phy);
                    198:     bool                       miiWaitForLink(UInt8 phy);
                    199:     bool                       miiWaitForAutoNegotiation(UInt8 phy);
                    200:     void                       miiRestartAutoNegotiation(UInt8 phy);
                    201:     bool                       miiFindPHY(UInt8 *phy_num);
                    202:     bool                       miiInitializePHY(UInt8 phy);
                    203: 
                    204:     UInt32             outputPacket(struct mbuf *m);
                    205: 
                    206:     void                       interruptOccurred(IOInterruptEventSource *src, int count);
                    207:     void                       timeoutOccurred(IOTimerEventSource *timer);
                    208: 
                    209: public:
                    210:     virtual bool               init(OSDictionary * properties = 0);
                    211:     virtual bool               start(IOService * provider);
                    212:     virtual void               free();
                    213:        
                    214:     virtual IOReturn           enable(IONetworkInterface * netif);
                    215:     virtual IOReturn           disable(IONetworkInterface * netif);
                    216: 
                    217:     virtual IOReturn           getHardwareAddress(enet_addr_t *addr);
                    218: 
                    219:     virtual IOReturn           setMulticastMode(IOEnetMulticastMode mode);
                    220:     virtual IOReturn           setMulticastList(enet_addr_t *addrs, UInt count);
                    221: 
                    222:     virtual IOReturn           setPromiscuousMode(IOEnetPromiscuousMode mode);
                    223:        
                    224:     virtual IOOutputQueue      *allocateOutputQueue();
                    225:        
                    226:     virtual const char                 *getVendorString() const;
                    227:     virtual const char                 *getModelString() const;
                    228:     virtual const char                 *getRevisionString() const;
                    229: 
                    230:     virtual IOReturn           handleDebuggerOpen(IOKernelDebugger * debugger);
                    231:     virtual IOReturn           handleDebuggerClose(IOKernelDebugger * debugger);
                    232: 
                    233: #if 1
                    234:     bool                       configureNetworkInterface(IONetworkInterface * netif);
                    235: #endif
                    236: };
                    237: 
                    238: 
                    239: /*
                    240:  * Performance tracepoints
                    241:  *
                    242:  * DBG_UniN_RXIRQ        - Receive  ISR run time
                    243:  * DBG_UniN_TXIRQ        - Transmit ISR run time
                    244:  * DBG_UniN_TXQUEUE     - Transmit packet passed from network stack
                    245:  * DBG_UniN_TXCOMPLETE  - Transmit packet sent
                    246:  * DBG_UniN_RXCOMPLETE  - Receive packet passed to network stack
                    247:  */
                    248: #define DBG_UniN_ENET            0x0900
                    249: #define DBG_UniN_RXIRQ           DRVDBG_CODE(DBG_DRVNETWORK,(DBG_UniN_ENET+1))    
                    250: #define DBG_UniN_TXIRQ           DRVDBG_CODE(DBG_DRVNETWORK,(DBG_UniN_ENET+2))    
                    251: #define DBG_UniN_TXQUEUE         DRVDBG_CODE(DBG_DRVNETWORK,(DBG_UniN_ENET+3))    
                    252: #define DBG_UniN_TXCOMPLETE      DRVDBG_CODE(DBG_DRVNETWORK,(DBG_UniN_ENET+4))    
                    253: #define DBG_UniN_RXCOMPLETE      DRVDBG_CODE(DBG_DRVNETWORK,(DBG_UniN_ENET+5))    

unix.superglobalmegacorp.com

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