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