blob: 100f10293610950cdc484c6d1457e427ca7790d0 [file] [log] [blame]
Joe Hershberger63d98592016-08-08 11:28:37 -05001/// Use mdio_alloc and mdio_register instead of miiphy_register
2///
3//# Stop using the oldest mii interface in drivers
4//
5// Confidence: High
6// Copyright: (C) 2016 Joe Hershberger. GPLv2.
7// Comments:
8// Options: --include-headers --recursive-includes --local-includes -I include
9
10@ mii_reg @
11expression devname;
12identifier readfunc, writefunc;
13@@
14
15+ int retval;
16- miiphy_register(devname, readfunc, writefunc);
17+ struct mii_dev *mdiodev = mdio_alloc();
18+ if (!mdiodev) return -ENOMEM;
19+ strncpy(mdiodev->name, devname, MDIO_NAME_LEN);
20+ mdiodev->read = readfunc;
21+ mdiodev->write = writefunc;
22+
23+ retval = mdio_register(mdiodev);
24+ if (retval < 0) return retval;
25
26@ update_read_sig @
27identifier mii_reg.readfunc;
28identifier name0, addr0, reg0, output;
29type addrT, outputT;
30@@
31
32- readfunc (
33- const char *name0,
34- addrT addr0,
35- addrT reg0,
36- outputT *output
37- )
38+ readfunc (
39+ struct mii_dev *bus,
40+ int addr0,
41+ int devad,
42+ int reg0
43+ )
44 {
45 ...
46 }
47
48@ update_read_impl @
49identifier mii_reg.readfunc;
50identifier update_read_sig.output;
51type update_read_sig.outputT;
52constant c;
53identifier retvar;
54expression E;
55@@
56
57 readfunc (...)
58 {
59+ outputT output = 0;
60 ...
61(
62- return 0;
63+ return *output;
64|
65 return c;
66|
67- return retvar;
68+ if (retvar < 0)
69+ return retvar;
70+ return *output;
71|
72- return E;
73+ int retval = E;
74+ if (retval < 0)
75+ return retval;
76+ return *output;
77)
78 }
79
80@ update_read_impl2 @
81identifier mii_reg.readfunc;
82identifier update_read_sig.output;
83@@
84
85 readfunc (...)
86 {
87 <...
88(
89- *output
90+ output
91|
92- output
93+ &output
94)
95 ...>
96 }
97
98@ update_read_name @
99identifier mii_reg.readfunc;
100identifier update_read_sig.name0;
101@@
102 readfunc (...) {
103 <...
104- name0
105+ bus->name
106 ...>
107 }
108
109@ update_write_sig @
110identifier mii_reg.writefunc;
111identifier name0, addr0, reg0, value0;
112type addrT, valueT;
113typedef u16;
114@@
115
116- writefunc (
117- const char *name0,
118- addrT addr0,
119- addrT reg0,
120- valueT value0
121- )
122+ writefunc (
123+ struct mii_dev *bus,
124+ int addr0,
125+ int devad,
126+ int reg0,
127+ u16 value0
128+ )
129 {
130 ...
131 }
132
133@ update_write_name @
134identifier mii_reg.writefunc;
135identifier update_write_sig.name0;
136@@
137 writefunc (...) {
138 <...
139- name0
140+ bus->name
141 ...>
142 }