Dear Lucas Stach, > Avoid clutter in ueth_data. Individual drivers should not mess > with structures belonging to the core like this. > > Signed-off-by: Lucas Stach <d...@lynxeye.de> > --- > drivers/usb/eth/smsc95xx.c | 48 > ++++++++++++++++++++++++++++++++-------------- include/usb_ether.h > | 8 ++------ > 2 Dateien geändert, 36 Zeilen hinzugefügt(+), 20 Zeilen entfernt(-)
You might want to configure your locale ... otherwise, awesome :) > diff --git a/drivers/usb/eth/smsc95xx.c b/drivers/usb/eth/smsc95xx.c > index c62a8c1..4bf2a16 100644 > --- a/drivers/usb/eth/smsc95xx.c > +++ b/drivers/usb/eth/smsc95xx.c > @@ -25,6 +25,7 @@ > #include <usb.h> > #include <linux/mii.h> > #include "usb_ether.h" > +#include "malloc.h" > > /* SMSC LAN95xx based USB 2.0 Ethernet Devices */ > > @@ -146,6 +147,12 @@ > /* local vars */ > static int curr_eth_dev; /* index for name of next device detected */ > > +/* driver private */ > +struct smsc95xx_private { > + size_t rx_urb_size; /* maximum USB URB size */ > + u32 mac_cr; /* MAC control register value */ > + int have_hwaddr; /* 1 if we have a hardware MAC address */ > +}; > > /* > * Smsc95xx infrastructure commands > @@ -377,6 +384,7 @@ static int smsc95xx_init_mac_address(struct eth_device > *eth, static int smsc95xx_write_hwaddr(struct eth_device *eth) > { > struct ueth_data *dev = (struct ueth_data *)eth->priv; > + struct smsc95xx_private *priv = dev->dev_priv; > u32 addr_lo = __get_unaligned_le32(ð->enetaddr[0]); > u32 addr_hi = __get_unaligned_le16(ð->enetaddr[4]); > int ret; > @@ -392,7 +400,7 @@ static int smsc95xx_write_hwaddr(struct eth_device > *eth) return ret; > > debug("MAC %pM\n", eth->enetaddr); > - dev->have_hwaddr = 1; > + priv->have_hwaddr = 1; > return 0; > } > > @@ -425,19 +433,22 @@ static int smsc95xx_set_csums(struct ueth_data *dev, > > static void smsc95xx_set_multicast(struct ueth_data *dev) > { > + struct smsc95xx_private *priv = dev->dev_priv; > + > /* No multicast in u-boot */ > - dev->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); > + priv->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); > } > > /* starts the TX path */ > static void smsc95xx_start_tx_path(struct ueth_data *dev) > { > + struct smsc95xx_private *priv = dev->dev_priv; > u32 reg_val; > > /* Enable Tx at MAC */ > - dev->mac_cr |= MAC_CR_TXEN_; > + priv->mac_cr |= MAC_CR_TXEN_; > > - smsc95xx_write_reg(dev, MAC_CR, dev->mac_cr); > + smsc95xx_write_reg(dev, MAC_CR, priv->mac_cr); > > /* Enable Tx at SCSRs */ > reg_val = TX_CFG_ON_; > @@ -447,8 +458,10 @@ static void smsc95xx_start_tx_path(struct ueth_data > *dev) /* Starts the Receive path */ > static void smsc95xx_start_rx_path(struct ueth_data *dev) > { > - dev->mac_cr |= MAC_CR_RXEN_; > - smsc95xx_write_reg(dev, MAC_CR, dev->mac_cr); > + struct smsc95xx_private *priv = dev->dev_priv; > + > + priv->mac_cr |= MAC_CR_RXEN_; > + smsc95xx_write_reg(dev, MAC_CR, priv->mac_cr); > } > > /* > @@ -462,6 +475,7 @@ static int smsc95xx_init(struct eth_device *eth, bd_t > *bd) u32 burst_cap; > int timeout; > struct ueth_data *dev = (struct ueth_data *)eth->priv; > + struct smsc95xx_private *priv = (struct smsc95xx_private *)dev- >dev_priv; > #define TIMEOUT_RESOLUTION 50 /* ms */ > int link_detected; > > @@ -504,9 +518,9 @@ static int smsc95xx_init(struct eth_device *eth, bd_t > *bd) debug("timeout waiting for PHY Reset\n"); > return -1; > } > - if (!dev->have_hwaddr && smsc95xx_init_mac_address(eth, dev) == 0) > - dev->have_hwaddr = 1; > - if (!dev->have_hwaddr) { > + if (!priv->have_hwaddr && smsc95xx_init_mac_address(eth, dev) == 0) > + priv->have_hwaddr = 1; > + if (!priv->have_hwaddr) { > puts("Error: SMSC95xx: No MAC address set - set usbethaddr\n"); > return -1; > } > @@ -532,16 +546,16 @@ static int smsc95xx_init(struct eth_device *eth, bd_t > *bd) #ifdef TURBO_MODE > if (dev->pusb_dev->speed == USB_SPEED_HIGH) { > burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; > - dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; > + priv->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; > } else { > burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; > - dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; > + priv->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; > } > #else > burst_cap = 0; > - dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; > + priv->rx_urb_size = MAX_SINGLE_PACKET_SIZE; > #endif > - debug("rx_urb_size=%ld\n", (ulong)dev->rx_urb_size); > + debug("rx_urb_size=%ld\n", (ulong)priv->rx_urb_size); > > ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); > if (ret < 0) > @@ -606,7 +620,7 @@ static int smsc95xx_init(struct eth_device *eth, bd_t > *bd) if (ret < 0) > return ret; > > - ret = smsc95xx_read_reg(dev, MAC_CR, &dev->mac_cr); > + ret = smsc95xx_read_reg(dev, MAC_CR, &priv->mac_cr); > if (ret < 0) > return ret; > > @@ -857,6 +871,12 @@ int smsc95xx_eth_probe(struct usb_device *dev, > unsigned int ifnum, return 0; > } > dev->privptr = (void *)ss; > + > + /* alloc driver private */ > + ss->dev_priv = calloc(1, sizeof(struct smsc95xx_private)); > + if (!ss->dev_priv) > + return 0; > + > return 1; > } > > diff --git a/include/usb_ether.h b/include/usb_ether.h > index a7fb26b..7c7aecb 100644 > --- a/include/usb_ether.h > +++ b/include/usb_ether.h > @@ -50,12 +50,8 @@ struct ueth_data { > unsigned char protocol; /* .............. */ > unsigned char irqinterval; /* Intervall for IRQ Pipe */ > > - /* private fields for each driver can go here if needed */ > -#ifdef CONFIG_USB_ETHER_SMSC95XX > - size_t rx_urb_size; /* maximum USB URB size */ > - u32 mac_cr; /* MAC control register value */ > - int have_hwaddr; /* 1 if we have a hardware MAC address */ > -#endif > + /* driver private */ > + void *dev_priv; > }; > > /* _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot