Annotation of XNU/iokit/Drivers/network/drvMaceEnet/MaceEnet.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) 1995-1996 NeXT Software, Inc.
                     24:  *
                     25:  * Interface definition for the Mace Ethernet chip 
                     26:  *
                     27:  * HISTORY
                     28:  *
                     29:  * 16-Sept-97   
                     30:  *     Created.
                     31:  */
                     32: 
                     33: #ifndef _MACEENET_H
                     34: #define _MACEENET_H
                     35: 
                     36: #include <IOKit/network/IOEthernetController.h>
                     37: #include <IOKit/network/IOEthernetInterface.h>
                     38: #include <IOKit/network/IOOQGateFIFOQueue.h>
                     39: #include <IOKit/IOInterruptEventSource.h>
                     40: #include <IOKit/IOTimerEventSource.h>
                     41: #include <IOKit/network/IOMBufMemoryCursor.h>
                     42: #include <IOKit/IODeviceMemory.h>
                     43: #include <IOKit/ppc/IODBDMA.h>
                     44: #include <string.h>                    /* bcopy */
                     45: 
                     46: #if 0
                     47: #include <kern/kdebug.h>                               /* Performance tracepoints */
                     48: #else
                     49: #define KERNEL_DEBUG(x,a,b,c,d,e)
                     50: #endif
                     51: 
                     52: #include "MaceEnetRegisters.h"
                     53: 
                     54: extern "C" {
                     55: #include <sys/param.h>
                     56: #include <sys/mbuf.h>
                     57: }
                     58: 
                     59: #if 0
                     60: #define IOLog kprintf
                     61: #endif
                     62: 
                     63: typedef void  *                IOPPCAddress;
                     64: 
                     65: typedef struct enet_dma_cmd_t
                     66: {
                     67:     IODBDMADescriptor          desc_seg[2];
                     68: } enet_dma_cmd_t;
                     69: 
                     70: typedef struct enet_txdma_cmd_t
                     71: {
                     72:     IODBDMADescriptor          desc_seg[4];
                     73: } enet_txdma_cmd_t;
                     74: 
                     75: class MaceEnet : public IOEthernetController
                     76: {
                     77:        OSDeclareDefaultStructors(MaceEnet)
                     78: 
                     79: private:
                     80:     volatile IOPPCAddress       ioBaseEnet;
                     81:     volatile IOPPCAddress              ioBaseEnetROM;
                     82:     volatile IODBDMAChannelRegisters   *ioBaseEnetRxDMA;       
                     83:     volatile IODBDMAChannelRegisters   *ioBaseEnetTxDMA;
                     84: 
                     85:     u_int16_t                          chipId; 
                     86: 
                     87:     enet_addr_t                                myAddress;
                     88:     IOEthernetInterface *      networkInterface;
                     89:        IOOQGateFIFOQueue *         transmitQueue;
                     90:        IOPacketQueue *                 debugQueue;
                     91:        IOKernelDebugger *      debugger;
                     92:     bool                                       isPromiscuous;
                     93:     bool                                       multicastEnabled;
                     94:        bool                                    ready;
                     95:        bool                                    netifClient;
                     96:        bool                                    debugClient;
                     97:        bool                                    debugTxPoll;
                     98: 
                     99:        IOInterruptEventSource *rxIntSrc;
                    100:        IOInterruptEventSource *txIntSrc;
                    101:        IOMemoryMap *                   maps[MEMORY_MAP_COUNT];
                    102:        IOMemoryMap *                   romMap;
                    103:        IONetworkStats *                netStats;
                    104:        IOTimerEventSource *    timerSrc;
                    105:        IOMBufBigMemoryCursor * mbufCursor;
                    106: 
                    107:     struct mbuf *                      txMbuf[TX_RING_LENGTH];
                    108:     struct mbuf *                      rxMbuf[RX_RING_LENGTH];
                    109:        struct mbuf *                   txDebuggerPkt;
                    110: 
                    111:     unsigned int                       txCommandHead; /* Transmit ring descriptor index */
                    112:     unsigned int                       txCommandTail;
                    113:     unsigned int                       txMaxCommand;           
                    114:     unsigned int                       rxCommandHead;  /* Receive ring descriptor index */
                    115:     unsigned int                       rxCommandTail;
                    116:     unsigned int               rxMaxCommand;           
                    117: 
                    118:        struct {
                    119:                void    *ptr;
                    120:                u_int   size;
                    121:                void    *ptrReal;
                    122:                u_int   sizeReal;
                    123:        } dmaMemory;
                    124: 
                    125:     unsigned char *                    dmaCommands;
                    126:     enet_txdma_cmd_t *         txDMACommands;          /* TX descriptor ring ptr */
                    127:     unsigned int                       txDMACommandsPhys;
                    128: 
                    129:     enet_dma_cmd_t *           rxDMACommands;          /* RX descriptor ring ptr */
                    130:     unsigned int                       rxDMACommandsPhys;
                    131: 
                    132:     u_int32_t                          txWDInterrupts;
                    133:     u_int32_t                          txWDTimeouts;
                    134:     bool                                       txWDForceReset;
                    135: 
                    136:     void *                                     debuggerPkt;
                    137:     u_int32_t                          debuggerPktSize;
                    138:    
                    139:     u_int16_t                          hashTableUseCount[64];
                    140:     u_int8_t                   hashTableMask[8];
                    141: 
                    142:        bool _allocateMemory();
                    143:        bool _initTxRing();
                    144:        bool _initRxRing();
                    145:        bool _initChip();
                    146:        void _resetChip();
                    147:        void _disableAdapterInterrupts();
                    148:        void _enableAdapterInterrupts();
                    149:        void _startChip();
                    150:        void _restartChip();
                    151:        void _stopReceiveDMA();
                    152:        void _stopTransmitDMA();
                    153:        bool _transmitPacket(struct mbuf * packet);
                    154:        bool _transmitInterruptOccurred(bool fDebugger = false);
                    155:        bool _receiveInterruptOccurred();
                    156:        bool _receivePackets(bool fDebugger);
                    157:        void _packetToDebugger(struct mbuf * packet, u_int size);
                    158:        bool _updateDescriptorFromMbuf(struct mbuf * m,  enet_dma_cmd_t *desc,
                    159:                        bool isReceive);
                    160:        void _resetHashTableMask();
                    161:        void _addToHashTableMask(u_int8_t *addr);
                    162:        void _removeFromHashTableMask(u_int8_t *addr);
                    163:        void _updateHashTableMask();
                    164:        void _dumpRegisters();
                    165:        void _dumpDesc(void * addr, u_int32_t size);
                    166:        IOReturn _setPromiscuousMode(IOEnetPromiscuousMode mode);
                    167:        void MaceEnet::_sendTestPacket();
                    168: 
                    169:        /*
                    170:         * Kernel Debugger
                    171:         */
                    172:        void _sendPacket(void *pkt, unsigned int pkt_len);
                    173:        void _receivePacket(void *pkt, unsigned int *pkt_len, unsigned int 
                    174:                timeout);
                    175: 
                    176:        bool resetAndEnable(bool enable);       
                    177:        void interruptOccurredForSource(IOInterruptEventSource *src, int count);
                    178:        void timeoutOccurred(IOTimerEventSource *timer);
                    179: 
                    180: public:
                    181:        virtual MaceEnet * MaceEnet::probe(IOService * provider,
                    182:                            unsigned int * score,
                    183:                            unsigned int * specificity);
                    184:        virtual bool init(OSDictionary * properties = 0);
                    185:        virtual bool start(IOService * provider);
                    186:        virtual void free();
                    187:        
                    188:        virtual IOReturn enable(IONetworkInterface * netif);
                    189:        virtual IOReturn disable(IONetworkInterface * netif);
                    190: 
                    191:        virtual IOReturn handleDebuggerOpen(IOKernelDebugger * debugger);
                    192:        virtual IOReturn handleDebuggerClose(IOKernelDebugger * debugger);
                    193: 
                    194:        virtual IOReturn getHardwareAddress(enet_addr_t *addr);
                    195: 
                    196:        virtual IOReturn setMulticastMode(IOEnetMulticastMode mode);
                    197:        virtual IOReturn setMulticastList(enet_addr_t *addrs, UInt count);
                    198: 
                    199:        virtual IOReturn setPromiscuousMode(IOEnetPromiscuousMode mode);
                    200:        
                    201:        virtual IOOutputQueue * allocateOutputQueue();
                    202: 
                    203:        virtual UInt32 outputPacket(struct mbuf * m);
                    204: 
                    205:        virtual void sendPacket(void *pkt, UInt pkt_len);
                    206:        virtual void receivePacket(void *pkt, UInt *pkt_len, UInt timeout);
                    207: 
                    208:        virtual const char * getVendorString() const;
                    209:        virtual const char * getModelString() const;
                    210:        virtual const char * getRevisionString() const;
                    211: };
                    212: 
                    213: #if 0  // no power management stuff in IOKit yet.
                    214: /*
                    215:  * Power management methods. 
                    216:  */
                    217: - (IOReturn)getPowerState:(PMPowerState *)state_p;
                    218: - (IOReturn)setPowerState:(PMPowerState)state;
                    219: - (IOReturn)getPowerManagement:(PMPowerManagementState *)state_p;
                    220: - (IOReturn)setPowerManagement:(PMPowerManagementState)state;
                    221: #endif
                    222: 
                    223: /*
                    224:  * Performance tracepoints
                    225:  *
                    226:  * DBG_MACE_RXIRQ      - Receive  ISR run time
                    227:  * DBG_MACE_TXIRQ      - Transmit ISR run time
                    228:  * DBG_MACE_TXQUEUE     - Transmit packet passed from network stack
                    229:  * DBG_MACE_TXCOMPLETE  - Transmit packet sent
                    230:  * DBG_MACE_RXCOMPLETE  - Receive packet passed to network stack
                    231:  */
                    232: #define DBG_MACE_ENET          0x0800
                    233: #define DBG_MACE_RXIRQ                 DRVDBG_CODE(DBG_DRVNETWORK,(DBG_MACE_ENET+1))   
                    234: #define DBG_MACE_TXIRQ         DRVDBG_CODE(DBG_DRVNETWORK,(DBG_MACE_ENET+2))   
                    235: #define DBG_MACE_TXQUEUE       DRVDBG_CODE(DBG_DRVNETWORK,(DBG_MACE_ENET+3))   
                    236: #define DBG_MACE_TXCOMPLETE    DRVDBG_CODE(DBG_DRVNETWORK,(DBG_MACE_ENET+4))   
                    237: #define DBG_MACE_RXCOMPLETE    DRVDBG_CODE(DBG_DRVNETWORK,(DBG_MACE_ENET+5))   
                    238: 
                    239: #endif /* !_MACEENET_H */

unix.superglobalmegacorp.com

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