pci.c 1.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/*
 *  Atheros AR71XX/AR724X specific PCI setup code
 *
 *  Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com>
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License version 2 as published
 *  by the Free Software Foundation.
 */

#include <linux/pci.h>
12
#include <asm/mach-ath79/ath79.h>
13
#include <asm/mach-ath79/irq.h>
14
#include <asm/mach-ath79/pci.h>
G
Gabor Juhos 已提交
15
#include "pci.h"
16

17
static struct ar724x_pci_data *pci_data;
18 19
static int pci_data_size;

20
void ar724x_pci_add_data(struct ar724x_pci_data *data, int size)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
{
	pci_data	= data;
	pci_data_size	= size;
}

int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
{
	unsigned int devfn = dev->devfn;
	int irq = -1;

	if (devfn > pci_data_size - 1)
		return irq;

	irq = pci_data[devfn].irq;

	return irq;
}

int pcibios_plat_dev_init(struct pci_dev *dev)
{
	unsigned int devfn = dev->devfn;

	if (devfn > pci_data_size - 1)
		return PCIBIOS_DEVICE_NOT_FOUND;

	dev->dev.platform_data = pci_data[devfn].pdata;

	return PCIBIOS_SUCCESSFUL;
}
50 51 52 53

int __init ath79_register_pci(void)
{
	if (soc_is_ar724x())
54
		return ar724x_pcibios_init(ATH79_CPU_IRQ_IP2);
55 56 57

	return -ENODEV;
}