]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/if_media.h
xnu-3248.60.10.tar.gz
[apple/xnu.git] / bsd / net / if_media.h
index 827081bfd3562f2529f7cd1925ad79f9287d0617..633eb62cd3062e3d34a8af6e01089686092b9737 100644 (file)
@@ -1,25 +1,32 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2013 Apple Inc. All rights reserved.
  *
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
  * 
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*     $NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $     */
+/* $FreeBSD: src/sys/net/if_media.h,v 1.9.2.1 2001/07/04 00:12:38 brooks Exp $ */
 
 /*
  * Copyright (c) 1997
@@ -57,6 +64,7 @@
 
 #ifndef _NET_IF_MEDIA_H_
 #define _NET_IF_MEDIA_H_
+#include <sys/appleapiopts.h>
 
 /*
  * Prototypes and definitions for BSD/OS-compatible network interface
  * to implement this interface.
  */
 
-#ifdef KERNEL
-
+#ifdef KERNEL_PRIVATE
+/* sigh; some modules are lazy and thus rely on this */
 #include <sys/queue.h>
-
-/*
- * Driver callbacks for media status and change requests.
- */
-typedef        int (*ifm_change_cb_t) __P((struct ifnet *ifp));
-typedef        void (*ifm_stat_cb_t) __P((struct ifnet *ifp, struct ifmediareq *req));
-
-/*
- * In-kernel representation of a single supported media type.
- */
-struct ifmedia_entry {
-       LIST_ENTRY(ifmedia_entry) ifm_list;
-       int     ifm_media;      /* description of this media attachment */
-       int     ifm_data;       /* for driver-specific use */
-       void    *ifm_aux;       /* for driver-specific use */
-};
-
-/*
- * One of these goes into a network interface's softc structure.
- * It is used to keep general media state.
- */
-struct ifmedia {
-       int     ifm_mask;       /* mask of changes we don't care about */
-       int     ifm_media;      /* current user-set media word */
-       struct ifmedia_entry *ifm_cur;  /* currently selected media */
-       LIST_HEAD(, ifmedia_entry) ifm_list; /* list of all supported media */
-       ifm_change_cb_t ifm_change;     /* media change driver callback */
-       ifm_stat_cb_t   ifm_status;     /* media status driver callback */
-};
-
-/* Initialize an interface's struct if_media field. */
-void   ifmedia_init __P((struct ifmedia *ifm, int dontcare_mask,
-           ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback));
-
-/* Add one supported medium to a struct ifmedia. */
-void   ifmedia_add __P((struct ifmedia *ifm, int mword, int data, void *aux));
-
-/* Add an array (of ifmedia_entry) media to a struct ifmedia. */
-void   ifmedia_list_add(struct ifmedia *mp, struct ifmedia_entry *lp,
-           int count);
-
-/* Set default media type on initialization. */
-void   ifmedia_set __P((struct ifmedia *ifm, int mword));
-
-/* Common ioctl function for getting/setting media, called by driver. */
-int    ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
-           struct ifmedia *ifm, u_long cmd));
-
-#endif /*KERNEL */
+#endif /* KERNEL_PRIVATE */
 
 /*
  * if_media Options word:
@@ -148,12 +108,21 @@ int       ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
 #define        IFM_100_VG      9               /* 100VG-AnyLAN */
 #define        IFM_100_T2      10              /* 100BaseT2 */
 #define        IFM_1000_SX     11              /* 1000BaseSX - multi-mode fiber */
-#define        IFM_10_STP      12              /* 10BaseT over shielded TP */
-#define        IFM_10_FL       13              /* 10BaseFL - Fiber */
+#define IFM_10_STP     12              /* 10BaseT over shielded TP */
+#define IFM_10_FL      13              /* 10baseFL - Fiber */
 #define        IFM_1000_LX     14              /* 1000baseLX - single-mode fiber */
 #define        IFM_1000_CX     15              /* 1000baseCX - 150ohm STP */
-#define        IFM_1000_TX     16              /* 1000baseTX - 4 pair cat 5 */
+#define        IFM_1000_T      16              /* 1000baseT - 4 pair cat 5 */
+#ifdef PRIVATE
+#define        IFM_1000_TX     IFM_1000_T      /* For compatibility */
+#endif /* PRIVATE */
 #define        IFM_HPNA_1      17              /* HomePNA 1.0 (1Mb/s) */
+#define        IFM_10G_SR      18              /* 10GbaseSR - multi-mode fiber */
+#define        IFM_10G_LR      19              /* 10GbaseLR - single-mode fiber */
+#define        IFM_10G_CX4     20              /* 10GbaseCX4 - copper */
+#define        IFM_10G_T       21              /* 10GbaseT - 4 pair cat 6 */
+#define        IFM_2500_T      22              /* 2500baseT - 4 pair cat 5 */
+#define        IFM_5000_T      23              /* 5000baseT - 4 pair cat 5 */
 
 /*
  * Token ring
@@ -163,9 +132,14 @@ int        ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
 #define        IFM_TOK_STP16   4               /* Shielded twisted pair 16m - DB9 */
 #define        IFM_TOK_UTP4    5               /* Unshielded twisted pair 4m - RJ45 */
 #define        IFM_TOK_UTP16   6               /* Unshielded twisted pair 16m - RJ45 */
+#define IFM_TOK_STP100  7              /* Shielded twisted pair 100m - DB9 */
+#define IFM_TOK_UTP100  8              /* Unshielded twisted pair 100m - RJ45 */
 #define        IFM_TOK_ETR     0x00000200      /* Early token release */
 #define        IFM_TOK_SRCRT   0x00000400      /* Enable source routing features */
 #define        IFM_TOK_ALLR    0x00000800      /* All routes / Single route bcast */
+#define IFM_TOK_DTR    0x00002000      /* Dedicated token ring */
+#define IFM_TOK_CLASSIC        0x00004000      /* Classic token ring */
+#define IFM_TOK_AUTO   0x00008000      /* Automatic Dedicate/Classic token ring */
 
 /*
  * FDDI
@@ -186,6 +160,7 @@ int ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
 #define        IFM_IEEE80211_DS5       6       /* Direct Sequence 5Mbps*/
 #define        IFM_IEEE80211_DS11      7       /* Direct Sequence 11Mbps*/
 #define        IFM_IEEE80211_DS1       8       /* Direct Sequence 1Mbps */
+#define IFM_IEEE80211_DS22     9       /* Direct Sequence 22Mbps */
 #define        IFM_IEEE80211_ADHOC     0x00000100      /* Operate in Adhoc mode */
 
 /*
@@ -201,6 +176,7 @@ int ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
 #define IFM_FDX                0x00100000      /* Force full duplex */
 #define        IFM_HDX         0x00200000      /* Force half duplex */
 #define        IFM_FLOW        0x00400000      /* enable hardware flow control */
+#define IFM_EEE                0x00800000      /* Support energy efficient ethernet */
 #define IFM_FLAG0      0x01000000      /* Driver defined flag */
 #define IFM_FLAG1      0x02000000      /* Driver defined flag */
 #define IFM_FLAG2      0x04000000      /* Driver defined flag */
@@ -221,13 +197,24 @@ int       ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
  */
 #define        IFM_AVALID      0x00000001      /* Active bit valid */
 #define        IFM_ACTIVE      0x00000002      /* Interface attached to working net */
+#define        IFM_WAKESAMENET 0x00000004      /* No link transition while asleep */
 
 /*
  * Macros to extract various bits of information from the media word.
  */
-#define        IFM_TYPE(x)     ((x) & IFM_NMASK)
-#define        IFM_SUBTYPE(x)  ((x) & IFM_TMASK)
-#define        IFM_INST(x)     (((x) & IFM_IMASK) >> IFM_ISHIFT)
+#define        IFM_TYPE(x)         ((x) & IFM_NMASK)
+#define        IFM_SUBTYPE(x)      ((x) & IFM_TMASK)
+#define IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK)
+#define        IFM_INST(x)         (((x) & IFM_IMASK) >> IFM_ISHIFT)
+#define IFM_OPTIONS(x) ((x) & (IFM_OMASK|IFM_GMASK))
+
+#define IFM_INST_MAX   IFM_INST(IFM_IMASK)
+
+/*
+ * Macro to create a media word.
+ */
+#define IFM_MAKEWORD(type, subtype, options, instance)                 \
+       ((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
 
 /*
  * NetBSD extension not defined in the BSDI API.  This is used in various
@@ -263,8 +250,14 @@ struct ifmedia_description {
     { IFM_10_FL,    "10baseFL"    },                \
     { IFM_1000_LX,  "1000baseLX"  },                \
     { IFM_1000_CX,  "1000baseCX"  },                \
-    { IFM_1000_TX,  "1000baseTX"  },                \
+    { IFM_1000_T,   "1000baseT"   },                \
     { IFM_HPNA_1,   "HomePNA1"    },                \
+    { IFM_10G_SR,   "10GbaseSR"   },                \
+    { IFM_10G_LR,   "10GbaseLR"   },                \
+    { IFM_10G_CX4,  "10GbaseCX4"  },                \
+    { IFM_10G_T,    "10GbaseT"    },                \
+    { IFM_2500_T,   "2500baseT"   },                \
+    { IFM_5000_T,   "5000baseT"   },                \
     { 0, NULL },                                    \
 }
 
@@ -287,8 +280,12 @@ struct ifmedia_description {
     { IFM_10_FL,    "10FL"   },                     \
     { IFM_1000_LX,  "1000LX" },                     \
     { IFM_1000_CX,  "1000CX" },                     \
-    { IFM_1000_TX,  "1000TX" },                     \
+    { IFM_1000_T,   "1000T"  },                     \
     { IFM_HPNA_1,   "HPNA1"  },                     \
+    { IFM_10G_SR,   "10GSR"  },                     \
+    { IFM_10G_LR,   "10GLR"  },                     \
+    { IFM_10G_CX4,  "10GCX4" },                     \
+    { IFM_10G_T,    "10GT"   },                     \
     { 0, NULL },                                    \
 }
 
@@ -345,6 +342,7 @@ struct ifmedia_description {
     { IFM_IEEE80211_DS2,  "DS2"  },                 \
     { IFM_IEEE80211_DS5,  "DS5"  },                 \
     { IFM_IEEE80211_DS11, "DS11" },                 \
+    { IFM_IEEE80211_DS22, "DS22" },                 \
     { 0, NULL },                                    \
 }
 
@@ -369,6 +367,7 @@ struct ifmedia_description {
     { IFM_FDX,      "full-duplex" },                \
     { IFM_HDX,      "half-duplex" },                \
     { IFM_FLOW,     "flow-control" },               \
+    { IFM_EEE,     "energy-efficient-ethernet" },  \
     { IFM_FLAG0,    "flag0" },                      \
     { IFM_FLAG1,    "flag1" },                      \
     { IFM_FLAG2,    "flag2" },                      \