How does the user configure the address? Other than that, I don't see anything.
--joel On 8/21/2014 10:07 AM, Christian Mauderer wrote: > From: Christian Mauderer <christian.maude...@embedded-brains.de> > > This patch allows the user to configure the PHY address for the DWMAC driver > by > giving a pointer to a dwmac_user_cfg structure to network stak via > rtems_bsdnet_config.ifconfig->drv_ctrl. > --- > c/src/libchip/network/dwmac-common.h | 1 + > c/src/libchip/network/dwmac.c | 31 +++++++++++++++++++------------ > c/src/libchip/network/dwmac.h | 8 ++++++++ > 3 files changed, 28 insertions(+), 12 deletions(-) > > diff --git a/c/src/libchip/network/dwmac-common.h > b/c/src/libchip/network/dwmac-common.h > index b61b833..05bf941 100644 > --- a/c/src/libchip/network/dwmac-common.h > +++ b/c/src/libchip/network/dwmac-common.h > @@ -227,6 +227,7 @@ typedef struct { > struct mbuf **mbuf_addr_rx; > struct mbuf **mbuf_addr_tx; > const dwmac_cfg *CFG; > + int MDIO_BUS_ADDR; > } dwmac_common_context; > > struct dwmac_common_core_ops { > diff --git a/c/src/libchip/network/dwmac.c b/c/src/libchip/network/dwmac.c > index 20d87dc..499e02b 100644 > --- a/c/src/libchip/network/dwmac.c > +++ b/c/src/libchip/network/dwmac.c > @@ -131,7 +131,7 @@ static int dwmac_if_mdio_read( > if ( phy == -1 ) { > reg_value = MACGRP_GMII_ADDRESS_PHYSICAL_LAYER_ADDRESS_SET( > reg_value, > - self->CFG->MDIO_BUS_ADDR > + self->MDIO_BUS_ADDR > ); > } else { > reg_value = MACGRP_GMII_ADDRESS_PHYSICAL_LAYER_ADDRESS_SET( > @@ -187,7 +187,7 @@ static int dwmac_if_mdio_write( > if ( phy == -1 ) { > reg_value = MACGRP_GMII_ADDRESS_PHYSICAL_LAYER_ADDRESS_SET( > reg_value, > - self->CFG->MDIO_BUS_ADDR > + self->MDIO_BUS_ADDR > ); > } else { > reg_value = MACGRP_GMII_ADDRESS_PHYSICAL_LAYER_ADDRESS_SET( > @@ -347,7 +347,7 @@ static int dwmac_if_interface_stats( void *arg ) > volatile macgrp *macgrp = self->macgrp; > int media = 0; > bool media_ok = dwmac_if_media_status( > - self, &media, self->CFG->MDIO_BUS_ADDR ); > + self, &media, self->MDIO_BUS_ADDR ); > uint32_t oui; > uint8_t model; > uint8_t revision; > @@ -364,7 +364,7 @@ static int dwmac_if_interface_stats( void *arg ) > printf( "\n" ); > eno = dwmac_get_phy_info( > self, > - self->CFG->MDIO_BUS_ADDR, > + self->MDIO_BUS_ADDR, > &oui, > &model, > &revision ); > @@ -372,7 +372,7 @@ static int dwmac_if_interface_stats( void *arg ) > if ( eno == 0 ) { > printf( "PHY 0x%02x: OUI = 0x%04" PRIX32 ", Model = 0x%02" PRIX8 ", > Rev = " > "0x%02" PRIX8 "\n", > - self->CFG->MDIO_BUS_ADDR, > + self->MDIO_BUS_ADDR, > oui, > model, > revision ); > @@ -387,7 +387,7 @@ static int dwmac_if_interface_stats( void *arg ) > ); > } > } else { > - printf( "PHY %d communication error\n", self->CFG->MDIO_BUS_ADDR ); > + printf( "PHY %d communication error\n", self->MDIO_BUS_ADDR ); > } > > printf( "\nHardware counters:\n" ); > @@ -1250,7 +1250,7 @@ static int dwmac_update_autonegotiation_params( > dwmac_common_context *self ) > uint32_t value = self->macgrp->mac_configuration; > int media = 0; > bool media_ok = dwmac_if_media_status( > - self, &media, self->CFG->MDIO_BUS_ADDR ); > + self, &media, self->MDIO_BUS_ADDR ); > > > if ( media_ok ) { > @@ -2065,7 +2065,8 @@ static int dwmac_if_attach( > const dwmac_callback_cfg *CALLBACK = &driver_config->CALLBACK; > const dwmac_common_desc_ops *DESC_OPS = > (const dwmac_common_desc_ops *) driver_config->DESC_OPS->ops; > - > + const dwmac_user_cfg *user_cfg = > + (const dwmac_user_cfg *) bsd_config->drv_ctrl; > > assert( self != NULL ); > assert( bsd_config != NULL ); > @@ -2135,9 +2136,15 @@ static int dwmac_if_attach( > } > > if ( eno == 0 ) { > - assert( 32 >= driver_config->MDIO_BUS_ADDR ); > + if ( user_cfg == NULL ) { > + self->MDIO_BUS_ADDR = driver_config->MDIO_BUS_ADDR; > + } else { > + self->MDIO_BUS_ADDR = user_cfg->MDIO_BUS_ADDR; > + } > + > + assert( 32 >= self->MDIO_BUS_ADDR ); > > - if ( 32 < driver_config->MDIO_BUS_ADDR ) { > + if ( 32 < self->MDIO_BUS_ADDR ) { > eno = EINVAL; > } > } > @@ -2317,7 +2324,7 @@ int dwmac_if_read_from_phy( > > if ( arg != NULL ) { > eno = dwmac_if_mdio_read( > - self->CFG->MDIO_BUS_ADDR, > + self->MDIO_BUS_ADDR, > self, > phy_reg, > &value ); > @@ -2341,7 +2348,7 @@ int dwmac_if_write_to_phy( > > if ( arg != NULL ) { > eno = dwmac_if_mdio_write( > - self->CFG->MDIO_BUS_ADDR, > + self->MDIO_BUS_ADDR, > self, > phy_reg, > val ); > diff --git a/c/src/libchip/network/dwmac.h b/c/src/libchip/network/dwmac.h > index 9ccf75a..2220aa7 100644 > --- a/c/src/libchip/network/dwmac.h > +++ b/c/src/libchip/network/dwmac.h > @@ -31,6 +31,14 @@ > extern "C" { > #endif /* __cplusplus */ > > +/** @brief DWMAC user configuration structure. > + * > + * Gives the user the possibility to overwrite some configuration data. > + */ > +typedef struct { > + int MDIO_BUS_ADDR; > +} dwmac_user_cfg; > + > /** @brief PHY event. > * > * Data type to be used for PHY events and event sets. -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel