switch: export name of device found via /proc
authorHauke Mehrtens <hauke@hauke-m.de>
Thu, 14 Feb 2013 12:36:52 +0000 (12:36 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Thu, 14 Feb 2013 12:36:52 +0000 (12:36 +0000)
SVN-Revision: 35596

package/switch/src/switch-adm.c
package/switch/src/switch-core.c
package/switch/src/switch-core.h
package/switch/src/switch-robo.c

index 2d0fcc35abf28f0aaee9d7cffe41f7baec78968e..8c0ddc6c9ac0180008c0d9dbf49f00f867b3fbe0 100644 (file)
@@ -578,6 +578,7 @@ static int __init adm_init(void)
                port_handlers: port,
                vlan_handlers: vlan,
        };
+       snprintf(driver.dev_name, SWITCH_NAME_BUFSZ, DRIVER_NAME);
 
        if (!detect_adm())
                return -ENODEV;
index ab0754c94ac184e1f66fcda01e09669bc507d6a0..fc8a6bf2c76df72863d5c9f3f32f90a495013413 100644 (file)
@@ -156,6 +156,12 @@ static int handle_driver_vlans(void *driver, char *buf, int nr)
        return sprintf(buf, "%i\n", vlans);
 }
 
+static int handle_driver_dev_name(void *driver, char *buf, int nr)
+{
+       char *dev_name = ((switch_driver *) driver)->dev_name;
+       return sprintf(buf, "%s\n", dev_name);
+}
+
 static void add_handler(switch_driver *driver, const switch_config *handler, struct proc_dir_entry *parent, int nr)
 {
        switch_priv *priv = (switch_priv *) driver->data;
@@ -242,6 +248,7 @@ switch_config global_driver_handlers[] = {
        {"cpuport", handle_driver_cpuport, NULL},
        {"ports", handle_driver_ports, NULL},
        {"vlans", handle_driver_vlans, NULL},
+       {"dev_name", handle_driver_dev_name, NULL},
        {NULL, NULL, NULL}
 };
 
index 7192f7b0f4a8cbf932c3ade1319bd43fb6feeeb3..cc520e4935344cf2c91c3f16538f7b8cb428b20e 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/version.h>
 #include <linux/list.h>
 #define SWITCH_MAX_BUFSZ       4096
+#define SWITCH_NAME_BUFSZ      16
 
 #define SWITCH_MEDIA_AUTO      1
 #define SWITCH_MEDIA_100       2
@@ -28,6 +29,7 @@ typedef struct {
        const switch_config *driver_handlers, *port_handlers, *vlan_handlers;
        void *data;
        void *priv;
+       char dev_name[SWITCH_NAME_BUFSZ];
 } switch_driver;
 
 typedef struct {
index 57240a3fd04a64b49f81ae7859d719825d9f7ded..f7159729b8842191aaf8b93c4f4b9ae4234eeccd 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2005 Felix Fietkau <nbd@nbd.name>
  * Copyright (C) 2008 Michael Buesch <mb@bu3sch.de>
+ * Copyright (C) 2013 Hauke Mehrtens <hauke@hauke-m.de>
  * Based on 'robocfg' by Oleg I. Vdovikin
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +41,7 @@
 #endif
 
 #define DRIVER_NAME            "bcm53xx"
-#define DRIVER_VERSION         "0.02"
+#define DRIVER_VERSION         "0.03"
 #define PFX                    "roboswitch: "
 
 #define ROBO_PHY_ADDR          0x1E    /* robo switch phy address */
@@ -862,6 +863,10 @@ static int __init robo_init(void)
                        driver.ports = 9;
                        driver.cpuport = 8;
                }
+               if (robo.is_5365)
+                       snprintf(driver.dev_name, SWITCH_NAME_BUFSZ, "BCM5365");
+               else
+                       snprintf(driver.dev_name, SWITCH_NAME_BUFSZ, "BCM5%s%x", robo.devid & 0xff00 ? "" : "3", robo.devid);
 
                return switch_register_driver(&driver);
        }