Chameleon

Chameleon Svn Source Tree

Root/branches/Chimera/i386/include/IOKit/network/IONetworkMedium.h

1/*
2 * Copyright (c) 1998-2008 Apple 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#ifndef _IONETWORKMEDIUM_H
24#define _IONETWORKMEDIUM_H
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30#include <net/if_media.h>
31
32/*! @typedef IOMediumType
33 @discussion A 32-bit value divided into fields which describes
34 a single medium type. */
35
36typedef UInt32 IOMediumType;
37
38/*! @defined kIOMediumType
39 @abstract A property of IONetworkMedium objects.
40 @discussion The kIOMediumType property is an OSNumber object that describes the type of
41 medium that this object represents.
42*/
43
44#define kIOMediumType "Type"
45
46/*! @defined kIOMediumFlags
47 @abstract A property of IONetworkMedium objects.
48 @discussion The kIOMediumFlags property is an OSNumber object that describes a set of
49 attributes assigned to the medium.
50*/
51
52#define kIOMediumFlags "Flags"
53
54/*! @defined kIOMediumSpeed
55 @abstract A property of IONetworkMedium objects.
56 @discussion The kIOMediumSpeed property is an OSNumber object that describes the maximum link
57 speed supported by the medium in bits per second.
58*/
59
60#define kIOMediumSpeed "Speed"
61
62/*! @defined kIOMediumIndex
63 @abstract A property of IONetworkMedium objects.
64 @discussion The kIOMediumIndex property is an OSNumber object that describes an index assigned
65 by the owner of the medium object. Its interpretation is driver
66 specific.
67*/
68
69#define kIOMediumIndex "Index"
70
71//===========================================================================
72// Medium Type (IOMediumType).
73//
74// The medium type is encoded by a 32-bit value. The definitions of
75// the fields and the encoding for each field is adapted from FreeBSD.
76//
77// Bits Definition
78// -------------------
79// 4-0 medium subtype
80// 7-5 network type
81// 15-8 network specific options
82// 19-16 reserved
83// 27-20 common options
84// 31-28 instance number
85
86// Ethernet.
87//
88enum {
89 kIOMediumEthernet = IFM_ETHER,
90 kIOMediumEthernetAuto = ( IFM_AUTO | IFM_ETHER ),
91 kIOMediumEthernetManual = ( IFM_MANUAL | IFM_ETHER ),
92 kIOMediumEthernetNone = ( IFM_NONE | IFM_ETHER ),
93 kIOMediumEthernet10BaseT = ( IFM_10_T | IFM_ETHER ),
94 kIOMediumEthernet10Base2 = ( IFM_10_2 | IFM_ETHER ),
95 kIOMediumEthernet10Base5 = ( IFM_10_5 | IFM_ETHER ),
96 kIOMediumEthernet100BaseTX = ( IFM_100_TX | IFM_ETHER ),
97 kIOMediumEthernet100BaseFX = ( IFM_100_FX | IFM_ETHER ),
98 kIOMediumEthernet100BaseT4 = ( IFM_100_T4 | IFM_ETHER ),
99 kIOMediumEthernet100BaseVG = ( IFM_100_VG | IFM_ETHER ),
100 kIOMediumEthernet100BaseT2 = ( IFM_100_T2 | IFM_ETHER ),
101 kIOMediumEthernet1000BaseSX = ( IFM_1000_SX | IFM_ETHER ),
102 kIOMediumEthernet10BaseSTP = ( IFM_10_STP | IFM_ETHER ),
103 kIOMediumEthernet10BaseFL = ( IFM_10_FL | IFM_ETHER ),
104 kIOMediumEthernet1000BaseLX = ( IFM_1000_LX | IFM_ETHER ),
105 kIOMediumEthernet1000BaseCX = ( IFM_1000_CX | IFM_ETHER ),
106 kIOMediumEthernet1000BaseTX = ( IFM_1000_T | IFM_ETHER ), //deprecated- use kIOMediumEthernet1000BaseT instead
107 kIOMediumEthernet1000BaseT = ( IFM_1000_T | IFM_ETHER ),
108 kIOMediumEthernetHomePNA1 = ( IFM_HPNA_1 | IFM_ETHER ),
109kIOMediumEthernet10GBaseSR = ( IFM_10G_SR | IFM_ETHER ),
110kIOMediumEthernet10GBaseLR = ( IFM_10G_LR | IFM_ETHER ),
111 kIOMediumEthernet10GBaseCX4 = ( IFM_10G_CX4 | IFM_ETHER ),
112 kIOMediumEthernet10GBaseT = ( IFM_10G_T | IFM_ETHER )
113};
114
115// IEEE 802.11 Wireless.
116//
117enum {
118 kIOMediumIEEE80211 = IFM_IEEE80211,
119 kIOMediumIEEE80211Auto = ( IFM_AUTO | IFM_IEEE80211 ),
120 kIOMediumIEEE80211Manual = ( IFM_MANUAL | IFM_IEEE80211 ),
121 kIOMediumIEEE80211None = ( IFM_NONE | IFM_IEEE80211 ),
122 kIOMediumIEEE80211FH1 = ( IFM_IEEE80211_FH1 | IFM_IEEE80211 ),
123 kIOMediumIEEE80211FH2 = ( IFM_IEEE80211_FH2 | IFM_IEEE80211 ),
124 kIOMediumIEEE80211DS2 = ( IFM_IEEE80211_DS2 | IFM_IEEE80211 ),
125 kIOMediumIEEE80211DS5 = ( IFM_IEEE80211_DS5 | IFM_IEEE80211 ),
126 kIOMediumIEEE80211DS11 = ( IFM_IEEE80211_DS11 | IFM_IEEE80211 ),
127 kIOMediumIEEE80211DS1 = ( IFM_IEEE80211_DS1 | IFM_IEEE80211 ),
128 kIOMediumIEEE80211OptionAdhoc = IFM_IEEE80211_ADHOC
129};
130
131// Common options.
132//
133enum {
134 kIOMediumOptionFullDuplex = IFM_FDX,
135 kIOMediumOptionHalfDuplex = IFM_HDX,
136 kIOMediumOptionFlowControl = IFM_FLOW,
137 kIOMediumOptionFlag0 = IFM_FLAG0,
138 kIOMediumOptionFlag1 = IFM_FLAG1,
139 kIOMediumOptionFlag2 = IFM_FLAG2,
140 kIOMediumOptionLoopback = IFM_LOOP
141};
142
143// Medium type masks.
144//
145#define kIOMediumSubTypeMask IFM_TMASK
146#define kIOMediumNetworkTypeMask IFM_NMASK
147#define kIOMediumOptionsMask IFM_OMASK
148#define kIOMediumCommonOptionsMask IFM_GMASK
149#define kIOMediumInstanceShift IFM_ISHIFT
150#define kIOMediumInstanceMask IFM_IMASK
151
152// Medium type field accessors.
153//
154#define IOMediumGetSubType(x) ((x) & kIOMediumSubTypeMask)
155#define IOMediumGetNetworkType(x) ((x) & kIOMediumNetworkMask)
156#define IOMediumGetInstance(x) (((x) & kIOMediumInstanceMask) >> \
157 kIOMediumInstanceShift)
158
159//===========================================================================
160// Medium flags.
161
162
163//===========================================================================
164// Link status bits.
165//
166enum {
167 kIONetworkLinkValid = IFM_AVALID, // link status is valid
168 kIONetworkLinkActive = IFM_ACTIVE // link is up/active.
169};
170
171#ifdef __cplusplus
172}
173#endif
174
175//===========================================================================
176// IONetworkMedium class.
177
178#ifdef KERNEL
179
180#include <libkern/c++/OSObject.h>
181#include <libkern/c++/OSSymbol.h>
182
183/*! @class IONetworkMedium
184 @abstract An object that encapsulates information about a network
185 medium (i.e. 10Base-T, or 100Base-T Full Duplex).
186 @discussion The main purpose of
187 this object is for a network driver to advertise its media capability,
188 through a collection of IONetworkMedium objects stored in a dictionary
189 in its property table. IONetworkMedium supports serialization, and will
190 encode its properties in the form of a dictionary to the serialization
191 stream when instructed. This will allow a user-space application to
192 browse the set of media types supported by the controller.
193*/
194
195class IONetworkMedium : public OSObject
196{
197 OSDeclareDefaultStructors( IONetworkMedium )
198
199protected:
200 IOMediumType _type;
201 UInt32 _flags;
202 UInt64 _speed;
203 UInt32 _index;
204 const OSSymbol * _name;
205
206 struct ExpansionData { };
207 /*! @var reserved
208 Reserved for future use. (Internal use only) */
209 ExpansionData *_reserved;
210
211
212/*! @function free
213 @abstract Frees the IONetworkMedium object.
214*/
215
216 virtual void free();
217
218public:
219
220/*! @function nameForType
221 @abstract Creates a name that describes a medium type.
222 @discussion Given a medium type, creates an OSymbol object that
223 describes the medium type. There is a 1-to-1 mapping between the
224 medium type, and the medium name created by this method. The caller
225 is responsible for releasing the OSSymbol object returned.
226 @param type A medium type. See IONetworkMedium.h for type encoding.
227 @result Returns an OSSymbol object is created based on the type provided.
228*/
229
230 static const OSSymbol * nameForType(IOMediumType type);
231
232/*! @function addMedium
233 @abstract Adds an IONetworkMedium object to a dictionary.
234 @discussion A helper function to add an IONetworkMedium object to a
235 given dictionary. The name of the medium is used as the key for the
236 new dictionary entry.
237 @param dict An OSDictionary object where the medium object should be
238 added as a new entry.
239 @param medium The IONetworkMedium object to add to the dictionary.
240 @result Returns true on success, false otherwise.
241*/
242
243 static bool addMedium(OSDictionary * dict,
244 const IONetworkMedium * medium);
245
246/*! @function removeMedium
247 @abstract Removes an IONetworkMedium object from a dictionary.
248 @discussion A helper function to remove an entry in a dictionary.
249 @param dict The OSDictionary object where the medium object should be
250 removed from.
251 @param medium The name of this medium object is used as the key.
252*/
253
254 static void removeMedium(OSDictionary * dict,
255 const IONetworkMedium * medium);
256
257/*! @function getMediumWithType
258 @abstract Finds a medium object from a dictionary with a given type.
259 @discussion This method iterates through a dictionary and returns an IONetworkMedium
260 entry with the given type. An optional mask supplies the don't care bits.
261 @param dict The dictionary to look for a matching entry.
262 @param type Search for an entry with this type.
263 @param mask The don't care bits in IOMediumType. Defaults to 0, which
264 implies that a perfect match is desired.
265 @result Returns the first matching IONetworkMedium entry found,
266 or 0 if no match was found.
267*/
268
269 static IONetworkMedium * getMediumWithType(const OSDictionary * dict,
270 IOMediumType type,
271 IOMediumType mask = 0);
272
273/*! @function getMediumWithIndex
274 @abstract Finds a medium object from a dictionary with a given index.
275 @discussion This method iterates through a dictionary and returns an IONetworkMedium
276 entry with the given index. An optional mask supplies the don't care bits.
277 @param dict The dictionary to look for a matching entry.
278 @param index Search for an entry with the given index.
279 @param mask The don't care bits in index. Defaults to 0, which
280 implies that a perfect match is desired.
281 @result Returns the first matching IONetworkMedium entry found,
282 or 0 if no match was found.
283*/
284
285 static IONetworkMedium * getMediumWithIndex(const OSDictionary * dict,
286 UInt32 index,
287 UInt32 mask = 0);
288
289/*! @function init
290 @abstract Initializes an IONetworkMedium object.
291 @param type The medium type, this value is encoded with bits defined in
292 IONetworkMedium.h.
293 @param speed The maximum (or the only) link speed supported over this
294 medium in units of bits per second.
295 @param flags An optional flag for the medium object.
296 See IONetworkMedium.h for defined flags.
297 @param index An optional index number assigned by the owner.
298 Drivers can use this to store an index to a media table in
299 the driver, or it may map to a driver-defined media type.
300 @param name An optional name assigned to this medium object. If 0,
301 then a name will be created based on the medium type by
302 calling IONetworkMedium::nameForType(). Since the name of
303 the medium is used as a key when inserted into a dictionary,
304 the name chosen must be unique within the scope of the owner.
305 @result Returns true on success, false otherwise.
306*/
307
308 virtual bool init(IOMediumType type,
309 UInt64 speed,
310 UInt32 flags = 0,
311 UInt32 index = 0,
312 const char * name = 0);
313
314/*! @function medium
315 @abstract Factory method that allocates and initializes an IONetworkMedium object.
316 @param type The medium type, this value is encoded with bits defined in
317 IONetworkMedium.h.
318 @param speed The maximum (or the only) link speed supported over this
319 medium in units of bits per second.
320 @param flags An optional flag for the medium object.
321 See IONetworkMedium.h for defined flags.
322 @param index An optional index number assigned by the owner.
323 Drivers can use this to store an index to a media table in
324 the driver, or it may map to a driver-defined media type.
325 @param name An optional name assigned to this medium object. If 0,
326 then a name will be created based on the medium type by
327 calling IONetworkMedium::nameForType(). Since the name of
328 the medium is used as a key when inserted into a dictionary,
329 the name chosen must be unique within the scope of the owner.
330 @result Returns an IONetworkMedium instance on success, or 0 otherwise.
331*/
332
333 static IONetworkMedium * medium(IOMediumType type,
334 UInt64 speed,
335 UInt32 flags = 0,
336 UInt32 index = 0,
337 const char * name = 0);
338
339/*! @function getType
340 @result Returns the medium type assigned to this medium object.
341*/
342
343 virtual IOMediumType getType() const;
344
345/*! @function getSpeed
346 @result Returns the maximum link speed supported by this medium.
347*/
348
349 virtual UInt64 getSpeed() const;
350
351/*! @function getFlags
352 @result Returns the medium flags.
353*/
354
355 virtual UInt32 getFlags() const;
356
357/*! @function getIndex
358 @result Returns the assigned medium index.
359*/
360
361 virtual UInt32 getIndex() const;
362
363/*! @function getName
364 @result Returns the name assigned to this medium object.
365*/
366
367 virtual const OSSymbol * getName() const;
368
369/*! @function getKey
370 @result Returns the key to use for this medium object. This key should be
371 used when this object is added to a dictionary. Same as getName().
372*/
373
374 virtual const OSSymbol * getKey() const;
375
376/*! @function isEqualTo
377 @abstract Tests for equality between two IONetworkMedium objects.
378 @discussion Two IONetworkMedium objects are considered equal if
379 they have similar properties assigned to them during initialization.
380 @param medium An IONetworkMedium to test against the IONetworkMedium
381 object being called.
382 @result Returns true if equal, false otherwise.
383*/
384
385 virtual bool isEqualTo(const IONetworkMedium * medium) const;
386
387/*! @function isEqualTo
388 @abstract Tests for equality between a IONetworkMedium object and an
389 OSObject.
390 @discussion The OSObject is considered equal to the IONetworkMedium
391 object if the OSObject is an IONetworkMedium, and they have
392 similar properties assigned to them during initialization.
393 @param obj An OSObject to test against an IONetworkMedium object.
394 @result Returns true if equal, false otherwise.
395*/
396
397 virtual bool isEqualTo(const OSMetaClassBase * obj) const;
398
399/*! @function serialize
400 @abstract Serializes the IONetworkMedium object.
401 @discussion A dictionary is created containing the properties
402 assigned to this medium object, and this dictionary is then
403 serialized using the OSSerialize object provided.
404 @param s An OSSerialize object.
405 @result Returns true on success, false otherwise.
406*/
407
408 virtual bool serialize(OSSerialize * s) const;
409
410 // Virtual function padding
411 OSMetaClassDeclareReservedUnused( IONetworkMedium, 0);
412 OSMetaClassDeclareReservedUnused( IONetworkMedium, 1);
413 OSMetaClassDeclareReservedUnused( IONetworkMedium, 2);
414 OSMetaClassDeclareReservedUnused( IONetworkMedium, 3);
415};
416
417// Translate getKey() to getName().
418//
419inline const OSSymbol * IONetworkMedium::getKey() const
420{
421 return getName();
422}
423
424#endif /* KERNEL */
425
426#endif /* !_IONETWORKMEDIUM_H */
427

Archive Download this file

Revision: 1340