Loading...
/// 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;
+ strlcpy(mdiodev->name, devname, MDIO_NAME_LEN);
+ mdiodev->read = readfunc;
+ mdiodev->write = writefunc;
+ 
+ retval = mdio_register(mdiodev);
+ if (retval < 0) { mdio_free(mdiodev); 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
  ...>
  }