X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/9aaa8ffe66823392bb9d6d33dd97d22372a00f80..7adfa6c810d6a6d031abf913dfc5baa9b6ee14af:/package/broadcom-diag/src/diag.c diff --git a/package/broadcom-diag/src/diag.c b/package/broadcom-diag/src/diag.c index 6a95a8afb..090fc5e3d 100644 --- a/package/broadcom-diag/src/diag.c +++ b/package/broadcom-diag/src/diag.c @@ -30,8 +30,8 @@ #include #include #include +#include #include -extern struct sock *uevent_sock; extern u64 uevent_next_seqnum(void); #include "gpio.h" @@ -53,12 +53,17 @@ enum { WRTSL54GS, WRT54G3G, WRT54G3GV2_VF, - WRT160N, + WRT150NV1, + WRT150NV11, + WRT160NV1, + WRT160NV3, WRT300NV11, WRT350N, WRT600N, WRT600NV11, WRT610N, + WRT610NV2, + E3000V1, /* ASUS */ WLHDD, @@ -74,6 +79,7 @@ enum { WL520GU, ASUS_4702, WL700GE, + RTN16, /* Buffalo */ WBR2_G54, @@ -107,9 +113,12 @@ enum { /* Belkin */ BELKIN_UNKNOWN, + BELKIN_F7D4301, /* Netgear */ WGT634U, + WNR834BV1, + WNR834BV2, /* Trendware */ TEW411BRPP, @@ -137,6 +146,9 @@ enum { /* Microsoft */ MN700, + + /* Edimax */ + PS1208MFG, }; static void __init bcm4780_init(void) { @@ -274,8 +286,32 @@ static struct platform_t __initdata platforms[] = { { .name = "3g_blue", .gpio = 1 << 3, .polarity = NORMAL }, }, }, - [WRT160N] = { - .name = "Linksys WRT160N", + [WRT150NV1] = { + .name = "Linksys WRT150N V1", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "ses_green", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "ses_amber", .gpio = 1 << 3, .polarity = REVERSE }, + }, + }, + [WRT150NV11] = { + .name = "Linksys WRT150N V1.1", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "ses_green", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "ses_amber", .gpio = 1 << 3, .polarity = REVERSE }, + }, + }, + [WRT160NV1] = { + .name = "Linksys WRT160N v1.x", .buttons = { { .name = "reset", .gpio = 1 << 6 }, { .name = "ses", .gpio = 1 << 4 }, @@ -286,6 +322,18 @@ static struct platform_t __initdata platforms[] = { { .name = "ses_orange", .gpio = 1 << 3, .polarity = REVERSE }, }, }, + [WRT160NV3] = { + .name = "Linksys WRT160N V3", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 5 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "ses_blue", .gpio = 1 << 4, .polarity = REVERSE }, + { .name = "ses_orange", .gpio = 1 << 2, .polarity = REVERSE }, + }, + }, [WRT300NV11] = { .name = "Linksys WRT300N V1.1", .buttons = { @@ -359,6 +407,34 @@ static struct platform_t __initdata platforms[] = { { .name = "ses_blue", .gpio = 1 << 9, .polarity = REVERSE }, // WiFi protected setup LED blue }, }, + [WRT610NV2] = { + .name = "Linksys WRT610N V2", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 5, .polarity = NORMAL }, // Power LED + { .name = "usb", .gpio = 1 << 7, .polarity = NORMAL }, // USB LED + { .name = "ses_amber", .gpio = 1 << 0, .polarity = REVERSE }, // WiFi protected setup LED amber + { .name = "ses_blue", .gpio = 1 << 3, .polarity = REVERSE }, // WiFi protected setup LED blue + { .name = "wlan", .gpio = 1 << 1, .polarity = NORMAL }, // Wireless LED + }, + }, + [E3000V1] = { + .name = "Linksys E3000 V1", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "ses", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 5, .polarity = NORMAL }, // Power LED + { .name = "usb", .gpio = 1 << 7, .polarity = NORMAL }, // USB LED + { .name = "ses_amber", .gpio = 1 << 0, .polarity = REVERSE }, // WiFi protected setup LED amber + { .name = "ses_blue", .gpio = 1 << 3, .polarity = REVERSE }, // WiFi protected setup LED blue + { .name = "wlan", .gpio = 1 << 1, .polarity = NORMAL }, // Wireless LED + }, + }, /* Asus */ [WLHDD] = { .name = "ASUS WL-HDD", @@ -498,6 +574,17 @@ static struct platform_t __initdata platforms[] = { }, .platform_init = bcm4780_init, }, + [RTN16] = { + .name = "ASUS RT-N16", + .buttons = { + { .name = "reset", .gpio = 1 << 8 }, + { .name = "ses", .gpio = 1 << 5 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 1, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 7, .polarity = NORMAL }, + }, + }, /* Buffalo */ [WHR_G54S] = { .name = "Buffalo WHR-G54S", @@ -744,6 +831,19 @@ static struct platform_t __initdata platforms[] = { { .name = "connected", .gpio = 1 << 0, .polarity = NORMAL }, }, }, + [BELKIN_F7D4301] = { + .name = "Belkin PlayMax F7D4301", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + { .name = "wps", .gpio = 1 << 8 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 11, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 13, .polarity = REVERSE }, + { .name = "led0", .gpio = 1 << 14, .polarity = REVERSE }, + { .name = "led1", .gpio = 1 << 15, .polarity = REVERSE }, + }, + }, /* Netgear */ [WGT634U] = { .name = "Netgear WGT634U", @@ -754,6 +854,28 @@ static struct platform_t __initdata platforms[] = { { .name = "power", .gpio = 1 << 3, .polarity = NORMAL }, }, }, + /* Netgear */ + [WNR834BV1] = { + .name = "Netgear WNR834B V1", + .buttons = { /* TODO: add reset button and confirm LEDs - GPIO from dd-wrt */ }, + .leds = { + { .name = "power", .gpio = 1 << 4, .polarity = REVERSE }, + { .name = "diag", .gpio = 1 << 5, .polarity = REVERSE }, + { .name = "wlan", .gpio = 1 << 6, .polarity = REVERSE }, + }, + }, + /* Netgear */ + [WNR834BV2] = { + .name = "Netgear WNR834B V2", + .buttons = { + { .name = "reset", .gpio = 1 << 6 }, + }, + .leds = { + { .name = "power", .gpio = 1 << 2, .polarity = NORMAL }, + { .name = "diag", .gpio = 1 << 3, .polarity = NORMAL }, + { .name = "connected", .gpio = 1 << 7, .polarity = NORMAL }, + }, + }, /* Trendware */ [TEW411BRPP] = { .name = "Trendware TEW411BRP+", @@ -770,8 +892,7 @@ static struct platform_t __initdata platforms[] = { [STI_NAS] = { .name = "SimpleTech SimpleShare NAS", .buttons = { - { .name = "reset", .gpio = 1 << 7 }, // on back, hardwired, always resets device regardless OS state - { .name = "power", .gpio = 1 << 0 }, // on back + { .name = "reset", .gpio = 1 << 0 }, // Power button on back, named reset to enable failsafe. }, .leds = { { .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, // actual name ready @@ -884,6 +1005,17 @@ static struct platform_t __initdata platforms[] = { { .name = "power", .gpio = 1 << 6, .polarity = NORMAL }, }, }, + /* Edimax */ + [PS1208MFG] = { + .name = "Edimax PS-1208MFG", + .buttons = { + { .name = "reset", .gpio = 1 << 4 }, + }, + .leds = { + { .name = "status", .gpio = 1 << 1, .polarity = NORMAL }, + { .name = "wlan", .gpio = 1 << 0, .polarity = NORMAL }, + }, + }, }; static struct platform_t __init *platform_detect(void) @@ -925,6 +1057,10 @@ static struct platform_t __init *platform_detect(void) return &platforms[WL520GU]; if (startswith(buf,"WL330GE-")) /* WL330GE-* */ return &platforms[WL330GE]; + if (startswith(buf,"RT-N16-")) /* RT-N16-* */ + return &platforms[RTN16]; + if (startswith(buf,"F7D4301")) /* F7D4301* */ + return &platforms[BELKIN_F7D4301]; } /* Based on "ModelId" */ @@ -974,6 +1110,19 @@ static struct platform_t __init *platform_detect(void) return &platforms[WRT600N]; } + /* + * Normally, these would go inside the "CFE based - newer hardware" block below; however, during early init, the + * "pmon_ver" variable is not available on the E3000v1 (and probably the WRT610Nv2 also). Until this is figured out, + * these will need to remain here in order for platform detection to work. + */ + if (!strcmp(boardnum, "42")) { /* Linksys */ + if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "E300") && !strcmp(getvar("boot_hw_ver"), "1.0")) + return &platforms[E3000V1]; + + if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "WRT610N") && !strcmp(getvar("boot_hw_ver"), "2.0")) + return &platforms[WRT610NV2]; + } + if (startswith(getvar("pmon_ver"), "CFE")) { /* CFE based - newer hardware */ if (!strcmp(boardnum, "42")) { /* Linksys */ @@ -992,8 +1141,20 @@ static struct platform_t __init *platform_detect(void) if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1")) return &platforms[WRTSL54GS]; - if (!strcmp(boardtype, "0x0472")) - return &platforms[WRT160N]; + if (!strcmp(boardtype, "0x0472")) { + if(!strcmp(getvar("boot_hw_model"), "WRT150N")) { + if(!strcmp(getvar("boot_hw_ver"), "1")) + return &platforms[WRT150NV1]; + else if(!strcmp(getvar("boot_hw_ver"), "1.1")) + return &platforms[WRT150NV11]; + } + else if(!strcmp(getvar("boot_hw_model"), "WRT160N")) { + if(!strcmp(getvar("boot_hw_ver"), "1.0")) + return &platforms[WRT160NV1]; + else if(!strcmp(getvar("boot_hw_ver"), "3.0")) + return &platforms[WRT160NV3]; + } + } /* default to WRT54G */ return &platforms[WRT54G]; @@ -1035,6 +1196,13 @@ static struct platform_t __init *platform_detect(void) return &platforms[WDNetCenter]; } + if (!strcmp(boardtype,"0x0472") && !strcmp(getvar("cardbus"), "1")) { /* Netgear WNR834B V1 and V2*/ + if (!strcmp(boardnum, "08") || !strcmp(boardnum, "8")) + return &platforms[WNR834BV1]; + if (!strcmp(boardnum, "01") || !strcmp(boardnum, "1")) + return &platforms[WNR834BV2]; + } + } else { /* PMON based - old stuff */ if ((simple_strtoul(getvar("GemtekPmonVer"), NULL, 0) == 9) && (simple_strtoul(getvar("et0phyaddr"), NULL, 0) == 30)) { @@ -1104,9 +1272,13 @@ static struct platform_t __init *platform_detect(void) if (startswith(boardnum, "04FN")) /* SimpleTech SimpleShare */ return &platforms[STI_NAS]; - if (!strcmp(getvar("boardnum"), "10") && !strcmp(getvar("boardrev"), "0x13")) /* D-Link DWL-3150 */ + if (!strcmp(boardnum, "10") && !strcmp(getvar("boardrev"), "0x13")) /* D-Link DWL-3150 */ return &platforms[DWL3150]; + if (!strcmp(boardnum, "01") && !strcmp(boardtype, "0x048e") && /* Edimax PS1208MFG */ + !strcmp(getvar("status_gpio"), "1")) /* gpio based detection */ + return &platforms[PS1208MFG]; + /* not found */ return NULL; } @@ -1151,9 +1323,6 @@ static void hotplug_button(struct work_struct *work) struct event_t *event = container_of(work, struct event_t, wq); char *s; - if (!uevent_sock) - return; - event->skb = alloc_skb(2048, GFP_KERNEL); s = skb_put(event->skb, strlen(event->action) + 2); @@ -1161,7 +1330,7 @@ static void hotplug_button(struct work_struct *work) fill_event(event); NETLINK_CB(event->skb).dst_group = 1; - netlink_broadcast(uevent_sock, event->skb, 0, 1, GFP_KERNEL); + broadcast_uevent(event->skb, 0, 1, GFP_KERNEL); kfree(event); }