Changeset 35764


Ignore:
Timestamp:
2013-02-24T18:55:09+01:00 (5 years ago)
Author:
hauke
Message:

broadcom-diag: use new in kernel board detection code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/broadcom-diag/src/diag.c

    r34996 r35764  
    3333#include <linux/kobject.h> 
    3434#include <net/sock.h> 
     35#include <bcm47xx_board.h> 
    3536extern u64 uevent_next_seqnum(void); 
    3637 
     
    10391040}; 
    10401041 
    1041 static struct platform_t __init *platform_detect(void) 
     1042static struct platform_t __init *platform_detect_legacy(void) 
    10421043{ 
    10431044        char *boardnum, *boardtype, *buf; 
     
    10461047                return &platforms[WGT634U]; 
    10471048 
    1048         /* Look for a model identifier */ 
    1049  
    1050         /* Based on "model_name" */ 
    1051         if ((buf = nvram_get("model_name"))) { 
    1052                 if (!strcmp(buf, "DIR-130")) 
    1053                         return &platforms[DIR130]; 
    1054                 if (!strcmp(buf, "DIR-330")) 
    1055                         return &platforms[DIR330]; 
    1056         } 
    1057  
    1058         /* Based on "wsc_modelname */ 
    1059         if ((buf = nvram_get("wsc_modelname"))) { 
    1060                 if (!strcmp(buf, "WRT610N")) 
    1061                         return &platforms[WRT610N]; 
    1062         } 
    1063  
    1064         /* Based on "model_no" */ 
    1065         if ((buf = nvram_get("model_no"))) { 
    1066                 if (startswith(buf,"WL700")) /* WL700* */ 
    1067                         return &platforms[WL700GE]; 
    1068         } 
    1069  
    1070         /* Based on "hardware_version" */ 
    1071         if ((buf = nvram_get("hardware_version"))) { 
    1072                 if (startswith(buf,"WL500GPV2-")) /* WL500GPV2-* */ 
    1073                         return &platforms[WL500GPV2]; 
    1074                 if (startswith(buf,"WL520GC-")) /* WL520GU-* */ 
    1075                         return &platforms[WL520GC]; 
    1076                 if (startswith(buf,"WL520GU-")) /* WL520GU-* */ 
    1077                         return &platforms[WL520GU]; 
    1078                 if (startswith(buf,"WL330GE-")) /* WL330GE-* */ 
    1079                         return &platforms[WL330GE]; 
    1080                 if (startswith(buf,"RT-N16-")) /* RT-N16-* */ 
    1081                         return &platforms[RTN16]; 
    1082                 if (startswith(buf,"F7D4301")) /* F7D4301* */ 
    1083                         return &platforms[BELKIN_F7D4301]; 
    1084         } 
    1085  
    1086         /* Based on "ModelId" */ 
    1087         if ((buf = nvram_get("ModelId"))) { 
    1088                 if (!strcmp(buf, "WR850GP")) 
    1089                         return &platforms[WR850GP]; 
    1090                 if (!strcmp(buf, "WR850G")) 
    1091                         return &platforms[WR850GV2V3]; 
    1092                 if (!strcmp(buf, "WX-5565") && !strcmp(getvar("boardtype"),"bcm94710ap")) 
    1093                         return &platforms[TM2300]; /* Dell TrueMobile 2300 */ 
    1094                 if (startswith(buf,"WE800G")) /* WE800G* */ 
    1095                         return &platforms[WE800G]; 
    1096         } 
    1097  
    1098         /* Buffalo */ 
    1099         if ((buf = (nvram_get("melco_id") ?: nvram_get("buffalo_id")))) { 
    1100                 /* Buffalo hardware, check id for specific hardware matches */ 
    1101                 if (!strcmp(buf, "29bb0332")) 
    1102                         return &platforms[WBR2_G54]; 
    1103                 if (!strcmp(buf, "29129")) 
    1104                         return &platforms[WLA2_G54L]; 
    1105                 if (!strcmp(buf, "30189")) 
    1106                         return &platforms[WHR_HP_G54]; 
    1107                 if (!strcmp(buf, "32093")) 
    1108                         return &platforms[WHR_G125]; 
    1109                 if (!strcmp(buf, "30182")) 
    1110                         return &platforms[WHR_G54S]; 
    1111                 if (!strcmp(buf, "290441dd")) 
    1112                         return &platforms[WHR2_A54G54]; 
    1113                 if (!strcmp(buf, "31120")) 
    1114                         return &platforms[WZR_G300N]; 
    1115                 if (!strcmp(buf, "30083")) 
    1116                         return &platforms[WZR_RS_G54]; 
    1117                 if (!strcmp(buf, "30103")) 
    1118                         return &platforms[WZR_RS_G54HP]; 
    1119         } 
    11201049 
    11211050        /* no easy model number, attempt to guess */ 
     
    11311060        } 
    11321061 
    1133         /* 
    1134          * Normally, these would go inside the "CFE based - newer hardware" block below; however, during early init, the 
    1135          * "pmon_ver" variable is not available on the E3000v1 (and probably the WRT610Nv2 also).  Until this is figured out, 
    1136          * these will need to remain here in order for platform detection to work. 
    1137          */ 
    1138         if (!strcmp(boardnum, "42")) { /* Linksys */ 
    1139                 if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "E300") && !strcmp(getvar("boot_hw_ver"), "1.0")) 
    1140                         return &platforms[E3000V1]; 
    1141  
    1142                 if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "WRT610N") && !strcmp(getvar("boot_hw_ver"), "2.0")) 
    1143                         return &platforms[WRT610NV2]; 
    1144         } 
    1145  
    11461062        if (startswith(getvar("pmon_ver"), "CFE")) { 
    11471063                /* CFE based - newer hardware */ 
    11481064                if (!strcmp(boardnum, "42")) { /* Linksys */ 
    1149                         if (!strcmp(boardtype, "0x478") && !strcmp(getvar("boot_hw_model"), "WRT300N") && !strcmp(getvar("boot_hw_ver"), "1.1")) 
    1150                                 return &platforms[WRT300NV11]; 
    1151  
    11521065                        if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "1")) 
    11531066                                return &platforms[WRT350N]; 
     
    11561069                                return &platforms[WRT54G3G]; 
    11571070 
    1158                         if (!strcmp(boardtype, "0x042f") && !strcmp(getvar("model_name"), "WRT54G3GV2-VF")) 
    1159                                 return &platforms[WRT54G3GV2_VF]; 
    1160  
    11611071                        if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1")) 
    11621072                                return &platforms[WRTSL54GS]; 
    1163  
    1164                         if (!strcmp(boardtype, "0x0472")) { 
    1165                                 if(!strcmp(getvar("boot_hw_model"), "WRT150N")) { 
    1166                                         if(!strcmp(getvar("boot_hw_ver"), "1")) 
    1167                                                 return &platforms[WRT150NV1]; 
    1168                                         else if(!strcmp(getvar("boot_hw_ver"), "1.1")) 
    1169                                                 return &platforms[WRT150NV11]; 
    1170                                 } 
    1171                                 else if(!strcmp(getvar("boot_hw_model"), "WRT160N")) { 
    1172                                         if(!strcmp(getvar("boot_hw_ver"), "1.0")) 
    1173                                                 return &platforms[WRT160NV1]; 
    1174                                         else if(!strcmp(getvar("boot_hw_ver"), "3.0")) 
    1175                                                 return &platforms[WRT160NV3]; 
    1176                                 } 
    1177                         } 
    1178  
    1179                         if (!strcmp(boardtype, "0x04cd")) { 
    1180                                 if (!strcmp(getvar("boot_hw_model"), "E100")) { 
    1181                                         if (!strcmp(getvar("boot_hw_ver"), "1.0")) 
    1182                                                 return &platforms[E1000V1]; 
    1183                                 } 
    1184                         } 
    11851073 
    11861074                        /* default to WRT54G */ 
     
    12001088 
    12011089                if (!strcmp(boardnum, "45")) { /* ASUS */ 
    1202                         if (!strcmp(boardtype,"0x042f")) 
    1203                                 return &platforms[WL500GP]; 
    1204                         else if (!strcmp(boardtype,"0x0472")) 
     1090                        if (!strcmp(boardtype,"0x0472")) 
    12051091                                return &platforms[WL500W]; 
    12061092                        else if (!strcmp(boardtype,"0x467")) 
     
    13111197} 
    13121198 
     1199static struct platform_t __init *platform_detect(void) 
     1200{ 
     1201        enum bcm47xx_board board; 
     1202        const char *board_name; 
     1203 
     1204 
     1205        board = bcm47xx_board_get(); 
     1206        board_name = bcm47xx_board_get_name(); 
     1207        if (board != BCM47XX_BOARD_UNKNOWN && board != BCM47XX_BOARD_NON) 
     1208                printk(MODULE_NAME ": kernel found a \"%s\"\n", board_name); 
     1209 
     1210        switch(board) { 
     1211        case BCM47XX_BOARD_ASUS_RTN16: 
     1212                return &platforms[RTN16]; 
     1213        case BCM47XX_BOARD_ASUS_WL330GE: 
     1214                return &platforms[WL330GE]; 
     1215        case BCM47XX_BOARD_ASUS_WL500GPV1: 
     1216                return &platforms[WL500GP]; 
     1217        case BCM47XX_BOARD_ASUS_WL500GPV2: 
     1218                return &platforms[WL500GPV2]; 
     1219        case BCM47XX_BOARD_ASUS_WL520GC: 
     1220                return &platforms[WL520GC]; 
     1221        case BCM47XX_BOARD_ASUS_WL520GU: 
     1222                return &platforms[WL520GU]; 
     1223        case BCM47XX_BOARD_ASUS_WL700GE: 
     1224                return &platforms[WL700GE]; 
     1225        case BCM47XX_BOARD_BELKIN_F7D4301: 
     1226                return &platforms[BELKIN_F7D4301]; 
     1227        case BCM47XX_BOARD_BUFFALO_WBR2_G54: 
     1228                return &platforms[WBR2_G54]; 
     1229        case BCM47XX_BOARD_BUFFALO_WHR2_A54G54: 
     1230                return &platforms[WHR2_A54G54]; 
     1231        case BCM47XX_BOARD_BUFFALO_WHR_G125: 
     1232                return &platforms[WHR_G125]; 
     1233        case BCM47XX_BOARD_BUFFALO_WHR_G54S: 
     1234                return &platforms[WHR_G54S]; 
     1235        case BCM47XX_BOARD_BUFFALO_WHR_HP_G54: 
     1236                return &platforms[WHR_HP_G54]; 
     1237        case BCM47XX_BOARD_BUFFALO_WLA2_G54L: 
     1238                return &platforms[WLA2_G54L]; 
     1239        case BCM47XX_BOARD_BUFFALO_WZR_G300N: 
     1240                return &platforms[WZR_G300N]; 
     1241        case BCM47XX_BOARD_BUFFALO_WZR_RS_G54: 
     1242                return &platforms[WZR_RS_G54]; 
     1243        case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP: 
     1244                return &platforms[WZR_RS_G54HP]; 
     1245        case BCM47XX_BOARD_DELL_TM2300: 
     1246                return &platforms[TM2300]; 
     1247        case BCM47XX_BOARD_DLINK_DIR130: 
     1248                return &platforms[DIR130]; 
     1249        case BCM47XX_BOARD_DLINK_DIR330: 
     1250                return &platforms[DIR330]; 
     1251        case BCM47XX_BOARD_LINKSYS_E1000V1: 
     1252                return &platforms[E1000V1]; 
     1253        case BCM47XX_BOARD_LINKSYS_E3000V1: 
     1254                return &platforms[E3000V1]; 
     1255        case BCM47XX_BOARD_LINKSYS_WRT150NV1: 
     1256                return &platforms[WRT150NV1]; 
     1257        case BCM47XX_BOARD_LINKSYS_WRT150NV11: 
     1258                return &platforms[WRT150NV11]; 
     1259        case BCM47XX_BOARD_LINKSYS_WRT160NV1: 
     1260                return &platforms[WRT160NV1]; 
     1261        case BCM47XX_BOARD_LINKSYS_WRT160NV3: 
     1262                return &platforms[WRT160NV3]; 
     1263        case BCM47XX_BOARD_LINKSYS_WRT300NV11: 
     1264                return &platforms[WRT300NV11]; 
     1265        case BCM47XX_BOARD_LINKSYS_WRT54G3GV2: 
     1266                return &platforms[WRT54G3GV2_VF]; 
     1267        case BCM47XX_BOARD_LINKSYS_WRT610NV1: 
     1268                return &platforms[WRT610N]; 
     1269        case BCM47XX_BOARD_LINKSYS_WRT610NV2: 
     1270                return &platforms[WRT610NV2]; 
     1271        case BCM47XX_BOARD_MOTOROLA_WE800G: 
     1272                return &platforms[WE800G]; 
     1273        case BCM47XX_BOARD_MOTOROLA_WR850GP: 
     1274                return &platforms[WR850GP]; 
     1275        case BCM47XX_BOARD_MOTOROLA_WR850GV2V3: 
     1276                return &platforms[WR850GV2V3]; 
     1277        case BCM47XX_BOARD_UNKNOWN: 
     1278        case BCM47XX_BOARD_NON: 
     1279                printk(MODULE_NAME ": unknown board found, try legacy detect\n"); 
     1280                printk(MODULE_NAME ": please open a ticket at https://dev.openwrt.org and attach the complete nvram\n"); 
     1281                return platform_detect_legacy(); 
     1282        default: 
     1283                printk(MODULE_NAME ": board was detected as \"%s\", but not gpio configuration available\n", board_name); 
     1284                printk(MODULE_NAME ": now trying legacy detect\n"); 
     1285                return platform_detect_legacy(); 
     1286        } 
     1287} 
     1288 
    13131289static inline void ssb_maskset32(struct ssb_device *dev, 
    13141290                                  u16 offset, u32 mask, u32 set) 
Note: See TracChangeset for help on using the changeset viewer.