net/sonic: Refactor duplicated code
No functional change. Tested-by: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
888d0584af
commit
5d58c21c10
|
@ -147,39 +147,12 @@ static int sonic_probe1(struct net_device *dev)
|
|||
dev->dev_addr[i*2+1] = val >> 8;
|
||||
}
|
||||
|
||||
err = -ENOMEM;
|
||||
|
||||
/* Initialize the device structure. */
|
||||
|
||||
lp->dma_bitmode = SONIC_BITMODE32;
|
||||
|
||||
/* Allocate the entire chunk of memory for the descriptors.
|
||||
Note that this cannot cross a 64K boundary. */
|
||||
lp->descriptors = dma_alloc_coherent(lp->device,
|
||||
SIZEOF_SONIC_DESC *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode),
|
||||
&lp->descriptors_laddr,
|
||||
GFP_KERNEL);
|
||||
if (lp->descriptors == NULL)
|
||||
err = sonic_alloc_descriptors(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
/* Now set up the pointers to point to the appropriate places */
|
||||
lp->cda = lp->descriptors;
|
||||
lp->tda = lp->cda + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda = lp->tda + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra = lp->rda + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
|
||||
lp->cda_laddr = lp->descriptors_laddr;
|
||||
lp->tda_laddr = lp->cda_laddr + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda_laddr = lp->tda_laddr + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra_laddr = lp->rda_laddr + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
|
||||
dev->netdev_ops = &sonic_netdev_ops;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
|
||||
|
|
|
@ -186,33 +186,10 @@ static const struct net_device_ops macsonic_netdev_ops = {
|
|||
static int macsonic_init(struct net_device *dev)
|
||||
{
|
||||
struct sonic_local* lp = netdev_priv(dev);
|
||||
int err = sonic_alloc_descriptors(dev);
|
||||
|
||||
/* Allocate the entire chunk of memory for the descriptors.
|
||||
Note that this cannot cross a 64K boundary. */
|
||||
lp->descriptors = dma_alloc_coherent(lp->device,
|
||||
SIZEOF_SONIC_DESC *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode),
|
||||
&lp->descriptors_laddr,
|
||||
GFP_KERNEL);
|
||||
if (lp->descriptors == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Now set up the pointers to point to the appropriate places */
|
||||
lp->cda = lp->descriptors;
|
||||
lp->tda = lp->cda + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda = lp->tda + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra = lp->rda + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
|
||||
lp->cda_laddr = lp->descriptors_laddr;
|
||||
lp->tda_laddr = lp->cda_laddr + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda_laddr = lp->tda_laddr + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra_laddr = lp->rda_laddr + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
dev->netdev_ops = &macsonic_netdev_ops;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
|
|
|
@ -50,6 +50,42 @@ static void sonic_msg_init(struct net_device *dev)
|
|||
netif_dbg(lp, drv, dev, "%s", version);
|
||||
}
|
||||
|
||||
static int sonic_alloc_descriptors(struct net_device *dev)
|
||||
{
|
||||
struct sonic_local *lp = netdev_priv(dev);
|
||||
|
||||
/* Allocate a chunk of memory for the descriptors. Note that this
|
||||
* must not cross a 64K boundary. It is smaller than one page which
|
||||
* means that page alignment is a sufficient condition.
|
||||
*/
|
||||
lp->descriptors =
|
||||
dma_alloc_coherent(lp->device,
|
||||
SIZEOF_SONIC_DESC *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode),
|
||||
&lp->descriptors_laddr, GFP_KERNEL);
|
||||
|
||||
if (!lp->descriptors)
|
||||
return -ENOMEM;
|
||||
|
||||
lp->cda = lp->descriptors;
|
||||
lp->tda = lp->cda + SIZEOF_SONIC_CDA *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
lp->rda = lp->tda + SIZEOF_SONIC_TD * SONIC_NUM_TDS *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
lp->rra = lp->rda + SIZEOF_SONIC_RD * SONIC_NUM_RDS *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
|
||||
lp->cda_laddr = lp->descriptors_laddr;
|
||||
lp->tda_laddr = lp->cda_laddr + SIZEOF_SONIC_CDA *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
lp->rda_laddr = lp->tda_laddr + SIZEOF_SONIC_TD * SONIC_NUM_TDS *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
lp->rra_laddr = lp->rda_laddr + SIZEOF_SONIC_RD * SONIC_NUM_RDS *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Open/initialize the SONIC controller.
|
||||
*
|
||||
|
|
|
@ -342,6 +342,7 @@ static void sonic_multicast_list(struct net_device *dev);
|
|||
static int sonic_init(struct net_device *dev);
|
||||
static void sonic_tx_timeout(struct net_device *dev, unsigned int txqueue);
|
||||
static void sonic_msg_init(struct net_device *dev);
|
||||
static int sonic_alloc_descriptors(struct net_device *dev);
|
||||
|
||||
/* Internal inlines for reading/writing DMA buffers. Note that bus
|
||||
size and endianness matter here, whereas they don't for registers,
|
||||
|
|
|
@ -167,47 +167,11 @@ static int __init sonic_probe1(struct net_device *dev)
|
|||
dev->dev_addr[i*2+1] = val >> 8;
|
||||
}
|
||||
|
||||
/* Initialize the device structure. */
|
||||
|
||||
lp->dma_bitmode = SONIC_BITMODE32;
|
||||
|
||||
/*
|
||||
* Allocate local private descriptor areas in uncached space.
|
||||
* The entire structure must be located within the same 64kb segment.
|
||||
* A simple way to ensure this is to allocate twice the
|
||||
* size of the structure -- given that the structure is
|
||||
* much less than 64 kB, at least one of the halves of
|
||||
* the allocated area will be contained entirely in 64 kB.
|
||||
* We also allocate extra space for a pointer to allow freeing
|
||||
* this structure later on (in xtsonic_cleanup_module()).
|
||||
*/
|
||||
lp->descriptors = dma_alloc_coherent(lp->device,
|
||||
SIZEOF_SONIC_DESC *
|
||||
SONIC_BUS_SCALE(lp->dma_bitmode),
|
||||
&lp->descriptors_laddr,
|
||||
GFP_KERNEL);
|
||||
if (lp->descriptors == NULL) {
|
||||
err = -ENOMEM;
|
||||
err = sonic_alloc_descriptors(dev);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
lp->cda = lp->descriptors;
|
||||
lp->tda = lp->cda + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda = lp->tda + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra = lp->rda + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
|
||||
/* get the virtual dma address */
|
||||
|
||||
lp->cda_laddr = lp->descriptors_laddr;
|
||||
lp->tda_laddr = lp->cda_laddr + (SIZEOF_SONIC_CDA
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rda_laddr = lp->tda_laddr + (SIZEOF_SONIC_TD * SONIC_NUM_TDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
lp->rra_laddr = lp->rda_laddr + (SIZEOF_SONIC_RD * SONIC_NUM_RDS
|
||||
* SONIC_BUS_SCALE(lp->dma_bitmode));
|
||||
|
||||
dev->netdev_ops = &xtsonic_netdev_ops;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
|
|
Loading…
Reference in New Issue