mii.c

Go to the documentation of this file.
00001 /*
00002 ibm/mii.c
00003 
00004 Created:        Nov 2004 by Philip Homburg <philip@f-mnx.phicoh.com>
00005 
00006 Media Independent (Ethernet) Interface functions
00007 */
00008 
00009 #include "../drivers.h"
00010 #if __minix_vmd
00011 #include "config.h"
00012 #endif
00013 
00014 #include "mii.h"
00015 
00016 /*===========================================================================*
00017  *                              mii_print_stat_speed                         *
00018  *===========================================================================*/
00019 PUBLIC void mii_print_stat_speed(stat, extstat)
00020 u16_t stat;
00021 u16_t extstat;
00022 {
00023         int fs, ft;
00024 
00025         fs= 1;
00026         if (stat & MII_STATUS_EXT_STAT)
00027         {
00028                 if (extstat & (MII_ESTAT_1000XFD | MII_ESTAT_1000XHD |
00029                         MII_ESTAT_1000TFD | MII_ESTAT_1000THD))
00030                 {
00031                         printf("1000 Mbps: ");
00032                         fs= 0;
00033                         ft= 1;
00034                         if (extstat & (MII_ESTAT_1000XFD | MII_ESTAT_1000XHD))
00035                         {
00036                                 ft= 0;
00037                                 printf("X-");
00038                                 switch(extstat &
00039                                         (MII_ESTAT_1000XFD|MII_ESTAT_1000XHD))
00040                                 {
00041                                 case MII_ESTAT_1000XFD: printf("FD"); break;
00042                                 case MII_ESTAT_1000XHD: printf("HD"); break;
00043                                 default:                printf("FD/HD"); break;
00044                                 }
00045                         }
00046                         if (extstat & (MII_ESTAT_1000TFD | MII_ESTAT_1000THD))
00047                         {
00048                                 if (!ft)
00049                                         printf(", ");
00050                                 ft= 0;
00051                                 printf("T-");
00052                                 switch(extstat &
00053                                         (MII_ESTAT_1000TFD|MII_ESTAT_1000THD))
00054                                 {
00055                                 case MII_ESTAT_1000TFD: printf("FD"); break;
00056                                 case MII_ESTAT_1000THD: printf("HD"); break;
00057                                 default:                printf("FD/HD"); break;
00058                                 }
00059                         }
00060                 }
00061         }
00062         if (stat & (MII_STATUS_100T4 |
00063                 MII_STATUS_100XFD | MII_STATUS_100XHD |
00064                 MII_STATUS_100T2FD | MII_STATUS_100T2HD))
00065         {
00066                 if (!fs)
00067                         printf(", ");
00068                 fs= 0;
00069                 printf("100 Mbps: ");
00070                 ft= 1;
00071                 if (stat & MII_STATUS_100T4)
00072                 {
00073                         printf("T4");
00074                         ft= 0;
00075                 }
00076                 if (stat & (MII_STATUS_100XFD | MII_STATUS_100XHD))
00077                 {
00078                         if (!ft)
00079                                 printf(", ");
00080                         ft= 0;
00081                         printf("TX-");
00082                         switch(stat & (MII_STATUS_100XFD|MII_STATUS_100XHD))
00083                         {
00084                         case MII_STATUS_100XFD: printf("FD"); break;
00085                         case MII_STATUS_100XHD: printf("HD"); break;
00086                         default:                printf("FD/HD"); break;
00087                         }
00088                 }
00089                 if (stat & (MII_STATUS_100T2FD | MII_STATUS_100T2HD))
00090                 {
00091                         if (!ft)
00092                                 printf(", ");
00093                         ft= 0;
00094                         printf("T2-");
00095                         switch(stat & (MII_STATUS_100T2FD|MII_STATUS_100T2HD))
00096                         {
00097                         case MII_STATUS_100T2FD:        printf("FD"); break;
00098                         case MII_STATUS_100T2HD:        printf("HD"); break;
00099                         default:                printf("FD/HD"); break;
00100                         }
00101                 }
00102         }
00103         if (stat & (MII_STATUS_10FD | MII_STATUS_10HD))
00104         {
00105                 if (!fs)
00106                         printf(", ");
00107                 printf("10 Mbps: ");
00108                 fs= 0;
00109                 printf("T-");
00110                 switch(stat & (MII_STATUS_10FD|MII_STATUS_10HD))
00111                 {
00112                 case MII_STATUS_10FD:   printf("FD"); break;
00113                 case MII_STATUS_10HD:   printf("HD"); break;
00114                 default:                printf("FD/HD"); break;
00115                 }
00116         }
00117 }
00118 
00119 /*===========================================================================*
00120  *                              mii_print_techab                             *
00121  *===========================================================================*/
00122 PUBLIC void mii_print_techab(techab)
00123 u16_t techab;
00124 {
00125         int fs, ft;
00126 
00127         if ((techab & MII_ANA_SEL_M) != MII_ANA_SEL_802_3)
00128         {
00129                 printf("strange selector 0x%x, value 0x%x",
00130                         techab & MII_ANA_SEL_M,
00131                         (techab & MII_ANA_TAF_M) >> MII_ANA_TAF_S);
00132                 return;
00133         }
00134         fs= 1;
00135         if (techab & (MII_ANA_100T4 | MII_ANA_100TXFD | MII_ANA_100TXHD))
00136         {
00137                 printf("100 Mbps: ");
00138                 fs= 0;
00139                 ft= 1;
00140                 if (techab & MII_ANA_100T4)
00141                 {
00142                         printf("T4");
00143                         ft= 0;
00144                 }
00145                 if (techab & (MII_ANA_100TXFD | MII_ANA_100TXHD))
00146                 {
00147                         if (!ft)
00148                                 printf(", ");
00149                         ft= 0;
00150                         printf("TX-");
00151                         switch(techab & (MII_ANA_100TXFD|MII_ANA_100TXHD))
00152                         {
00153                         case MII_ANA_100TXFD:   printf("FD"); break;
00154                         case MII_ANA_100TXHD:   printf("HD"); break;
00155                         default:                printf("FD/HD"); break;
00156                         }
00157                 }
00158         }
00159         if (techab & (MII_ANA_10TFD | MII_ANA_10THD))
00160         {
00161                 if (!fs)
00162                         printf(", ");
00163                 printf("10 Mbps: ");
00164                 fs= 0;
00165                 printf("T-");
00166                 switch(techab & (MII_ANA_10TFD|MII_ANA_10THD))
00167                 {
00168                 case MII_ANA_10TFD:     printf("FD"); break;
00169                 case MII_ANA_10THD:     printf("HD"); break;
00170                 default:                printf("FD/HD"); break;
00171                 }
00172         }
00173         if (techab & MII_ANA_PAUSE_SYM)
00174         {
00175                 if (!fs)
00176                         printf(", ");
00177                 fs= 0;
00178                 printf("pause(SYM)");
00179         }
00180         if (techab & MII_ANA_PAUSE_ASYM)
00181         {
00182                 if (!fs)
00183                         printf(", ");
00184                 fs= 0;
00185                 printf("pause(ASYM)");
00186         }
00187         if (techab & MII_ANA_TAF_RES)
00188         {
00189                 if (!fs)
00190                         printf(", ");
00191                 fs= 0;
00192                 printf("0x%x", (techab & MII_ANA_TAF_RES) >> MII_ANA_TAF_S);
00193         }
00194 }
00195 
00196 /*
00197  * $PchId: mii.c,v 1.2 2005/01/31 22:17:26 philip Exp $
00198  */

Generated on Fri Apr 14 22:57:16 2006 for minix by  doxygen 1.4.6