|
@@ -0,0 +1,142 @@
|
|
|
|
+/// Use mdio_alloc and mdio_register instead of miiphy_register
|
|
|
|
+///
|
|
|
|
+//# Stop using the oldest mii interface in drivers
|
|
|
|
+//
|
|
|
|
+// Confidence: High
|
|
|
|
+// Copyright: (C) 2016 Joe Hershberger. GPLv2.
|
|
|
|
+// Comments:
|
|
|
|
+// Options: --include-headers --recursive-includes --local-includes -I include
|
|
|
|
+
|
|
|
|
+@ mii_reg @
|
|
|
|
+expression devname;
|
|
|
|
+identifier readfunc, writefunc;
|
|
|
|
+@@
|
|
|
|
+
|
|
|
|
++ int retval;
|
|
|
|
+- miiphy_register(devname, readfunc, writefunc);
|
|
|
|
++ struct mii_dev *mdiodev = mdio_alloc();
|
|
|
|
++ if (!mdiodev) return -ENOMEM;
|
|
|
|
++ strncpy(mdiodev->name, devname, MDIO_NAME_LEN);
|
|
|
|
++ mdiodev->read = readfunc;
|
|
|
|
++ mdiodev->write = writefunc;
|
|
|
|
++
|
|
|
|
++ retval = mdio_register(mdiodev);
|
|
|
|
++ if (retval < 0) return retval;
|
|
|
|
+
|
|
|
|
+@ update_read_sig @
|
|
|
|
+identifier mii_reg.readfunc;
|
|
|
|
+identifier name0, addr0, reg0, output;
|
|
|
|
+type addrT, outputT;
|
|
|
|
+@@
|
|
|
|
+
|
|
|
|
+- readfunc (
|
|
|
|
+- const char *name0,
|
|
|
|
+- addrT addr0,
|
|
|
|
+- addrT reg0,
|
|
|
|
+- outputT *output
|
|
|
|
+- )
|
|
|
|
++ readfunc (
|
|
|
|
++ struct mii_dev *bus,
|
|
|
|
++ int addr0,
|
|
|
|
++ int devad,
|
|
|
|
++ int reg0
|
|
|
|
++ )
|
|
|
|
+ {
|
|
|
|
+ ...
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+@ update_read_impl @
|
|
|
|
+identifier mii_reg.readfunc;
|
|
|
|
+identifier update_read_sig.output;
|
|
|
|
+type update_read_sig.outputT;
|
|
|
|
+constant c;
|
|
|
|
+identifier retvar;
|
|
|
|
+expression E;
|
|
|
|
+@@
|
|
|
|
+
|
|
|
|
+ readfunc (...)
|
|
|
|
+ {
|
|
|
|
++ outputT output = 0;
|
|
|
|
+ ...
|
|
|
|
+(
|
|
|
|
+- return 0;
|
|
|
|
++ return *output;
|
|
|
|
+|
|
|
|
|
+ return c;
|
|
|
|
+|
|
|
|
|
+- return retvar;
|
|
|
|
++ if (retvar < 0)
|
|
|
|
++ return retvar;
|
|
|
|
++ return *output;
|
|
|
|
+|
|
|
|
|
+- return E;
|
|
|
|
++ int retval = E;
|
|
|
|
++ if (retval < 0)
|
|
|
|
++ return retval;
|
|
|
|
++ return *output;
|
|
|
|
+)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+@ update_read_impl2 @
|
|
|
|
+identifier mii_reg.readfunc;
|
|
|
|
+identifier update_read_sig.output;
|
|
|
|
+@@
|
|
|
|
+
|
|
|
|
+ readfunc (...)
|
|
|
|
+ {
|
|
|
|
+ <...
|
|
|
|
+(
|
|
|
|
+- *output
|
|
|
|
++ output
|
|
|
|
+|
|
|
|
|
+- output
|
|
|
|
++ &output
|
|
|
|
+)
|
|
|
|
+ ...>
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+@ update_read_name @
|
|
|
|
+identifier mii_reg.readfunc;
|
|
|
|
+identifier update_read_sig.name0;
|
|
|
|
+@@
|
|
|
|
+ readfunc (...) {
|
|
|
|
+ <...
|
|
|
|
+- name0
|
|
|
|
++ bus->name
|
|
|
|
+ ...>
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+@ update_write_sig @
|
|
|
|
+identifier mii_reg.writefunc;
|
|
|
|
+identifier name0, addr0, reg0, value0;
|
|
|
|
+type addrT, valueT;
|
|
|
|
+typedef u16;
|
|
|
|
+@@
|
|
|
|
+
|
|
|
|
+- writefunc (
|
|
|
|
+- const char *name0,
|
|
|
|
+- addrT addr0,
|
|
|
|
+- addrT reg0,
|
|
|
|
+- valueT value0
|
|
|
|
+- )
|
|
|
|
++ writefunc (
|
|
|
|
++ struct mii_dev *bus,
|
|
|
|
++ int addr0,
|
|
|
|
++ int devad,
|
|
|
|
++ int reg0,
|
|
|
|
++ u16 value0
|
|
|
|
++ )
|
|
|
|
+ {
|
|
|
|
+ ...
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+@ update_write_name @
|
|
|
|
+identifier mii_reg.writefunc;
|
|
|
|
+identifier update_write_sig.name0;
|
|
|
|
+@@
|
|
|
|
+ writefunc (...) {
|
|
|
|
+ <...
|
|
|
|
+- name0
|
|
|
|
++ bus->name
|
|
|
|
+ ...>
|
|
|
|
+ }
|