@@ -1381,10 +1381,10 @@ static int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
13811381
13821382static int mv88e6xxx_port_db_dump_fid (struct mv88e6xxx_chip * chip ,
13831383 u16 fid , u16 vid , int port ,
1384- struct switchdev_obj * obj ,
1385- switchdev_obj_dump_cb_t * cb )
1384+ dsa_fdb_dump_cb_t * cb , void * data )
13861385{
13871386 struct mv88e6xxx_atu_entry addr ;
1387+ bool is_static ;
13881388 int err ;
13891389
13901390 addr .state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED ;
@@ -1401,24 +1401,12 @@ static int mv88e6xxx_port_db_dump_fid(struct mv88e6xxx_chip *chip,
14011401 if (addr .trunk || (addr .portvec & BIT (port )) == 0 )
14021402 continue ;
14031403
1404- if (obj -> id == SWITCHDEV_OBJ_ID_PORT_FDB ) {
1405- struct switchdev_obj_port_fdb * fdb ;
1406-
1407- if (!is_unicast_ether_addr (addr .mac ))
1408- continue ;
1409-
1410- fdb = SWITCHDEV_OBJ_PORT_FDB (obj );
1411- fdb -> vid = vid ;
1412- ether_addr_copy (fdb -> addr , addr .mac );
1413- if (addr .state == MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC )
1414- fdb -> ndm_state = NUD_NOARP ;
1415- else
1416- fdb -> ndm_state = NUD_REACHABLE ;
1417- } else {
1418- return - EOPNOTSUPP ;
1419- }
1404+ if (!is_unicast_ether_addr (addr .mac ))
1405+ continue ;
14201406
1421- err = cb (obj );
1407+ is_static = (addr .state ==
1408+ MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC );
1409+ err = cb (addr .mac , vid , is_static , data );
14221410 if (err )
14231411 return err ;
14241412 } while (!is_broadcast_ether_addr (addr .mac ));
@@ -1427,8 +1415,7 @@ static int mv88e6xxx_port_db_dump_fid(struct mv88e6xxx_chip *chip,
14271415}
14281416
14291417static int mv88e6xxx_port_db_dump (struct mv88e6xxx_chip * chip , int port ,
1430- struct switchdev_obj * obj ,
1431- switchdev_obj_dump_cb_t * cb )
1418+ dsa_fdb_dump_cb_t * cb , void * data )
14321419{
14331420 struct mv88e6xxx_vtu_entry vlan = {
14341421 .vid = chip -> info -> max_vid ,
@@ -1441,7 +1428,7 @@ static int mv88e6xxx_port_db_dump(struct mv88e6xxx_chip *chip, int port,
14411428 if (err )
14421429 return err ;
14431430
1444- err = mv88e6xxx_port_db_dump_fid (chip , fid , 0 , port , obj , cb );
1431+ err = mv88e6xxx_port_db_dump_fid (chip , fid , 0 , port , cb , data );
14451432 if (err )
14461433 return err ;
14471434
@@ -1455,7 +1442,7 @@ static int mv88e6xxx_port_db_dump(struct mv88e6xxx_chip *chip, int port,
14551442 break ;
14561443
14571444 err = mv88e6xxx_port_db_dump_fid (chip , vlan .fid , vlan .vid , port ,
1458- obj , cb );
1445+ cb , data );
14591446 if (err )
14601447 return err ;
14611448 } while (vlan .vid < chip -> info -> max_vid );
@@ -1464,14 +1451,13 @@ static int mv88e6xxx_port_db_dump(struct mv88e6xxx_chip *chip, int port,
14641451}
14651452
14661453static int mv88e6xxx_port_fdb_dump (struct dsa_switch * ds , int port ,
1467- struct switchdev_obj_port_fdb * fdb ,
1468- switchdev_obj_dump_cb_t * cb )
1454+ dsa_fdb_dump_cb_t * cb , void * data )
14691455{
14701456 struct mv88e6xxx_chip * chip = ds -> priv ;
14711457 int err ;
14721458
14731459 mutex_lock (& chip -> reg_lock );
1474- err = mv88e6xxx_port_db_dump (chip , port , & fdb -> obj , cb );
1460+ err = mv88e6xxx_port_db_dump (chip , port , cb , data );
14751461 mutex_unlock (& chip -> reg_lock );
14761462
14771463 return err ;
0 commit comments