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