Home | History | Annotate | Download | only in MarvellYukonDxe
      1 /**  <at> file
      2 *  Prototypes and definitions for BSD/OS-compatible network interface media selection.
      3 *
      4 *  Copyright (c) 2011-2016, ARM Limited. All rights reserved.
      5 *
      6 *  This program and the accompanying materials
      7 *  are licensed and made available under the terms and conditions of the BSD License
      8 *  which accompanies this distribution.  The full text of the license may be found at
      9 *  http://opensource.org/licenses/bsd-license.php
     10 *
     11 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 *
     14 **/
     15 /*  $NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $  */
     16 /* $FreeBSD: src/sys/net/if_media.h,v 1.47.2.1.4.1 2010/06/14 02:09:06 kensmith Exp $ */
     17 
     18 /*-
     19  * Copyright (c) 1997
     20  *  Jonathan Stone and Jason R. Thorpe.  All rights reserved.
     21  *
     22  * This software is derived from information provided by Matt Thomas.
     23  *
     24  * Redistribution and use in source and binary forms, with or without
     25  * modification, are permitted provided that the following conditions
     26  * are met:
     27  * 1. Redistributions of source code must retain the above copyright
     28  *    notice, this list of conditions and the following disclaimer.
     29  * 2. Redistributions in binary form must reproduce the above copyright
     30  *    notice, this list of conditions and the following disclaimer in the
     31  *    documentation and/or other materials provided with the distribution.
     32  * 3. All advertising materials mentioning features or use of this software
     33  *    must display the following acknowledgement:
     34  *  This product includes software developed by Jonathan Stone
     35  *  and Jason R. Thorpe for the NetBSD Project.
     36  * 4. The names of the authors may not be used to endorse or promote products
     37  *    derived from this software without specific prior written permission.
     38  *
     39  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
     40  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     42  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     43  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     44  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     45  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     46  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     47  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     48  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     49  * SUCH DAMAGE.
     50  */
     51 
     52 #ifndef _NET_IF_MEDIA_H_
     53 #define _NET_IF_MEDIA_H_
     54 
     55 /*
     56  * Prototypes and definitions for BSD/OS-compatible network interface
     57  * media selection.
     58  *
     59  * Where it is safe to do so, this code strays slightly from the BSD/OS
     60  * design.  Software which uses the API (device drivers, basically)
     61  * shouldn't notice any difference.
     62  *
     63  * Many thanks to Matt Thomas for providing the information necessary
     64  * to implement this interface.
     65  */
     66 
     67 /*
     68  * if_media Options word:
     69  *  Bits  Use
     70  *  ----  -------
     71  *  0-4  Media variant
     72  *  5-7  Media type
     73  *  8-15  Type specific options
     74  *  16-18  Mode (for multi-mode devices)
     75  *  19  RFU
     76  *  20-27  Shared (global) options
     77  *  28-31  Instance
     78  */
     79 
     80 /*
     81  * Ethernet
     82  */
     83 #define  IFM_ETHER          0x00000020
     84 #define  IFM_10_T           3   /* 10BaseT - RJ45 */
     85 #define  IFM_10_2           4   /* 10Base2 - Thinnet */
     86 #define  IFM_10_5           5   /* 10Base5 - AUI */
     87 #define  IFM_100_TX         6   /* 100BaseTX - RJ45 */
     88 #define  IFM_100_FX         7   /* 100BaseFX - Fiber */
     89 #define  IFM_100_T4         8   /* 100BaseT4 - 4 pair cat 3 */
     90 #define  IFM_100_VG         9   /* 100VG-AnyLAN */
     91 #define  IFM_100_T2         10  /* 100BaseT2 */
     92 #define  IFM_1000_SX        11  /* 1000BaseSX - multi-mode fiber */
     93 #define  IFM_10_STP         12  /* 10BaseT over shielded TP */
     94 #define  IFM_10_FL          13  /* 10BaseFL - Fiber */
     95 #define  IFM_1000_LX        14  /* 1000baseLX - single-mode fiber */
     96 #define  IFM_1000_CX        15  /* 1000baseCX - 150ohm STP */
     97 #define  IFM_1000_T         16  /* 1000baseT - 4 pair cat 5 */
     98 #define  IFM_HPNA_1         17  /* HomePNA 1.0 (1Mb/s) */
     99 #define  IFM_10G_LR         18  /* 10GBase-LR 1310nm Single-mode */
    100 #define  IFM_10G_SR         19  /* 10GBase-SR 850nm Multi-mode */
    101 #define  IFM_10G_CX4        20  /* 10GBase CX4 copper */
    102 #define IFM_2500_SX         21  /* 2500BaseSX - multi-mode fiber */
    103 #define IFM_10G_TWINAX      22  /* 10GBase Twinax copper */
    104 #define IFM_10G_TWINAX_LONG 23  /* 10GBase Twinax Long copper */
    105 #define IFM_10G_LRM         24  /* 10GBase-LRM 850nm Multi-mode */
    106 #define IFM_UNKNOWN         25  /* media types not defined yet */
    107 #define IFM_10G_T           26  /* 10GBase-T - RJ45 */
    108 
    109 
    110 /* note 31 is the max! */
    111 
    112 #define  IFM_ETH_MASTER  0x00000100  /* master mode (1000baseT) */
    113 
    114 /*
    115  * Token ring
    116  */
    117 #define  IFM_TOKEN        0x00000040
    118 #define  IFM_TOK_STP4     3    /* Shielded twisted pair 4m - DB9 */
    119 #define  IFM_TOK_STP16    4    /* Shielded twisted pair 16m - DB9 */
    120 #define  IFM_TOK_UTP4     5    /* Unshielded twisted pair 4m - RJ45 */
    121 #define  IFM_TOK_UTP16    6    /* Unshielded twisted pair 16m - RJ45 */
    122 #define  IFM_TOK_STP100   7    /* Shielded twisted pair 100m - DB9 */
    123 #define  IFM_TOK_UTP100   8    /* Unshielded twisted pair 100m - RJ45 */
    124 #define  IFM_TOK_ETR      0x00000200  /* Early token release */
    125 #define  IFM_TOK_SRCRT    0x00000400  /* Enable source routing features */
    126 #define  IFM_TOK_ALLR     0x00000800  /* All routes / Single route bcast */
    127 #define  IFM_TOK_DTR      0x00002000  /* Dedicated token ring */
    128 #define  IFM_TOK_CLASSIC  0x00004000  /* Classic token ring */
    129 #define  IFM_TOK_AUTO     0x00008000  /* Automatic Dedicate/Classic token ring */
    130 
    131 /*
    132  * FDDI
    133  */
    134 #define  IFM_FDDI       0x00000060
    135 #define  IFM_FDDI_SMF   3    /* Single-mode fiber */
    136 #define  IFM_FDDI_MMF   4    /* Multi-mode fiber */
    137 #define  IFM_FDDI_UTP   5    /* CDDI / UTP */
    138 #define  IFM_FDDI_DA    0x00000100  /* Dual attach / single attach */
    139 
    140 /*
    141  * IEEE 802.11 Wireless
    142  */
    143 #define  IFM_IEEE80211          0x00000080
    144 /* NB: 0,1,2 are auto, manual, none defined below */
    145 #define  IFM_IEEE80211_FH1      3  /* Frequency Hopping 1Mbps */
    146 #define  IFM_IEEE80211_FH2      4  /* Frequency Hopping 2Mbps */
    147 #define  IFM_IEEE80211_DS1      5  /* Direct Sequence 1Mbps */
    148 #define  IFM_IEEE80211_DS2      6  /* Direct Sequence 2Mbps */
    149 #define  IFM_IEEE80211_DS5      7  /* Direct Sequence 5.5Mbps */
    150 #define  IFM_IEEE80211_DS11     8  /* Direct Sequence 11Mbps */
    151 #define  IFM_IEEE80211_DS22     9  /* Direct Sequence 22Mbps */
    152 #define  IFM_IEEE80211_OFDM6    10  /* OFDM 6Mbps */
    153 #define  IFM_IEEE80211_OFDM9    11  /* OFDM 9Mbps */
    154 #define  IFM_IEEE80211_OFDM12   12  /* OFDM 12Mbps */
    155 #define  IFM_IEEE80211_OFDM18   13  /* OFDM 18Mbps */
    156 #define  IFM_IEEE80211_OFDM24   14  /* OFDM 24Mbps */
    157 #define  IFM_IEEE80211_OFDM36   15  /* OFDM 36Mbps */
    158 #define  IFM_IEEE80211_OFDM48   16  /* OFDM 48Mbps */
    159 #define  IFM_IEEE80211_OFDM54   17  /* OFDM 54Mbps */
    160 #define  IFM_IEEE80211_OFDM72   18  /* OFDM 72Mbps */
    161 #define  IFM_IEEE80211_DS354k   19  /* Direct Sequence 354Kbps */
    162 #define  IFM_IEEE80211_DS512k   20  /* Direct Sequence 512Kbps */
    163 #define  IFM_IEEE80211_OFDM3    21  /* OFDM 3Mbps */
    164 #define  IFM_IEEE80211_OFDM4    22  /* OFDM 4.5Mbps */
    165 #define  IFM_IEEE80211_OFDM27   23  /* OFDM 27Mbps */
    166 /* NB: not enough bits to express MCS fully */
    167 #define  IFM_IEEE80211_MCS      24  /* HT MCS rate */
    168 
    169 #define  IFM_IEEE80211_ADHOC    0x00000100  /* Operate in Adhoc mode */
    170 #define  IFM_IEEE80211_HOSTAP   0x00000200  /* Operate in Host AP mode */
    171 #define  IFM_IEEE80211_IBSS     0x00000400  /* Operate in IBSS mode */
    172 #define  IFM_IEEE80211_WDS      0x00000800  /* Operate in WDS mode */
    173 #define  IFM_IEEE80211_TURBO    0x00001000  /* Operate in turbo mode */
    174 #define  IFM_IEEE80211_MONITOR  0x00002000  /* Operate in monitor mode */
    175 #define  IFM_IEEE80211_MBSS     0x00004000  /* Operate in MBSS mode */
    176 
    177 /* operating mode for multi-mode devices */
    178 #define  IFM_IEEE80211_11A      0x00010000  /* 5Ghz, OFDM mode */
    179 #define  IFM_IEEE80211_11B      0x00020000  /* Direct Sequence mode */
    180 #define  IFM_IEEE80211_11G      0x00030000  /* 2Ghz, CCK mode */
    181 #define  IFM_IEEE80211_FH       0x00040000  /* 2Ghz, GFSK mode */
    182 #define  IFM_IEEE80211_11NA     0x00050000  /* 5Ghz, HT mode */
    183 #define  IFM_IEEE80211_11NG     0x00060000  /* 2Ghz, HT mode */
    184 
    185 /*
    186  * ATM
    187  */
    188 #define IFM_ATM             0x000000a0
    189 #define IFM_ATM_UNKNOWN     3
    190 #define IFM_ATM_UTP_25      4
    191 #define IFM_ATM_TAXI_100    5
    192 #define IFM_ATM_TAXI_140    6
    193 #define IFM_ATM_MM_155      7
    194 #define IFM_ATM_SM_155      8
    195 #define IFM_ATM_UTP_155     9
    196 #define IFM_ATM_MM_622      10
    197 #define IFM_ATM_SM_622      11
    198 #define  IFM_ATM_VIRTUAL    12
    199 #define IFM_ATM_SDH         0x00000100  /* SDH instead of SONET */
    200 #define IFM_ATM_NOSCRAMB    0x00000200  /* no scrambling */
    201 #define IFM_ATM_UNASSIGNED  0x00000400  /* unassigned cells */
    202 
    203 /*
    204  * CARP Common Address Redundancy Protocol
    205  */
    206 #define  IFM_CARP  0x000000c0
    207 
    208 /*
    209  * Shared media sub-types
    210  */
    211 #define  IFM_AUTO   0    /* Autoselect best media */
    212 #define  IFM_MANUAL 1    /* Jumper/dipswitch selects media */
    213 #define  IFM_NONE   2    /* Deselect all media */
    214 
    215 /*
    216  * Shared options
    217  */
    218 #define  IFM_FDX   0x00100000  /* Force full duplex */
    219 #define  IFM_HDX   0x00200000  /* Force half duplex */
    220 #define  IFM_FLAG0 0x01000000  /* Driver defined flag */
    221 #define  IFM_FLAG1 0x02000000  /* Driver defined flag */
    222 #define  IFM_FLAG2 0x04000000  /* Driver defined flag */
    223 #define  IFM_LOOP  0x08000000  /* Put hardware in loopback */
    224 
    225 /*
    226  * Masks
    227  */
    228 #define  IFM_NMASK  0x000000e0  /* Network type */
    229 #define  IFM_TMASK  0x0000001f  /* Media sub-type */
    230 #define  IFM_IMASK  0xf0000000  /* Instance */
    231 #define  IFM_ISHIFT 28    /* Instance shift */
    232 #define  IFM_OMASK  0x0000ff00  /* Type specific options */
    233 #define  IFM_MMASK  0x00070000  /* Mode */
    234 #define  IFM_MSHIFT 16    /* Mode shift */
    235 #define  IFM_GMASK  0x0ff00000  /* Global options */
    236 
    237 /*
    238  * Status bits
    239  */
    240 #define  IFM_AVALID  0x00000001  /* Active bit valid */
    241 #define  IFM_ACTIVE  0x00000002  /* Interface attached to working net */
    242 
    243 /* Mask of "status valid" bits, for ifconfig(8). */
    244 #define  IFM_STATUS_VALID  IFM_AVALID
    245 
    246 /* List of "status valid" bits, for ifconfig(8). */
    247 #define IFM_STATUS_VALID_LIST {            \
    248   IFM_AVALID,              \
    249   0                \
    250   }
    251 
    252 /*
    253  * Macros to extract various bits of information from the media word.
    254  */
    255 #define  IFM_TYPE(x)         ((x) & IFM_NMASK)
    256 #define  IFM_SUBTYPE(x)      ((x) & IFM_TMASK)
    257 #define  IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK)
    258 #define  IFM_INST(x)         (((x) & IFM_IMASK) >> IFM_ISHIFT)
    259 #define  IFM_OPTIONS(x)      ((x) & (IFM_OMASK|IFM_GMASK))
    260 #define  IFM_MODE(x)         ((x) & IFM_MMASK)
    261 
    262 #define  IFM_INST_MAX  IFM_INST(IFM_IMASK)
    263 
    264 /*
    265  * Macro to create a media word.
    266  */
    267 #define  IFM_MAKEWORD(type, subtype, options, instance)      \
    268   ((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
    269 #define  IFM_MAKEMODE(mode) \
    270   (((mode) << IFM_MSHIFT) & IFM_MMASK)
    271 
    272 
    273 #endif  /* _NET_IF_MEDIA_H_ */
    274