]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/if_media.h
xnu-3789.70.16.tar.gz
[apple/xnu.git] / bsd / net / if_media.h
index 37cfff95f0b14c91e35d67a8ba43ddb697966b92..633eb62cd3062e3d34a8af6e01089686092b9737 100644 (file)
@@ -1,14 +1,19 @@
 /*
- * 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@
  * 
  * 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. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
+ * 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.
+ * 
+ * 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
@@ -18,7 +23,7 @@
  * 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 $ */
  */
 
 #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)(struct ifnet *ifp);
-typedef        void (*ifm_stat_cb_t)(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(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(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(struct ifmedia *ifm, int mword);
-
-/* Common ioctl function for getting/setting media, called by driver. */
-int    ifmedia_ioctl(struct ifnet *ifp, struct ifreq *ifr,
-           struct ifmedia *ifm, u_long cmd);
-
 #endif /* KERNEL_PRIVATE */
 
 /*
@@ -161,6 +119,10 @@ int        ifmedia_ioctl(struct ifnet *ifp, struct ifreq *ifr,
 #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
@@ -214,6 +176,7 @@ int ifmedia_ioctl(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 */
@@ -234,6 +197,7 @@ int ifmedia_ioctl(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.
@@ -290,6 +254,10 @@ struct ifmedia_description {
     { 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 },                                    \
 }
 
@@ -316,6 +284,8 @@ struct ifmedia_description {
     { IFM_HPNA_1,   "HPNA1"  },                     \
     { IFM_10G_SR,   "10GSR"  },                     \
     { IFM_10G_LR,   "10GLR"  },                     \
+    { IFM_10G_CX4,  "10GCX4" },                     \
+    { IFM_10G_T,    "10GT"   },                     \
     { 0, NULL },                                    \
 }
 
@@ -397,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" },                      \