Annotation of XNU/iokit/IOKit/network/IONetworkMedium.h, revision 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) 1999 Apple Computer, Inc.  All rights reserved. 
        !            24:  *
        !            25:  * IONetworkMedium.h
        !            26:  *
        !            27:  * HISTORY
        !            28:  *
        !            29:  */
        !            30: 
        !            31: #ifndef _IONETWORKMEDIUM_H
        !            32: #define _IONETWORKMEDIUM_H
        !            33: 
        !            34: /*! @typedef IOMediumType
        !            35:     @discussion A 32-bit value divided into fields describing the medium
        !            36:     type. See IONetworkMedium.h. */
        !            37: 
        !            38: typedef UInt32 IOMediumType;
        !            39: 
        !            40: /*! @typedef IOMediumDescriptor
        !            41:     @discussion A structure which describes the properties of an
        !            42:     IONetworkMedium object. The fields in the structure consist of
        !            43:     properties assigned to the object during init(). */
        !            44: 
        !            45: typedef struct {
        !            46:     IOMediumType   type;
        !            47:     UInt32         flags;
        !            48:     UInt64         speed;
        !            49:     UInt32         data;
        !            50:     UInt32         rsvd[3];
        !            51: } IOMediumDescriptor;
        !            52: 
        !            53: //===========================================================================
        !            54: // Medium Type (IOMediumType).
        !            55: //
        !            56: // The medium type is encoded by a 32-bit value. The definitions of
        !            57: // the fields and the encoding for each field is adapted from FreeBSD.
        !            58: //
        !            59: // Bits     Definition
        !            60: // -------------------
        !            61: //  3-0     medium index
        !            62: //    4     reserved
        !            63: //  7-5     medium family
        !            64: // 15-8     type specific options
        !            65: // 19-16    reserved
        !            66: // 27-20    common options
        !            67: // 31-28    instance number
        !            68: 
        !            69: // Common medium definitions.
        !            70: //
        !            71: enum {
        !            72:     kIOMediumIndexAuto        = 0,   /* autoselect */
        !            73:     kIOMediumIndexManual      = 1,   /* use manual configuration */
        !            74:     kIOMediumIndexNone        = 2,   /* de-select all media */
        !            75: };
        !            76: 
        !            77: // Ethernet medium definitions.
        !            78: //
        !            79: enum {
        !            80:     kIOMediumFamilyEthernet = 0x00000020,
        !            81:     kIOMediumEtherAuto      = (kIOMediumIndexAuto   | kIOMediumFamilyEthernet),
        !            82:     kIOMediumEtherManual    = (kIOMediumIndexManual | kIOMediumFamilyEthernet),
        !            83:     kIOMediumEtherNone      = (kIOMediumIndexNone   | kIOMediumFamilyEthernet),
        !            84:     kIOMediumEther10BaseT     = (3  | kIOMediumFamilyEthernet),
        !            85:     kIOMediumEther10Base2     = (4  | kIOMediumFamilyEthernet),
        !            86:     kIOMediumEther10Base5     = (5  | kIOMediumFamilyEthernet),
        !            87:     kIOMediumEther100BaseTX   = (6  | kIOMediumFamilyEthernet),
        !            88:     kIOMediumEther100BaseFX   = (7  | kIOMediumFamilyEthernet),
        !            89:     kIOMediumEther100BaseT4   = (8  | kIOMediumFamilyEthernet),
        !            90:     kIOMediumEther100BaseVG   = (9  | kIOMediumFamilyEthernet),
        !            91:     kIOMediumEther100BaseT2   = (10 | kIOMediumFamilyEthernet),
        !            92:     kIOMediumEther1000BaseSX  = (11 | kIOMediumFamilyEthernet),
        !            93: };
        !            94: 
        !            95: // Common options.
        !            96: //
        !            97: enum {
        !            98:     kIOMediumFullDuplex       = 0x00100000,
        !            99:     kIOMediumHalfDuplex       = 0x00200000,
        !           100:     kIOMediumOptionFlag0      = 0x01000000,
        !           101:     kIOMediumOptionFlag1      = 0x02000000,
        !           102:     kIOMediumOptionFlag2      = 0x04000000,
        !           103: };
        !           104: 
        !           105: // Medium type masks.
        !           106: //
        !           107: #define kIOMediumIndexMask          0x0000000f
        !           108: #define kIOMediumFamilyMask         0x000000e0
        !           109: #define kIOMediumTypeMask           (kIOMediumFamilyMask | kIOMediumIndexMask)
        !           110: #define kIOMediumFamilyOptionsMask  0x0000ff00
        !           111: #define kIOMediumCommonOptionsMask  0x0ff00000
        !           112: #define kIOMediumInstanceShift      28
        !           113: #define kIOMediumInstanceMask       0xf0000000
        !           114: 
        !           115: // Medium type field accessors.
        !           116: //
        !           117: #define IOMediumGetIndex(x)         ((x)  & kIOMediumIndexMask)
        !           118: #define IOMediumGetFamily(x)        ((x)  & kIOMediumFamilyMask)
        !           119: #define IOMediumGetType(x)          ((x)  & kIOMediumTypeMask)
        !           120: #define IOMediumGetInstance(x)      (((x) & kIOMediumInstanceMask) >> \
        !           121:                                             kIOMediumInstanceShift)
        !           122: 
        !           123: //===========================================================================
        !           124: // Medium flags.
        !           125: 
        !           126: enum {
        !           127:     kIOMediumFlagDriverMask   = 0xffff0000,     // fields for driver use
        !           128: };
        !           129: 
        !           130: //===========================================================================
        !           131: // Medium descriptions.
        !           132: 
        !           133: struct IOMediumDescription {
        !           134:     SInt32       word;
        !           135:     const char * string;
        !           136: };
        !           137: 
        !           138: // Family descriptions.
        !           139: //
        !           140: #define kIOMediumFamilyDescriptions {              \
        !           141:     { kIOMediumFamilyEthernet,  "Ethernet" },      \
        !           142:     { 0, NULL },                                   \
        !           143: }
        !           144: 
        !           145: // Ethernet type descriptions.
        !           146: //
        !           147: #define kIOMediumEthernetDescriptions {            \
        !           148:     { kIOMediumEther10BaseT,    "10Base-T" },      \
        !           149:     { kIOMediumEther10Base2,    "10Base-2" },      \
        !           150:     { kIOMediumEther10Base5,    "10Base-5" },      \
        !           151:     { kIOMediumEther100BaseTX,  "100Base-TX" },    \
        !           152:     { kIOMediumEther100BaseFX,  "100Base-FX" },    \
        !           153:     { kIOMediumEther100BaseT4,  "100Base-T4" },    \
        !           154:     { kIOMediumEther100BaseVG,  "100Base-VG" },    \
        !           155:     { kIOMediumEther100BaseT2,  "100Base-T2" },    \
        !           156:     { kIOMediumEther1000BaseSX, "1000Base-SX" },   \
        !           157:     { 0, NULL },                                   \
        !           158: }
        !           159: 
        !           160: // Ethernet option descriptions.
        !           161: //
        !           162: #define kIOMediumEthernetOptionDescriptions {      \
        !           163:     { 0, NULL },                                   \
        !           164: }
        !           165: 
        !           166: // Common type descriptions.
        !           167: //
        !           168: #define kIOMediumCommonDescriptions {              \
        !           169:     { kIOMediumIndexAuto,       "Auto" },          \
        !           170:     { kIOMediumIndexManual,     "Manual" },        \
        !           171:     { kIOMediumIndexNone,       "None" },          \
        !           172:     { 0, NULL },                                   \
        !           173: }
        !           174: 
        !           175: // Common option descriptions.
        !           176: //
        !           177: #define kIOMediumCommonOptionDescriptions {        \
        !           178:     { kIOMediumFullDuplex,      "full-duplex" },   \
        !           179:     { kIOMediumHalfDuplex,      "half-duplex" },   \
        !           180:     { kIOMediumOptionFlag0,     "flag0" },         \
        !           181:     { kIOMediumOptionFlag1,     "flag1" },         \
        !           182:     { kIOMediumOptionFlag2,     "flag2" },         \
        !           183:     { 0, NULL },                                   \
        !           184: }
        !           185: 
        !           186: //===========================================================================
        !           187: // Link status bits.
        !           188: //
        !           189: enum {
        !           190:     kIONetworkLinkValid        = 0x00000001,    // link status is valid
        !           191:     kIONetworkLinkActive       = 0x00000002,    // link is up/active.
        !           192: };
        !           193: 
        !           194: //===========================================================================
        !           195: // IONetworkMedium class.
        !           196: 
        !           197: #ifdef KERNEL
        !           198: 
        !           199: #include <libkern/c++/OSObject.h>
        !           200: #include <libkern/c++/OSSymbol.h>
        !           201: 
        !           202: /*! @class IONetworkMedium
        !           203:     @abstract An object that encapsulates information about a network
        !           204:     medium (i.e. 10Base-T, 100Base-T Full Duplex). The primary use of
        !           205:     this object is for network drivers to advertise its media
        !           206:     capability, by adding a collection of IONetworkMedium objects stored
        !           207:     in a dictionary to its property table.
        !           208:     IONetworkMedium supports serialization, and will encode its
        !           209:     properties in the form of an IOMediumDescriptor structure,
        !           210:     wrapped by an OSData to the serialization stream when instructed. */
        !           211: 
        !           212: class IONetworkMedium : public OSObject
        !           213: {
        !           214:     OSDeclareDefaultStructors(IONetworkMedium)
        !           215: 
        !           216: protected:
        !           217:     IOMediumDescriptor * _desc;
        !           218:     const OSSymbol *     _name;
        !           219: 
        !           220: /*! @function free
        !           221:     @abstract Free the IONetworkMedium instance. */
        !           222: 
        !           223:     virtual void free();
        !           224: 
        !           225: public:
        !           226: 
        !           227: /*! @function nameForType
        !           228:     @abstract Create a name for a medium type.
        !           229:     @discussion Given a 32-bit medium type, create an unique OSymbol name
        !           230:     for the medium. The caller is responsible for releasing the OSSymbol 
        !           231:     object returned.
        !           232:     @param type A medium type. See IONetworkMedium.h for type encoding.
        !           233:     @result An OSSymbol created based on the type provided. */
        !           234: 
        !           235:     static const OSSymbol * nameForType(IOMediumType type);
        !           236: 
        !           237: /*! @function addMedium
        !           238:     @abstract Add an IONetworkMedium object to a dictionary.
        !           239:     @discussion A helper function to add an IONetworkMedium object to a
        !           240:     given dictionary. The name of the medium is used as the key for the
        !           241:     new dictionary entry.
        !           242:     @param dict An OSDictionary object where the medium object should be
        !           243:     added to.
        !           244:     @param medium The IONetworkMedium object to add to the dictionary.
        !           245:     @result true on success, false otherwise. */
        !           246: 
        !           247:     static bool addMedium(OSDictionary * dict, const IONetworkMedium * medium);
        !           248: 
        !           249: /*! @function removeMedium
        !           250:     @abstract Remove an IONetworkMedium object from a dictionary.
        !           251:     @discussion A helper function to remove an entry in a dictionary.
        !           252:     @param dict An OSDictionary object where the medium object should be
        !           253:     removed from.
        !           254:     @param medium The name of this medium object is used as the key. */
        !           255: 
        !           256:     static void removeMedium(OSDictionary *          dict,
        !           257:                              const IONetworkMedium * medium);
        !           258: 
        !           259: /*! @function getMedium
        !           260:     @abstract Find a medium object from a dictionary.
        !           261:     @discussion Iterate through a dictionary and return an IONetworkMedium
        !           262:     entry that satisfies the matching criteria. Returns 0 if there is
        !           263:     no match. Also see getMediumWithType() and getMediumWithIndex() that
        !           264:     are specialized forms derived from this method.
        !           265:     @param dict The dictionary to look for a match.
        !           266:     @param match An IOMediumDescriptor structure containing the matching
        !           267:     fields.
        !           268:     @param mask An IOMediumDescriptor structure containing the matching
        !           269:     mask. Bits set in the mask are used for matching, while bits cleared
        !           270:     are considered to be don't care bits.
        !           271:     @result The first matching IONetworkMedium entry found,
        !           272:     or 0 if no match was found. */
        !           273: 
        !           274:     static IONetworkMedium * getMedium(const OSDictionary * dict,
        !           275:                                        IOMediumDescriptor * match,
        !           276:                                        IOMediumDescriptor * mask);
        !           277: 
        !           278: /*! @function getMediumWithType
        !           279:     @abstract Find a medium object from a dictionary with a given type.
        !           280:     @discussion Iterate through a dictionary and return an IONetworkMedium
        !           281:     entry with the given type. An optional mask supplies the don't care bits.
        !           282:     See getMedium().
        !           283:     @param dict The dictionary to look for a match.
        !           284:     @param type Search for an entry with the given type.
        !           285:     @param mask The don't care bits in IOMediumType. Defaults to 0, which
        !           286:     implies a perfect match is desired.
        !           287:     @result The first matching IONetworkMedium entry found,
        !           288:     or 0 if no match was found. */
        !           289: 
        !           290:     static IONetworkMedium * getMediumWithType(const OSDictionary * dict,
        !           291:                                                IOMediumType         type,
        !           292:                                                IOMediumType         mask = 0);
        !           293: 
        !           294: /*! @function getMediumWithIndex
        !           295:     @abstract Find a medium object from a dictionary with a given index.
        !           296:     @discussion Iterate through a dictionary and return an IONetworkMedium
        !           297:     entry with the given index. A optional mask supplies the don't care bits.
        !           298:     See getMedium().
        !           299:     @param dict The dictionary to look for a match.
        !           300:     @param index Search for an entry with the given index.
        !           301:     @param mask The don't care bits in index. Defaults to 0, which
        !           302:     implies a perfect match is desired.
        !           303:     @result The first matching IONetworkMedium entry found,
        !           304:     or 0 if no match was found. */
        !           305: 
        !           306:     static IONetworkMedium * getMediumWithIndex(const OSDictionary * dict,
        !           307:                                                 UInt32               index,
        !           308:                                                 UInt32               mask = 0);
        !           309: 
        !           310: /*! @function init
        !           311:     @abstract Initialize an IONetworkMedium instance.
        !           312:     @param type The medium type, the fields are encoded with bits defined in
        !           313:            IONetworkMedium.h.
        !           314:     @param speed The maximum (or the only) link speed supported over this 
        !           315:            medium in units of bits per second.
        !           316:     @param flags An optional flag for the medium object.
        !           317:            See IONetworkMedium.h for defined flags.
        !           318:     @param index An optional 32-bit index assigned by the caller.
        !           319:            Drivers can use this to store an index or a pointer to a media table
        !           320:            inside the driver, or it may map to a driver defined media type.
        !           321:     @param name An optional name assigned to this medium object. If 0,
        !           322:            then a name will be created based on the medium type given
        !           323:            using nameForType().
        !           324:     @result true on success, false otherwise. */
        !           325: 
        !           326:     virtual bool init(IOMediumType  type,
        !           327:                       UInt64        speed,
        !           328:                       UInt32        flags = 0,
        !           329:                       UInt32        index = 0,
        !           330:                       const char *  name  = 0);
        !           331: 
        !           332: /*! @function medium
        !           333:     @abstract Factory method which performs allocation and initialization
        !           334:     of an IONetworkMedium instance.
        !           335:     @param type See init().
        !           336:     @param speed See init().
        !           337:     @param flags See init().
        !           338:     @param index See init().
        !           339:     @param name See init().
        !           340:     @result An IONetworkMedium instance on success, or 0 otherwise. */
        !           341: 
        !           342:     static IONetworkMedium * medium(IOMediumType  type,
        !           343:                                     UInt64        speed,
        !           344:                                     UInt32        flags = 0,
        !           345:                                     UInt32        index = 0,
        !           346:                                     const char *  name  = 0);
        !           347: 
        !           348: /*! @function getType
        !           349:     @result The assigned medium type. */
        !           350: 
        !           351:     virtual IOMediumType  getType() const;
        !           352: 
        !           353: /*! @function getSpeed
        !           354:     @result The maximum medium speed. */
        !           355: 
        !           356:     virtual UInt64        getSpeed() const;
        !           357: 
        !           358: /*! @function getFlags
        !           359:     @result The medium flags. */
        !           360: 
        !           361:     virtual UInt32        getFlags() const;
        !           362: 
        !           363: /*! @function getIndex
        !           364:     @result The assigned index. */
        !           365: 
        !           366:     virtual UInt32        getIndex() const;
        !           367: 
        !           368: /*! @function getDescriptor
        !           369:     @param descP The IOMediumDescriptor structure associated with the
        !           370:     instance is copied to the address provided. */
        !           371: 
        !           372:     virtual void          getDescriptor(IOMediumDescriptor * descP) const;
        !           373: 
        !           374: /*! @function getName
        !           375:     @result The name for this instance. */
        !           376: 
        !           377:     virtual const OSSymbol * getName() const;
        !           378: 
        !           379: /*! @function getKey
        !           380:     @result The key for this instance. Same as getName(). */
        !           381: 
        !           382:     virtual const OSSymbol * getKey() const;
        !           383: 
        !           384: /*! @function isEqualTo
        !           385:     @abstract Test for equality between two IONetworkMedium objects.
        !           386:     @discussion Two IONetworkMedium objects are considered equal if
        !           387:     they have similar properties assigned to them during initialization.
        !           388:     @param medium An IONetworkMedium to test against the IONetworkMedium
        !           389:     object being called.
        !           390:     @result true if equal, false otherwise. */
        !           391: 
        !           392:     virtual bool isEqualTo(const IONetworkMedium * medium) const;
        !           393: 
        !           394: /*! @function isEqualTo
        !           395:     @abstract Test for equality between a IONetworkMedium object and an
        !           396:     OSObject.
        !           397:     @discussion The OSObject is considered equal to the IONetworkMedium
        !           398:     object if the OSObject is an IONetworkMedium, and they have
        !           399:     similar properties assigned to them during initialization.
        !           400:     @param obj An OSObject to test against the IONetworkMedium object
        !           401:     being called.
        !           402:     @result true if equal, false otherwise. */
        !           403: 
        !           404:     virtual bool isEqualTo(const OSObject * obj) const;
        !           405: 
        !           406: /*! @function serialize
        !           407:     @abstract Serialize the IONetworkMedium object.
        !           408:     @discussion An OSData is created containing an IOMediumDescriptor
        !           409:     structure (not copied), and this OSData is serialized.
        !           410:     @param s An OSSerialize object.
        !           411:     @result true on success, false otherwise. */
        !           412: 
        !           413:     virtual bool serialize(OSSerialize * s) const;
        !           414: };
        !           415: 
        !           416: // Translate getKey() to getName().
        !           417: //
        !           418: inline const OSSymbol * IONetworkMedium::getKey() const
        !           419: {
        !           420:     return getName();
        !           421: }
        !           422: 
        !           423: #endif /* KERNEL */
        !           424: 
        !           425: #endif /* !_IONETWORKMEDIUM_H */

unix.superglobalmegacorp.com

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