Skip to content

Commit

Permalink
pasemi_mac: Move the IRQ mapping from the PCI layer to the driver
Browse files Browse the repository at this point in the history
Fixes for ethernet IRQ mapping, to be done in the driver instead of in
the platform setup code.

Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Olof Johansson authored and Jeff Garzik committed May 8, 2007
1 parent 418aea7 commit 771f740
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 23 deletions.
13 changes: 0 additions & 13 deletions arch/powerpc/platforms/pasemi/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,19 +173,6 @@ static void __init pas_fixup_phb_resources(void)
}


void __devinit pas_pci_irq_fixup(struct pci_dev *dev)
{
/* DMA is special, 84 interrupts (128 -> 211), all but 128
* need to be mapped by hand here.
*/
if (dev->vendor == 0x1959 && dev->device == 0xa007) {
int i;
for (i = 129; i < 212; i++)
irq_create_mapping(NULL, i);
}
}


void __init pas_pci_init(void)
{
struct device_node *np, *root;
Expand Down
1 change: 0 additions & 1 deletion arch/powerpc/platforms/pasemi/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,5 +248,4 @@ define_machine(pas) {
.calibrate_decr = generic_calibrate_decr,
.progress = pas_progress,
.machine_check_exception = pas_machine_check_handler,
.pci_irq_fixup = pas_pci_irq_fixup,
};
30 changes: 21 additions & 9 deletions drivers/net/pasemi_mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
#include <linux/tcp.h>
#include <net/checksum.h>

#include <asm/irq.h>

#include "pasemi_mac.h"


Expand Down Expand Up @@ -531,6 +533,7 @@ static irqreturn_t pasemi_mac_tx_intr(int irq, void *data)
static int pasemi_mac_open(struct net_device *dev)
{
struct pasemi_mac *mac = netdev_priv(dev);
int base_irq;
unsigned int flags;
int ret;

Expand Down Expand Up @@ -594,28 +597,37 @@ static int pasemi_mac_open(struct net_device *dev)
netif_start_queue(dev);
netif_poll_enable(dev);

ret = request_irq(mac->dma_pdev->irq + mac->dma_txch,
&pasemi_mac_tx_intr, IRQF_DISABLED,
/* Interrupts are a bit different for our DMA controller: While
* it's got one a regular PCI device header, the interrupt there
* is really the base of the range it's using. Each tx and rx
* channel has it's own interrupt source.
*/

base_irq = virq_to_hw(mac->dma_pdev->irq);

mac->tx_irq = irq_create_mapping(NULL, base_irq + mac->dma_txch);
mac->rx_irq = irq_create_mapping(NULL, base_irq + 20 + mac->dma_txch);

ret = request_irq(mac->tx_irq, &pasemi_mac_tx_intr, IRQF_DISABLED,
mac->tx->irq_name, dev);
if (ret) {
dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n",
mac->dma_pdev->irq + mac->dma_txch, ret);
base_irq + mac->dma_txch, ret);
goto out_tx_int;
}

ret = request_irq(mac->dma_pdev->irq + 20 + mac->dma_rxch,
&pasemi_mac_rx_intr, IRQF_DISABLED,
ret = request_irq(mac->rx_irq, &pasemi_mac_rx_intr, IRQF_DISABLED,
mac->rx->irq_name, dev);
if (ret) {
dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n",
mac->dma_pdev->irq + 20 + mac->dma_rxch, ret);
base_irq + 20 + mac->dma_rxch, ret);
goto out_rx_int;
}

return 0;

out_rx_int:
free_irq(mac->dma_pdev->irq + mac->dma_txch, dev);
free_irq(mac->tx_irq, dev);
out_tx_int:
netif_poll_disable(dev);
netif_stop_queue(dev);
Expand Down Expand Up @@ -699,8 +711,8 @@ static int pasemi_mac_close(struct net_device *dev)
pci_write_config_dword(mac->dma_pdev,
PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0);

free_irq(mac->dma_pdev->irq + mac->dma_txch, dev);
free_irq(mac->dma_pdev->irq + 20 + mac->dma_rxch, dev);
free_irq(mac->tx_irq, dev);
free_irq(mac->rx_irq, dev);

/* Free resources */
pasemi_mac_free_rx_resources(dev);
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/pasemi_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ struct pasemi_mac {

struct pasemi_mac_txring *tx;
struct pasemi_mac_rxring *rx;
unsigned long tx_irq;
unsigned long rx_irq;
};

/* Software status descriptor (desc_info) */
Expand Down

0 comments on commit 771f740

Please sign in to comment.