mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-02 01:26:32 +00:00
net: introduce transparent driver private in ueth_data
Avoid clutter in ueth_data. Individual drivers should not mess with structures belonging to the core like this. Signed-off-by: Lucas Stach <dev@lynxeye.de> Reviewed-by: Marek Vasut <marex@denx.de> Acked-by: Marek Vasut <marex@denx.de> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
8a0eccb105
commit
e1dbdf9109
2 changed files with 37 additions and 20 deletions
|
@ -25,6 +25,7 @@
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
#include <linux/mii.h>
|
#include <linux/mii.h>
|
||||||
#include "usb_ether.h"
|
#include "usb_ether.h"
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
/* SMSC LAN95xx based USB 2.0 Ethernet Devices */
|
/* SMSC LAN95xx based USB 2.0 Ethernet Devices */
|
||||||
|
|
||||||
|
@ -146,6 +147,12 @@
|
||||||
/* local vars */
|
/* local vars */
|
||||||
static int curr_eth_dev; /* index for name of next device detected */
|
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
|
* 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)
|
static int smsc95xx_write_hwaddr(struct eth_device *eth)
|
||||||
{
|
{
|
||||||
struct ueth_data *dev = (struct ueth_data *)eth->priv;
|
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_lo = __get_unaligned_le32(ð->enetaddr[0]);
|
||||||
u32 addr_hi = __get_unaligned_le16(ð->enetaddr[4]);
|
u32 addr_hi = __get_unaligned_le16(ð->enetaddr[4]);
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -392,7 +400,7 @@ static int smsc95xx_write_hwaddr(struct eth_device *eth)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
debug("MAC %pM\n", eth->enetaddr);
|
debug("MAC %pM\n", eth->enetaddr);
|
||||||
dev->have_hwaddr = 1;
|
priv->have_hwaddr = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,19 +433,22 @@ static int smsc95xx_set_csums(struct ueth_data *dev,
|
||||||
|
|
||||||
static void smsc95xx_set_multicast(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 */
|
/* 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 */
|
/* starts the TX path */
|
||||||
static void smsc95xx_start_tx_path(struct ueth_data *dev)
|
static void smsc95xx_start_tx_path(struct ueth_data *dev)
|
||||||
{
|
{
|
||||||
|
struct smsc95xx_private *priv = dev->dev_priv;
|
||||||
u32 reg_val;
|
u32 reg_val;
|
||||||
|
|
||||||
/* Enable Tx at MAC */
|
/* 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 */
|
/* Enable Tx at SCSRs */
|
||||||
reg_val = TX_CFG_ON_;
|
reg_val = TX_CFG_ON_;
|
||||||
|
@ -447,8 +458,10 @@ static void smsc95xx_start_tx_path(struct ueth_data *dev)
|
||||||
/* Starts the Receive path */
|
/* Starts the Receive path */
|
||||||
static void smsc95xx_start_rx_path(struct ueth_data *dev)
|
static void smsc95xx_start_rx_path(struct ueth_data *dev)
|
||||||
{
|
{
|
||||||
dev->mac_cr |= MAC_CR_RXEN_;
|
struct smsc95xx_private *priv = dev->dev_priv;
|
||||||
smsc95xx_write_reg(dev, MAC_CR, dev->mac_cr);
|
|
||||||
|
priv->mac_cr |= MAC_CR_RXEN_;
|
||||||
|
smsc95xx_write_reg(dev, MAC_CR, priv->mac_cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -462,6 +475,8 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)
|
||||||
u32 burst_cap;
|
u32 burst_cap;
|
||||||
int timeout;
|
int timeout;
|
||||||
struct ueth_data *dev = (struct ueth_data *)eth->priv;
|
struct ueth_data *dev = (struct ueth_data *)eth->priv;
|
||||||
|
struct smsc95xx_private *priv =
|
||||||
|
(struct smsc95xx_private *)dev->dev_priv;
|
||||||
#define TIMEOUT_RESOLUTION 50 /* ms */
|
#define TIMEOUT_RESOLUTION 50 /* ms */
|
||||||
int link_detected;
|
int link_detected;
|
||||||
|
|
||||||
|
@ -504,9 +519,9 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)
|
||||||
debug("timeout waiting for PHY Reset\n");
|
debug("timeout waiting for PHY Reset\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!dev->have_hwaddr && smsc95xx_init_mac_address(eth, dev) == 0)
|
if (!priv->have_hwaddr && smsc95xx_init_mac_address(eth, dev) == 0)
|
||||||
dev->have_hwaddr = 1;
|
priv->have_hwaddr = 1;
|
||||||
if (!dev->have_hwaddr) {
|
if (!priv->have_hwaddr) {
|
||||||
puts("Error: SMSC95xx: No MAC address set - set usbethaddr\n");
|
puts("Error: SMSC95xx: No MAC address set - set usbethaddr\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -532,16 +547,16 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)
|
||||||
#ifdef TURBO_MODE
|
#ifdef TURBO_MODE
|
||||||
if (dev->pusb_dev->speed == USB_SPEED_HIGH) {
|
if (dev->pusb_dev->speed == USB_SPEED_HIGH) {
|
||||||
burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
|
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 {
|
} else {
|
||||||
burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
|
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
|
#else
|
||||||
burst_cap = 0;
|
burst_cap = 0;
|
||||||
dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE;
|
priv->rx_urb_size = MAX_SINGLE_PACKET_SIZE;
|
||||||
#endif
|
#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);
|
ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -606,7 +621,7 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -857,6 +872,12 @@ int smsc95xx_eth_probe(struct usb_device *dev, unsigned int ifnum,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dev->privptr = (void *)ss;
|
dev->privptr = (void *)ss;
|
||||||
|
|
||||||
|
/* alloc driver private */
|
||||||
|
ss->dev_priv = calloc(1, sizeof(struct smsc95xx_private));
|
||||||
|
if (!ss->dev_priv)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,12 +50,8 @@ struct ueth_data {
|
||||||
unsigned char protocol; /* .............. */
|
unsigned char protocol; /* .............. */
|
||||||
unsigned char irqinterval; /* Intervall for IRQ Pipe */
|
unsigned char irqinterval; /* Intervall for IRQ Pipe */
|
||||||
|
|
||||||
/* private fields for each driver can go here if needed */
|
/* driver private */
|
||||||
#ifdef CONFIG_USB_ETHER_SMSC95XX
|
void *dev_priv;
|
||||||
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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue